contains_one_of

This commit is contained in:
Karl Voit 2016-03-05 23:43:39 +01:00
parent 01be5358a6
commit ffe08ff4d0
2 changed files with 48 additions and 21 deletions

View file

@ -1,6 +1,6 @@
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Time-stamp: <2016-03-05 23:06:47 vk> # Time-stamp: <2016-03-05 23:43:01 vk>
## TODO: ## TODO:
## * fix parts marked with «FIXXME» ## * fix parts marked with «FIXXME»
@ -92,6 +92,8 @@ class GuessFilename(object):
Contains methods of the guess filename domain Contains methods of the guess filename domain
""" """
oldfilename = None
FILENAME_TAG_SEPARATOR = u' -- ' FILENAME_TAG_SEPARATOR = u' -- '
BETWEEN_TAG_SEPARATOR = u' ' BETWEEN_TAG_SEPARATOR = u' '
@ -108,7 +110,7 @@ class GuessFilename(object):
TAGS_INDEX = 12 TAGS_INDEX = 12
EXTENSION_INDEX = 15 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 EURO_CHARGE_INDEX = 2
def adding_tags(self, tagarray, newtags): def adding_tags(self, tagarray, newtags):
@ -154,7 +156,7 @@ class GuessFilename(object):
logging.debug(u"\"%s\"" % (newfilename)) logging.debug(u"\"%s\"" % (newfilename))
os.rename(oldfilename, 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. Analyses the old filename and returns a new one if feasible.
If not, False is returned instead. If not, False is returned instead.
@ -163,16 +165,18 @@ class GuessFilename(object):
@param return: False or new oldfilename @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 + \ return datetimestr + \
" A1 Festnetz-Internet " + self.get_euro_charge(oldfilename) + \ u" A1 Festnetz-Internet " + s.get_euro_charge(oldfilename) + \
" -- " + ' '.join(adding_tags(tags, ['scan', 'finance', 'bill'])) + \ u" -- " + ' '.join(s.adding_tags(tags, ['scan', 'finance', 'bill'])) + \
".pdf" u".pdf"
pass ## FIXXME: more cases! pass ## FIXXME: more cases!
return False ## no new filename found
def handle_file(self, oldfilename, dryrun): def handle_file(self, oldfilename, dryrun):
""" """
@param oldfilename: string containing one file name @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) logging.error("Skipping \"%s\" because this tool only renames existing file names." % oldfilename)
return return
new_filename = self.derive_new_filename_from_old_filename(oldfilename) self.oldfilename = 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
def split_filename_entities(self, filename): def split_filename_entities(self, filename):
""" """
@ -228,6 +225,22 @@ class GuessFilename(object):
tags, \ tags, \
components.group(self.EXTENSION_INDEX) 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): def has_euro_charge(self, string):
""" """
Returns true, if the string contains a number with a -currency Returns true, if the string contains a number with a -currency

View file

@ -1,6 +1,6 @@
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf-8; mode: 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 import unittest
from guessfilename import GuessFilename from guessfilename import GuessFilename
@ -22,11 +22,23 @@ class TestGuessFilename(unittest.TestCase):
def test_derive_new_filename_from_old_filename(self): 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"), 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") 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"), 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): 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")) 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"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"1234"))
self.assertFalse(self.guess_filename.has_euro_charge(u"foo bar baz")) self.assertFalse(self.guess_filename.has_euro_charge(u"foo bar baz"))
self.assertFalse(self.guess_filename.has_euro_charge(u"1234eur")) self.assertFalse(self.guess_filename.has_euro_charge(u"1234eur"))