Initial commit of the rarslave project.
authorIra W. Snyder <devel@irasnyder.com>
Sat, 16 Dec 2006 05:17:23 +0000 (21:17 -0800)
committerIra W. Snyder <devel@irasnyder.com>
Sat, 16 Dec 2006 05:17:23 +0000 (21:17 -0800)
Makefile [new file with mode: 0644]
rarslave-test.py [new file with mode: 0644]
rarslave.py [new file with mode: 0644]

diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..6cef507
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,11 @@
+all:
+       @echo "Use another target, this has no meaning"
+
+clean:
+       rm -f *.pyc
+
+test:
+       python rarslave-test.py
+
+run:
+       @echo "not implemented yet, for safety"
diff --git a/rarslave-test.py b/rarslave-test.py
new file mode 100644 (file)
index 0000000..21aadb8
--- /dev/null
@@ -0,0 +1,52 @@
+#!/usr/bin/env python
+# vim: set ts=4 sts=4 sw=4 textwidth=92 :
+
+import os, sys, unittest
+from rarslave import *
+
+class rarslavetest (unittest.TestCase):
+       def setUp (self):
+               pass
+
+       def tearDown (self):
+               pass
+
+       def testGetBasenameNone (self):
+               QNAME = '[something] some names.txt'
+               ANAME = '[something] some names.txt'
+
+               # Tests for an exension that should not be stripped
+               self.assertEquals (ANAME, get_basename (QNAME))
+
+       def testGetBasenameSingle (self):
+               QNAME = '[something] some names.par2'
+               ANAME = '[something] some names'
+
+               self.assertEquals (ANAME, get_basename (QNAME))
+
+       def testGetBasenameMulti (self):
+               QNAME = '[a.f.k.] The Melancholy of Haruhi Suzumiya - 13.avi.001'
+               ANAME = '[a.f.k.] The Melancholy of Haruhi Suzumiya - 13'
+
+               self.assertEquals (ANAME, get_basename (QNAME))
+
+       def testGetBasenameMulti2 (self):
+               QNAME = '[AonE-AnY]_Ah_My_Goddess_-_Sorezore_no_Tsubasa_-_13_[WS][E6380C3F].avi.vol00+01.PAR2'
+               ANAME = '[AonE-AnY]_Ah_My_Goddess_-_Sorezore_no_Tsubasa_-_13_[WS][E6380C3F]'
+
+               self.assertEquals (ANAME, get_basename (QNAME))
+
+       def testFindLikelyFilesBadDir (self):
+               DIR = '/fake/dir'
+               
+               self.assertRaises (ValueError, find_likely_files, "fake", DIR)
+
+       def testFindAllPar2Files (self):
+               DIR = '/fake/dir'
+
+               self.assertRaises (ValueError, find_all_par2_files, DIR)
+
+
+if __name__ == '__main__':
+       unittest.main ()
+
diff --git a/rarslave.py b/rarslave.py
new file mode 100644 (file)
index 0000000..7e38816
--- /dev/null
@@ -0,0 +1,54 @@
+#!/usr/bin/env python
+# vim: set ts=4 sts=4 sw=4 textwidth=112 :
+
+import re, os, sys
+
+def get_basename (name):
+       """Strips most kinds of endings from a filename"""
+
+       regex = '^(.+)\.(par2|vol\d+\+\d+|\d\d\d|part\d+|rar|zip|avi|mp4|mkv|ogm)$'
+       r = re.compile (regex, re.IGNORECASE)
+       done = False
+
+       while not done:
+               done = True
+
+               if r.match (name):
+                       g = r.match (name).groups()
+                       name = g[0]
+                       done = False
+
+       return name
+
+def find_likely_files (name, dir):
+       """Finds files which are likely to be part of the set corresponding
+          to $name in the directory $dir"""
+
+       if not os.path.isdir (os.path.abspath (dir)):
+               raise ValueError # bad directory given
+
+       dir = os.path.abspath (dir)
+       ename = re.escape (name)
+       regex = re.compile ('^%s.*$' % (ename, ))
+
+       return [f for f in os.listdir (dir) if regex.match (f)]
+
+def find_all_par2_files (dir):
+       """Finds all par2 files in a directory"""
+
+       if not os.path.isdir (os.path.abspath (dir)):
+               raise ValueError # bad directory given
+
+       dir = os.path.abspath (dir)
+       regex = re.compile ('^.*\.par2$', re.IGNORECASE)
+
+       # Find all files
+       return [f for f in os.listdir (dir) if regex.match (f)]
+
+
+
+def main ():
+       print find_all_par2_files ('/home/irasnyd/downloads/test_material/01/')
+
+if __name__ == '__main__':
+       main ()