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):
next 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