This commit is contained in:
parent
74d8675b20
commit
8082b739af
15
Readme.md
15
Readme.md
|
@ -207,7 +207,7 @@ Not too bad, eh? Wait a second, what's *Unknown Location*? If I'm not able to fi
|
||||||
|
|
||||||
OK, so what if you don't like the folders being named `2015-07-Jul/Mountain View`? No problem!
|
OK, so what if you don't like the folders being named `2015-07-Jul/Mountain View`? No problem!
|
||||||
|
|
||||||
You can add a custom folder structure by editing your `config.ini` file. This is what I include in the sample config file.
|
You can add a custom folder structure by editing your `config.ini` file.
|
||||||
|
|
||||||
#### Custom folder examples
|
#### Custom folder examples
|
||||||
|
|
||||||
|
@ -217,28 +217,23 @@ Sometimes examples are easier to understand than explainations so I'll start the
|
||||||
location=%city, %state
|
location=%city, %state
|
||||||
year=%Y
|
year=%Y
|
||||||
full_path=%year/%location
|
full_path=%year/%location
|
||||||
|
# -> 2015/Sunnyvale, California
|
||||||
# 2015/Sunnyvale, California
|
|
||||||
|
|
||||||
location=%city, %state
|
location=%city, %state
|
||||||
month=%B
|
month=%B
|
||||||
year=%Y
|
year=%Y
|
||||||
full_path=%year/%month/%location
|
full_path=%year/%month/%location
|
||||||
|
# -> 2015/December/Sunnyvale, California
|
||||||
# 2015/December/Sunnyvale, California
|
|
||||||
|
|
||||||
location=%city, %state
|
location=%city, %state
|
||||||
month=%m
|
month=%m
|
||||||
year=%Y
|
year=%Y
|
||||||
date=%year-%month
|
date=%year-%month
|
||||||
full_path=%date/%location
|
full_path=%date/%location
|
||||||
|
# -> 2015-12/Sunnyvale, California
|
||||||
# 2015-12/Sunnyvale, California
|
|
||||||
|
|
||||||
full_path=%country/%state/%city
|
full_path=%country/%state/%city
|
||||||
|
# -> US/California/Sunnyvale
|
||||||
# US/California/Sunnyvale
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### How folder customization works
|
#### How folder customization works
|
||||||
|
|
|
@ -1,8 +1,2 @@
|
||||||
[MapQuest]
|
[MapQuest]
|
||||||
key=your-api-key-goes-here
|
key=your-api-key-goes-here
|
||||||
|
|
||||||
[Directory]
|
|
||||||
date=%Y-%m-%b
|
|
||||||
location=%city
|
|
||||||
full_path=%date/%location
|
|
||||||
|
|
||||||
|
|
14
elodie.py
14
elodie.py
|
@ -236,8 +236,18 @@ def _update(album, location, time, title, paths):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
current_file = os.path.expanduser(current_file)
|
current_file = os.path.expanduser(current_file)
|
||||||
destination = os.path.expanduser(os.path.dirname(os.path.dirname(
|
|
||||||
os.path.dirname(current_file))))
|
# The destination folder structure could contain any number of levels
|
||||||
|
# So we calculate that and traverse up the tree.
|
||||||
|
# '/path/to/file/photo.jpg' -> '/path/to/file' ->
|
||||||
|
# ['path','to','file'] -> ['path','to'] -> '/path/to'
|
||||||
|
current_directory = os.path.dirname(current_file)
|
||||||
|
destination_depth = -1 * len(FILESYSTEM.get_folder_path_definition())
|
||||||
|
destination = os.sep.join(
|
||||||
|
os.path.normpath(
|
||||||
|
current_directory
|
||||||
|
).split(os.sep)[:destination_depth]
|
||||||
|
)
|
||||||
|
|
||||||
media = Media.get_class_by_file(current_file, get_all_subclasses())
|
media = Media.get_class_by_file(current_file, get_all_subclasses())
|
||||||
if not media:
|
if not media:
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# Project imports
|
# Project imports
|
||||||
from imp import load_source
|
from imp import load_source
|
||||||
|
import mock
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import shutil
|
import shutil
|
||||||
|
@ -8,6 +9,7 @@ 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
|
from six import text_type, unichr as six_unichr
|
||||||
|
from tempfile import gettempdir
|
||||||
|
|
||||||
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__)))))))
|
||||||
|
@ -15,6 +17,7 @@ sys.path.insert(0, os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirna
|
||||||
import helper
|
import helper
|
||||||
elodie = load_source('elodie', os.path.abspath('{}/../../elodie.py'.format(os.path.dirname(os.path.realpath(__file__)))))
|
elodie = load_source('elodie', os.path.abspath('{}/../../elodie.py'.format(os.path.dirname(os.path.realpath(__file__)))))
|
||||||
|
|
||||||
|
from elodie.config import load_config
|
||||||
from elodie.localstorage import Db
|
from elodie.localstorage import Db
|
||||||
from elodie.media.audio import Audio
|
from elodie.media.audio import Audio
|
||||||
from elodie.media.photo import Photo
|
from elodie.media.photo import Photo
|
||||||
|
@ -427,6 +430,38 @@ def test_update_time_on_video():
|
||||||
assert metadata['date_taken'] != metadata_processed['date_taken']
|
assert metadata['date_taken'] != metadata_processed['date_taken']
|
||||||
assert metadata_processed['date_taken'] == helper.time_convert((2000, 1, 1, 12, 0, 0, 5, 1, 0)), metadata_processed['date_taken']
|
assert metadata_processed['date_taken'] == helper.time_convert((2000, 1, 1, 12, 0, 0, 5, 1, 0)), metadata_processed['date_taken']
|
||||||
|
|
||||||
|
@mock.patch('elodie.config.config_file', '%s/config.ini-multiple-directories' % gettempdir())
|
||||||
|
def test_update_with_more_than_two_levels_of_directories():
|
||||||
|
with open('%s/config.ini-multiple-directories' % gettempdir(), 'w') as f:
|
||||||
|
f.write("""
|
||||||
|
[Directory]
|
||||||
|
year=%Y
|
||||||
|
month=%m
|
||||||
|
day=%d
|
||||||
|
full_path=%year/%month/%day
|
||||||
|
""")
|
||||||
|
|
||||||
|
temporary_folder, folder = helper.create_working_folder()
|
||||||
|
temporary_folder_destination, folder_destination = helper.create_working_folder()
|
||||||
|
|
||||||
|
origin = '%s/plain.jpg' % folder
|
||||||
|
shutil.copyfile(helper.get_file('plain.jpg'), origin)
|
||||||
|
|
||||||
|
if hasattr(load_config, 'config'):
|
||||||
|
del load_config.config
|
||||||
|
cfg = load_config()
|
||||||
|
helper.reset_dbs()
|
||||||
|
runner = CliRunner()
|
||||||
|
result = runner.invoke(elodie._import, ['--destination', folder_destination, folder])
|
||||||
|
runner2 = CliRunner()
|
||||||
|
result = runner2.invoke(elodie._update, ['--title', 'test title', folder_destination])
|
||||||
|
helper.restore_dbs()
|
||||||
|
if hasattr(load_config, 'config'):
|
||||||
|
del load_config.config
|
||||||
|
|
||||||
|
updated_file_path = '{}/2015/12/05/2015-12-05_00-59-26-plain-test-title.jpg'.format(folder_destination)
|
||||||
|
assert os.path.isfile(updated_file_path), updated_file_path
|
||||||
|
|
||||||
def test_update_with_directory_passed_in():
|
def test_update_with_directory_passed_in():
|
||||||
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()
|
||||||
|
|
Loading…
Reference in New Issue