]> git.phdru.name Git - m_librarian.git/commitdiff
Feat(ml-import): Display tty progress bar during import
authorOleg Broytman <phd@phdru.name>
Thu, 22 Mar 2018 18:58:30 +0000 (21:58 +0300)
committerOleg Broytman <phd@phdru.name>
Thu, 22 Mar 2018 19:26:32 +0000 (22:26 +0300)
12 files changed:
README.txt
docs-ru/command_line.rst
docs-ru/index.rst
docs/command_line.rst
docs/index.rst
docs/install.rst
docs/news.rst
m_librarian/__version__.py
m_librarian/inp.py
m_librarian/pbar.py [new file with mode: 0644]
scripts/ml-import.py
setup.py

index be6364da527c9d1748879c34240eef0d6849c11b..fffa1d75a1e1f877b8056e302e44072db8b58d19 100644 (file)
@@ -1,6 +1,6 @@
 m_Librarian.
 Author: Oleg Broytman <phd@phdru.name>.
-Copyright (C) 2015-2017 PhiloSoft Design.
+Copyright (C) 2015-2018 PhiloSoft Design.
 License: GPL.
 
 This hopefully will be a collection of programs to index LibRusEc and
index 70cd7cf0004d4d1d7b22b77e88e73e53d546837b..c646cde6f51e56f0462941d09498e2a184740c42 100644 (file)
@@ -29,12 +29,13 @@ ml-import.py
 
 Использование::
 
-    ml-import.py [-C] [-D] [file.inpx ...]
+    ml-import.py [-C] [-D] [-P] [file.inpx ...]
 
 Опции::
 
     -C, --config config      Путь к файлу конфигурации
     -D, --database database  Использовать указанную БД
+    -P, --no-pbar            Не показывать индикатор процесса
 
 Инициализирует базу данных, импортирует список жанров и список файлов
 INPX, перечисленных в командной строке. При повторных запусках не
index a632b1d2728ac92eea094a3ff0ab2836f7587521..6d6f9936f4ff8c0162d62bbb16fc26450b8bccd6 100644 (file)
@@ -34,7 +34,7 @@ Credits
 
 Автор: Олег Бройтман <phd@phdru.name>.
 
-Copyright (C) 2015-2017 PhiloSoft Design.
+Copyright (C) 2015-2018 PhiloSoft Design.
 
 
 License
index 62584436047df73c9ef9169fea58a283e2a55e9e..56824a93aae6ddcc849668887ceda1117fae5095 100644 (file)
@@ -29,12 +29,13 @@ ml-import.py
 
 Usage::
 
-    ml-import.py [-C] [-D] [file.inpx ...]
+    ml-import.py [-C] [-D] [-P] [file.inpx ...]
 
 Options::
 
     -C, --config config      Configuration file
     -D, --database database  Open this database by pathname/db uri
+    -P, --no-pbar            Inhibit progress bar
 
 Initialize database, import genres list and import a list of INPX files
 listed in the command line. On subsequent runs doesn’t destroy DB or
index bbfa79491578b62b421b6613bef6bbb5ed030ba7..4dc875068c3627704973a92acc3c22461fa03d45 100644 (file)
@@ -35,7 +35,7 @@ Credits
 
 Created by Oleg Broytman <phd@phdru.name>.
 
-Copyright (C) 2015-2017 PhiloSoft Design.
+Copyright (C) 2015-2018 PhiloSoft Design.
 
 
 License
index 0bcfde083501221051b4be3203adf532a5eedf14..d950de1670dccbdb870b5c6bf41add4fe657bb22 100644 (file)
@@ -22,6 +22,14 @@ Virtual envs
 
     pip install --trusted-host phdru.name --find-links=http://phdru.name/Software/Python/ m_librarian
 
+Progress bar
+============
+
+To allow ``ml-import.py`` to display progress bar the program requires
+library ``m_lib``. You can install the library separately using, e.g.,
+command ``pip install m_lib``. Or you can install the library with
+``m_librarian``: ``pip install m_librarian[pbar]``.
+
 Installation from sources
 =========================
 
index 13a4254e73bf58e57c244c3c68193c650a6fde8f..3e73f9a7137b70f8f9bf403cd734d4ed97f34c3b 100644 (file)
@@ -1,6 +1,12 @@
 News
 ====
 
+Version 0.0.16 (2018-03-22)
+---------------------------
+
+* Script ``ml-import.py`` displays progress bar.
+  Option ``-P`` prevents it.
+
 Version 0.0.15 (2017-04-26)
 ---------------------------
 
@@ -58,18 +64,18 @@ Version 0.0.8 (2016-05-29)
 Version 0.0.7 (2016-05-25)
 ---------------------------
 
-* Extend ml-serach.py to search books by authors, extensions, genres,
+* Extend ml-search.py to search books by authors, extensions, genres,
 * languages.
 
 Version 0.0.6 (2016-05-21)
 ---------------------------
 
-* Extend ml-serach.py to search books by title, series, archive, file.
+* Extend ml-search.py to search books by title, series, archive, file.
 
 Version 0.0.5 (2016-05-14)
 ---------------------------
 
-* Extend script ml-serach.py to search extensions/genres/languages.
+* Extend script ml-search.py to search extensions/genres/languages.
 
 Version 0.0.4 (2016-05-11)
 ---------------------------
index 8ecd910c5977e1ea9fe9ef4bb16d6c94d31de80b..19c6940009700cc4e7ad95fb20578ac9240f7808 100644 (file)
@@ -1 +1 @@
-__version__ = '0.0.15'
+__version__ = '0.0.16'
index b3a3d84b43b662bd7870f51d77d0f504d8c18a78..76ab97be9883c4cd240ae725acc3300acf897e98 100644 (file)
@@ -80,12 +80,23 @@ def import_inp(archive, inp):
             import_inp_line(archive, parts)
 
 
-def import_inpx(path):
+def import_inpx(path, pbar_cb=None):
     inpx = ZipFile(path)
+    if pbar_cb:
+        inp_count = 0
+        for name in inpx.namelist():
+            ext = os.path.splitext(name)[1]
+            if ext == '.inp':
+                inp_count += 1
+        pbar_cb.set_max(inp_count)
+    inp_count = 0
     for name in inpx.namelist():
         archive, ext = os.path.splitext(name)
         if ext != '.inp':
             continue
+        if pbar_cb:
+            inp_count += 1
+            pbar_cb.display(inp_count)
         inp = inpx.open(name)
         sqlhub.doInTransaction(import_inp, archive + '.zip', inp)
         inp.close()
@@ -95,3 +106,5 @@ def import_inpx(path):
             connection.query("VACUUM %s" % table.sqlmeta.table)
     elif connection.dbName == 'sqlite':
         connection.query("VACUUM")
+    if pbar_cb:
+        pbar_cb.close()
diff --git a/m_librarian/pbar.py b/m_librarian/pbar.py
new file mode 100644 (file)
index 0000000..7d3a6fa
--- /dev/null
@@ -0,0 +1,25 @@
+
+try:
+    from m_lib.pbar.tty_pbar import ttyProgressBar
+except ImportError:
+    ttyProgressBar = None
+
+if ttyProgressBar:
+    class ml_ttyProgressBar(object):
+        def __init__(self, width=20):
+            self.max = None
+            self.pbar = None
+            self.width = width
+
+        def set_max(self, max_value):
+            self.max = max_value
+            self.pbar = ttyProgressBar(0, max_value, width1=self.width)
+
+        def display(self, value):
+            if self.pbar:
+                self.pbar.display(value)
+
+        def close(self):
+            if self.pbar:
+                self.pbar.erase()
+                self.pbar = None
index 3ccbd319a87cf1101e95431ab3836393b974d5bd..56ff8a670df980b3ad09b6c0dd72646c8bfcf91d 100755 (executable)
@@ -1,15 +1,23 @@
 #! /usr/bin/env python
+from __future__ import print_function
 
 import argparse
+import sys
+
 from m_librarian.config import get_config
 from m_librarian.db import open_db, init_db, update_counters
 from m_librarian.glst import import_glst
 from m_librarian.inp import import_inpx
+from m_librarian.pbar import ttyProgressBar
+if ttyProgressBar:
+    from m_librarian.pbar import ml_ttyProgressBar
 
 if __name__ == '__main__':
     parser = argparse.ArgumentParser(description='Import')
     parser.add_argument('-C', '--config', help='configuration file')
     parser.add_argument('-D', '--database', help='database URI')
+    parser.add_argument('-P', '--no-pbar', action='store_true',
+                        help='inhibit progress bar')
     parser.add_argument('inpx', nargs='+', help='INPX files to import')
     args = parser.parse_args()
 
@@ -20,5 +28,15 @@ if __name__ == '__main__':
     init_db()
     import_glst()
     for inpx in args.inpx:
-        import_inpx(inpx)
+        if ttyProgressBar and not args.no_pbar:
+            if len(inpx) > 25:
+                pbar_fname = inpx[:22] + '...'
+            else:
+                pbar_fname = inpx
+            print(pbar_fname.ljust(20), end=': ')
+            sys.stdout.flush()
+            pbar = ml_ttyProgressBar()
+            import_inpx(inpx, pbar_cb=pbar)
+        else:
+            import_inpx(inpx)
     update_counters()
index 0c4c5aeda8914f3f287f79ea58edc31b80c4d658..1d8ebdbccdb748e7d31beafab983224c1a35fb33 100755 (executable)
--- a/setup.py
+++ b/setup.py
@@ -13,6 +13,10 @@ except ImportError:
 kw = {}
 if is_setuptools:
     kw['python_requires'] = '>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*'
+    kw['extras_require'] = {
+        'm_lib': ['m_lib>=3.1'],
+        'pbar': ['m_lib>=3.1'],
+    }
 
 versionpath = join(abspath(dirname(__file__)), 'm_librarian', '__version__.py')
 m_librarian_version = load_source('m_librarian_version', versionpath)