Updated docs
This commit is contained in:
@@ -1823,7 +1823,7 @@ Substitution Description
|
|||||||
{lf} A line feed: '\n', alias for {newline}
|
{lf} A line feed: '\n', alias for {newline}
|
||||||
{cr} A carriage return: '\r'
|
{cr} A carriage return: '\r'
|
||||||
{crlf} a carriage return + line feed: '\r\n'
|
{crlf} a carriage return + line feed: '\r\n'
|
||||||
{osxphotos_version} The osxphotos version, e.g. '0.42.65'
|
{osxphotos_version} The osxphotos version, e.g. '0.42.66'
|
||||||
{osxphotos_cmd_line} The full command line used to run osxphotos
|
{osxphotos_cmd_line} The full command line used to run osxphotos
|
||||||
|
|
||||||
The following substitutions may result in multiple values. Thus if specified for
|
The following substitutions may result in multiple values. Thus if specified for
|
||||||
@@ -3672,7 +3672,7 @@ The following template field substitutions are availabe for use the templating s
|
|||||||
|{lf}|A line feed: '\n', alias for {newline}|
|
|{lf}|A line feed: '\n', alias for {newline}|
|
||||||
|{cr}|A carriage return: '\r'|
|
|{cr}|A carriage return: '\r'|
|
||||||
|{crlf}|a carriage return + line feed: '\r\n'|
|
|{crlf}|a carriage return + line feed: '\r\n'|
|
||||||
|{osxphotos_version}|The osxphotos version, e.g. '0.42.65'|
|
|{osxphotos_version}|The osxphotos version, e.g. '0.42.66'|
|
||||||
|{osxphotos_cmd_line}|The full command line used to run osxphotos|
|
|{osxphotos_cmd_line}|The full command line used to run osxphotos|
|
||||||
|{album}|Album(s) photo is contained in|
|
|{album}|Album(s) photo is contained in|
|
||||||
|{folder_album}|Folder path + album photo is contained in. e.g. 'Folder/Subfolder/Album' or just 'Album' if no enclosing folder|
|
|{folder_album}|Folder path + album photo is contained in. e.g. 'Folder/Subfolder/Album' or just 'Album' if no enclosing folder|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Sphinx build info version 1
|
# Sphinx build info version 1
|
||||||
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
|
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
|
||||||
config: 210ecd9d654dea5d4c21627449ca1d63
|
config: 37d92c35f55b2e7d711392f3f43dd1ef
|
||||||
tags: 645f666f9bcd5a90fca523b33c5a78b7
|
tags: 645f666f9bcd5a90fca523b33c5a78b7
|
||||||
|
|||||||
@@ -5,10 +5,10 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Overview: module code — osxphotos 0.42.20 documentation</title>
|
<title>Overview: module code — osxphotos 0.42.66 documentation</title>
|
||||||
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
|
||||||
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
|
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
|
||||||
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
|
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
|
||||||
<script src="../_static/jquery.js"></script>
|
<script src="../_static/jquery.js"></script>
|
||||||
<script src="../_static/underscore.js"></script>
|
<script src="../_static/underscore.js"></script>
|
||||||
<script src="../_static/doctools.js"></script>
|
<script src="../_static/doctools.js"></script>
|
||||||
@@ -31,7 +31,11 @@
|
|||||||
<div class="body" role="main">
|
<div class="body" role="main">
|
||||||
|
|
||||||
<h1>All modules for which code is available</h1>
|
<h1>All modules for which code is available</h1>
|
||||||
<ul><li><a href="osxphotos/photoinfo/photoinfo.html">osxphotos.photoinfo.photoinfo</a></li>
|
<ul><li><a href="osxphotos/photoinfo/_photoinfo_exifinfo.html">osxphotos.photoinfo._photoinfo_exifinfo</a></li>
|
||||||
|
<li><a href="osxphotos/photoinfo/_photoinfo_export.html">osxphotos.photoinfo._photoinfo_export</a></li>
|
||||||
|
<li><a href="osxphotos/photoinfo/_photoinfo_scoreinfo.html">osxphotos.photoinfo._photoinfo_scoreinfo</a></li>
|
||||||
|
<li><a href="osxphotos/photoinfo/_photoinfo_searchinfo.html">osxphotos.photoinfo._photoinfo_searchinfo</a></li>
|
||||||
|
<li><a href="osxphotos/photoinfo/photoinfo.html">osxphotos.photoinfo.photoinfo</a></li>
|
||||||
<li><a href="osxphotos/photosdb/photosdb.html">osxphotos.photosdb.photosdb</a></li>
|
<li><a href="osxphotos/photosdb/photosdb.html">osxphotos.photosdb.photosdb</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@@ -89,7 +93,7 @@
|
|||||||
©2021, Rhet Turnbull.
|
©2021, Rhet Turnbull.
|
||||||
|
|
||||||
|
|
|
|
||||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.2</a>
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
|
||||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -5,10 +5,10 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>osxphotos.photoinfo._photoinfo_export — osxphotos 0.42.17 documentation</title>
|
<title>osxphotos.photoinfo._photoinfo_export — osxphotos 0.42.66 documentation</title>
|
||||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css" />
|
||||||
<link rel="stylesheet" href="../../../_static/alabaster.css" type="text/css" />
|
<link rel="stylesheet" type="text/css" href="../../../_static/alabaster.css" />
|
||||||
<script id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
<script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
|
||||||
<script src="../../../_static/jquery.js"></script>
|
<script src="../../../_static/jquery.js"></script>
|
||||||
<script src="../../../_static/underscore.js"></script>
|
<script src="../../../_static/underscore.js"></script>
|
||||||
<script src="../../../_static/doctools.js"></script>
|
<script src="../../../_static/doctools.js"></script>
|
||||||
@@ -48,6 +48,7 @@
|
|||||||
<span class="c1"># TODO: should this be its own PhotoExporter class?</span>
|
<span class="c1"># TODO: should this be its own PhotoExporter class?</span>
|
||||||
<span class="c1"># TODO: the various sidecar_json, sidecar_xmp, etc args should all be collapsed to a sidecar param using a bit mask</span>
|
<span class="c1"># TODO: the various sidecar_json, sidecar_xmp, etc args should all be collapsed to a sidecar param using a bit mask</span>
|
||||||
|
|
||||||
|
<span class="kn">import</span> <span class="nn">dataclasses</span>
|
||||||
<span class="kn">import</span> <span class="nn">glob</span>
|
<span class="kn">import</span> <span class="nn">glob</span>
|
||||||
<span class="kn">import</span> <span class="nn">hashlib</span>
|
<span class="kn">import</span> <span class="nn">hashlib</span>
|
||||||
<span class="kn">import</span> <span class="nn">json</span>
|
<span class="kn">import</span> <span class="nn">json</span>
|
||||||
@@ -57,11 +58,11 @@
|
|||||||
<span class="kn">import</span> <span class="nn">re</span>
|
<span class="kn">import</span> <span class="nn">re</span>
|
||||||
<span class="kn">import</span> <span class="nn">tempfile</span>
|
<span class="kn">import</span> <span class="nn">tempfile</span>
|
||||||
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">namedtuple</span> <span class="c1"># pylint: disable=syntax-error</span>
|
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">namedtuple</span> <span class="c1"># pylint: disable=syntax-error</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Optional</span>
|
||||||
|
|
||||||
<span class="kn">import</span> <span class="nn">photoscript</span>
|
<span class="kn">import</span> <span class="nn">photoscript</span>
|
||||||
<span class="kn">from</span> <span class="nn">mako.template</span> <span class="kn">import</span> <span class="n">Template</span>
|
<span class="kn">from</span> <span class="nn">mako.template</span> <span class="kn">import</span> <span class="n">Template</span>
|
||||||
|
|
||||||
<span class="c1"># from .._applescript import AppleScript</span>
|
|
||||||
<span class="kn">from</span> <span class="nn">.._constants</span> <span class="kn">import</span> <span class="p">(</span>
|
<span class="kn">from</span> <span class="nn">.._constants</span> <span class="kn">import</span> <span class="p">(</span>
|
||||||
<span class="n">_MAX_IPTC_KEYWORD_LEN</span><span class="p">,</span>
|
<span class="n">_MAX_IPTC_KEYWORD_LEN</span><span class="p">,</span>
|
||||||
<span class="n">_OSXPHOTOS_NONE_SENTINEL</span><span class="p">,</span>
|
<span class="n">_OSXPHOTOS_NONE_SENTINEL</span><span class="p">,</span>
|
||||||
@@ -69,6 +70,8 @@
|
|||||||
<span class="n">_UNKNOWN_PERSON</span><span class="p">,</span>
|
<span class="n">_UNKNOWN_PERSON</span><span class="p">,</span>
|
||||||
<span class="n">_XMP_TEMPLATE_NAME</span><span class="p">,</span>
|
<span class="n">_XMP_TEMPLATE_NAME</span><span class="p">,</span>
|
||||||
<span class="n">_XMP_TEMPLATE_NAME_BETA</span><span class="p">,</span>
|
<span class="n">_XMP_TEMPLATE_NAME_BETA</span><span class="p">,</span>
|
||||||
|
<span class="n">DEFAULT_PREVIEW_SUFFIX</span><span class="p">,</span>
|
||||||
|
<span class="n">LIVE_VIDEO_EXTENSIONS</span><span class="p">,</span>
|
||||||
<span class="n">SIDECAR_EXIFTOOL</span><span class="p">,</span>
|
<span class="n">SIDECAR_EXIFTOOL</span><span class="p">,</span>
|
||||||
<span class="n">SIDECAR_JSON</span><span class="p">,</span>
|
<span class="n">SIDECAR_JSON</span><span class="p">,</span>
|
||||||
<span class="n">SIDECAR_XMP</span><span class="p">,</span>
|
<span class="n">SIDECAR_XMP</span><span class="p">,</span>
|
||||||
@@ -84,7 +87,9 @@
|
|||||||
<span class="n">PhotoKitFetchFailed</span><span class="p">,</span>
|
<span class="n">PhotoKitFetchFailed</span><span class="p">,</span>
|
||||||
<span class="n">PhotoLibrary</span><span class="p">,</span>
|
<span class="n">PhotoLibrary</span><span class="p">,</span>
|
||||||
<span class="p">)</span>
|
<span class="p">)</span>
|
||||||
<span class="kn">from</span> <span class="nn">..utils</span> <span class="kn">import</span> <span class="n">findfiles</span><span class="p">,</span> <span class="n">get_preferred_uti_extension</span><span class="p">,</span> <span class="n">lineno</span><span class="p">,</span> <span class="n">noop</span>
|
<span class="kn">from</span> <span class="nn">..phototemplate</span> <span class="kn">import</span> <span class="n">RenderOptions</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">..uti</span> <span class="kn">import</span> <span class="n">get_preferred_uti_extension</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">..utils</span> <span class="kn">import</span> <span class="n">findfiles</span><span class="p">,</span> <span class="n">lineno</span><span class="p">,</span> <span class="n">noop</span>
|
||||||
|
|
||||||
<span class="c1"># retry if use_photos_export fails the first time (which sometimes it does)</span>
|
<span class="c1"># retry if use_photos_export fails the first time (which sometimes it does)</span>
|
||||||
<span class="n">MAX_PHOTOSCRIPT_RETRIES</span> <span class="o">=</span> <span class="mi">3</span>
|
<span class="n">MAX_PHOTOSCRIPT_RETRIES</span> <span class="o">=</span> <span class="mi">3</span>
|
||||||
@@ -250,6 +255,7 @@
|
|||||||
<span class="n">timeout</span><span class="o">=</span><span class="mi">120</span><span class="p">,</span>
|
<span class="n">timeout</span><span class="o">=</span><span class="mi">120</span><span class="p">,</span>
|
||||||
<span class="n">burst</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
<span class="n">burst</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||||
<span class="n">dry_run</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
<span class="n">dry_run</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||||
|
<span class="n">overwrite</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||||
<span class="p">):</span>
|
<span class="p">):</span>
|
||||||
<span class="sd">"""Export photo to dest path using applescript to control Photos</span>
|
<span class="sd">"""Export photo to dest path using applescript to control Photos</span>
|
||||||
<span class="sd"> If photo is a live photo, exports both the photo and associated .mov file</span>
|
<span class="sd"> If photo is a live photo, exports both the photo and associated .mov file</span>
|
||||||
@@ -329,6 +335,8 @@
|
|||||||
<span class="c1"># use the name Photos provided</span>
|
<span class="c1"># use the name Photos provided</span>
|
||||||
<span class="n">dest_new</span> <span class="o">=</span> <span class="n">dest</span> <span class="o">/</span> <span class="n">path</span><span class="o">.</span><span class="n">name</span>
|
<span class="n">dest_new</span> <span class="o">=</span> <span class="n">dest</span> <span class="o">/</span> <span class="n">path</span><span class="o">.</span><span class="n">name</span>
|
||||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">dry_run</span><span class="p">:</span>
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">dry_run</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="n">overwrite</span> <span class="ow">and</span> <span class="n">dest_new</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
||||||
|
<span class="n">FileUtil</span><span class="o">.</span><span class="n">unlink</span><span class="p">(</span><span class="n">dest_new</span><span class="p">)</span>
|
||||||
<span class="n">FileUtil</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">path</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="n">dest_new</span><span class="p">))</span>
|
<span class="n">FileUtil</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">path</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="n">dest_new</span><span class="p">))</span>
|
||||||
<span class="n">exported_paths</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">dest_new</span><span class="p">))</span>
|
<span class="n">exported_paths</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">dest_new</span><span class="p">))</span>
|
||||||
<span class="k">return</span> <span class="n">exported_paths</span>
|
<span class="k">return</span> <span class="n">exported_paths</span>
|
||||||
@@ -382,7 +390,7 @@
|
|||||||
<span class="sd"> files: list of file paths</span>
|
<span class="sd"> files: list of file paths</span>
|
||||||
<span class="sd"> jpeg_ext: extension to use for jpeg files found in files, e.g. "jpg"</span>
|
<span class="sd"> jpeg_ext: extension to use for jpeg files found in files, e.g. "jpg"</span>
|
||||||
<span class="sd"> fileutil: a FileUtil object</span>
|
<span class="sd"> fileutil: a FileUtil object</span>
|
||||||
<span class="sd"> </span>
|
|
||||||
<span class="sd"> Returns:</span>
|
<span class="sd"> Returns:</span>
|
||||||
<span class="sd"> list of files with updated names</span>
|
<span class="sd"> list of files with updated names</span>
|
||||||
|
|
||||||
@@ -405,7 +413,7 @@
|
|||||||
<span class="k">def</span> <span class="nf">export</span><span class="p">(</span>
|
<span class="k">def</span> <span class="nf">export</span><span class="p">(</span>
|
||||||
<span class="bp">self</span><span class="p">,</span>
|
<span class="bp">self</span><span class="p">,</span>
|
||||||
<span class="n">dest</span><span class="p">,</span>
|
<span class="n">dest</span><span class="p">,</span>
|
||||||
<span class="o">*</span><span class="n">filename</span><span class="p">,</span>
|
<span class="n">filename</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
<span class="n">edited</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
<span class="n">edited</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||||
<span class="n">live_photo</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
<span class="n">live_photo</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||||
<span class="n">raw_photo</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
<span class="n">raw_photo</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||||
@@ -422,6 +430,7 @@
|
|||||||
<span class="n">use_persons_as_keywords</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
<span class="n">use_persons_as_keywords</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||||
<span class="n">keyword_template</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
<span class="n">keyword_template</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
<span class="n">description_template</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
<span class="n">description_template</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="n">render_options</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">RenderOptions</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||||
<span class="p">):</span>
|
<span class="p">):</span>
|
||||||
<span class="sd">"""export photo</span>
|
<span class="sd">"""export photo</span>
|
||||||
<span class="sd"> dest: must be valid destination path (or exception raised)</span>
|
<span class="sd"> dest: must be valid destination path (or exception raised)</span>
|
||||||
@@ -435,12 +444,12 @@
|
|||||||
<span class="sd"> silently ignored).</span>
|
<span class="sd"> silently ignored).</span>
|
||||||
<span class="sd"> e.g. to get the extension of the edited photo,</span>
|
<span class="sd"> e.g. to get the extension of the edited photo,</span>
|
||||||
<span class="sd"> reference PhotoInfo.path_edited</span>
|
<span class="sd"> reference PhotoInfo.path_edited</span>
|
||||||
<span class="sd"> edited: (boolean, default=False); if True will export the edited version of the photo</span>
|
<span class="sd"> edited: (boolean, default=False); if True will export the edited version of the photo, otherwise exports the original version</span>
|
||||||
<span class="sd"> (or raise exception if no edited version)</span>
|
<span class="sd"> (or raise exception if no edited version)</span>
|
||||||
<span class="sd"> live_photo: (boolean, default=False); if True, will also export the associted .mov for live photos</span>
|
<span class="sd"> live_photo: (boolean, default=False); if True, will also export the associated .mov for live photos</span>
|
||||||
<span class="sd"> raw_photo: (boolean, default=False); if True, will also export the associted RAW photo</span>
|
<span class="sd"> raw_photo: (boolean, default=False); if True, will also export the associated RAW photo</span>
|
||||||
<span class="sd"> export_as_hardlink: (boolean, default=False); if True, will hardlink files instead of copying them</span>
|
<span class="sd"> export_as_hardlink: (boolean, default=False); if True, will hardlink files instead of copying them</span>
|
||||||
<span class="sd"> overwrite: (boolean, default=False); if True will overwrite files if they alreay exist</span>
|
<span class="sd"> overwrite: (boolean, default=False); if True will overwrite files if they already exist</span>
|
||||||
<span class="sd"> increment: (boolean, default=True); if True, will increment file name until a non-existant name is found</span>
|
<span class="sd"> increment: (boolean, default=True); if True, will increment file name until a non-existant name is found</span>
|
||||||
<span class="sd"> if overwrite=False and increment=False, export will fail if destination file already exists</span>
|
<span class="sd"> if overwrite=False and increment=False, export will fail if destination file already exists</span>
|
||||||
<span class="sd"> sidecar_json: if set will write a json sidecar with data in format readable by exiftool</span>
|
<span class="sd"> sidecar_json: if set will write a json sidecar with data in format readable by exiftool</span>
|
||||||
@@ -459,7 +468,8 @@
|
|||||||
<span class="sd"> when exporting metadata with exiftool or sidecar</span>
|
<span class="sd"> when exporting metadata with exiftool or sidecar</span>
|
||||||
<span class="sd"> keyword_template: (list of strings); list of template strings that will be rendered as used as keywords</span>
|
<span class="sd"> keyword_template: (list of strings); list of template strings that will be rendered as used as keywords</span>
|
||||||
<span class="sd"> description_template: string; optional template string that will be rendered for use as photo description</span>
|
<span class="sd"> description_template: string; optional template string that will be rendered for use as photo description</span>
|
||||||
<span class="sd"> </span>
|
<span class="sd"> render_options: an optional osxphotos.phototemplate.RenderOptions instance with options to pass to template renderer</span>
|
||||||
|
|
||||||
<span class="sd"> Returns: list of photos exported</span>
|
<span class="sd"> Returns: list of photos exported</span>
|
||||||
<span class="sd"> """</span>
|
<span class="sd"> """</span>
|
||||||
|
|
||||||
@@ -473,10 +483,25 @@
|
|||||||
<span class="k">if</span> <span class="n">sidecar_xmp</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">sidecar_xmp</span><span class="p">:</span>
|
||||||
<span class="n">sidecar</span> <span class="o">|=</span> <span class="n">SIDECAR_XMP</span>
|
<span class="n">sidecar</span> <span class="o">|=</span> <span class="n">SIDECAR_XMP</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">filename</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">edited</span><span class="p">:</span>
|
||||||
|
<span class="n">filename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">original_filename</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">original_name</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">original_filename</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">path_edited</span><span class="p">:</span>
|
||||||
|
<span class="n">ext</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">path_edited</span><span class="p">)</span><span class="o">.</span><span class="n">suffix</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">uti</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">uti_edited</span> <span class="k">if</span> <span class="n">edited</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">uti_edited</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">uti</span>
|
||||||
|
<span class="n">ext</span> <span class="o">=</span> <span class="n">get_preferred_uti_extension</span><span class="p">(</span><span class="n">uti</span><span class="p">)</span>
|
||||||
|
<span class="n">ext</span> <span class="o">=</span> <span class="s2">"."</span> <span class="o">+</span> <span class="n">ext</span>
|
||||||
|
<span class="n">filename</span> <span class="o">=</span> <span class="n">original_name</span><span class="o">.</span><span class="n">stem</span> <span class="o">+</span> <span class="s2">"_edited"</span> <span class="o">+</span> <span class="n">ext</span>
|
||||||
|
|
||||||
<span class="n">results</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">export2</span><span class="p">(</span>
|
<span class="n">results</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">export2</span><span class="p">(</span>
|
||||||
<span class="n">dest</span><span class="p">,</span>
|
<span class="n">dest</span><span class="p">,</span>
|
||||||
<span class="o">*</span><span class="n">filename</span><span class="p">,</span>
|
<span class="n">original</span><span class="o">=</span><span class="ow">not</span> <span class="n">edited</span><span class="p">,</span>
|
||||||
|
<span class="n">original_filename</span><span class="o">=</span><span class="n">filename</span><span class="p">,</span>
|
||||||
<span class="n">edited</span><span class="o">=</span><span class="n">edited</span><span class="p">,</span>
|
<span class="n">edited</span><span class="o">=</span><span class="n">edited</span><span class="p">,</span>
|
||||||
|
<span class="n">edited_filename</span><span class="o">=</span><span class="n">filename</span><span class="p">,</span>
|
||||||
<span class="n">live_photo</span><span class="o">=</span><span class="n">live_photo</span><span class="p">,</span>
|
<span class="n">live_photo</span><span class="o">=</span><span class="n">live_photo</span><span class="p">,</span>
|
||||||
<span class="n">raw_photo</span><span class="o">=</span><span class="n">raw_photo</span><span class="p">,</span>
|
<span class="n">raw_photo</span><span class="o">=</span><span class="n">raw_photo</span><span class="p">,</span>
|
||||||
<span class="n">export_as_hardlink</span><span class="o">=</span><span class="n">export_as_hardlink</span><span class="p">,</span>
|
<span class="n">export_as_hardlink</span><span class="o">=</span><span class="n">export_as_hardlink</span><span class="p">,</span>
|
||||||
@@ -490,6 +515,7 @@
|
|||||||
<span class="n">use_persons_as_keywords</span><span class="o">=</span><span class="n">use_persons_as_keywords</span><span class="p">,</span>
|
<span class="n">use_persons_as_keywords</span><span class="o">=</span><span class="n">use_persons_as_keywords</span><span class="p">,</span>
|
||||||
<span class="n">keyword_template</span><span class="o">=</span><span class="n">keyword_template</span><span class="p">,</span>
|
<span class="n">keyword_template</span><span class="o">=</span><span class="n">keyword_template</span><span class="p">,</span>
|
||||||
<span class="n">description_template</span><span class="o">=</span><span class="n">description_template</span><span class="p">,</span>
|
<span class="n">description_template</span><span class="o">=</span><span class="n">description_template</span><span class="p">,</span>
|
||||||
|
<span class="n">render_options</span><span class="o">=</span><span class="n">render_options</span><span class="p">,</span>
|
||||||
<span class="p">)</span>
|
<span class="p">)</span>
|
||||||
|
|
||||||
<span class="k">return</span> <span class="n">results</span><span class="o">.</span><span class="n">exported</span>
|
<span class="k">return</span> <span class="n">results</span><span class="o">.</span><span class="n">exported</span>
|
||||||
@@ -498,8 +524,10 @@
|
|||||||
<span class="k">def</span> <span class="nf">export2</span><span class="p">(</span>
|
<span class="k">def</span> <span class="nf">export2</span><span class="p">(</span>
|
||||||
<span class="bp">self</span><span class="p">,</span>
|
<span class="bp">self</span><span class="p">,</span>
|
||||||
<span class="n">dest</span><span class="p">,</span>
|
<span class="n">dest</span><span class="p">,</span>
|
||||||
<span class="o">*</span><span class="n">filename</span><span class="p">,</span>
|
<span class="n">original</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||||
|
<span class="n">original_filename</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
<span class="n">edited</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
<span class="n">edited</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||||
|
<span class="n">edited_filename</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
<span class="n">live_photo</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
<span class="n">live_photo</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||||
<span class="n">raw_photo</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
<span class="n">raw_photo</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||||
<span class="n">export_as_hardlink</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
<span class="n">export_as_hardlink</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||||
@@ -532,6 +560,9 @@
|
|||||||
<span class="n">persons</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
<span class="n">persons</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||||
<span class="n">location</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
<span class="n">location</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||||
<span class="n">replace_keywords</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
<span class="n">replace_keywords</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||||
|
<span class="n">preview</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||||
|
<span class="n">preview_suffix</span><span class="o">=</span><span class="n">DEFAULT_PREVIEW_SUFFIX</span><span class="p">,</span>
|
||||||
|
<span class="n">render_options</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">RenderOptions</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||||
<span class="p">):</span>
|
<span class="p">):</span>
|
||||||
<span class="sd">"""export photo, like export but with update and dry_run options</span>
|
<span class="sd">"""export photo, like export but with update and dry_run options</span>
|
||||||
<span class="sd"> dest: must be valid destination path or exception raised</span>
|
<span class="sd"> dest: must be valid destination path or exception raised</span>
|
||||||
@@ -543,12 +574,12 @@
|
|||||||
<span class="sd"> in which case export will use the extension provided by Photos upon export.</span>
|
<span class="sd"> in which case export will use the extension provided by Photos upon export.</span>
|
||||||
<span class="sd"> e.g. to get the extension of the edited photo,</span>
|
<span class="sd"> e.g. to get the extension of the edited photo,</span>
|
||||||
<span class="sd"> reference PhotoInfo.path_edited</span>
|
<span class="sd"> reference PhotoInfo.path_edited</span>
|
||||||
|
<span class="sd"> original: (boolean, default=True); if True, will export the original version of the photo</span>
|
||||||
<span class="sd"> edited: (boolean, default=False); if True will export the edited version of the photo</span>
|
<span class="sd"> edited: (boolean, default=False); if True will export the edited version of the photo</span>
|
||||||
<span class="sd"> (or raise exception if no edited version)</span>
|
<span class="sd"> live_photo: (boolean, default=False); if True, will also export the associated .mov for live photos</span>
|
||||||
<span class="sd"> live_photo: (boolean, default=False); if True, will also export the associted .mov for live photos</span>
|
<span class="sd"> raw_photo: (boolean, default=False); if True, will also export the associated RAW photo</span>
|
||||||
<span class="sd"> raw_photo: (boolean, default=False); if True, will also export the associted RAW photo</span>
|
|
||||||
<span class="sd"> export_as_hardlink: (boolean, default=False); if True, will hardlink files instead of copying them</span>
|
<span class="sd"> export_as_hardlink: (boolean, default=False); if True, will hardlink files instead of copying them</span>
|
||||||
<span class="sd"> overwrite: (boolean, default=False); if True will overwrite files if they alreay exist</span>
|
<span class="sd"> overwrite: (boolean, default=False); if True will overwrite files if they already exist</span>
|
||||||
<span class="sd"> increment: (boolean, default=True); if True, will increment file name until a non-existant name is found</span>
|
<span class="sd"> increment: (boolean, default=True); if True, will increment file name until a non-existant name is found</span>
|
||||||
<span class="sd"> if overwrite=False and increment=False, export will fail if destination file already exists</span>
|
<span class="sd"> if overwrite=False and increment=False, export will fail if destination file already exists</span>
|
||||||
<span class="sd"> sidecar: bit field: set to one or more of SIDECAR_XMP, SIDECAR_JSON, SIDECAR_EXIFTOOL</span>
|
<span class="sd"> sidecar: bit field: set to one or more of SIDECAR_XMP, SIDECAR_JSON, SIDECAR_EXIFTOOL</span>
|
||||||
@@ -587,6 +618,9 @@
|
|||||||
<span class="sd"> persons: if True, include persons in exported metadata</span>
|
<span class="sd"> persons: if True, include persons in exported metadata</span>
|
||||||
<span class="sd"> location: if True, include location in exported metadata</span>
|
<span class="sd"> location: if True, include location in exported metadata</span>
|
||||||
<span class="sd"> replace_keywords: if True, keyword_template replaces any keywords, otherwise it's additive</span>
|
<span class="sd"> replace_keywords: if True, keyword_template replaces any keywords, otherwise it's additive</span>
|
||||||
|
<span class="sd"> preview: if True, also exports preview image</span>
|
||||||
|
<span class="sd"> preview_suffix: optional string to append to end of filename for preview images</span>
|
||||||
|
<span class="sd"> render_options: optional osxphotos.phototemplate.RenderOptions instance to specify options for rendering templates</span>
|
||||||
|
|
||||||
<span class="sd"> Returns: ExportResults class</span>
|
<span class="sd"> Returns: ExportResults class</span>
|
||||||
<span class="sd"> ExportResults has attributes:</span>
|
<span class="sd"> ExportResults has attributes:</span>
|
||||||
@@ -609,7 +643,7 @@
|
|||||||
<span class="sd"> "exiftool_warning",</span>
|
<span class="sd"> "exiftool_warning",</span>
|
||||||
<span class="sd"> "exiftool_error",</span>
|
<span class="sd"> "exiftool_error",</span>
|
||||||
|
|
||||||
<span class="sd"> </span>
|
|
||||||
<span class="sd"> Note: to use dry run mode, you must set dry_run=True and also pass in memory version of export_db,</span>
|
<span class="sd"> Note: to use dry run mode, you must set dry_run=True and also pass in memory version of export_db,</span>
|
||||||
<span class="sd"> and no-op fileutil (e.g. ExportDBInMemory and FileUtilNoOp)</span>
|
<span class="sd"> and no-op fileutil (e.g. ExportDBInMemory and FileUtilNoOp)</span>
|
||||||
<span class="sd"> """</span>
|
<span class="sd"> """</span>
|
||||||
@@ -628,108 +662,154 @@
|
|||||||
<span class="k">if</span> <span class="n">verbose</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">verbose</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||||
<span class="n">verbose</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_verbose</span>
|
<span class="n">verbose</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_verbose</span>
|
||||||
|
|
||||||
<span class="c1"># suffix to add to edited files</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_render_options</span> <span class="o">=</span> <span class="n">render_options</span> <span class="ow">or</span> <span class="n">RenderOptions</span><span class="p">()</span>
|
||||||
<span class="c1"># e.g. name will be filename_edited.jpg</span>
|
|
||||||
<span class="n">edited_identifier</span> <span class="o">=</span> <span class="s2">"_edited"</span>
|
|
||||||
|
|
||||||
<span class="c1"># check edited and raise exception trying to export edited version of</span>
|
<span class="n">export_original</span> <span class="o">=</span> <span class="n">original</span>
|
||||||
<span class="c1"># photo that hasn't been edited</span>
|
<span class="n">export_edited</span> <span class="o">=</span> <span class="n">edited</span>
|
||||||
<span class="k">if</span> <span class="n">edited</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">hasadjustments</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">edited</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">hasadjustments</span><span class="p">:</span>
|
||||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
|
||||||
<span class="s2">"Photo does not have adjustments, cannot export edited version"</span>
|
<span class="s2">"Photo does not have adjustments, cannot export edited version"</span>
|
||||||
<span class="p">)</span>
|
<span class="p">)</span>
|
||||||
|
|
||||||
<span class="c1"># check arguments and get destination path and filename (if provided)</span>
|
|
||||||
<span class="k">if</span> <span class="n">filename</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> <span class="o">></span> <span class="mi">2</span><span class="p">:</span>
|
|
||||||
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span>
|
|
||||||
<span class="s2">"Too many positional arguments. Should be at most two: destination, filename."</span>
|
|
||||||
<span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="c1"># verify destination is a valid path</span>
|
<span class="c1"># verify destination is a valid path</span>
|
||||||
<span class="k">if</span> <span class="n">dest</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">dest</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Destination must not be None"</span><span class="p">)</span>
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"dest must not be None"</span><span class="p">)</span>
|
||||||
<span class="k">elif</span> <span class="ow">not</span> <span class="n">dry_run</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">dest</span><span class="p">):</span>
|
<span class="k">elif</span> <span class="ow">not</span> <span class="n">dry_run</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">dest</span><span class="p">):</span>
|
||||||
<span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="s2">"Invalid path passed to export"</span><span class="p">)</span>
|
<span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="s2">"Invalid path passed to export"</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="k">if</span> <span class="n">filename</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
<span class="n">original_filename</span> <span class="o">=</span> <span class="n">original_filename</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">original_filename</span>
|
||||||
<span class="c1"># if filename passed, use it</span>
|
<span class="n">dest_original</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">dest</span><span class="p">)</span> <span class="o">/</span> <span class="n">original_filename</span>
|
||||||
<span class="n">fname</span> <span class="o">=</span> <span class="n">filename</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="c1"># no filename provided so use the default</span>
|
|
||||||
<span class="c1"># if edited file requested, use filename but add _edited</span>
|
|
||||||
<span class="c1"># need to use file extension from edited file as Photos saves a jpeg once edited</span>
|
|
||||||
<span class="k">if</span> <span class="n">edited</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">use_photos_export</span><span class="p">:</span>
|
|
||||||
<span class="c1"># verify we have a valid path_edited and use that to get filename</span>
|
|
||||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">path_edited</span><span class="p">:</span>
|
|
||||||
<span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
|
|
||||||
<span class="s2">"edited=True but path_edited is none; hasadjustments: "</span>
|
|
||||||
<span class="sa">f</span><span class="s2">" </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">hasadjustments</span><span class="si">}</span><span class="s2">"</span>
|
|
||||||
<span class="p">)</span>
|
|
||||||
<span class="n">edited_name</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">path_edited</span><span class="p">)</span><span class="o">.</span><span class="n">name</span>
|
|
||||||
<span class="n">edited_suffix</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">edited_name</span><span class="p">)</span><span class="o">.</span><span class="n">suffix</span>
|
|
||||||
<span class="n">fname</span> <span class="o">=</span> <span class="p">(</span>
|
|
||||||
<span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">original_filename</span><span class="p">)</span><span class="o">.</span><span class="n">stem</span>
|
|
||||||
<span class="o">+</span> <span class="n">edited_identifier</span>
|
|
||||||
<span class="o">+</span> <span class="n">edited_suffix</span>
|
|
||||||
<span class="p">)</span>
|
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="n">fname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">original_filename</span>
|
|
||||||
|
|
||||||
<span class="n">uti</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">uti</span> <span class="k">if</span> <span class="n">edited</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">uti_original</span>
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">edited_filename</span><span class="p">:</span>
|
||||||
<span class="k">if</span> <span class="n">convert_to_jpeg</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">isphoto</span> <span class="ow">and</span> <span class="n">uti</span> <span class="o">!=</span> <span class="s2">"public.jpeg"</span><span class="p">:</span>
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">edited</span><span class="p">:</span>
|
||||||
<span class="c1"># not a jpeg but will convert to jpeg upon export so fix file extension</span>
|
<span class="n">edited_filename</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">original_filename</span>
|
||||||
<span class="n">fname_new</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">fname</span><span class="p">)</span>
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">original_name</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">original_filename</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">path_edited</span><span class="p">:</span>
|
||||||
|
<span class="n">ext</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">path_edited</span><span class="p">)</span><span class="o">.</span><span class="n">suffix</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">uti</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">uti_edited</span> <span class="k">if</span> <span class="n">edited</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">uti_edited</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">uti</span>
|
||||||
|
<span class="n">ext</span> <span class="o">=</span> <span class="n">get_preferred_uti_extension</span><span class="p">(</span><span class="n">uti</span><span class="p">)</span>
|
||||||
|
<span class="n">ext</span> <span class="o">=</span> <span class="s2">"."</span> <span class="o">+</span> <span class="n">ext</span>
|
||||||
|
<span class="n">edited_filename</span> <span class="o">=</span> <span class="n">original_name</span><span class="o">.</span><span class="n">stem</span> <span class="o">+</span> <span class="s2">"_edited"</span> <span class="o">+</span> <span class="n">ext</span>
|
||||||
|
<span class="n">dest_edited</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">dest</span><span class="p">)</span> <span class="o">/</span> <span class="n">edited_filename</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">convert_to_jpeg</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">isphoto</span><span class="p">:</span>
|
||||||
|
<span class="n">something_to_convert</span> <span class="o">=</span> <span class="kc">False</span>
|
||||||
<span class="n">ext</span> <span class="o">=</span> <span class="s2">"."</span> <span class="o">+</span> <span class="n">jpeg_ext</span> <span class="k">if</span> <span class="n">jpeg_ext</span> <span class="k">else</span> <span class="s2">".jpeg"</span>
|
<span class="n">ext</span> <span class="o">=</span> <span class="s2">"."</span> <span class="o">+</span> <span class="n">jpeg_ext</span> <span class="k">if</span> <span class="n">jpeg_ext</span> <span class="k">else</span> <span class="s2">".jpeg"</span>
|
||||||
<span class="n">fname</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">fname_new</span><span class="o">.</span><span class="n">parent</span> <span class="o">/</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">fname_new</span><span class="o">.</span><span class="n">stem</span><span class="si">}{</span><span class="n">ext</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
<span class="k">if</span> <span class="n">export_original</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">uti_original</span> <span class="o">!=</span> <span class="s2">"public.jpeg"</span><span class="p">:</span>
|
||||||
|
<span class="c1"># not a jpeg but will convert to jpeg upon export so fix file extension</span>
|
||||||
|
<span class="n">something_to_convert</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
|
<span class="n">dest_original</span> <span class="o">=</span> <span class="n">dest_original</span><span class="o">.</span><span class="n">parent</span> <span class="o">/</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">dest_original</span><span class="o">.</span><span class="n">stem</span><span class="si">}{</span><span class="n">ext</span><span class="si">}</span><span class="s2">"</span>
|
||||||
|
<span class="k">if</span> <span class="n">export_edited</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">uti</span> <span class="o">!=</span> <span class="s2">"public.jpeg"</span><span class="p">:</span>
|
||||||
|
<span class="c1"># in Big Sur+, edited HEICs are HEIC</span>
|
||||||
|
<span class="n">something_to_convert</span> <span class="o">=</span> <span class="kc">True</span>
|
||||||
|
<span class="n">dest_edited</span> <span class="o">=</span> <span class="n">dest_edited</span><span class="o">.</span><span class="n">parent</span> <span class="o">/</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">dest_edited</span><span class="o">.</span><span class="n">stem</span><span class="si">}{</span><span class="n">ext</span><span class="si">}</span><span class="s2">"</span>
|
||||||
|
<span class="n">convert_to_jpeg</span> <span class="o">=</span> <span class="n">something_to_convert</span>
|
||||||
<span class="k">else</span><span class="p">:</span>
|
<span class="k">else</span><span class="p">:</span>
|
||||||
<span class="c1"># nothing to convert</span>
|
|
||||||
<span class="n">convert_to_jpeg</span> <span class="o">=</span> <span class="kc">False</span>
|
<span class="n">convert_to_jpeg</span> <span class="o">=</span> <span class="kc">False</span>
|
||||||
|
|
||||||
<span class="c1"># check destination path</span>
|
|
||||||
<span class="n">dest</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">dest</span><span class="p">)</span>
|
|
||||||
<span class="n">fname</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">fname</span><span class="p">)</span>
|
|
||||||
<span class="n">dest</span> <span class="o">=</span> <span class="n">dest</span> <span class="o">/</span> <span class="n">fname</span>
|
|
||||||
|
|
||||||
<span class="c1"># check to see if file exists and if so, add (1), (2), etc until we find one that works</span>
|
<span class="c1"># check to see if file exists and if so, add (1), (2), etc until we find one that works</span>
|
||||||
<span class="c1"># Photos checks the stem and adds (1), (2), etc which avoids collision with sidecars</span>
|
<span class="c1"># Photos checks the stem and adds (1), (2), etc which avoids collision with sidecars</span>
|
||||||
<span class="c1"># e.g. exporting sidecar for file1.png and file1.jpeg</span>
|
<span class="c1"># e.g. exporting sidecar for file1.png and file1.jpeg</span>
|
||||||
<span class="c1"># if file1.png exists and exporting file1.jpeg,</span>
|
<span class="c1"># if file1.png exists and exporting file1.jpeg,</span>
|
||||||
<span class="c1"># dest will be file1 (1).jpeg even though file1.jpeg doesn't exist to prevent sidecar collision</span>
|
<span class="c1"># dest will be file1 (1).jpeg even though file1.jpeg doesn't exist to prevent sidecar collision</span>
|
||||||
|
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
|
||||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">update</span> <span class="ow">and</span> <span class="n">increment</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">overwrite</span><span class="p">:</span>
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">update</span> <span class="ow">and</span> <span class="n">increment</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">overwrite</span><span class="p">:</span>
|
||||||
<span class="n">count</span> <span class="o">=</span> <span class="mi">1</span>
|
<span class="n">dest_files</span> <span class="o">=</span> <span class="n">findfiles</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">dest_original</span><span class="o">.</span><span class="n">stem</span><span class="si">}</span><span class="s2">*"</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">dest_original</span><span class="o">.</span><span class="n">parent</span><span class="p">))</span>
|
||||||
<span class="n">dest_files</span> <span class="o">=</span> <span class="n">findfiles</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">dest</span><span class="o">.</span><span class="n">stem</span><span class="si">}</span><span class="s2">*"</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">dest</span><span class="o">.</span><span class="n">parent</span><span class="p">))</span>
|
|
||||||
<span class="n">dest_files</span> <span class="o">=</span> <span class="p">[</span><span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">f</span><span class="p">)</span><span class="o">.</span><span class="n">stem</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">dest_files</span><span class="p">]</span>
|
<span class="n">dest_files</span> <span class="o">=</span> <span class="p">[</span><span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">f</span><span class="p">)</span><span class="o">.</span><span class="n">stem</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">dest_files</span><span class="p">]</span>
|
||||||
<span class="n">dest_new</span> <span class="o">=</span> <span class="n">dest</span><span class="o">.</span><span class="n">stem</span>
|
<span class="n">dest_new</span> <span class="o">=</span> <span class="n">dest_original</span><span class="o">.</span><span class="n">stem</span>
|
||||||
<span class="k">while</span> <span class="n">dest_new</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="n">dest_files</span><span class="p">:</span>
|
<span class="k">while</span> <span class="n">dest_new</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="n">dest_files</span><span class="p">:</span>
|
||||||
<span class="n">dest_new</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">dest</span><span class="o">.</span><span class="n">stem</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2">)"</span>
|
|
||||||
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
|
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||||
<span class="n">dest</span> <span class="o">=</span> <span class="n">dest</span><span class="o">.</span><span class="n">parent</span> <span class="o">/</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">dest_new</span><span class="si">}{</span><span class="n">dest</span><span class="o">.</span><span class="n">suffix</span><span class="si">}</span><span class="s2">"</span>
|
<span class="n">dest_new</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">dest_original</span><span class="o">.</span><span class="n">stem</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2">)"</span>
|
||||||
|
<span class="n">dest_original</span> <span class="o">=</span> <span class="n">dest_original</span><span class="o">.</span><span class="n">parent</span> <span class="o">/</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">dest_new</span><span class="si">}{</span><span class="n">dest_original</span><span class="o">.</span><span class="n">suffix</span><span class="si">}</span><span class="s2">"</span>
|
||||||
|
|
||||||
<span class="c1"># if overwrite==False and #increment==False, export should fail if file exists</span>
|
<span class="c1"># if overwrite==False and #increment==False, export should fail if file exists</span>
|
||||||
<span class="k">if</span> <span class="n">dest</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">update</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">overwrite</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">increment</span><span class="p">:</span>
|
<span class="k">if</span> <span class="p">(</span>
|
||||||
|
<span class="n">dest_original</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span>
|
||||||
|
<span class="ow">and</span> <span class="n">export_original</span>
|
||||||
|
<span class="ow">and</span> <span class="ow">not</span> <span class="n">update</span>
|
||||||
|
<span class="ow">and</span> <span class="ow">not</span> <span class="n">overwrite</span>
|
||||||
|
<span class="ow">and</span> <span class="ow">not</span> <span class="n">increment</span>
|
||||||
|
<span class="p">):</span>
|
||||||
<span class="k">raise</span> <span class="ne">FileExistsError</span><span class="p">(</span>
|
<span class="k">raise</span> <span class="ne">FileExistsError</span><span class="p">(</span>
|
||||||
<span class="sa">f</span><span class="s2">"destination exists (</span><span class="si">{</span><span class="n">dest</span><span class="si">}</span><span class="s2">); overwrite=</span><span class="si">{</span><span class="n">overwrite</span><span class="si">}</span><span class="s2">, increment=</span><span class="si">{</span><span class="n">increment</span><span class="si">}</span><span class="s2">"</span>
|
<span class="sa">f</span><span class="s2">"destination exists (</span><span class="si">{</span><span class="n">dest_original</span><span class="si">}</span><span class="s2">); overwrite=</span><span class="si">{</span><span class="n">overwrite</span><span class="si">}</span><span class="s2">, increment=</span><span class="si">{</span><span class="n">increment</span><span class="si">}</span><span class="s2">"</span>
|
||||||
<span class="p">)</span>
|
<span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">export_edited</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">update</span> <span class="ow">and</span> <span class="n">increment</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">overwrite</span><span class="p">:</span>
|
||||||
|
<span class="n">dest_files</span> <span class="o">=</span> <span class="n">findfiles</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">dest_edited</span><span class="o">.</span><span class="n">stem</span><span class="si">}</span><span class="s2">*"</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">dest_edited</span><span class="o">.</span><span class="n">parent</span><span class="p">))</span>
|
||||||
|
<span class="n">dest_files</span> <span class="o">=</span> <span class="p">[</span><span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">f</span><span class="p">)</span><span class="o">.</span><span class="n">stem</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">dest_files</span><span class="p">]</span>
|
||||||
|
<span class="n">dest_new</span> <span class="o">=</span> <span class="n">dest_edited</span><span class="o">.</span><span class="n">stem</span>
|
||||||
|
<span class="k">if</span> <span class="n">count</span><span class="p">:</span>
|
||||||
|
<span class="c1"># incremented above when checking original destination</span>
|
||||||
|
<span class="n">dest_new</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">dest_new</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2">)"</span>
|
||||||
|
<span class="k">while</span> <span class="n">dest_new</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="n">dest_files</span><span class="p">:</span>
|
||||||
|
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||||
|
<span class="n">dest_new</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">dest</span><span class="o">.</span><span class="n">stem</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">count</span><span class="si">}</span><span class="s2">)"</span>
|
||||||
|
<span class="n">dest_edited</span> <span class="o">=</span> <span class="n">dest_edited</span><span class="o">.</span><span class="n">parent</span> <span class="o">/</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">dest_new</span><span class="si">}{</span><span class="n">dest_edited</span><span class="o">.</span><span class="n">suffix</span><span class="si">}</span><span class="s2">"</span>
|
||||||
|
|
||||||
|
<span class="c1"># if overwrite==False and #increment==False, export should fail if file exists</span>
|
||||||
|
<span class="k">if</span> <span class="n">dest_edited</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">update</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">overwrite</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">increment</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">FileExistsError</span><span class="p">(</span>
|
||||||
|
<span class="sa">f</span><span class="s2">"destination exists (</span><span class="si">{</span><span class="n">dest_edited</span><span class="si">}</span><span class="s2">); overwrite=</span><span class="si">{</span><span class="n">overwrite</span><span class="si">}</span><span class="s2">, increment=</span><span class="si">{</span><span class="n">increment</span><span class="si">}</span><span class="s2">"</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_render_options</span><span class="o">.</span><span class="n">filepath</span> <span class="o">=</span> <span class="p">(</span>
|
||||||
|
<span class="nb">str</span><span class="p">(</span><span class="n">dest_original</span><span class="p">)</span> <span class="k">if</span> <span class="n">export_original</span> <span class="k">else</span> <span class="nb">str</span><span class="p">(</span><span class="n">dest_edited</span><span class="p">)</span>
|
||||||
|
<span class="p">)</span>
|
||||||
<span class="n">all_results</span> <span class="o">=</span> <span class="n">ExportResults</span><span class="p">()</span>
|
<span class="n">all_results</span> <span class="o">=</span> <span class="n">ExportResults</span><span class="p">()</span>
|
||||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">use_photos_export</span><span class="p">:</span>
|
|
||||||
|
<span class="k">if</span> <span class="n">use_photos_export</span><span class="p">:</span>
|
||||||
|
<span class="c1"># TODO: collapse these into a single call (refactor _export_photo_with_photos_export)</span>
|
||||||
|
<span class="k">if</span> <span class="n">original</span><span class="p">:</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_export_photo_with_photos_export</span><span class="p">(</span>
|
||||||
|
<span class="n">dest_original</span><span class="p">,</span>
|
||||||
|
<span class="n">all_results</span><span class="p">,</span>
|
||||||
|
<span class="n">fileutil</span><span class="p">,</span>
|
||||||
|
<span class="n">export_db</span><span class="p">,</span>
|
||||||
|
<span class="n">use_photokit</span><span class="o">=</span><span class="n">use_photokit</span><span class="p">,</span>
|
||||||
|
<span class="n">dry_run</span><span class="o">=</span><span class="n">dry_run</span><span class="p">,</span>
|
||||||
|
<span class="n">timeout</span><span class="o">=</span><span class="n">timeout</span><span class="p">,</span>
|
||||||
|
<span class="n">jpeg_ext</span><span class="o">=</span><span class="n">jpeg_ext</span><span class="p">,</span>
|
||||||
|
<span class="n">touch_file</span><span class="o">=</span><span class="n">touch_file</span><span class="p">,</span>
|
||||||
|
<span class="n">update</span><span class="o">=</span><span class="n">update</span><span class="p">,</span>
|
||||||
|
<span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
|
||||||
|
<span class="n">live_photo</span><span class="o">=</span><span class="n">live_photo</span><span class="p">,</span>
|
||||||
|
<span class="n">edited</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||||
|
<span class="n">convert_to_jpeg</span><span class="o">=</span><span class="n">convert_to_jpeg</span><span class="p">,</span>
|
||||||
|
<span class="n">jpeg_quality</span><span class="o">=</span><span class="n">jpeg_quality</span><span class="p">,</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">edited</span><span class="p">:</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_export_photo_with_photos_export</span><span class="p">(</span>
|
||||||
|
<span class="n">dest_edited</span><span class="p">,</span>
|
||||||
|
<span class="n">all_results</span><span class="p">,</span>
|
||||||
|
<span class="n">fileutil</span><span class="p">,</span>
|
||||||
|
<span class="n">export_db</span><span class="p">,</span>
|
||||||
|
<span class="n">use_photokit</span><span class="o">=</span><span class="n">use_photokit</span><span class="p">,</span>
|
||||||
|
<span class="n">dry_run</span><span class="o">=</span><span class="n">dry_run</span><span class="p">,</span>
|
||||||
|
<span class="n">timeout</span><span class="o">=</span><span class="n">timeout</span><span class="p">,</span>
|
||||||
|
<span class="n">jpeg_ext</span><span class="o">=</span><span class="n">jpeg_ext</span><span class="p">,</span>
|
||||||
|
<span class="n">touch_file</span><span class="o">=</span><span class="n">touch_file</span><span class="p">,</span>
|
||||||
|
<span class="n">update</span><span class="o">=</span><span class="n">update</span><span class="p">,</span>
|
||||||
|
<span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
|
||||||
|
<span class="n">live_photo</span><span class="o">=</span><span class="n">live_photo</span><span class="p">,</span>
|
||||||
|
<span class="n">edited</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||||
|
<span class="n">convert_to_jpeg</span><span class="o">=</span><span class="n">convert_to_jpeg</span><span class="p">,</span>
|
||||||
|
<span class="n">jpeg_quality</span><span class="o">=</span><span class="n">jpeg_quality</span><span class="p">,</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
<span class="c1"># find the source file on disk and export</span>
|
<span class="c1"># find the source file on disk and export</span>
|
||||||
<span class="c1"># get path to source file and verify it's not None and is valid file</span>
|
<span class="c1"># get path to source file and verify it's not None and is valid file</span>
|
||||||
<span class="c1"># TODO: how to handle ismissing or not hasadjustments and edited=True cases?</span>
|
<span class="c1"># TODO: how to handle ismissing or not hasadjustments and edited=True cases?</span>
|
||||||
<span class="k">if</span> <span class="n">edited</span><span class="p">:</span>
|
<span class="n">export_src_dest</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">path_edited</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">edited</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">path_edited</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||||
<span class="n">src</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">path_edited</span>
|
<span class="n">export_src_dest</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">path_edited</span><span class="p">,</span> <span class="n">dest_edited</span><span class="p">))</span>
|
||||||
<span class="k">else</span><span class="p">:</span>
|
<span class="k">elif</span> <span class="ow">not</span> <span class="n">edited</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">path</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||||
<span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
|
<span class="n">export_src_dest</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="n">dest_original</span><span class="p">))</span>
|
||||||
<span class="sa">f</span><span class="s2">"Cannot export edited photo if path_edited is None"</span>
|
|
||||||
<span class="p">)</span>
|
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">path</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
||||||
<span class="n">src</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">path</span>
|
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="s2">"Cannot export photo if path is None"</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">src</span><span class="p">):</span>
|
<span class="k">for</span> <span class="n">src</span><span class="p">,</span> <span class="n">dest</span> <span class="ow">in</span> <span class="n">export_src_dest</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">src</span><span class="p">)</span><span class="o">.</span><span class="n">is_file</span><span class="p">():</span>
|
||||||
<span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">src</span><span class="si">}</span><span class="s2"> does not appear to exist"</span><span class="p">)</span>
|
<span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">src</span><span class="si">}</span><span class="s2"> does not appear to exist"</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="c1"># found source now try to find right destination</span>
|
<span class="c1"># found source now try to find right destination</span>
|
||||||
@@ -807,12 +887,35 @@
|
|||||||
<span class="p">)</span>
|
<span class="p">)</span>
|
||||||
<span class="n">all_results</span> <span class="o">+=</span> <span class="n">results</span>
|
<span class="n">all_results</span> <span class="o">+=</span> <span class="n">results</span>
|
||||||
|
|
||||||
|
<span class="n">dest</span> <span class="o">=</span> <span class="n">dest_original</span> <span class="k">if</span> <span class="n">export_original</span> <span class="k">else</span> <span class="n">dest_edited</span>
|
||||||
|
|
||||||
<span class="c1"># copy live photo associated .mov if requested</span>
|
<span class="c1"># copy live photo associated .mov if requested</span>
|
||||||
<span class="k">if</span> <span class="n">live_photo</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">live_photo</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">export_original</span> <span class="ow">and</span> <span class="n">live_photo</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">live_photo</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">path_live_photo</span><span class="p">:</span>
|
||||||
<span class="n">live_name</span> <span class="o">=</span> <span class="n">dest</span><span class="o">.</span><span class="n">parent</span> <span class="o">/</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">dest</span><span class="o">.</span><span class="n">stem</span><span class="si">}</span><span class="s2">.mov"</span>
|
<span class="n">live_name</span> <span class="o">=</span> <span class="n">dest</span><span class="o">.</span><span class="n">parent</span> <span class="o">/</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">dest</span><span class="o">.</span><span class="n">stem</span><span class="si">}</span><span class="s2">.mov"</span>
|
||||||
<span class="n">src_live</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">path_live_photo</span>
|
<span class="n">src_live</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">path_live_photo</span>
|
||||||
|
<span class="n">results</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_export_photo</span><span class="p">(</span>
|
||||||
|
<span class="n">src_live</span><span class="p">,</span>
|
||||||
|
<span class="n">live_name</span><span class="p">,</span>
|
||||||
|
<span class="n">update</span><span class="p">,</span>
|
||||||
|
<span class="n">export_db</span><span class="p">,</span>
|
||||||
|
<span class="n">overwrite</span><span class="p">,</span>
|
||||||
|
<span class="n">export_as_hardlink</span><span class="p">,</span>
|
||||||
|
<span class="n">exiftool</span><span class="p">,</span>
|
||||||
|
<span class="n">touch_file</span><span class="p">,</span>
|
||||||
|
<span class="kc">False</span><span class="p">,</span>
|
||||||
|
<span class="n">fileutil</span><span class="o">=</span><span class="n">fileutil</span><span class="p">,</span>
|
||||||
|
<span class="n">ignore_signature</span><span class="o">=</span><span class="n">ignore_signature</span><span class="p">,</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="n">all_results</span> <span class="o">+=</span> <span class="n">results</span>
|
||||||
|
|
||||||
<span class="k">if</span> <span class="n">src_live</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
<span class="k">if</span> <span class="p">(</span>
|
||||||
|
<span class="n">export_edited</span>
|
||||||
|
<span class="ow">and</span> <span class="n">live_photo</span>
|
||||||
|
<span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">live_photo</span>
|
||||||
|
<span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">path_edited_live_photo</span>
|
||||||
|
<span class="p">):</span>
|
||||||
|
<span class="n">live_name</span> <span class="o">=</span> <span class="n">dest</span><span class="o">.</span><span class="n">parent</span> <span class="o">/</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">dest_edited</span><span class="o">.</span><span class="n">stem</span><span class="si">}</span><span class="s2">.mov"</span>
|
||||||
|
<span class="n">src_live</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">path_edited_live_photo</span>
|
||||||
<span class="n">results</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_export_photo</span><span class="p">(</span>
|
<span class="n">results</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_export_photo</span><span class="p">(</span>
|
||||||
<span class="n">src_live</span><span class="p">,</span>
|
<span class="n">src_live</span><span class="p">,</span>
|
||||||
<span class="n">live_name</span><span class="p">,</span>
|
<span class="n">live_name</span><span class="p">,</span>
|
||||||
@@ -829,7 +932,7 @@
|
|||||||
<span class="n">all_results</span> <span class="o">+=</span> <span class="n">results</span>
|
<span class="n">all_results</span> <span class="o">+=</span> <span class="n">results</span>
|
||||||
|
|
||||||
<span class="c1"># copy associated RAW image if requested</span>
|
<span class="c1"># copy associated RAW image if requested</span>
|
||||||
<span class="k">if</span> <span class="n">raw_photo</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">has_raw</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">raw_photo</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">has_raw</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">path_raw</span><span class="p">:</span>
|
||||||
<span class="n">raw_path</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">path_raw</span><span class="p">)</span>
|
<span class="n">raw_path</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">path_raw</span><span class="p">)</span>
|
||||||
<span class="n">raw_ext</span> <span class="o">=</span> <span class="n">raw_path</span><span class="o">.</span><span class="n">suffix</span>
|
<span class="n">raw_ext</span> <span class="o">=</span> <span class="n">raw_path</span><span class="o">.</span><span class="n">suffix</span>
|
||||||
<span class="n">raw_name</span> <span class="o">=</span> <span class="n">dest</span><span class="o">.</span><span class="n">parent</span> <span class="o">/</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">dest</span><span class="o">.</span><span class="n">stem</span><span class="si">}{</span><span class="n">raw_ext</span><span class="si">}</span><span class="s2">"</span>
|
<span class="n">raw_name</span> <span class="o">=</span> <span class="n">dest</span><span class="o">.</span><span class="n">parent</span> <span class="o">/</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">dest</span><span class="o">.</span><span class="n">stem</span><span class="si">}{</span><span class="n">raw_ext</span><span class="si">}</span><span class="s2">"</span>
|
||||||
@@ -849,140 +952,30 @@
|
|||||||
<span class="n">ignore_signature</span><span class="o">=</span><span class="n">ignore_signature</span><span class="p">,</span>
|
<span class="n">ignore_signature</span><span class="o">=</span><span class="n">ignore_signature</span><span class="p">,</span>
|
||||||
<span class="p">)</span>
|
<span class="p">)</span>
|
||||||
<span class="n">all_results</span> <span class="o">+=</span> <span class="n">results</span>
|
<span class="n">all_results</span> <span class="o">+=</span> <span class="n">results</span>
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="c1"># TODO: move this big if/else block to separate functions</span>
|
|
||||||
<span class="c1"># e.g. _export_with_photos_export or such</span>
|
|
||||||
<span class="c1"># use_photo_export</span>
|
|
||||||
<span class="c1"># export live_photo .mov file?</span>
|
|
||||||
<span class="n">live_photo</span> <span class="o">=</span> <span class="kc">True</span> <span class="k">if</span> <span class="n">live_photo</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">live_photo</span> <span class="k">else</span> <span class="kc">False</span>
|
|
||||||
<span class="k">if</span> <span class="n">edited</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">shared</span><span class="p">:</span>
|
|
||||||
<span class="c1"># exported edited version and not original</span>
|
|
||||||
<span class="c1"># shared photos (in shared albums) show up as not having adjustments (not edited)</span>
|
|
||||||
<span class="c1"># but Photos is unable to export the "original" as only a jpeg copy is shared in iCloud</span>
|
|
||||||
<span class="c1"># so tell Photos to export the current version in this case</span>
|
|
||||||
<span class="k">if</span> <span class="n">filename</span><span class="p">:</span>
|
|
||||||
<span class="c1"># use filename stem provided</span>
|
|
||||||
<span class="n">filestem</span> <span class="o">=</span> <span class="n">dest</span><span class="o">.</span><span class="n">stem</span>
|
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="c1"># didn't get passed a filename, add _edited</span>
|
|
||||||
<span class="n">filestem</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">dest</span><span class="o">.</span><span class="n">stem</span><span class="si">}{</span><span class="n">edited_identifier</span><span class="si">}</span><span class="s2">"</span>
|
|
||||||
<span class="n">uti</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">uti_edited</span> <span class="k">if</span> <span class="n">edited</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">uti_edited</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">uti</span>
|
|
||||||
<span class="n">ext</span> <span class="o">=</span> <span class="n">get_preferred_uti_extension</span><span class="p">(</span><span class="n">uti</span><span class="p">)</span>
|
|
||||||
<span class="n">dest</span> <span class="o">=</span> <span class="n">dest</span><span class="o">.</span><span class="n">parent</span> <span class="o">/</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">filestem</span><span class="si">}{</span><span class="n">ext</span><span class="si">}</span><span class="s2">"</span>
|
|
||||||
|
|
||||||
<span class="k">if</span> <span class="n">use_photokit</span><span class="p">:</span>
|
<span class="c1"># copy preview image if requested</span>
|
||||||
<span class="n">photolib</span> <span class="o">=</span> <span class="n">PhotoLibrary</span><span class="p">()</span>
|
<span class="k">if</span> <span class="n">preview</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">path_derivatives</span><span class="p">:</span>
|
||||||
<span class="n">photo</span> <span class="o">=</span> <span class="kc">None</span>
|
<span class="c1"># Photos keeps multiple different derivatives and path_derivatives returns list of them</span>
|
||||||
<span class="k">try</span><span class="p">:</span>
|
<span class="c1"># first derivative is the largest so export that one</span>
|
||||||
<span class="n">photo</span> <span class="o">=</span> <span class="n">photolib</span><span class="o">.</span><span class="n">fetch_uuid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
|
<span class="n">preview_path</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">path_derivatives</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
<span class="k">except</span> <span class="n">PhotoKitFetchFailed</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
<span class="n">preview_ext</span> <span class="o">=</span> <span class="n">preview_path</span><span class="o">.</span><span class="n">suffix</span>
|
||||||
<span class="c1"># if failed to find UUID, might be a burst photo</span>
|
<span class="n">preview_name</span> <span class="o">=</span> <span class="n">dest</span><span class="o">.</span><span class="n">parent</span> <span class="o">/</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">dest</span><span class="o">.</span><span class="n">stem</span><span class="si">}{</span><span class="n">preview_suffix</span><span class="si">}{</span><span class="n">preview_ext</span><span class="si">}</span><span class="s2">"</span>
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">burst</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"burstUUID"</span><span class="p">]:</span>
|
<span class="k">if</span> <span class="n">preview_path</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||||
<span class="n">bursts</span> <span class="o">=</span> <span class="n">photolib</span><span class="o">.</span><span class="n">fetch_burst_uuid</span><span class="p">(</span>
|
<span class="n">results</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_export_photo</span><span class="p">(</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"burstUUID"</span><span class="p">],</span> <span class="nb">all</span><span class="o">=</span><span class="kc">True</span>
|
<span class="n">preview_path</span><span class="p">,</span>
|
||||||
|
<span class="n">preview_name</span><span class="p">,</span>
|
||||||
|
<span class="n">update</span><span class="p">,</span>
|
||||||
|
<span class="n">export_db</span><span class="p">,</span>
|
||||||
|
<span class="n">overwrite</span><span class="p">,</span>
|
||||||
|
<span class="n">export_as_hardlink</span><span class="p">,</span>
|
||||||
|
<span class="n">exiftool</span><span class="p">,</span>
|
||||||
|
<span class="n">touch_file</span><span class="p">,</span>
|
||||||
|
<span class="n">convert_to_jpeg</span><span class="p">,</span>
|
||||||
|
<span class="n">fileutil</span><span class="o">=</span><span class="n">fileutil</span><span class="p">,</span>
|
||||||
|
<span class="n">jpeg_quality</span><span class="o">=</span><span class="n">jpeg_quality</span><span class="p">,</span>
|
||||||
|
<span class="n">ignore_signature</span><span class="o">=</span><span class="n">ignore_signature</span><span class="p">,</span>
|
||||||
<span class="p">)</span>
|
<span class="p">)</span>
|
||||||
<span class="c1"># PhotoKit UUIDs may contain "/L0/001" so only look at beginning</span>
|
<span class="n">all_results</span> <span class="o">+=</span> <span class="n">results</span>
|
||||||
<span class="n">photo</span> <span class="o">=</span> <span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">bursts</span> <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">uuid</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)]</span>
|
|
||||||
<span class="n">photo</span> <span class="o">=</span> <span class="n">photo</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">photo</span> <span class="k">else</span> <span class="kc">None</span>
|
|
||||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">photo</span><span class="p">:</span>
|
|
||||||
<span class="n">all_results</span><span class="o">.</span><span class="n">error</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
|
||||||
<span class="p">(</span>
|
|
||||||
<span class="nb">str</span><span class="p">(</span><span class="n">dest</span><span class="p">),</span>
|
|
||||||
<span class="sa">f</span><span class="s2">"PhotoKitFetchFailed exception exporting photo </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">lineno</span><span class="p">(</span><span class="vm">__file__</span><span class="p">)</span><span class="si">}</span><span class="s2">)"</span><span class="p">,</span>
|
|
||||||
<span class="p">)</span>
|
|
||||||
<span class="p">)</span>
|
|
||||||
<span class="k">if</span> <span class="n">photo</span><span class="p">:</span>
|
|
||||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">dry_run</span><span class="p">:</span>
|
|
||||||
<span class="k">try</span><span class="p">:</span>
|
|
||||||
<span class="n">exported</span> <span class="o">=</span> <span class="n">photo</span><span class="o">.</span><span class="n">export</span><span class="p">(</span>
|
|
||||||
<span class="n">dest</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">dest</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">version</span><span class="o">=</span><span class="n">PHOTOS_VERSION_CURRENT</span>
|
|
||||||
<span class="p">)</span>
|
|
||||||
<span class="n">all_results</span><span class="o">.</span><span class="n">exported</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">exported</span><span class="p">)</span>
|
|
||||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
||||||
<span class="n">all_results</span><span class="o">.</span><span class="n">error</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
|
||||||
<span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">dest</span><span class="p">),</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">lineno</span><span class="p">(</span><span class="vm">__file__</span><span class="p">)</span><span class="si">}</span><span class="s2">)"</span><span class="p">)</span>
|
|
||||||
<span class="p">)</span>
|
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="c1"># dry_run, don't actually export</span>
|
|
||||||
<span class="n">all_results</span><span class="o">.</span><span class="n">exported</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">dest</span><span class="p">))</span>
|
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="k">try</span><span class="p">:</span>
|
|
||||||
<span class="n">exported</span> <span class="o">=</span> <span class="n">_export_photo_uuid_applescript</span><span class="p">(</span>
|
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span>
|
|
||||||
<span class="n">dest</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span>
|
|
||||||
<span class="n">filestem</span><span class="o">=</span><span class="n">filestem</span><span class="p">,</span>
|
|
||||||
<span class="n">original</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
|
||||||
<span class="n">edited</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
||||||
<span class="n">live_photo</span><span class="o">=</span><span class="n">live_photo</span><span class="p">,</span>
|
|
||||||
<span class="n">timeout</span><span class="o">=</span><span class="n">timeout</span><span class="p">,</span>
|
|
||||||
<span class="n">burst</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">burst</span><span class="p">,</span>
|
|
||||||
<span class="n">dry_run</span><span class="o">=</span><span class="n">dry_run</span><span class="p">,</span>
|
|
||||||
<span class="p">)</span>
|
|
||||||
<span class="n">all_results</span><span class="o">.</span><span class="n">exported</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">exported</span><span class="p">)</span>
|
|
||||||
<span class="k">except</span> <span class="n">ExportError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
||||||
<span class="n">all_results</span><span class="o">.</span><span class="n">error</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="nb">str</span><span class="p">(</span><span class="n">dest</span><span class="p">),</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">lineno</span><span class="p">(</span><span class="vm">__file__</span><span class="p">)</span><span class="si">}</span><span class="s2">)"</span><span class="p">))</span>
|
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="c1"># export original version and not edited</span>
|
|
||||||
<span class="n">filestem</span> <span class="o">=</span> <span class="n">dest</span><span class="o">.</span><span class="n">stem</span>
|
|
||||||
<span class="k">if</span> <span class="n">use_photokit</span><span class="p">:</span>
|
|
||||||
<span class="n">photolib</span> <span class="o">=</span> <span class="n">PhotoLibrary</span><span class="p">()</span>
|
|
||||||
<span class="n">photo</span> <span class="o">=</span> <span class="kc">None</span>
|
|
||||||
<span class="k">try</span><span class="p">:</span>
|
|
||||||
<span class="n">photo</span> <span class="o">=</span> <span class="n">photolib</span><span class="o">.</span><span class="n">fetch_uuid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
|
|
||||||
<span class="k">except</span> <span class="n">PhotoKitFetchFailed</span><span class="p">:</span>
|
|
||||||
<span class="c1"># if failed to find UUID, might be a burst photo</span>
|
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">burst</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"burstUUID"</span><span class="p">]:</span>
|
|
||||||
<span class="n">bursts</span> <span class="o">=</span> <span class="n">photolib</span><span class="o">.</span><span class="n">fetch_burst_uuid</span><span class="p">(</span>
|
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"burstUUID"</span><span class="p">],</span> <span class="nb">all</span><span class="o">=</span><span class="kc">True</span>
|
|
||||||
<span class="p">)</span>
|
|
||||||
<span class="c1"># PhotoKit UUIDs may contain "/L0/001" so only look at beginning</span>
|
|
||||||
<span class="n">photo</span> <span class="o">=</span> <span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">bursts</span> <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">uuid</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)]</span>
|
|
||||||
<span class="n">photo</span> <span class="o">=</span> <span class="n">photo</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">photo</span> <span class="k">else</span> <span class="kc">None</span>
|
|
||||||
<span class="k">if</span> <span class="n">photo</span><span class="p">:</span>
|
|
||||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">dry_run</span><span class="p">:</span>
|
|
||||||
<span class="k">try</span><span class="p">:</span>
|
|
||||||
<span class="n">exported</span> <span class="o">=</span> <span class="n">photo</span><span class="o">.</span><span class="n">export</span><span class="p">(</span>
|
|
||||||
<span class="n">dest</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">dest</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">version</span><span class="o">=</span><span class="n">PHOTOS_VERSION_ORIGINAL</span>
|
|
||||||
<span class="p">)</span>
|
|
||||||
<span class="n">all_results</span><span class="o">.</span><span class="n">exported</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">exported</span><span class="p">)</span>
|
|
||||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
||||||
<span class="n">all_results</span><span class="o">.</span><span class="n">error</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
|
||||||
<span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">dest</span><span class="p">),</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">lineno</span><span class="p">(</span><span class="vm">__file__</span><span class="p">)</span><span class="si">}</span><span class="s2">)"</span><span class="p">)</span>
|
|
||||||
<span class="p">)</span>
|
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="c1"># dry_run, don't actually export</span>
|
|
||||||
<span class="n">all_results</span><span class="o">.</span><span class="n">exported</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">dest</span><span class="p">))</span>
|
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="k">try</span><span class="p">:</span>
|
|
||||||
<span class="n">exported</span> <span class="o">=</span> <span class="n">_export_photo_uuid_applescript</span><span class="p">(</span>
|
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span>
|
|
||||||
<span class="n">dest</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span>
|
|
||||||
<span class="n">filestem</span><span class="o">=</span><span class="n">filestem</span><span class="p">,</span>
|
|
||||||
<span class="n">original</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
||||||
<span class="n">edited</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
|
||||||
<span class="n">live_photo</span><span class="o">=</span><span class="n">live_photo</span><span class="p">,</span>
|
|
||||||
<span class="n">timeout</span><span class="o">=</span><span class="n">timeout</span><span class="p">,</span>
|
|
||||||
<span class="n">burst</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">burst</span><span class="p">,</span>
|
|
||||||
<span class="n">dry_run</span><span class="o">=</span><span class="n">dry_run</span><span class="p">,</span>
|
|
||||||
<span class="p">)</span>
|
|
||||||
<span class="n">all_results</span><span class="o">.</span><span class="n">exported</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">exported</span><span class="p">)</span>
|
|
||||||
<span class="k">except</span> <span class="n">ExportError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
||||||
<span class="n">all_results</span><span class="o">.</span><span class="n">error</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="nb">str</span><span class="p">(</span><span class="n">dest</span><span class="p">),</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">lineno</span><span class="p">(</span><span class="vm">__file__</span><span class="p">)</span><span class="si">}</span><span class="s2">)"</span><span class="p">))</span>
|
|
||||||
<span class="k">if</span> <span class="n">all_results</span><span class="o">.</span><span class="n">exported</span><span class="p">:</span>
|
|
||||||
<span class="k">if</span> <span class="n">jpeg_ext</span><span class="p">:</span>
|
|
||||||
<span class="c1"># use_photos_export (both PhotoKit and AppleScript) don't use the</span>
|
|
||||||
<span class="c1"># file extension provided (instead they use extension for UTI)</span>
|
|
||||||
<span class="c1"># so if jpeg_ext is set, rename any non-conforming jpegs</span>
|
|
||||||
<span class="n">all_results</span><span class="o">.</span><span class="n">exported</span> <span class="o">=</span> <span class="n">rename_jpeg_files</span><span class="p">(</span>
|
|
||||||
<span class="n">all_results</span><span class="o">.</span><span class="n">exported</span><span class="p">,</span> <span class="n">jpeg_ext</span><span class="p">,</span> <span class="n">fileutil</span>
|
|
||||||
<span class="p">)</span>
|
|
||||||
<span class="k">if</span> <span class="n">touch_file</span><span class="p">:</span>
|
|
||||||
<span class="k">for</span> <span class="n">exported_file</span> <span class="ow">in</span> <span class="n">all_results</span><span class="o">.</span><span class="n">exported</span><span class="p">:</span>
|
|
||||||
<span class="n">all_results</span><span class="o">.</span><span class="n">touched</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exported_file</span><span class="p">)</span>
|
|
||||||
<span class="n">ts</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">timestamp</span><span class="p">())</span>
|
|
||||||
<span class="n">fileutil</span><span class="o">.</span><span class="n">utime</span><span class="p">(</span><span class="n">exported_file</span><span class="p">,</span> <span class="p">(</span><span class="n">ts</span><span class="p">,</span> <span class="n">ts</span><span class="p">))</span>
|
|
||||||
<span class="k">if</span> <span class="n">update</span><span class="p">:</span>
|
|
||||||
<span class="n">all_results</span><span class="o">.</span><span class="n">new</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">all_results</span><span class="o">.</span><span class="n">exported</span><span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="c1"># export metadata</span>
|
<span class="c1"># export metadata</span>
|
||||||
<span class="n">sidecars</span> <span class="o">=</span> <span class="p">[]</span>
|
<span class="n">sidecars</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
@@ -993,6 +986,7 @@
|
|||||||
<span class="n">sidecar_xmp_files_skipped</span> <span class="o">=</span> <span class="p">[]</span>
|
<span class="n">sidecar_xmp_files_skipped</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
<span class="n">sidecar_xmp_files_written</span> <span class="o">=</span> <span class="p">[]</span>
|
<span class="n">sidecar_xmp_files_written</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
|
|
||||||
|
<span class="n">dest</span> <span class="o">=</span> <span class="n">dest_original</span> <span class="k">if</span> <span class="n">export_original</span> <span class="k">else</span> <span class="n">dest_edited</span>
|
||||||
<span class="n">dest_suffix</span> <span class="o">=</span> <span class="s2">""</span> <span class="k">if</span> <span class="n">sidecar_drop_ext</span> <span class="k">else</span> <span class="n">dest</span><span class="o">.</span><span class="n">suffix</span>
|
<span class="n">dest_suffix</span> <span class="o">=</span> <span class="s2">""</span> <span class="k">if</span> <span class="n">sidecar_drop_ext</span> <span class="k">else</span> <span class="n">dest</span><span class="o">.</span><span class="n">suffix</span>
|
||||||
<span class="k">if</span> <span class="n">sidecar</span> <span class="o">&</span> <span class="n">SIDECAR_JSON</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">sidecar</span> <span class="o">&</span> <span class="n">SIDECAR_JSON</span><span class="p">:</span>
|
||||||
<span class="n">sidecar_filename</span> <span class="o">=</span> <span class="n">dest</span><span class="o">.</span><span class="n">parent</span> <span class="o">/</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">dest</span><span class="o">.</span><span class="n">stem</span><span class="si">}{</span><span class="n">dest_suffix</span><span class="si">}</span><span class="s2">.json"</span><span class="p">)</span>
|
<span class="n">sidecar_filename</span> <span class="o">=</span> <span class="n">dest</span><span class="o">.</span><span class="n">parent</span> <span class="o">/</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">dest</span><span class="o">.</span><span class="n">stem</span><span class="si">}{</span><span class="n">dest_suffix</span><span class="si">}</span><span class="s2">.json"</span><span class="p">)</span>
|
||||||
@@ -1240,6 +1234,189 @@
|
|||||||
<span class="k">return</span> <span class="n">all_results</span>
|
<span class="k">return</span> <span class="n">all_results</span>
|
||||||
|
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">_export_photo_with_photos_export</span><span class="p">(</span>
|
||||||
|
<span class="bp">self</span><span class="p">,</span>
|
||||||
|
<span class="n">dest</span><span class="p">,</span>
|
||||||
|
<span class="n">all_results</span><span class="p">,</span>
|
||||||
|
<span class="n">fileutil</span><span class="p">,</span>
|
||||||
|
<span class="n">export_db</span><span class="p">,</span>
|
||||||
|
<span class="n">use_photokit</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="n">dry_run</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="n">timeout</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="n">jpeg_ext</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="n">touch_file</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="n">update</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="n">overwrite</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="n">live_photo</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="n">edited</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="n">convert_to_jpeg</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="n">jpeg_quality</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span>
|
||||||
|
<span class="p">):</span>
|
||||||
|
<span class="c1"># TODO: duplicative code with the if edited/else--remove it</span>
|
||||||
|
<span class="c1"># export live_photo .mov file?</span>
|
||||||
|
<span class="n">live_photo</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="n">live_photo</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">live_photo</span><span class="p">)</span>
|
||||||
|
<span class="n">overwrite</span> <span class="o">=</span> <span class="n">overwrite</span> <span class="ow">or</span> <span class="n">update</span>
|
||||||
|
<span class="k">if</span> <span class="n">edited</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">shared</span><span class="p">:</span>
|
||||||
|
<span class="c1"># exported edited version and not original</span>
|
||||||
|
<span class="c1"># shared photos (in shared albums) show up as not having adjustments (not edited)</span>
|
||||||
|
<span class="c1"># but Photos is unable to export the "original" as only a jpeg copy is shared in iCloud</span>
|
||||||
|
<span class="c1"># so tell Photos to export the current version in this case</span>
|
||||||
|
<span class="c1"># didn't get passed a filename, add _edited</span>
|
||||||
|
<span class="n">uti</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">uti_edited</span> <span class="k">if</span> <span class="n">edited</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">uti_edited</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">uti</span>
|
||||||
|
<span class="n">ext</span> <span class="o">=</span> <span class="n">get_preferred_uti_extension</span><span class="p">(</span><span class="n">uti</span><span class="p">)</span>
|
||||||
|
<span class="n">dest</span> <span class="o">=</span> <span class="n">dest</span><span class="o">.</span><span class="n">parent</span> <span class="o">/</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">dest</span><span class="o">.</span><span class="n">stem</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">ext</span><span class="si">}</span><span class="s2">"</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">use_photokit</span><span class="p">:</span>
|
||||||
|
<span class="n">photolib</span> <span class="o">=</span> <span class="n">PhotoLibrary</span><span class="p">()</span>
|
||||||
|
<span class="n">photo</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">photo</span> <span class="o">=</span> <span class="n">photolib</span><span class="o">.</span><span class="n">fetch_uuid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="n">PhotoKitFetchFailed</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="c1"># if failed to find UUID, might be a burst photo</span>
|
||||||
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">burst</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"burstUUID"</span><span class="p">]:</span>
|
||||||
|
<span class="n">bursts</span> <span class="o">=</span> <span class="n">photolib</span><span class="o">.</span><span class="n">fetch_burst_uuid</span><span class="p">(</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"burstUUID"</span><span class="p">],</span> <span class="nb">all</span><span class="o">=</span><span class="kc">True</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="c1"># PhotoKit UUIDs may contain "/L0/001" so only look at beginning</span>
|
||||||
|
<span class="n">photo</span> <span class="o">=</span> <span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">bursts</span> <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">uuid</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)]</span>
|
||||||
|
<span class="n">photo</span> <span class="o">=</span> <span class="n">photo</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">photo</span> <span class="k">else</span> <span class="kc">None</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">photo</span><span class="p">:</span>
|
||||||
|
<span class="n">all_results</span><span class="o">.</span><span class="n">error</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
||||||
|
<span class="p">(</span>
|
||||||
|
<span class="nb">str</span><span class="p">(</span><span class="n">dest</span><span class="p">),</span>
|
||||||
|
<span class="sa">f</span><span class="s2">"PhotoKitFetchFailed exception exporting photo </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">lineno</span><span class="p">(</span><span class="vm">__file__</span><span class="p">)</span><span class="si">}</span><span class="s2">)"</span><span class="p">,</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">photo</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="n">dry_run</span><span class="p">:</span>
|
||||||
|
<span class="c1"># dry_run, don't actually export</span>
|
||||||
|
<span class="n">all_results</span><span class="o">.</span><span class="n">exported</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">dest</span><span class="p">))</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">exported</span> <span class="o">=</span> <span class="n">photo</span><span class="o">.</span><span class="n">export</span><span class="p">(</span>
|
||||||
|
<span class="n">dest</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span>
|
||||||
|
<span class="n">dest</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
||||||
|
<span class="n">version</span><span class="o">=</span><span class="n">PHOTOS_VERSION_CURRENT</span><span class="p">,</span>
|
||||||
|
<span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="n">all_results</span><span class="o">.</span><span class="n">exported</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">exported</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="n">all_results</span><span class="o">.</span><span class="n">error</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
||||||
|
<span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">dest</span><span class="p">),</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">lineno</span><span class="p">(</span><span class="vm">__file__</span><span class="p">)</span><span class="si">}</span><span class="s2">)"</span><span class="p">)</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">exported</span> <span class="o">=</span> <span class="n">_export_photo_uuid_applescript</span><span class="p">(</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span>
|
||||||
|
<span class="n">dest</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span>
|
||||||
|
<span class="n">filestem</span><span class="o">=</span><span class="n">dest</span><span class="o">.</span><span class="n">stem</span><span class="p">,</span>
|
||||||
|
<span class="n">original</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||||
|
<span class="n">edited</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||||
|
<span class="n">live_photo</span><span class="o">=</span><span class="n">live_photo</span><span class="p">,</span>
|
||||||
|
<span class="n">timeout</span><span class="o">=</span><span class="n">timeout</span><span class="p">,</span>
|
||||||
|
<span class="n">burst</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">burst</span><span class="p">,</span>
|
||||||
|
<span class="n">dry_run</span><span class="o">=</span><span class="n">dry_run</span><span class="p">,</span>
|
||||||
|
<span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="n">all_results</span><span class="o">.</span><span class="n">exported</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">exported</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="n">ExportError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="n">all_results</span><span class="o">.</span><span class="n">error</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="nb">str</span><span class="p">(</span><span class="n">dest</span><span class="p">),</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">lineno</span><span class="p">(</span><span class="vm">__file__</span><span class="p">)</span><span class="si">}</span><span class="s2">)"</span><span class="p">))</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="c1"># export original version and not edited</span>
|
||||||
|
<span class="k">if</span> <span class="n">use_photokit</span><span class="p">:</span>
|
||||||
|
<span class="n">photolib</span> <span class="o">=</span> <span class="n">PhotoLibrary</span><span class="p">()</span>
|
||||||
|
<span class="n">photo</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">photo</span> <span class="o">=</span> <span class="n">photolib</span><span class="o">.</span><span class="n">fetch_uuid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="n">PhotoKitFetchFailed</span><span class="p">:</span>
|
||||||
|
<span class="c1"># if failed to find UUID, might be a burst photo</span>
|
||||||
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">burst</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"burstUUID"</span><span class="p">]:</span>
|
||||||
|
<span class="n">bursts</span> <span class="o">=</span> <span class="n">photolib</span><span class="o">.</span><span class="n">fetch_burst_uuid</span><span class="p">(</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"burstUUID"</span><span class="p">],</span> <span class="nb">all</span><span class="o">=</span><span class="kc">True</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="c1"># PhotoKit UUIDs may contain "/L0/001" so only look at beginning</span>
|
||||||
|
<span class="n">photo</span> <span class="o">=</span> <span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">bursts</span> <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">uuid</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)]</span>
|
||||||
|
<span class="n">photo</span> <span class="o">=</span> <span class="n">photo</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">photo</span> <span class="k">else</span> <span class="kc">None</span>
|
||||||
|
<span class="k">if</span> <span class="n">photo</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">dry_run</span><span class="p">:</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">exported</span> <span class="o">=</span> <span class="n">photo</span><span class="o">.</span><span class="n">export</span><span class="p">(</span>
|
||||||
|
<span class="n">dest</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span>
|
||||||
|
<span class="n">dest</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
||||||
|
<span class="n">version</span><span class="o">=</span><span class="n">PHOTOS_VERSION_ORIGINAL</span><span class="p">,</span>
|
||||||
|
<span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="n">all_results</span><span class="o">.</span><span class="n">exported</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">exported</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="n">all_results</span><span class="o">.</span><span class="n">error</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
||||||
|
<span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">dest</span><span class="p">),</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">lineno</span><span class="p">(</span><span class="vm">__file__</span><span class="p">)</span><span class="si">}</span><span class="s2">)"</span><span class="p">)</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="c1"># dry_run, don't actually export</span>
|
||||||
|
<span class="n">all_results</span><span class="o">.</span><span class="n">exported</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">dest</span><span class="p">))</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">exported</span> <span class="o">=</span> <span class="n">_export_photo_uuid_applescript</span><span class="p">(</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span>
|
||||||
|
<span class="n">dest</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span>
|
||||||
|
<span class="n">filestem</span><span class="o">=</span><span class="n">dest</span><span class="o">.</span><span class="n">stem</span><span class="p">,</span>
|
||||||
|
<span class="n">original</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||||
|
<span class="n">edited</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||||
|
<span class="n">live_photo</span><span class="o">=</span><span class="n">live_photo</span><span class="p">,</span>
|
||||||
|
<span class="n">timeout</span><span class="o">=</span><span class="n">timeout</span><span class="p">,</span>
|
||||||
|
<span class="n">burst</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">burst</span><span class="p">,</span>
|
||||||
|
<span class="n">dry_run</span><span class="o">=</span><span class="n">dry_run</span><span class="p">,</span>
|
||||||
|
<span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="n">all_results</span><span class="o">.</span><span class="n">exported</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">exported</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="n">ExportError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
|
<span class="n">all_results</span><span class="o">.</span><span class="n">error</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="nb">str</span><span class="p">(</span><span class="n">dest</span><span class="p">),</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">lineno</span><span class="p">(</span><span class="vm">__file__</span><span class="p">)</span><span class="si">}</span><span class="s2">)"</span><span class="p">))</span>
|
||||||
|
<span class="k">if</span> <span class="n">all_results</span><span class="o">.</span><span class="n">exported</span><span class="p">:</span>
|
||||||
|
<span class="k">for</span> <span class="n">idx</span><span class="p">,</span> <span class="n">photopath</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">all_results</span><span class="o">.</span><span class="n">exported</span><span class="p">):</span>
|
||||||
|
<span class="n">converted_stat</span> <span class="o">=</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||||
|
<span class="n">photopath</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">photopath</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">convert_to_jpeg</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">isphoto</span><span class="p">:</span>
|
||||||
|
<span class="c1"># if passed convert_to_jpeg=True, will assume the photo is a photo and not already a jpeg</span>
|
||||||
|
<span class="k">if</span> <span class="n">photopath</span><span class="o">.</span><span class="n">suffix</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">LIVE_VIDEO_EXTENSIONS</span><span class="p">:</span>
|
||||||
|
<span class="n">dest_str</span> <span class="o">=</span> <span class="n">photopath</span><span class="o">.</span><span class="n">parent</span> <span class="o">/</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">photopath</span><span class="o">.</span><span class="n">stem</span><span class="si">}</span><span class="s2">.jpeg"</span>
|
||||||
|
<span class="n">fileutil</span><span class="o">.</span><span class="n">convert_to_jpeg</span><span class="p">(</span>
|
||||||
|
<span class="n">photopath</span><span class="p">,</span> <span class="n">dest_str</span><span class="p">,</span> <span class="n">compression_quality</span><span class="o">=</span><span class="n">jpeg_quality</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="n">converted_stat</span> <span class="o">=</span> <span class="n">fileutil</span><span class="o">.</span><span class="n">file_sig</span><span class="p">(</span><span class="n">dest_str</span><span class="p">)</span>
|
||||||
|
<span class="n">fileutil</span><span class="o">.</span><span class="n">unlink</span><span class="p">(</span><span class="n">photopath</span><span class="p">)</span>
|
||||||
|
<span class="n">all_results</span><span class="o">.</span><span class="n">exported</span><span class="p">[</span><span class="n">idx</span><span class="p">]</span> <span class="o">=</span> <span class="n">dest_str</span>
|
||||||
|
<span class="n">all_results</span><span class="o">.</span><span class="n">converted_to_jpeg</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">dest_str</span><span class="p">)</span>
|
||||||
|
<span class="n">photopath</span> <span class="o">=</span> <span class="n">dest_str</span>
|
||||||
|
|
||||||
|
<span class="n">photopath</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">photopath</span><span class="p">)</span>
|
||||||
|
<span class="n">export_db</span><span class="o">.</span><span class="n">set_data</span><span class="p">(</span>
|
||||||
|
<span class="n">filename</span><span class="o">=</span><span class="n">photopath</span><span class="p">,</span>
|
||||||
|
<span class="n">uuid</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span>
|
||||||
|
<span class="n">orig_stat</span><span class="o">=</span><span class="n">fileutil</span><span class="o">.</span><span class="n">file_sig</span><span class="p">(</span><span class="n">photopath</span><span class="p">),</span>
|
||||||
|
<span class="n">exif_stat</span><span class="o">=</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">),</span>
|
||||||
|
<span class="n">converted_stat</span><span class="o">=</span><span class="n">converted_stat</span><span class="p">,</span>
|
||||||
|
<span class="n">edited_stat</span><span class="o">=</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">),</span>
|
||||||
|
<span class="n">info_json</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">json</span><span class="p">(),</span>
|
||||||
|
<span class="n">exif_json</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># todo: handle signatures</span>
|
||||||
|
<span class="k">if</span> <span class="n">jpeg_ext</span><span class="p">:</span>
|
||||||
|
<span class="c1"># use_photos_export (both PhotoKit and AppleScript) don't use the</span>
|
||||||
|
<span class="c1"># file extension provided (instead they use extension for UTI)</span>
|
||||||
|
<span class="c1"># so if jpeg_ext is set, rename any non-conforming jpegs</span>
|
||||||
|
<span class="n">all_results</span><span class="o">.</span><span class="n">exported</span> <span class="o">=</span> <span class="n">rename_jpeg_files</span><span class="p">(</span>
|
||||||
|
<span class="n">all_results</span><span class="o">.</span><span class="n">exported</span><span class="p">,</span> <span class="n">jpeg_ext</span><span class="p">,</span> <span class="n">fileutil</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">touch_file</span><span class="p">:</span>
|
||||||
|
<span class="k">for</span> <span class="n">exported_file</span> <span class="ow">in</span> <span class="n">all_results</span><span class="o">.</span><span class="n">exported</span><span class="p">:</span>
|
||||||
|
<span class="n">all_results</span><span class="o">.</span><span class="n">touched</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exported_file</span><span class="p">)</span>
|
||||||
|
<span class="n">ts</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">timestamp</span><span class="p">())</span>
|
||||||
|
<span class="n">fileutil</span><span class="o">.</span><span class="n">utime</span><span class="p">(</span><span class="n">exported_file</span><span class="p">,</span> <span class="p">(</span><span class="n">ts</span><span class="p">,</span> <span class="n">ts</span><span class="p">))</span>
|
||||||
|
<span class="k">if</span> <span class="n">update</span><span class="p">:</span>
|
||||||
|
<span class="n">all_results</span><span class="o">.</span><span class="n">new</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">all_results</span><span class="o">.</span><span class="n">exported</span><span class="p">)</span>
|
||||||
|
|
||||||
|
|
||||||
<span class="k">def</span> <span class="nf">_export_photo</span><span class="p">(</span>
|
<span class="k">def</span> <span class="nf">_export_photo</span><span class="p">(</span>
|
||||||
<span class="bp">self</span><span class="p">,</span>
|
<span class="bp">self</span><span class="p">,</span>
|
||||||
<span class="n">src</span><span class="p">,</span>
|
<span class="n">src</span><span class="p">,</span>
|
||||||
@@ -1549,9 +1726,10 @@
|
|||||||
<span class="p">)</span>
|
<span class="p">)</span>
|
||||||
|
|
||||||
<span class="k">if</span> <span class="n">description_template</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">description_template</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||||
<span class="n">rendered</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">render_template</span><span class="p">(</span>
|
<span class="n">options</span> <span class="o">=</span> <span class="n">dataclasses</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span>
|
||||||
<span class="n">description_template</span><span class="p">,</span> <span class="n">expand_inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">inplace_sep</span><span class="o">=</span><span class="s2">", "</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_render_options</span><span class="p">,</span> <span class="n">expand_inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">inplace_sep</span><span class="o">=</span><span class="s2">", "</span>
|
||||||
<span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
<span class="p">)</span>
|
||||||
|
<span class="n">rendered</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">render_template</span><span class="p">(</span><span class="n">description_template</span><span class="p">,</span> <span class="n">options</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
<span class="n">description</span> <span class="o">=</span> <span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">rendered</span><span class="p">)</span> <span class="k">if</span> <span class="n">rendered</span> <span class="k">else</span> <span class="s2">""</span>
|
<span class="n">description</span> <span class="o">=</span> <span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">rendered</span><span class="p">)</span> <span class="k">if</span> <span class="n">rendered</span> <span class="k">else</span> <span class="s2">""</span>
|
||||||
<span class="n">exif</span><span class="p">[</span><span class="s2">"EXIF:ImageDescription"</span><span class="p">]</span> <span class="o">=</span> <span class="n">description</span>
|
<span class="n">exif</span><span class="p">[</span><span class="s2">"EXIF:ImageDescription"</span><span class="p">]</span> <span class="o">=</span> <span class="n">description</span>
|
||||||
<span class="n">exif</span><span class="p">[</span><span class="s2">"XMP:Description"</span><span class="p">]</span> <span class="o">=</span> <span class="n">description</span>
|
<span class="n">exif</span><span class="p">[</span><span class="s2">"XMP:Description"</span><span class="p">]</span> <span class="o">=</span> <span class="n">description</span>
|
||||||
@@ -1589,10 +1767,11 @@
|
|||||||
|
|
||||||
<span class="k">if</span> <span class="n">keyword_template</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">keyword_template</span><span class="p">:</span>
|
||||||
<span class="n">rendered_keywords</span> <span class="o">=</span> <span class="p">[]</span>
|
<span class="n">rendered_keywords</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
<span class="k">for</span> <span class="n">template_str</span> <span class="ow">in</span> <span class="n">keyword_template</span><span class="p">:</span>
|
<span class="n">options</span> <span class="o">=</span> <span class="n">dataclasses</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span>
|
||||||
<span class="n">rendered</span><span class="p">,</span> <span class="n">unmatched</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">render_template</span><span class="p">(</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_render_options</span><span class="p">,</span> <span class="n">none_str</span><span class="o">=</span><span class="n">_OSXPHOTOS_NONE_SENTINEL</span><span class="p">,</span> <span class="n">path_sep</span><span class="o">=</span><span class="s2">"/"</span>
|
||||||
<span class="n">template_str</span><span class="p">,</span> <span class="n">none_str</span><span class="o">=</span><span class="n">_OSXPHOTOS_NONE_SENTINEL</span><span class="p">,</span> <span class="n">path_sep</span><span class="o">=</span><span class="s2">"/"</span>
|
|
||||||
<span class="p">)</span>
|
<span class="p">)</span>
|
||||||
|
<span class="k">for</span> <span class="n">template_str</span> <span class="ow">in</span> <span class="n">keyword_template</span><span class="p">:</span>
|
||||||
|
<span class="n">rendered</span><span class="p">,</span> <span class="n">unmatched</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">render_template</span><span class="p">(</span><span class="n">template_str</span><span class="p">,</span> <span class="n">options</span><span class="p">)</span>
|
||||||
<span class="k">if</span> <span class="n">unmatched</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">unmatched</span><span class="p">:</span>
|
||||||
<span class="n">logging</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
|
<span class="n">logging</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
|
||||||
<span class="sa">f</span><span class="s2">"Unmatched template substitution for template: </span><span class="si">{</span><span class="n">template_str</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">unmatched</span><span class="si">}</span><span class="s2">"</span>
|
<span class="sa">f</span><span class="s2">"Unmatched template substitution for template: </span><span class="si">{</span><span class="n">template_str</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">unmatched</span><span class="si">}</span><span class="s2">"</span>
|
||||||
@@ -1868,9 +2047,10 @@
|
|||||||
<span class="n">extension</span> <span class="o">=</span> <span class="n">extension</span><span class="o">.</span><span class="n">suffix</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="k">if</span> <span class="n">extension</span><span class="o">.</span><span class="n">suffix</span> <span class="k">else</span> <span class="kc">None</span>
|
<span class="n">extension</span> <span class="o">=</span> <span class="n">extension</span><span class="o">.</span><span class="n">suffix</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="k">if</span> <span class="n">extension</span><span class="o">.</span><span class="n">suffix</span> <span class="k">else</span> <span class="kc">None</span>
|
||||||
|
|
||||||
<span class="k">if</span> <span class="n">description_template</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">description_template</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||||
<span class="n">rendered</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">render_template</span><span class="p">(</span>
|
<span class="n">options</span> <span class="o">=</span> <span class="n">dataclasses</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span>
|
||||||
<span class="n">description_template</span><span class="p">,</span> <span class="n">expand_inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">inplace_sep</span><span class="o">=</span><span class="s2">", "</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_render_options</span><span class="p">,</span> <span class="n">expand_inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">inplace_sep</span><span class="o">=</span><span class="s2">", "</span>
|
||||||
<span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
<span class="p">)</span>
|
||||||
|
<span class="n">rendered</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">render_template</span><span class="p">(</span><span class="n">description_template</span><span class="p">,</span> <span class="n">options</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
<span class="n">description</span> <span class="o">=</span> <span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">rendered</span><span class="p">)</span> <span class="k">if</span> <span class="n">rendered</span> <span class="k">else</span> <span class="s2">""</span>
|
<span class="n">description</span> <span class="o">=</span> <span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">rendered</span><span class="p">)</span> <span class="k">if</span> <span class="n">rendered</span> <span class="k">else</span> <span class="s2">""</span>
|
||||||
<span class="k">else</span><span class="p">:</span>
|
<span class="k">else</span><span class="p">:</span>
|
||||||
<span class="n">description</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="s2">""</span>
|
<span class="n">description</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="s2">""</span>
|
||||||
@@ -1902,10 +2082,11 @@
|
|||||||
|
|
||||||
<span class="k">if</span> <span class="n">keyword_template</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">keyword_template</span><span class="p">:</span>
|
||||||
<span class="n">rendered_keywords</span> <span class="o">=</span> <span class="p">[]</span>
|
<span class="n">rendered_keywords</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
<span class="k">for</span> <span class="n">template_str</span> <span class="ow">in</span> <span class="n">keyword_template</span><span class="p">:</span>
|
<span class="n">options</span> <span class="o">=</span> <span class="n">dataclasses</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span>
|
||||||
<span class="n">rendered</span><span class="p">,</span> <span class="n">unmatched</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">render_template</span><span class="p">(</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_render_options</span><span class="p">,</span> <span class="n">none_str</span><span class="o">=</span><span class="n">_OSXPHOTOS_NONE_SENTINEL</span><span class="p">,</span> <span class="n">path_sep</span><span class="o">=</span><span class="s2">"/"</span>
|
||||||
<span class="n">template_str</span><span class="p">,</span> <span class="n">none_str</span><span class="o">=</span><span class="n">_OSXPHOTOS_NONE_SENTINEL</span><span class="p">,</span> <span class="n">path_sep</span><span class="o">=</span><span class="s2">"/"</span>
|
|
||||||
<span class="p">)</span>
|
<span class="p">)</span>
|
||||||
|
<span class="k">for</span> <span class="n">template_str</span> <span class="ow">in</span> <span class="n">keyword_template</span><span class="p">:</span>
|
||||||
|
<span class="n">rendered</span><span class="p">,</span> <span class="n">unmatched</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">render_template</span><span class="p">(</span><span class="n">template_str</span><span class="p">,</span> <span class="n">options</span><span class="p">)</span>
|
||||||
<span class="k">if</span> <span class="n">unmatched</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">unmatched</span><span class="p">:</span>
|
||||||
<span class="n">logging</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
|
<span class="n">logging</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
|
||||||
<span class="sa">f</span><span class="s2">"Unmatched template substitution for template: </span><span class="si">{</span><span class="n">template_str</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">unmatched</span><span class="si">}</span><span class="s2">"</span>
|
<span class="sa">f</span><span class="s2">"Unmatched template substitution for template: </span><span class="si">{</span><span class="n">template_str</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">unmatched</span><span class="si">}</span><span class="s2">"</span>
|
||||||
@@ -2021,7 +2202,7 @@
|
|||||||
©2021, Rhet Turnbull.
|
©2021, Rhet Turnbull.
|
||||||
|
|
||||||
|
|
|
|
||||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.2</a>
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
|
||||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -5,10 +5,10 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>osxphotos.photoinfo.photoinfo — osxphotos 0.42.20 documentation</title>
|
<title>osxphotos.photoinfo.photoinfo — osxphotos 0.42.66 documentation</title>
|
||||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css" />
|
||||||
<link rel="stylesheet" href="../../../_static/alabaster.css" type="text/css" />
|
<link rel="stylesheet" type="text/css" href="../../../_static/alabaster.css" />
|
||||||
<script id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
<script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
|
||||||
<script src="../../../_static/jquery.js"></script>
|
<script src="../../../_static/jquery.js"></script>
|
||||||
<script src="../../../_static/underscore.js"></script>
|
<script src="../../../_static/underscore.js"></script>
|
||||||
<script src="../../../_static/doctools.js"></script>
|
<script src="../../../_static/doctools.js"></script>
|
||||||
@@ -36,7 +36,6 @@
|
|||||||
<span class="sd">Represents a single photo in the Photos library and provides access to the photo's attributes</span>
|
<span class="sd">Represents a single photo in the Photos library and provides access to the photo's attributes</span>
|
||||||
<span class="sd">PhotosDB.photos() returns a list of PhotoInfo objects</span>
|
<span class="sd">PhotosDB.photos() returns a list of PhotoInfo objects</span>
|
||||||
<span class="sd">"""</span>
|
<span class="sd">"""</span>
|
||||||
|
|
||||||
<span class="kn">import</span> <span class="nn">dataclasses</span>
|
<span class="kn">import</span> <span class="nn">dataclasses</span>
|
||||||
<span class="kn">import</span> <span class="nn">datetime</span>
|
<span class="kn">import</span> <span class="nn">datetime</span>
|
||||||
<span class="kn">import</span> <span class="nn">json</span>
|
<span class="kn">import</span> <span class="nn">json</span>
|
||||||
@@ -45,6 +44,7 @@
|
|||||||
<span class="kn">import</span> <span class="nn">os.path</span>
|
<span class="kn">import</span> <span class="nn">os.path</span>
|
||||||
<span class="kn">import</span> <span class="nn">pathlib</span>
|
<span class="kn">import</span> <span class="nn">pathlib</span>
|
||||||
<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">timedelta</span><span class="p">,</span> <span class="n">timezone</span>
|
<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">timedelta</span><span class="p">,</span> <span class="n">timezone</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Optional</span>
|
||||||
|
|
||||||
<span class="kn">import</span> <span class="nn">yaml</span>
|
<span class="kn">import</span> <span class="nn">yaml</span>
|
||||||
|
|
||||||
@@ -67,9 +67,10 @@
|
|||||||
<span class="kn">from</span> <span class="nn">..adjustmentsinfo</span> <span class="kn">import</span> <span class="n">AdjustmentsInfo</span>
|
<span class="kn">from</span> <span class="nn">..adjustmentsinfo</span> <span class="kn">import</span> <span class="n">AdjustmentsInfo</span>
|
||||||
<span class="kn">from</span> <span class="nn">..albuminfo</span> <span class="kn">import</span> <span class="n">AlbumInfo</span><span class="p">,</span> <span class="n">ImportInfo</span>
|
<span class="kn">from</span> <span class="nn">..albuminfo</span> <span class="kn">import</span> <span class="n">AlbumInfo</span><span class="p">,</span> <span class="n">ImportInfo</span>
|
||||||
<span class="kn">from</span> <span class="nn">..personinfo</span> <span class="kn">import</span> <span class="n">FaceInfo</span><span class="p">,</span> <span class="n">PersonInfo</span>
|
<span class="kn">from</span> <span class="nn">..personinfo</span> <span class="kn">import</span> <span class="n">FaceInfo</span><span class="p">,</span> <span class="n">PersonInfo</span>
|
||||||
<span class="kn">from</span> <span class="nn">..phototemplate</span> <span class="kn">import</span> <span class="n">PhotoTemplate</span>
|
<span class="kn">from</span> <span class="nn">..phototemplate</span> <span class="kn">import</span> <span class="n">PhotoTemplate</span><span class="p">,</span> <span class="n">RenderOptions</span>
|
||||||
<span class="kn">from</span> <span class="nn">..placeinfo</span> <span class="kn">import</span> <span class="n">PlaceInfo4</span><span class="p">,</span> <span class="n">PlaceInfo5</span>
|
<span class="kn">from</span> <span class="nn">..placeinfo</span> <span class="kn">import</span> <span class="n">PlaceInfo4</span><span class="p">,</span> <span class="n">PlaceInfo5</span>
|
||||||
<span class="kn">from</span> <span class="nn">..utils</span> <span class="kn">import</span> <span class="n">_debug</span><span class="p">,</span> <span class="n">_get_resource_loc</span><span class="p">,</span> <span class="n">findfiles</span><span class="p">,</span> <span class="n">get_preferred_uti_extension</span>
|
<span class="kn">from</span> <span class="nn">..uti</span> <span class="kn">import</span> <span class="n">get_preferred_uti_extension</span><span class="p">,</span> <span class="n">get_uti_for_extension</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">..utils</span> <span class="kn">import</span> <span class="n">_debug</span><span class="p">,</span> <span class="n">_get_resource_loc</span><span class="p">,</span> <span class="n">findfiles</span>
|
||||||
|
|
||||||
|
|
||||||
<div class="viewcode-block" id="PhotoInfo"><a class="viewcode-back" href="../../../reference.html#osxphotos.PhotoInfo">[docs]</a><span class="k">class</span> <span class="nc">PhotoInfo</span><span class="p">:</span>
|
<div class="viewcode-block" id="PhotoInfo"><a class="viewcode-back" href="../../../reference.html#osxphotos.PhotoInfo">[docs]</a><span class="k">class</span> <span class="nc">PhotoInfo</span><span class="p">:</span>
|
||||||
@@ -79,30 +80,31 @@
|
|||||||
<span class="sd"> """</span>
|
<span class="sd"> """</span>
|
||||||
|
|
||||||
<span class="c1"># import additional methods</span>
|
<span class="c1"># import additional methods</span>
|
||||||
<span class="kn">from</span> <span class="nn">._photoinfo_searchinfo</span> <span class="kn">import</span> <span class="p">(</span>
|
<span class="kn">from</span> <span class="nn">._photoinfo_comments</span> <span class="kn">import</span> <span class="n">comments</span><span class="p">,</span> <span class="n">likes</span>
|
||||||
<span class="n">search_info</span><span class="p">,</span>
|
<span class="kn">from</span> <span class="nn">._photoinfo_exifinfo</span> <span class="kn">import</span> <span class="n">ExifInfo</span><span class="p">,</span> <span class="n">exif_info</span>
|
||||||
<span class="n">search_info_normalized</span><span class="p">,</span>
|
|
||||||
<span class="n">labels</span><span class="p">,</span>
|
|
||||||
<span class="n">labels_normalized</span><span class="p">,</span>
|
|
||||||
<span class="n">SearchInfo</span><span class="p">,</span>
|
|
||||||
<span class="p">)</span>
|
|
||||||
<span class="kn">from</span> <span class="nn">._photoinfo_exifinfo</span> <span class="kn">import</span> <span class="n">exif_info</span><span class="p">,</span> <span class="n">ExifInfo</span>
|
|
||||||
<span class="kn">from</span> <span class="nn">._photoinfo_exiftool</span> <span class="kn">import</span> <span class="n">exiftool</span>
|
<span class="kn">from</span> <span class="nn">._photoinfo_exiftool</span> <span class="kn">import</span> <span class="n">exiftool</span>
|
||||||
<span class="kn">from</span> <span class="nn">._photoinfo_export</span> <span class="kn">import</span> <span class="p">(</span>
|
<span class="kn">from</span> <span class="nn">._photoinfo_export</span> <span class="kn">import</span> <span class="p">(</span>
|
||||||
<span class="n">export</span><span class="p">,</span>
|
<span class="n">ExportResults</span><span class="p">,</span>
|
||||||
<span class="n">export2</span><span class="p">,</span>
|
|
||||||
<span class="n">_export_photo</span><span class="p">,</span>
|
|
||||||
<span class="n">_exiftool_dict</span><span class="p">,</span>
|
<span class="n">_exiftool_dict</span><span class="p">,</span>
|
||||||
<span class="n">_exiftool_json_sidecar</span><span class="p">,</span>
|
<span class="n">_exiftool_json_sidecar</span><span class="p">,</span>
|
||||||
|
<span class="n">_export_photo</span><span class="p">,</span>
|
||||||
|
<span class="n">_export_photo_with_photos_export</span><span class="p">,</span>
|
||||||
<span class="n">_get_exif_keywords</span><span class="p">,</span>
|
<span class="n">_get_exif_keywords</span><span class="p">,</span>
|
||||||
<span class="n">_get_exif_persons</span><span class="p">,</span>
|
<span class="n">_get_exif_persons</span><span class="p">,</span>
|
||||||
<span class="n">_write_exif_data</span><span class="p">,</span>
|
<span class="n">_write_exif_data</span><span class="p">,</span>
|
||||||
<span class="n">_write_sidecar</span><span class="p">,</span>
|
<span class="n">_write_sidecar</span><span class="p">,</span>
|
||||||
<span class="n">_xmp_sidecar</span><span class="p">,</span>
|
<span class="n">_xmp_sidecar</span><span class="p">,</span>
|
||||||
<span class="n">ExportResults</span><span class="p">,</span>
|
<span class="n">export</span><span class="p">,</span>
|
||||||
|
<span class="n">export2</span><span class="p">,</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">._photoinfo_scoreinfo</span> <span class="kn">import</span> <span class="n">ScoreInfo</span><span class="p">,</span> <span class="n">score</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">._photoinfo_searchinfo</span> <span class="kn">import</span> <span class="p">(</span>
|
||||||
|
<span class="n">SearchInfo</span><span class="p">,</span>
|
||||||
|
<span class="n">labels</span><span class="p">,</span>
|
||||||
|
<span class="n">labels_normalized</span><span class="p">,</span>
|
||||||
|
<span class="n">search_info</span><span class="p">,</span>
|
||||||
|
<span class="n">search_info_normalized</span><span class="p">,</span>
|
||||||
<span class="p">)</span>
|
<span class="p">)</span>
|
||||||
<span class="kn">from</span> <span class="nn">._photoinfo_scoreinfo</span> <span class="kn">import</span> <span class="n">score</span><span class="p">,</span> <span class="n">ScoreInfo</span>
|
|
||||||
<span class="kn">from</span> <span class="nn">._photoinfo_comments</span> <span class="kn">import</span> <span class="n">comments</span><span class="p">,</span> <span class="n">likes</span>
|
|
||||||
|
|
||||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">uuid</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">info</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">uuid</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">info</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span> <span class="o">=</span> <span class="n">uuid</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span> <span class="o">=</span> <span class="n">uuid</span>
|
||||||
@@ -110,6 +112,9 @@
|
|||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_db</span> <span class="o">=</span> <span class="n">db</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_db</span> <span class="o">=</span> <span class="n">db</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_verbose</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_verbose</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_verbose</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_verbose</span>
|
||||||
|
|
||||||
|
<span class="c1"># TODO: remove this once refactor of PhotoExporter is done</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_render_options</span> <span class="o">=</span> <span class="n">RenderOptions</span><span class="p">()</span>
|
||||||
|
|
||||||
<span class="nd">@property</span>
|
<span class="nd">@property</span>
|
||||||
<span class="k">def</span> <span class="nf">filename</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">filename</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="sd">"""filename of the picture"""</span>
|
<span class="sd">"""filename of the picture"""</span>
|
||||||
@@ -177,41 +182,11 @@
|
|||||||
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_path</span> <span class="o">=</span> <span class="kc">None</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_path</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
<span class="n">photopath</span> <span class="o">=</span> <span class="kc">None</span>
|
<span class="n">photopath</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
<span class="c1"># TODO: should path try to return path even if ismissing?</span>
|
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"isMissing"</span><span class="p">]</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"isMissing"</span><span class="p">]</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||||||
<span class="k">return</span> <span class="n">photopath</span> <span class="c1"># path would be meaningless until downloaded</span>
|
<span class="k">return</span> <span class="n">photopath</span> <span class="c1"># path would be meaningless until downloaded</span>
|
||||||
|
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_db_version</span> <span class="o"><=</span> <span class="n">_PHOTOS_4_VERSION</span><span class="p">:</span>
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_db_version</span> <span class="o"><=</span> <span class="n">_PHOTOS_4_VERSION</span><span class="p">:</span>
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"has_raw"</span><span class="p">]:</span>
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_path_4</span><span class="p">()</span>
|
||||||
<span class="c1"># return the path to JPEG even if RAW is original</span>
|
|
||||||
<span class="n">vol</span> <span class="o">=</span> <span class="p">(</span>
|
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_dbvolumes</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"raw_pair_info"</span><span class="p">][</span><span class="s2">"volumeId"</span><span class="p">]]</span>
|
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"raw_pair_info"</span><span class="p">][</span><span class="s2">"volumeId"</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
|
|
||||||
<span class="k">else</span> <span class="kc">None</span>
|
|
||||||
<span class="p">)</span>
|
|
||||||
<span class="k">if</span> <span class="n">vol</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
||||||
<span class="n">photopath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
|
||||||
<span class="s2">"/Volumes"</span><span class="p">,</span> <span class="n">vol</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"raw_pair_info"</span><span class="p">][</span><span class="s2">"imagePath"</span><span class="p">]</span>
|
|
||||||
<span class="p">)</span>
|
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="n">photopath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_masters_path</span><span class="p">,</span>
|
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"raw_pair_info"</span><span class="p">][</span><span class="s2">"imagePath"</span><span class="p">],</span>
|
|
||||||
<span class="p">)</span>
|
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="n">vol</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"volume"</span><span class="p">]</span>
|
|
||||||
<span class="k">if</span> <span class="n">vol</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
||||||
<span class="n">photopath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
|
||||||
<span class="s2">"/Volumes"</span><span class="p">,</span> <span class="n">vol</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"imagePath"</span><span class="p">]</span>
|
|
||||||
<span class="p">)</span>
|
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="n">photopath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_masters_path</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"imagePath"</span><span class="p">]</span>
|
|
||||||
<span class="p">)</span>
|
|
||||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">photopath</span><span class="p">):</span>
|
|
||||||
<span class="n">photopath</span> <span class="o">=</span> <span class="kc">None</span>
|
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_path</span> <span class="o">=</span> <span class="n">photopath</span>
|
|
||||||
<span class="k">return</span> <span class="n">photopath</span>
|
|
||||||
|
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"shared"</span><span class="p">]:</span>
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"shared"</span><span class="p">]:</span>
|
||||||
<span class="c1"># shared photo</span>
|
<span class="c1"># shared photo</span>
|
||||||
@@ -241,6 +216,37 @@
|
|||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_path</span> <span class="o">=</span> <span class="n">photopath</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_path</span> <span class="o">=</span> <span class="n">photopath</span>
|
||||||
<span class="k">return</span> <span class="n">photopath</span>
|
<span class="k">return</span> <span class="n">photopath</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">_path_4</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""return path for photo on Photos <= version 4"""</span>
|
||||||
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"has_raw"</span><span class="p">]:</span>
|
||||||
|
<span class="c1"># return the path to JPEG even if RAW is original</span>
|
||||||
|
<span class="n">vol</span> <span class="o">=</span> <span class="p">(</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_dbvolumes</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"raw_pair_info"</span><span class="p">][</span><span class="s2">"volumeId"</span><span class="p">]]</span>
|
||||||
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"raw_pair_info"</span><span class="p">][</span><span class="s2">"volumeId"</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
|
||||||
|
<span class="k">else</span> <span class="kc">None</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">vol</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||||
|
<span class="n">photopath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
||||||
|
<span class="s2">"/Volumes"</span><span class="p">,</span> <span class="n">vol</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"raw_pair_info"</span><span class="p">][</span><span class="s2">"imagePath"</span><span class="p">]</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">photopath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_masters_path</span><span class="p">,</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"raw_pair_info"</span><span class="p">][</span><span class="s2">"imagePath"</span><span class="p">],</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">vol</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"volume"</span><span class="p">]</span>
|
||||||
|
<span class="k">if</span> <span class="n">vol</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||||
|
<span class="n">photopath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s2">"/Volumes"</span><span class="p">,</span> <span class="n">vol</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"imagePath"</span><span class="p">])</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">photopath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_masters_path</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"imagePath"</span><span class="p">]</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">photopath</span><span class="p">):</span>
|
||||||
|
<span class="n">photopath</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_path</span> <span class="o">=</span> <span class="n">photopath</span>
|
||||||
|
<span class="k">return</span> <span class="n">photopath</span>
|
||||||
|
|
||||||
<span class="nd">@property</span>
|
<span class="nd">@property</span>
|
||||||
<span class="k">def</span> <span class="nf">path_edited</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">path_edited</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="sd">"""absolute path on disk of the edited picture"""</span>
|
<span class="sd">"""absolute path on disk of the edited picture"""</span>
|
||||||
@@ -280,11 +286,7 @@
|
|||||||
<span class="n">filename</span> <span class="o">=</span> <span class="kc">None</span>
|
<span class="n">filename</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"type"</span><span class="p">]</span> <span class="o">==</span> <span class="n">_PHOTO_TYPE</span><span class="p">:</span>
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"type"</span><span class="p">]</span> <span class="o">==</span> <span class="n">_PHOTO_TYPE</span><span class="p">:</span>
|
||||||
<span class="c1"># it's a photo</span>
|
<span class="c1"># it's a photo</span>
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_photos_ver</span> <span class="o">==</span> <span class="mi">5</span><span class="p">:</span>
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_photos_ver</span> <span class="o">!=</span> <span class="mi">5</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">uti</span> <span class="o">==</span> <span class="s2">"public.heic"</span><span class="p">:</span>
|
||||||
<span class="n">filename</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span><span class="si">}</span><span class="s2">_1_201_a.jpeg"</span>
|
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="c1"># could be a heic or a jpeg</span>
|
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">uti</span> <span class="o">==</span> <span class="s2">"public.heic"</span><span class="p">:</span>
|
|
||||||
<span class="n">filename</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span><span class="si">}</span><span class="s2">_1_201_a.heic"</span>
|
<span class="n">filename</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span><span class="si">}</span><span class="s2">_1_201_a.heic"</span>
|
||||||
<span class="k">else</span><span class="p">:</span>
|
<span class="k">else</span><span class="p">:</span>
|
||||||
<span class="n">filename</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span><span class="si">}</span><span class="s2">_1_201_a.jpeg"</span>
|
<span class="n">filename</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span><span class="si">}</span><span class="s2">_1_201_a.jpeg"</span>
|
||||||
@@ -373,6 +375,37 @@
|
|||||||
|
|
||||||
<span class="k">return</span> <span class="n">photopath</span>
|
<span class="k">return</span> <span class="n">photopath</span>
|
||||||
|
|
||||||
|
<span class="nd">@property</span>
|
||||||
|
<span class="k">def</span> <span class="nf">path_edited_live_photo</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""return path to edited version of live photo movie; only valid for Photos 5+"""</span>
|
||||||
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_db_version</span> <span class="o"><</span> <span class="n">_PHOTOS_5_VERSION</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="kc">None</span>
|
||||||
|
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_path_edited_live_photo</span>
|
||||||
|
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_path_edited_live_photo</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_path_edited_5_live_photo</span><span class="p">()</span>
|
||||||
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_path_edited_live_photo</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">_path_edited_5_live_photo</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""return path_edited_live_photo for Photos >= 5"""</span>
|
||||||
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_db_version</span> <span class="o"><</span> <span class="n">_PHOTOS_5_VERSION</span><span class="p">:</span>
|
||||||
|
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Wrong database format!"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">live_photo</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"hasAdjustments"</span><span class="p">]:</span>
|
||||||
|
<span class="n">library</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_library_path</span>
|
||||||
|
<span class="n">directory</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># first char of uuid</span>
|
||||||
|
<span class="n">filename</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span><span class="si">}</span><span class="s2">_2_100_a.mov"</span>
|
||||||
|
<span class="n">photopath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
||||||
|
<span class="n">library</span><span class="p">,</span> <span class="s2">"resources"</span><span class="p">,</span> <span class="s2">"renders"</span><span class="p">,</span> <span class="n">directory</span><span class="p">,</span> <span class="n">filename</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">photopath</span><span class="p">):</span>
|
||||||
|
<span class="n">photopath</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">photopath</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">photopath</span>
|
||||||
|
|
||||||
<span class="nd">@property</span>
|
<span class="nd">@property</span>
|
||||||
<span class="k">def</span> <span class="nf">path_raw</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">path_raw</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="sd">"""absolute path of associated RAW image or None if there is not one"""</span>
|
<span class="sd">"""absolute path of associated RAW image or None if there is not one"""</span>
|
||||||
@@ -402,6 +435,44 @@
|
|||||||
<span class="c1"># return photopath</span>
|
<span class="c1"># return photopath</span>
|
||||||
|
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_db_version</span> <span class="o"><=</span> <span class="n">_PHOTOS_4_VERSION</span><span class="p">:</span>
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_db_version</span> <span class="o"><=</span> <span class="n">_PHOTOS_4_VERSION</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_path_raw_4</span><span class="p">()</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">isreference</span><span class="p">:</span>
|
||||||
|
<span class="n">filestem</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"filename"</span><span class="p">])</span><span class="o">.</span><span class="n">stem</span>
|
||||||
|
<span class="c1"># raw_ext = get_preferred_uti_extension(self._info["UTI_raw"])</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"directory"</span><span class="p">]</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"/"</span><span class="p">):</span>
|
||||||
|
<span class="n">filepath</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"directory"</span><span class="p">]</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">filepath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_masters_path</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"directory"</span><span class="p">])</span>
|
||||||
|
|
||||||
|
<span class="c1"># raw files have same name as original but with _4.raw_ext appended</span>
|
||||||
|
<span class="c1"># I believe the _4 maps to PHAssetResourceTypeAlternatePhoto = 4</span>
|
||||||
|
<span class="c1"># see: https://developer.apple.com/documentation/photokit/phassetresourcetype/phassetresourcetypealternatephoto?language=objc</span>
|
||||||
|
<span class="n">glob_str</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">filestem</span><span class="si">}</span><span class="s2">_4*"</span>
|
||||||
|
<span class="n">raw_file</span> <span class="o">=</span> <span class="n">findfiles</span><span class="p">(</span><span class="n">glob_str</span><span class="p">,</span> <span class="n">filepath</span><span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">raw_file</span><span class="p">:</span>
|
||||||
|
<span class="n">photopath</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">photopath</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">filepath</span><span class="p">)</span> <span class="o">/</span> <span class="n">raw_file</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
|
<span class="n">photopath</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">photopath</span><span class="p">)</span> <span class="k">if</span> <span class="n">photopath</span><span class="o">.</span><span class="n">is_file</span><span class="p">()</span> <span class="k">else</span> <span class="kc">None</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="c1"># is a reference</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">photopath</span> <span class="o">=</span> <span class="p">(</span>
|
||||||
|
<span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="s2">"/Volumes"</span><span class="p">)</span>
|
||||||
|
<span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"raw_volume"</span><span class="p">]</span>
|
||||||
|
<span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"raw_relative_path"</span><span class="p">]</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="n">photopath</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">photopath</span><span class="p">)</span> <span class="k">if</span> <span class="n">photopath</span><span class="o">.</span><span class="n">is_file</span><span class="p">()</span> <span class="k">else</span> <span class="kc">None</span>
|
||||||
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
||||||
|
<span class="c1"># don't have the path details</span>
|
||||||
|
<span class="n">photopath</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="n">photopath</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">_path_raw_4</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Return path_raw for Photos <= version 4"""</span>
|
||||||
<span class="n">vol</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"raw_info"</span><span class="p">][</span><span class="s2">"volume"</span><span class="p">]</span>
|
<span class="n">vol</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"raw_info"</span><span class="p">][</span><span class="s2">"volume"</span><span class="p">]</span>
|
||||||
<span class="k">if</span> <span class="n">vol</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">vol</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||||
<span class="n">photopath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
<span class="n">photopath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
||||||
@@ -416,32 +487,6 @@
|
|||||||
<span class="sa">f</span><span class="s2">"MISSING PATH: RAW photo for UUID </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span><span class="si">}</span><span class="s2"> should be at </span><span class="si">{</span><span class="n">photopath</span><span class="si">}</span><span class="s2"> but does not appear to exist"</span>
|
<span class="sa">f</span><span class="s2">"MISSING PATH: RAW photo for UUID </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span><span class="si">}</span><span class="s2"> should be at </span><span class="si">{</span><span class="n">photopath</span><span class="si">}</span><span class="s2"> but does not appear to exist"</span>
|
||||||
<span class="p">)</span>
|
<span class="p">)</span>
|
||||||
<span class="n">photopath</span> <span class="o">=</span> <span class="kc">None</span>
|
<span class="n">photopath</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="n">filestem</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"filename"</span><span class="p">])</span><span class="o">.</span><span class="n">stem</span>
|
|
||||||
<span class="n">raw_ext</span> <span class="o">=</span> <span class="n">get_preferred_uti_extension</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"UTI_raw"</span><span class="p">])</span>
|
|
||||||
|
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"directory"</span><span class="p">]</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"/"</span><span class="p">):</span>
|
|
||||||
<span class="n">filepath</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"directory"</span><span class="p">]</span>
|
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="n">filepath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_masters_path</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"directory"</span><span class="p">])</span>
|
|
||||||
|
|
||||||
<span class="n">glob_str</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">filestem</span><span class="si">}</span><span class="s2">*.</span><span class="si">{</span><span class="n">raw_ext</span><span class="si">}</span><span class="s2">"</span>
|
|
||||||
<span class="n">raw_file</span> <span class="o">=</span> <span class="n">findfiles</span><span class="p">(</span><span class="n">glob_str</span><span class="p">,</span> <span class="n">filepath</span><span class="p">)</span>
|
|
||||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">raw_file</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
|
|
||||||
<span class="c1"># Note: In Photos Version 5.0 (141.19.150), images not copied to Photos Library</span>
|
|
||||||
<span class="c1"># that are missing do not always trigger is_missing = True as happens</span>
|
|
||||||
<span class="c1"># in earlier version so it's possible for this check to fail, if so, return None</span>
|
|
||||||
<span class="n">logging</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error getting path to RAW file: </span><span class="si">{</span><span class="n">filepath</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">glob_str</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
||||||
<span class="n">photopath</span> <span class="o">=</span> <span class="kc">None</span>
|
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="n">photopath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">filepath</span><span class="p">,</span> <span class="n">raw_file</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
|
||||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">photopath</span><span class="p">):</span>
|
|
||||||
<span class="n">logging</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
|
|
||||||
<span class="sa">f</span><span class="s2">"MISSING PATH: RAW photo for UUID </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span><span class="si">}</span><span class="s2"> should be at </span><span class="si">{</span><span class="n">photopath</span><span class="si">}</span><span class="s2"> but does not appear to exist"</span>
|
|
||||||
<span class="p">)</span>
|
|
||||||
<span class="n">photopath</span> <span class="o">=</span> <span class="kc">None</span>
|
|
||||||
|
|
||||||
<span class="k">return</span> <span class="n">photopath</span>
|
|
||||||
|
|
||||||
<span class="nd">@property</span>
|
<span class="nd">@property</span>
|
||||||
<span class="k">def</span> <span class="nf">description</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">description</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
@@ -690,13 +735,23 @@
|
|||||||
<span class="sd">"""Returns Uniform Type Identifier (UTI) for the original image</span>
|
<span class="sd">"""Returns Uniform Type Identifier (UTI) for the original image</span>
|
||||||
<span class="sd"> for example: public.jpeg or com.apple.quicktime-movie</span>
|
<span class="sd"> for example: public.jpeg or com.apple.quicktime-movie</span>
|
||||||
<span class="sd"> """</span>
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_uti_original</span>
|
||||||
|
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_db_version</span> <span class="o"><=</span> <span class="n">_PHOTOS_4_VERSION</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"has_raw"</span><span class="p">]:</span>
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_db_version</span> <span class="o"><=</span> <span class="n">_PHOTOS_4_VERSION</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"has_raw"</span><span class="p">]:</span>
|
||||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"raw_pair_info"</span><span class="p">][</span><span class="s2">"UTI"</span><span class="p">]</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_uti_original</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"raw_pair_info"</span><span class="p">][</span><span class="s2">"UTI"</span><span class="p">]</span>
|
||||||
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">shared</span><span class="p">:</span>
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">shared</span><span class="p">:</span>
|
||||||
<span class="c1"># TODO: need reliable way to get original UTI for shared</span>
|
<span class="c1"># TODO: need reliable way to get original UTI for shared</span>
|
||||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">uti</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_uti_original</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">uti</span>
|
||||||
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_photos_ver</span> <span class="o">>=</span> <span class="mi">7</span><span class="p">:</span>
|
||||||
|
<span class="c1"># Monterey+</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_uti_original</span> <span class="o">=</span> <span class="n">get_uti_for_extension</span><span class="p">(</span>
|
||||||
|
<span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">original_filename</span><span class="p">)</span><span class="o">.</span><span class="n">suffix</span>
|
||||||
|
<span class="p">)</span>
|
||||||
<span class="k">else</span><span class="p">:</span>
|
<span class="k">else</span><span class="p">:</span>
|
||||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"UTI_original"</span><span class="p">]</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_uti_original</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"UTI_original"</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_uti_original</span>
|
||||||
|
|
||||||
<span class="nd">@property</span>
|
<span class="nd">@property</span>
|
||||||
<span class="k">def</span> <span class="nf">uti_edited</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">uti_edited</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
@@ -715,8 +770,15 @@
|
|||||||
<span class="sd"> for example: com.canon.cr2-raw-image</span>
|
<span class="sd"> for example: com.canon.cr2-raw-image</span>
|
||||||
<span class="sd"> Returns None if no associated RAW image</span>
|
<span class="sd"> Returns None if no associated RAW image</span>
|
||||||
<span class="sd"> """</span>
|
<span class="sd"> """</span>
|
||||||
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_photos_ver</span> <span class="o"><</span> <span class="mi">7</span><span class="p">:</span>
|
||||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"UTI_raw"</span><span class="p">]</span>
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"UTI_raw"</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="n">rawpath</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">path_raw</span>
|
||||||
|
<span class="k">if</span> <span class="n">rawpath</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">get_uti_for_extension</span><span class="p">(</span><span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">rawpath</span><span class="p">)</span><span class="o">.</span><span class="n">suffix</span><span class="p">)</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="kc">None</span>
|
||||||
|
|
||||||
<span class="nd">@property</span>
|
<span class="nd">@property</span>
|
||||||
<span class="k">def</span> <span class="nf">ismovie</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">ismovie</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="sd">"""Returns True if file is a movie, otherwise False"""</span>
|
<span class="sd">"""Returns True if file is a movie, otherwise False"""</span>
|
||||||
@@ -854,8 +916,12 @@
|
|||||||
<span class="nd">@property</span>
|
<span class="nd">@property</span>
|
||||||
<span class="k">def</span> <span class="nf">path_derivatives</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">path_derivatives</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="sd">"""Return any derivative (preview) images associated with the photo as a list of paths, sorted by file size (largest first)"""</span>
|
<span class="sd">"""Return any derivative (preview) images associated with the photo as a list of paths, sorted by file size (largest first)"""</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_path_derivatives</span>
|
||||||
|
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
||||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_db_version</span> <span class="o"><=</span> <span class="n">_PHOTOS_4_VERSION</span><span class="p">:</span>
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_db_version</span> <span class="o"><=</span> <span class="n">_PHOTOS_4_VERSION</span><span class="p">:</span>
|
||||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_path_derivatives_4</span><span class="p">()</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_path_derivatives</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_path_derivatives_4</span><span class="p">()</span>
|
||||||
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_path_derivatives</span>
|
||||||
|
|
||||||
<span class="n">directory</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># first char of uuid</span>
|
<span class="n">directory</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_uuid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># first char of uuid</span>
|
||||||
<span class="n">derivative_path</span> <span class="o">=</span> <span class="p">(</span>
|
<span class="n">derivative_path</span> <span class="o">=</span> <span class="p">(</span>
|
||||||
@@ -867,11 +933,22 @@
|
|||||||
<span class="n">files</span> <span class="o">=</span> <span class="n">derivative_path</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="si">}</span><span class="s2">*.*"</span><span class="p">)</span>
|
<span class="n">files</span> <span class="o">=</span> <span class="n">derivative_path</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="si">}</span><span class="s2">*.*"</span><span class="p">)</span>
|
||||||
<span class="n">files</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">files</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">f</span><span class="p">:</span> <span class="n">f</span><span class="o">.</span><span class="n">stat</span><span class="p">()</span><span class="o">.</span><span class="n">st_size</span><span class="p">)</span>
|
<span class="n">files</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">files</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">f</span><span class="p">:</span> <span class="n">f</span><span class="o">.</span><span class="n">stat</span><span class="p">()</span><span class="o">.</span><span class="n">st_size</span><span class="p">)</span>
|
||||||
<span class="c1"># return list of filename but skip .THM files (these are actually low-res thumbnails in JPEG format but with .THM extension)</span>
|
<span class="c1"># return list of filename but skip .THM files (these are actually low-res thumbnails in JPEG format but with .THM extension)</span>
|
||||||
<span class="k">return</span> <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> <span class="k">for</span> <span class="n">filename</span> <span class="ow">in</span> <span class="n">files</span> <span class="k">if</span> <span class="n">filename</span><span class="o">.</span><span class="n">suffix</span> <span class="o">!=</span> <span class="s2">".THM"</span><span class="p">]</span>
|
<span class="n">derivatives</span> <span class="o">=</span> <span class="p">[</span>
|
||||||
|
<span class="nb">str</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> <span class="k">for</span> <span class="n">filename</span> <span class="ow">in</span> <span class="n">files</span> <span class="k">if</span> <span class="n">filename</span><span class="o">.</span><span class="n">suffix</span> <span class="o">!=</span> <span class="s2">".THM"</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="k">if</span> <span class="p">(</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">isphoto</span>
|
||||||
|
<span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">derivatives</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span>
|
||||||
|
<span class="ow">and</span> <span class="n">derivatives</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">".mov"</span><span class="p">)</span>
|
||||||
|
<span class="p">):</span>
|
||||||
|
<span class="n">derivatives</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">derivatives</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">derivatives</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">derivatives</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_path_derivatives</span> <span class="o">=</span> <span class="n">derivatives</span>
|
||||||
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_path_derivatives</span>
|
||||||
|
|
||||||
<span class="k">def</span> <span class="nf">_path_derivatives_4</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">_path_derivatives_4</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="sd">"""Return paths to all derivative (preview) files for Photos <= 4"""</span>
|
<span class="sd">"""Return paths to all derivative (preview) files for Photos <= 4"""</span>
|
||||||
<span class="n">modelid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"masterModelID"</span><span class="p">]</span>
|
<span class="n">modelid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"modelID"</span><span class="p">]</span>
|
||||||
<span class="k">if</span> <span class="n">modelid</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">modelid</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||||
<span class="k">return</span> <span class="p">[]</span>
|
<span class="k">return</span> <span class="p">[]</span>
|
||||||
<span class="n">folder_id</span><span class="p">,</span> <span class="n">file_id</span> <span class="o">=</span> <span class="n">_get_resource_loc</span><span class="p">(</span><span class="n">modelid</span><span class="p">)</span>
|
<span class="n">folder_id</span><span class="p">,</span> <span class="n">file_id</span> <span class="o">=</span> <span class="n">_get_resource_loc</span><span class="p">(</span><span class="n">modelid</span><span class="p">)</span>
|
||||||
@@ -1031,49 +1108,36 @@
|
|||||||
<span class="sd">"""returns filesize of original photo in bytes as int"""</span>
|
<span class="sd">"""returns filesize of original photo in bytes as int"""</span>
|
||||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"original_filesize"</span><span class="p">]</span>
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_info</span><span class="p">[</span><span class="s2">"original_filesize"</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="nd">@property</span>
|
||||||
|
<span class="k">def</span> <span class="nf">duplicates</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""return list of PhotoInfo objects for possible duplicates (matching signature of original size, date, height, width) or empty list if no matching duplicates"""</span>
|
||||||
|
<span class="n">signature</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_duplicate_signature</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="n">duplicates</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="k">for</span> <span class="n">uuid</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_db_signatures</span><span class="p">[</span><span class="n">signature</span><span class="p">]:</span>
|
||||||
|
<span class="k">if</span> <span class="n">uuid</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">:</span>
|
||||||
|
<span class="c1"># found a possible duplicate</span>
|
||||||
|
<span class="n">duplicates</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">get_photo</span><span class="p">(</span><span class="n">uuid</span><span class="p">))</span>
|
||||||
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
||||||
|
<span class="c1"># don't expect this to happen as the signature should be in db</span>
|
||||||
|
<span class="n">logging</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Did not find signature for </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="si">}</span><span class="s2"> in _db_signatures"</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">duplicates</span>
|
||||||
|
|
||||||
<div class="viewcode-block" id="PhotoInfo.render_template"><a class="viewcode-back" href="../../../reference.html#osxphotos.PhotoInfo.render_template">[docs]</a> <span class="k">def</span> <span class="nf">render_template</span><span class="p">(</span>
|
<div class="viewcode-block" id="PhotoInfo.render_template"><a class="viewcode-back" href="../../../reference.html#osxphotos.PhotoInfo.render_template">[docs]</a> <span class="k">def</span> <span class="nf">render_template</span><span class="p">(</span>
|
||||||
<span class="bp">self</span><span class="p">,</span>
|
<span class="bp">self</span><span class="p">,</span> <span class="n">template_str</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">options</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">RenderOptions</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
<span class="n">template_str</span><span class="p">,</span>
|
|
||||||
<span class="n">none_str</span><span class="o">=</span><span class="s2">"_"</span><span class="p">,</span>
|
|
||||||
<span class="n">path_sep</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
||||||
<span class="n">expand_inplace</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
|
||||||
<span class="n">inplace_sep</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
||||||
<span class="n">filename</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
|
||||||
<span class="n">dirname</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
|
||||||
<span class="n">strip</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
|
||||||
<span class="n">edited</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
|
||||||
<span class="p">):</span>
|
<span class="p">):</span>
|
||||||
<span class="sd">"""Renders a template string for PhotoInfo instance using PhotoTemplate</span>
|
<span class="sd">"""Renders a template string for PhotoInfo instance using PhotoTemplate</span>
|
||||||
|
|
||||||
<span class="sd"> Args:</span>
|
<span class="sd"> Args:</span>
|
||||||
<span class="sd"> template_str: a template string with fields to render</span>
|
<span class="sd"> template_str: a template string with fields to render</span>
|
||||||
<span class="sd"> none_str: a str to use if template field renders to None, default is "_".</span>
|
<span class="sd"> options: a RenderOptions instance</span>
|
||||||
<span class="sd"> path_sep: a single character str to use as path separator when joining</span>
|
|
||||||
<span class="sd"> fields like folder_album; if not provided, defaults to os.path.sep</span>
|
|
||||||
<span class="sd"> expand_inplace: expand multi-valued substitutions in-place as a single string</span>
|
|
||||||
<span class="sd"> instead of returning individual strings</span>
|
|
||||||
<span class="sd"> inplace_sep: optional string to use as separator between multi-valued keywords</span>
|
|
||||||
<span class="sd"> with expand_inplace; default is ','</span>
|
|
||||||
<span class="sd"> filename: if True, template output will be sanitized to produce valid file name</span>
|
|
||||||
<span class="sd"> dirname: if True, template output will be sanitized to produce valid directory name</span>
|
|
||||||
<span class="sd"> strip: if True, strips leading/trailing white space from resulting template</span>
|
|
||||||
<span class="sd"> edited: if True, sets {edited_version} field to True, otherwise it gets set to False; set if you want template evaluated for edited version</span>
|
|
||||||
|
|
||||||
<span class="sd"> Returns:</span>
|
<span class="sd"> Returns:</span>
|
||||||
<span class="sd"> ([rendered_strings], [unmatched]): tuple of list of rendered strings and list of unmatched template values</span>
|
<span class="sd"> ([rendered_strings], [unmatched]): tuple of list of rendered strings and list of unmatched template values</span>
|
||||||
<span class="sd"> """</span>
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">options</span> <span class="o">=</span> <span class="n">options</span> <span class="ow">or</span> <span class="n">RenderOptions</span><span class="p">()</span>
|
||||||
<span class="n">template</span> <span class="o">=</span> <span class="n">PhotoTemplate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exiftool_path</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_exiftool_path</span><span class="p">)</span>
|
<span class="n">template</span> <span class="o">=</span> <span class="n">PhotoTemplate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exiftool_path</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_db</span><span class="o">.</span><span class="n">_exiftool_path</span><span class="p">)</span>
|
||||||
<span class="k">return</span> <span class="n">template</span><span class="o">.</span><span class="n">render</span><span class="p">(</span>
|
<span class="k">return</span> <span class="n">template</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">template_str</span><span class="p">,</span> <span class="n">options</span><span class="p">)</span></div>
|
||||||
<span class="n">template_str</span><span class="p">,</span>
|
|
||||||
<span class="n">none_str</span><span class="o">=</span><span class="n">none_str</span><span class="p">,</span>
|
|
||||||
<span class="n">path_sep</span><span class="o">=</span><span class="n">path_sep</span><span class="p">,</span>
|
|
||||||
<span class="n">expand_inplace</span><span class="o">=</span><span class="n">expand_inplace</span><span class="p">,</span>
|
|
||||||
<span class="n">inplace_sep</span><span class="o">=</span><span class="n">inplace_sep</span><span class="p">,</span>
|
|
||||||
<span class="n">filename</span><span class="o">=</span><span class="n">filename</span><span class="p">,</span>
|
|
||||||
<span class="n">dirname</span><span class="o">=</span><span class="n">dirname</span><span class="p">,</span>
|
|
||||||
<span class="n">strip</span><span class="o">=</span><span class="n">strip</span><span class="p">,</span>
|
|
||||||
<span class="n">edited_version</span><span class="o">=</span><span class="n">edited</span><span class="p">,</span>
|
|
||||||
<span class="p">)</span></div>
|
|
||||||
|
|
||||||
<span class="nd">@property</span>
|
<span class="nd">@property</span>
|
||||||
<span class="k">def</span> <span class="nf">_longitude</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">_longitude</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
@@ -1281,7 +1345,21 @@
|
|||||||
|
|
||||||
<span class="k">def</span> <span class="fm">__ne__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
|
<span class="k">def</span> <span class="fm">__ne__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
|
||||||
<span class="sd">"""Compare two PhotoInfo objects for inequality"""</span>
|
<span class="sd">"""Compare two PhotoInfo objects for inequality"""</span>
|
||||||
<span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="fm">__eq__</span><span class="p">(</span><span class="n">other</span><span class="p">)</span></div>
|
<span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="fm">__eq__</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="fm">__hash__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Make PhotoInfo hashable"""</span>
|
||||||
|
<span class="k">return</span> <span class="nb">hash</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
|
||||||
|
<span class="k">class</span> <span class="nc">PhotoInfoNone</span><span class="p">:</span>
|
||||||
|
<span class="sd">"""mock class that returns None for all attributes"""</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
|
<span class="k">pass</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="fm">__getattribute__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||||
|
<span class="k">return</span> <span class="kc">None</span>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -1340,7 +1418,7 @@
|
|||||||
©2021, Rhet Turnbull.
|
©2021, Rhet Turnbull.
|
||||||
|
|
||||||
|
|
|
|
||||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.2</a>
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
|
||||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -5,10 +5,10 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>osxphotos.photosdb.photosdb — osxphotos 0.42.19 documentation</title>
|
<title>osxphotos.photosdb.photosdb — osxphotos 0.42.66 documentation</title>
|
||||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css" />
|
||||||
<link rel="stylesheet" href="../../../_static/alabaster.css" type="text/css" />
|
<link rel="stylesheet" type="text/css" href="../../../_static/alabaster.css" />
|
||||||
<script id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
<script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
|
||||||
<script src="../../../_static/jquery.js"></script>
|
<script src="../../../_static/jquery.js"></script>
|
||||||
<script src="../../../_static/underscore.js"></script>
|
<script src="../../../_static/underscore.js"></script>
|
||||||
<script src="../../../_static/doctools.js"></script>
|
<script src="../../../_static/doctools.js"></script>
|
||||||
@@ -44,11 +44,13 @@
|
|||||||
<span class="kn">import</span> <span class="nn">re</span>
|
<span class="kn">import</span> <span class="nn">re</span>
|
||||||
<span class="kn">import</span> <span class="nn">sys</span>
|
<span class="kn">import</span> <span class="nn">sys</span>
|
||||||
<span class="kn">import</span> <span class="nn">tempfile</span>
|
<span class="kn">import</span> <span class="nn">tempfile</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">OrderedDict</span>
|
||||||
<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span><span class="p">,</span> <span class="n">timezone</span>
|
<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span><span class="p">,</span> <span class="n">timezone</span>
|
||||||
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pformat</span>
|
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pformat</span>
|
||||||
<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">List</span>
|
<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">List</span>
|
||||||
|
|
||||||
<span class="kn">import</span> <span class="nn">bitmath</span>
|
<span class="kn">import</span> <span class="nn">bitmath</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">photoscript</span>
|
||||||
|
|
||||||
<span class="kn">from</span> <span class="nn">.._constants</span> <span class="kn">import</span> <span class="p">(</span>
|
<span class="kn">from</span> <span class="nn">.._constants</span> <span class="kn">import</span> <span class="p">(</span>
|
||||||
<span class="n">_DB_TABLE_NAMES</span><span class="p">,</span>
|
<span class="n">_DB_TABLE_NAMES</span><span class="p">,</span>
|
||||||
@@ -76,6 +78,7 @@
|
|||||||
<span class="kn">from</span> <span class="nn">..fileutil</span> <span class="kn">import</span> <span class="n">FileUtil</span>
|
<span class="kn">from</span> <span class="nn">..fileutil</span> <span class="kn">import</span> <span class="n">FileUtil</span>
|
||||||
<span class="kn">from</span> <span class="nn">..personinfo</span> <span class="kn">import</span> <span class="n">PersonInfo</span>
|
<span class="kn">from</span> <span class="nn">..personinfo</span> <span class="kn">import</span> <span class="n">PersonInfo</span>
|
||||||
<span class="kn">from</span> <span class="nn">..photoinfo</span> <span class="kn">import</span> <span class="n">PhotoInfo</span>
|
<span class="kn">from</span> <span class="nn">..photoinfo</span> <span class="kn">import</span> <span class="n">PhotoInfo</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">..phototemplate</span> <span class="kn">import</span> <span class="n">RenderOptions</span>
|
||||||
<span class="kn">from</span> <span class="nn">..queryoptions</span> <span class="kn">import</span> <span class="n">QueryOptions</span>
|
<span class="kn">from</span> <span class="nn">..queryoptions</span> <span class="kn">import</span> <span class="n">QueryOptions</span>
|
||||||
<span class="kn">from</span> <span class="nn">..utils</span> <span class="kn">import</span> <span class="p">(</span>
|
<span class="kn">from</span> <span class="nn">..utils</span> <span class="kn">import</span> <span class="p">(</span>
|
||||||
<span class="n">_check_file_exists</span><span class="p">,</span>
|
<span class="n">_check_file_exists</span><span class="p">,</span>
|
||||||
@@ -98,17 +101,17 @@
|
|||||||
<span class="sd">"""Processes a Photos.app library database to extract information about photos"""</span>
|
<span class="sd">"""Processes a Photos.app library database to extract information about photos"""</span>
|
||||||
|
|
||||||
<span class="c1"># import additional methods</span>
|
<span class="c1"># import additional methods</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">._photosdb_process_comments</span> <span class="kn">import</span> <span class="n">_process_comments</span>
|
||||||
<span class="kn">from</span> <span class="nn">._photosdb_process_exif</span> <span class="kn">import</span> <span class="n">_process_exifinfo</span>
|
<span class="kn">from</span> <span class="nn">._photosdb_process_exif</span> <span class="kn">import</span> <span class="n">_process_exifinfo</span>
|
||||||
<span class="kn">from</span> <span class="nn">._photosdb_process_faceinfo</span> <span class="kn">import</span> <span class="n">_process_faceinfo</span>
|
<span class="kn">from</span> <span class="nn">._photosdb_process_faceinfo</span> <span class="kn">import</span> <span class="n">_process_faceinfo</span>
|
||||||
|
<span class="kn">from</span> <span class="nn">._photosdb_process_scoreinfo</span> <span class="kn">import</span> <span class="n">_process_scoreinfo</span>
|
||||||
<span class="kn">from</span> <span class="nn">._photosdb_process_searchinfo</span> <span class="kn">import</span> <span class="p">(</span>
|
<span class="kn">from</span> <span class="nn">._photosdb_process_searchinfo</span> <span class="kn">import</span> <span class="p">(</span>
|
||||||
<span class="n">_process_searchinfo</span><span class="p">,</span>
|
<span class="n">_process_searchinfo</span><span class="p">,</span>
|
||||||
<span class="n">labels</span><span class="p">,</span>
|
<span class="n">labels</span><span class="p">,</span>
|
||||||
<span class="n">labels_normalized</span><span class="p">,</span>
|
|
||||||
<span class="n">labels_as_dict</span><span class="p">,</span>
|
<span class="n">labels_as_dict</span><span class="p">,</span>
|
||||||
|
<span class="n">labels_normalized</span><span class="p">,</span>
|
||||||
<span class="n">labels_normalized_as_dict</span><span class="p">,</span>
|
<span class="n">labels_normalized_as_dict</span><span class="p">,</span>
|
||||||
<span class="p">)</span>
|
<span class="p">)</span>
|
||||||
<span class="kn">from</span> <span class="nn">._photosdb_process_scoreinfo</span> <span class="kn">import</span> <span class="n">_process_scoreinfo</span>
|
|
||||||
<span class="kn">from</span> <span class="nn">._photosdb_process_comments</span> <span class="kn">import</span> <span class="n">_process_comments</span>
|
|
||||||
|
|
||||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dbfile</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">exiftool</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dbfile</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">exiftool</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||||
<span class="sd">"""Create a new PhotosDB object.</span>
|
<span class="sd">"""Create a new PhotosDB object.</span>
|
||||||
@@ -117,7 +120,7 @@
|
|||||||
<span class="sd"> dbfile: specify full path to photos library or photos.db; if None, will attempt to locate last library opened by Photos.</span>
|
<span class="sd"> dbfile: specify full path to photos library or photos.db; if None, will attempt to locate last library opened by Photos.</span>
|
||||||
<span class="sd"> verbose: optional callable function to use for printing verbose text during processing; if None (default), does not print output.</span>
|
<span class="sd"> verbose: optional callable function to use for printing verbose text during processing; if None (default), does not print output.</span>
|
||||||
<span class="sd"> exiftool: optional path to exiftool for methods that require this (e.g. PhotoInfo.exiftool); if not provided, will search PATH</span>
|
<span class="sd"> exiftool: optional path to exiftool for methods that require this (e.g. PhotoInfo.exiftool); if not provided, will search PATH</span>
|
||||||
<span class="sd"> </span>
|
|
||||||
<span class="sd"> Raises:</span>
|
<span class="sd"> Raises:</span>
|
||||||
<span class="sd"> FileNotFoundError if dbfile is not a valid Photos library.</span>
|
<span class="sd"> FileNotFoundError if dbfile is not a valid Photos library.</span>
|
||||||
<span class="sd"> TypeError if verbose is not None and not callable.</span>
|
<span class="sd"> TypeError if verbose is not None and not callable.</span>
|
||||||
@@ -273,6 +276,13 @@
|
|||||||
<span class="c1"># Will hold the primary key of root folder</span>
|
<span class="c1"># Will hold the primary key of root folder</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_folder_root_pk</span> <span class="o">=</span> <span class="kc">None</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_folder_root_pk</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
|
|
||||||
|
<span class="c1"># Dict to hold signatures for finding possible duplicates</span>
|
||||||
|
<span class="c1"># key is tuple of (original_filesize, date) and value is list of uuids that match that signature</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_db_signatures</span> <span class="o">=</span> <span class="p">{}</span>
|
||||||
|
|
||||||
|
<span class="c1"># Dict to hold information on volume names (Photos 5+)</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_db_filesystem_volumes</span> <span class="o">=</span> <span class="p">{}</span>
|
||||||
|
|
||||||
<span class="k">if</span> <span class="n">_debug</span><span class="p">():</span>
|
<span class="k">if</span> <span class="n">_debug</span><span class="p">():</span>
|
||||||
<span class="n">logging</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">"dbfile = </span><span class="si">{</span><span class="n">dbfile</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
<span class="n">logging</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">"dbfile = </span><span class="si">{</span><span class="n">dbfile</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||||
|
|
||||||
@@ -627,6 +637,8 @@
|
|||||||
<span class="n">verbose</span><span class="p">(</span><span class="s2">"Processing database."</span><span class="p">)</span>
|
<span class="n">verbose</span><span class="p">(</span><span class="s2">"Processing database."</span><span class="p">)</span>
|
||||||
<span class="n">verbose</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Database version: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_db_version</span><span class="si">}</span><span class="s2">."</span><span class="p">)</span>
|
<span class="n">verbose</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Database version: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_db_version</span><span class="si">}</span><span class="s2">."</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_photos_ver</span> <span class="o">=</span> <span class="mi">4</span> <span class="c1"># only used in Photos 5+</span>
|
||||||
|
|
||||||
<span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> <span class="o">=</span> <span class="n">_open_sql_file</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_tmp_db</span><span class="p">)</span>
|
<span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> <span class="o">=</span> <span class="n">_open_sql_file</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_tmp_db</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="c1"># get info to associate persons with photos</span>
|
<span class="c1"># get info to associate persons with photos</span>
|
||||||
@@ -811,6 +823,8 @@
|
|||||||
<span class="s2">"creation_date"</span><span class="p">:</span> <span class="n">album</span><span class="p">[</span><span class="mi">8</span><span class="p">],</span>
|
<span class="s2">"creation_date"</span><span class="p">:</span> <span class="n">album</span><span class="p">[</span><span class="mi">8</span><span class="p">],</span>
|
||||||
<span class="s2">"start_date"</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> <span class="c1"># Photos 5 only</span>
|
<span class="s2">"start_date"</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> <span class="c1"># Photos 5 only</span>
|
||||||
<span class="s2">"end_date"</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> <span class="c1"># Photos 5 only</span>
|
<span class="s2">"end_date"</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> <span class="c1"># Photos 5 only</span>
|
||||||
|
<span class="s2">"customsortascending"</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> <span class="c1"># Photos 5 only</span>
|
||||||
|
<span class="s2">"customsortkey"</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> <span class="c1"># Photos 5 only</span>
|
||||||
<span class="p">}</span>
|
<span class="p">}</span>
|
||||||
|
|
||||||
<span class="c1"># get details about folders</span>
|
<span class="c1"># get details about folders</span>
|
||||||
@@ -1123,6 +1137,7 @@
|
|||||||
<span class="c1"># get info on special types</span>
|
<span class="c1"># get info on special types</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"specialType"</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="mi">25</span><span class="p">]</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"specialType"</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="mi">25</span><span class="p">]</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"masterModelID"</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="mi">26</span><span class="p">]</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"masterModelID"</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="mi">26</span><span class="p">]</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"pk"</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="mi">26</span><span class="p">]</span> <span class="c1"># same as masterModelID, to match Photos 5</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"panorama"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="k">if</span> <span class="n">row</span><span class="p">[</span><span class="mi">25</span><span class="p">]</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="kc">False</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"panorama"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="k">if</span> <span class="n">row</span><span class="p">[</span><span class="mi">25</span><span class="p">]</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="kc">False</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"slow_mo"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="k">if</span> <span class="n">row</span><span class="p">[</span><span class="mi">25</span><span class="p">]</span> <span class="o">==</span> <span class="mi">2</span> <span class="k">else</span> <span class="kc">False</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"slow_mo"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="k">if</span> <span class="n">row</span><span class="p">[</span><span class="mi">25</span><span class="p">]</span> <span class="o">==</span> <span class="mi">2</span> <span class="k">else</span> <span class="kc">False</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"time_lapse"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="k">if</span> <span class="n">row</span><span class="p">[</span><span class="mi">25</span><span class="p">]</span> <span class="o">==</span> <span class="mi">3</span> <span class="k">else</span> <span class="kc">False</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"time_lapse"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="k">if</span> <span class="n">row</span><span class="p">[</span><span class="mi">25</span><span class="p">]</span> <span class="o">==</span> <span class="mi">3</span> <span class="k">else</span> <span class="kc">False</span>
|
||||||
@@ -1213,6 +1228,13 @@
|
|||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"import_uuid"</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="mi">44</span><span class="p">]</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"import_uuid"</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="mi">44</span><span class="p">]</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"fok_import_session"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"fok_import_session"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
|
|
||||||
|
<span class="c1"># compute signatures for finding possible duplicates</span>
|
||||||
|
<span class="n">signature</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_duplicate_signature</span><span class="p">(</span><span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_db_signatures</span><span class="p">[</span><span class="n">signature</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_db_signatures</span><span class="p">[</span><span class="n">signature</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">uuid</span><span class="p">]</span>
|
||||||
|
|
||||||
<span class="c1"># get additional details from RKMaster, needed for RAW processing</span>
|
<span class="c1"># get additional details from RKMaster, needed for RAW processing</span>
|
||||||
<span class="n">verbose</span><span class="p">(</span><span class="s2">"Processing additional photo details."</span><span class="p">)</span>
|
<span class="n">verbose</span><span class="p">(</span><span class="s2">"Processing additional photo details."</span><span class="p">)</span>
|
||||||
<span class="n">c</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
|
<span class="n">c</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
|
||||||
@@ -1615,10 +1637,14 @@
|
|||||||
<span class="n">verbose</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Database version: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_db_version</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">photos_ver</span><span class="si">}</span><span class="s2">."</span><span class="p">)</span>
|
<span class="n">verbose</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Database version: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_db_version</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">photos_ver</span><span class="si">}</span><span class="s2">."</span><span class="p">)</span>
|
||||||
<span class="n">asset_table</span> <span class="o">=</span> <span class="n">_DB_TABLE_NAMES</span><span class="p">[</span><span class="n">photos_ver</span><span class="p">][</span><span class="s2">"ASSET"</span><span class="p">]</span>
|
<span class="n">asset_table</span> <span class="o">=</span> <span class="n">_DB_TABLE_NAMES</span><span class="p">[</span><span class="n">photos_ver</span><span class="p">][</span><span class="s2">"ASSET"</span><span class="p">]</span>
|
||||||
<span class="n">keyword_join</span> <span class="o">=</span> <span class="n">_DB_TABLE_NAMES</span><span class="p">[</span><span class="n">photos_ver</span><span class="p">][</span><span class="s2">"KEYWORD_JOIN"</span><span class="p">]</span>
|
<span class="n">keyword_join</span> <span class="o">=</span> <span class="n">_DB_TABLE_NAMES</span><span class="p">[</span><span class="n">photos_ver</span><span class="p">][</span><span class="s2">"KEYWORD_JOIN"</span><span class="p">]</span>
|
||||||
|
<span class="n">asset_album_table</span> <span class="o">=</span> <span class="n">_DB_TABLE_NAMES</span><span class="p">[</span><span class="n">photos_ver</span><span class="p">][</span><span class="s2">"ASSET_ALBUM_TABLE"</span><span class="p">]</span>
|
||||||
<span class="n">album_join</span> <span class="o">=</span> <span class="n">_DB_TABLE_NAMES</span><span class="p">[</span><span class="n">photos_ver</span><span class="p">][</span><span class="s2">"ALBUM_JOIN"</span><span class="p">]</span>
|
<span class="n">album_join</span> <span class="o">=</span> <span class="n">_DB_TABLE_NAMES</span><span class="p">[</span><span class="n">photos_ver</span><span class="p">][</span><span class="s2">"ALBUM_JOIN"</span><span class="p">]</span>
|
||||||
<span class="n">album_sort</span> <span class="o">=</span> <span class="n">_DB_TABLE_NAMES</span><span class="p">[</span><span class="n">photos_ver</span><span class="p">][</span><span class="s2">"ALBUM_SORT_ORDER"</span><span class="p">]</span>
|
<span class="n">album_sort</span> <span class="o">=</span> <span class="n">_DB_TABLE_NAMES</span><span class="p">[</span><span class="n">photos_ver</span><span class="p">][</span><span class="s2">"ALBUM_SORT_ORDER"</span><span class="p">]</span>
|
||||||
|
<span class="n">asset_album_join</span> <span class="o">=</span> <span class="n">_DB_TABLE_NAMES</span><span class="p">[</span><span class="n">photos_ver</span><span class="p">][</span><span class="s2">"ASSET_ALBUM_JOIN"</span><span class="p">]</span>
|
||||||
<span class="n">import_fok</span> <span class="o">=</span> <span class="n">_DB_TABLE_NAMES</span><span class="p">[</span><span class="n">photos_ver</span><span class="p">][</span><span class="s2">"IMPORT_FOK"</span><span class="p">]</span>
|
<span class="n">import_fok</span> <span class="o">=</span> <span class="n">_DB_TABLE_NAMES</span><span class="p">[</span><span class="n">photos_ver</span><span class="p">][</span><span class="s2">"IMPORT_FOK"</span><span class="p">]</span>
|
||||||
<span class="n">depth_state</span> <span class="o">=</span> <span class="n">_DB_TABLE_NAMES</span><span class="p">[</span><span class="n">photos_ver</span><span class="p">][</span><span class="s2">"DEPTH_STATE"</span><span class="p">]</span>
|
<span class="n">depth_state</span> <span class="o">=</span> <span class="n">_DB_TABLE_NAMES</span><span class="p">[</span><span class="n">photos_ver</span><span class="p">][</span><span class="s2">"DEPTH_STATE"</span><span class="p">]</span>
|
||||||
|
<span class="n">uti_original_column</span> <span class="o">=</span> <span class="n">_DB_TABLE_NAMES</span><span class="p">[</span><span class="n">photos_ver</span><span class="p">][</span><span class="s2">"UTI_ORIGINAL"</span><span class="p">]</span>
|
||||||
|
<span class="n">hdr_type_column</span> <span class="o">=</span> <span class="n">_DB_TABLE_NAMES</span><span class="p">[</span><span class="n">photos_ver</span><span class="p">][</span><span class="s2">"HDR_TYPE"</span><span class="p">]</span>
|
||||||
|
|
||||||
<span class="c1"># Look for all combinations of persons and pictures</span>
|
<span class="c1"># Look for all combinations of persons and pictures</span>
|
||||||
<span class="k">if</span> <span class="n">_debug</span><span class="p">():</span>
|
<span class="k">if</span> <span class="n">_debug</span><span class="p">():</span>
|
||||||
@@ -1648,7 +1674,11 @@
|
|||||||
|
|
||||||
<span class="k">for</span> <span class="n">person</span> <span class="ow">in</span> <span class="n">c</span><span class="p">:</span>
|
<span class="k">for</span> <span class="n">person</span> <span class="ow">in</span> <span class="n">c</span><span class="p">:</span>
|
||||||
<span class="n">pk</span> <span class="o">=</span> <span class="n">person</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
<span class="n">pk</span> <span class="o">=</span> <span class="n">person</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
<span class="n">fullname</span> <span class="o">=</span> <span class="n">person</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="k">if</span> <span class="n">person</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">""</span> <span class="k">else</span> <span class="n">_UNKNOWN_PERSON</span>
|
<span class="n">fullname</span> <span class="o">=</span> <span class="p">(</span>
|
||||||
|
<span class="n">person</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
|
||||||
|
<span class="k">if</span> <span class="p">(</span><span class="n">person</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">""</span> <span class="ow">and</span> <span class="n">person</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">)</span>
|
||||||
|
<span class="k">else</span> <span class="n">_UNKNOWN_PERSON</span>
|
||||||
|
<span class="p">)</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_dbpersons_pk</span><span class="p">[</span><span class="n">pk</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dbpersons_pk</span><span class="p">[</span><span class="n">pk</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
<span class="s2">"pk"</span><span class="p">:</span> <span class="n">pk</span><span class="p">,</span>
|
<span class="s2">"pk"</span><span class="p">:</span> <span class="n">pk</span><span class="p">,</span>
|
||||||
<span class="s2">"uuid"</span><span class="p">:</span> <span class="n">person</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span>
|
<span class="s2">"uuid"</span><span class="p">:</span> <span class="n">person</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span>
|
||||||
@@ -1734,8 +1764,8 @@
|
|||||||
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZUUID,</span>
|
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZUUID,</span>
|
||||||
<span class="s2"> </span><span class="si">{</span><span class="n">album_sort</span><span class="si">}</span><span class="s2"></span>
|
<span class="s2"> </span><span class="si">{</span><span class="n">album_sort</span><span class="si">}</span><span class="s2"></span>
|
||||||
<span class="s2"> FROM </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2"> </span>
|
<span class="s2"> FROM </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2"> </span>
|
||||||
<span class="s2"> JOIN Z_26ASSETS ON </span><span class="si">{</span><span class="n">album_join</span><span class="si">}</span><span class="s2"> = </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.Z_PK </span>
|
<span class="s2"> JOIN </span><span class="si">{</span><span class="n">asset_album_table</span><span class="si">}</span><span class="s2"> ON </span><span class="si">{</span><span class="n">album_join</span><span class="si">}</span><span class="s2"> = </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.Z_PK </span>
|
||||||
<span class="s2"> JOIN ZGENERICALBUM ON ZGENERICALBUM.Z_PK = Z_26ASSETS.Z_26ALBUMS</span>
|
<span class="s2"> JOIN ZGENERICALBUM ON ZGENERICALBUM.Z_PK = </span><span class="si">{</span><span class="n">asset_album_join</span><span class="si">}</span><span class="s2"></span>
|
||||||
<span class="s2"> """</span>
|
<span class="s2"> """</span>
|
||||||
<span class="p">)</span>
|
<span class="p">)</span>
|
||||||
|
|
||||||
@@ -1773,7 +1803,9 @@
|
|||||||
<span class="s2">"ZTRASHEDSTATE, "</span> <span class="c1"># 9</span>
|
<span class="s2">"ZTRASHEDSTATE, "</span> <span class="c1"># 9</span>
|
||||||
<span class="s2">"ZCREATIONDATE, "</span> <span class="c1"># 10</span>
|
<span class="s2">"ZCREATIONDATE, "</span> <span class="c1"># 10</span>
|
||||||
<span class="s2">"ZSTARTDATE, "</span> <span class="c1"># 11</span>
|
<span class="s2">"ZSTARTDATE, "</span> <span class="c1"># 11</span>
|
||||||
<span class="s2">"ZENDDATE "</span> <span class="c1"># 12</span>
|
<span class="s2">"ZENDDATE, "</span> <span class="c1"># 12</span>
|
||||||
|
<span class="s2">"ZCUSTOMSORTASCENDING, "</span> <span class="c1"># 13</span>
|
||||||
|
<span class="s2">"ZCUSTOMSORTKEY "</span> <span class="c1"># 14</span>
|
||||||
<span class="s2">"FROM ZGENERICALBUM "</span>
|
<span class="s2">"FROM ZGENERICALBUM "</span>
|
||||||
<span class="p">)</span>
|
<span class="p">)</span>
|
||||||
<span class="k">for</span> <span class="n">album</span> <span class="ow">in</span> <span class="n">c</span><span class="p">:</span>
|
<span class="k">for</span> <span class="n">album</span> <span class="ow">in</span> <span class="n">c</span><span class="p">:</span>
|
||||||
@@ -1793,6 +1825,8 @@
|
|||||||
<span class="s2">"creation_date"</span><span class="p">:</span> <span class="n">album</span><span class="p">[</span><span class="mi">10</span><span class="p">],</span>
|
<span class="s2">"creation_date"</span><span class="p">:</span> <span class="n">album</span><span class="p">[</span><span class="mi">10</span><span class="p">],</span>
|
||||||
<span class="s2">"start_date"</span><span class="p">:</span> <span class="n">album</span><span class="p">[</span><span class="mi">11</span><span class="p">],</span>
|
<span class="s2">"start_date"</span><span class="p">:</span> <span class="n">album</span><span class="p">[</span><span class="mi">11</span><span class="p">],</span>
|
||||||
<span class="s2">"end_date"</span><span class="p">:</span> <span class="n">album</span><span class="p">[</span><span class="mi">12</span><span class="p">],</span>
|
<span class="s2">"end_date"</span><span class="p">:</span> <span class="n">album</span><span class="p">[</span><span class="mi">12</span><span class="p">],</span>
|
||||||
|
<span class="s2">"customsortascending"</span><span class="p">:</span> <span class="n">album</span><span class="p">[</span><span class="mi">13</span><span class="p">],</span>
|
||||||
|
<span class="s2">"customsortkey"</span><span class="p">:</span> <span class="n">album</span><span class="p">[</span><span class="mi">14</span><span class="p">],</span>
|
||||||
<span class="p">}</span>
|
<span class="p">}</span>
|
||||||
|
|
||||||
<span class="c1"># add cross-reference by pk to uuid</span>
|
<span class="c1"># add cross-reference by pk to uuid</span>
|
||||||
@@ -1902,7 +1936,7 @@
|
|||||||
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZAVALANCHEUUID,</span>
|
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZAVALANCHEUUID,</span>
|
||||||
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZAVALANCHEPICKTYPE,</span>
|
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZAVALANCHEPICKTYPE,</span>
|
||||||
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZKINDSUBTYPE,</span>
|
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZKINDSUBTYPE,</span>
|
||||||
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZCUSTOMRENDEREDVALUE,</span>
|
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">hdr_type_column</span><span class="si">}</span><span class="s2">,</span>
|
||||||
<span class="s2"> ZADDITIONALASSETATTRIBUTES.ZCAMERACAPTUREDEVICE,</span>
|
<span class="s2"> ZADDITIONALASSETATTRIBUTES.ZCAMERACAPTUREDEVICE,</span>
|
||||||
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZCLOUDASSETGUID,</span>
|
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZCLOUDASSETGUID,</span>
|
||||||
<span class="s2"> ZADDITIONALASSETATTRIBUTES.ZREVERSELOCATIONDATA,</span>
|
<span class="s2"> ZADDITIONALASSETATTRIBUTES.ZREVERSELOCATIONDATA,</span>
|
||||||
@@ -1921,7 +1955,8 @@
|
|||||||
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZVISIBILITYSTATE,</span>
|
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZVISIBILITYSTATE,</span>
|
||||||
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZTRASHEDDATE,</span>
|
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZTRASHEDDATE,</span>
|
||||||
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZSAVEDASSETTYPE,</span>
|
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZSAVEDASSETTYPE,</span>
|
||||||
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZADDEDDATE</span>
|
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZADDEDDATE,</span>
|
||||||
|
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.Z_PK</span>
|
||||||
<span class="s2"> FROM </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2"> </span>
|
<span class="s2"> FROM </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2"> </span>
|
||||||
<span class="s2"> JOIN ZADDITIONALASSETATTRIBUTES ON ZADDITIONALASSETATTRIBUTES.ZASSET = </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.Z_PK </span>
|
<span class="s2"> JOIN ZADDITIONALASSETATTRIBUTES ON ZADDITIONALASSETATTRIBUTES.ZASSET = </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.Z_PK </span>
|
||||||
<span class="s2"> ORDER BY </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZUUID """</span>
|
<span class="s2"> ORDER BY </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZUUID """</span>
|
||||||
@@ -1970,6 +2005,7 @@
|
|||||||
<span class="c1"># 39 ZGENERICASSET.ZTRASHEDDATE -- date item placed in the trash or null if not in trash</span>
|
<span class="c1"># 39 ZGENERICASSET.ZTRASHEDDATE -- date item placed in the trash or null if not in trash</span>
|
||||||
<span class="c1"># 40 ZGENERICASSET.ZSAVEDASSETTYPE -- how item imported</span>
|
<span class="c1"># 40 ZGENERICASSET.ZSAVEDASSETTYPE -- how item imported</span>
|
||||||
<span class="c1"># 41 ZGENERICASSET.ZADDEDDATE -- date item added to the library</span>
|
<span class="c1"># 41 ZGENERICASSET.ZADDEDDATE -- date item added to the library</span>
|
||||||
|
<span class="c1"># 42 ZGENERICASSET.Z_PK -- primary key</span>
|
||||||
|
|
||||||
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">c</span><span class="p">:</span>
|
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">c</span><span class="p">:</span>
|
||||||
<span class="n">uuid</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
<span class="n">uuid</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
@@ -2154,6 +2190,8 @@
|
|||||||
<span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span>
|
<span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span>
|
||||||
<span class="n">info</span><span class="p">[</span><span class="s2">"added_date"</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="p">(</span><span class="mi">1970</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
<span class="n">info</span><span class="p">[</span><span class="s2">"added_date"</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="p">(</span><span class="mi">1970</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">info</span><span class="p">[</span><span class="s2">"pk"</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="mi">42</span><span class="p">]</span>
|
||||||
|
|
||||||
<span class="c1"># initialize import session info which will be filled in later</span>
|
<span class="c1"># initialize import session info which will be filled in later</span>
|
||||||
<span class="c1"># not every photo has an import session so initialize all records now</span>
|
<span class="c1"># not every photo has an import session so initialize all records now</span>
|
||||||
<span class="n">info</span><span class="p">[</span><span class="s2">"import_session"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
|
<span class="n">info</span><span class="p">[</span><span class="s2">"import_session"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
|
||||||
@@ -2174,6 +2212,13 @@
|
|||||||
|
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">]</span> <span class="o">=</span> <span class="n">info</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">]</span> <span class="o">=</span> <span class="n">info</span>
|
||||||
|
|
||||||
|
<span class="c1"># compute signatures for finding possible duplicates</span>
|
||||||
|
<span class="n">signature</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_duplicate_signature</span><span class="p">(</span><span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_db_signatures</span><span class="p">[</span><span class="n">signature</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">uuid</span><span class="p">)</span>
|
||||||
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_db_signatures</span><span class="p">[</span><span class="n">signature</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">uuid</span><span class="p">]</span>
|
||||||
|
|
||||||
<span class="c1"># # if row[19] is not None and ((row[20] == 2) or (row[20] == 4)):</span>
|
<span class="c1"># # if row[19] is not None and ((row[20] == 2) or (row[20] == 4)):</span>
|
||||||
<span class="c1"># # burst photo</span>
|
<span class="c1"># # burst photo</span>
|
||||||
<span class="c1"># if row[19] is not None:</span>
|
<span class="c1"># if row[19] is not None:</span>
|
||||||
@@ -2259,20 +2304,33 @@
|
|||||||
|
|
||||||
<span class="c1"># Get info on remote/local availability for photos in shared albums</span>
|
<span class="c1"># Get info on remote/local availability for photos in shared albums</span>
|
||||||
<span class="c1"># Also get UTI of original image (zdatastoresubtype = 1)</span>
|
<span class="c1"># Also get UTI of original image (zdatastoresubtype = 1)</span>
|
||||||
<span class="n">c</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_photos_ver</span> <span class="o">>=</span> <span class="mi">7</span><span class="p">:</span>
|
||||||
<span class="sa">f</span><span class="s2">""" SELECT </span>
|
<span class="n">sql_missing</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">""" SELECT </span>
|
||||||
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZUUID, </span>
|
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZUUID, </span>
|
||||||
<span class="s2"> ZINTERNALRESOURCE.ZLOCALAVAILABILITY, </span>
|
<span class="s2"> ZINTERNALRESOURCE.ZLOCALAVAILABILITY, </span>
|
||||||
<span class="s2"> ZINTERNALRESOURCE.ZREMOTEAVAILABILITY,</span>
|
<span class="s2"> ZINTERNALRESOURCE.ZREMOTEAVAILABILITY,</span>
|
||||||
<span class="s2"> ZINTERNALRESOURCE.ZDATASTORESUBTYPE,</span>
|
<span class="s2"> ZINTERNALRESOURCE.ZDATASTORESUBTYPE,</span>
|
||||||
<span class="s2"> ZINTERNALRESOURCE.ZUNIFORMTYPEIDENTIFIER,</span>
|
<span class="s2"> </span><span class="si">{</span><span class="n">uti_original_column</span><span class="si">}</span><span class="s2">,</span>
|
||||||
|
<span class="s2"> null </span>
|
||||||
|
<span class="s2"> FROM </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2"></span>
|
||||||
|
<span class="s2"> JOIN ZADDITIONALASSETATTRIBUTES ON ZADDITIONALASSETATTRIBUTES.ZASSET = </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.Z_PK </span>
|
||||||
|
<span class="s2"> JOIN ZINTERNALRESOURCE ON ZINTERNALRESOURCE.ZASSET = ZADDITIONALASSETATTRIBUTES.ZASSET </span>
|
||||||
|
<span class="s2"> WHERE ZDATASTORESUBTYPE = 1 OR ZDATASTORESUBTYPE = 3 """</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">sql_missing</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">""" SELECT </span>
|
||||||
|
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZUUID, </span>
|
||||||
|
<span class="s2"> ZINTERNALRESOURCE.ZLOCALAVAILABILITY, </span>
|
||||||
|
<span class="s2"> ZINTERNALRESOURCE.ZREMOTEAVAILABILITY,</span>
|
||||||
|
<span class="s2"> ZINTERNALRESOURCE.ZDATASTORESUBTYPE,</span>
|
||||||
|
<span class="s2"> </span><span class="si">{</span><span class="n">uti_original_column</span><span class="si">}</span><span class="s2">,</span>
|
||||||
<span class="s2"> ZUNIFORMTYPEIDENTIFIER.ZIDENTIFIER</span>
|
<span class="s2"> ZUNIFORMTYPEIDENTIFIER.ZIDENTIFIER</span>
|
||||||
<span class="s2"> FROM </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2"></span>
|
<span class="s2"> FROM </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2"></span>
|
||||||
<span class="s2"> JOIN ZADDITIONALASSETATTRIBUTES ON ZADDITIONALASSETATTRIBUTES.ZASSET = </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.Z_PK </span>
|
<span class="s2"> JOIN ZADDITIONALASSETATTRIBUTES ON ZADDITIONALASSETATTRIBUTES.ZASSET = </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.Z_PK </span>
|
||||||
<span class="s2"> JOIN ZINTERNALRESOURCE ON ZINTERNALRESOURCE.ZASSET = ZADDITIONALASSETATTRIBUTES.ZASSET </span>
|
<span class="s2"> JOIN ZINTERNALRESOURCE ON ZINTERNALRESOURCE.ZASSET = ZADDITIONALASSETATTRIBUTES.ZASSET </span>
|
||||||
<span class="s2"> JOIN ZUNIFORMTYPEIDENTIFIER ON ZUNIFORMTYPEIDENTIFIER.Z_PK = ZINTERNALRESOURCE.ZUNIFORMTYPEIDENTIFIER </span>
|
<span class="s2"> JOIN ZUNIFORMTYPEIDENTIFIER ON ZUNIFORMTYPEIDENTIFIER.Z_PK = ZINTERNALRESOURCE.ZUNIFORMTYPEIDENTIFIER </span>
|
||||||
<span class="s2"> WHERE ZDATASTORESUBTYPE = 1 OR ZDATASTORESUBTYPE = 3 """</span>
|
<span class="s2"> WHERE ZDATASTORESUBTYPE = 1 OR ZDATASTORESUBTYPE = 3 """</span>
|
||||||
<span class="p">)</span>
|
|
||||||
|
<span class="n">c</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">sql_missing</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="c1"># Order of results:</span>
|
<span class="c1"># Order of results:</span>
|
||||||
<span class="c1"># 0 {asset_table}.ZUUID,</span>
|
<span class="c1"># 0 {asset_table}.ZUUID,</span>
|
||||||
@@ -2332,20 +2390,36 @@
|
|||||||
|
|
||||||
<span class="c1"># get information about associted RAW images</span>
|
<span class="c1"># get information about associted RAW images</span>
|
||||||
<span class="c1"># RAW images have ZDATASTORESUBTYPE = 17</span>
|
<span class="c1"># RAW images have ZDATASTORESUBTYPE = 17</span>
|
||||||
<span class="n">c</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_photos_ver</span> <span class="o">>=</span> <span class="mi">7</span><span class="p">:</span>
|
||||||
<span class="sa">f</span><span class="s2">""" SELECT</span>
|
<span class="n">sql_raw</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">""" SELECT</span>
|
||||||
|
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZUUID,</span>
|
||||||
|
<span class="s2"> ZINTERNALRESOURCE.ZDATALENGTH, </span>
|
||||||
|
<span class="s2"> null,</span>
|
||||||
|
<span class="s2"> ZINTERNALRESOURCE.ZDATASTORESUBTYPE,</span>
|
||||||
|
<span class="s2"> ZINTERNALRESOURCE.ZRESOURCETYPE,</span>
|
||||||
|
<span class="s2"> ZINTERNALRESOURCE.ZFILESYSTEMBOOKMARK</span>
|
||||||
|
<span class="s2"> FROM </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2"></span>
|
||||||
|
<span class="s2"> JOIN ZINTERNALRESOURCE ON ZINTERNALRESOURCE.ZASSET = ZADDITIONALASSETATTRIBUTES.ZASSET</span>
|
||||||
|
<span class="s2"> JOIN ZADDITIONALASSETATTRIBUTES ON ZADDITIONALASSETATTRIBUTES.ZASSET = </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.Z_PK </span>
|
||||||
|
<span class="s2"> WHERE ZINTERNALRESOURCE.ZDATASTORESUBTYPE = 17</span>
|
||||||
|
<span class="s2"> """</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="n">sql_raw</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">""" SELECT</span>
|
||||||
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZUUID,</span>
|
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZUUID,</span>
|
||||||
<span class="s2"> ZINTERNALRESOURCE.ZDATALENGTH, </span>
|
<span class="s2"> ZINTERNALRESOURCE.ZDATALENGTH, </span>
|
||||||
<span class="s2"> ZUNIFORMTYPEIDENTIFIER.ZIDENTIFIER,</span>
|
<span class="s2"> ZUNIFORMTYPEIDENTIFIER.ZIDENTIFIER,</span>
|
||||||
<span class="s2"> ZINTERNALRESOURCE.ZDATASTORESUBTYPE,</span>
|
<span class="s2"> ZINTERNALRESOURCE.ZDATASTORESUBTYPE,</span>
|
||||||
<span class="s2"> ZINTERNALRESOURCE.ZRESOURCETYPE</span>
|
<span class="s2"> ZINTERNALRESOURCE.ZRESOURCETYPE,</span>
|
||||||
|
<span class="s2"> ZINTERNALRESOURCE.ZFILESYSTEMBOOKMARK</span>
|
||||||
<span class="s2"> FROM </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2"></span>
|
<span class="s2"> FROM </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2"></span>
|
||||||
<span class="s2"> JOIN ZINTERNALRESOURCE ON ZINTERNALRESOURCE.ZASSET = ZADDITIONALASSETATTRIBUTES.ZASSET</span>
|
<span class="s2"> JOIN ZINTERNALRESOURCE ON ZINTERNALRESOURCE.ZASSET = ZADDITIONALASSETATTRIBUTES.ZASSET</span>
|
||||||
<span class="s2"> JOIN ZADDITIONALASSETATTRIBUTES ON ZADDITIONALASSETATTRIBUTES.ZASSET = </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.Z_PK </span>
|
<span class="s2"> JOIN ZADDITIONALASSETATTRIBUTES ON ZADDITIONALASSETATTRIBUTES.ZASSET = </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.Z_PK </span>
|
||||||
<span class="s2"> JOIN ZUNIFORMTYPEIDENTIFIER ON ZUNIFORMTYPEIDENTIFIER.Z_PK = ZINTERNALRESOURCE.ZUNIFORMTYPEIDENTIFIER</span>
|
<span class="s2"> JOIN ZUNIFORMTYPEIDENTIFIER ON ZUNIFORMTYPEIDENTIFIER.Z_PK = ZINTERNALRESOURCE.ZUNIFORMTYPEIDENTIFIER</span>
|
||||||
<span class="s2"> WHERE ZINTERNALRESOURCE.ZDATASTORESUBTYPE = 17</span>
|
<span class="s2"> WHERE ZINTERNALRESOURCE.ZDATASTORESUBTYPE = 17</span>
|
||||||
<span class="s2"> """</span>
|
<span class="s2"> """</span>
|
||||||
<span class="p">)</span>
|
|
||||||
|
<span class="n">c</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">sql_raw</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">c</span><span class="p">:</span>
|
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">c</span><span class="p">:</span>
|
||||||
<span class="n">uuid</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
<span class="n">uuid</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
<span class="k">if</span> <span class="n">uuid</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">uuid</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">:</span>
|
||||||
@@ -2354,6 +2428,33 @@
|
|||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"UTI_raw"</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"UTI_raw"</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"datastore_subtype"</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"datastore_subtype"</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
|
||||||
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"resource_type"</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span>
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"resource_type"</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"raw_bookmark"</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="c1"># get paths for the relative imports for RAW+JPEG images</span>
|
||||||
|
<span class="n">c</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
|
||||||
|
<span class="sa">f</span><span class="s2">""" SELECT</span>
|
||||||
|
<span class="s2"> </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.ZUUID,</span>
|
||||||
|
<span class="s2"> ZFILESYSTEMVOLUME.ZNAME,</span>
|
||||||
|
<span class="s2"> ZFILESYSTEMBOOKMARK.ZPATHRELATIVETOVOLUME</span>
|
||||||
|
<span class="s2"> FROM </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2"> </span>
|
||||||
|
<span class="s2"> JOIN ZINTERNALRESOURCE ON ZINTERNALRESOURCE.ZASSET = ZADDITIONALASSETATTRIBUTES.ZASSET</span>
|
||||||
|
<span class="s2"> JOIN ZADDITIONALASSETATTRIBUTES ON ZADDITIONALASSETATTRIBUTES.ZASSET = </span><span class="si">{</span><span class="n">asset_table</span><span class="si">}</span><span class="s2">.Z_PK </span>
|
||||||
|
<span class="s2"> JOIN ZFILESYSTEMBOOKMARK ON ZFILESYSTEMBOOKMARK.ZRESOURCE = ZINTERNALRESOURCE.Z_PK</span>
|
||||||
|
<span class="s2"> JOIN ZFILESYSTEMVOLUME ON ZFILESYSTEMVOLUME.Z_PK = ZINTERNALRESOURCE.ZFILESYSTEMVOLUME</span>
|
||||||
|
<span class="s2"> WHERE ZINTERNALRESOURCE.ZDATASTORESUBTYPE = 17</span>
|
||||||
|
<span class="s2"> """</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># path to the raw image will be /Volumes/ZFILESYSTEMVOLUME.ZNAME/ZFILESYSTEMBOOKMARK.ZPATHRELATIVETOVOLUME</span>
|
||||||
|
<span class="c1"># 0: {asset_table}.ZUUID, -- UUID</span>
|
||||||
|
<span class="c1"># 1: ZFILESYSTEMVOLUME.ZNAME, -- name of the volume</span>
|
||||||
|
<span class="c1"># 2: ZFILESYSTEMBOOKMARK.ZPATHRELATIVETOVOLUME -- path to the raw image</span>
|
||||||
|
|
||||||
|
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">c</span><span class="p">:</span>
|
||||||
|
<span class="n">uuid</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
|
<span class="k">if</span> <span class="n">uuid</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">:</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"raw_volume"</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"raw_relative_path"</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
|
||||||
|
|
||||||
<span class="c1"># add faces and keywords to photo data</span>
|
<span class="c1"># add faces and keywords to photo data</span>
|
||||||
<span class="k">for</span> <span class="n">uuid</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">:</span>
|
<span class="k">for</span> <span class="n">uuid</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">:</span>
|
||||||
@@ -2636,14 +2737,14 @@
|
|||||||
|
|
||||||
<span class="k">def</span> <span class="nf">_get_album_uuids</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">shared</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">import_session</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">_get_album_uuids</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">shared</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">import_session</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
<span class="sd">"""Return list of album UUIDs found in photos database</span>
|
<span class="sd">"""Return list of album UUIDs found in photos database</span>
|
||||||
<span class="sd"> </span>
|
|
||||||
<span class="sd"> Filters out albums in the trash and any special album types</span>
|
<span class="sd"> Filters out albums in the trash and any special album types</span>
|
||||||
<span class="sd"> </span>
|
|
||||||
<span class="sd"> Args:</span>
|
<span class="sd"> Args:</span>
|
||||||
<span class="sd"> shared: boolean; if True, returns shared albums, else normal albums</span>
|
<span class="sd"> shared: boolean; if True, returns shared albums, else normal albums</span>
|
||||||
<span class="sd"> import_session: boolean, if True, returns import session albums, else normal or shared albums</span>
|
<span class="sd"> import_session: boolean, if True, returns import session albums, else normal or shared albums</span>
|
||||||
<span class="sd"> Note: flags (shared, import_session) are mutually exclusive</span>
|
<span class="sd"> Note: flags (shared, import_session) are mutually exclusive</span>
|
||||||
<span class="sd"> </span>
|
|
||||||
<span class="sd"> Raises:</span>
|
<span class="sd"> Raises:</span>
|
||||||
<span class="sd"> ValueError: raised if mutually exclusive flags passed</span>
|
<span class="sd"> ValueError: raised if mutually exclusive flags passed</span>
|
||||||
|
|
||||||
@@ -2701,12 +2802,12 @@
|
|||||||
<span class="k">def</span> <span class="nf">_get_albums</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">shared</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">_get_albums</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">shared</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||||
<span class="sd">"""Return list of album titles found in photos database</span>
|
<span class="sd">"""Return list of album titles found in photos database</span>
|
||||||
<span class="sd"> Albums may have duplicate titles -- these will be treated as a single album.</span>
|
<span class="sd"> Albums may have duplicate titles -- these will be treated as a single album.</span>
|
||||||
<span class="sd"> </span>
|
|
||||||
<span class="sd"> Filters out albums in the trash and any special album types</span>
|
<span class="sd"> Filters out albums in the trash and any special album types</span>
|
||||||
|
|
||||||
<span class="sd"> Args:</span>
|
<span class="sd"> Args:</span>
|
||||||
<span class="sd"> shared: boolean; if True, returns shared albums, else normal albums</span>
|
<span class="sd"> shared: boolean; if True, returns shared albums, else normal albums</span>
|
||||||
<span class="sd"> </span>
|
|
||||||
<span class="sd"> Returns: list of album names</span>
|
<span class="sd"> Returns: list of album names</span>
|
||||||
<span class="sd"> """</span>
|
<span class="sd"> """</span>
|
||||||
|
|
||||||
@@ -3217,11 +3318,12 @@
|
|||||||
|
|
||||||
<span class="k">if</span> <span class="n">options</span><span class="o">.</span><span class="n">regex</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">options</span><span class="o">.</span><span class="n">regex</span><span class="p">:</span>
|
||||||
<span class="n">flags</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">IGNORECASE</span> <span class="k">if</span> <span class="n">options</span><span class="o">.</span><span class="n">ignore_case</span> <span class="k">else</span> <span class="mi">0</span>
|
<span class="n">flags</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">IGNORECASE</span> <span class="k">if</span> <span class="n">options</span><span class="o">.</span><span class="n">ignore_case</span> <span class="k">else</span> <span class="mi">0</span>
|
||||||
|
<span class="n">render_options</span> <span class="o">=</span> <span class="n">RenderOptions</span><span class="p">(</span><span class="n">none_str</span><span class="o">=</span><span class="s2">""</span><span class="p">)</span>
|
||||||
<span class="k">for</span> <span class="n">regex</span><span class="p">,</span> <span class="n">template</span> <span class="ow">in</span> <span class="n">options</span><span class="o">.</span><span class="n">regex</span><span class="p">:</span>
|
<span class="k">for</span> <span class="n">regex</span><span class="p">,</span> <span class="n">template</span> <span class="ow">in</span> <span class="n">options</span><span class="o">.</span><span class="n">regex</span><span class="p">:</span>
|
||||||
<span class="n">regex</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">regex</span><span class="p">,</span> <span class="n">flags</span><span class="p">)</span>
|
<span class="n">regex</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">regex</span><span class="p">,</span> <span class="n">flags</span><span class="p">)</span>
|
||||||
<span class="n">photo_list</span> <span class="o">=</span> <span class="p">[]</span>
|
<span class="n">photo_list</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">photos</span><span class="p">:</span>
|
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">photos</span><span class="p">:</span>
|
||||||
<span class="n">rendered</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">render_template</span><span class="p">(</span><span class="n">template</span><span class="p">,</span> <span class="n">none_str</span><span class="o">=</span><span class="s2">""</span><span class="p">)</span>
|
<span class="n">rendered</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">render_template</span><span class="p">(</span><span class="n">template</span><span class="p">,</span> <span class="n">render_options</span><span class="p">)</span>
|
||||||
<span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">rendered</span><span class="p">:</span>
|
<span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">rendered</span><span class="p">:</span>
|
||||||
<span class="k">if</span> <span class="n">regex</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
|
<span class="k">if</span> <span class="n">regex</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
|
||||||
<span class="n">photo_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
|
<span class="n">photo_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
|
||||||
@@ -3236,8 +3338,66 @@
|
|||||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Invalid query_eval CRITERIA: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Invalid query_eval CRITERIA: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">options</span><span class="o">.</span><span class="n">duplicate</span><span class="p">:</span>
|
||||||
|
<span class="n">no_date</span> <span class="o">=</span> <span class="n">datetime</span><span class="p">(</span><span class="mi">1970</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||||||
|
<span class="n">tz</span> <span class="o">=</span> <span class="n">timezone</span><span class="p">(</span><span class="n">timedelta</span><span class="p">(</span><span class="mi">0</span><span class="p">))</span>
|
||||||
|
<span class="n">no_date</span> <span class="o">=</span> <span class="n">no_date</span><span class="o">.</span><span class="n">astimezone</span><span class="p">(</span><span class="n">tz</span><span class="o">=</span><span class="n">tz</span><span class="p">)</span>
|
||||||
|
<span class="n">photos</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span>
|
||||||
|
<span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">photos</span> <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">duplicates</span><span class="p">],</span>
|
||||||
|
<span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="o">.</span><span class="n">date_added</span> <span class="ow">or</span> <span class="n">no_date</span><span class="p">,</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="c1"># gather all duplicates but ensure each uuid is only represented once</span>
|
||||||
|
<span class="n">photodict</span> <span class="o">=</span> <span class="n">OrderedDict</span><span class="p">()</span>
|
||||||
|
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">photos</span><span class="p">:</span>
|
||||||
|
<span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">photodict</span><span class="p">:</span>
|
||||||
|
<span class="n">photodict</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="n">uuid</span><span class="p">]</span> <span class="o">=</span> <span class="n">p</span>
|
||||||
|
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span>
|
||||||
|
<span class="n">p</span><span class="o">.</span><span class="n">duplicates</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="o">.</span><span class="n">date_added</span> <span class="ow">or</span> <span class="n">no_date</span>
|
||||||
|
<span class="p">):</span>
|
||||||
|
<span class="k">if</span> <span class="n">d</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">photodict</span><span class="p">:</span>
|
||||||
|
<span class="n">photodict</span><span class="p">[</span><span class="n">d</span><span class="o">.</span><span class="n">uuid</span><span class="p">]</span> <span class="o">=</span> <span class="n">d</span>
|
||||||
|
<span class="n">photos</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">photodict</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
|
||||||
|
|
||||||
|
<span class="c1"># filter for deleted as photo.duplicates will include photos in the trash</span>
|
||||||
|
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">options</span><span class="o">.</span><span class="n">deleted</span> <span class="ow">or</span> <span class="n">options</span><span class="o">.</span><span class="n">deleted_only</span><span class="p">):</span>
|
||||||
|
<span class="n">photos</span> <span class="o">=</span> <span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">photos</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">p</span><span class="o">.</span><span class="n">intrash</span><span class="p">]</span>
|
||||||
|
<span class="k">if</span> <span class="n">options</span><span class="o">.</span><span class="n">deleted_only</span><span class="p">:</span>
|
||||||
|
<span class="n">photos</span> <span class="o">=</span> <span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">photos</span> <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">intrash</span><span class="p">]</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">options</span><span class="o">.</span><span class="n">location</span><span class="p">:</span>
|
||||||
|
<span class="n">photos</span> <span class="o">=</span> <span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">photos</span> <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">location</span> <span class="o">!=</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)]</span>
|
||||||
|
<span class="k">elif</span> <span class="n">options</span><span class="o">.</span><span class="n">no_location</span><span class="p">:</span>
|
||||||
|
<span class="n">photos</span> <span class="o">=</span> <span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">photos</span> <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">location</span> <span class="o">==</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)]</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">options</span><span class="o">.</span><span class="n">selected</span><span class="p">:</span>
|
||||||
|
<span class="c1"># photos selected in Photos app</span>
|
||||||
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="c1"># catch AppleScript errors as the scripting interfce to Photos is flaky</span>
|
||||||
|
<span class="n">selected</span> <span class="o">=</span> <span class="n">photoscript</span><span class="o">.</span><span class="n">PhotosLibrary</span><span class="p">()</span><span class="o">.</span><span class="n">selection</span>
|
||||||
|
<span class="n">selected_uuid</span> <span class="o">=</span> <span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="n">uuid</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">selected</span><span class="p">]</span>
|
||||||
|
<span class="n">photos</span> <span class="o">=</span> <span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">photos</span> <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">in</span> <span class="n">selected_uuid</span><span class="p">]</span>
|
||||||
|
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
||||||
|
<span class="c1"># no photos selected or a selected photo was "open"</span>
|
||||||
|
<span class="c1"># selection only works if photos selected in main media browser</span>
|
||||||
|
<span class="n">photos</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="n">options</span><span class="o">.</span><span class="n">function</span><span class="p">:</span>
|
||||||
|
<span class="k">for</span> <span class="n">function</span> <span class="ow">in</span> <span class="n">options</span><span class="o">.</span><span class="n">function</span><span class="p">:</span>
|
||||||
|
<span class="n">photos</span> <span class="o">=</span> <span class="n">function</span><span class="p">[</span><span class="mi">0</span><span class="p">](</span><span class="n">photos</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="k">return</span> <span class="n">photos</span></div>
|
<span class="k">return</span> <span class="n">photos</span></div>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">_duplicate_signature</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uuid</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Compute a signature for finding possible duplicates"""</span>
|
||||||
|
<span class="k">return</span> <span class="p">(</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"original_filesize"</span><span class="p">],</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"imageDate"</span><span class="p">],</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"height"</span><span class="p">],</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"width"</span><span class="p">],</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"UTI"</span><span class="p">],</span>
|
||||||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_dbphotos</span><span class="p">[</span><span class="n">uuid</span><span class="p">][</span><span class="s2">"hasAdjustments"</span><span class="p">],</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
|
||||||
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="k">return</span> <span class="sa">f</span><span class="s2">"osxphotos.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">(dbfile='</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">db_path</span><span class="si">}</span><span class="s2">')"</span>
|
<span class="k">return</span> <span class="sa">f</span><span class="s2">"osxphotos.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">(dbfile='</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">db_path</span><span class="si">}</span><span class="s2">')"</span>
|
||||||
|
|
||||||
@@ -3280,7 +3440,7 @@
|
|||||||
<span class="k">else</span><span class="p">:</span>
|
<span class="k">else</span><span class="p">:</span>
|
||||||
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
|
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
|
||||||
<span class="n">photos_search</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">photos</span> <span class="k">if</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">attribute</span><span class="p">))</span>
|
<span class="n">photos_search</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">photos</span> <span class="k">if</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">attribute</span><span class="p">))</span>
|
||||||
<span class="k">return</span> <span class="n">photos_search</span>
|
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">photos_search</span><span class="p">))</span>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -3339,7 +3499,7 @@
|
|||||||
©2021, Rhet Turnbull.
|
©2021, Rhet Turnbull.
|
||||||
|
|
||||||
|
|
|
|
||||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.2</a>
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
|
||||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
104
docs/_static/basic.css
vendored
104
docs/_static/basic.css
vendored
@@ -130,7 +130,7 @@ ul.search li a {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul.search li div.context {
|
ul.search li p.context {
|
||||||
color: #888;
|
color: #888;
|
||||||
margin: 2px 0 0 30px;
|
margin: 2px 0 0 30px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
@@ -277,25 +277,25 @@ p.rubric {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
img.align-left, .figure.align-left, object.align-left {
|
img.align-left, figure.align-left, .figure.align-left, object.align-left {
|
||||||
clear: left;
|
clear: left;
|
||||||
float: left;
|
float: left;
|
||||||
margin-right: 1em;
|
margin-right: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
img.align-right, .figure.align-right, object.align-right {
|
img.align-right, figure.align-right, .figure.align-right, object.align-right {
|
||||||
clear: right;
|
clear: right;
|
||||||
float: right;
|
float: right;
|
||||||
margin-left: 1em;
|
margin-left: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
img.align-center, .figure.align-center, object.align-center {
|
img.align-center, figure.align-center, .figure.align-center, object.align-center {
|
||||||
display: block;
|
display: block;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
img.align-default, .figure.align-default {
|
img.align-default, figure.align-default, .figure.align-default {
|
||||||
display: block;
|
display: block;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
@@ -319,7 +319,8 @@ img.align-default, .figure.align-default {
|
|||||||
|
|
||||||
/* -- sidebars -------------------------------------------------------------- */
|
/* -- sidebars -------------------------------------------------------------- */
|
||||||
|
|
||||||
div.sidebar {
|
div.sidebar,
|
||||||
|
aside.sidebar {
|
||||||
margin: 0 0 0.5em 1em;
|
margin: 0 0 0.5em 1em;
|
||||||
border: 1px solid #ddb;
|
border: 1px solid #ddb;
|
||||||
padding: 7px;
|
padding: 7px;
|
||||||
@@ -377,12 +378,14 @@ div.body p.centered {
|
|||||||
/* -- content of sidebars/topics/admonitions -------------------------------- */
|
/* -- content of sidebars/topics/admonitions -------------------------------- */
|
||||||
|
|
||||||
div.sidebar > :last-child,
|
div.sidebar > :last-child,
|
||||||
|
aside.sidebar > :last-child,
|
||||||
div.topic > :last-child,
|
div.topic > :last-child,
|
||||||
div.admonition > :last-child {
|
div.admonition > :last-child {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.sidebar::after,
|
div.sidebar::after,
|
||||||
|
aside.sidebar::after,
|
||||||
div.topic::after,
|
div.topic::after,
|
||||||
div.admonition::after,
|
div.admonition::after,
|
||||||
blockquote::after {
|
blockquote::after {
|
||||||
@@ -455,20 +458,22 @@ td > :last-child {
|
|||||||
|
|
||||||
/* -- figures --------------------------------------------------------------- */
|
/* -- figures --------------------------------------------------------------- */
|
||||||
|
|
||||||
div.figure {
|
div.figure, figure {
|
||||||
margin: 0.5em;
|
margin: 0.5em;
|
||||||
padding: 0.5em;
|
padding: 0.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.figure p.caption {
|
div.figure p.caption, figcaption {
|
||||||
padding: 0.3em;
|
padding: 0.3em;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.figure p.caption span.caption-number {
|
div.figure p.caption span.caption-number,
|
||||||
|
figcaption span.caption-number {
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.figure p.caption span.caption-text {
|
div.figure p.caption span.caption-text,
|
||||||
|
figcaption span.caption-text {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- field list styles ----------------------------------------------------- */
|
/* -- field list styles ----------------------------------------------------- */
|
||||||
@@ -503,6 +508,63 @@ table.hlist td {
|
|||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -- object description styles --------------------------------------------- */
|
||||||
|
|
||||||
|
.sig {
|
||||||
|
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig-name, code.descname {
|
||||||
|
background-color: transparent;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig-name {
|
||||||
|
font-size: 1.1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
code.descname {
|
||||||
|
font-size: 1.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig-prename, code.descclassname {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.optional {
|
||||||
|
font-size: 1.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig-paren {
|
||||||
|
font-size: larger;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig-param.n {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* C++ specific styling */
|
||||||
|
|
||||||
|
.sig-inline.c-texpr,
|
||||||
|
.sig-inline.cpp-texpr {
|
||||||
|
font-family: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig.c .k, .sig.c .kt,
|
||||||
|
.sig.cpp .k, .sig.cpp .kt {
|
||||||
|
color: #0033B3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig.c .m,
|
||||||
|
.sig.cpp .m {
|
||||||
|
color: #1750EB;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig.c .s, .sig.c .sc,
|
||||||
|
.sig.cpp .s, .sig.cpp .sc {
|
||||||
|
color: #067D17;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -- other body styles ----------------------------------------------------- */
|
/* -- other body styles ----------------------------------------------------- */
|
||||||
|
|
||||||
@@ -629,14 +691,6 @@ dl.glossary dt {
|
|||||||
font-size: 1.1em;
|
font-size: 1.1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.optional {
|
|
||||||
font-size: 1.3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sig-paren {
|
|
||||||
font-size: larger;
|
|
||||||
}
|
|
||||||
|
|
||||||
.versionmodified {
|
.versionmodified {
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
@@ -767,6 +821,10 @@ table.highlighttable td.linenos,
|
|||||||
span.linenos,
|
span.linenos,
|
||||||
div.doctest > div.highlight span.gp { /* gp: Generic.Prompt */
|
div.doctest > div.highlight span.gp { /* gp: Generic.Prompt */
|
||||||
user-select: none;
|
user-select: none;
|
||||||
|
-webkit-user-select: text; /* Safari fallback only */
|
||||||
|
-webkit-user-select: none; /* Chrome/Safari */
|
||||||
|
-moz-user-select: none; /* Firefox */
|
||||||
|
-ms-user-select: none; /* IE10+ */
|
||||||
}
|
}
|
||||||
|
|
||||||
div.code-block-caption span.caption-number {
|
div.code-block-caption span.caption-number {
|
||||||
@@ -781,16 +839,6 @@ div.literal-block-wrapper {
|
|||||||
margin: 1em 0;
|
margin: 1em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
code.descname {
|
|
||||||
background-color: transparent;
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 1.2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
code.descclassname {
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
code.xref, a code {
|
code.xref, a code {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
|||||||
2
docs/_static/documentation_options.js
vendored
2
docs/_static/documentation_options.js
vendored
@@ -1,6 +1,6 @@
|
|||||||
var DOCUMENTATION_OPTIONS = {
|
var DOCUMENTATION_OPTIONS = {
|
||||||
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
|
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
|
||||||
VERSION: '0.42.20',
|
VERSION: '0.42.66',
|
||||||
LANGUAGE: 'None',
|
LANGUAGE: 'None',
|
||||||
COLLAPSE_INDEX: false,
|
COLLAPSE_INDEX: false,
|
||||||
BUILDER: 'html',
|
BUILDER: 'html',
|
||||||
|
|||||||
2
docs/_static/searchtools.js
vendored
2
docs/_static/searchtools.js
vendored
@@ -509,7 +509,7 @@ var Search = {
|
|||||||
var excerpt = ((start > 0) ? '...' : '') +
|
var excerpt = ((start > 0) ? '...' : '') +
|
||||||
$.trim(text.substr(start, 240)) +
|
$.trim(text.substr(start, 240)) +
|
||||||
((start + 240 - text.length) ? '...' : '');
|
((start + 240 - text.length) ? '...' : '');
|
||||||
var rv = $('<div class="context"></div>').text(excerpt);
|
var rv = $('<p class="context"></p>').text(excerpt);
|
||||||
$.each(hlwords, function() {
|
$.each(hlwords, function() {
|
||||||
rv = rv.highlightText(this, 'highlighted');
|
rv = rv.highlightText(this, 'highlighted');
|
||||||
});
|
});
|
||||||
|
|||||||
2042
docs/_static/underscore-1.13.1.js
vendored
Normal file
2042
docs/_static/underscore-1.13.1.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
8
docs/_static/underscore.js
vendored
8
docs/_static/underscore.js
vendored
File diff suppressed because one or more lines are too long
1004
docs/cli.html
1004
docs/cli.html
File diff suppressed because it is too large
Load Diff
@@ -5,10 +5,10 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Index — osxphotos 0.42.20 documentation</title>
|
<title>Index — osxphotos 0.42.66 documentation</title>
|
||||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
|
<link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
|
||||||
<script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
|
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
<script src="_static/jquery.js"></script>
|
<script src="_static/jquery.js"></script>
|
||||||
<script src="_static/underscore.js"></script>
|
<script src="_static/underscore.js"></script>
|
||||||
<script src="_static/doctools.js"></script>
|
<script src="_static/doctools.js"></script>
|
||||||
@@ -168,6 +168,8 @@
|
|||||||
<li><a href="cli.html#cmdoption-osxphotos-places-db">osxphotos-places command line option</a>
|
<li><a href="cli.html#cmdoption-osxphotos-places-db">osxphotos-places command line option</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-query-db">osxphotos-query command line option</a>
|
<li><a href="cli.html#cmdoption-osxphotos-query-db">osxphotos-query command line option</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-repl-db">osxphotos-repl command line option</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
<li>
|
<li>
|
||||||
@@ -227,6 +229,15 @@
|
|||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-export-dry-run">osxphotos-export command line option</a>
|
<li><a href="cli.html#cmdoption-osxphotos-export-dry-run">osxphotos-export command line option</a>
|
||||||
|
</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>
|
||||||
|
--duplicate
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-export-duplicate">osxphotos-export command line option</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-query-duplicate">osxphotos-query command line option</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
<li>
|
<li>
|
||||||
@@ -538,6 +549,15 @@
|
|||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-export-load-config">osxphotos-export command line option</a>
|
<li><a href="cli.html#cmdoption-osxphotos-export-load-config">osxphotos-export command line option</a>
|
||||||
|
</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>
|
||||||
|
--location
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-export-location">osxphotos-export command line option</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-query-location">osxphotos-query command line option</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
<li>
|
<li>
|
||||||
@@ -585,8 +605,6 @@
|
|||||||
<li><a href="cli.html#cmdoption-osxphotos-query-no-comment">osxphotos-query command line option</a>
|
<li><a href="cli.html#cmdoption-osxphotos-query-no-comment">osxphotos-query command line option</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
</ul></td>
|
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
|
||||||
<li>
|
<li>
|
||||||
--no-description
|
--no-description
|
||||||
|
|
||||||
@@ -603,6 +621,17 @@
|
|||||||
<li><a href="cli.html#cmdoption-osxphotos-export-no-likes">osxphotos-export command line option</a>
|
<li><a href="cli.html#cmdoption-osxphotos-export-no-likes">osxphotos-export command line option</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-query-no-likes">osxphotos-query command line option</a>
|
<li><a href="cli.html#cmdoption-osxphotos-query-no-likes">osxphotos-query command line option</a>
|
||||||
|
</li>
|
||||||
|
</ul></li>
|
||||||
|
</ul></td>
|
||||||
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
|
<li>
|
||||||
|
--no-location
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-export-no-location">osxphotos-export command line option</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-query-no-location">osxphotos-query command line option</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
<li>
|
<li>
|
||||||
@@ -841,6 +870,41 @@
|
|||||||
<li><a href="cli.html#cmdoption-osxphotos-export-portrait">osxphotos-export command line option</a>
|
<li><a href="cli.html#cmdoption-osxphotos-export-portrait">osxphotos-export command line option</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-query-portrait">osxphotos-query command line option</a>
|
<li><a href="cli.html#cmdoption-osxphotos-query-portrait">osxphotos-query command line option</a>
|
||||||
|
</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>
|
||||||
|
--post-command <CATEGORY COMMAND>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-export-post-command">osxphotos-export command line option</a>
|
||||||
|
</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>
|
||||||
|
--post-function <filename.py::function>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-export-post-function">osxphotos-export command line option</a>
|
||||||
|
</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>
|
||||||
|
--preview
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-export-preview">osxphotos-export command line option</a>
|
||||||
|
</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>
|
||||||
|
--preview-if-missing
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-export-preview-if-missing">osxphotos-export command line option</a>
|
||||||
|
</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>
|
||||||
|
--preview-suffix <SUFFIX>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-export-preview-suffix">osxphotos-export command line option</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
<li>
|
<li>
|
||||||
@@ -850,6 +914,15 @@
|
|||||||
<li><a href="cli.html#cmdoption-osxphotos-export-query-eval">osxphotos-export command line option</a>
|
<li><a href="cli.html#cmdoption-osxphotos-export-query-eval">osxphotos-export command line option</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-query-query-eval">osxphotos-query command line option</a>
|
<li><a href="cli.html#cmdoption-osxphotos-query-query-eval">osxphotos-query command line option</a>
|
||||||
|
</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>
|
||||||
|
--query-function <filename.py::function>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-export-query-function">osxphotos-export command line option</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-query-query-function">osxphotos-query command line option</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
<li>
|
<li>
|
||||||
@@ -896,6 +969,15 @@
|
|||||||
<li><a href="cli.html#cmdoption-osxphotos-export-screenshot">osxphotos-export command line option</a>
|
<li><a href="cli.html#cmdoption-osxphotos-export-screenshot">osxphotos-export command line option</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-query-screenshot">osxphotos-query command line option</a>
|
<li><a href="cli.html#cmdoption-osxphotos-query-screenshot">osxphotos-query command line option</a>
|
||||||
|
</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>
|
||||||
|
--selected
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-export-selected">osxphotos-export command line option</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-query-selected">osxphotos-query command line option</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
<li>
|
<li>
|
||||||
@@ -1122,19 +1204,19 @@
|
|||||||
<h2 id="A">A</h2>
|
<h2 id="A">A</h2>
|
||||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.activities">activities() (osxphotos.PhotoInfo.SearchInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.activities">activities (osxphotos.PhotoInfo.SearchInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.adjustments">adjustments() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.adjustments">adjustments (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.album_info">album_info() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.album_info">album_info (osxphotos.PhotoInfo property)</a>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotosDB.album_info">(osxphotos.PhotosDB property)</a>
|
<li><a href="reference.html#osxphotos.PhotosDB.album_info">(osxphotos.PhotosDB property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
<li><a href="reference.html#osxphotos.PhotosDB.album_info_shared">album_info_shared() (osxphotos.PhotosDB property)</a>
|
<li><a href="reference.html#osxphotos.PhotosDB.album_info_shared">album_info_shared (osxphotos.PhotosDB property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.albums">albums() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.albums">albums (osxphotos.PhotoInfo property)</a>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotosDB.albums">(osxphotos.PhotosDB property)</a>
|
<li><a href="reference.html#osxphotos.PhotosDB.albums">(osxphotos.PhotosDB property)</a>
|
||||||
@@ -1142,13 +1224,13 @@
|
|||||||
</ul></li>
|
</ul></li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotosDB.albums_as_dict">albums_as_dict() (osxphotos.PhotosDB property)</a>
|
<li><a href="reference.html#osxphotos.PhotosDB.albums_as_dict">albums_as_dict (osxphotos.PhotosDB property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotosDB.albums_shared">albums_shared() (osxphotos.PhotosDB property)</a>
|
<li><a href="reference.html#osxphotos.PhotosDB.albums_shared">albums_shared (osxphotos.PhotosDB property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotosDB.albums_shared_as_dict">albums_shared_as_dict() (osxphotos.PhotosDB property)</a>
|
<li><a href="reference.html#osxphotos.PhotosDB.albums_shared_as_dict">albums_shared_as_dict (osxphotos.PhotosDB property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.all">all() (osxphotos.PhotoInfo.SearchInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.all">all (osxphotos.PhotoInfo.SearchInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ExportResults.all_files">all_files() (osxphotos.PhotoInfo.ExportResults method)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ExportResults.all_files">all_files() (osxphotos.PhotoInfo.ExportResults method)</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -1170,23 +1252,23 @@
|
|||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.bit_rate">bit_rate (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.bit_rate">bit_rate (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.bodies_of_water">bodies_of_water() (osxphotos.PhotoInfo.SearchInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.bodies_of_water">bodies_of_water (osxphotos.PhotoInfo.SearchInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.burst">burst() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.burst">burst (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.burst_album_info">burst_album_info() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.burst_album_info">burst_album_info (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.burst_albums">burst_albums() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.burst_albums">burst_albums (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.burst_default_pick">burst_default_pick() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.burst_default_pick">burst_default_pick (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.burst_key">burst_key() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.burst_key">burst_key (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.burst_photos">burst_photos() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.burst_photos">burst_photos (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.burst_selected">burst_selected() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.burst_selected">burst_selected (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
@@ -1198,15 +1280,15 @@
|
|||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.camera_model">camera_model (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.camera_model">camera_model (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.city">city() (osxphotos.PhotoInfo.SearchInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.city">city (osxphotos.PhotoInfo.SearchInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.codec">codec (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.codec">codec (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.comments">comments() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.comments">comments (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.country">country() (osxphotos.PhotoInfo.SearchInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.country">country (osxphotos.PhotoInfo.SearchInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.curation">curation (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.curation">curation (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -1216,21 +1298,21 @@
|
|||||||
<h2 id="D">D</h2>
|
<h2 id="D">D</h2>
|
||||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.date">date() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.date">date (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.date_added">date_added() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.date_added">date_added (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.date_modified">date_modified() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.date_modified">date_modified (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.date_trashed">date_trashed() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.date_trashed">date_trashed (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotosDB.db_path">db_path() (osxphotos.PhotosDB property)</a>
|
<li><a href="reference.html#osxphotos.PhotosDB.db_path">db_path (osxphotos.PhotosDB property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotosDB.db_version">db_version() (osxphotos.PhotosDB property)</a>
|
<li><a href="reference.html#osxphotos.PhotosDB.db_version">db_version (osxphotos.PhotosDB property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.description">description() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.description">description (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
DEST
|
DEST
|
||||||
@@ -1239,6 +1321,8 @@
|
|||||||
<li><a href="cli.html#cmdoption-osxphotos-export-arg-DEST">osxphotos-export command line option</a>
|
<li><a href="cli.html#cmdoption-osxphotos-export-arg-DEST">osxphotos-export command line option</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
|
<li><a href="reference.html#osxphotos.PhotoInfo.duplicates">duplicates (osxphotos.PhotoInfo property)</a>
|
||||||
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.duration">duration (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.duration">duration (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
@@ -1247,9 +1331,9 @@
|
|||||||
<h2 id="E">E</h2>
|
<h2 id="E">E</h2>
|
||||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.exif_info">exif_info() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.exif_info">exif_info (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.exiftool">exiftool() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.exiftool">exiftool (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.export">export() (osxphotos.PhotoInfo method)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.export">export() (osxphotos.PhotoInfo method)</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -1259,7 +1343,7 @@
|
|||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.exposure_bias">exposure_bias (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.exposure_bias">exposure_bias (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.external_edit">external_edit() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.external_edit">external_edit (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
@@ -1267,13 +1351,13 @@
|
|||||||
<h2 id="F">F</h2>
|
<h2 id="F">F</h2>
|
||||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.face_info">face_info() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.face_info">face_info (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.failure">failure (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.failure">failure (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.favorite">favorite() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.favorite">favorite (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.filename">filename() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.filename">filename (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
@@ -1281,9 +1365,9 @@
|
|||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.focal_length">focal_length (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.focal_length">focal_length (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotosDB.folder_info">folder_info() (osxphotos.PhotosDB property)</a>
|
<li><a href="reference.html#osxphotos.PhotosDB.folder_info">folder_info (osxphotos.PhotosDB property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotosDB.folders">folders() (osxphotos.PhotosDB property)</a>
|
<li><a href="reference.html#osxphotos.PhotosDB.folders">folders (osxphotos.PhotosDB property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.fps">fps (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.fps">fps (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -1307,21 +1391,21 @@
|
|||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.harmonious_color">harmonious_color (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.harmonious_color">harmonious_color (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.has_raw">has_raw() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.has_raw">has_raw (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.hasadjustments">hasadjustments() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.hasadjustments">hasadjustments (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.hdr">hdr() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.hdr">hdr (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.height">height() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.height">height (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.hidden">hidden() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.hidden">hidden (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.highlight_visibility">highlight_visibility (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.highlight_visibility">highlight_visibility (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.holidays">holidays() (osxphotos.PhotoInfo.SearchInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.holidays">holidays (osxphotos.PhotoInfo.SearchInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
@@ -1331,37 +1415,37 @@
|
|||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.immersiveness">immersiveness (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.immersiveness">immersiveness (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.import_info">import_info() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.import_info">import_info (osxphotos.PhotoInfo property)</a>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotosDB.import_info">(osxphotos.PhotosDB property)</a>
|
<li><a href="reference.html#osxphotos.PhotosDB.import_info">(osxphotos.PhotosDB property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.incloud">incloud() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.incloud">incloud (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.interaction">interaction (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.interaction">interaction (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.interesting_subject">interesting_subject (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.interesting_subject">interesting_subject (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.intrash">intrash() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.intrash">intrash (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.intrusive_object_presence">intrusive_object_presence (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.intrusive_object_presence">intrusive_object_presence (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.iscloudasset">iscloudasset() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.iscloudasset">iscloudasset (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ismissing">ismissing() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ismissing">ismissing (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ismovie">ismovie() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ismovie">ismovie (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.iso">iso (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.iso">iso (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.isphoto">isphoto() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.isphoto">isphoto (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.israw">israw() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.israw">israw (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.isreference">isreference() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.isreference">isreference (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
@@ -1377,7 +1461,7 @@
|
|||||||
<h2 id="K">K</h2>
|
<h2 id="K">K</h2>
|
||||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.keywords">keywords() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.keywords">keywords (osxphotos.PhotoInfo property)</a>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotosDB.keywords">(osxphotos.PhotosDB property)</a>
|
<li><a href="reference.html#osxphotos.PhotosDB.keywords">(osxphotos.PhotosDB property)</a>
|
||||||
@@ -1385,7 +1469,7 @@
|
|||||||
</ul></li>
|
</ul></li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotosDB.keywords_as_dict">keywords_as_dict() (osxphotos.PhotosDB property)</a>
|
<li><a href="reference.html#osxphotos.PhotosDB.keywords_as_dict">keywords_as_dict (osxphotos.PhotosDB property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
@@ -1393,7 +1477,7 @@
|
|||||||
<h2 id="L">L</h2>
|
<h2 id="L">L</h2>
|
||||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.labels">labels() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.labels">labels (osxphotos.PhotoInfo property)</a>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.labels">(osxphotos.PhotoInfo.SearchInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.labels">(osxphotos.PhotoInfo.SearchInfo property)</a>
|
||||||
@@ -1401,15 +1485,15 @@
|
|||||||
<li><a href="reference.html#osxphotos.PhotosDB.labels">(osxphotos.PhotosDB property)</a>
|
<li><a href="reference.html#osxphotos.PhotosDB.labels">(osxphotos.PhotosDB property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
<li><a href="reference.html#osxphotos.PhotosDB.labels_as_dict">labels_as_dict() (osxphotos.PhotosDB property)</a>
|
<li><a href="reference.html#osxphotos.PhotosDB.labels_as_dict">labels_as_dict (osxphotos.PhotosDB property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.labels_normalized">labels_normalized() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.labels_normalized">labels_normalized (osxphotos.PhotoInfo property)</a>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotosDB.labels_normalized">(osxphotos.PhotosDB property)</a>
|
<li><a href="reference.html#osxphotos.PhotosDB.labels_normalized">(osxphotos.PhotosDB property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
<li><a href="reference.html#osxphotos.PhotosDB.labels_normalized_as_dict">labels_normalized_as_dict() (osxphotos.PhotosDB property)</a>
|
<li><a href="reference.html#osxphotos.PhotosDB.labels_normalized_as_dict">labels_normalized_as_dict (osxphotos.PhotosDB property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.latitude">latitude (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.latitude">latitude (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -1417,17 +1501,17 @@
|
|||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.lens_model">lens_model (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.lens_model">lens_model (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotosDB.library_path">library_path() (osxphotos.PhotosDB property)</a>
|
<li><a href="reference.html#osxphotos.PhotosDB.library_path">library_path (osxphotos.PhotosDB property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.likes">likes() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.likes">likes (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.live_photo">live_photo() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.live_photo">live_photo (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.lively_color">lively_color (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.lively_color">lively_color (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.locality_names">locality_names() (osxphotos.PhotoInfo.SearchInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.locality_names">locality_names (osxphotos.PhotoInfo.SearchInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.location">location() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.location">location (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.longitude">longitude (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.longitude">longitude (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -1439,13 +1523,13 @@
|
|||||||
<h2 id="M">M</h2>
|
<h2 id="M">M</h2>
|
||||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.media_types">media_types() (osxphotos.PhotoInfo.SearchInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.media_types">media_types (osxphotos.PhotoInfo.SearchInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.metering_mode">metering_mode (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.metering_mode">metering_mode (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.month">month() (osxphotos.PhotoInfo.SearchInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.month">month (osxphotos.PhotoInfo.SearchInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
@@ -1453,7 +1537,7 @@
|
|||||||
<h2 id="N">N</h2>
|
<h2 id="N">N</h2>
|
||||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.neighborhoods">neighborhoods() (osxphotos.PhotoInfo.SearchInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.neighborhoods">neighborhoods (osxphotos.PhotoInfo.SearchInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
@@ -1465,17 +1549,17 @@
|
|||||||
<h2 id="O">O</h2>
|
<h2 id="O">O</h2>
|
||||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.orientation">orientation() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.orientation">orientation (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.original_filename">original_filename() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.original_filename">original_filename (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.original_filesize">original_filesize() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.original_filesize">original_filesize (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.original_height">original_height() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.original_height">original_height (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.original_orientation">original_orientation() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.original_orientation">original_orientation (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.original_width">original_width() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.original_width">original_width (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
osxphotos command line option
|
osxphotos command line option
|
||||||
@@ -1553,6 +1637,8 @@
|
|||||||
<li><a href="cli.html#cmdoption-osxphotos-export-download-missing">--download-missing</a>
|
<li><a href="cli.html#cmdoption-osxphotos-export-download-missing">--download-missing</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-export-dry-run">--dry-run</a>
|
<li><a href="cli.html#cmdoption-osxphotos-export-dry-run">--dry-run</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-export-duplicate">--duplicate</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-export-edited">--edited</a>
|
<li><a href="cli.html#cmdoption-osxphotos-export-edited">--edited</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -1623,6 +1709,8 @@
|
|||||||
<li><a href="cli.html#cmdoption-osxphotos-export-live">--live</a>
|
<li><a href="cli.html#cmdoption-osxphotos-export-live">--live</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-export-load-config">--load-config <config file path></a>
|
<li><a href="cli.html#cmdoption-osxphotos-export-load-config">--load-config <config file path></a>
|
||||||
|
</li>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-export-location">--location</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-export-max-size">--max-size <SIZE></a>
|
<li><a href="cli.html#cmdoption-osxphotos-export-max-size">--max-size <SIZE></a>
|
||||||
</li>
|
</li>
|
||||||
@@ -1637,6 +1725,8 @@
|
|||||||
<li><a href="cli.html#cmdoption-osxphotos-export-no-description">--no-description</a>
|
<li><a href="cli.html#cmdoption-osxphotos-export-no-description">--no-description</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-export-no-likes">--no-likes</a>
|
<li><a href="cli.html#cmdoption-osxphotos-export-no-likes">--no-likes</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-export-no-location">--no-location</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-export-no-place">--no-place</a>
|
<li><a href="cli.html#cmdoption-osxphotos-export-no-place">--no-place</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -1687,8 +1777,20 @@
|
|||||||
<li><a href="cli.html#cmdoption-osxphotos-export-place">--place <PLACE></a>
|
<li><a href="cli.html#cmdoption-osxphotos-export-place">--place <PLACE></a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-export-portrait">--portrait</a>
|
<li><a href="cli.html#cmdoption-osxphotos-export-portrait">--portrait</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-export-post-command">--post-command <CATEGORY COMMAND></a>
|
||||||
|
</li>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-export-post-function">--post-function <filename.py::function></a>
|
||||||
|
</li>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-export-preview">--preview</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-export-preview-if-missing">--preview-if-missing</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-export-preview-suffix">--preview-suffix <SUFFIX></a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-export-query-eval">--query-eval <CRITERIA></a>
|
<li><a href="cli.html#cmdoption-osxphotos-export-query-eval">--query-eval <CRITERIA></a>
|
||||||
|
</li>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-export-query-function">--query-function <filename.py::function></a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-export-regex">--regex <REGEX TEMPLATE></a>
|
<li><a href="cli.html#cmdoption-osxphotos-export-regex">--regex <REGEX TEMPLATE></a>
|
||||||
</li>
|
</li>
|
||||||
@@ -1701,6 +1803,8 @@
|
|||||||
<li><a href="cli.html#cmdoption-osxphotos-export-save-config">--save-config <config file path></a>
|
<li><a href="cli.html#cmdoption-osxphotos-export-save-config">--save-config <config file path></a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-export-screenshot">--screenshot</a>
|
<li><a href="cli.html#cmdoption-osxphotos-export-screenshot">--screenshot</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-export-selected">--selected</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-export-selfie">--selfie</a>
|
<li><a href="cli.html#cmdoption-osxphotos-export-selfie">--selfie</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -1849,6 +1953,8 @@
|
|||||||
<li><a href="cli.html#cmdoption-osxphotos-query-deleted-only">--deleted-only</a>
|
<li><a href="cli.html#cmdoption-osxphotos-query-deleted-only">--deleted-only</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-query-description">--description <DESC></a>
|
<li><a href="cli.html#cmdoption-osxphotos-query-description">--description <DESC></a>
|
||||||
|
</li>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-query-duplicate">--duplicate</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-query-edited">--edited</a>
|
<li><a href="cli.html#cmdoption-osxphotos-query-edited">--edited</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -1887,6 +1993,8 @@
|
|||||||
<li><a href="cli.html#cmdoption-osxphotos-query-label">--label <LABEL></a>
|
<li><a href="cli.html#cmdoption-osxphotos-query-label">--label <LABEL></a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-query-live">--live</a>
|
<li><a href="cli.html#cmdoption-osxphotos-query-live">--live</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-query-location">--location</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-query-max-size">--max-size <SIZE></a>
|
<li><a href="cli.html#cmdoption-osxphotos-query-max-size">--max-size <SIZE></a>
|
||||||
</li>
|
</li>
|
||||||
@@ -1901,6 +2009,8 @@
|
|||||||
<li><a href="cli.html#cmdoption-osxphotos-query-no-description">--no-description</a>
|
<li><a href="cli.html#cmdoption-osxphotos-query-no-description">--no-description</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-query-no-likes">--no-likes</a>
|
<li><a href="cli.html#cmdoption-osxphotos-query-no-likes">--no-likes</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-query-no-location">--no-location</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-query-no-place">--no-place</a>
|
<li><a href="cli.html#cmdoption-osxphotos-query-no-place">--no-place</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -1951,10 +2061,14 @@
|
|||||||
<li><a href="cli.html#cmdoption-osxphotos-query-portrait">--portrait</a>
|
<li><a href="cli.html#cmdoption-osxphotos-query-portrait">--portrait</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-query-query-eval">--query-eval <CRITERIA></a>
|
<li><a href="cli.html#cmdoption-osxphotos-query-query-eval">--query-eval <CRITERIA></a>
|
||||||
|
</li>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-query-query-function">--query-function <filename.py::function></a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-query-regex">--regex <REGEX TEMPLATE></a>
|
<li><a href="cli.html#cmdoption-osxphotos-query-regex">--regex <REGEX TEMPLATE></a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-query-screenshot">--screenshot</a>
|
<li><a href="cli.html#cmdoption-osxphotos-query-screenshot">--screenshot</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-query-selected">--selected</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-query-selfie">--selfie</a>
|
<li><a href="cli.html#cmdoption-osxphotos-query-selfie">--selfie</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -1979,6 +2093,20 @@
|
|||||||
<li><a href="cli.html#cmdoption-osxphotos-query-i">-i</a>
|
<li><a href="cli.html#cmdoption-osxphotos-query-i">-i</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="cli.html#cmdoption-osxphotos-query-arg-PHOTOS_LIBRARY">PHOTOS_LIBRARY</a>
|
<li><a href="cli.html#cmdoption-osxphotos-query-arg-PHOTOS_LIBRARY">PHOTOS_LIBRARY</a>
|
||||||
|
</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>
|
||||||
|
osxphotos-repl command line option
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-repl-db">--db <Photos database path></a>
|
||||||
|
</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>
|
||||||
|
osxphotos-tutorial command line option
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-tutorial-arg-WIDTH">WIDTH</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.overall">overall (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.overall">overall (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
||||||
@@ -1989,31 +2117,33 @@
|
|||||||
<h2 id="P">P</h2>
|
<h2 id="P">P</h2>
|
||||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.panorama">panorama() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.panorama">panorama (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.path">path() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.path">path (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.path_derivatives">path_derivatives() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.path_derivatives">path_derivatives (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.path_edited">path_edited() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.path_edited">path_edited (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.path_live_photo">path_live_photo() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.path_edited_live_photo">path_edited_live_photo (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.path_raw">path_raw() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.path_live_photo">path_live_photo (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.person_info">person_info() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.path_raw">path_raw (osxphotos.PhotoInfo property)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="reference.html#osxphotos.PhotoInfo.person_info">person_info (osxphotos.PhotoInfo property)</a>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotosDB.person_info">(osxphotos.PhotosDB property)</a>
|
<li><a href="reference.html#osxphotos.PhotosDB.person_info">(osxphotos.PhotosDB property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.persons">persons() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.persons">persons (osxphotos.PhotoInfo property)</a>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotosDB.persons">(osxphotos.PhotosDB property)</a>
|
<li><a href="reference.html#osxphotos.PhotosDB.persons">(osxphotos.PhotosDB property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
<li><a href="reference.html#osxphotos.PhotosDB.persons_as_dict">persons_as_dict() (osxphotos.PhotosDB property)</a>
|
<li><a href="reference.html#osxphotos.PhotosDB.persons_as_dict">persons_as_dict (osxphotos.PhotosDB property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo">PhotoInfo (class in osxphotos)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo">PhotoInfo (class in osxphotos)</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -2056,9 +2186,9 @@
|
|||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotosDB">PhotosDB (class in osxphotos)</a>
|
<li><a href="reference.html#osxphotos.PhotosDB">PhotosDB (class in osxphotos)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.place">place() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.place">place (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.place_names">place_names() (osxphotos.PhotoInfo.SearchInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.place_names">place_names (osxphotos.PhotoInfo.SearchInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.pleasant_camera_tilt">pleasant_camera_tilt (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.pleasant_camera_tilt">pleasant_camera_tilt (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -2076,7 +2206,7 @@
|
|||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.pleasant_symmetry">pleasant_symmetry (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.pleasant_symmetry">pleasant_symmetry (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.portrait">portrait() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.portrait">portrait (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.promotion">promotion (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.promotion">promotion (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -2094,7 +2224,7 @@
|
|||||||
<h2 id="R">R</h2>
|
<h2 id="R">R</h2>
|
||||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.raw_original">raw_original() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.raw_original">raw_original (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
@@ -2108,33 +2238,33 @@
|
|||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.sample_rate">sample_rate (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.sample_rate">sample_rate (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.score">score() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.score">score (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.screenshot">screenshot() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.screenshot">screenshot (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.search_info">search_info() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.search_info">search_info (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.search_info_normalized">search_info_normalized() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.search_info_normalized">search_info_normalized (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.season">season() (osxphotos.PhotoInfo.SearchInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.season">season (osxphotos.PhotoInfo.SearchInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.selfie">selfie() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.selfie">selfie (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.shared">shared() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.shared">shared (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.sharply_focused_subject">sharply_focused_subject (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.sharply_focused_subject">sharply_focused_subject (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.shutter_speed">shutter_speed (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.shutter_speed">shutter_speed (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.slow_mo">slow_mo() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.slow_mo">slow_mo (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.state">state() (osxphotos.PhotoInfo.SearchInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.state">state (osxphotos.PhotoInfo.SearchInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.state_abbreviation">state_abbreviation() (osxphotos.PhotoInfo.SearchInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.state_abbreviation">state_abbreviation (osxphotos.PhotoInfo.SearchInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.streets">streets() (osxphotos.PhotoInfo.SearchInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.streets">streets (osxphotos.PhotoInfo.SearchInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
@@ -2144,9 +2274,9 @@
|
|||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.tastefully_blurred">tastefully_blurred (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.tastefully_blurred">tastefully_blurred (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.time_lapse">time_lapse() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.time_lapse">time_lapse (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.title">title() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.title">title (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
@@ -2159,7 +2289,7 @@
|
|||||||
</ul></li>
|
</ul></li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.track_format">track_format (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.track_format">track_format (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.tzoffset">tzoffset() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.tzoffset">tzoffset (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
@@ -2167,17 +2297,17 @@
|
|||||||
<h2 id="U">U</h2>
|
<h2 id="U">U</h2>
|
||||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.uti">uti() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.uti">uti (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.uti_edited">uti_edited() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.uti_edited">uti_edited (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.uti_original">uti_original() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.uti_original">uti_original (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.uti_raw">uti_raw() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.uti_raw">uti_raw (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.uuid">uuid() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.uuid">uuid (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
@@ -2185,13 +2315,13 @@
|
|||||||
<h2 id="V">V</h2>
|
<h2 id="V">V</h2>
|
||||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.venue_types">venue_types() (osxphotos.PhotoInfo.SearchInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.venue_types">venue_types (osxphotos.PhotoInfo.SearchInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.venues">venues() (osxphotos.PhotoInfo.SearchInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.venues">venues (osxphotos.PhotoInfo.SearchInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.visible">visible() (osxphotos.PhotoInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.visible">visible (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
@@ -2203,13 +2333,20 @@
|
|||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.well_framed_subject">well_framed_subject (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.well_framed_subject">well_framed_subject (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.well_timed_shot">well_timed_shot (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ScoreInfo.well_timed_shot">well_timed_shot (osxphotos.PhotoInfo.ScoreInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
|
</ul></td>
|
||||||
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.white_balance">white_balance (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.ExifInfo.white_balance">white_balance (osxphotos.PhotoInfo.ExifInfo attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.width">width() (osxphotos.PhotoInfo property)</a>
|
<li>
|
||||||
|
WIDTH
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="cli.html#cmdoption-osxphotos-tutorial-arg-WIDTH">osxphotos-tutorial command line option</a>
|
||||||
|
</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><a href="reference.html#osxphotos.PhotoInfo.width">width (osxphotos.PhotoInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
@@ -2217,7 +2354,7 @@
|
|||||||
<h2 id="Y">Y</h2>
|
<h2 id="Y">Y</h2>
|
||||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.year">year() (osxphotos.PhotoInfo.SearchInfo property)</a>
|
<li><a href="reference.html#osxphotos.PhotoInfo.SearchInfo.year">year (osxphotos.PhotoInfo.SearchInfo property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
@@ -2278,7 +2415,7 @@
|
|||||||
©2021, Rhet Turnbull.
|
©2021, Rhet Turnbull.
|
||||||
|
|
||||||
|
|
|
|
||||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.2</a>
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
|
||||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -5,10 +5,10 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Welcome to osxphotos’s documentation! — osxphotos 0.42.20 documentation</title>
|
<title>Welcome to osxphotos’s documentation! — osxphotos 0.42.66 documentation</title>
|
||||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
|
<link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
|
||||||
<script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
|
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
<script src="_static/jquery.js"></script>
|
<script src="_static/jquery.js"></script>
|
||||||
<script src="_static/underscore.js"></script>
|
<script src="_static/underscore.js"></script>
|
||||||
<script src="_static/doctools.js"></script>
|
<script src="_static/doctools.js"></script>
|
||||||
@@ -45,8 +45,8 @@ You can also easily export both the original and edited photos.</p>
|
|||||||
</div>
|
</div>
|
||||||
<div class="section" id="supported-operating-systems">
|
<div class="section" id="supported-operating-systems">
|
||||||
<h2>Supported operating systems<a class="headerlink" href="#supported-operating-systems" title="Permalink to this headline">¶</a></h2>
|
<h2>Supported operating systems<a class="headerlink" href="#supported-operating-systems" title="Permalink to this headline">¶</a></h2>
|
||||||
<p>Only works on macOS (aka Mac OS X). Tested on macOS Sierra (10.12.6) until macOS Catalina (10.15.7).
|
<p>Only works on macOS (aka Mac OS X). Tested on macOS Sierra (10.12.6) through macOS Big Sur (11.3).</p>
|
||||||
Beta support for macOS Big Sur (10.16.01/11.01).</p>
|
<p>If you have access to macOS 12 / Monterey beta and would like to help ensure osxphotos is compatible, please contact me via GitHub.</p>
|
||||||
<p>This package will read Photos databases for any supported version on any supported macOS version.
|
<p>This package will read Photos databases for any supported version on any supported macOS version.
|
||||||
E.g. you can read a database created with Photos 5.0 on MacOS 10.15 on a machine running macOS 10.12 and vice versa.</p>
|
E.g. you can read a database created with Photos 5.0 on MacOS 10.15 on a machine running macOS 10.12 and vice versa.</p>
|
||||||
<p>Requires python >= <code class="docutils literal notranslate"><span class="pre">3.7</span></code>.</p>
|
<p>Requires python >= <code class="docutils literal notranslate"><span class="pre">3.7</span></code>.</p>
|
||||||
@@ -122,6 +122,8 @@ Alternatively, you can also run the command line utility like this: <code class=
|
|||||||
<span class="n">persons</span> <span class="n">Print</span> <span class="n">out</span> <span class="n">persons</span> <span class="p">(</span><span class="n">faces</span><span class="p">)</span> <span class="n">found</span> <span class="ow">in</span> <span class="n">the</span> <span class="n">Photos</span> <span class="n">library</span><span class="o">.</span>
|
<span class="n">persons</span> <span class="n">Print</span> <span class="n">out</span> <span class="n">persons</span> <span class="p">(</span><span class="n">faces</span><span class="p">)</span> <span class="n">found</span> <span class="ow">in</span> <span class="n">the</span> <span class="n">Photos</span> <span class="n">library</span><span class="o">.</span>
|
||||||
<span class="n">places</span> <span class="n">Print</span> <span class="n">out</span> <span class="n">places</span> <span class="n">found</span> <span class="ow">in</span> <span class="n">the</span> <span class="n">Photos</span> <span class="n">library</span><span class="o">.</span>
|
<span class="n">places</span> <span class="n">Print</span> <span class="n">out</span> <span class="n">places</span> <span class="n">found</span> <span class="ow">in</span> <span class="n">the</span> <span class="n">Photos</span> <span class="n">library</span><span class="o">.</span>
|
||||||
<span class="n">query</span> <span class="n">Query</span> <span class="n">the</span> <span class="n">Photos</span> <span class="n">database</span> <span class="n">using</span> <span class="mi">1</span> <span class="ow">or</span> <span class="n">more</span> <span class="n">search</span> <span class="n">options</span><span class="p">;</span> <span class="k">if</span><span class="o">...</span>
|
<span class="n">query</span> <span class="n">Query</span> <span class="n">the</span> <span class="n">Photos</span> <span class="n">database</span> <span class="n">using</span> <span class="mi">1</span> <span class="ow">or</span> <span class="n">more</span> <span class="n">search</span> <span class="n">options</span><span class="p">;</span> <span class="k">if</span><span class="o">...</span>
|
||||||
|
<span class="n">repl</span> <span class="n">Run</span> <span class="n">interactive</span> <span class="n">osxphotos</span> <span class="n">shell</span>
|
||||||
|
<span class="n">tutorial</span> <span class="n">Display</span> <span class="n">osxphotos</span> <span class="n">tutorial</span><span class="o">.</span>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
<p>To get help on a specific command, use <code class="docutils literal notranslate"><span class="pre">osxphotos</span> <span class="pre">help</span> <span class="pre"><command_name></span></code></p>
|
<p>To get help on a specific command, use <code class="docutils literal notranslate"><span class="pre">osxphotos</span> <span class="pre">help</span> <span class="pre"><command_name></span></code></p>
|
||||||
@@ -292,6 +294,8 @@ Alternatively, you can also run the command line utility like this: <code class=
|
|||||||
<li class="toctree-l3"><a class="reference internal" href="cli.html#osxphotos-persons">persons</a></li>
|
<li class="toctree-l3"><a class="reference internal" href="cli.html#osxphotos-persons">persons</a></li>
|
||||||
<li class="toctree-l3"><a class="reference internal" href="cli.html#osxphotos-places">places</a></li>
|
<li class="toctree-l3"><a class="reference internal" href="cli.html#osxphotos-places">places</a></li>
|
||||||
<li class="toctree-l3"><a class="reference internal" href="cli.html#osxphotos-query">query</a></li>
|
<li class="toctree-l3"><a class="reference internal" href="cli.html#osxphotos-query">query</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="cli.html#osxphotos-repl">repl</a></li>
|
||||||
|
<li class="toctree-l3"><a class="reference internal" href="cli.html#osxphotos-tutorial">tutorial</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -369,7 +373,7 @@ Alternatively, you can also run the command line utility like this: <code class=
|
|||||||
©2021, Rhet Turnbull.
|
©2021, Rhet Turnbull.
|
||||||
|
|
||||||
|
|
|
|
||||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.2</a>
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
|
||||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||||
|
|
||||||
|
|
|
|
||||||
|
|||||||
@@ -5,10 +5,10 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>osxphotos — osxphotos 0.42.20 documentation</title>
|
<title>osxphotos — osxphotos 0.42.66 documentation</title>
|
||||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
|
<link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
|
||||||
<script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
|
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
<script src="_static/jquery.js"></script>
|
<script src="_static/jquery.js"></script>
|
||||||
<script src="_static/underscore.js"></script>
|
<script src="_static/underscore.js"></script>
|
||||||
<script src="_static/doctools.js"></script>
|
<script src="_static/doctools.js"></script>
|
||||||
@@ -91,7 +91,7 @@
|
|||||||
©2021, Rhet Turnbull.
|
©2021, Rhet Turnbull.
|
||||||
|
|
||||||
|
|
|
|
||||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.2</a>
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
|
||||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||||
|
|
||||||
|
|
|
|
||||||
|
|||||||
BIN
docs/objects.inv
BIN
docs/objects.inv
Binary file not shown.
1018
docs/reference.html
1018
docs/reference.html
File diff suppressed because one or more lines are too long
@@ -5,11 +5,11 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Search — osxphotos 0.42.20 documentation</title>
|
<title>Search — osxphotos 0.42.66 documentation</title>
|
||||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
|
<link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
|
||||||
|
|
||||||
<script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
|
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
<script src="_static/jquery.js"></script>
|
<script src="_static/jquery.js"></script>
|
||||||
<script src="_static/underscore.js"></script>
|
<script src="_static/underscore.js"></script>
|
||||||
<script src="_static/doctools.js"></script>
|
<script src="_static/doctools.js"></script>
|
||||||
@@ -37,6 +37,7 @@
|
|||||||
<div class="body" role="main">
|
<div class="body" role="main">
|
||||||
|
|
||||||
<h1 id="search-documentation">Search</h1>
|
<h1 id="search-documentation">Search</h1>
|
||||||
|
|
||||||
<div id="fallback" class="admonition warning">
|
<div id="fallback" class="admonition warning">
|
||||||
<script>$('#fallback').hide();</script>
|
<script>$('#fallback').hide();</script>
|
||||||
<p>
|
<p>
|
||||||
@@ -44,20 +45,27 @@
|
|||||||
functionality.
|
functionality.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Searching for multiple words only shows matches that contain
|
Searching for multiple words only shows matches that contain
|
||||||
all words.
|
all words.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
<form action="" method="get">
|
<form action="" method="get">
|
||||||
<input type="text" name="q" aria-labelledby="search-documentation" value="" />
|
<input type="text" name="q" aria-labelledby="search-documentation" value="" />
|
||||||
<input type="submit" value="search" />
|
<input type="submit" value="search" />
|
||||||
<span id="search-progress" style="padding-left: 10px"></span>
|
<span id="search-progress" style="padding-left: 10px"></span>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div id="search-results">
|
<div id="search-results">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -102,7 +110,7 @@
|
|||||||
©2021, Rhet Turnbull.
|
©2021, Rhet Turnbull.
|
||||||
|
|
||||||
|
|
|
|
||||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.5.2</a>
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
|
||||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
5
requirements_dev.txt
Normal file
5
requirements_dev.txt
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
sphinx_click
|
||||||
|
pytest==6.2.4
|
||||||
|
pytest-mock
|
||||||
|
m2r2
|
||||||
|
|
||||||
Reference in New Issue
Block a user