diff --git a/guessfilename.py b/guessfilename.py index 3f69bf5..a617d72 100755 --- a/guessfilename.py +++ b/guessfilename.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Time-stamp: <2016-03-05 23:06:47 vk> +# Time-stamp: <2016-03-05 23:43:01 vk> ## TODO: ## * fix parts marked with «FIXXME» @@ -92,6 +92,8 @@ class GuessFilename(object): Contains methods of the guess filename domain """ + oldfilename = None + FILENAME_TAG_SEPARATOR = u' -- ' BETWEEN_TAG_SEPARATOR = u' ' @@ -108,7 +110,7 @@ class GuessFilename(object): TAGS_INDEX = 12 EXTENSION_INDEX = 15 - EURO_CHARGE_REGEX = re.compile(u"^(.+[-_ ])?(\d+([,.]\d+)?)[-_ ]?(EUR|€)([-_ ].+)?$") + EURO_CHARGE_REGEX = re.compile(u"^(.+[-_ ])?(\d+([,.]\d+)?)[-_ ]?(EUR|€)([-_ .].+)?$") EURO_CHARGE_INDEX = 2 def adding_tags(self, tagarray, newtags): @@ -154,7 +156,7 @@ class GuessFilename(object): logging.debug(u" ⤷ \"%s\"" % (newfilename)) os.rename(oldfilename, newfilename) - def derive_new_filename_from_old_filename(self, oldfilename): + def derive_new_filename_from_old_filename(s, oldfilename): """ Analyses the old filename and returns a new one if feasible. If not, False is returned instead. @@ -163,16 +165,18 @@ class GuessFilename(object): @param return: False or new oldfilename """ - datetimestr, basefilename, tags, extension = self.split_filename_entities(oldfilename) + datetimestr, basefilename, tags, extension = s.split_filename_entities(oldfilename) - if (" a1 " or " A1 ") in oldfilename and self.has_euro_charge(oldfilename) and datetimestr: + if s.contains_one_of(oldfilename, [" A1 ", " a1 "]) and s.has_euro_charge(oldfilename) and datetimestr: return datetimestr + \ - " A1 Festnetz-Internet " + self.get_euro_charge(oldfilename) + \ - " -- " + ' '.join(adding_tags(tags, ['scan', 'finance', 'bill'])) + \ - ".pdf" + u" A1 Festnetz-Internet " + s.get_euro_charge(oldfilename) + \ + u" € -- " + ' '.join(s.adding_tags(tags, ['scan', 'finance', 'bill'])) + \ + u".pdf" pass ## FIXXME: more cases! + return False ## no new filename found + def handle_file(self, oldfilename, dryrun): """ @param oldfilename: string containing one file name @@ -194,15 +198,8 @@ class GuessFilename(object): logging.error("Skipping \"%s\" because this tool only renames existing file names." % oldfilename) return - new_filename = self.derive_new_filename_from_old_filename(oldfilename) - if new_filename: - self.rename_file(oldfilename, new_filename, dryrun, options.quiet) - #else: - # new_filename = self.derive_new_filename_from_content(oldfilename) - - pass ## FIXXME: ========================================= marker - - return new_filename + self.oldfilename = oldfilename + def split_filename_entities(self, filename): """ @@ -228,6 +225,22 @@ class GuessFilename(object): tags, \ components.group(self.EXTENSION_INDEX) + def contains_one_of(self, string, entries): + """ + Returns true, if the string contains one of the strings within entries array + """ + + assert(type(string) == unicode or type(string) == str) + assert(type(entries) == list) + assert(len(string)>0) + assert(len(entries)>0) + + for entry in entries: + if entry in string: + return True + + return False + def has_euro_charge(self, string): """ Returns true, if the string contains a number with a €-currency diff --git a/guessfilename_test.py b/guessfilename_test.py index e46c2a2..0c55ebe 100644 --- a/guessfilename_test.py +++ b/guessfilename_test.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8; mode: python; -*- -# Time-stamp: <2016-03-05 23:06:19 vk> +# Time-stamp: <2016-03-05 23:38:58 vk> import unittest from guessfilename import GuessFilename @@ -22,11 +22,23 @@ class TestGuessFilename(unittest.TestCase): def test_derive_new_filename_from_old_filename(self): -# self.assertEquals(self.guess_filename.derive_new_filename_from_old_filename(u"2016-03-05 a1 12,34 €.pdf"), -# "2016-03-05 A1 Festnetz-Internet 12,34 € -- scan finance bill.pdf") + self.assertEquals(self.guess_filename.derive_new_filename_from_old_filename(u"2016-03-05 a1 12,34 €.pdf"), + u"2016-03-05 A1 Festnetz-Internet 12,34 € -- scan finance bill.pdf") self.assertEquals(self.guess_filename.derive_new_filename_from_old_filename(u"2016-03-05 A1 12.34 EUR.pdf"), - "2016-03-05 A1 Festnetz-Internet 12.34 € -- scan finance bill.pdf") + u"2016-03-05 A1 Festnetz-Internet 12.34 € -- scan finance bill.pdf") + def test_contains_one_of(self): + + self.assertTrue(self.guess_filename.contains_one_of(u"foo bar baz", ['foo'])) + self.assertTrue(self.guess_filename.contains_one_of(u"foo bar baz", [u'foo'])) + self.assertTrue(self.guess_filename.contains_one_of(u"foo bar baz", [u'bar'])) + self.assertTrue(self.guess_filename.contains_one_of(u"foo bar baz", [u'ba'])) + self.assertTrue(self.guess_filename.contains_one_of(u"foo bar baz", [u'x', u'ba', u'yuio'])) + self.assertFalse(self.guess_filename.contains_one_of(u"foo bar baz", ['xfoo'])) + self.assertFalse(self.guess_filename.contains_one_of(u"foo bar baz", [u'xfoo'])) + self.assertFalse(self.guess_filename.contains_one_of(u"foo bar baz", [u'xbar'])) + self.assertFalse(self.guess_filename.contains_one_of(u"foo bar baz", [u'xba'])) + self.assertFalse(self.guess_filename.contains_one_of(u"foo bar baz", [u'x', u'xba', u'yuio'])) def test_has_euro_charge(self): @@ -46,6 +58,8 @@ class TestGuessFilename(unittest.TestCase): self.assertTrue(self.guess_filename.has_euro_charge(u"foo bar 12,34 € baz")) self.assertTrue(self.guess_filename.has_euro_charge(u"foo bar 12.34 € baz")) self.assertTrue(self.guess_filename.has_euro_charge(u"foo bar 12.34 € baz.extension")) + self.assertTrue(self.guess_filename.has_euro_charge(u"2016-03-05 A1 12.34 EUR.pdf")) + self.assertTrue(self.guess_filename.has_euro_charge(u"2016-03-05 A1 Festnetz-Internet 12.34 € -- scan finance bill.pdf")) self.assertFalse(self.guess_filename.has_euro_charge(u"1234")) self.assertFalse(self.guess_filename.has_euro_charge(u"foo bar baz")) self.assertFalse(self.guess_filename.has_euro_charge(u"1234eur"))