* [gentoo-commits] proj/layman:master commit in: layman/db_modules/xml_db/, layman/db_modules/sqlite_db/, layman/, ...
@ 2015-08-05 6:02 Devan Franchini
0 siblings, 0 replies; 2+ messages in thread
From: Devan Franchini @ 2015-08-05 6:02 UTC (permalink / raw
To: gentoo-commits
commit: daafd7d31457b018797407d97188a4829839172e
Author: Devan Franchini <twitch153 <AT> gentoo <DOT> org>
AuthorDate: Wed Aug 5 05:55:16 2015 +0000
Commit: Devan Franchini <twitch153 <AT> gentoo <DOT> org>
CommitDate: Wed Aug 5 05:58:59 2015 +0000
URL: https://gitweb.gentoo.org/proj/layman.git/commit/?id=daafd7d3
Adds remove function for overlay removal from databases
sqlite_db.py: Also changes the way in which feeds are gathered in
read_db(), this shows the nature of feeds being an unrequired attribute
of the overlay.
layman/db.py | 2 +-
layman/db_modules/json_db/__init__.py | 3 ++-
layman/db_modules/json_db/json_db.py | 8 ++++++++
layman/db_modules/sqlite_db/__init__.py | 5 +++--
layman/db_modules/sqlite_db/sqlite_db.py | 23 ++++++++++++++++-------
layman/db_modules/xml_db/__init__.py | 3 ++-
layman/db_modules/xml_db/xml_db.py | 8 ++++++++
layman/dbbase.py | 13 +++++++++++++
8 files changed, 53 insertions(+), 12 deletions(-)
diff --git a/layman/db.py b/layman/db.py
index ba7399c..673e6bf 100644
--- a/layman/db.py
+++ b/layman/db.py
@@ -148,7 +148,7 @@ class DB(DbBase):
if overlay.name in self.overlays.keys():
overlay.delete(self.config['storage'])
repo_ok = self.repo_conf.delete(overlay)
- del self.overlays[overlay.name]
+ self.remove(overlay, self.path)
self.write(self.path)
else:
self.output.error('No local overlay named "' + overlay.name + '"!')
diff --git a/layman/db_modules/json_db/__init__.py b/layman/db_modules/json_db/__init__.py
index 1502b9d..ac4daa7 100644
--- a/layman/db_modules/json_db/__init__.py
+++ b/layman/db_modules/json_db/__init__.py
@@ -13,10 +13,11 @@ module_spec = {
'name': 'json_db',
'class': 'DBHandler',
'description': __doc__,
- 'functions': ['add_new', 'read_db', 'write'],
+ 'functions': ['add_new', 'read_db', 'remove', 'write'],
'func_desc': {
'add_new': 'Adds overlay(s) from provided database text',
'read_db': 'Reads the list of overlays from database file',
+ 'remove' : 'Removes overlay from installed overlays list',
'write' : 'Writes the list of overlays to database file',
},
}
diff --git a/layman/db_modules/json_db/json_db.py b/layman/db_modules/json_db/json_db.py
index 47413c6..d466385 100644
--- a/layman/db_modules/json_db/json_db.py
+++ b/layman/db_modules/json_db/json_db.py
@@ -104,6 +104,14 @@ class DBHandler(object):
return True
+ def remove(self, overlay, path):
+ '''
+ Removes an overlay from installed overlays list.
+ '''
+ if overlay.name in self.overlays:
+ del self.overlays[overlay.name]
+
+
def write(self, path):
'''
Write the list of overlays to a file.
diff --git a/layman/db_modules/sqlite_db/__init__.py b/layman/db_modules/sqlite_db/__init__.py
index 7d2fba4..536fc2d 100644
--- a/layman/db_modules/sqlite_db/__init__.py
+++ b/layman/db_modules/sqlite_db/__init__.py
@@ -13,10 +13,11 @@ module_spec = {
'name': 'sqlite_db',
'class': 'DBHandler',
'description': __doc__,
- 'functions': ['add_new', 'read_db', 'write'],
+ 'functions': ['add_new', 'read_db', 'remove', 'write'],
'func_desc': {
- 'add_new': 'Adds overlay(s) from provided database text',
+ 'add_new': 'Adds overlay(s) from provided database file',
'read_db': 'Reads the list of overlays from database file',
+ 'remove' : 'Removes overlay from provided database file',
'write' : 'Writes the list of overlays to database file',
},
}
diff --git a/layman/db_modules/sqlite_db/sqlite_db.py b/layman/db_modules/sqlite_db/sqlite_db.py
index 1d079a3..aef9661 100644
--- a/layman/db_modules/sqlite_db/sqlite_db.py
+++ b/layman/db_modules/sqlite_db/sqlite_db.py
@@ -103,8 +103,8 @@ class DBHandler(object):
cursor.execute('''CREATE TABLE IF NOT EXISTS Overlay
( Overlay_ID INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT,
Priority TEXT, Status TEXT, Quality TEXT, Homepage
- TEXT, IRC TEXT, License TEXT, UNIQUE (Name, Homepage, License)
- ON CONFLICT IGNORE )''')
+ TEXT, IRC TEXT, License TEXT, UNIQUE (Name) ON CONFLICT IGNORE )
+ ''')
cursor.execute('''CREATE TABLE IF NOT EXISTS Owner ( Owner_ID
INTEGER PRIMARY KEY AUTOINCREMENT, Owner_Name TEXT,
Owner_Email TEXT, UNIQUE (Owner_Name, Owner_Email) ON
@@ -180,15 +180,17 @@ class DBHandler(object):
cursor.execute('''SELECT Description FROM Description JOIN Overlay
USING (Overlay_ID) WHERE Overlay_ID = ?''', (overlay_id,))
- overlay['description'] = cursor.fetchall()
-
- if len(overlay['description']):
- overlay['description'] = overlay['description'][0]
+ overlay['description'] = cursor.fetchall()[0]
overlay['status'] = overlay_info[3]
overlay['quality'] = overlay_info[4]
overlay['priority'] = overlay_info[2]
- overlay['license'] = overlay_info[7]
+
+ if overlay_info[7]:
+ overlay['license'] = overlay_info[7]
+ else:
+ overlay['license'] = None
+
overlay['homepage'] = overlay_info[5]
overlay['IRC'] = overlay_info[6]
@@ -196,9 +198,13 @@ class DBHandler(object):
(Overlay_ID) WHERE Overlay_ID = ?''', (overlay_id,))
overlay['feed'] = cursor.fetchall()
+ if len(overlay['feed']):
+ overlay['feed'] = overlay['feed'][0]
+
self.overlays[overlay_info[1]] = Overlay(self.config,
ovl_dict=overlay,
ignore=self.ignore)
+ connection.close()
def add_new(self, document=None, origin=None):
@@ -316,6 +322,9 @@ class DBHandler(object):
connection.commit()
+ if overlay.name in self.overlays:
+ del self.overlays[overlay.name]
+
def write(self, path):
'''
diff --git a/layman/db_modules/xml_db/__init__.py b/layman/db_modules/xml_db/__init__.py
index 3a3abd1..c8a5bf9 100644
--- a/layman/db_modules/xml_db/__init__.py
+++ b/layman/db_modules/xml_db/__init__.py
@@ -13,10 +13,11 @@ module_spec = {
'name': 'xml_db',
'class': 'DBHandler',
'description': __doc__,
- 'functions': ['add_new', 'read_db', 'write'],
+ 'functions': ['add_new', 'read_db', 'remove', 'write'],
'func_desc': {
'add_new': 'Adds overlay(s) from provided database text',
'read_db': 'Reads the list of overlays from database file',
+ 'remove' : 'Removes overlay from installed overlays list',
'write' : 'Writes the list of overlays to database file',
},
}
diff --git a/layman/db_modules/xml_db/xml_db.py b/layman/db_modules/xml_db/xml_db.py
index 38a19d2..316d8f9 100644
--- a/layman/db_modules/xml_db/xml_db.py
+++ b/layman/db_modules/xml_db/xml_db.py
@@ -149,6 +149,14 @@ class DBHandler(object):
return True
+ def remove(self, overlay, path):
+ '''
+ Removes an overlay from list of installed overlays.
+ '''
+ if overlay.name in self.overlays:
+ del self.overlays[overlay.name]
+
+
def write(self, path):
'''
Write the list of overlays to a file.
diff --git a/layman/dbbase.py b/layman/dbbase.py
index 7832565..cecbf5c 100644
--- a/layman/dbbase.py
+++ b/layman/dbbase.py
@@ -215,6 +215,19 @@ class DbBase(object):
db_ctl.write(path)
+ def remove(self, overlay, path):
+ '''
+ Remove an overlay from the database.
+ '''
+ db_ctl = self.mod_ctl.get_class(self.db_type)(self.config,
+ self.overlays,
+ self.paths,
+ self.ignore,
+ self.ignore_init_read_errors)
+
+ db_ctl.remove(overlay, path)
+
+
def select(self, overlay):
'''
Select an overlay from the list.
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [gentoo-commits] proj/layman:master commit in: layman/db_modules/xml_db/, layman/db_modules/sqlite_db/, layman/, ...
@ 2016-02-29 6:11 Devan Franchini
0 siblings, 0 replies; 2+ messages in thread
From: Devan Franchini @ 2016-02-29 6:11 UTC (permalink / raw
To: gentoo-commits
commit: f8eb545aa0b268cfd08644b0996a6681359dc0bc
Author: Devan Franchini <twitch153 <AT> gentoo <DOT> org>
AuthorDate: Mon Feb 29 06:09:27 2016 +0000
Commit: Devan Franchini <twitch153 <AT> gentoo <DOT> org>
CommitDate: Mon Feb 29 06:09:29 2016 +0000
URL: https://gitweb.gentoo.org/proj/layman.git/commit/?id=f8eb545a
Adds error reporting for db read failures
If the database back-end fails to be read then layman will properly
report it and exit without causing an ugly traceback.
layman/db_modules/json_db/json_db.py | 7 +-
layman/db_modules/sqlite_db/sqlite_db.py | 121 +++++++++++++++++--------------
layman/db_modules/xml_db/xml_db.py | 21 ++++--
layman/dbbase.py | 12 ++-
4 files changed, 95 insertions(+), 66 deletions(-)
diff --git a/layman/db_modules/json_db/json_db.py b/layman/db_modules/json_db/json_db.py
index 70e41d5..bf88593 100644
--- a/layman/db_modules/json_db/json_db.py
+++ b/layman/db_modules/json_db/json_db.py
@@ -75,6 +75,10 @@ class DBHandler(object):
try:
with fileopen(path, 'r') as df:
document = df.read()
+ except ValueError as error:
+ msg = 'JSON DBHanlder - ValueError: %(err)s' % {'err': error}
+ self.output.error(msg)
+ return False
except Exception as error:
if not self.ignore_init_read_errors:
msg = 'JSON DBHandler - Failed to read the overlay list at'\
@@ -82,7 +86,8 @@ class DBHandler(object):
self.output.error(msg)
raise error
- self.add_new(document, origin=path)
+ success = self.add_new(document, origin=path)
+ return success
def add_new(self, document=None, origin=None):
diff --git a/layman/db_modules/sqlite_db/sqlite_db.py b/layman/db_modules/sqlite_db/sqlite_db.py
index a3305a7..3585c4a 100644
--- a/layman/db_modules/sqlite_db/sqlite_db.py
+++ b/layman/db_modules/sqlite_db/sqlite_db.py
@@ -136,6 +136,8 @@ class DBHandler(object):
CONFLICT IGNORE )''')
connection.commit()
+ except sqlite3.DatabaseError as err:
+ raise err
except Exception as err:
msg = 'SQLite DBHandler error; failed to create database.\n'\
'Error was: %(msg)s' % {'msg': err}
@@ -152,64 +154,71 @@ class DBHandler(object):
overlay_id = None
overlay = {}
- with self.__connect__(path) as connection:
- cursor = connection.cursor()
- cursor.execute('''SELECT Overlay_ID, Name, Priority, Status,
- Quality, Homepage, IRC, License FROM Overlay''')
- overlays_info = cursor.fetchall()
- connection.commit()
+ try:
+ connection = self.__connect__(path)
+ except sqlite3.DatabaseError as err:
+ msg = 'SQLite DBHandler DatabaseError: %(err)s' % {'err': err}
+ self.output.error(msg)
+ return False
- for overlay_info in overlays_info:
- overlay = {}
- overlay_id = overlay_info[0]
- overlay['name'] = overlay_info[1]
-
- cursor.execute('''SELECT URL, Type, Branch FROM Overlay_Source
- JOIN Overlay USING (Overlay_ID) JOIN Source USING (Source_ID)
- WHERE Overlay_ID = ?''', (overlay_id,))
- overlay['source'] = cursor.fetchall()
-
- cursor.execute('''SELECT Owner_Email, Owner_Name FROM
- Overlay_Owner JOIN Overlay USING (Overlay_ID) JOIN Owner USING
- (Owner_ID) WHERE Overlay_ID = ?''', (overlay_id,))
- owner_info = cursor.fetchall()
- overlay['owner'] = []
-
- for _owner in owner_info:
- owner = {}
- if _owner[0]:
- owner['email'] = _owner[0]
+ cursor = connection.cursor()
+ cursor.execute('''SELECT Overlay_ID, Name, Priority, Status,
+ Quality, Homepage, IRC, License FROM Overlay''')
+ overlays_info = cursor.fetchall()
+ connection.commit()
+
+ for overlay_info in overlays_info:
+ overlay = {}
+ overlay_id = overlay_info[0]
+ overlay['name'] = overlay_info[1]
+
+ cursor.execute('''SELECT URL, Type, Branch FROM Overlay_Source
+ JOIN Overlay USING (Overlay_ID) JOIN Source USING (Source_ID)
+ WHERE Overlay_ID = ?''', (overlay_id,))
+ overlay['source'] = cursor.fetchall()
+
+ cursor.execute('''SELECT Owner_Email, Owner_Name FROM Overlay_Owner
+ JOIN Overlay USING (Overlay_ID) JOIN Owner USING (Owner_ID)
+ WHERE Overlay_ID = ?''', (overlay_id,))
+ owner_info = cursor.fetchall()
+ overlay['owner'] = []
+ for _owner in owner_info:
+ owner = {}
+ if _owner[0]:
+ owner['email'] = _owner[0]
+ else:
+ owner['email'] = None
+ if len(_owner) > 1:
+ if _owner[1]:
+ owner['name'] = _owner[1]
else:
- owner['email'] = None
- if len(_owner) > 1:
- if _owner[1]:
- owner['name'] = _owner[1]
- else:
- owner['name'] = None
- overlay['owner'].append(owner)
-
- cursor.execute('''SELECT Description FROM Description JOIN
- Overlay USING (Overlay_ID) WHERE Overlay_ID = ?''',
- (overlay_id,))
- overlay['description'] = cursor.fetchall()[0]
-
- overlay['status'] = overlay_info[3]
- overlay['quality'] = overlay_info[4]
- overlay['priority'] = overlay_info[2]
- overlay['license'] = overlay_info[7]
- overlay['homepage'] = overlay_info[5]
- overlay['IRC'] = overlay_info[6]
-
- cursor.execute('''SELECT Feed FROM Feed JOIN Overlay USING
- (Overlay_ID) WHERE Overlay_ID = ?''', (overlay_id,))
- overlay['feed'] = cursor.fetchall()
-
- if len(overlay['feed']):
- overlay['feed'] = overlay['feed'][0]
-
- self.overlays[overlay_info[1]] = Overlay(self.config,
- ovl_dict=overlay,
- ignore=self.ignore)
+ owner['name'] = None
+ overlay['owner'].append(owner)
+
+ cursor.execute('''SELECT Description FROM Description
+ JOIN Overlay USING (Overlay_ID) WHERE Overlay_ID = ?''',
+ (overlay_id,))
+ overlay['description'] = cursor.fetchall()[0]
+
+ overlay['status'] = overlay_info[3]
+ overlay['quality'] = overlay_info[4]
+ overlay['priority'] = overlay_info[2]
+ overlay['license'] = overlay_info[7]
+ overlay['homepage'] = overlay_info[5]
+ overlay['IRC'] = overlay_info[6]
+
+ cursor.execute('''SELECT Feed FROM Feed JOIN Overlay USING
+ (Overlay_ID) WHERE Overlay_ID = ?''', (overlay_id,))
+ overlay['feed'] = cursor.fetchall()
+
+ if len(overlay['feed']):
+ overlay['feed'] = overlay['feed'][0]
+
+ self.overlays[overlay_info[1]] = Overlay(self.config,
+ ovl_dict=overlay,
+ ignore=self.ignore)
+ connection.close()
+ return True
def add_new(self, document=None, origin=None):
diff --git a/layman/db_modules/xml_db/xml_db.py b/layman/db_modules/xml_db/xml_db.py
index fbd7a6a..f44b9c5 100644
--- a/layman/db_modules/xml_db/xml_db.py
+++ b/layman/db_modules/xml_db/xml_db.py
@@ -108,12 +108,13 @@ class DBHandler(object):
document = df.read()
except Exception as error:
if not self.ignore_init_read_errors:
- msg = 'XML DBHandler - Failed to read the overlay list at'\
- '("%(path)s")' % {'path': path}
+ msg = 'XML DBHandler - Failed to read the overlay list at '\
+ '"%(path)s"' % {'path': path}
self.output.error(msg)
- raise error
+ return False
- self.read(document, origin=path)
+ success = self.read(document, origin=path)
+ return success
def read(self, text, origin):
@@ -123,8 +124,10 @@ class DBHandler(object):
'''
try:
document = ET.fromstring(text)
- except xml.parsers.expat.ExpatError as err:
- raise BrokenOverlayCatalog(origin, err, self._broken_catalog_hint())
+ except ET.ParseError as error:
+ msg = 'XML DBHandler - ET.ParseError: %(err)s' % {'err': error}
+ self.output.error(msg)
+ return False
overlays = document.findall('overlay') + document.findall('repo')
@@ -134,6 +137,8 @@ class DBHandler(object):
ovl = Overlay(config=self.config, xml=overlay, ignore=self.ignore)
self.overlays[ovl.name] = ovl
+ return True
+
def add_new(self, xml=None, origin=None):
'''
@@ -145,8 +150,8 @@ class DBHandler(object):
self.output.warn(msg)
return False
- self.read(xml, origin)
- return True
+ success = self.read(xml, origin)
+ return success
def remove(self, overlay, path):
diff --git a/layman/dbbase.py b/layman/dbbase.py
index c2b25b8..8b25fcd 100644
--- a/layman/dbbase.py
+++ b/layman/dbbase.py
@@ -111,7 +111,17 @@ class DbBase(object):
if not os.path.exists(path):
continue
- self.read_db(path)
+ success = self.read_db(path)
+ if not success:
+ msg = 'DbBase; error, Failed to read database at "%(path)s"\n'\
+ 'Hint: If you manually set db_type. Please reset it and '\
+ 'let layman-updater\nmigrate it. Otherwise layman\'s '\
+ 'database is not initialized, nor populated\nwith any '\
+ 'existing data.\nRun the following: "layman-updater -m '\
+ '<db_type>"' % {'path': path}
+ self.output.error(msg)
+ sys.exit(-1)
+
path_found = True
if not path_found and not allow_missing:
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2016-02-29 6:11 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-08-05 6:02 [gentoo-commits] proj/layman:master commit in: layman/db_modules/xml_db/, layman/db_modules/sqlite_db/, layman/, Devan Franchini
-- strict thread matches above, loose matches on Subject: below --
2016-02-29 6:11 Devan Franchini
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox