Switch branches/tags
Nothing to show
Find file History
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


py-ApeTag (formally pylibape/py-apev2tag) is a pure Python library for
manipulating both APEv2 and ID3v1 tags.  It aims for standards compliance with
the APE spec (http://wiki.hydrogenaudio.org/index.php?title=APEv2_specification). 
APE is the standard tagging format for Musepack (.mpc) and Monkey's Audio files
(.ape), and it can also be used with mp3s as an alternative to the mess that is
ID3v2.x (technically, it can be used on any file type and is not limited to
storing just audio file metadata).

The module is in written in pure Python, so it should be useable on all 
platforms that Python supports.  It has been tested on Windows and OpenBSD.  
The minimum python version required should be 2.2, since the code uses
list comprehensions (testing has only been done on 2.4).  Modifying the code to
work with Python 2.0 shouldn't be difficult, though there aren't any plans to
do so.

The library is complete, but it hasn't been widely used, so there may still be
some bugs in it.  I haven't found any bugs in my normal use of it that I
haven't already fixed, though.

The public functions should be named obviously.  There are functions for
creating, replacing, updating, and deleting APE and ID3 tags both separately
and together.  There are also functions for getting the fields and the raw
string for the tags, as well as checking for existence of tags.  There are also
advanced modify functions that take callback functions allowing complete
manipulation of the tags.  Public function arguments, return values, and
various notes are stored in the module docstring.

To run the tests for the library, run python test_ApeTag.py.

If you find any bugs, would like additional documentation, or want to submit a
patch, please use Sourceforge (http://sourceforge.net/projects/pylibape/).

The most current source code can be accessed via github
(http://github.com/jeremyevans/ape_tag_libs/tree/master).  Note that the library
isn't modified on a regular basis, so it is unlikely to be different from the
latest release.

Thank you for downloading this library. I hope you find it useful. 

1.2 - 2007-11-06
- Raise error if APE footer flags wrong, instead of assuming no tag exists in 

1.1 - 2007-11-06
- Allow use of read only flag on APE tag itself

1.0 - 2007-01-13
- Replace manual test files with automated unittest-based test suite
- Ensure UTF-8 encoding for tag items marked "external"
- Check for matching header and footer tag sizes and item counts
- Return boolean for hastags
- Join values with commas when creating ID3 tags from APE fields, instead of 
  taking the first value
- Work with small file sizes (including zero byte files)
- In updatetags, make removefields case insensitive when removing fields
  from the ID3 tag
- Fix createid3 being defined the same as updateid3, and thus giving errors on
  files without ID3 tags
- Make APEv2 Date field correspond to ID3v1 year field if it is an integer
- Add shebang line for running library directly

0.12 - 2005-09-03
- Convert the the library to use callback functions internally for modifying
- New has* functions to check for the existence of tags
- New print* functions for pretty printing tag fields
- New modify* functions that allow for user defined callbacks
- Ability to call the library on the command line with filenames (prints the 
  tag fields for each file)
- Fix bugs in id3 tagging when both tags are modified simultaneously
- Small performance improvements offsetting the speed reduction due to callback

0.11 - 2005-04-02
- Add getrawtags and gettagfields public functions that return a tuple of 
  strings and dicts, respectively for the APE and ID3 tags.  This results in a
  substantial speedup compared to calling the functions for the APE and ID3 
  tags separately.
- Add ability to specify type and readonly flag for ApeItems on initialization
- Only use unicode for utf8 ApeItems; binary, external, and reserved items use
  regular strings.

0.10 - 2005-03-21
- Better automated conversion from APE fields to ID3 fields in functions that
  modify both tags
- Update the ID3 and APE tags at the same time if modifying both tags (instead 
  of opening and closing the file twice)

0.9 - 2005-03-20
- Rename module from apev2tag to ApeTag
- Remove apev2tag and id3tag functions, the helper functions that debuted in
  0.8 are now the public interface to the library
- Significant internal changes, most notably error handling during APE tag
  parsing (fixing a possible denial of service caused by a malicious tag) and
  automated closing of files opened by the library
- Return values for the APE create, update, replace, and getfields functions
  have changed, they now returns of dict with ApeItem (a list subclass with
  unicode strings) values, instead of the previous dict with values that could
  be strings, unicode strings, could be lists, or dicts.
- Easier benchmarking in speedtest, defaults to test all functions
- Added ability to read, create, and modify the read only tag flag.
- Added ability to modify the maximum size of APE tags (default still 8K)

0.8 - 2005-03-13
- Helper functions such as createtags, deletetags, getrawapev2, getid3fields,
  etc. added so you don't have to call id3tag and apev2tag directly with the
  appropriate action.
- You can now pass a filename instead of a file-like object to any of the
  public functions.
- Revised tests removing much of the duplicative code
- Line endings for all files converted to LF (was a mix of LF and CRLF before)
0.7 - 2005-02-05
- Entire code base refactored, resulting in major performance enhancements in
  parsing and writing APEv2 tags (over twice as fast as 0.6)
- Code made simpler, more modular, and less duplicative
- Internal functions changed to private functions
- TagError class simplified, now raised similar to other exceptions
- Private module variables added (acting as constants)
- Import of string removed (hasn't been necessary since 0.5)

0.6 - 2004-07-17
- Rename module from pylibape to apev2tag
- Rename functions from ape and id3 to apev2tag and id3tag
- Instead of searching through the last 8K of the file, use the information in
  the APEv2 tag footer to locate the rest of the tag
- Minor fixes elsewhere

0.5 - 2004-02-14
- Initial public release