public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
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


             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