* Added query_command and example * Refactored QUERY_OPTIONS, added query_command, refactored verbose, #930, #931 * Added query options to debug-dump, #966 * Refactored query, #602 * Added precedence test for --load-config * Refactored handling of query options * Refactored export_photo * Removed extraneous print * Updated API_README * Updated examples
119 lines
3.4 KiB
Python
119 lines
3.4 KiB
Python
"""dump command for osxphotos CLI """
|
|
|
|
import click
|
|
|
|
import osxphotos
|
|
from osxphotos.cli.click_rich_echo import (
|
|
rich_click_echo,
|
|
set_rich_console,
|
|
set_rich_theme,
|
|
)
|
|
from osxphotos.phototemplate import RenderOptions
|
|
from osxphotos.queryoptions import QueryOptions
|
|
|
|
from .cli_params import (
|
|
DB_ARGUMENT,
|
|
DB_OPTION,
|
|
DELETED_OPTIONS,
|
|
FIELD_OPTION,
|
|
JSON_OPTION,
|
|
)
|
|
from .color_themes import get_default_theme
|
|
from .common import get_photos_db
|
|
from .list import _list_libraries
|
|
from .print_photo_info import print_photo_fields, print_photo_info
|
|
from .verbose import get_verbose_console
|
|
|
|
|
|
@click.command()
|
|
@DB_OPTION
|
|
@JSON_OPTION
|
|
@DELETED_OPTIONS
|
|
@FIELD_OPTION
|
|
@click.option(
|
|
"--print",
|
|
"print_template",
|
|
metavar="TEMPLATE",
|
|
multiple=True,
|
|
help="Render TEMPLATE string for each photo queried and print to stdout. "
|
|
"TEMPLATE is an osxphotos template string. "
|
|
"This may be useful for creating custom reports, etc. "
|
|
"If --print TEMPLATE is provided, regular output is suppressed "
|
|
"and only the rendered TEMPLATE values are printed. "
|
|
"May be repeated to print multiple template strings. ",
|
|
)
|
|
@DB_ARGUMENT
|
|
@click.pass_obj
|
|
@click.pass_context
|
|
def dump(
|
|
ctx,
|
|
cli_obj,
|
|
db,
|
|
deleted,
|
|
deleted_only,
|
|
field,
|
|
json_,
|
|
photos_library,
|
|
print_template,
|
|
):
|
|
"""Print list of all photos & associated info from the Photos library.
|
|
|
|
NOTE: dump is DEPRECATED and will be removed in a future release.
|
|
Use `osxphotos query` instead.
|
|
"""
|
|
|
|
# below needed for to make CliRunner work for testing
|
|
cli_db = cli_obj.db if cli_obj is not None else None
|
|
cli_json = cli_obj.json if cli_obj is not None else None
|
|
|
|
db = get_photos_db(*photos_library, db, cli_db)
|
|
if db is None:
|
|
click.echo(ctx.obj.group.commands["dump"].get_help(ctx), err=True)
|
|
click.echo("\n\nLocated the following Photos library databases: ", err=True)
|
|
_list_libraries()
|
|
return
|
|
|
|
# check exclusive options
|
|
if deleted and deleted_only:
|
|
click.echo("Incompatible dump options", err=True)
|
|
click.echo(ctx.obj.group.commands["dump"].get_help(ctx), err=True)
|
|
return
|
|
|
|
# set console for rich_echo to be same as for verbose_
|
|
set_rich_console(get_verbose_console())
|
|
set_rich_theme(get_default_theme())
|
|
|
|
photosdb = osxphotos.PhotosDB(dbfile=db)
|
|
if deleted or deleted_only:
|
|
photos = photosdb.photos(movies=True, intrash=True)
|
|
else:
|
|
photos = []
|
|
if not deleted_only:
|
|
photos += photosdb.photos(movies=True)
|
|
|
|
if not print_template and not field:
|
|
# just dump and be done
|
|
print_photo_info(photos, cli_json or json_)
|
|
return
|
|
|
|
if field:
|
|
print_photo_fields(photos, field, cli_json or json_)
|
|
|
|
if print_template:
|
|
# have print template(s)
|
|
options = RenderOptions()
|
|
for p in photos:
|
|
for template in print_template:
|
|
rendered_templates, unmatched = p.render_template(
|
|
template,
|
|
options,
|
|
)
|
|
if unmatched:
|
|
rich_click_echo(
|
|
f"[warning]Unmatched template field: {unmatched}[/]"
|
|
)
|
|
for rendered_template in rendered_templates:
|
|
if not rendered_template:
|
|
continue
|
|
print(rendered_template)
|