No description
Find a file
Adrian Sampson a28f930c52 transaction objects to control DB access
In an attempt to finally address the longstanding SQLite locking issues, I'm
introducing a way to explicitly, lexically scope transactions. The Transaction
class is a context manager that always fully fetches after SELECTs and
automatically commits on exit. No direct access to the library is allowed, so
all changes will eventually be committed and all queries will be completed. This
will also provide a debugging mechanism to show where concurrent transactions
are beginning and ending.

To support composition (transaction reentrancy), an internal, per-Library stack
of transactions is maintained. Commits only happen when the outermost
transaction exits. This means that, while it's possible to introduce atomicity
bugs by invoking Library methods outside of a transaction, you can conveniently
call them *without* a currently-active transaction to get a single atomic
action.

Note that this "transaction stack" concepts assumes a single Library object per
thread. Because we need to duplicate Library objects for concurrent access due
to sqlite3 limitation already, this is fine for now. Later, the interface should
provide one transaction stack per thread for shared Library objects.
2012-05-06 23:24:05 -07:00
beets transaction objects to control DB access 2012-05-06 23:24:05 -07:00
beetsplug transaction objects to control DB access 2012-05-06 23:24:05 -07:00
docs transaction objects to control DB access 2012-05-06 23:24:05 -07:00
test transaction objects to control DB access 2012-05-06 23:24:05 -07:00
.gitignore Created a .gitignore for the group 2012-01-27 17:38:20 -05:00
.hgignore Sphinx documentation skeleton 2011-09-16 13:57:15 -07:00
.hgtags Added tag 1.0b13 for changeset b6c10981014a 2012-03-16 09:58:48 -07:00
.travis.yml Travis CI: only 2.7 until tests fixed; plugin deps 2012-03-18 15:13:08 -07:00
beet misc. overdue code cleanup 2010-07-09 18:07:15 -07:00
LICENSE add readme and news files 2010-06-09 12:37:26 -07:00
MANIFEST.in clean up genre canonicalization (#264) 2011-12-01 12:14:11 -08:00
README.rst link to dev tarball (allowing pip install beets==dev) 2012-02-14 21:00:37 -08:00
setup.py version bump: b14 2012-03-17 12:03:28 -07:00

Beets is the media library management system for obsessive-compulsive music
geeks.

The purpose of beets is to get your music collection right once and for all.
It catalogs your collection, automatically improving its metadata as it goes.
It then provides a bouquet of tools for manipulating and accessing your music.

Here's an example of beets' brainy tag corrector doing its thing::

  $ beet import ~/music/ladytron
  Tagging: Ladytron - Witching Hour
  (Similarity: 98.4%)
   * Last One Standing -> The Last One Standing
   * Beauty -> Beauty*2
   * White Light Generation -> Whitelightgenerator
   * All the Way -> All the Way...

Because beets is designed as a library, it can do almost anything you can
imagine for your music collection. Via `plugins`_, beets becomes a panacea:

- Embed and extract album art from files' metadata.
- Listen to your library with a music player that speaks the `MPD`_ protocol
  and works with a staggering variety of interfaces.
- Fetch lyrics for all your songs from databases on the Web.
- Manage your `MusicBrainz music collection`_.
- Analyze music files' metadata from the command line.
- Clean up crufty tags left behind by other, less-awesome tools.
- Browse your music library graphically through a Web browser and play it in any
  browser that supports `HTML5 Audio`_.

If beets doesn't do what you want yet, `writing your own plugin`_ is
shockingly simple if you know a little Python.

.. _plugins: http://readthedocs.org/docs/beets/-/plugins/
.. _MPD: http://mpd.wikia.com/
.. _MusicBrainz music collection: http://musicbrainz.org/show/collection/
.. _writing your own plugin:
    http://readthedocs.org/docs/beets/-/plugins/#writing-plugins
.. _HTML5 Audio:
    http://www.w3.org/TR/html-markup/audio.html

Read More
---------

Learn more about beets at `its Web site`_. Follow `@b33ts`_ on Twitter for
news and updates.

You can install beets by typing ``pip install beets``. (Or, to live on the
cutting edge, type ``pip install beets==dev`` for the `latest source`_.) Check
out the `Getting Started`_ guide to learn more about installing and using beets.

.. _its Web site: http://beets.radbox.org/
.. _Getting Started: http://readthedocs.org/docs/beets/-/guides/main.html
.. _@b33ts: http://twitter.com/b33ts/
.. _latest source: https://github.com/sampsyo/beets/tarball/master#egg=beets-dev

Authors
-------

Beets is by `Adrian Sampson`_.

.. _Adrian Sampson: mailto:adrian@radbox.org