public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Brian Dolbec" <brian.dolbec@gmail.com>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/layman:master commit in: layman/
Date: Mon, 14 Feb 2011 06:00:25 +0000 (UTC)	[thread overview]
Message-ID: <af8c821f1b6c1a48b5ce2f6ba328ba9ff8807a9d.dol-sen@gentoo> (raw)

commit:     af8c821f1b6c1a48b5ce2f6ba328ba9ff8807a9d
Author:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
AuthorDate: Sun Jul 11 04:20:44 2010 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Fri Feb 11 10:49:14 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/layman.git;a=commit;h=af8c821f

Modify the API to be more compatible with a c interface.
Make all main repo functions accept either a string or a list of strings.
Change most functions to return True/False for success/failure and save error messages for separate retrieval.
Change other functions to return a dictionary instead of tuples or lists.
Add a get_errors() for retrieving and resetting error messages.
Change sync to either save or print the success, warnings, fatals info.

---
 layman/api.py |  124 ++++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 87 insertions(+), 37 deletions(-)

diff --git a/layman/api.py b/layman/api.py
index f163f86..e17d70e 100644
--- a/layman/api.py
+++ b/layman/api.py
@@ -58,6 +58,8 @@ class LaymanAPI(object):
         self._installed_ids = None
         self._available_db = None
         self._available_ids = None
+        self._error_messages = []
+        self.sync_results = []
         # call reload() for now to initialize the 2 db's
         self.reload()
         # change it to delayed loading (similar to delayed imports)
@@ -84,6 +86,16 @@ class LaymanAPI(object):
         return id in self._installed_ids
 
 
+    @staticmethod
+    def _check_repo_type( repos, caller):
+        if isinstance(repos, str):
+            repos = [repos]
+        elif not isinstance(repos, list):
+            self._error(2, "%s(), Unsupported input type: %s" %(caller, str(type(repos))))
+            return []
+        return repos
+
+
     def delete_repo(self, repos):
         """delete the selected repo from the system
         
@@ -92,24 +104,27 @@ class LaymanAPI(object):
         @param output: method to handle output if desired
         @rtype dict
         """
-        results = {}
+        repos = self._check_repo_type(repos, "delete_repo")
+        results = []
         for id in repos:
             if not self.is_installed(id):
-                results[id] = True
+                results.append(True)
                 break
             if not self.is_repo(id):
-                self.error(1, UNKNOWN_REPO_ID %id)
-                results[id] = False
+                self._error(1, UNKNOWN_REPO_ID %id)
+                results.append(False)
                 break
             try:
                 self._installed_db.delete(self._installed_db.select(id))
-                results[id] = True
+                results.append(True)
             except Exception, e:
-                self.error(ERROR_INTERNAL_ERROR,
+                self._error(ERROR_INTERNAL_ERROR,
                         "Failed to disable repository '"+id+"':\n"+str(e))
-                results[id] = False
+                results.append(False)
             self.get_installed(reload=True)
-        return results
+        if False in results:
+            return False
+        return True
 
 
     def add_repo(self, repos):
@@ -120,24 +135,27 @@ class LaymanAPI(object):
         @param output: method to handle output if desired
         @rtype dict
         """
-        results = {}
+        repos = self._check_repo_type(repos, "add_repo")
+        results = []
         for id in repos:
             if self.is_installed(id):
-                results[id] = True
+                results.append(True)
                 break
             if not self.is_repo(id):
-                self.error(1, UNKNOWN_REPO_ID %id)
-                results[id] = False
+                self._error(1, UNKNOWN_REPO_ID %id)
+                results.append(False)
                 break
             try:
                 self._installed_db.add(self._available_db.select(id), quiet=True)
-                results[id] = True
+                results.append(True)
             except Exception, e:
-                self.error(ERROR_INTERNAL_ERROR,
+                self._error(ERROR_INTERNAL_ERROR,
                         "Failed to enable repository '"+id+"' : "+str(e))
-                results[id] = False
+                results.append(False)
             self.get_installed(reload=True)
-        return results
+        if False in results:
+            return False
+        return True
 
 
     def get_info(self, repos):
@@ -146,53 +164,55 @@ class LaymanAPI(object):
         @type repos: list
         @param repos: ['repo-id1', ...]
         @rtype list of tuples [(str, bool, bool),...]
-        @return: (info, official, supported)
+        @return: dictionary  {'id': (info, official, supported)}
         """
-        result = []
+        repos = self._check_repo_type(repos, "get_info")
+        result = {}
 
         for id in repos:
             if not self.is_repo(id):
-                self.error(1, UNKNOWN_REPO_ID %id)
-                result.append(('', False, False))
+                self._error(1, UNKNOWN_REPO_ID %id)
+                result[id] = ('', False, False))
             try:
                 overlay = self._available_db.select(id)
             except UnknownOverlayException, error:
-                self.error(2, "Error: %s" %str(error))
-                result.append(('', False, False))
+                self._error(2, "Error: %s" %str(error))
+                 result[id] = ('', False, False))
             else:
                 # Is the overlay supported?
                 info = overlay.__str__()
                 official = overlay.is_official()
                 supported = overlay.is_supported()
-                result.append((info, official, supported))
+                 result[id] = (info, official, supported)
 
         return result
 
 
-    def sync(self, repos):
+    def sync(self, repos, output_results=True):
         """syncs the specified repo(s) specified by repos
         
-        @type repos: list
-        @param repos: ['repo-id1', ...]
-        @rtype bool
+        @type repos: list or string
+        @param repos: ['repo-id1', ...] or 'repo-id'
+        @rtype bool or {'repo-id': bool,...}
         """
-        
-        fatals = []
+        fatal = []
         warnings = []
         success  = []
+        repos = self._check_repo_type(repos, "sync")
+
         for id in repos:
             try:
                 odb = self._installed_db.select(id)
             except UnknownOverlayException, error:
-                fatals.append((id, str(error)))
+                self._error(1,"Sync(), failed to select %s overlay.  Original error was: %s" %(id, str(error)))
                 continue
 
             try:
                 ordb = self._available_db.select(id)
             except UnknownOverlayException:
-                warnings.append((id,
-                    'Overlay "%s" could not be found in the remote lists.\n'
-                    'Please check if it has been renamed and re-add if necessary.', {'repo_name':id}))
+                message = 'Overlay "%s" could not be found in the remote lists.\n'
+                        'Please check if it has been renamed and re-add if necessary.' %id
+                warnings.append((id, message))
             else:
                 current_src = odb.sources[0].src
                 available_srcs = set(e.src for e in ordb.sources)
@@ -230,7 +250,26 @@ class LaymanAPI(object):
                     'Failed to sync overlay "' + id + '".\nError was: '
                     + str(error)))
 
-        return (warnings, success, fatals)
+        if output_results:
+            if success:
+                self.output.info('\nSuccess:\n------\n', 3)
+                for result in success:
+                    self.output.info(result, 3)
+                    
+            if warnings:
+                self.output.warn('\nWarnings:\n------\n', 2)
+                for result in warnings:
+                    self.output.warn(result + '\n', 2)
+
+            if fatals:
+                self.output.error('\nErrors:\n------\n')
+                for result in fatals:
+                    self.output.error(result + '\n')
+                return False
+        else:
+            self.sync_results = (success, warnings, fatals)
+
+        return True
 
 
     def fetch_remote_list(self):
@@ -238,7 +277,7 @@ class LaymanAPI(object):
         try:
             self._available_db.cache()
         except Exception, error:
-            self.error(-1,'Failed to fetch overlay list!\n Original Error was: '
+            self._error(-1,'Failed to fetch overlay list!\n Original Error was: '
                     + str(error))
             return False
         return True
@@ -266,13 +305,24 @@ class LaymanAPI(object):
         result = self.get_installed(reload=True)
 
 
-    def error(self, num, message):
+    def _error(self, num, message):
         """outputs the error to the pre-determined output
         defaults to stderr.  This method may be removed, is here for now
         due to code taken from the packagekit backend.
         """
+        m = "Error: %d," %num, message
+        self._error_messages.append(m)
         if self.report_errors:
-            print >>stderr, "Error: %d," %num, message
+            print >>stderr, m
+
+
+    def get_errors(self):
+        """returns any warning or fatal messages that occurred during
+        an operation and resets it back to None
+        """
+        if self._error_messages:
+            return self._error_messages[:]
+            self._error_messages = []
 
 
 class Output(Message):



             reply	other threads:[~2011-02-14  6:03 UTC|newest]

Thread overview: 246+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-14  6:00 Brian Dolbec [this message]
  -- strict thread matches above, loose matches on Subject: below --
2020-04-24 20:59 [gentoo-commits] proj/layman:master commit in: layman/ Brian Dolbec
2020-04-24 20:59 Brian Dolbec
2017-03-22  6:36 Brian Dolbec
2017-02-02 17:12 Brian Dolbec
2017-02-02  1:12 Devan Franchini
2017-02-02  1:12 Devan Franchini
2016-11-10  2:59 Devan Franchini
2016-05-10 22:13 Brian Dolbec
2016-05-02  3:30 Devan Franchini
2016-03-10  0:00 Devan Franchini
2016-03-09 23:37 Devan Franchini
2016-02-29  6:21 Devan Franchini
2016-01-29 10:21 Brian Dolbec
2015-12-31  1:03 Devan Franchini
2015-12-26 23:24 Brian Dolbec
2015-11-29  3:26 Devan Franchini
2015-11-29  3:12 Devan Franchini
2015-10-17  3:20 Devan Franchini
2015-10-16 18:49 Devan Franchini
2015-10-16 18:49 Devan Franchini
2015-09-23 15:25 Devan Franchini
2015-09-05  6:03 Devan Franchini
2015-08-28  1:48 Devan Franchini
2015-08-28  1:48 Devan Franchini
2015-08-28  1:48 Devan Franchini
2015-08-04  1:05 Devan Franchini
2015-07-19  3:53 Devan Franchini
2015-07-17 17:05 Devan Franchini
2015-07-17 17:05 Devan Franchini
2015-07-17 17:05 Devan Franchini
2015-07-15 16:15 Devan Franchini
2015-07-15 15:53 Devan Franchini
2015-07-13 23:05 Devan Franchini
2015-07-13 13:26 Devan Franchini
2015-07-09 17:23 Devan Franchini
2015-07-09 16:18 Devan Franchini
2015-06-16  3:45 Devan Franchini
2015-06-14  4:12 Devan Franchini
2015-06-13  4:53 Devan Franchini
2015-06-13  2:38 Devan Franchini
2015-06-13  2:31 Devan Franchini
2015-05-13 21:32 Devan Franchini
2015-05-13 21:27 Devan Franchini
2015-05-13 20:38 Devan Franchini
2015-05-13 20:05 Devan Franchini
2015-05-13 19:58 Devan Franchini
2015-04-22 17:40 Devan Franchini
2015-04-20 17:15 Devan Franchini
2015-03-27 23:42 Devan Franchini
2015-03-26 22:50 Devan Franchini
2015-03-26 22:06 Devan Franchini
2015-03-24 23:08 Devan Franchini
2015-03-24 22:56 Devan Franchini
2015-03-24 22:20 Devan Franchini
2015-03-24 16:08 Devan Franchini
2015-03-07 22:40 Devan Franchini
2015-03-07 22:40 Devan Franchini
2015-03-07 22:10 Devan Franchini
2015-03-07 22:02 Devan Franchini
2015-02-21 18:41 Devan Franchini
2015-02-17  5:07 Brian Dolbec
2015-02-09 18:25 Devan Franchini
2015-02-08  4:20 Brian Dolbec
2015-02-08  4:20 Brian Dolbec
2015-02-08  2:58 Devan Franchini
2015-02-08  1:57 Brian Dolbec
2015-02-08  0:33 Devan Franchini
2015-02-05  2:56 Devan Franchini
2015-02-05  2:31 Devan Franchini
2015-02-05  2:20 Devan Franchini
2015-02-03  2:43 Devan Franchini
2014-12-08  4:15 Devan Franchini
2014-12-04 20:46 Devan Franchini
2014-11-13 19:03 Brian Dolbec
2014-11-13 18:43 Brian Dolbec
2014-11-13 18:43 Brian Dolbec
2014-11-13 18:08 Brian Dolbec
2014-11-13 18:08 Brian Dolbec
2014-11-13 18:08 Brian Dolbec
2014-11-13 18:08 Brian Dolbec
2014-11-02 21:14 Devan Franchini
2014-09-28 22:42 Devan Franchini
2014-09-20 17:47 Devan Franchini
2014-09-19 18:13 Devan Franchini
2014-09-19 18:13 Devan Franchini
2014-08-28 22:54 Brian Dolbec
2014-08-28 22:01 Devan Franchini
2014-08-28 22:01 Devan Franchini
2014-08-19  1:49 Devan Franchini
2014-08-19  1:49 Devan Franchini
2014-08-17  4:01 ` Devan Franchini
2014-08-19  1:49 Devan Franchini
2014-08-15 22:33 ` Devan Franchini
2014-08-19  1:49 Devan Franchini
2014-08-19  1:49 Devan Franchini
2014-08-15 23:27 ` Devan Franchini
2014-08-19  1:49 Devan Franchini
2014-08-16 22:46 ` Devan Franchini
2014-08-19  1:49 Devan Franchini
2014-08-15 23:16 ` Devan Franchini
2014-08-17 20:55 Devan Franchini
2014-08-19  1:49 ` Devan Franchini
2014-08-17 14:15 Brian Dolbec
2014-08-16 18:06 Brian Dolbec
2014-08-15 23:59 Devan Franchini
2014-08-19  1:49 ` Devan Franchini
2014-06-16  3:40 Brian Dolbec
2014-06-16  3:40 Brian Dolbec
2014-06-16  3:40 Brian Dolbec
2014-06-16  3:37 [gentoo-commits] proj/layman:gsoc2014 " Brian Dolbec
2014-06-16  3:40 ` [gentoo-commits] proj/layman:master " Brian Dolbec
2014-06-16  3:37 [gentoo-commits] proj/layman:gsoc2014 " Brian Dolbec
2014-06-16  3:40 ` [gentoo-commits] proj/layman:master " Brian Dolbec
2014-06-16  3:37 [gentoo-commits] proj/layman:gsoc2014 " Brian Dolbec
2014-06-16  3:40 ` [gentoo-commits] proj/layman:master " Brian Dolbec
2014-06-16  3:37 [gentoo-commits] proj/layman:gsoc2014 " Brian Dolbec
2014-06-16  3:40 ` [gentoo-commits] proj/layman:master " Brian Dolbec
2014-05-07 22:18 Devan Franchini
2014-03-10  3:18 Brian Dolbec
2013-12-29  2:30 Brian Dolbec
2013-08-18 14:48 Brian Dolbec
2013-07-29  1:46 Brian Dolbec
2013-01-11 18:29 Brian Dolbec
2012-12-16 18:13 Brian Dolbec
2012-11-28  4:14 Brian Dolbec
2012-11-28  4:02 Brian Dolbec
2012-11-28  4:02 Brian Dolbec
2012-11-18 22:15 Brian Dolbec
2012-11-18 22:15 Brian Dolbec
2012-11-18 22:15 Brian Dolbec
2012-11-01  4:00 Brian Dolbec
2012-10-30  8:30 Brian Dolbec
2012-10-17  6:21 Brian Dolbec
2012-10-17  6:21 Brian Dolbec
2012-10-13 22:20 Brian Dolbec
2012-10-13 22:20 Brian Dolbec
2012-10-08  5:37 Brian Dolbec
2012-10-07 23:40 Brian Dolbec
2012-10-07 23:40 Brian Dolbec
2012-06-07  4:49 Brian Dolbec
2012-06-07  4:49 Brian Dolbec
2012-06-07  4:49 Brian Dolbec
2012-04-14  2:14 Brian Dolbec
2012-04-09 19:47 Brian Dolbec
2012-04-01 21:54 Brian Dolbec
2012-03-26  3:43 Brian Dolbec
2012-03-04 15:36 Brian Dolbec
2011-12-27  2:20 Brian Dolbec
2011-10-27  4:42 Brian Dolbec
2011-10-26 23:19 Brian Dolbec
2011-10-14  3:14 Brian Dolbec
2011-09-24  6:07 Brian Dolbec
2011-08-25  3:33 Brian Dolbec
2011-08-21  7:53 Brian Dolbec
2011-08-21  7:53 Brian Dolbec
2011-08-21  7:53 Brian Dolbec
2011-08-20 17:06 Brian Dolbec
2011-08-20 17:06 Brian Dolbec
2011-08-11  3:24 Brian Dolbec
2011-08-11  3:24 Brian Dolbec
2011-08-11  3:24 Brian Dolbec
2011-08-11  3:24 Brian Dolbec
2011-08-09  2:46 Brian Dolbec
2011-08-07 21:21 Brian Dolbec
2011-08-07  7:12 Brian Dolbec
2011-08-07  7:12 Brian Dolbec
2011-08-07  7:12 Brian Dolbec
2011-08-07  6:00 Brian Dolbec
2011-08-07  2:29 Brian Dolbec
2011-08-06 20:30 Brian Dolbec
2011-08-06 18:29 Brian Dolbec
2011-08-06 18:29 Brian Dolbec
2011-07-28 21:33 Brian Dolbec
2011-07-23  6:45 Brian Dolbec
2011-07-20 18:34 Brian Dolbec
2011-07-12 20:01 Brian Dolbec
2011-07-12 19:57 Brian Dolbec
2011-07-12 19:57 Brian Dolbec
2011-07-12 19:02 Brian Dolbec
2011-07-12 19:02 Brian Dolbec
2011-05-18  5:19 Brian Dolbec
2011-05-18  5:13 Brian Dolbec
2011-05-14 13:06 Brian Dolbec
2011-05-05  9:44 Brian Dolbec
2011-05-02  5:25 Brian Dolbec
2011-05-01  2:18 Brian Dolbec
2011-05-01  0:53 Brian Dolbec
2011-05-01  0:26 Brian Dolbec
2011-04-30 22:37 Brian Dolbec
2011-04-30 22:37 Brian Dolbec
2011-04-30  6:37 Brian Dolbec
2011-04-30  6:37 Brian Dolbec
2011-04-27 10:58 Brian Dolbec
2011-04-27 10:58 Brian Dolbec
2011-04-27 10:58 Brian Dolbec
2011-04-27 10:58 Brian Dolbec
2011-04-27 10:58 Brian Dolbec
2011-04-27 10:58 Brian Dolbec
2011-04-27 10:58 Brian Dolbec
2011-04-27 10:58 Brian Dolbec
2011-04-27 10:58 Brian Dolbec
2011-04-27 10:58 Brian Dolbec
2011-04-27 10:58 Brian Dolbec
2011-04-27 10:58 Brian Dolbec
2011-04-27 10:58 Brian Dolbec
2011-04-27 10:58 Brian Dolbec
2011-04-27 10:58 Brian Dolbec
2011-02-19 11:01 Brian Dolbec
2011-02-19 11:01 Brian Dolbec
2011-02-19 11:01 Brian Dolbec
2011-02-19 11:01 Brian Dolbec
2011-02-19  4:49 Brian Dolbec
2011-02-19  4:47 Brian Dolbec
2011-02-19  4:10 Brian Dolbec
2011-02-19  4:07 Brian Dolbec
2011-02-17 21:53 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  6:00 Brian Dolbec
2011-02-14  0:54 [gentoo-commits] proj/layman:overlord_merge " Brian Dolbec
2011-02-14  6:00 ` [gentoo-commits] proj/layman:master " Brian Dolbec
2011-02-14  0:54 [gentoo-commits] proj/layman:overlord_merge " Brian Dolbec
2011-02-14  6:00 ` [gentoo-commits] proj/layman:master " Brian Dolbec
2011-02-14  0:54 [gentoo-commits] proj/layman:overlord_merge " Brian Dolbec
2011-02-14  6:00 ` [gentoo-commits] proj/layman:master " Brian Dolbec
2011-02-14  0:54 [gentoo-commits] proj/layman:overlord_merge " Brian Dolbec
2011-02-14  6:00 ` [gentoo-commits] proj/layman:master " Brian Dolbec
2011-02-14  0:54 [gentoo-commits] proj/layman:overlord_merge " Brian Dolbec
2011-02-14  6:00 ` [gentoo-commits] proj/layman:master " Brian Dolbec

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=af8c821f1b6c1a48b5ce2f6ba328ba9ff8807a9d.dol-sen@gentoo \
    --to=brian.dolbec@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