Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 41 additions & 10 deletions exiffield/getters.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ class Mode(ChoicesEnum, Enum): # NOTE inherits from `Enum` to make `mypy` happy
SINGLE = 'single'


def exifgetter(field: str) -> Callable[[ExifType], Any]:
def exifgetter(field: str, val='val') -> Callable[[ExifType], Any]:
"""
Return the unmodified value.
"""

def inner(exif: ExifType) -> Any:
return exif[field]['val']
return exif[field][val]

inner.__name__ = f'exifgetter("{field}")'
return inner
Expand All @@ -44,19 +44,30 @@ def get_datetaken(exif: ExifType) -> Optional[datetime.datetime]:
"""
Return when the file was created.
"""
for key in ['DateTimeOriginal', 'GPSDateTime']:
try:
datetime_str = exif[key]['val']
except KeyError:
continue

def to_datetime(dt_str):
try:
return datetime.datetime.strptime(
datetime_str,
'%Y:%m:%d %H:%M:%S',
dt_str,
'%Y:%m:%d %H:%M:%S%z',
)
except ValueError as e:
raise ExifError(f'Could not parse {datetime_str}') from e
raise ExifError(f'Could not parse {dt_str}') from e

try:
datetime_str = exif['GPSDateTime']['val']
if datetime_str[-1] == 'Z':
datetime_str = datetime_str[:-1] + '+00:00'
return to_datetime(datetime_str)
except KeyError:
pass

try:
datetime_str = exif['DateTimeOriginal']['val'] + exif['OffsetTime']['val']
return to_datetime(datetime_str)
except KeyError:
pass

raise ExifError('Could not find date')


Expand Down Expand Up @@ -109,3 +120,23 @@ def get_sequencenumber(exif) -> int:
return exif['SequenceNumber']['num']
except KeyError:
return 0


def get_latitude(exif) -> float:
"""
Return numeric latitude.
"""
try:
return exif['GPSLatitude']['num']
except KeyError:
return 0


def get_longitude(exif) -> float:
"""
Return numeric longitude.
"""
try:
return exif['GPSLongitude']['num']
except KeyError:
return 0
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "django-exiffield"
version = "3.0.0"
version = "3.0.1"
description = "django-exiffield extracts exif information by utilizing the exiftool."
authors = [
"Alexander Frenzel <alex@relatedworks.com>",
Expand Down