Skip to content
This repository has been archived by the owner on Dec 25, 2022. It is now read-only.

Commit

Permalink
Merge pull request #22 from tubone24/async
Browse files Browse the repository at this point in the history
Async rename
  • Loading branch information
tubone24 committed Feb 5, 2019
2 parents c9e9cc9 + bf18bcf commit a2e9e4a
Show file tree
Hide file tree
Showing 10 changed files with 233 additions and 20 deletions.
64 changes: 63 additions & 1 deletion docs/_modules/ebook_homebrew/core.html
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,8 @@ <h1>Source code for ebook_homebrew.core</h1><div class="highlight"><pre>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">import</span> <span class="nn">shutil</span>
<span class="kn">import</span> <span class="nn">asyncio</span>
<span class="kn">import</span> <span class="nn">concurrent.futures</span>

<span class="kn">import</span> <span class="nn">PIL.Image</span>

Expand Down Expand Up @@ -398,7 +400,67 @@ <h1>Source code for ebook_homebrew.core</h1><div class="highlight"><pre>

<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">destination</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dst</span><span class="p">,</span> <span class="n">file</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_move_file</span><span class="p">(</span><span class="n">file</span><span class="o">=</span><span class="n">file</span><span class="p">,</span> <span class="n">dst</span><span class="o">=</span><span class="n">destination</span><span class="p">,</span> <span class="n">assume_yes</span><span class="o">=</span><span class="n">assume_yes</span><span class="p">)</span></div></div>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_move_file</span><span class="p">(</span><span class="n">file</span><span class="o">=</span><span class="n">file</span><span class="p">,</span> <span class="n">dst</span><span class="o">=</span><span class="n">destination</span><span class="p">,</span> <span class="n">assume_yes</span><span class="o">=</span><span class="n">assume_yes</span><span class="p">)</span></div>

<span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">_get_eventloop</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;Get event loop</span>

<span class="sd"> Returns:</span>
<span class="sd"> event_loop: Event loop object</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">loop</span> <span class="o">=</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">get_event_loop</span><span class="p">()</span>
<span class="k">return</span> <span class="n">loop</span>

<span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">_output_result</span><span class="p">(</span><span class="n">future</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Output async queue task result</span>

<span class="sd"> Args:</span>
<span class="sd"> future: Async future</span>

<span class="sd"> Returns:</span>
<span class="sd"> bool: If success, return true.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">future</span><span class="o">.</span><span class="n">result</span><span class="p">())</span>
<span class="k">return</span> <span class="kc">True</span>

<span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">_create_task_queue</span><span class="p">(</span><span class="n">task_list</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Make async queue and put tasks</span>

<span class="sd"> Returns:</span>
<span class="sd"> asyncio.Queue: Async task queue</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">queue</span> <span class="o">=</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">Queue</span><span class="p">()</span>

<span class="k">for</span> <span class="n">task</span> <span class="ow">in</span> <span class="n">task_list</span><span class="p">:</span>
<span class="n">queue</span><span class="o">.</span><span class="n">put_nowait</span><span class="p">(</span><span class="n">task</span><span class="p">)</span>

<span class="k">return</span> <span class="n">queue</span>

<span class="k">async</span> <span class="k">def</span> <span class="nf">_set_task_queue_for_executor</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">queue</span><span class="p">,</span> <span class="n">loop</span><span class="p">,</span> <span class="n">executor</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Set task queue using executor</span>

<span class="sd"> Args:</span>
<span class="sd"> queue: asyncio queue</span>
<span class="sd"> loop: event loop</span>
<span class="sd"> executor: executor</span>
<span class="sd"> func: function</span>

<span class="sd"> Returns:</span>
<span class="sd"> future</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">while</span> <span class="ow">not</span> <span class="n">queue</span><span class="o">.</span><span class="n">empty</span><span class="p">():</span>
<span class="n">task</span> <span class="o">=</span> <span class="k">await</span> <span class="n">queue</span><span class="o">.</span><span class="n">get</span><span class="p">()</span>
<span class="n">future</span> <span class="o">=</span> <span class="n">loop</span><span class="o">.</span><span class="n">run_in_executor</span><span class="p">(</span><span class="n">executor</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">task</span><span class="p">)</span>
<span class="n">future</span><span class="o">.</span><span class="n">add_done_callback</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_output_result</span><span class="p">)</span>
<span class="k">await</span> <span class="n">future</span>

<span class="k">async</span> <span class="k">def</span> <span class="nf">_execute_queuing_tasks</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">queue</span><span class="p">,</span> <span class="n">loop</span><span class="p">,</span> <span class="n">executor</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Execute queue tasks&quot;&quot;&quot;</span>
<span class="n">tasks</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_set_task_queue_for_executor</span><span class="p">(</span><span class="n">queue</span><span class="p">,</span> <span class="n">loop</span><span class="p">,</span> <span class="n">executor</span><span class="p">,</span> <span class="n">func</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">cpu_count</span><span class="p">())]</span>
<span class="k">return</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait</span><span class="p">(</span><span class="n">tasks</span><span class="p">)</span></div>
</pre></div>

</div>
Expand Down
42 changes: 34 additions & 8 deletions docs/_modules/ebook_homebrew/rename.html
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ <h1>Source code for ebook_homebrew.rename</h1><div class="highlight"><pre>
<span class="bp">self</span><span class="o">.</span><span class="n">__digits</span> <span class="o">=</span> <span class="n">digits</span>
<span class="bp">self</span><span class="o">.</span><span class="n">__exist_files</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">__extension</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_convert_extension_with_dot</span><span class="p">(</span><span class="n">extension</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">__max_digit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_digit_format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__digits</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">__regex_ext</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__extension</span><span class="p">)</span>
<span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__directory_path</span><span class="p">)</span>

Expand Down Expand Up @@ -264,20 +265,45 @@ <h1>Source code for ebook_homebrew.rename</h1><div class="highlight"><pre>
<span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Extension: </span><span class="si">{extension}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">extension</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">__extension</span><span class="p">))</span>
<span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;-&quot;</span> <span class="o">*</span> <span class="mi">55</span><span class="p">)</span>

<span class="n">max_digit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_digit_format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__digits</span><span class="p">)</span>

<span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">files</span><span class="p">:</span>
<span class="n">num</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_serial_number</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">__digits</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_skip_file</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">__regex_ext</span><span class="p">,</span> <span class="n">num</span><span class="p">):</span>
<span class="n">new_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_new_name</span><span class="p">(</span><span class="n">num</span><span class="p">,</span> <span class="n">max_digit</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">__extension</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">__check_exist_file</span><span class="p">(</span><span class="n">new_name</span><span class="p">,</span> <span class="n">file</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_rename_file</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="n">new_name</span><span class="p">)</span>
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_rename_digit_filename</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>

<span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;-&quot;</span> <span class="o">*</span> <span class="mi">55</span><span class="p">)</span>
<span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Finished! Rename file count: </span><span class="si">{count}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">))</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__exist_files</span></div>

<div class="viewcode-block" id="ChangeFilename.async_filename_to_digit_number"><a class="viewcode-back" href="../../ebook_homebrew.html#ebook_homebrew.rename.ChangeFilename.async_filename_to_digit_number">[docs]</a> <span class="k">def</span> <span class="nf">async_filename_to_digit_number</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Change file name to only digit name on async.</span>

<span class="sd"> If use this function, a little bit speedy</span>
<span class="sd"> compare with filename_to_digit_number function.</span>

<span class="sd"> Returns:</span>
<span class="sd"> List[str]: Skipping files list by exists same name.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">files</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_make_file_list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__directory_path</span><span class="p">)</span>

<span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Target directory: </span><span class="si">{directory_path}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">directory_path</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">__directory_path</span><span class="p">))</span>
<span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Digit: </span><span class="si">{digits}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">digits</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">__digits</span><span class="p">))</span>
<span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Extension: </span><span class="si">{extension}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">extension</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">__extension</span><span class="p">))</span>
<span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;-&quot;</span> <span class="o">*</span> <span class="mi">55</span><span class="p">)</span>

<span class="n">loop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_eventloop</span><span class="p">()</span>
<span class="n">queue</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_task_queue</span><span class="p">(</span><span class="n">files</span><span class="p">)</span>
<span class="n">loop</span><span class="o">.</span><span class="n">run_until_complete</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_execute_queuing_tasks</span><span class="p">(</span><span class="n">queue</span><span class="p">,</span> <span class="n">loop</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_rename_digit_filename</span><span class="p">))</span>
<span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;-&quot;</span> <span class="o">*</span> <span class="mi">55</span><span class="p">)</span>
<span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Finished! Async rename&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__exist_files</span></div>

<span class="k">def</span> <span class="nf">_rename_digit_filename</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">file</span><span class="p">):</span>
<span class="n">num</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_serial_number</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">__digits</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_skip_file</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">__regex_ext</span><span class="p">,</span> <span class="n">num</span><span class="p">):</span>
<span class="n">new_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_new_name</span><span class="p">(</span><span class="n">num</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">__max_digit</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">__extension</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">__check_exist_file</span><span class="p">(</span><span class="n">new_name</span><span class="p">,</span> <span class="n">file</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_rename_file</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="n">new_name</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">True</span>

<div class="viewcode-block" id="ChangeFilename.change_name_manually"><a class="viewcode-back" href="../../ebook_homebrew.html#ebook_homebrew.rename.ChangeFilename.change_name_manually">[docs]</a> <span class="k">def</span> <span class="nf">change_name_manually</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">overwrite</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Change filename manually looking exist_file list.</span>

Expand Down

0 comments on commit a2e9e4a

Please sign in to comment.