Rename dozo to ordigi
This commit is contained in:
parent
4cec0b8d90
commit
f88255e3c5
|
@ -9,12 +9,12 @@ from datetime import datetime
|
|||
import click
|
||||
from send2trash import send2trash
|
||||
|
||||
from dozo import constants
|
||||
from dozo import config
|
||||
from dozo.filesystem import FileSystem
|
||||
from dozo.database import Db
|
||||
from dozo.media.media import Media, get_all_subclasses
|
||||
from dozo.summary import Summary
|
||||
from ordigi import constants
|
||||
from ordigi import config
|
||||
from ordigi.filesystem import FileSystem
|
||||
from ordigi.database import Db
|
||||
from ordigi.media.media import Media, get_all_subclasses
|
||||
from ordigi.summary import Summary
|
||||
|
||||
FILESYSTEM = FileSystem()
|
||||
|
||||
|
@ -46,7 +46,7 @@ def get_logger(verbose, debug):
|
|||
logging.debug('This message should appear on the console')
|
||||
logging.info('So should this')
|
||||
logging.getLogger('asyncio').setLevel(level)
|
||||
logger = logging.getLogger('dozo')
|
||||
logger = logging.getLogger('ordigi')
|
||||
logger.level = level
|
||||
return logger
|
||||
|
||||
|
@ -82,7 +82,7 @@ def get_logger(verbose, debug):
|
|||
def _sort(debug, dry_run, destination, copy, exclude_regex, filter_by_ext, ignore_tags,
|
||||
max_deep, remove_duplicates, reset_cache, verbose, paths):
|
||||
"""Sort files or directories by reading their EXIF and organizing them
|
||||
according to config.ini preferences.
|
||||
according to ordigi.conf preferences.
|
||||
"""
|
||||
|
||||
if copy:
|
||||
|
@ -148,7 +148,7 @@ def _sort(debug, dry_run, destination, copy, exclude_regex, filter_by_ext, ignor
|
|||
@click.option('--debug', default=False, is_flag=True,
|
||||
help='Override the value in constants.py with True.')
|
||||
def _generate_db(path, debug):
|
||||
"""Regenerate the hash.json database which contains all of the sha256 signatures of media files. The hash.json file is located at ~/.dozo/.
|
||||
"""Regenerate the hash.json database which contains all of the sha256 signatures of media files.
|
||||
"""
|
||||
constants.debug = debug
|
||||
result = Result()
|
|
@ -1,7 +1,7 @@
|
|||
"""Load config file as a singleton."""
|
||||
from configparser import RawConfigParser
|
||||
from os import path
|
||||
from dozo import constants
|
||||
from ordigi import constants
|
||||
|
||||
|
||||
def write(conf_file, config):
|
|
@ -8,8 +8,15 @@ from sys import version_info
|
|||
#: If True, debug messages will be printed.
|
||||
debug = False
|
||||
|
||||
#: Directory in which to store Dozo settings.
|
||||
application_directory = '{}/.dozo'.format(path.expanduser('~'))
|
||||
#Ordigi settings directory.
|
||||
if 'XDG_CONFIG_HOME' in environ:
|
||||
confighome = environ['XDG_CONFIG_HOME']
|
||||
elif 'APPDATA' in environ:
|
||||
confighome = environ['APPDATA']
|
||||
else:
|
||||
confighome = path.join(environ['HOME'], '.config')
|
||||
application_directory = path.join(confighome, 'ordigi')
|
||||
|
||||
default_path = '{%Y-%m-%b}/{album}|{city}|{"Unknown Location"}'
|
||||
default_name = '{%Y-%m-%d_%H-%M-%S}-{name}-{title}.%l{ext}'
|
||||
default_geocoder = 'Nominatim'
|
||||
|
@ -23,7 +30,7 @@ location_db = 'location.json'
|
|||
# TODO will be removed eventualy later
|
||||
# location_db = '{}/location.json'.format(application_directory)
|
||||
|
||||
# Dozo installation directory.
|
||||
# Ordigi installation directory.
|
||||
script_directory = path.dirname(path.dirname(path.abspath(__file__)))
|
||||
|
||||
#: Accepted language in responses from MapQuest
|
||||
|
@ -32,4 +39,4 @@ accepted_language = 'en'
|
|||
# check python version, required in filesystem.py to trigger appropriate method
|
||||
python_version = version_info.major
|
||||
|
||||
CONFIG_FILE = '%s/config.ini' % application_directory
|
||||
CONFIG_FILE = f'{application_directory}/ordigi.conf'
|
|
@ -1,5 +1,5 @@
|
|||
"""
|
||||
Methods for interacting with information Dozo caches about stored media.
|
||||
Methods for interacting with database files
|
||||
"""
|
||||
from builtins import map
|
||||
from builtins import object
|
||||
|
@ -12,23 +12,17 @@ from math import radians, cos, sqrt
|
|||
from shutil import copyfile
|
||||
from time import strftime
|
||||
|
||||
from dozo import constants
|
||||
from ordigi import constants
|
||||
|
||||
|
||||
class Db(object):
|
||||
|
||||
"""A class for interacting with the JSON files created by Dozo."""
|
||||
"""A class for interacting with the JSON files database."""
|
||||
|
||||
def __init__(self, target_dir):
|
||||
# verify that the application directory (~/.dozo) exists,
|
||||
# else create it
|
||||
# if not os.path.exists(constants.application_directory):
|
||||
# os.makedirs(constants.application_directory)
|
||||
|
||||
# Create dir for target database
|
||||
dirname = os.path.join(target_dir, '.dozo')
|
||||
# Legacy dir
|
||||
# dirname = constants.application_directory
|
||||
dirname = os.path.join(target_dir, '.ordigi')
|
||||
|
||||
if not os.path.exists(dirname):
|
||||
try:
|
|
@ -14,12 +14,12 @@ import shutil
|
|||
import time
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from dozo import constants
|
||||
from dozo import geolocation
|
||||
from ordigi import constants
|
||||
from ordigi import geolocation
|
||||
|
||||
from dozo.media.media import get_media_class, get_all_subclasses
|
||||
from dozo.media.photo import Photo
|
||||
from dozo.summary import Summary
|
||||
from ordigi.media.media import get_media_class, get_all_subclasses
|
||||
from ordigi.media.photo import Photo
|
||||
from ordigi.summary import Summary
|
||||
|
||||
|
||||
class FileSystem(object):
|
||||
|
@ -129,7 +129,7 @@ class FileSystem(object):
|
|||
# Create a list of compiled regular expressions to match against the file path
|
||||
compiled_regex_list = [re.compile(regex) for regex in exclude_regex_list]
|
||||
for dirname, dirnames, filenames in os.walk(path):
|
||||
if dirname == os.path.join(path, '.dozo'):
|
||||
if dirname == os.path.join(path, '.ordigi'):
|
||||
continue
|
||||
for filename in filenames:
|
||||
# If file extension is in `extensions`
|
||||
|
@ -535,7 +535,7 @@ class FileSystem(object):
|
|||
subdirs = ''
|
||||
for dirname, dirnames, filenames, level in self.walklevel(path,
|
||||
self.max_deep):
|
||||
if dirname == os.path.join(path, '.dozo'):
|
||||
if dirname == os.path.join(path, '.ordigi'):
|
||||
continue
|
||||
|
||||
subdirs = os.path.join(subdirs, os.path.basename(dirname))
|
||||
|
@ -675,7 +675,7 @@ class FileSystem(object):
|
|||
has_errors = False
|
||||
path = self.check_path(path)
|
||||
for dirname, dirnames, filenames, level in self.walklevel(path, None):
|
||||
if dirname == os.path.join(path, '.dozo'):
|
||||
if dirname == os.path.join(path, '.ordigi'):
|
||||
continue
|
||||
if dirname.find('similar_to') == 0:
|
||||
continue
|
||||
|
@ -738,7 +738,7 @@ class FileSystem(object):
|
|||
has_errors = False
|
||||
path = self.check_path(path)
|
||||
for dirname, dirnames, filenames, level in self.walklevel(path, None):
|
||||
if dirname == os.path.join(path, '.dozo'):
|
||||
if dirname == os.path.join(path, '.ordigi'):
|
||||
continue
|
||||
if dirname.find('similar_to') == 0:
|
||||
continue
|
|
@ -8,8 +8,8 @@ import geopy
|
|||
from geopy.geocoders import Nominatim
|
||||
import logging
|
||||
|
||||
from dozo import constants
|
||||
from dozo.config import load_config, get_geocoder
|
||||
from ordigi import constants
|
||||
from ordigi.config import load_config, get_geocoder
|
||||
|
||||
__KEY__ = None
|
||||
__DEFAULT_LOCATION__ = 'Unknown Location'
|
|
@ -1,6 +1,6 @@
|
|||
"""
|
||||
The audio module contains classes specifically for dealing with audio files.
|
||||
The :class:`Audio` class inherits from the :class:`~dozo.media.Media`
|
||||
The :class:`Audio` class inherits from the :class:`~ordigi.media.Media`
|
||||
class.
|
||||
|
||||
.. moduleauthor:: Jaisen Mathai <jaisen@jmathai.com>
|
|
@ -1,7 +1,7 @@
|
|||
"""
|
||||
Base :class:`Media` class for media objects that are tracked by Dozo.
|
||||
Base :class:`Media` class for media objects
|
||||
The Media class provides some base functionality used by all the media types.
|
||||
Sub-classes (:class:`~dozo.media.Audio`, :class:`~dozo.media.Photo`, and :class:`~dozo.media.Video`).
|
||||
Sub-classes (:class:`~ordigi.media.Audio`, :class:`~ordigi.media.Photo`, and :class:`~ordigi.media.Video`).
|
||||
"""
|
||||
|
||||
import mimetypes
|
||||
|
@ -12,7 +12,7 @@ import logging
|
|||
# load modules
|
||||
from dateutil.parser import parse
|
||||
import re
|
||||
from dozo.exiftool import ExifTool, ExifToolCaching
|
||||
from ordigi.exiftool import ExifTool, ExifToolCaching
|
||||
|
||||
class Media():
|
||||
|
|
@ -6,10 +6,10 @@ from pathlib import Path
|
|||
import shutil
|
||||
import tempfile
|
||||
|
||||
from dozo import config
|
||||
from dozo.exiftool import _ExifToolProc
|
||||
from ordigi import config
|
||||
from ordigi.exiftool import _ExifToolProc
|
||||
|
||||
DOZO_PATH = Path(__file__).parent.parent
|
||||
ORDIGI_PATH = Path(__file__).parent.parent
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def reset_singletons():
|
||||
|
@ -18,8 +18,8 @@ def reset_singletons():
|
|||
|
||||
|
||||
def copy_sample_files():
|
||||
src_path = tempfile.mkdtemp(prefix='dozo-src')
|
||||
paths = Path(DOZO_PATH, 'samples/test_exif').glob('*')
|
||||
src_path = tempfile.mkdtemp(prefix='ordigi-src')
|
||||
paths = Path(ORDIGI_PATH, 'samples/test_exif').glob('*')
|
||||
file_paths = [x for x in paths if x.is_file()]
|
||||
for file_path in file_paths:
|
||||
source_path = Path(src_path, file_path.name)
|
||||
|
@ -30,7 +30,7 @@ def copy_sample_files():
|
|||
|
||||
@pytest.fixture(scope="module")
|
||||
def conf_path():
|
||||
tmp_path = tempfile.mkdtemp(prefix='dozo-')
|
||||
tmp_path = tempfile.mkdtemp(prefix='ordigi-')
|
||||
conf = RawConfigParser()
|
||||
conf['Path'] = {
|
||||
'day_begins': '4',
|
||||
|
@ -40,7 +40,7 @@ def conf_path():
|
|||
conf['Geolocation'] = {
|
||||
'geocoder': 'Nominatium'
|
||||
}
|
||||
conf_path = Path(tmp_path, "dozo.conf")
|
||||
conf_path = Path(tmp_path, "ordigi.conf")
|
||||
config.write(conf_path, conf)
|
||||
|
||||
yield conf_path
|
||||
|
|
|
@ -4,7 +4,7 @@ import shutil
|
|||
import tempfile
|
||||
from unittest import mock
|
||||
|
||||
from dozo import config
|
||||
from ordigi import config
|
||||
|
||||
# Helpers
|
||||
import random
|
||||
|
|
|
@ -2,7 +2,7 @@ import pytest
|
|||
|
||||
CONTENT = "content"
|
||||
|
||||
class TestDozo:
|
||||
class TestOrdigi:
|
||||
@pytest.mark.skip()
|
||||
def test__sort(self):
|
||||
assert 0
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import json
|
||||
import pytest
|
||||
|
||||
import dozo.exiftool
|
||||
from dozo.exiftool import get_exiftool_path
|
||||
import ordigi.exiftool
|
||||
from ordigi.exiftool import get_exiftool_path
|
||||
|
||||
TEST_FILE_ONE_KEYWORD = "samples/images/wedding.jpg"
|
||||
TEST_FILE_BAD_IMAGE = "samples/images/badimage.jpeg"
|
||||
|
@ -103,86 +103,86 @@ if exiftool is None:
|
|||
|
||||
def test_get_exiftool_path():
|
||||
|
||||
exiftool = dozo.exiftool.get_exiftool_path()
|
||||
exiftool = ordigi.exiftool.get_exiftool_path()
|
||||
assert exiftool is not None
|
||||
|
||||
|
||||
def test_version():
|
||||
exif = dozo.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
exif = ordigi.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
assert exif.version is not None
|
||||
assert isinstance(exif.version, str)
|
||||
|
||||
|
||||
def test_read():
|
||||
exif = dozo.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
exif = ordigi.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
assert exif.data["File:MIMEType"] == "image/jpeg"
|
||||
assert exif.data["EXIF:ISO"] == 160
|
||||
assert exif.data["IPTC:Keywords"] == "wedding"
|
||||
|
||||
|
||||
def test_singleton():
|
||||
exif1 = dozo.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
exif2 = dozo.exiftool.ExifTool(TEST_FILE_MULTI_KEYWORD)
|
||||
exif1 = ordigi.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
exif2 = ordigi.exiftool.ExifTool(TEST_FILE_MULTI_KEYWORD)
|
||||
|
||||
assert exif1._process.pid == exif2._process.pid
|
||||
|
||||
|
||||
def test_pid():
|
||||
exif1 = dozo.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
exif1 = ordigi.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
assert exif1.pid == exif1._process.pid
|
||||
|
||||
|
||||
def test_exiftoolproc_process():
|
||||
exif1 = dozo.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
exif1 = ordigi.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
assert exif1._exiftoolproc.process is not None
|
||||
|
||||
|
||||
def test_exiftoolproc_exiftool():
|
||||
exif1 = dozo.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
assert exif1._exiftoolproc.exiftool == dozo.exiftool.get_exiftool_path()
|
||||
exif1 = ordigi.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
assert exif1._exiftoolproc.exiftool == ordigi.exiftool.get_exiftool_path()
|
||||
|
||||
|
||||
def test_as_dict():
|
||||
exif1 = dozo.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
exif1 = ordigi.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
exifdata = exif1.asdict()
|
||||
assert exifdata["XMP:TagsList"] == "wedding"
|
||||
|
||||
|
||||
def test_as_dict_normalized():
|
||||
exif1 = dozo.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
exif1 = ordigi.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
exifdata = exif1.asdict(normalized=True)
|
||||
assert exifdata["xmp:tagslist"] == "wedding"
|
||||
assert "XMP:TagsList" not in exifdata
|
||||
|
||||
|
||||
def test_as_dict_no_tag_groups():
|
||||
exif1 = dozo.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
exif1 = ordigi.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
exifdata = exif1.asdict(tag_groups=False)
|
||||
assert exifdata["TagsList"] == "wedding"
|
||||
|
||||
|
||||
def test_json():
|
||||
exif1 = dozo.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
exif1 = ordigi.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
exifdata = json.loads(exif1.json())
|
||||
assert exifdata[0]["XMP:TagsList"] == "wedding"
|
||||
|
||||
|
||||
def test_str():
|
||||
exif1 = dozo.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
exif1 = ordigi.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
assert "file: " in str(exif1)
|
||||
assert "exiftool: " in str(exif1)
|
||||
|
||||
|
||||
def test_exiftool_terminate():
|
||||
""" Test that exiftool process is terminated when exiftool.terminate() is called """
|
||||
exif1 = dozo.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
exif1 = ordigi.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
|
||||
assert dozo.exiftool.exiftool_is_running()
|
||||
assert ordigi.exiftool.exiftool_is_running()
|
||||
|
||||
dozo.exiftool.terminate_exiftool()
|
||||
ordigi.exiftool.terminate_exiftool()
|
||||
|
||||
assert not dozo.exiftool.exiftool_is_running()
|
||||
assert not ordigi.exiftool.exiftool_is_running()
|
||||
|
||||
# verify we can create a new instance after termination
|
||||
exif2 = dozo.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
exif2 = ordigi.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD)
|
||||
assert exif2.asdict()["IPTC:Keywords"] == "wedding"
|
||||
|
|
|
@ -8,11 +8,11 @@ from sys import platform
|
|||
from time import sleep
|
||||
|
||||
from .conftest import copy_sample_files
|
||||
from dozo import constants
|
||||
from dozo.database import Db
|
||||
from dozo.filesystem import FileSystem
|
||||
from dozo.media.media import Media
|
||||
from dozo.exiftool import ExifToolCaching, exiftool_is_running, terminate_exiftool
|
||||
from ordigi import constants
|
||||
from ordigi.database import Db
|
||||
from ordigi.filesystem import FileSystem
|
||||
from ordigi.media import Media
|
||||
from ordigi.exiftool import ExifToolCaching, exiftool_is_running, terminate_exiftool
|
||||
|
||||
|
||||
@pytest.mark.skip()
|
||||
|
|
|
@ -6,14 +6,12 @@ import shutil
|
|||
import tempfile
|
||||
|
||||
from .conftest import copy_sample_files
|
||||
from dozo import constants
|
||||
from dozo.media.media import Media
|
||||
from dozo.media.audio import Audio
|
||||
from dozo.media.photo import Photo
|
||||
from dozo.media.video import Video
|
||||
from dozo.exiftool import ExifTool, ExifToolCaching
|
||||
from ordigi import constants
|
||||
from ordigi.media import Media
|
||||
from ordigi.images import Images
|
||||
from ordigi.exiftool import ExifTool, ExifToolCaching
|
||||
|
||||
DOZO_PATH = Path(__file__).parent.parent
|
||||
ORDIGI_PATH = Path(__file__).parent.parent
|
||||
CACHING = True
|
||||
|
||||
class TestMetadata:
|
||||
|
|
Loading…
Reference in New Issue