Bug fix, #695
This commit is contained in:
parent
bc32b1827f
commit
e9cc6ce137
@ -1943,7 +1943,7 @@ cog.out(get_template_field_table())
|
|||||||
|{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.49.6'|
|
|{osxphotos_version}|The osxphotos version, e.g. '0.49.7'|
|
||||||
|{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|
|
||||||
|
|||||||
@ -1850,7 +1850,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.49.6'
|
{osxphotos_version} The osxphotos version, e.g. '0.49.7'
|
||||||
{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
|
The following substitutions may result in multiple values. Thus if specified
|
||||||
@ -4026,7 +4026,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.49.6'|
|
|{osxphotos_version}|The osxphotos version, e.g. '0.49.7'|
|
||||||
|{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: 9a13bee58e47fb931bf3c0ca8a40d758
|
config: 0da8263b5cc3d544b725c487a729f7a1
|
||||||
tags: 645f666f9bcd5a90fca523b33c5a78b7
|
tags: 645f666f9bcd5a90fca523b33c5a78b7
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" />
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" />
|
||||||
|
|
||||||
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/>
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/>
|
||||||
<title>Overview: module code - osxphotos 0.49.6 documentation</title>
|
<title>Overview: module code - osxphotos 0.49.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
<link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
||||||
<link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
|
<link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
|
||||||
@ -123,7 +123,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="../index.html"><div class="brand">osxphotos 0.49.6 documentation</div></a>
|
<a href="../index.html"><div class="brand">osxphotos 0.49.7 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@ -146,7 +146,7 @@
|
|||||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
|
||||||
|
|
||||||
|
|
||||||
<span class="sidebar-brand-text">osxphotos 0.49.6 documentation</span>
|
<span class="sidebar-brand-text">osxphotos 0.49.7 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../genindex.html" /><link rel="search" title="Search" href="../../search.html" />
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../genindex.html" /><link rel="search" title="Search" href="../../search.html" />
|
||||||
|
|
||||||
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/>
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/>
|
||||||
<title>osxphotos.export_db - osxphotos 0.49.4 documentation</title>
|
<title>osxphotos.export_db - osxphotos 0.49.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
||||||
<link rel="stylesheet" type="text/css" href="../../_static/copybutton.css" />
|
<link rel="stylesheet" type="text/css" href="../../_static/copybutton.css" />
|
||||||
@ -123,7 +123,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="../../index.html"><div class="brand">osxphotos 0.49.4 documentation</div></a>
|
<a href="../../index.html"><div class="brand">osxphotos 0.49.7 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@ -146,7 +146,7 @@
|
|||||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../index.html">
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../index.html">
|
||||||
|
|
||||||
|
|
||||||
<span class="sidebar-brand-text">osxphotos 0.49.4 documentation</span>
|
<span class="sidebar-brand-text">osxphotos 0.49.7 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="../../search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="../../search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
@ -202,8 +202,10 @@
|
|||||||
<span class="kn">import</span> <span class="nn">json</span>
|
<span class="kn">import</span> <span class="nn">json</span>
|
||||||
<span class="kn">import</span> <span class="nn">logging</span>
|
<span class="kn">import</span> <span class="nn">logging</span>
|
||||||
<span class="kn">import</span> <span class="nn">os</span>
|
<span class="kn">import</span> <span class="nn">os</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">import</span> <span class="nn">pickle</span>
|
<span class="kn">import</span> <span class="nn">pickle</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">re</span>
|
||||||
<span class="kn">import</span> <span class="nn">sqlite3</span>
|
<span class="kn">import</span> <span class="nn">sqlite3</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">time</span>
|
<span class="kn">import</span> <span class="nn">time</span>
|
||||||
@ -211,7 +213,7 @@
|
|||||||
<span class="kn">from</span> <span class="nn">io</span> <span class="kn">import</span> <span class="n">StringIO</span>
|
<span class="kn">from</span> <span class="nn">io</span> <span class="kn">import</span> <span class="n">StringIO</span>
|
||||||
<span class="kn">from</span> <span class="nn">sqlite3</span> <span class="kn">import</span> <span class="n">Error</span>
|
<span class="kn">from</span> <span class="nn">sqlite3</span> <span class="kn">import</span> <span class="n">Error</span>
|
||||||
<span class="kn">from</span> <span class="nn">tempfile</span> <span class="kn">import</span> <span class="n">TemporaryDirectory</span>
|
<span class="kn">from</span> <span class="nn">tempfile</span> <span class="kn">import</span> <span class="n">TemporaryDirectory</span>
|
||||||
<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Any</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">,</span> <span class="n">Union</span><span class="p">,</span> <span class="n">List</span>
|
<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Any</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">,</span> <span class="n">Union</span>
|
||||||
|
|
||||||
<span class="kn">from</span> <span class="nn">tenacity</span> <span class="kn">import</span> <span class="n">retry</span><span class="p">,</span> <span class="n">stop_after_attempt</span>
|
<span class="kn">from</span> <span class="nn">tenacity</span> <span class="kn">import</span> <span class="n">retry</span><span class="p">,</span> <span class="n">stop_after_attempt</span>
|
||||||
|
|
||||||
@ -405,6 +407,35 @@
|
|||||||
<span class="k">except</span> <span class="n">Error</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
<span class="k">except</span> <span class="n">Error</span> <span class="k">as</span> <span class="n">e</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">e</span><span class="p">)</span></div>
|
<span class="n">logging</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">e</span><span class="p">)</span></div>
|
||||||
|
|
||||||
|
<div class="viewcode-block" id="ExportDB.get_target_for_file"><a class="viewcode-back" href="../../reference.html#osxphotos.ExportDB.get_target_for_file">[docs]</a> <span class="k">def</span> <span class="nf">get_target_for_file</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="nb">str</span><span class="p">,</span> <span class="n">filename</span><span class="p">:</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</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="p">)</span> <span class="o">-></span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
|
||||||
|
<span class="sd">"""query database for file matching file name and return the matching filename if there is one;</span>
|
||||||
|
<span class="sd"> otherwise return None; looks for file.ext, file (1).ext, file (2).ext and so on to find the</span>
|
||||||
|
<span class="sd"> actual target name that was used to export filename</span>
|
||||||
|
|
||||||
|
<span class="sd"> Returns: the matching filename or None if no match found</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
<span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_conn</span>
|
||||||
|
<span class="n">c</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span>
|
||||||
|
<span class="n">filepath_normalized</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_filepath_relative</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
|
||||||
|
<span class="n">filepath_stem</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">splitext</span><span class="p">(</span><span class="n">filepath_normalized</span><span class="p">)[</span><span class="mi">0</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="s2">"SELECT uuid, filepath, filepath_normalized FROM export_data WHERE uuid = ? AND filepath_normalized LIKE ?"</span><span class="p">,</span>
|
||||||
|
<span class="p">(</span>
|
||||||
|
<span class="n">uuid</span><span class="p">,</span>
|
||||||
|
<span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">filepath_stem</span><span class="si">}</span><span class="s2">%"</span><span class="p">,</span>
|
||||||
|
<span class="p">),</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
<span class="n">results</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">fetchall</span><span class="p">()</span>
|
||||||
|
|
||||||
|
<span class="k">for</span> <span class="n">result</span> <span class="ow">in</span> <span class="n">results</span><span class="p">:</span>
|
||||||
|
<span class="n">filepath_normalized</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">splitext</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="mi">2</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
|
<span class="k">if</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">re</span><span class="o">.</span><span class="n">escape</span><span class="p">(</span><span class="n">filepath_stem</span><span class="p">)</span> <span class="o">+</span> <span class="sa">r</span><span class="s2">"(\s\(\d+\))?$"</span><span class="p">,</span> <span class="n">filepath_normalized</span><span class="p">):</span>
|
||||||
|
<span class="k">return</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">export_dir</span><span class="p">,</span> <span class="n">result</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="kc">None</span></div>
|
||||||
|
|
||||||
<div class="viewcode-block" id="ExportDB.get_previous_uuids"><a class="viewcode-back" href="../../reference.html#osxphotos.ExportDB.get_previous_uuids">[docs]</a> <span class="k">def</span> <span class="nf">get_previous_uuids</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
<div class="viewcode-block" id="ExportDB.get_previous_uuids"><a class="viewcode-back" href="../../reference.html#osxphotos.ExportDB.get_previous_uuids">[docs]</a> <span class="k">def</span> <span class="nf">get_previous_uuids</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
<span class="sd">"""returns list of UUIDs of previously exported photos found in export database"""</span>
|
<span class="sd">"""returns list of UUIDs of previously exported photos found in export database"""</span>
|
||||||
<span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_conn</span>
|
<span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_conn</span>
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../genindex.html" /><link rel="search" title="Search" href="../../search.html" />
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../genindex.html" /><link rel="search" title="Search" href="../../search.html" />
|
||||||
|
|
||||||
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/>
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/>
|
||||||
<title>osxphotos.photoexporter - osxphotos 0.49.2 documentation</title>
|
<title>osxphotos.photoexporter - osxphotos 0.49.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
<link rel="stylesheet" type="text/css" href="../../_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
||||||
<link rel="stylesheet" type="text/css" href="../../_static/copybutton.css" />
|
<link rel="stylesheet" type="text/css" href="../../_static/copybutton.css" />
|
||||||
@ -123,7 +123,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="../../index.html"><div class="brand">osxphotos 0.49.2 documentation</div></a>
|
<a href="../../index.html"><div class="brand">osxphotos 0.49.7 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@ -146,7 +146,7 @@
|
|||||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../index.html">
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../index.html">
|
||||||
|
|
||||||
|
|
||||||
<span class="sidebar-brand-text">osxphotos 0.49.2 documentation</span>
|
<span class="sidebar-brand-text">osxphotos 0.49.7 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="../../search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="../../search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
@ -240,7 +240,13 @@
|
|||||||
<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">.phototemplate</span> <span class="kn">import</span> <span class="n">RenderOptions</span>
|
||||||
<span class="kn">from</span> <span class="nn">.rich_utils</span> <span class="kn">import</span> <span class="n">add_rich_markup_tag</span>
|
<span class="kn">from</span> <span class="nn">.rich_utils</span> <span class="kn">import</span> <span class="n">add_rich_markup_tag</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">.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">hexdigest</span><span class="p">,</span> <span class="n">increment_filename</span><span class="p">,</span> <span class="n">lineno</span><span class="p">,</span> <span class="n">list_directory</span>
|
<span class="kn">from</span> <span class="nn">.utils</span> <span class="kn">import</span> <span class="p">(</span>
|
||||||
|
<span class="n">hexdigest</span><span class="p">,</span>
|
||||||
|
<span class="n">increment_filename</span><span class="p">,</span>
|
||||||
|
<span class="n">increment_filename_with_count</span><span class="p">,</span>
|
||||||
|
<span class="n">lineno</span><span class="p">,</span>
|
||||||
|
<span class="n">list_directory</span><span class="p">,</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
|
||||||
<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span>
|
<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span>
|
||||||
<span class="s2">"ExportError"</span><span class="p">,</span>
|
<span class="s2">"ExportError"</span><span class="p">,</span>
|
||||||
@ -684,7 +690,7 @@
|
|||||||
<span class="n">src</span> <span class="o">=</span> <span class="n">staged_files</span><span class="o">.</span><span class="n">edited</span> <span class="k">if</span> <span class="n">options</span><span class="o">.</span><span class="n">edited</span> <span class="k">else</span> <span class="n">staged_files</span><span class="o">.</span><span class="n">original</span>
|
<span class="n">src</span> <span class="o">=</span> <span class="n">staged_files</span><span class="o">.</span><span class="n">edited</span> <span class="k">if</span> <span class="n">options</span><span class="o">.</span><span class="n">edited</span> <span class="k">else</span> <span class="n">staged_files</span><span class="o">.</span><span class="n">original</span>
|
||||||
|
|
||||||
<span class="c1"># get the right destination path depending on options.update, etc.</span>
|
<span class="c1"># get the right destination path depending on options.update, etc.</span>
|
||||||
<span class="n">dest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_dest_path</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">dest</span><span class="p">,</span> <span class="n">options</span><span class="p">)</span>
|
<span class="n">dest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_dest_path</span><span class="p">(</span><span class="n">dest</span><span class="p">,</span> <span class="n">options</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="nb">str</span><span class="p">(</span><span class="n">dest</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="nb">str</span><span class="p">(</span><span class="n">dest</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>
|
||||||
@ -838,12 +844,11 @@
|
|||||||
<span class="k">return</span> <span class="n">edited_filename</span>
|
<span class="k">return</span> <span class="n">edited_filename</span>
|
||||||
|
|
||||||
<span class="k">def</span> <span class="nf">_get_dest_path</span><span class="p">(</span>
|
<span class="k">def</span> <span class="nf">_get_dest_path</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="nb">str</span><span class="p">,</span> <span class="n">dest</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">options</span><span class="p">:</span> <span class="n">ExportOptions</span>
|
<span class="bp">self</span><span class="p">,</span> <span class="n">dest</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">options</span><span class="p">:</span> <span class="n">ExportOptions</span>
|
||||||
<span class="p">)</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="p">)</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="sd">"""If destination exists find match in ExportDB, on disk, or add (1), (2), and so on to filename to get a valid destination</span>
|
<span class="sd">"""If destination exists find match in ExportDB, on disk, or add (1), (2), and so on to filename to get a valid destination</span>
|
||||||
|
|
||||||
<span class="sd"> Args:</span>
|
<span class="sd"> Args:</span>
|
||||||
<span class="sd"> src (str): source file path</span>
|
|
||||||
<span class="sd"> dest (str): destination path</span>
|
<span class="sd"> dest (str): destination path</span>
|
||||||
<span class="sd"> options (ExportOptions): Export options</span>
|
<span class="sd"> options (ExportOptions): Export options</span>
|
||||||
|
|
||||||
@ -859,6 +864,10 @@
|
|||||||
<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">options</span><span class="o">.</span><span class="n">overwrite</span><span class="si">}</span><span class="s2">, increment=</span><span class="si">{</span><span class="n">options</span><span class="o">.</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</span><span class="si">}</span><span class="s2">); overwrite=</span><span class="si">{</span><span class="n">options</span><span class="o">.</span><span class="n">overwrite</span><span class="si">}</span><span class="s2">, increment=</span><span class="si">{</span><span class="n">options</span><span class="o">.</span><span class="n">increment</span><span class="si">}</span><span class="s2">"</span>
|
||||||
<span class="p">)</span>
|
<span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># if overwrite, we don't care if the file exists or not</span>
|
||||||
|
<span class="k">if</span> <span class="n">options</span><span class="o">.</span><span class="n">overwrite</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="n">dest</span>
|
||||||
|
|
||||||
<span class="c1"># if not update or overwrite, check to see if file exists and if so, add (1), (2), etc</span>
|
<span class="c1"># if not update or overwrite, check to see if file exists and if so, add (1), (2), etc</span>
|
||||||
<span class="c1"># until we find one that works</span>
|
<span class="c1"># 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>
|
||||||
@ -871,29 +880,36 @@
|
|||||||
<span class="k">return</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">increment_filename</span><span class="p">(</span><span class="n">dest</span><span class="p">))</span>
|
<span class="k">return</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">increment_filename</span><span class="p">(</span><span class="n">dest</span><span class="p">))</span>
|
||||||
|
|
||||||
<span class="c1"># if update and file exists, need to check to see if it's the right file by checking export db</span>
|
<span class="c1"># if update and file exists, need to check to see if it's the right file by checking export db</span>
|
||||||
<span class="k">if</span> <span class="p">(</span><span class="n">options</span><span class="o">.</span><span class="n">update</span> <span class="ow">or</span> <span class="n">options</span><span class="o">.</span><span class="n">force_update</span><span class="p">)</span> <span class="ow">and</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="n">src</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">options</span><span class="o">.</span><span class="n">update</span> <span class="ow">or</span> <span class="n">options</span><span class="o">.</span><span class="n">force_update</span><span class="p">:</span>
|
||||||
<span class="n">export_db</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">export_db</span>
|
<span class="n">export_db</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">export_db</span>
|
||||||
<span class="c1"># destination exists, check to see if destination is the right UUID</span>
|
|
||||||
<span class="n">dest_uuid</span> <span class="o">=</span> <span class="n">export_db</span><span class="o">.</span><span class="n">get_uuid_for_file</span><span class="p">(</span><span class="n">dest</span><span class="p">)</span>
|
<span class="n">dest_uuid</span> <span class="o">=</span> <span class="n">export_db</span><span class="o">.</span><span class="n">get_uuid_for_file</span><span class="p">(</span><span class="n">dest</span><span class="p">)</span>
|
||||||
<span class="k">if</span> <span class="n">dest_uuid</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">photo</span><span class="o">.</span><span class="n">uuid</span><span class="p">:</span>
|
<span class="k">if</span> <span class="n">dest_uuid</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">dest</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
||||||
<span class="c1"># not the right file, find the right one</span>
|
<span class="c1"># destination doesn't exist in export db and doesn't exist on disk</span>
|
||||||
<span class="c1"># find files that match "dest_name (*.ext" (e.g. "dest_name (1).jpg", "dest_name (2).jpg)", ...)</span>
|
<span class="c1"># so we can just use it</span>
|
||||||
<span class="n">dest_files</span> <span class="o">=</span> <span class="n">list_directory</span><span class="p">(</span>
|
<span class="k">return</span> <span class="n">dest</span>
|
||||||
<span class="n">dest</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span>
|
|
||||||
<span class="n">startswith</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="p">,</span>
|
|
||||||
<span class="n">endswith</span><span class="o">=</span><span class="n">dest</span><span class="o">.</span><span class="n">suffix</span><span class="p">,</span>
|
|
||||||
<span class="n">include_path</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
||||||
<span class="p">)</span>
|
|
||||||
<span class="k">for</span> <span class="n">file_</span> <span class="ow">in</span> <span class="n">dest_files</span><span class="p">:</span>
|
|
||||||
<span class="n">dest_uuid</span> <span class="o">=</span> <span class="n">export_db</span><span class="o">.</span><span class="n">get_uuid_for_file</span><span class="p">(</span><span class="n">file_</span><span class="p">)</span>
|
|
||||||
<span class="k">if</span> <span class="n">dest_uuid</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">photo</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">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">file_</span><span class="p">)</span>
|
|
||||||
<span class="k">break</span>
|
|
||||||
<span class="k">else</span><span class="p">:</span>
|
|
||||||
<span class="c1"># increment the destination file</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">increment_filename</span><span class="p">(</span><span class="n">dest</span><span class="p">))</span>
|
|
||||||
|
|
||||||
<span class="c1"># either dest was updated in the if clause above or not updated at all</span>
|
<span class="k">if</span> <span class="n">dest_uuid</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">photo</span><span class="o">.</span><span class="n">uuid</span><span class="p">:</span>
|
||||||
|
<span class="c1"># destination is the right file</span>
|
||||||
|
<span class="k">return</span> <span class="n">dest</span>
|
||||||
|
|
||||||
|
<span class="c1"># either dest_uuid is wrong or file exists and there's no associated UUID, so find a name that matches</span>
|
||||||
|
<span class="c1"># or create a new name if no match</span>
|
||||||
|
<span class="c1"># find files that match "dest_name (*.ext" (e.g. "dest_name (1).jpg", "dest_name (2).jpg)", ...)</span>
|
||||||
|
<span class="c1"># first, find all matching files in export db and see if there's a match</span>
|
||||||
|
<span class="k">if</span> <span class="n">dest_target</span> <span class="o">:=</span> <span class="n">export_db</span><span class="o">.</span><span class="n">get_target_for_file</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">photo</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="n">dest</span><span class="p">):</span>
|
||||||
|
<span class="c1"># there's a match so use that</span>
|
||||||
|
<span class="k">return</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">dest_target</span><span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="c1"># no match so need to create a new name</span>
|
||||||
|
<span class="c1"># increment the destination file until we find one that doesn't exist and doesn't match another uuid in the database</span>
|
||||||
|
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
|
||||||
|
<span class="n">dest</span><span class="p">,</span> <span class="n">count</span> <span class="o">=</span> <span class="n">increment_filename_with_count</span><span class="p">(</span><span class="n">dest</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
|
||||||
|
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||||
|
<span class="k">while</span> <span class="n">export_db</span><span class="o">.</span><span class="n">get_uuid_for_file</span><span class="p">(</span><span class="n">dest</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="n">dest</span><span class="p">,</span> <span class="n">count</span> <span class="o">=</span> <span class="n">increment_filename_with_count</span><span class="p">(</span><span class="n">dest</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
|
||||||
|
<span class="k">return</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="c1"># fail safe...I can't think of a case that gets here</span>
|
||||||
<span class="k">return</span> <span class="n">dest</span>
|
<span class="k">return</span> <span class="n">dest</span>
|
||||||
|
|
||||||
<span class="k">def</span> <span class="nf">_should_update_photo</span><span class="p">(</span>
|
<span class="k">def</span> <span class="nf">_should_update_photo</span><span class="p">(</span>
|
||||||
@ -1232,9 +1248,9 @@
|
|||||||
|
|
||||||
<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> <span class="nb">str</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="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">,</span>
|
||||||
<span class="n">options</span><span class="p">,</span>
|
<span class="n">options</span><span class="p">:</span> <span class="n">ExportOptions</span><span class="p">,</span>
|
||||||
<span class="p">):</span>
|
<span class="p">):</span>
|
||||||
<span class="sd">"""Helper function for export()</span>
|
<span class="sd">"""Helper function for export()</span>
|
||||||
<span class="sd"> Does the actual copy or hardlink taking the appropriate</span>
|
<span class="sd"> Does the actual copy or hardlink taking the appropriate</span>
|
||||||
@ -1640,7 +1656,7 @@
|
|||||||
<span class="p">)</span> <span class="o">-></span> <span class="n">ExportResults</span><span class="p">:</span>
|
<span class="p">)</span> <span class="o">-></span> <span class="n">ExportResults</span><span class="p">:</span>
|
||||||
<span class="sd">"""Write exif metadata to src file using exiftool</span>
|
<span class="sd">"""Write exif metadata to src file using exiftool</span>
|
||||||
|
|
||||||
<span class="sd"> Caution: This method modifies *src*, not *dest*, </span>
|
<span class="sd"> Caution: This method modifies *src*, not *dest*,</span>
|
||||||
<span class="sd"> so src must be a copy of the original file if you don't want the source modified;</span>
|
<span class="sd"> so src must be a copy of the original file if you don't want the source modified;</span>
|
||||||
<span class="sd"> it also does not write to dest (dest is the intended destination for purposes of</span>
|
<span class="sd"> it also does not write to dest (dest is the intended destination for purposes of</span>
|
||||||
<span class="sd"> referencing the export database. This allows the exiftool update to be done on the</span>
|
<span class="sd"> referencing the export database. This allows the exiftool update to be done on the</span>
|
||||||
|
|||||||
@ -320,7 +320,7 @@ Template Substitutions
|
|||||||
* - {crlf}
|
* - {crlf}
|
||||||
- a carriage return + line feed: '\r\n'
|
- a carriage return + line feed: '\r\n'
|
||||||
* - {osxphotos_version}
|
* - {osxphotos_version}
|
||||||
- The osxphotos version, e.g. '0.49.6'
|
- The osxphotos version, e.g. '0.49.7'
|
||||||
* - {osxphotos_cmd_line}
|
* - {osxphotos_cmd_line}
|
||||||
- The full command line used to run osxphotos
|
- The full command line used to run osxphotos
|
||||||
* - {album}
|
* - {album}
|
||||||
|
|||||||
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.49.6',
|
VERSION: '0.49.7',
|
||||||
LANGUAGE: 'None',
|
LANGUAGE: 'None',
|
||||||
COLLAPSE_INDEX: false,
|
COLLAPSE_INDEX: false,
|
||||||
BUILDER: 'html',
|
BUILDER: 'html',
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="OSXPhotos Template System" href="template_help.html" /><link rel="prev" title="OSXPhotos Tutorial" href="tutorial.html" />
|
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="OSXPhotos Template System" href="template_help.html" /><link rel="prev" title="OSXPhotos Tutorial" href="tutorial.html" />
|
||||||
|
|
||||||
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/>
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/>
|
||||||
<title>OSXPhotos Command Line Interface (CLI) - osxphotos 0.49.6 documentation</title>
|
<title>OSXPhotos Command Line Interface (CLI) - osxphotos 0.49.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
|
||||||
@ -124,7 +124,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">osxphotos 0.49.6 documentation</div></a>
|
<a href="index.html"><div class="brand">osxphotos 0.49.7 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@ -147,7 +147,7 @@
|
|||||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
<span class="sidebar-brand-text">osxphotos 0.49.6 documentation</span>
|
<span class="sidebar-brand-text">osxphotos 0.49.7 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="#" /><link rel="search" title="Search" href="search.html" />
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="#" /><link rel="search" title="Search" href="search.html" />
|
||||||
|
|
||||||
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/><title>Index - osxphotos 0.49.6 documentation</title>
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/><title>Index - osxphotos 0.49.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
|
||||||
@ -122,7 +122,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">osxphotos 0.49.6 documentation</div></a>
|
<a href="index.html"><div class="brand">osxphotos 0.49.7 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@ -145,7 +145,7 @@
|
|||||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
<span class="sidebar-brand-text">osxphotos 0.49.6 documentation</span>
|
<span class="sidebar-brand-text">osxphotos 0.49.7 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
@ -2500,11 +2500,13 @@
|
|||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoTemplate.get_photo_video_type">get_photo_video_type() (osxphotos.PhotoTemplate method)</a>
|
<li><a href="reference.html#osxphotos.PhotoTemplate.get_photo_video_type">get_photo_video_type() (osxphotos.PhotoTemplate method)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
|
||||||
<li><a href="reference.html#osxphotos.ExportDB.get_photoinfo_for_uuid">get_photoinfo_for_uuid() (osxphotos.ExportDB method)</a>
|
<li><a href="reference.html#osxphotos.ExportDB.get_photoinfo_for_uuid">get_photoinfo_for_uuid() (osxphotos.ExportDB method)</a>
|
||||||
</li>
|
</li>
|
||||||
|
</ul></td>
|
||||||
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="reference.html#osxphotos.ExportDB.get_previous_uuids">get_previous_uuids() (osxphotos.ExportDB method)</a>
|
<li><a href="reference.html#osxphotos.ExportDB.get_previous_uuids">get_previous_uuids() (osxphotos.ExportDB method)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="reference.html#osxphotos.ExportDB.get_target_for_file">get_target_for_file() (osxphotos.ExportDB method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="reference.html#osxphotos.PhotoTemplate.get_template_value">get_template_value() (osxphotos.PhotoTemplate method)</a>
|
<li><a href="reference.html#osxphotos.PhotoTemplate.get_template_value">get_template_value() (osxphotos.PhotoTemplate method)</a>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="OSXPhotos" href="overview.html" />
|
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="OSXPhotos" href="overview.html" />
|
||||||
|
|
||||||
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/>
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/>
|
||||||
<title>osxphotos 0.49.6 documentation</title>
|
<title>osxphotos 0.49.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
|
||||||
@ -124,7 +124,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="#"><div class="brand">osxphotos 0.49.6 documentation</div></a>
|
<a href="#"><div class="brand">osxphotos 0.49.7 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@ -147,7 +147,7 @@
|
|||||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="#">
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="#">
|
||||||
|
|
||||||
|
|
||||||
<span class="sidebar-brand-text">osxphotos 0.49.6 documentation</span>
|
<span class="sidebar-brand-text">osxphotos 0.49.7 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
|||||||
BIN
docs/objects.inv
BIN
docs/objects.inv
Binary file not shown.
@ -6,7 +6,7 @@
|
|||||||
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="OSXPhotos Tutorial" href="tutorial.html" /><link rel="prev" title="Welcome to OSXPhotos’s documentation!" href="index.html" />
|
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="OSXPhotos Tutorial" href="tutorial.html" /><link rel="prev" title="Welcome to OSXPhotos’s documentation!" href="index.html" />
|
||||||
|
|
||||||
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/>
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/>
|
||||||
<title>OSXPhotos - osxphotos 0.49.6 documentation</title>
|
<title>OSXPhotos - osxphotos 0.49.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
|
||||||
@ -124,7 +124,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">osxphotos 0.49.6 documentation</div></a>
|
<a href="index.html"><div class="brand">osxphotos 0.49.7 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@ -147,7 +147,7 @@
|
|||||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
<span class="sidebar-brand-text">osxphotos 0.49.6 documentation</span>
|
<span class="sidebar-brand-text">osxphotos 0.49.7 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="OSXPhotos python API" href="reference.html" /><link rel="prev" title="OSXPhotos Template System" href="template_help.html" />
|
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="OSXPhotos python API" href="reference.html" /><link rel="prev" title="OSXPhotos Template System" href="template_help.html" />
|
||||||
|
|
||||||
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/>
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/>
|
||||||
<title>OSXPhotos Python Package Overview - osxphotos 0.49.6 documentation</title>
|
<title>OSXPhotos Python Package Overview - osxphotos 0.49.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
|
||||||
@ -124,7 +124,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">osxphotos 0.49.6 documentation</div></a>
|
<a href="index.html"><div class="brand">osxphotos 0.49.7 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@ -147,7 +147,7 @@
|
|||||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
<span class="sidebar-brand-text">osxphotos 0.49.6 documentation</span>
|
<span class="sidebar-brand-text">osxphotos 0.49.7 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" />
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" />
|
||||||
|
|
||||||
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/><title>Python Module Index - osxphotos 0.49.6 documentation</title>
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/><title>Python Module Index - osxphotos 0.49.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
|
||||||
@ -122,7 +122,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">osxphotos 0.49.6 documentation</div></a>
|
<a href="index.html"><div class="brand">osxphotos 0.49.7 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@ -145,7 +145,7 @@
|
|||||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
<span class="sidebar-brand-text">osxphotos 0.49.6 documentation</span>
|
<span class="sidebar-brand-text">osxphotos 0.49.7 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="prev" title="OSXPhotos Python Package Overview" href="package_overview.html" />
|
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="prev" title="OSXPhotos Python Package Overview" href="package_overview.html" />
|
||||||
|
|
||||||
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/>
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/>
|
||||||
<title>OSXPhotos python API - osxphotos 0.49.6 documentation</title>
|
<title>OSXPhotos python API - osxphotos 0.49.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
|
||||||
@ -124,7 +124,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">osxphotos 0.49.6 documentation</div></a>
|
<a href="index.html"><div class="brand">osxphotos 0.49.7 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@ -147,7 +147,7 @@
|
|||||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
<span class="sidebar-brand-text">osxphotos 0.49.6 documentation</span>
|
<span class="sidebar-brand-text">osxphotos 0.49.7 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
@ -438,6 +438,16 @@ If called in context manager, returns True (execution is delayed until exiting c
|
|||||||
<dd><p>returns list of UUIDs of previously exported photos found in export database</p>
|
<dd><p>returns list of UUIDs of previously exported photos found in export database</p>
|
||||||
</dd></dl>
|
</dd></dl>
|
||||||
<dl class="py method">
|
<dl class="py method">
|
||||||
|
<dt class="sig sig-object py" id="osxphotos.ExportDB.get_target_for_file">
|
||||||
|
<span class="sig-name descname"><span class="pre">get_target_for_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">uuid</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">filename</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">pathlib.Path</span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span></span><a class="reference internal" href="_modules/osxphotos/export_db.html#ExportDB.get_target_for_file"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#osxphotos.ExportDB.get_target_for_file" title="Permalink to this definition">#</a></dt>
|
||||||
|
<dd><dl class="simple">
|
||||||
|
<dt>query database for file matching file name and return the matching filename if there is one;</dt><dd><p>otherwise return None; looks for file.ext, file (1).ext, file (2).ext and so on to find the
|
||||||
|
actual target name that was used to export filename</p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<p>Returns: the matching filename or None if no match found</p>
|
||||||
|
</dd></dl>
|
||||||
|
<dl class="py method">
|
||||||
<dt class="sig sig-object py" id="osxphotos.ExportDB.get_uuid_for_file">
|
<dt class="sig sig-object py" id="osxphotos.ExportDB.get_uuid_for_file">
|
||||||
<span class="sig-name descname"><span class="pre">get_uuid_for_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filename</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/osxphotos/export_db.html#ExportDB.get_uuid_for_file"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#osxphotos.ExportDB.get_uuid_for_file" title="Permalink to this definition">#</a></dt>
|
<span class="sig-name descname"><span class="pre">get_uuid_for_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filename</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/osxphotos/export_db.html#ExportDB.get_uuid_for_file"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#osxphotos.ExportDB.get_uuid_for_file" title="Permalink to this definition">#</a></dt>
|
||||||
<dd><p>query database for filename and return UUID
|
<dd><p>query database for filename and return UUID
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||||
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="#" />
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="#" />
|
||||||
|
|
||||||
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/><title>Search - osxphotos 0.49.6 documentation</title><link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/><title>Search - osxphotos 0.49.7 documentation</title><link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
|
||||||
@ -121,7 +121,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">osxphotos 0.49.6 documentation</div></a>
|
<a href="index.html"><div class="brand">osxphotos 0.49.7 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@ -144,7 +144,7 @@
|
|||||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
<span class="sidebar-brand-text">osxphotos 0.49.6 documentation</span>
|
<span class="sidebar-brand-text">osxphotos 0.49.7 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="#" role="search">
|
</a><form class="sidebar-search-container" method="get" action="#" role="search">
|
||||||
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@ -6,7 +6,7 @@
|
|||||||
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="OSXPhotos Python Package Overview" href="package_overview.html" /><link rel="prev" title="OSXPhotos Command Line Interface (CLI)" href="cli.html" />
|
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="OSXPhotos Python Package Overview" href="package_overview.html" /><link rel="prev" title="OSXPhotos Command Line Interface (CLI)" href="cli.html" />
|
||||||
|
|
||||||
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/>
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/>
|
||||||
<title>OSXPhotos Template System - osxphotos 0.49.6 documentation</title>
|
<title>OSXPhotos Template System - osxphotos 0.49.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
|
||||||
@ -124,7 +124,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">osxphotos 0.49.6 documentation</div></a>
|
<a href="index.html"><div class="brand">osxphotos 0.49.7 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@ -147,7 +147,7 @@
|
|||||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
<span class="sidebar-brand-text">osxphotos 0.49.6 documentation</span>
|
<span class="sidebar-brand-text">osxphotos 0.49.7 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
@ -567,7 +567,7 @@
|
|||||||
<td><p>a carriage return + line feed: ‘rn’</p></td>
|
<td><p>a carriage return + line feed: ‘rn’</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-odd"><td><p>{osxphotos_version}</p></td>
|
<tr class="row-odd"><td><p>{osxphotos_version}</p></td>
|
||||||
<td><p>The osxphotos version, e.g. ‘0.49.6’</p></td>
|
<td><p>The osxphotos version, e.g. ‘0.49.7’</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-even"><td><p>{osxphotos_cmd_line}</p></td>
|
<tr class="row-even"><td><p>{osxphotos_cmd_line}</p></td>
|
||||||
<td><p>The full command line used to run osxphotos</p></td>
|
<td><p>The full command line used to run osxphotos</p></td>
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="OSXPhotos Command Line Interface (CLI)" href="cli.html" /><link rel="prev" title="OSXPhotos" href="overview.html" />
|
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="OSXPhotos Command Line Interface (CLI)" href="cli.html" /><link rel="prev" title="OSXPhotos" href="overview.html" />
|
||||||
|
|
||||||
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/>
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.04.07"/>
|
||||||
<title>OSXPhotos Tutorial - osxphotos 0.49.6 documentation</title>
|
<title>OSXPhotos Tutorial - osxphotos 0.49.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=68f4518137b9aefe99b631505a2064c3c42c9852" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
|
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
|
||||||
@ -124,7 +124,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-center">
|
<div class="header-center">
|
||||||
<a href="index.html"><div class="brand">osxphotos 0.49.6 documentation</div></a>
|
<a href="index.html"><div class="brand">osxphotos 0.49.7 documentation</div></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-right">
|
<div class="header-right">
|
||||||
<div class="theme-toggle-container theme-toggle-header">
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
@ -147,7 +147,7 @@
|
|||||||
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
<span class="sidebar-brand-text">osxphotos 0.49.6 documentation</span>
|
<span class="sidebar-brand-text">osxphotos 0.49.7 documentation</span>
|
||||||
|
|
||||||
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
|||||||
@ -320,7 +320,7 @@ Template Substitutions
|
|||||||
* - {crlf}
|
* - {crlf}
|
||||||
- a carriage return + line feed: '\r\n'
|
- a carriage return + line feed: '\r\n'
|
||||||
* - {osxphotos_version}
|
* - {osxphotos_version}
|
||||||
- The osxphotos version, e.g. '0.49.6'
|
- The osxphotos version, e.g. '0.49.7'
|
||||||
* - {osxphotos_cmd_line}
|
* - {osxphotos_cmd_line}
|
||||||
- The full command line used to run osxphotos
|
- The full command line used to run osxphotos
|
||||||
* - {album}
|
* - {album}
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
""" version info """
|
""" version info """
|
||||||
|
|
||||||
__version__ = "0.49.6"
|
__version__ = "0.49.7"
|
||||||
|
|||||||
Binary file not shown.
@ -6,8 +6,10 @@ import gzip
|
|||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
import os.path
|
||||||
import pathlib
|
import pathlib
|
||||||
import pickle
|
import pickle
|
||||||
|
import re
|
||||||
import sqlite3
|
import sqlite3
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
@ -15,7 +17,7 @@ from contextlib import suppress
|
|||||||
from io import StringIO
|
from io import StringIO
|
||||||
from sqlite3 import Error
|
from sqlite3 import Error
|
||||||
from tempfile import TemporaryDirectory
|
from tempfile import TemporaryDirectory
|
||||||
from typing import Any, Optional, Tuple, Union, List
|
from typing import Any, List, Optional, Tuple, Union
|
||||||
|
|
||||||
from tenacity import retry, stop_after_attempt
|
from tenacity import retry, stop_after_attempt
|
||||||
|
|
||||||
@ -209,6 +211,35 @@ class ExportDB:
|
|||||||
except Error as e:
|
except Error as e:
|
||||||
logging.warning(e)
|
logging.warning(e)
|
||||||
|
|
||||||
|
def get_target_for_file(
|
||||||
|
self, uuid: str, filename: Union[str, pathlib.Path]
|
||||||
|
) -> Optional[str]:
|
||||||
|
"""query database for file matching file name and return the matching filename if there is one;
|
||||||
|
otherwise return None; looks for file.ext, file (1).ext, file (2).ext and so on to find the
|
||||||
|
actual target name that was used to export filename
|
||||||
|
|
||||||
|
Returns: the matching filename or None if no match found
|
||||||
|
"""
|
||||||
|
conn = self._conn
|
||||||
|
c = conn.cursor()
|
||||||
|
filepath_normalized = self._normalize_filepath_relative(filename)
|
||||||
|
filepath_stem = os.path.splitext(filepath_normalized)[0]
|
||||||
|
c.execute(
|
||||||
|
"SELECT uuid, filepath, filepath_normalized FROM export_data WHERE uuid = ? AND filepath_normalized LIKE ?",
|
||||||
|
(
|
||||||
|
uuid,
|
||||||
|
f"{filepath_stem}%",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
results = c.fetchall()
|
||||||
|
|
||||||
|
for result in results:
|
||||||
|
filepath_normalized = os.path.splitext(result[2])[0]
|
||||||
|
if re.match(re.escape(filepath_stem) + r"(\s\(\d+\))?$", filepath_normalized):
|
||||||
|
return os.path.join(self.export_dir, result[1])
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
def get_previous_uuids(self):
|
def get_previous_uuids(self):
|
||||||
"""returns list of UUIDs of previously exported photos found in export database"""
|
"""returns list of UUIDs of previously exported photos found in export database"""
|
||||||
conn = self._conn
|
conn = self._conn
|
||||||
|
|||||||
@ -44,7 +44,13 @@ from .photokit import (
|
|||||||
from .phototemplate import RenderOptions
|
from .phototemplate import RenderOptions
|
||||||
from .rich_utils import add_rich_markup_tag
|
from .rich_utils import add_rich_markup_tag
|
||||||
from .uti import get_preferred_uti_extension
|
from .uti import get_preferred_uti_extension
|
||||||
from .utils import hexdigest, increment_filename, lineno, list_directory
|
from .utils import (
|
||||||
|
hexdigest,
|
||||||
|
increment_filename,
|
||||||
|
increment_filename_with_count,
|
||||||
|
lineno,
|
||||||
|
list_directory,
|
||||||
|
)
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"ExportError",
|
"ExportError",
|
||||||
@ -488,7 +494,7 @@ class PhotoExporter:
|
|||||||
src = staged_files.edited if options.edited else staged_files.original
|
src = staged_files.edited if options.edited else staged_files.original
|
||||||
|
|
||||||
# get the right destination path depending on options.update, etc.
|
# get the right destination path depending on options.update, etc.
|
||||||
dest = self._get_dest_path(src, dest, options)
|
dest = self._get_dest_path(dest, options)
|
||||||
|
|
||||||
self._render_options.filepath = str(dest)
|
self._render_options.filepath = str(dest)
|
||||||
all_results = ExportResults()
|
all_results = ExportResults()
|
||||||
@ -642,12 +648,11 @@ class PhotoExporter:
|
|||||||
return edited_filename
|
return edited_filename
|
||||||
|
|
||||||
def _get_dest_path(
|
def _get_dest_path(
|
||||||
self, src: str, dest: pathlib.Path, options: ExportOptions
|
self, dest: pathlib.Path, options: ExportOptions
|
||||||
) -> pathlib.Path:
|
) -> pathlib.Path:
|
||||||
"""If destination exists find match in ExportDB, on disk, or add (1), (2), and so on to filename to get a valid destination
|
"""If destination exists find match in ExportDB, on disk, or add (1), (2), and so on to filename to get a valid destination
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
src (str): source file path
|
|
||||||
dest (str): destination path
|
dest (str): destination path
|
||||||
options (ExportOptions): Export options
|
options (ExportOptions): Export options
|
||||||
|
|
||||||
@ -663,6 +668,10 @@ class PhotoExporter:
|
|||||||
f"destination exists ({dest}); overwrite={options.overwrite}, increment={options.increment}"
|
f"destination exists ({dest}); overwrite={options.overwrite}, increment={options.increment}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# if overwrite, we don't care if the file exists or not
|
||||||
|
if options.overwrite:
|
||||||
|
return dest
|
||||||
|
|
||||||
# if not update or overwrite, check to see if file exists and if so, add (1), (2), etc
|
# if not update or overwrite, check to see if file exists and if so, add (1), (2), etc
|
||||||
# until we find one that works
|
# until we find one that works
|
||||||
# Photos checks the stem and adds (1), (2), etc which avoids collision with sidecars
|
# Photos checks the stem and adds (1), (2), etc which avoids collision with sidecars
|
||||||
@ -675,29 +684,36 @@ class PhotoExporter:
|
|||||||
return pathlib.Path(increment_filename(dest))
|
return pathlib.Path(increment_filename(dest))
|
||||||
|
|
||||||
# if update and file exists, need to check to see if it's the right file by checking export db
|
# if update and file exists, need to check to see if it's the right file by checking export db
|
||||||
if (options.update or options.force_update) and dest.exists() and src:
|
if options.update or options.force_update:
|
||||||
export_db = options.export_db
|
export_db = options.export_db
|
||||||
# destination exists, check to see if destination is the right UUID
|
|
||||||
dest_uuid = export_db.get_uuid_for_file(dest)
|
dest_uuid = export_db.get_uuid_for_file(dest)
|
||||||
if dest_uuid != self.photo.uuid:
|
if dest_uuid is None and not dest.exists():
|
||||||
# not the right file, find the right one
|
# destination doesn't exist in export db and doesn't exist on disk
|
||||||
# find files that match "dest_name (*.ext" (e.g. "dest_name (1).jpg", "dest_name (2).jpg)", ...)
|
# so we can just use it
|
||||||
dest_files = list_directory(
|
return dest
|
||||||
dest.parent,
|
|
||||||
startswith=f"{dest.stem} (",
|
|
||||||
endswith=dest.suffix,
|
|
||||||
include_path=True,
|
|
||||||
)
|
|
||||||
for file_ in dest_files:
|
|
||||||
dest_uuid = export_db.get_uuid_for_file(file_)
|
|
||||||
if dest_uuid == self.photo.uuid:
|
|
||||||
dest = pathlib.Path(file_)
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
# increment the destination file
|
|
||||||
dest = pathlib.Path(increment_filename(dest))
|
|
||||||
|
|
||||||
# either dest was updated in the if clause above or not updated at all
|
if dest_uuid == self.photo.uuid:
|
||||||
|
# destination is the right file
|
||||||
|
return dest
|
||||||
|
|
||||||
|
# either dest_uuid is wrong or file exists and there's no associated UUID, so find a name that matches
|
||||||
|
# or create a new name if no match
|
||||||
|
# find files that match "dest_name (*.ext" (e.g. "dest_name (1).jpg", "dest_name (2).jpg)", ...)
|
||||||
|
# first, find all matching files in export db and see if there's a match
|
||||||
|
if dest_target := export_db.get_target_for_file(self.photo.uuid, dest):
|
||||||
|
# there's a match so use that
|
||||||
|
return pathlib.Path(dest_target)
|
||||||
|
|
||||||
|
# no match so need to create a new name
|
||||||
|
# increment the destination file until we find one that doesn't exist and doesn't match another uuid in the database
|
||||||
|
count = 0
|
||||||
|
dest, count = increment_filename_with_count(dest, count)
|
||||||
|
count += 1
|
||||||
|
while export_db.get_uuid_for_file(dest) is not None:
|
||||||
|
dest, count = increment_filename_with_count(dest, count)
|
||||||
|
return pathlib.Path(dest)
|
||||||
|
|
||||||
|
# fail safe...I can't think of a case that gets here
|
||||||
return dest
|
return dest
|
||||||
|
|
||||||
def _should_update_photo(
|
def _should_update_photo(
|
||||||
@ -1036,9 +1052,9 @@ class PhotoExporter:
|
|||||||
|
|
||||||
def _export_photo(
|
def _export_photo(
|
||||||
self,
|
self,
|
||||||
src,
|
src: str,
|
||||||
dest,
|
dest: pathlib.Path,
|
||||||
options,
|
options: ExportOptions,
|
||||||
):
|
):
|
||||||
"""Helper function for export()
|
"""Helper function for export()
|
||||||
Does the actual copy or hardlink taking the appropriate
|
Does the actual copy or hardlink taking the appropriate
|
||||||
@ -1444,7 +1460,7 @@ class PhotoExporter:
|
|||||||
) -> ExportResults:
|
) -> ExportResults:
|
||||||
"""Write exif metadata to src file using exiftool
|
"""Write exif metadata to src file using exiftool
|
||||||
|
|
||||||
Caution: This method modifies *src*, not *dest*,
|
Caution: This method modifies *src*, not *dest*,
|
||||||
so src must be a copy of the original file if you don't want the source modified;
|
so src must be a copy of the original file if you don't want the source modified;
|
||||||
it also does not write to dest (dest is the intended destination for purposes of
|
it also does not write to dest (dest is the intended destination for purposes of
|
||||||
referencing the export database. This allows the exiftool update to be done on the
|
referencing the export database. This allows the exiftool update to be done on the
|
||||||
|
|||||||
@ -411,7 +411,7 @@ def normalize_unicode(value):
|
|||||||
|
|
||||||
def increment_filename_with_count(
|
def increment_filename_with_count(
|
||||||
filepath: Union[str, pathlib.Path], count: int = 0
|
filepath: Union[str, pathlib.Path], count: int = 0
|
||||||
) -> str:
|
) -> Tuple[str, int]:
|
||||||
"""Return filename (1).ext, etc if filename.ext exists
|
"""Return filename (1).ext, etc if filename.ext exists
|
||||||
|
|
||||||
If file exists in filename's parent folder with same stem as filename,
|
If file exists in filename's parent folder with same stem as filename,
|
||||||
@ -447,6 +447,7 @@ def increment_filename(filepath: Union[str, pathlib.Path]) -> str:
|
|||||||
|
|
||||||
Args:
|
Args:
|
||||||
filepath: str or pathlib.Path; full path, including file name
|
filepath: str or pathlib.Path; full path, including file name
|
||||||
|
force: force the file count to increment by at least 1 even if filepath doesn't exist
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
new filepath (or same if not incremented)
|
new filepath (or same if not incremented)
|
||||||
@ -457,6 +458,13 @@ def increment_filename(filepath: Union[str, pathlib.Path]) -> str:
|
|||||||
return new_filepath
|
return new_filepath
|
||||||
|
|
||||||
|
|
||||||
|
def extract_increment_count_from_filename(filepath: Union[str, pathlib.Path]) -> int:
|
||||||
|
"""Extract a count from end of file name if it exists or 0 if not; count takes forms file (1).ext, file (2).ext, etc."""
|
||||||
|
filepath = str(filepath)
|
||||||
|
match = re.search(r"(?s:.*)\((\d+)\)", filepath)
|
||||||
|
return int(match[1]) if match else 0
|
||||||
|
|
||||||
|
|
||||||
def expand_and_validate_filepath(path: str) -> str:
|
def expand_and_validate_filepath(path: str) -> str:
|
||||||
"""validate and expand ~ in filepath, also un-escapes spaces
|
"""validate and expand ~ in filepath, also un-escapes spaces
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user