Fix test which checks for unicode characters in file path strings #162 (#166)

fix issue encountered when importing from a UTF-8 encoded filesystem with non-breaking spaces.
This commit is contained in:
misterpipine 2016-12-26 17:20:12 +01:00 committed by Jaisen Mathai
parent 0c1aa2954e
commit 328aed6dfd
3 changed files with 22 additions and 7 deletions

View File

@ -18,6 +18,7 @@ if not verify_dependencies():
from elodie import constants from elodie import constants
from elodie import geolocation from elodie import geolocation
from elodie import log from elodie import log
from elodie.compatability import _decode
from elodie.filesystem import FileSystem from elodie.filesystem import FileSystem
from elodie.localstorage import Db from elodie.localstorage import Db
from elodie.media.base import Base, get_all_subclasses from elodie.media.base import Base, get_all_subclasses
@ -33,6 +34,10 @@ FILESYSTEM = FileSystem()
def import_file(_file, destination, album_from_folder, trash, allow_duplicates): def import_file(_file, destination, album_from_folder, trash, allow_duplicates):
_file = _decode(_file)
destination = _decode(destination)
"""Set file metadata and move it to destination. """Set file metadata and move it to destination.
""" """
if not os.path.exists(_file): if not os.path.exists(_file):
@ -46,7 +51,7 @@ def import_file(_file, destination, album_from_folder, trash, allow_duplicates):
return return
media = Media.get_class_by_file(_file, [Text, Audio, Photo, Video]) media = Media.get_class_by_file(_file, get_all_subclasses())
if not media: if not media:
log.warn('Not a supported file (%s)' % _file) log.warn('Not a supported file (%s)' % _file)
print('{"source":"%s", "error_msg":"Not a supported file"}' % _file) print('{"source":"%s", "error_msg":"Not a supported file"}' % _file)
@ -83,13 +88,14 @@ def _import(destination, source, file, album_from_folder, trash, paths, allow_du
"""Import files or directories by reading their EXIF and organizing them accordingly. """Import files or directories by reading their EXIF and organizing them accordingly.
""" """
result = Result() result = Result()
destination = destination.decode(sys.getfilesystemencoding())
destination = _decode(destination)
destination = os.path.abspath(os.path.expanduser(destination)) destination = os.path.abspath(os.path.expanduser(destination))
files = set() files = set()
paths = set(paths) paths = set(paths)
if source: if source:
source = source.decode(sys.getfilesystemencoding()) source = _decode(source)
paths.add(source) paths.add(source)
if file: if file:
paths.add(file) paths.add(file)
@ -216,7 +222,7 @@ def _update(album, location, time, title, files):
destination = os.path.expanduser(os.path.dirname(os.path.dirname( destination = os.path.expanduser(os.path.dirname(os.path.dirname(
os.path.dirname(current_file)))) os.path.dirname(current_file))))
media = Media.get_class_by_file(current_file, [Text, Audio, Photo, Video]) media = Media.get_class_by_file(current_file, get_all_subclasses())
if not media: if not media:
continue continue
@ -255,7 +261,7 @@ def _update(album, location, time, title, files):
if updated: if updated:
updated_media = Media.get_class_by_file(current_file, updated_media = Media.get_class_by_file(current_file,
[Text, Audio, Photo, Video]) get_all_subclasses())
# See comments above on why we have to do this when titles # See comments above on why we have to do this when titles
# get updated. # get updated.
if remove_old_title_from_name and len(original_title) > 0: if remove_old_title_from_name and len(original_title) > 0:

7
elodie/compatability.py Normal file
View File

@ -0,0 +1,7 @@
def _decode(string, encoding='utf8'):
if hasattr(string, 'decode'):
return string.decode(encoding)
return string

View File

@ -7,6 +7,7 @@ import shutil
from click.testing import CliRunner from click.testing import CliRunner
from nose.plugins.skip import SkipTest from nose.plugins.skip import SkipTest
from nose.tools import assert_raises from nose.tools import assert_raises
from six import text_type, unichr as six_unichr
sys.path.insert(0, os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__)))))) sys.path.insert(0, os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))))
sys.path.insert(0, os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))))) sys.path.insert(0, os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__)))))))
@ -88,11 +89,12 @@ def test_import_file_video():
assert helper.path_tz_fix(os.path.join('2015-01-Jan','California','2015-01-19_12-45-11-video.mov')) in dest_path, dest_path assert helper.path_tz_fix(os.path.join('2015-01-Jan','California','2015-01-19_12-45-11-video.mov')) in dest_path, dest_path
def test_import_file_path_unicode(): def test_import_file_path_unicode():
raise SkipTest("Skipping test because failure case not established. gh-162")
temporary_folder, folder = helper.create_working_folder() temporary_folder, folder = helper.create_working_folder()
temporary_folder_destination, folder_destination = helper.create_working_folder() temporary_folder_destination, folder_destination = helper.create_working_folder()
origin = u'%s/unicode\xa0filename.txt' % folder origin = text_type(folder)+u'/unicode'+six_unichr(160)+u'filename.txt'
origin = origin.encode('utf-8')
shutil.copyfile(helper.get_file('valid.txt'), origin) shutil.copyfile(helper.get_file('valid.txt'), origin)
reset_hash_db() reset_hash_db()