diff --git a/.coveragerc b/.coveragerc index cdc54b3..6da1c78 100644 --- a/.coveragerc +++ b/.coveragerc @@ -2,3 +2,4 @@ omit = */tests/* */external/* + */tools/* diff --git a/docs/index.rst b/docs/index.rst index f38ef7d..a68f4c6 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -52,12 +52,6 @@ elodie.media .. automodule:: elodie.media.video :members: -elodie.arguments ----------------- - -.. automodule:: elodie.arguments - :members: - elodie.constants ---------------- diff --git a/elodie/arguments.py b/elodie/arguments.py deleted file mode 100644 index f181b18..0000000 --- a/elodie/arguments.py +++ /dev/null @@ -1,35 +0,0 @@ -""" -Command line argument parsing for helper scripts. -""" -from __future__ import print_function - -import getopt -import sys -from re import sub - - -def parse(argv, options, long_options, usage): - """Parse command line arguments. - - :param list(str) argv: Arguments passed to the program. - :param str options: String of characters for allowed short options. - :param list(str) long_options: List of strings of allowed long options. - :param str usage: Help text, to print in the case of an error or when - the user asks for it. - :returns: dict - """ - try: - opts, args = getopt.getopt(argv, options, long_options) - except getopt.GetoptError: - print(usage) - sys.exit(2) - - return_arguments = {} - for opt, arg in opts: - if opt == '-h': - print(usage) - sys.exit() - else: - return_arguments[sub('^-+', '', opt)] = arg - - return return_arguments diff --git a/elodie/media/photo.py b/elodie/media/photo.py index ee2287b..e89c032 100644 --- a/elodie/media/photo.py +++ b/elodie/media/photo.py @@ -10,7 +10,6 @@ from __future__ import absolute_import import imghdr import os import re -import subprocess import time from datetime import datetime from re import compile @@ -38,28 +37,6 @@ class Photo(Media): # We only want to parse EXIF once so we store it here self.exif = None - def get_duration(self): - """Get the duration of a photo in seconds. Uses ffmpeg/ffprobe. - - :returns: str or None for a non-photo file - """ - if(not self.is_valid()): - return None - - source = self.source - result = subprocess.Popen( - ['ffprobe', source], - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT - ) - for key in result.stdout.readlines(): - if 'Duration' in key: - return re.search( - '(\d{2}:\d{2}.\d{2})', - key - ).group(1).replace('.', ':') - return None - def get_date_taken(self): """Get the date which the photo was taken. diff --git a/elodie/media/video.py b/elodie/media/video.py index 2becef6..72065fa 100644 --- a/elodie/media/video.py +++ b/elodie/media/video.py @@ -9,7 +9,6 @@ from __future__ import absolute_import from __future__ import division # load modules -from distutils.spawn import find_executable from datetime import datetime import os @@ -53,21 +52,6 @@ class Video(Media): self.longitude_ref_key = 'EXIF:GPSLongitudeRef' self.set_gps_ref = False - def get_avmetareadwrite(self): - """Get path to executable avmetareadwrite binary. - - We wrap this since we call it in a few places and we do a fallback. - - :returns: None or string - """ - avmetareadwrite = find_executable('avmetareadwrite') - if(avmetareadwrite is None): - avmetareadwrite = '/usr/bin/avmetareadwrite' - if(not os.path.isfile(avmetareadwrite) or not os.access(avmetareadwrite, os.X_OK)): # noqa - return None - - return avmetareadwrite - def get_date_taken(self): """Get the date which the photo was taken. diff --git a/elodie/tests/geolocation_test.py b/elodie/tests/geolocation_test.py index 02ab5e3..7642ba8 100644 --- a/elodie/tests/geolocation_test.py +++ b/elodie/tests/geolocation_test.py @@ -32,6 +32,20 @@ def test_decimal_to_dms(): assert target_decimal_value == check_value, '%s does not match %s' % (check_value, target_decimal_value) +def test_dms_to_decimal_positive_sign(): + decimal = geolocation.dms_to_decimal(10, 20, 100, 'NE') + assert helper.isclose(decimal, 10.3611111111) + + decimal = geolocation.dms_to_decimal(10, 20, 100, 'ne') + assert helper.isclose(decimal, 10.3611111111) + +def test_dms_to_decimal_negative_sign(): + decimal = geolocation.dms_to_decimal(10, 20, 100, 'SW') + assert helper.isclose(decimal, -10.3611111111) + + decimal = geolocation.dms_to_decimal(10, 20, 100, 'sw') + assert helper.isclose(decimal, -10.3611111111) + def test_dms_string_latitude(): for x in range(0, 5): diff --git a/elodie/tests/media/base_test.py b/elodie/tests/media/base_test.py index 955d76b..365fbb0 100644 --- a/elodie/tests/media/base_test.py +++ b/elodie/tests/media/base_test.py @@ -24,6 +24,14 @@ from elodie.media.video import Video os.environ['TZ'] = 'GMT' + +def test_get_class_by_file_without_extension(): + base_file = helper.get_file('withoutextension') + + cls = Base.get_class_by_file(base_file, [Audio, Text, Photo, Video]) + + assert cls is None, cls + def test_set_album_from_folder_invalid_file(): temporary_folder, folder = helper.create_working_folder() @@ -38,9 +46,63 @@ def test_set_album_from_folder_invalid_file(): assert status == False, status -def test_get_class_by_file_without_extension(): - base_file = helper.get_file('withoutextension') +def test_set_album_from_folder(): + temporary_folder, folder = helper.create_working_folder() - cls = Base.get_class_by_file(base_file, [Audio, Text, Photo, Video]) - - assert cls is None, cls + origin = '%s/photo.jpg' % folder + shutil.copyfile(helper.get_file('plain.jpg'), origin) + + photo = Photo(origin) + metadata = photo.get_metadata() + + assert metadata['album'] is None, metadata['album'] + + new_album_name = os.path.split(folder)[1] + status = photo.set_album_from_folder() + + assert status == True, status + + photo_new = Photo(origin) + metadata_new = photo_new.get_metadata() + + shutil.rmtree(folder) + + assert metadata_new['album'] == new_album_name, metadata_new['album'] + +def test_set_metadata(): + temporary_folder, folder = helper.create_working_folder() + + origin = '%s/photo.jpg' % folder + shutil.copyfile(helper.get_file('plain.jpg'), origin) + + photo = Photo(origin) + + metadata = photo.get_metadata() + + assert metadata['title'] == None, metadata['title'] + + new_title = 'Some Title' + photo.set_metadata(title = new_title) + + new_metadata = photo.get_metadata() + + assert new_metadata['title'] == new_title, new_metadata['title'] + +def test_set_metadata_basename(): + temporary_folder, folder = helper.create_working_folder() + + origin = '%s/photo.jpg' % folder + shutil.copyfile(helper.get_file('plain.jpg'), origin) + + photo = Photo(origin) + + metadata = photo.get_metadata() + + assert metadata['base_name'] == 'photo', metadata['base_name'] + + new_basename = 'Some Base Name' + photo.set_metadata_basename(new_basename) + + new_metadata = photo.get_metadata() + + assert new_metadata['base_name'] == new_basename, new_metadata['base_name'] diff --git a/tools/__init__.py b/tools/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tools/scripts/__init__.py b/tools/scripts/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tools/scripts/datetime.py b/tools/scripts/datetime.py deleted file mode 100755 index 7c882a8..0000000 --- a/tools/scripts/datetime.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python - -import os -import shutil -import sys - -from elodie import arguments -from elodie.media.photo import Media -from elodie.media.photo import Photo -from elodie.media.video import Video - -def main(argv): - args = arguments.parse(argv, None, ['file='], './import.py --file=') - - if('file' not in args): - print 'No file specified' - sys.exit(1) - - media = Media.get_class_by_file(args['file'], [Photo, Video]) - - if(media is None): - print 'Not a valid file' - sys.exit(1) - - metadata = media.get_metadata() - output = {'date_taken': metadata['date_taken']} - print '%r' % output - - -if __name__ == '__main__': - main(sys.argv[1:]) - sys.exit(0) diff --git a/tools/scripts/geolocation.py b/tools/scripts/geolocation.py deleted file mode 100755 index 93318bb..0000000 --- a/tools/scripts/geolocation.py +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env python - -import os -import shutil -import sys - -from elodie import arguments -from elodie import geolocation -from elodie.media.photo import Media -from elodie.media.photo import Photo -from elodie.media.video import Video - -def main(argv): - args = arguments.parse(argv, None, ['file=','type='], './import.py --type= --file=') - - if('file' not in args): - print 'No file specified' - sys.exit(1) - - media = Media.get_class_by_file(args['file'], [Photo, Video]) - - if(media is None): - print 'Not a valid file' - sys.exit(1) - - metadata = media.get_metadata() - - place_name = geolocation.place_name(metadata['latitude'], metadata['longitude']) - - output = {'latitude': metadata['latitude'], 'longitude': metadata['longitude'], 'place_name': place_name} - print '%r' % output - - -if __name__ == '__main__': - main(sys.argv[1:]) - sys.exit(0)