public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Jauhien Piatlicki" <piatlicki@gmail.com>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/g-sorcery:master commit in: g_sorcery/
Date: Mon, 12 Aug 2013 00:36:04 +0000 (UTC)	[thread overview]
Message-ID: <1376253248.3128ec6e5ec9e3bd472d63621af521153f922d4a.jauhien@gentoo> (raw)

commit:     3128ec6e5ec9e3bd472d63621af521153f922d4a
Author:     Jauhien Piatlicki (jauhien) <piatlicki <AT> gmail <DOT> com>
AuthorDate: Sun Aug 11 20:34:08 2013 +0000
Commit:     Jauhien Piatlicki <piatlicki <AT> gmail <DOT> com>
CommitDate: Sun Aug 11 20:34:08 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/g-sorcery.git;a=commit;h=3128ec6e

g_sorcery/logger: ProgressBar

---
 g_sorcery/logger.py     | 40 ++++++++++++++++++++++++++++++++++++++++
 g_sorcery/package_db.py | 25 ++++++-------------------
 2 files changed, 46 insertions(+), 19 deletions(-)

diff --git a/g_sorcery/logger.py b/g_sorcery/logger.py
index 5d6a839..5848715 100644
--- a/g_sorcery/logger.py
+++ b/g_sorcery/logger.py
@@ -11,6 +11,8 @@
     :license: GPL-2, see LICENSE for more details.
 """
 
+import sys
+
 import portage
 
 
@@ -29,3 +31,41 @@ class Logger(object):
 
     def warn(self, message):
         self.out.ewarn(message)
+
+
+class ProgressBar(object):
+    """
+    A progress bar for CLI
+    """
+
+    __slots__ = ('length', 'total', 'processed', 'chars')
+    
+    def __init__(self, length, total, processed = 0):
+        self.length = length
+        self.total = total
+        self.chars = ['-', '\\', '|', '/']
+        self.processed = processed
+
+    def begin(self):
+        self.processed = 0
+        self.display()
+
+    def display(self, processed = None):
+        if processed:
+            self.processed = processed
+
+        show = self.chars[self.processed % 4]
+        percent = (self.processed * 100)//self.total
+        progress = (percent * self.length)//100
+        blank = self.length - progress
+        sys.stdout.write("\r %s [%s%s] %s%%" % \
+                             (show, "#" * progress, " " * blank, percent))
+        sys.stdout.flush()
+
+    def increment(self, count = 1):
+        self.processed += count
+        self.display()
+
+    def end(self):
+        self.processed = self.total
+        self.display()

diff --git a/g_sorcery/package_db.py b/g_sorcery/package_db.py
index f8ba1a2..12873eb 100644
--- a/g_sorcery/package_db.py
+++ b/g_sorcery/package_db.py
@@ -26,7 +26,7 @@ from .exceptions import DBStructureError, IntegrityError, \
      InvalidKeyError, SyncError
 from .fileutils import FileJSON, hash_file, load_remote_file, copy_all, wget
 from .g_collections import Package
-from .logger import Logger
+from .logger import Logger, ProgressBar
 
 
 class PackageDB(object):
@@ -249,9 +249,9 @@ class PackageDB(object):
             logger = Logger()
             logger.info("writing database")
 
-        number_of_packages = len(list(self.database))
-        written_number = 0
-        length = 20
+        progress_bar = ProgressBar(20, len(list(self.database)))
+        if self.database:
+                progress_bar.begin()
         
         for pkgname, versions in self.database.items():
             category, name = pkgname.split('/')
@@ -273,19 +273,7 @@ class PackageDB(object):
                 pkgs = []
             pkgs.append(name)
             f.write(pkgs)
-
-            chars = ['-', '\\', '|', '/']
-            show = chars[written_number % 4]
-            percent = (written_number * 100)//number_of_packages
-            progress = (percent * length)//100
-            blank = length - progress
-
-            sys.stdout.write("\r %s [%s%s] %s%%" % \
-                             (show, "#" * progress, " " * blank, percent))
-            sys.stdout.flush()
-            written_number += 1
-
-            
+            progress_bar.increment()
 
         for category in self.categories:
             self.additional_write_category(category)
@@ -293,8 +281,7 @@ class PackageDB(object):
         self.additional_write()
 
         if self.database:
-            sys.stdout.write("\r %s [%s] %s%%" % ("-", "#" * length, 100))
-            sys.stdout.flush()
+            progress_bar.end()
             print("")
 
     def additional_write_version(self, category, package, version):


             reply	other threads:[~2013-08-12  0:36 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-12  0:36 Jauhien Piatlicki [this message]
  -- strict thread matches above, loose matches on Subject: below --
2023-02-24 18:02 [gentoo-commits] proj/g-sorcery:master commit in: g_sorcery/ Ulrich Müller
2015-08-18 18:59 Jauhien Piatlicki
2015-08-18 10:41 [gentoo-commits] proj/g-sorcery:dev " Jauhien Piatlicki
2015-08-18 10:42 ` [gentoo-commits] proj/g-sorcery:master " Jauhien Piatlicki
2015-04-22  7:35 Jauhien Piatlicki
2015-04-20 21:36 [gentoo-commits] proj/g-sorcery:dev " Jauhien Piatlicki
2015-04-22  7:35 ` [gentoo-commits] proj/g-sorcery:master " Jauhien Piatlicki
2014-11-24 14:25 [gentoo-commits] proj/g-sorcery:dev " Jauhien Piatlicki
2014-11-24 14:25 ` [gentoo-commits] proj/g-sorcery:master " Jauhien Piatlicki
2013-09-20 15:09 Jauhien Piatlicki
2013-09-19 23:21 Jauhien Piatlicki
2013-09-18 22:09 Jauhien Piatlicki
2013-09-16 15:05 Jauhien Piatlicki
2013-09-16 14:33 Jauhien Piatlicki
2013-09-16 14:33 Jauhien Piatlicki
2013-09-15 22:38 Jauhien Piatlicki
2013-09-15 18:08 Jauhien Piatlicki
2013-09-15 17:46 Jauhien Piatlicki
2013-09-15 17:46 Jauhien Piatlicki
2013-09-05 21:29 Jauhien Piatlicki
2013-09-04 23:52 Jauhien Piatlicki
2013-09-04 18:14 Jauhien Piatlicki
2013-09-04 18:03 Jauhien Piatlicki
2013-09-04 18:03 Jauhien Piatlicki
2013-09-04 13:37 Jauhien Piatlicki
2013-09-01 22:12 Jauhien Piatlicki
2013-08-02 10:18 Jauhien Piatlicki
2013-08-01 15:58 Jauhien Piatlicki
2013-08-01 15:58 Jauhien Piatlicki
2013-08-01 15:58 Jauhien Piatlicki
2013-08-01 15:58 Jauhien Piatlicki
2013-08-01 15:58 Jauhien Piatlicki
2013-08-01 15:58 Jauhien Piatlicki
2013-08-01 12:55 Jauhien Piatlicki
2013-08-01 12:39 Jauhien Piatlicki
2013-08-01 12:39 Jauhien Piatlicki
2013-08-01 12:39 Jauhien Piatlicki
2013-08-01 12:39 Jauhien Piatlicki
2013-08-01 12:39 Jauhien Piatlicki
2013-08-01 12:39 Jauhien Piatlicki
2013-08-01 12:39 Jauhien Piatlicki
2013-08-01 12:39 Jauhien Piatlicki
2013-07-31 23:29 Jauhien Piatlicki
2013-07-23 23:13 Jauhien Piatlicki
2013-07-23 23:13 Jauhien Piatlicki
2013-07-19 14:44 Jauhien Piatlicki
2013-07-19 11:10 Jauhien Piatlicki
2013-07-18 17:26 Jauhien Piatlicki
2013-07-18 12:18 Jauhien Piatlicki
2013-07-18 12:18 Jauhien Piatlicki
2013-07-18 10:53 Jauhien Piatlicki
2013-07-17 17:05 Jauhien Piatlicki
2013-07-17  8:06 Jauhien Piatlicki
2013-07-16 23:09 Jauhien Piatlicki
2013-07-16 23:09 Jauhien Piatlicki
2013-07-15 17:20 Jauhien Piatlicki
2013-07-15 16:33 Jauhien Piatlicki
2013-07-15  0:18 Jauhien Piatlicki
2013-07-14 23:47 Jauhien Piatlicki
2013-07-13 23:35 Jauhien Piatlicki
2013-07-13 22:22 Jauhien Piatlicki
2013-07-13 15:12 Jauhien Piatlicki
2013-07-13 15:12 Jauhien Piatlicki
2013-07-04 20:24 Jauhien Piatlicki
2013-07-03 23:49 Jauhien Piatlicki
2013-07-03 23:49 Jauhien Piatlicki
2013-07-03 23:32 Jauhien Piatlicki
2013-07-03 22:54 Jauhien Piatlicki
2013-07-03 22:54 Jauhien Piatlicki
2013-07-03 22:54 Jauhien Piatlicki
2013-07-03 22:54 Jauhien Piatlicki
2013-07-03 22:54 Jauhien Piatlicki
2013-07-02 17:30 Jauhien Piatlicki
2013-07-02 12:39 Jauhien Piatlicki
2013-07-02  8:39 Jauhien Piatlicki
2013-07-01  0:07 Jauhien Piatlicki
2013-06-30 23:29 Jauhien Piatlicki
2013-06-29 14:16 Jauhien Piatlicki
2013-06-29 12:13 Jauhien Piatlicki
2013-06-29 12:13 Jauhien Piatlicki
2013-06-24 21:09 Jauhien Piatlicki
2013-06-24 21:09 Jauhien Piatlicki
2013-06-23  0:44 Jauhien Piatlicki
2013-06-23  0:44 Jauhien Piatlicki
2013-06-23  0:44 Jauhien Piatlicki
2013-06-20 23:44 Jauhien Piatlicki
2013-06-20 23:21 Jauhien Piatlicki
2013-06-20 22:53 Jauhien Piatlicki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1376253248.3128ec6e5ec9e3bd472d63621af521153f922d4a.jauhien@gentoo \
    --to=piatlicki@gmail.com \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox