mirror of
https://github.com/novoid/guess-filename.py.git
synced 2026-02-16 13:24:15 +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
|
#!/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
|
||||||
|
|
|
||||||
|
|
@ -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"))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue