From a48a2edb62a00d4cca98f1d6425ae0f85a793197 Mon Sep 17 00:00:00 2001 From: Jaisen Mathai Date: Tue, 3 Jan 2017 00:49:56 -0800 Subject: [PATCH] Fix bug where zero value for latitude/longitude causes error gh-171 (#176) --- elodie/media/media.py | 25 +++++++++++------- .../files/with-location-zero-coordinate.jpg | Bin 0 -> 9431 bytes elodie/tests/media/photo_test.py | 8 ++++++ 3 files changed, 24 insertions(+), 9 deletions(-) create mode 100644 elodie/tests/files/with-location-zero-coordinate.jpg diff --git a/elodie/media/media.py b/elodie/media/media.py index ae2e82d..f721193 100644 --- a/elodie/media/media.py +++ b/elodie/media/media.py @@ -86,22 +86,29 @@ class Media(Base): # The lat/lon _keys array has an order of precedence. # The first key is writable and we will give the writable # key precence when reading. - direction_multiplier = 1 + direction_multiplier = 1.0 for key in self.latitude_keys + self.longitude_keys: + if key not in exif: + continue + + # Cast coordinate to a float due to a bug in exiftool's + # -json output format. + # https://github.com/jmathai/elodie/issues/171 + # http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,7952.0.html #noqa + this_coordinate = float(exif[key]) + # TODO: verify that we need to check ref key # when self.set_gps_ref != True - if type == 'latitude' and key in self.latitude_keys and \ - key in exif: + if type == 'latitude' and key in self.latitude_keys: if self.latitude_ref_key in exif and \ exif[self.latitude_ref_key] == 'S': - direction_multiplier = -1 - return exif[key] * direction_multiplier - elif type == 'longitude' and key in self.longitude_keys and \ - key in exif: + direction_multiplier = -1.0 + return this_coordinate * direction_multiplier + elif type == 'longitude' and key in self.longitude_keys: if self.longitude_ref_key in exif and \ exif[self.longitude_ref_key] == 'W': - direction_multiplier = -1 - return exif[key] * direction_multiplier + direction_multiplier = -1.0 + return this_coordinate * direction_multiplier return None diff --git a/elodie/tests/files/with-location-zero-coordinate.jpg b/elodie/tests/files/with-location-zero-coordinate.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6c32ee6d06044a79ed8ec1fe3c817a69ac8ec4fa GIT binary patch literal 9431 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