422 lines
37 KiB
HTML
422 lines
37 KiB
HTML
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>osxphotos.fileutil — osxphotos 0.47.9 documentation</title>
|
|
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
|
|
<link rel="stylesheet" type="text/css" href="../../_static/alabaster.css" />
|
|
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
|
|
<script src="../../_static/jquery.js"></script>
|
|
<script src="../../_static/underscore.js"></script>
|
|
<script src="../../_static/doctools.js"></script>
|
|
<link rel="index" title="Index" href="../../genindex.html" />
|
|
<link rel="search" title="Search" href="../../search.html" />
|
|
|
|
<link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
|
|
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
|
|
|
|
</head><body>
|
|
|
|
|
|
<div class="document">
|
|
<div class="documentwrapper">
|
|
<div class="bodywrapper">
|
|
|
|
|
|
<div class="body" role="main">
|
|
|
|
<h1>Source code for osxphotos.fileutil</h1><div class="highlight"><pre>
|
|
<span></span><span class="sd">""" FileUtil class with methods for copy, hardlink, unlink, etc. """</span>
|
|
|
|
<span class="kn">import</span> <span class="nn">os</span>
|
|
<span class="kn">import</span> <span class="nn">pathlib</span>
|
|
<span class="kn">import</span> <span class="nn">stat</span>
|
|
<span class="kn">import</span> <span class="nn">tempfile</span>
|
|
<span class="kn">import</span> <span class="nn">typing</span> <span class="k">as</span> <span class="nn">t</span>
|
|
<span class="kn">from</span> <span class="nn">abc</span> <span class="kn">import</span> <span class="n">ABC</span><span class="p">,</span> <span class="n">abstractmethod</span>
|
|
<span class="kn">from</span> <span class="nn">tempfile</span> <span class="kn">import</span> <span class="n">TemporaryDirectory</span>
|
|
|
|
<span class="kn">import</span> <span class="nn">Foundation</span>
|
|
|
|
<span class="kn">from</span> <span class="nn">.imageconverter</span> <span class="kn">import</span> <span class="n">ImageConverter</span>
|
|
|
|
<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"FileUtilABC"</span><span class="p">,</span> <span class="s2">"FileUtilMacOS"</span><span class="p">,</span> <span class="s2">"FileUtil"</span><span class="p">,</span> <span class="s2">"FileUtilNoOp"</span><span class="p">]</span>
|
|
|
|
|
|
<span class="k">class</span> <span class="nc">FileUtilABC</span><span class="p">(</span><span class="n">ABC</span><span class="p">):</span>
|
|
<span class="sd">"""Abstract base class for FileUtil"""</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="nd">@abstractmethod</span>
|
|
<span class="k">def</span> <span class="nf">hardlink</span><span class="p">(</span><span class="bp">cls</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="k">pass</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="nd">@abstractmethod</span>
|
|
<span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">cls</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">norsrc</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="nd">@abstractmethod</span>
|
|
<span class="k">def</span> <span class="nf">unlink</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">dest</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="nd">@abstractmethod</span>
|
|
<span class="k">def</span> <span class="nf">rmdir</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">dest</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="nd">@abstractmethod</span>
|
|
<span class="k">def</span> <span class="nf">utime</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">times</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="nd">@abstractmethod</span>
|
|
<span class="k">def</span> <span class="nf">cmp</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">file1</span><span class="p">,</span> <span class="n">file2</span><span class="p">,</span> <span class="n">mtime1</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="nd">@abstractmethod</span>
|
|
<span class="k">def</span> <span class="nf">cmp_file_sig</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">file1</span><span class="p">,</span> <span class="n">file2</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="nd">@abstractmethod</span>
|
|
<span class="k">def</span> <span class="nf">file_sig</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">file1</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="nd">@abstractmethod</span>
|
|
<span class="k">def</span> <span class="nf">convert_to_jpeg</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">src_file</span><span class="p">,</span> <span class="n">dest_file</span><span class="p">,</span> <span class="n">compression_quality</span><span class="o">=</span><span class="mf">1.0</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="nd">@abstractmethod</span>
|
|
<span class="k">def</span> <span class="nf">rename</span><span class="p">(</span><span class="bp">cls</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="k">pass</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="nd">@abstractmethod</span>
|
|
<span class="k">def</span> <span class="nf">tmpdir</span><span class="p">(</span>
|
|
<span class="bp">cls</span><span class="p">,</span> <span class="n">prefix</span><span class="p">:</span> <span class="n">t</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="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="nb">dir</span><span class="p">:</span> <span class="n">t</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="o">=</span> <span class="kc">None</span>
|
|
<span class="p">)</span> <span class="o">-></span> <span class="n">tempfile</span><span class="o">.</span><span class="n">TemporaryDirectory</span><span class="p">:</span>
|
|
<span class="k">pass</span>
|
|
|
|
|
|
<span class="k">class</span> <span class="nc">FileUtilMacOS</span><span class="p">(</span><span class="n">FileUtilABC</span><span class="p">):</span>
|
|
<span class="sd">"""Various file utilities"""</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">hardlink</span><span class="p">(</span><span class="bp">cls</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="sd">"""Hardlinks a file from src path to dest path</span>
|
|
<span class="sd"> src: source path as string</span>
|
|
<span class="sd"> dest: destination path as string</span>
|
|
<span class="sd"> Raises exception if linking fails or either path is None"""</span>
|
|
|
|
<span class="k">if</span> <span class="n">src</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">dest</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"src and dest must not be None"</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="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">src</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="s2">"src file does not appear to exist"</span><span class="p">,</span> <span class="n">src</span><span class="p">)</span>
|
|
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">os</span><span class="o">.</span><span class="n">link</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="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">e</span> <span class="kn">from</span> <span class="nn">e</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">cls</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="sd">"""Copies a file from src path to dest path</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> src: source path as string; must be a valid file path</span>
|
|
<span class="sd"> dest: destination path as string</span>
|
|
<span class="sd"> dest may be either directory or file; in either case, src file must not exist in dest</span>
|
|
<span class="sd"> Note: src and dest may be either a string or a pathlib.Path object</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> True if copy succeeded</span>
|
|
|
|
<span class="sd"> Raises:</span>
|
|
<span class="sd"> OSError if copy fails</span>
|
|
<span class="sd"> TypeError if either path is None</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">src</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">src</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">src</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</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">dest</span> <span class="o">=</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="n">dest</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">dest</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
|
|
<span class="n">dest</span> <span class="o">/=</span> <span class="n">src</span><span class="o">.</span><span class="n">name</span>
|
|
|
|
<span class="n">filemgr</span> <span class="o">=</span> <span class="n">Foundation</span><span class="o">.</span><span class="n">NSFileManager</span><span class="o">.</span><span class="n">defaultManager</span><span class="p">()</span>
|
|
<span class="n">error</span> <span class="o">=</span> <span class="n">filemgr</span><span class="o">.</span><span class="n">copyItemAtPath_toPath_error_</span><span class="p">(</span><span class="nb">str</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="kc">None</span><span class="p">)</span>
|
|
<span class="c1"># error is a tuple of (bool, error_string)</span>
|
|
<span class="c1"># error[0] is True if copy succeeded</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">error</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
|
|
<span class="k">raise</span> <span class="ne">OSError</span><span class="p">(</span><span class="n">error</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
|
<span class="k">return</span> <span class="kc">True</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">unlink</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">filepath</span><span class="p">):</span>
|
|
<span class="sd">"""unlink filepath; if it's pathlib.Path, use Path.unlink, otherwise use os.unlink"""</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">filepath</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">filepath</span><span class="o">.</span><span class="n">unlink</span><span class="p">()</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">os</span><span class="o">.</span><span class="n">unlink</span><span class="p">(</span><span class="n">filepath</span><span class="p">)</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">rmdir</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">dirpath</span><span class="p">):</span>
|
|
<span class="sd">"""remove directory filepath; dirpath must be empty"""</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dirpath</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">dirpath</span><span class="o">.</span><span class="n">rmdir</span><span class="p">()</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">os</span><span class="o">.</span><span class="n">rmdir</span><span class="p">(</span><span class="n">dirpath</span><span class="p">)</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">utime</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">times</span><span class="p">):</span>
|
|
<span class="sd">"""Set the access and modified time of path."""</span>
|
|
<span class="n">os</span><span class="o">.</span><span class="n">utime</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">times</span><span class="o">=</span><span class="n">times</span><span class="p">)</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">cmp</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">f1</span><span class="p">,</span> <span class="n">f2</span><span class="p">,</span> <span class="n">mtime1</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="sd">"""Does shallow compare (file signatures) of f1 to file f2.</span>
|
|
<span class="sd"> Arguments:</span>
|
|
<span class="sd"> f1 -- File name</span>
|
|
<span class="sd"> f2 -- File name</span>
|
|
<span class="sd"> mtime1 -- optional, pass alternate file modification timestamp for f1; will be converted to int</span>
|
|
|
|
<span class="sd"> Return value:</span>
|
|
<span class="sd"> True if the file signatures as returned by stat are the same, False otherwise.</span>
|
|
<span class="sd"> Does not do a byte-by-byte comparison.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">s1</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_sig</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">stat</span><span class="p">(</span><span class="n">f1</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="n">mtime1</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">s1</span> <span class="o">=</span> <span class="p">(</span><span class="n">s1</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">s1</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="nb">int</span><span class="p">(</span><span class="n">mtime1</span><span class="p">))</span>
|
|
<span class="n">s2</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_sig</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">stat</span><span class="p">(</span><span class="n">f2</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="n">s1</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="n">stat</span><span class="o">.</span><span class="n">S_IFREG</span> <span class="ow">or</span> <span class="n">s2</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="n">stat</span><span class="o">.</span><span class="n">S_IFREG</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="kc">False</span>
|
|
<span class="k">return</span> <span class="n">s1</span> <span class="o">==</span> <span class="n">s2</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">cmp_file_sig</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">f1</span><span class="p">,</span> <span class="n">s2</span><span class="p">):</span>
|
|
<span class="sd">"""Compare file f1 to signature s2.</span>
|
|
<span class="sd"> Arguments:</span>
|
|
<span class="sd"> f1 -- File name</span>
|
|
<span class="sd"> s2 -- stats as returned by _sig</span>
|
|
|
|
<span class="sd"> Return value:</span>
|
|
<span class="sd"> True if the files are the same, False otherwise.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">s2</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="kc">False</span>
|
|
|
|
<span class="n">s1</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_sig</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">stat</span><span class="p">(</span><span class="n">f1</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="n">s1</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="n">stat</span><span class="o">.</span><span class="n">S_IFREG</span> <span class="ow">or</span> <span class="n">s2</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="n">stat</span><span class="o">.</span><span class="n">S_IFREG</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="kc">False</span>
|
|
<span class="k">return</span> <span class="n">s1</span> <span class="o">==</span> <span class="n">s2</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">file_sig</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">f1</span><span class="p">):</span>
|
|
<span class="sd">"""return os.stat signature for file f1 as tuple of (mode, size, mtime)"""</span>
|
|
<span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_sig</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">stat</span><span class="p">(</span><span class="n">f1</span><span class="p">))</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">convert_to_jpeg</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">src_file</span><span class="p">,</span> <span class="n">dest_file</span><span class="p">,</span> <span class="n">compression_quality</span><span class="o">=</span><span class="mf">1.0</span><span class="p">):</span>
|
|
<span class="sd">"""converts image file src_file to jpeg format as dest_file</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> src_file: image file to convert</span>
|
|
<span class="sd"> dest_file: destination path to write converted file to</span>
|
|
<span class="sd"> compression quality: JPEG compression quality in range 0.0 <= compression_quality <= 1.0; default 1.0 (best quality)</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> True if success, otherwise False</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">converter</span> <span class="o">=</span> <span class="n">ImageConverter</span><span class="p">()</span>
|
|
<span class="k">return</span> <span class="n">converter</span><span class="o">.</span><span class="n">write_jpeg</span><span class="p">(</span>
|
|
<span class="n">src_file</span><span class="p">,</span> <span class="n">dest_file</span><span class="p">,</span> <span class="n">compression_quality</span><span class="o">=</span><span class="n">compression_quality</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">rename</span><span class="p">(</span><span class="bp">cls</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="sd">"""Copy src to dest</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> src: path to source file</span>
|
|
<span class="sd"> dest: path to destination file</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> Name of renamed file (dest)</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="n">os</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="nb">str</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="k">return</span> <span class="n">dest</span>
|
|
|
|
<span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">tmpdir</span><span class="p">(</span>
|
|
<span class="bp">cls</span><span class="p">,</span> <span class="n">prefix</span><span class="p">:</span> <span class="n">t</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="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="nb">dir</span><span class="p">:</span> <span class="n">t</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="o">=</span> <span class="kc">None</span>
|
|
<span class="p">)</span> <span class="o">-></span> <span class="n">tempfile</span><span class="o">.</span><span class="n">TemporaryDirectory</span><span class="p">:</span>
|
|
<span class="sd">"""Securely creates a temporary directory using the same rules as mkdtemp().</span>
|
|
<span class="sd"> The resulting object can be used as a context manager.</span>
|
|
<span class="sd"> On completion of the context or destruction of the temporary directory object,</span>
|
|
<span class="sd"> the newly created temporary directory and all its contents are removed from the filesystem.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">TemporaryDirectory</span><span class="p">(</span><span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span> <span class="nb">dir</span><span class="o">=</span><span class="nb">dir</span><span class="p">)</span>
|
|
|
|
<span class="nd">@staticmethod</span>
|
|
<span class="k">def</span> <span class="nf">_sig</span><span class="p">(</span><span class="n">st</span><span class="p">):</span>
|
|
<span class="sd">"""return tuple of (mode, size, mtime) of file based on os.stat</span>
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> st: os.stat signature</span>
|
|
<span class="sd"> """</span>
|
|
<span class="c1"># use int(st.st_mtime) because ditto does not copy fractional portion of mtime</span>
|
|
<span class="k">return</span> <span class="p">(</span><span class="n">stat</span><span class="o">.</span><span class="n">S_IFMT</span><span class="p">(</span><span class="n">st</span><span class="o">.</span><span class="n">st_mode</span><span class="p">),</span> <span class="n">st</span><span class="o">.</span><span class="n">st_size</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">st</span><span class="o">.</span><span class="n">st_mtime</span><span class="p">))</span>
|
|
|
|
|
|
<div class="viewcode-block" id="FileUtil"><a class="viewcode-back" href="../../reference.html#osxphotos.FileUtil">[docs]</a><span class="k">class</span> <span class="nc">FileUtil</span><span class="p">(</span><span class="n">FileUtilMacOS</span><span class="p">):</span>
|
|
<span class="sd">"""Various file utilities"""</span>
|
|
|
|
<span class="k">pass</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="FileUtilNoOp"><a class="viewcode-back" href="../../reference.html#osxphotos.FileUtilNoOp">[docs]</a><span class="k">class</span> <span class="nc">FileUtilNoOp</span><span class="p">(</span><span class="n">FileUtil</span><span class="p">):</span>
|
|
<span class="sd">"""No-Op implementation of FileUtil for testing / dry-run mode</span>
|
|
<span class="sd"> all methods with exception of tmpdir, cmp, cmp_file_sig and file_cmp are no-op</span>
|
|
<span class="sd"> cmp and cmp_file_sig functions as FileUtil methods do</span>
|
|
<span class="sd"> file_cmp returns mock data</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="nd">@staticmethod</span>
|
|
<span class="k">def</span> <span class="nf">noop</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
|
|
<span class="k">def</span> <span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">callable</span><span class="p">(</span><span class="n">verbose</span><span class="p">):</span>
|
|
<span class="bp">cls</span><span class="o">.</span><span class="n">verbose</span> <span class="o">=</span> <span class="n">verbose</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"verbose </span><span class="si">{</span><span class="n">verbose</span><span class="si">}</span><span class="s2"> not callable"</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">FileUtilNoOp</span><span class="p">,</span> <span class="bp">cls</span><span class="p">)</span><span class="o">.</span><span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">)</span>
|
|
|
|
<div class="viewcode-block" id="FileUtilNoOp.hardlink"><a class="viewcode-back" href="../../reference.html#osxphotos.FileUtilNoOp.hardlink">[docs]</a> <span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">hardlink</span><span class="p">(</span><span class="bp">cls</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="k">pass</span></div>
|
|
|
|
<div class="viewcode-block" id="FileUtilNoOp.copy"><a class="viewcode-back" href="../../reference.html#osxphotos.FileUtilNoOp.copy">[docs]</a> <span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">cls</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">norsrc</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
|
<span class="k">pass</span></div>
|
|
|
|
<div class="viewcode-block" id="FileUtilNoOp.unlink"><a class="viewcode-back" href="../../reference.html#osxphotos.FileUtilNoOp.unlink">[docs]</a> <span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">unlink</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">dest</span><span class="p">):</span>
|
|
<span class="k">pass</span></div>
|
|
|
|
<div class="viewcode-block" id="FileUtilNoOp.rmdir"><a class="viewcode-back" href="../../reference.html#osxphotos.FileUtilNoOp.rmdir">[docs]</a> <span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">rmdir</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">dest</span><span class="p">):</span>
|
|
<span class="k">pass</span></div>
|
|
|
|
<div class="viewcode-block" id="FileUtilNoOp.utime"><a class="viewcode-back" href="../../reference.html#osxphotos.FileUtilNoOp.utime">[docs]</a> <span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">utime</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">times</span><span class="p">):</span>
|
|
<span class="k">pass</span></div>
|
|
|
|
<div class="viewcode-block" id="FileUtilNoOp.file_sig"><a class="viewcode-back" href="../../reference.html#osxphotos.FileUtilNoOp.file_sig">[docs]</a> <span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">file_sig</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">file1</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="p">(</span><span class="mi">42</span><span class="p">,</span> <span class="mi">42</span><span class="p">,</span> <span class="mi">42</span><span class="p">)</span></div>
|
|
|
|
<div class="viewcode-block" id="FileUtilNoOp.convert_to_jpeg"><a class="viewcode-back" href="../../reference.html#osxphotos.FileUtilNoOp.convert_to_jpeg">[docs]</a> <span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">convert_to_jpeg</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">src_file</span><span class="p">,</span> <span class="n">dest_file</span><span class="p">,</span> <span class="n">compression_quality</span><span class="o">=</span><span class="mf">1.0</span><span class="p">):</span>
|
|
<span class="k">pass</span></div>
|
|
|
|
<div class="viewcode-block" id="FileUtilNoOp.rename"><a class="viewcode-back" href="../../reference.html#osxphotos.FileUtilNoOp.rename">[docs]</a> <span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">rename</span><span class="p">(</span><span class="bp">cls</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="k">pass</span></div>
|
|
|
|
<div class="viewcode-block" id="FileUtilNoOp.tmpdir"><a class="viewcode-back" href="../../reference.html#osxphotos.FileUtilNoOp.tmpdir">[docs]</a> <span class="nd">@classmethod</span>
|
|
<span class="k">def</span> <span class="nf">tmpdir</span><span class="p">(</span>
|
|
<span class="bp">cls</span><span class="p">,</span> <span class="n">prefix</span><span class="p">:</span> <span class="n">t</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="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="nb">dir</span><span class="p">:</span> <span class="n">t</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="o">=</span> <span class="kc">None</span>
|
|
<span class="p">)</span> <span class="o">-></span> <span class="n">tempfile</span><span class="o">.</span><span class="n">TemporaryDirectory</span><span class="p">:</span>
|
|
<span class="sd">"""Securely creates a temporary directory using the same rules as mkdtemp().</span>
|
|
<span class="sd"> The resulting object can be used as a context manager.</span>
|
|
<span class="sd"> On completion of the context or destruction of the temporary directory object,</span>
|
|
<span class="sd"> the newly created temporary directory and all its contents are removed from the filesystem.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">TemporaryDirectory</span><span class="p">(</span><span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span> <span class="nb">dir</span><span class="o">=</span><span class="nb">dir</span><span class="p">)</span></div></div>
|
|
</pre></div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|
<div class="sphinxsidebarwrapper">
|
|
<h1 class="logo"><a href="../../index.html">osxphotos</a></h1>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="../../overview.html">osxphotos</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="../../tutorial.html">Tutorial</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="../../cli.html">osxphotos command line interface (CLI)</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="../../reference.html">osxphotos package</a></li>
|
|
</ul>
|
|
|
|
<div class="relations">
|
|
<h3>Related Topics</h3>
|
|
<ul>
|
|
<li><a href="../../index.html">Documentation overview</a><ul>
|
|
<li><a href="../index.html">Module code</a><ul>
|
|
</ul></li>
|
|
</ul></li>
|
|
</ul>
|
|
</div>
|
|
<div id="searchbox" style="display: none" role="search">
|
|
<h3 id="searchlabel">Quick search</h3>
|
|
<div class="searchformwrapper">
|
|
<form class="search" action="../../search.html" method="get">
|
|
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
|
<input type="submit" value="Go" />
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<script>$('#searchbox').show(0);</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
</div>
|
|
<div class="clearer"></div>
|
|
</div>
|
|
<div class="footer">
|
|
©2021, Rhet Turnbull.
|
|
|
|
|
|
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.4.0</a>
|
|
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</body>
|
|
</html> |