|
|
|
|
@@ -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="generator" content="sphinx-4.4.0, furo 2022.04.07"/>
|
|
|
|
|
<title>osxphotos.photoinfo - osxphotos 0.48.3 documentation</title>
|
|
|
|
|
<title>osxphotos.photoinfo - osxphotos 0.48.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/copybutton.css" />
|
|
|
|
|
@@ -123,7 +123,7 @@
|
|
|
|
|
</label>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="header-center">
|
|
|
|
|
<a href="../../index.html"><div class="brand">osxphotos 0.48.3 documentation</div></a>
|
|
|
|
|
<a href="../../index.html"><div class="brand">osxphotos 0.48.7 documentation</div></a>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="header-right">
|
|
|
|
|
<div class="theme-toggle-container theme-toggle-header">
|
|
|
|
|
@@ -146,7 +146,7 @@
|
|
|
|
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../index.html">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<span class="sidebar-brand-text">osxphotos 0.48.3 documentation</span>
|
|
|
|
|
<span class="sidebar-brand-text">osxphotos 0.48.7 documentation</span>
|
|
|
|
|
|
|
|
|
|
</a><form class="sidebar-search-container" method="get" action="../../search.html" role="search">
|
|
|
|
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
|
|
|
|
@@ -1089,38 +1089,37 @@
|
|
|
|
|
|
|
|
|
|
<span class="k">return</span> <span class="n">photopath</span>
|
|
|
|
|
|
|
|
|
|
<span class="nd">@property</span>
|
|
|
|
|
<span class="nd">@cached_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="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="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="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="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">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">_db</span><span class="o">.</span><span class="n">_library_path</span><span class="p">)</span>
|
|
|
|
|
<span class="o">/</span> <span class="s2">"resources"</span>
|
|
|
|
|
<span class="o">/</span> <span class="s2">"derivatives"</span>
|
|
|
|
|
<span class="o">/</span> <span class="n">directory</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="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="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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">shared</span><span class="p">:</span>
|
|
|
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_path_derivatives_5_shared</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="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">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">_db</span><span class="o">.</span><span class="n">_library_path</span><span class="p">)</span> <span class="o">/</span> <span class="sa">f</span><span class="s2">"resources/derivatives/</span><span class="si">{</span><span class="n">directory</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">list</span><span class="p">(</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="c1"># previews may be missing from derivatives path</span>
|
|
|
|
|
<span class="c1"># there are what appear to be low res thumbnails in the "masters" subfolder</span>
|
|
|
|
|
<span class="n">thumb_path</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">_db</span><span class="o">.</span><span class="n">_library_path</span><span class="p">)</span>
|
|
|
|
|
<span class="o">/</span> <span class="sa">f</span><span class="s2">"resources/derivatives/masters/</span><span class="si">{</span><span class="n">directory</span><span class="si">}</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">_4_5005_c.jpeg"</span>
|
|
|
|
|
<span class="p">)</span>
|
|
|
|
|
<span class="k">if</span> <span class="n">thumb_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
|
|
|
|
<span class="n">files</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">thumb_path</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="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="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="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="k">return</span> <span class="n">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="sd">"""Return paths to all derivative (preview) files for Photos <= 4"""</span>
|
|
|
|
|
@@ -1130,10 +1129,7 @@
|
|
|
|
|
<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">derivatives_root</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">_db</span><span class="o">.</span><span class="n">_library_path</span><span class="p">)</span>
|
|
|
|
|
<span class="o">/</span> <span class="s2">"resources"</span>
|
|
|
|
|
<span class="o">/</span> <span class="s2">"proxies"</span>
|
|
|
|
|
<span class="o">/</span> <span class="s2">"derivatives"</span>
|
|
|
|
|
<span class="o">/</span> <span class="n">folder_id</span>
|
|
|
|
|
<span class="o">/</span> <span class="sa">f</span><span class="s2">"resources/proxies/derivatives/</span><span class="si">{</span><span class="n">folder_id</span><span class="si">}</span><span class="s2">"</span>
|
|
|
|
|
<span class="p">)</span>
|
|
|
|
|
|
|
|
|
|
<span class="c1"># photos appears to usually be in "00" subfolder but</span>
|
|
|
|
|
@@ -1158,6 +1154,19 @@
|
|
|
|
|
<span class="c1"># didn't find a derivatives path</span>
|
|
|
|
|
<span class="k">return</span> <span class="p">[]</span>
|
|
|
|
|
|
|
|
|
|
<span class="k">def</span> <span class="nf">_path_derivatives_5_shared</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 shared iCloud photos in Photos >= 5"""</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="c1"># only 1 derivative for shared photos and it's called 'UUID_4_5005_c.jpeg'</span>
|
|
|
|
|
<span class="n">derivative_path</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">_db</span><span class="o">.</span><span class="n">_library_path</span><span class="p">)</span>
|
|
|
|
|
<span class="o">/</span> <span class="s2">"resources/cloudsharing/resources/derivatives/masters"</span>
|
|
|
|
|
<span class="o">/</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">directory</span><span class="si">}</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">_4_5005_c.jpeg"</span>
|
|
|
|
|
<span class="p">)</span>
|
|
|
|
|
<span class="k">if</span> <span class="n">derivative_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
|
|
|
|
<span class="k">return</span> <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">derivative_path</span><span class="p">)]</span>
|
|
|
|
|
<span class="k">return</span> <span class="p">[]</span>
|
|
|
|
|
|
|
|
|
|
<span class="nd">@property</span>
|
|
|
|
|
<span class="k">def</span> <span class="nf">panorama</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
|
|
|
<span class="sd">"""Returns True if photo is a panorama, otherwise False"""</span>
|
|
|
|
|
|