Skip to content

Commit

Permalink
Further test/lint improvements (#128)
Browse files Browse the repository at this point in the history
* Further test/lint improvements

* Tidy

* Type factor

* Update test
  • Loading branch information
inverse authored Oct 2, 2021
1 parent 0394581 commit 1445ea6
Show file tree
Hide file tree
Showing 8 changed files with 39 additions and 36 deletions.
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,9 @@ venv.bak/
/site

# mypy
.mypy_cache/
/.mypy_cache/


/tests/output/

# End of https://www.gitignore.io/api/python
4 changes: 4 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,7 @@ repos:
rev: 3.9.2
hooks:
- id: flake8
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v0.910
hooks:
- id: mypy
2 changes: 2 additions & 0 deletions .pytest.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[pytest]
addopts = --disable-socket
2 changes: 1 addition & 1 deletion phockup.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ def parse_args(args=sys.argv[1:]):
'-d',
'--date',
action='store',
type=Date().parse,
type=Date.parse,
help="""\
Specify date format for OUTPUTDIR directories.
Expand Down
1 change: 1 addition & 0 deletions requirements-dev.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@
pytest
pytest-mock
pytest-cov
pytest-socket
pre-commit
23 changes: 13 additions & 10 deletions src/date.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@
from datetime import datetime


class Date():
class Date:
def __init__(self, filename=None):
self.filename = filename

def parse(self, date):
@staticmethod
def parse(date: str) -> str:
date = date.replace('YYYY', '%Y') # 2017 (year)
date = date.replace('YY', '%y') # 17 (year)
date = date.replace('m', '%b') # Dec (month)
Expand All @@ -19,18 +20,19 @@ def parse(self, date):
date = date.replace('/', os.path.sep) # path separator
return date

def strptime(self, date, date_format):
@staticmethod
def strptime(date, date_format):
return datetime.strptime(date, date_format)

def build(self, date_object):
@staticmethod
def build(date_object):
return datetime(
date_object['year'], date_object['month'], date_object['day'],
date_object['hour'] if date_object.get('hour') else 0,
date_object['minute'] if date_object.get('minute') else 0,
date_object['second'] if date_object.get('second') else 0)

def from_exif(self, exif, timestamp=None, user_regex=None,
date_field=None):
def from_exif(self, exif, timestamp=None, user_regex=None, date_field=None):
if date_field:
keys = date_field.split()
else:
Expand Down Expand Up @@ -61,7 +63,8 @@ def from_exif(self, exif, timestamp=None, user_regex=None,
else:
return parsed_date

def from_datestring(self, datestr):
@staticmethod
def from_datestring(datestr) -> dict:
datestr = datestr.split('.')
date = datestr[0]
if len(datestr) > 1:
Expand All @@ -72,10 +75,10 @@ def from_datestring(self, datestr):
if re.search(search, date) is not None:
date = re.sub(search, r'\1', date)
try:
parsed_date_time = self.strptime(date, '%Y:%m:%d %H:%M:%S')
parsed_date_time = Date.strptime(date, '%Y:%m:%d %H:%M:%S')
except ValueError:
try:
parsed_date_time = self.strptime(date, '%Y-%m-%d %H:%M:%S')
parsed_date_time = Date.strptime(date, '%Y-%m-%d %H:%M:%S')
except ValueError:
parsed_date_time = None
if re.search(search, subseconds) is not None:
Expand Down Expand Up @@ -111,7 +114,7 @@ def from_filename(self, user_regex, timestamp=None):
if timestamp:
return self.from_timestamp()

def from_timestamp(self):
def from_timestamp(self) -> dict:
date = datetime.fromtimestamp(os.path.getmtime(self.filename))
return {
'date': date,
Expand Down
36 changes: 13 additions & 23 deletions tests/test_phockup.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,15 +105,23 @@ def test_dry_run():
def test_progress():
shutil.rmtree('output', ignore_errors=True)
Phockup('input', 'output', progress=True)
assert not os.path.isdir('output')
dir1 = 'output/2017/01/01'
dir2 = 'output/2017/10/06'
dir3 = 'output/unknown'
dir4 = 'output/2018/01/01/'
assert not os.path.isdir(dir1)
assert not os.path.isdir(dir2)
assert not os.path.isdir(dir3)
assert not os.path.isdir(dir4)
assert os.path.isdir(dir1)
assert os.path.isdir(dir2)
assert os.path.isdir(dir3)
assert os.path.isdir(dir4)
assert len([name for name in os.listdir(dir1) if
os.path.isfile(os.path.join(dir1, name))]) == 3
assert len([name for name in os.listdir(dir2) if
os.path.isfile(os.path.join(dir2, name))]) == 1
assert len([name for name in os.listdir(dir3) if
os.path.isfile(os.path.join(dir3, name))]) == 1
assert len([name for name in os.listdir(dir4) if
os.path.isfile(os.path.join(dir4, name))]) == 1
shutil.rmtree('output', ignore_errors=True)


def test_get_file_type(mocker):
Expand Down Expand Up @@ -398,21 +406,3 @@ def test_maxdepth_one():
assert len([name for name in os.listdir(dir4) if
os.path.isfile(os.path.join(dir4, name))]) == 1
shutil.rmtree('output', ignore_errors=True)


def test_progress():
shutil.rmtree('output', ignore_errors=True)
Phockup('input', 'output', progress=True)
dir1 = 'output/2017/01/01'
dir2 = 'output/2017/10/06'
dir3 = 'output/unknown'
assert os.path.isdir(dir1)
assert os.path.isdir(dir2)
assert os.path.isdir(dir3)
assert len([name for name in os.listdir(dir1) if
os.path.isfile(os.path.join(dir1, name))]) == 3
assert len([name for name in os.listdir(dir2) if
os.path.isfile(os.path.join(dir2, name))]) == 1
assert len([name for name in os.listdir(dir3) if
os.path.isfile(os.path.join(dir3, name))]) == 1
shutil.rmtree('output', ignore_errors=True)
2 changes: 1 addition & 1 deletion tox.ini
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[flake8]
max-line-length = 88
ignore = E203 E501 W503 E126 F811
ignore = E203 E501 W503 E126

0 comments on commit 1445ea6

Please sign in to comment.