From aebb7adb2c800b1efc7c7d1877a16609cfe76b65 Mon Sep 17 00:00:00 2001 From: "Ira W. Snyder" Date: Fri, 15 Dec 2006 21:17:23 -0800 Subject: [PATCH] Initial commit of the rarslave project. --- Makefile | 11 ++++++++++ rarslave-test.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++ rarslave.py | 54 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 117 insertions(+) create mode 100644 Makefile create mode 100644 rarslave-test.py create mode 100644 rarslave.py diff --git a/Makefile b/Makefile new file mode 100644 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 index 0000000..21aadb8 --- /dev/null +++ b/rarslave-test.py @@ -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 index 0000000..7e38816 --- /dev/null +++ b/rarslave.py @@ -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 () -- 2.25.1