mirror of
https://github.com/novoid/guess-filename.py.git
synced 2026-02-16 05:14:16 +00:00
contains_one_of
This commit is contained in:
parent
01be5358a6
commit
ffe08ff4d0
2 changed files with 48 additions and 21 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"))
|
||||
|
|
|
|||
Loading…
Reference in a new issue