def getshortlist(self): document = ET.parse(HERE + '/testfiles/global-overlays.xml') overlays = document.findall('overlay') + document.findall('repo') output = Message() ovl = Overlay({'output': output}, overlays[0]) test_short_list = 'wrobel [Subversion] '\ '(https://o.g.o/svn/dev/wrobel )' self.assertEqual(ovl.short_list(80).decode('utf-8'), test_short_list) print(ovl.short_list(80).decode('utf-8'))
def getshortlist(self): document = ET.parse(HERE + '/testfiles/global-overlays.xml') overlays = document.findall('overlay') + document.findall('repo') output = Message() ovl = Overlay({'output': output, 'db_type': 'xml'}, xml=overlays[0]) test_short_list = 'wrobel [Subversion] '\ '(https://o.g.o/svn/dev/wrobel )' self.assertEqual(ovl.short_list(80).decode('utf-8'), test_short_list) print(ovl.short_list(80).decode('utf-8'))
def getinfostr(self): document = ET.parse(HERE + '/testfiles/global-overlays.xml') overlays = document.findall('overlay') + document.findall('repo') output = Message() ovl = Overlay({'output': output, 'db_type': 'xml'}, xml=overlays[0]) test_infostr = 'wrobel\n~~~~~~\nSource : '\ 'https://overlays.gentoo.org/svn/dev/wrobel\nContact '\ ': [email protected]\nType : Subversion; Priority: '\ '10\nQuality : experimental\n\nDescription:\n Test\n' self.assertEqual(ovl.get_infostr().decode('utf-8'), test_infostr) print(ovl.get_infostr().decode('utf-8'))
def getinfostr(self): document = ET.parse(HERE + '/testfiles/global-overlays.xml') overlays = document.findall('overlay') + document.findall('repo') output = Message() ovl = Overlay({'output': output}, overlays[0]) test_infostr = 'wrobel\n~~~~~~\nSource : '\ 'https://overlays.gentoo.org/svn/dev/wrobel\nContact '\ ': [email protected]\nType : Subversion; Priority: '\ '10\nQuality : experimental\n\nDescription:\n Test\n' self.assertEqual(ovl.get_infostr().decode('utf-8'), test_infostr) print(ovl.get_infostr().decode('utf-8'))
def objattribs(self): document = ET.parse(HERE + '/testfiles/global-overlays.xml') overlays = document.findall('overlay') + document.findall('repo') output = Message() ovl_a = Overlay({'output': output, 'db_type': 'xml'}, xml=overlays[0]) self.assertEqual(ovl_a.name, 'wrobel') self.assertEqual(ovl_a.is_official(), True) url = ['https://overlays.gentoo.org/svn/dev/wrobel'] self.assertEqual(list(ovl_a.source_uris()), url) self.assertEqual(ovl_a.owners[0]['email'], '*****@*****.**') self.assertEqual(ovl_a.descriptions, ['Test']) self.assertEqual(ovl_a.priority, 10) ovl_b = Overlay({'output': output, 'db_type': 'xml'}, xml=overlays[1]) self.assertEqual(ovl_b.is_official(), False)
def _add_from_dict(self, overlays=None): ''' Add a new overlay from a list of dictionary values ''' 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
def add_new(self, document=None, origin=None): ''' Reads in provided json text and generates overlays to populate database. ''' if not document: msg = 'JSON DBHandler - add_new() failed: JSON text cannot be none'\ '.\nOrigin: %(path)s' % {'path': origin} self.output.warn(msg) return False load = json.loads(document)['repo'] for ovl in load: overlay = Overlay(self.config, json=ovl, ignore=self.ignore) self.overlays[overlay.name] = overlay return True
def test(self): temp_dir_path = tempfile.mkdtemp() my_opts = { 'overlays': ['file://'\ + HERE + '/testfiles/global-overlays.xml'], 'nocheck': 'yes', 'proxy': None, 'quietness': 3, } config = OptionConfig(my_opts) ovl_dict = { 'name': 'wrobel', 'description': ['Test'], 'owner': [{ 'name': 'nobody', 'email': '*****@*****.**' }], 'status': 'official', 'source': [['https://overlays.gentoo.org/svn/dev/wrobel', 'svn', '']], 'priority': '10', } a = Overlay(config=config, ovl_dict=ovl_dict, ignore=config['ignore']) ovl = (ovl_dict['name'], a) path = temp_dir_path + '/overlay.xml' create_overlay_xml = Interactive(config=config) create_overlay_xml(overlay_package=ovl, path=path) self.assertTrue(os.path.exists(path)) with fileopen(path, 'r') as xml: test_line = ' <source type="svn">'\ 'https://overlays.gentoo.org/svn/dev/wrobel</source>\n' self.assertTrue(test_line in xml.readlines()) for line in xml.readlines(): print(line, end='') shutil.rmtree(temp_dir_path)
def read(self, text, origin): ''' Read an xml list of overlays (adding to and potentially overwriting existing entries) ''' try: document = ET.fromstring(text) 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') for overlay in overlays: msg = 'XML DBHandler - Parsing overlay: %(ovl)s' % {'ovl': overlay} self.output.debug(msg, 9) ovl = Overlay(config=self.config, xml=overlay, ignore=self.ignore) self.overlays[ovl.name] = ovl return True
def read_db(self, path, text=None): ''' Read the overlay definitions from the database and generate overlays. ''' cursor = None overlay_id = None overlay = {} try: connection = self.__connect__(path) except sqlite3.DatabaseError as err: msg = 'SQLite DBHandler DatabaseError: %(err)s' % {'err': err} self.output.error(msg) return False 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['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