Still working on issue #208
This commit is contained in:
@@ -23,7 +23,12 @@ from pathvalidate import (
|
||||
|
||||
import osxphotos
|
||||
|
||||
from ._constants import _EXIF_TOOL_URL, _PHOTOS_4_VERSION, _UNKNOWN_PLACE, UNICODE_FORMAT
|
||||
from ._constants import (
|
||||
_EXIF_TOOL_URL,
|
||||
_PHOTOS_4_VERSION,
|
||||
_UNKNOWN_PLACE,
|
||||
UNICODE_FORMAT,
|
||||
)
|
||||
from ._export_db import ExportDB, ExportDBInMemory
|
||||
from ._version import __version__
|
||||
from .datetime_formatter import DateTimeFormatter
|
||||
@@ -45,6 +50,7 @@ def verbose(*args, **kwargs):
|
||||
if VERBOSE:
|
||||
click.echo(*args, **kwargs)
|
||||
|
||||
|
||||
def normalize_unicode(value):
|
||||
""" normalize unicode data """
|
||||
if value is not None:
|
||||
@@ -57,6 +63,7 @@ def normalize_unicode(value):
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def get_photos_db(*db_options):
|
||||
""" Return path to photos db, select first non-None db_options
|
||||
If no db_options are non-None, try to find library to use in
|
||||
@@ -605,9 +612,9 @@ def keywords(ctx, cli_obj, db, json_, photos_library):
|
||||
photosdb = osxphotos.PhotosDB(dbfile=db)
|
||||
keywords = {"keywords": photosdb.keywords_as_dict}
|
||||
if json_ or cli_obj.json:
|
||||
click.echo(json.dumps(keywords))
|
||||
click.echo(json.dumps(keywords, ensure_ascii=False))
|
||||
else:
|
||||
click.echo(yaml.dump(keywords, sort_keys=False))
|
||||
click.echo(yaml.dump(keywords, sort_keys=False, allow_unicode=True))
|
||||
|
||||
|
||||
@cli.command()
|
||||
@@ -634,9 +641,9 @@ def albums(ctx, cli_obj, db, json_, photos_library):
|
||||
albums["shared albums"] = photosdb.albums_shared_as_dict
|
||||
|
||||
if json_ or cli_obj.json:
|
||||
click.echo(json.dumps(albums))
|
||||
click.echo(json.dumps(albums, ensure_ascii=False))
|
||||
else:
|
||||
click.echo(yaml.dump(albums, sort_keys=False))
|
||||
click.echo(yaml.dump(albums, sort_keys=False, allow_unicode=True))
|
||||
|
||||
|
||||
@cli.command()
|
||||
@@ -660,9 +667,9 @@ def persons(ctx, cli_obj, db, json_, photos_library):
|
||||
photosdb = osxphotos.PhotosDB(dbfile=db)
|
||||
persons = {"persons": photosdb.persons_as_dict}
|
||||
if json_ or cli_obj.json:
|
||||
click.echo(json.dumps(persons))
|
||||
click.echo(json.dumps(persons, ensure_ascii=False))
|
||||
else:
|
||||
click.echo(yaml.dump(persons, sort_keys=False))
|
||||
click.echo(yaml.dump(persons, sort_keys=False, allow_unicode=True))
|
||||
|
||||
|
||||
@cli.command()
|
||||
@@ -686,9 +693,9 @@ def labels(ctx, cli_obj, db, json_, photos_library):
|
||||
photosdb = osxphotos.PhotosDB(dbfile=db)
|
||||
labels = {"labels": photosdb.labels_as_dict}
|
||||
if json_ or cli_obj.json:
|
||||
click.echo(json.dumps(labels))
|
||||
click.echo(json.dumps(labels, ensure_ascii=False))
|
||||
else:
|
||||
click.echo(yaml.dump(labels, sort_keys=False))
|
||||
click.echo(yaml.dump(labels, sort_keys=False, allow_unicode=True))
|
||||
|
||||
|
||||
@cli.command()
|
||||
@@ -746,9 +753,9 @@ def info(ctx, cli_obj, db, json_, photos_library):
|
||||
info["persons"] = persons
|
||||
|
||||
if cli_obj.json or json_:
|
||||
click.echo(json.dumps(info))
|
||||
click.echo(json.dumps(info, ensure_ascii=False))
|
||||
else:
|
||||
click.echo(yaml.dump(info, sort_keys=False))
|
||||
click.echo(yaml.dump(info, sort_keys=False, allow_unicode=True))
|
||||
|
||||
|
||||
@cli.command()
|
||||
@@ -796,9 +803,9 @@ def places(ctx, cli_obj, db, json_, photos_library):
|
||||
# below needed for to make CliRunner work for testing
|
||||
cli_json = cli_obj.json if cli_obj is not None else None
|
||||
if json_ or cli_json:
|
||||
click.echo(json.dumps(places))
|
||||
click.echo(json.dumps(places, ensure_ascii=False))
|
||||
else:
|
||||
click.echo(yaml.dump(places, sort_keys=False))
|
||||
click.echo(yaml.dump(places, sort_keys=False, allow_unicode=True))
|
||||
|
||||
|
||||
@cli.command()
|
||||
@@ -861,7 +868,7 @@ def _list_libraries(json_=False, error=True):
|
||||
"system_library": sys_lib,
|
||||
"last_library": last_lib,
|
||||
}
|
||||
click.echo(json.dumps(libs))
|
||||
click.echo(json.dumps(libs, ensure_ascii=False))
|
||||
else:
|
||||
last_lib_flag = sys_lib_flag = False
|
||||
|
||||
@@ -1884,7 +1891,7 @@ def _query(
|
||||
description = normalize_unicode(description)
|
||||
place = normalize_unicode(place)
|
||||
label = normalize_unicode(label)
|
||||
|
||||
|
||||
if album:
|
||||
photos = get_photos_by_attribute(photos, "albums", album, ignore_case)
|
||||
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
""" version info """
|
||||
|
||||
__version__ = "0.33.8"
|
||||
__version__ = "0.33.9"
|
||||
|
||||
@@ -307,14 +307,26 @@ ALBUMS_JSON = {
|
||||
"albums": {
|
||||
"Raw": 4,
|
||||
"Pumpkin Farm": 3,
|
||||
"AlbumInFolder": 2,
|
||||
"Test Album": 2,
|
||||
"AlbumInFolder": 2,
|
||||
"I have a deleted twin": 1,
|
||||
"2018-10 - Sponsion, Museum, Frühstück, Römermuseum": 1,
|
||||
"EmptyAlbum": 0,
|
||||
},
|
||||
"shared albums": {},
|
||||
}
|
||||
|
||||
ALBUMS_STR = """albums:
|
||||
Raw: 4
|
||||
Pumpkin Farm: 3
|
||||
Test Album: 2
|
||||
AlbumInFolder: 2
|
||||
I have a deleted twin: 1
|
||||
2018-10 - Sponsion, Museum, Frühstück, Römermuseum: 1
|
||||
EmptyAlbum: 0
|
||||
shared albums: {}
|
||||
"""
|
||||
|
||||
PERSONS_JSON = {"persons": {"Katie": 3, "Suzy": 2, "_UNKNOWN_": 1, "Maria": 2}}
|
||||
|
||||
UUID_EXPECTED_FROM_FILE = [
|
||||
@@ -1817,6 +1829,7 @@ def test_export_album():
|
||||
files = glob.glob("*")
|
||||
assert sorted(files) == sorted(CLI_EXPORT_FILENAMES_ALBUM)
|
||||
|
||||
|
||||
def test_export_album_unicode_name():
|
||||
"""Test export of an album with non-English characters in name """
|
||||
import glob
|
||||
@@ -1830,14 +1843,19 @@ def test_export_album_unicode_name():
|
||||
with runner.isolated_filesystem():
|
||||
result = runner.invoke(
|
||||
export,
|
||||
[os.path.join(cwd, PHOTOS_DB_15_6), ".", "--album", "2018-10 - Sponsion, Museum, Frühstück, Römermuseum", "-V"],
|
||||
[
|
||||
os.path.join(cwd, PHOTOS_DB_15_6),
|
||||
".",
|
||||
"--album",
|
||||
"2018-10 - Sponsion, Museum, Frühstück, Römermuseum",
|
||||
"-V",
|
||||
],
|
||||
)
|
||||
assert result.exit_code == 0
|
||||
files = glob.glob("*")
|
||||
assert sorted(files) == sorted(CLI_EXPORT_FILENAMES_ALBUM_UNICODE)
|
||||
|
||||
|
||||
|
||||
def test_export_album_deleted_twin():
|
||||
"""Test export of an album where album of same name has been deleted """
|
||||
import glob
|
||||
@@ -2790,7 +2808,9 @@ def test_export_touch_files_update():
|
||||
in result.output
|
||||
)
|
||||
|
||||
for fname, mtime in zip(CLI_EXPORT_BY_DATE_NEED_TOUCH, CLI_EXPORT_BY_DATE_NEED_TOUCH_TIMES):
|
||||
for fname, mtime in zip(
|
||||
CLI_EXPORT_BY_DATE_NEED_TOUCH, CLI_EXPORT_BY_DATE_NEED_TOUCH_TIMES
|
||||
):
|
||||
st = os.stat(fname)
|
||||
assert int(st.st_mtime) != int(mtime)
|
||||
|
||||
@@ -2811,7 +2831,9 @@ def test_export_touch_files_update():
|
||||
in result.output
|
||||
)
|
||||
|
||||
for fname, mtime in zip(CLI_EXPORT_BY_DATE_NEED_TOUCH, CLI_EXPORT_BY_DATE_NEED_TOUCH_TIMES):
|
||||
for fname, mtime in zip(
|
||||
CLI_EXPORT_BY_DATE_NEED_TOUCH, CLI_EXPORT_BY_DATE_NEED_TOUCH_TIMES
|
||||
):
|
||||
st = os.stat(fname)
|
||||
assert int(st.st_mtime) == int(mtime)
|
||||
|
||||
@@ -3085,9 +3107,26 @@ def test_keywords():
|
||||
json_got = json.loads(result.output)
|
||||
assert json_got == KEYWORDS_JSON
|
||||
|
||||
# TODO: this fails with result.exit_code == 1 but I think this has to
|
||||
# do with how pytest is invoking the command
|
||||
# def test_albums_str():
|
||||
# """Test osxphotos albums string output """
|
||||
# import json
|
||||
# import osxphotos
|
||||
# import os
|
||||
# import os.path
|
||||
# from osxphotos.__main__ import albums
|
||||
|
||||
def test_albums():
|
||||
"""Test osxphotos albums """
|
||||
# runner = CliRunner()
|
||||
# cwd = os.getcwd()
|
||||
# result = runner.invoke(albums, ["--db", os.path.join(cwd, PHOTOS_DB_15_6), ])
|
||||
# assert result.exit_code == 0
|
||||
|
||||
# assert result.output == ALBUMS_STR
|
||||
|
||||
|
||||
def test_albums_json():
|
||||
"""Test osxphotos albums json output """
|
||||
import json
|
||||
import osxphotos
|
||||
import os
|
||||
@@ -3097,7 +3136,7 @@ def test_albums():
|
||||
runner = CliRunner()
|
||||
cwd = os.getcwd()
|
||||
result = runner.invoke(
|
||||
albums, ["--db", os.path.join(cwd, PHOTOS_DB_15_5), "--json"]
|
||||
albums, ["--db", os.path.join(cwd, PHOTOS_DB_15_6), "--json"]
|
||||
)
|
||||
assert result.exit_code == 0
|
||||
|
||||
|
||||
Reference in New Issue
Block a user