[Python-modules-commits] r7242 - in packages (6 files)

mithrandi-guest at users.alioth.debian.org mithrandi-guest at users.alioth.debian.org
Wed Dec 31 13:41:20 UTC 2008


    Date: Wednesday, December 31, 2008 @ 13:41:20
  Author: mithrandi-guest
Revision: 7242

[svn-inject] Installing original source of mutagen

Added:
  packages/mutagen/
  packages/mutagen/branches/
  packages/mutagen/branches/upstream/
  packages/mutagen/branches/upstream/current/
  packages/mutagen/branches/upstream/current/mutagen/
  packages/mutagen/branches/upstream/current/mutagen/__init__.py

Added: packages/mutagen/branches/upstream/current/mutagen/__init__.py
===================================================================
--- packages/mutagen/branches/upstream/current/mutagen/__init__.py	                        (rev 0)
+++ packages/mutagen/branches/upstream/current/mutagen/__init__.py	2008-12-31 13:41:20 UTC (rev 7242)
@@ -0,0 +1,201 @@
+#! /usr/bin/env python
+#
+# mutagen aims to be an all purpose media tagging library
+# Copyright (C) 2005  Michael Urman
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of version 2 of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# $Id: __init__.py 4275 2008-06-01 06:32:37Z piman $
+#
+
+"""Mutagen aims to be an all purpose tagging library.
+
+    import mutagen.[format]
+    metadata = mutagen.[format].Open(filename)
+
+metadata acts like a dictionary of tags in the file. Tags are generally a
+list of string-like values, but may have additional methods available
+depending on tag or format. They may also be entirely different objects
+for certain keys, again depending on format.
+"""
+
+version = (1, 14)
+version_string = ".".join(map(str, version))
+
+import warnings
+
+import mutagen._util
+
+class Metadata(object):
+    """An abstract dict-like object.
+
+    Metadata is the base class for many of the tag objects in Mutagen.
+    """
+
+    def __init__(self, *args, **kwargs):
+        if args or kwargs:
+            self.load(*args, **kwargs)
+
+    def load(self, *args, **kwargs):
+        raise NotImplementedError
+
+    def save(self, filename=None):
+        raise NotImplementedError
+
+    def delete(self, filename=None):
+        raise NotImplementedError
+
+class FileType(mutagen._util.DictMixin):
+    """An abstract object wrapping tags and audio stream information.
+
+    Attributes:
+    info -- stream information (length, bitrate, sample rate)
+    tags -- metadata tags, if any
+
+    Each file format has different potential tags and stream
+    information.
+
+    FileTypes implement an interface very similar to Metadata; the
+    dict interface, save, load, and delete calls on a FileType call
+    the appropriate methods on its tag data.
+    """
+
+    info = None
+    tags = None
+    filename = None
+    _mimes = ["application/octet-stream"]
+
+    def __init__(self, filename=None, *args, **kwargs):
+        if filename is None:
+            warnings.warn("FileType constructor requires a filename",
+                          DeprecationWarning)
+        else:
+            self.load(filename, *args, **kwargs)
+
+    def load(self, filename, *args, **kwargs):
+        raise NotImplementedError
+
+    def __getitem__(self, key):
+        """Look up a metadata tag key.
+
+        If the file has no tags at all, a KeyError is raised.
+        """
+        if self.tags is None: raise KeyError, key
+        else: return self.tags[key]
+
+    def __setitem__(self, key, value):
+        """Set a metadata tag.
+
+        If the file has no tags, an appropriate format is added (but
+        not written until save is called).
+        """
+        if self.tags is None:
+            self.add_tags()
+        self.tags[key] = value
+
+    def __delitem__(self, key):
+        """Delete a metadata tag key.
+
+        If the file has no tags at all, a KeyError is raised.
+        """
+        if self.tags is None: raise KeyError, key
+        else: del(self.tags[key])
+
+    def keys(self):
+        """Return a list of keys in the metadata tag.
+
+        If the file has no tags at all, an empty list is returned.
+        """
+        if self.tags is None: return []
+        else: return self.tags.keys()
+
+    def delete(self, filename=None):
+        """Remove tags from a file."""
+        if self.tags is not None:
+            if filename is None:
+                filename = self.filename
+            else:
+                warnings.warn(
+                    "delete(filename=...) is deprecated, reload the file",
+                    DeprecationWarning)
+            return self.tags.delete(filename)
+
+    def save(self, filename=None, **kwargs):
+        """Save metadata tags."""
+        if filename is None:
+            filename = self.filename
+        else:
+            warnings.warn(
+                "save(filename=...) is deprecated, reload the file",
+                DeprecationWarning)
+        if self.tags is not None:
+            return self.tags.save(filename, **kwargs)
+        else: raise ValueError("no tags in file")
+
+    def pprint(self):
+        """Print stream information and comment key=value pairs."""
+        stream = "%s (%s)" % (self.info.pprint(), self.mime[0])
+        try: tags = self.tags.pprint()
+        except AttributeError:
+            return stream
+        else: return stream + ((tags and "\n" + tags) or "")
+
+    def add_tags(self):
+        raise NotImplementedError
+
+    def __get_mime(self):
+        mimes = []
+        for Kind in type(self).__mro__:
+            for mime in getattr(Kind, '_mimes', []):
+                if mime not in mimes:
+                    mimes.append(mime)
+        return mimes
+
+    mime = property(__get_mime)
+
+def File(filename, options=None):
+    """Guess the type of the file and try to open it.
+
+    The file type is decided by several things, such as the first 128
+    bytes (which usually contains a file type identifier), the
+    filename extension, and the presence of existing tags.
+
+    If no appropriate type could be found, None is returned.
+    """
+
+    if options is None:
+        from mutagen.asf import ASF
+        from mutagen.apev2 import APEv2File
+        from mutagen.flac import FLAC
+        from mutagen.id3 import ID3FileType
+        from mutagen.mp3 import MP3
+        from mutagen.oggflac import OggFLAC
+        from mutagen.oggspeex import OggSpeex
+        from mutagen.oggtheora import OggTheora
+        from mutagen.oggvorbis import OggVorbis
+        from mutagen.trueaudio import TrueAudio
+        from mutagen.wavpack import WavPack
+        from mutagen.mp4 import MP4
+        from mutagen.musepack import Musepack
+        from mutagen.monkeysaudio import MonkeysAudio
+        from mutagen.optimfrog import OptimFROG
+        options = [MP3, TrueAudio, OggTheora, OggSpeex, OggVorbis, OggFLAC,
+                   FLAC, APEv2File, MP4, ID3FileType, WavPack, Musepack,
+                   MonkeysAudio, OptimFROG, ASF]
+
+    if not options:
+        return None
+
+    fileobj = file(filename, "rb")
+    try:
+        header = fileobj.read(128)
+        results = [Kind.score(filename, fileobj, header) for Kind in options]
+    finally:
+        fileobj.close()
+    results = zip(results, options)
+    results.sort()
+    score, Kind = results[-1]
+    if score > 0: return Kind(filename)
+    else: return None




More information about the Python-modules-commits mailing list