From: "Devan Franchini" <twitch153@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/layman:master commit in: layman/
Date: Thu, 9 Jul 2015 16:18:24 +0000 (UTC) [thread overview]
Message-ID: <1436458633.17fa547f5653b60c67270b1b3fffbc82d20dd09b.twitch153@gentoo> (raw)
commit: 17fa547f5653b60c67270b1b3fffbc82d20dd09b
Author: Devan Franchini <twitch153 <AT> gentoo <DOT> org>
AuthorDate: Thu Jul 9 16:17:13 2015 +0000
Commit: Devan Franchini <twitch153 <AT> gentoo <DOT> org>
CommitDate: Thu Jul 9 16:17:13 2015 +0000
URL: https://gitweb.gentoo.org/proj/layman.git/commit/?id=17fa547f
dbbase.py: Adds use of db module plug-in system
Other changes include code clean up and the disabling of the add_new()
function. Currently the DbBase only supports the XML DBHandler but
more support will be added soon.
layman/dbbase.py | 143 +++++++++++++++++++++++--------------------------------
1 file changed, 59 insertions(+), 84 deletions(-)
diff --git a/layman/dbbase.py b/layman/dbbase.py
index 3e47384..b6c32bc 100644
--- a/layman/dbbase.py
+++ b/layman/dbbase.py
@@ -5,12 +5,13 @@
#################################################################################
# File: dbbase.py
#
-# Access to an xml list of overlays
+# Main handler of overlay database(s).
#
# Copyright:
# (c) 2005 - 2009 Gunnar Wrobel
# (c) 2009 Sebastian Pipping
# (c) 2009 Christian Groschupp
+# (c) 2015 Devan Franchini
# Distributed under the terms of the GNU General Public License v2
#
# Author(s):
@@ -19,11 +20,11 @@
# Christian Groschupp <christian@groschupp.org>
# Devan Franchini <twitch153@gentoo.org>
#
-'''Main handler for overlays.'''
+'''Main handler for overlay database(s).'''
from __future__ import unicode_literals
-__version__ = "$Id: overlay.py 273 2006-12-30 15:54:50Z wrobel $"
+__version__ = "$Id: dbbase.py 273 2015-07-09 11:35:55Z twitch153 $"
#===============================================================================
#
@@ -34,22 +35,22 @@ __version__ = "$Id: overlay.py 273 2006-12-30 15:54:50Z wrobel $"
import os
import os.path
import sys
-import xml
-import xml.etree.ElementTree as ET # Python 2.5
-#from layman.debug import OUT
-from layman.utils import indent
-from layman.compatibility import fileopen
+from layman.module import Modules
from layman.overlays.overlay import Overlay
#py3.2+
if sys.hexversion >= 0x30200f0:
_UNICODE = 'unicode'
+ STR = str
else:
_UNICODE = 'UTF-8'
+ STR = basestring
+MOD_PATH = os.path.join(os.path.dirname(__file__), 'db_modules')
+
#===============================================================================
#
# Class UnknownOverlayException
@@ -65,25 +66,6 @@ class UnknownOverlayException(Exception):
def __str__(self):
return UnknownOverlayMessage(self.repo_name)
-#===============================================================================
-#
-# Class BrokenOverlayCatalog
-#
-#-------------------------------------------------------------------------------
-
-class BrokenOverlayCatalog(ValueError):
- def __init__(self, origin, expat_error, hint=None):
- if hint == None:
- hint = ''
- else:
- hint = '\nHint: %s' % hint
-
- super(BrokenOverlayCatalog, self).__init__(
- 'XML parsing failed for "%(origin)s" (line %(line)d, column'\
- '%(column)d)%(hint)s' % {'line': expat_error.lineno,
- 'column':expat_error.offset + 1,
- 'origin':origin, 'hint':hint})
-
#===============================================================================
#
@@ -96,29 +78,38 @@ class DbBase(object):
Handle a list of overlays.
'''
- def __init__(self, config, paths=None, ignore = 0,
- ignore_init_read_errors=False, allow_missing=False):
+ def __init__(self, config, paths=None, ignore=0,
+ ignore_init_read_errors=False, allow_missing=False):
self.config = config
+ self.db_types = config['db_type']
self.ignore = ignore
- self.paths = paths
+ self.ignore_init_read_errors = ignore_init_read_errors
+ self.mod_ctl = Modules(path=MOD_PATH,
+ namepath='layman.db_modules',
+ output=config['output'])
self.output = config['output']
self.overlays = {}
- self.ignore_init_read_errors = ignore_init_read_errors
+ self.paths = paths
+
path_found = False
self.output.debug('Initializing overlay list handler', 8)
+ if isinstance(self.db_types, STR):
+ self.db_types = [x.strip() for x in self.db_types.split(',')]
+
for path in self.paths:
if not os.path.exists(path):
continue
- self.read_file(path)
+ self.read_db(path)
path_found = True
if not path_found and not allow_missing:
- msg = "Warning: an installed db file was not found at: %(path)s"
- self.output.warn(msg % {'path': str(self.paths)})
+ msg = 'Warning: an installed db file was not found at: %(path)s'\
+ % {'path': str(self.paths)}
+ self.output.warn(msg)
def __eq__(self, other):
@@ -132,21 +123,19 @@ class DbBase(object):
return not self.__eq__(other)
- def read_file(self, path):
+ def _add_from_dict(self, overlays=None):
'''
- Read the overlay definition file.
+ Add a new overlay from a list of dictionary values
'''
- try:
- with fileopen(path, 'r') as df:
- document = df.read()
+ self.output.info('DbBase: add_from_dict()')
- except Exception as error:
- if not self.ignore_init_read_errors:
- self.output.error('Failed to read the overlay list at ("'
- + path + '")')
- raise error
+ for overlay in overlays:
+ self.output.debug('Parsing overlay entry', 8)
+ ovl = Overlay(self.config, ovl_dict=overlay,
+ ignore=self.ignore)
+ self.overlays[ovl.name] = ovl
- self.read(document, origin=path)
+ return
def _broken_catalog_hint(self):
@@ -154,31 +143,17 @@ class DbBase(object):
msg = 'Method "%(name)s.%(func)s" not implemented'\
% {'name': self.__class__.__name__,
'func': this_function_name}
- raise NotImplementedError(msg)
-
- def read(self, text, origin):
- '''
- Read an xml list of overlays (adding to and potentially overwriting
- existing entries)
- '''
- try:
- document = ET.fromstring(text)
- except xml.parsers.expat.ExpatError as err:
- raise BrokenOverlayCatalog(origin, err, self._broken_catalog_hint())
-
- overlays = document.findall('overlay') + document.findall('repo')
-
- for overlay in overlays:
- self.output.debug('Parsing overlay: %s' % overlay, 9)
- ovl = Overlay(config=self.config, xml=overlay, ignore=self.ignore)
- self.overlays[ovl.name] = ovl
+ raise NotImplementedError(msg)
def add_new(self, xml=None, origin=None, from_dict=None):
'''
Reads xml text and dictionary definitions and adds
them to the db.
+
+ NOTE: Currently being refactored. Will be disabled until fixed.
+ '''
'''
if xml is not None:
self.read(xml, origin)
@@ -187,39 +162,37 @@ class DbBase(object):
if isinstance(from_dict, dict):
from_dict = [from_dict]
self._add_from_dict(from_dict)
+ '''
return
- def _add_from_dict(self, overlays=None):
+ def read_db(self, path):
'''
- Add a new overlay from a list of dictionary values
+ Read the overlay database for installed overlay definitions.
'''
- self.output.info("DbBase: add_from_dict()")
- for overlay in overlays:
- self.output.debug('Parsing overlay entry', 8)
- ovl = Overlay(self.config, ovl_dict=overlay,
- ignore=self.ignore)
- self.overlays[ovl.name] = ovl
- return
+ for types in self.db_types:
+ db_ctl = self.mod_ctl.get_class(types)(self.config,
+ self.overlays,
+ self.paths,
+ self.ignore,
+ self.ignore_init_read_errors)
+
+ db_ctl.read_db(path)
def write(self, path):
'''
Write the list of overlays to a file.
'''
- tree = ET.Element('repositories', version="1.0", encoding=_UNICODE)
- tree[:] = [e.to_xml() for e in self.overlays.values()]
- indent(tree)
- tree = ET.ElementTree(tree)
- try:
- with fileopen(path, 'w') as f:
- tree.write(f, encoding=_UNICODE)
+ for types in self.db_types:
+ db_ctl = self.mod_ctl.get_class(types)(self.config,
+ self.overlays,
+ self.paths,
+ self.ignore,
+ self.ignore_init_read_errors)
- except Exception as err:
- msg = 'Failed to write to local overlays file: %(path)s\nError was'\
- ':\n%(err)s' % {'path': path, 'err': err}
- raise Exception(msg)
+ db_ctl.write(path)
def select(self, overlay):
@@ -239,7 +212,8 @@ class DbBase(object):
raise UnknownOverlayException(overlay)
return self.overlays[overlay]
- def list(self, repos=None, verbose = False, width = 0):
+
+ def list(self, repos=None, verbose=False, width=0):
'''
List all overlays.
'''
@@ -262,6 +236,7 @@ class DbBase(object):
return result
+
def list_ids(self):
'''
Returns a list of the overlay names
next reply other threads:[~2015-07-09 16:18 UTC|newest]
Thread overview: 246+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-09 16:18 Devan Franchini [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-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:16 ` 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-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 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=1436458633.17fa547f5653b60c67270b1b3fffbc82d20dd09b.twitch153@gentoo \
--to=twitch153@gentoo.org \
--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