[SCM] morituri/master: * morituri/common/common.py: Add a persisted cache so that we can store pickles on discs. Automatically delete them if the class version is newer than the object's. * morituri/rip/cd.py: Use it.

js at users.alioth.debian.org js at users.alioth.debian.org
Sun Oct 19 20:09:04 UTC 2014


The following commit has been merged in the master branch:
commit 59e831013546ff8c983d674b7c7552d01debcf29
Author: Thomas Vander Stichele <thomas (at) apestaart (dot) org>
Date:   Sun May 24 18:13:16 2009 +0000

    	* morituri/common/common.py:
    	  Add a persisted cache so that we can store pickles on discs.
    	  Automatically delete them if the class version is newer than
    	  the object's.
    	* morituri/rip/cd.py:
    	  Use it.

diff --git a/ChangeLog b/ChangeLog
index a8f6aff..efaf915 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2009-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* morituri/common/common.py:
+	  Add a persisted cache so that we can store pickles on discs.
+	  Automatically delete them if the class version is newer than
+	  the object's.
+	* morituri/rip/cd.py:
+	  Use it.
+
 2009-05-23  Thomas Vander Stichele  <thomas at apestaart dot org>
 
 	* morituri/image/table.py:
diff --git a/morituri/common/common.py b/morituri/common/common.py
index 7c7896a..3fea509 100644
--- a/morituri/common/common.py
+++ b/morituri/common/common.py
@@ -136,3 +136,43 @@ class Persister(object):
         handle = open(self._path)
         import pickle
         self.object = pickle.load(handle)
+
+    def delete(self):
+        self.object = None
+        os.unlink(self._path)
+
+
+class PersistedCache(object):
+    """
+    I wrap a directory of persisted objects.
+    """
+
+    path = None
+
+    def __init__(self, path):
+        self.path = path
+        try:
+            os.makedirs(self.path)
+        except OSError, e:
+            if e.errno != 17: # FIXME
+                raise
+
+
+    def _getPath(self, key):
+        return os.path.join(self.path, '%s.pickle' % key)
+
+    def get(self, key):
+        """
+        Returns the persister for the given key.
+        """
+        persister = Persister(self._getPath(key))
+        if persister.object:
+            if hasattr(persister.object, 'version'):
+                o = persister.object
+                if o.version < o.__class__.version:
+                    print 'object needs upgrade'
+                    persister.delete()
+
+        return persister
+
+    
diff --git a/morituri/rip/cd.py b/morituri/rip/cd.py
index 04aca4b..0c57f8e 100644
--- a/morituri/rip/cd.py
+++ b/morituri/rip/cd.py
@@ -119,6 +119,20 @@ def musicbrainz(discid):
     return metadata
 
 def getPath(outdir, template, metadata, i):
+    """
+    Based on the template, get a complete path for the given track,
+    minus extension.
+    Also works for the disc name, using disc variables for the template.
+
+    @param outdir:   the directory where to write the files
+    @type  outdir:   str
+    @param template: the template for writing the file
+    @type  template: str
+    @param metadata:
+    @type  metadata: L{DiscMetadata}
+    @param i:        track number (0 for HTOA)
+    @type  i:        int
+    """
     # returns without extension
 
     v = {}
@@ -208,7 +222,10 @@ class Rip(logcommand.LogCommand):
         responses = cache.retrieve(url)
 
         # now, read the complete index table, which is slower
-        ptable = common.Persister(self.options.table_pickle or None)
+        path = os.path.join(os.path.expanduser('~'), '.morituri', 'cache',
+            'table')
+        pcache = common.PersistedCache(path)
+        ptable = pcache.get(ittoc.getCDDBDiscId())
         if not ptable.object:
             t = cdrdao.ReadTableTask(device=self.parentCommand.options.device)
             function(runner, t)

-- 
morituri packaging



More information about the pkg-multimedia-commits mailing list