From 9e468567971c9674b0979c5cf631b5661e7de6c3 Mon Sep 17 00:00:00 2001 From: Pat Riehecky Date: Sep 28 2015 16:18:50 +0000 Subject: Now you can force on releasetitle in addition to other fields --- diff --git a/docs/data_from_updateinfo_xml.py b/docs/data_from_updateinfo_xml.py index 30c357f..583c4f9 100755 --- a/docs/data_from_updateinfo_xml.py +++ b/docs/data_from_updateinfo_xml.py @@ -138,6 +138,8 @@ if __name__ == '__main__': if ARGS.debug: print('Reading in old updateinfo', file=sys.stderr) MYUPDATEINFO.xml = get_xml_from_repo(ARGS.repobase) + if ARGS.debug: + print('Old updateinfo contains ' + str(len(MYUPDATEINFO)) + ' updates', file=sys.stderr) if ARGS.debug: print('Reading in SOURCE xml', file=sys.stderr) @@ -146,20 +148,27 @@ if __name__ == '__main__': SOURCE.xml = _FD.read() _FD.close() if ARGS.debug: - print('Source has: ' + str(SOURCE.filenames), file=sys.stderr) + print('Source contains: ' + str(SOURCE.filenames), file=sys.stderr) + + os.chdir(ARGS.repobase) if ARGS.debug: print('Getting package list from : ' + str(ARGS.repobase), file=sys.stderr) PKGS = get_package_list_from_repo(ARGS.repobase) + if ARGS.debug: print('Getting package list from any existing updateinfo', file=sys.stderr) MYPKGLIST = MYUPDATEINFO.packages + if ARGS.debug: print('Building quick lookup dict', file=sys.stderr) MYUPDATELIST = all_packages_by_update(SOURCE) + with concurrent.futures.ThreadPoolExecutor(multiprocessing.cpu_count()) as POOL: for PACKAGENAME in PKGS: - if PACKAGENAME in MYPKGLIST: + if os.path.basename(PACKAGENAME) in MYPKGLIST: + if ARGS.debug: + print(PACKAGENAME + ' already in updateinfo', file=sys.stderr) continue if ARGS.debug: print(PACKAGENAME + ' to be added', file=sys.stderr) @@ -175,6 +184,7 @@ if __name__ == '__main__': if ARGS.debug: print('Found: ' + PACKAGENAME + ' in ' + str(THISID), file=sys.stderr) + # if in multiple ids, pick on - why not the first one..... THISID = THISID[0] if THISID not in MYUPDATEINFO: if ARGS.debug: @@ -222,12 +232,15 @@ if __name__ == '__main__': MYUPDATEINFO[THISID].collections.create(THISCOLLNAME, THISCOLL) if ARGS.debug: - print('Adding: ' + THISID + ' collection ' + THISCOLL + ' ' + ARGS.repobase + '/' + PACKAGENAME, file=sys.stderr) - POOL.submit(MYUPDATEINFO[THISID].collections[THISCOLL].add_filename, ARGS.repobase + '/' + PACKAGENAME, checksum=ARGS.packagechecksum, readfile=True) + print('Adding: ' + THISID + ' collection ' + THISCOLL + ' ' + PACKAGENAME, file=sys.stderr) + POOL.submit(MYUPDATEINFO[THISID].collections[THISCOLL].add_filename, PACKAGENAME, checksum=ARGS.packagechecksum, readfile=True) MYPKGLIST = MYUPDATEINFO.packages MYUPDATEINFO[THISID].references = SOURCE[THISID].references + if ARGS.debug: + print('Done with data conversion', file=sys.stderr) + if not ARGS.quiet: THESEPKGS = [] for PKG in PKGS: @@ -238,6 +251,9 @@ if __name__ == '__main__': for PKG in NOTFOUND: print(PKG) + if ARGS.debug: + print('Making xml', file=sys.stderr) + XMLOBJ = MYUPDATEINFO.xmletree if ARGS.comment: diff --git a/python-Updateinfo.spec b/python-Updateinfo.spec index 908851b..ef20a1a 100644 --- a/python-Updateinfo.spec +++ b/python-Updateinfo.spec @@ -4,7 +4,7 @@ Summary: Classes for making the yum updateinfo.xml. Name: %{?scl_prefix}python-Updateinfo Version: 0.2.0 -Release: 4.sl%{rhel} +Release: 5.sl%{rhel} Source0: %{pkg_name}.tar.gz License: GPL Group: Development/Libraries diff --git a/updateinfo/updateinfo/__init__.py b/updateinfo/updateinfo/__init__.py index 9de4959..5196301 100644 --- a/updateinfo/updateinfo/__init__.py +++ b/updateinfo/updateinfo/__init__.py @@ -42,9 +42,9 @@ class Updateinfo(UpdateinfoModel, UpdateinfoEvents, UpdateinfoJSONView, Updatein UpdateinfoJSONView ''' __version__ = __version__ - def __init__(self, force_updatefrom=None, force_status=None, force_collection_name=None, force_collection_short_name=None): + def __init__(self, force_updatefrom=None, force_status=None, force_releasetitle=None, force_collection_name=None, force_collection_short_name=None): UpdateinfoModel.__init__(self) - UpdateinfoEvents.__init__(self, force_updatefrom=force_updatefrom, force_status=force_status, force_collection_name=force_collection_name, force_collection_short_name=force_collection_short_name) + UpdateinfoEvents.__init__(self, force_updatefrom=force_updatefrom, force_status=force_status, force_releasetitle=force_releasetitle, force_collection_name=force_collection_name, force_collection_short_name=force_collection_short_name) UpdateinfoXMLView.__init__(self) UpdateinfoYAMLView.__init__(self) UpdateinfoJSONView.__init__(self) diff --git a/updateinfo/updateinfo/events.py b/updateinfo/updateinfo/events.py index 4489d07..aa1e59d 100644 --- a/updateinfo/updateinfo/events.py +++ b/updateinfo/updateinfo/events.py @@ -34,15 +34,17 @@ except ImportError: # pragma: no cover class UpdateinfoEvents(object): ''' Actions we can perform to set data within the Model ''' - def __init__(self, force_updatefrom=None, force_status=None, force_collection_name=None, force_collection_short_name=None): + def __init__(self, force_updatefrom=None, force_status=None, force_releasetitle=None, force_collection_name=None, force_collection_short_name=None): '''Catch forced action prep''' self._force_updatefrom = None self._force_status = None + self._force_releasetitle = None self._force_collection_name = None self._force_collection_short_name = None self.force_updatefrom = force_updatefrom self.force_status = force_status + self.force_releasetitle = force_releasetitle self.force_collection_name = force_collection_name self.force_collection_short_name = force_collection_short_name @@ -61,6 +63,7 @@ class UpdateinfoEvents(object): self._force_updatefrom = value if self._force_updatefrom: self._run_forced_updatefrom() + @property def force_status(self): '''Get the force_status for this xml, using @property''' @@ -73,6 +76,17 @@ class UpdateinfoEvents(object): self._run_forced_status() @property + def force_releasetitle(self): + '''Get the force_releasetitle for this xml, using @property''' + return self._force_releasetitle + @force_releasetitle.setter + def force_releasetitle(self, value): + '''Set the force_releasetitle for this xml, using @property''' + self._force_releasetitle = value + if self._force_releasetitle: + self._run_force_releasetitle() + + @property def force_collection_name(self): '''Get the force_collection_name for this xml, using @property''' return self._force_collection_name @@ -113,6 +127,9 @@ class UpdateinfoEvents(object): if self.force_status: update.status = self.force_status + if self.force_releasetitle: + update.releasetitle = self.force_releasetitle + if self.force_collection_short_name: newstore = self._run_forced_collection_short_name(update, update.collections) update.collections = newstore @@ -257,6 +274,11 @@ class UpdateinfoEvents(object): for update in self: self[update].status = self.force_status + def _run_force_releasetitle(self): + '''I set all the release values to what was forced''' + for update in self: + self[update].releasetitle = self.force_releasetitle + def _run_forced_collection_name(self, update, store=None): '''I set all the collection names to what was forced''' if store: diff --git a/updateinfo/updateinfo/tests.py b/updateinfo/updateinfo/tests.py index 45ab31a..bd34d21 100644 --- a/updateinfo/updateinfo/tests.py +++ b/updateinfo/updateinfo/tests.py @@ -48,26 +48,26 @@ except ImportError: # pragma: no cover # Classes for test inheritance ###################### class UpdateinfoE(UpdateinfoModel, UpdateinfoEvents): - def __init__(self, force_updatefrom=None, force_status=None, force_collection_name=None, force_collection_short_name=None): + def __init__(self, force_updatefrom=None, force_status=None, force_releasetitle=None, force_collection_name=None, force_collection_short_name=None): UpdateinfoModel.__init__(self) - UpdateinfoEvents.__init__(self, force_updatefrom=force_updatefrom, force_status=force_status, force_collection_name=force_collection_name, force_collection_short_name=force_collection_short_name) + UpdateinfoEvents.__init__(self, force_updatefrom=force_updatefrom, force_status=force_status, force_releasetitle=force_releasetitle, force_collection_name=force_collection_name, force_collection_short_name=force_collection_short_name) class UpdateinfoX(UpdateinfoModel, UpdateinfoEvents, UpdateinfoXMLView): - def __init__(self, force_updatefrom=None, force_status=None, force_collection_name=None, force_collection_short_name=None): + def __init__(self, force_updatefrom=None, force_status=None, force_releasetitle=None, force_collection_name=None, force_collection_short_name=None): UpdateinfoModel.__init__(self) - UpdateinfoEvents.__init__(self, force_updatefrom=force_updatefrom, force_status=force_status, force_collection_name=force_collection_name, force_collection_short_name=force_collection_short_name) + UpdateinfoEvents.__init__(self, force_updatefrom=force_updatefrom, force_status=force_status, force_releasetitle=force_releasetitle, force_collection_name=force_collection_name, force_collection_short_name=force_collection_short_name) UpdateinfoXMLView.__init__(self) class UpdateinfoY(UpdateinfoModel, UpdateinfoEvents, UpdateinfoYAMLView): - def __init__(self, force_updatefrom=None, force_status=None, force_collection_name=None, force_collection_short_name=None): + def __init__(self, force_updatefrom=None, force_status=None, force_releasetitle=None, force_collection_name=None, force_collection_short_name=None): UpdateinfoModel.__init__(self) - UpdateinfoEvents.__init__(self, force_updatefrom=force_updatefrom, force_status=force_status, force_collection_name=force_collection_name, force_collection_short_name=force_collection_short_name) + UpdateinfoEvents.__init__(self, force_updatefrom=force_updatefrom, force_status=force_status, force_releasetitle=force_releasetitle, force_collection_name=force_collection_name, force_collection_short_name=force_collection_short_name) UpdateinfoYAMLView.__init__(self) class UpdateinfoJ(UpdateinfoModel, UpdateinfoEvents, UpdateinfoJSONView): - def __init__(self, force_updatefrom=None, force_status=None, force_collection_name=None, force_collection_short_name=None): + def __init__(self, force_updatefrom=None, force_status=None, force_releasetitle=None, force_collection_name=None, force_collection_short_name=None): UpdateinfoModel.__init__(self) - UpdateinfoEvents.__init__(self, force_updatefrom=force_updatefrom, force_status=force_status, force_collection_name=force_collection_name, force_collection_short_name=force_collection_short_name) + UpdateinfoEvents.__init__(self, force_updatefrom=force_updatefrom, force_status=force_status, force_releasetitle=force_releasetitle, force_collection_name=force_collection_name, force_collection_short_name=force_collection_short_name) UpdateinfoJSONView.__init__(self) ###################### @@ -574,6 +574,33 @@ class UpdateinfoEventsTests(UpdateinfoModelTests): result = True self.assertTrue(result, msg="Can't set force_status") + def test_can_init_force_releasetitle(self): + '''Can init setup force_releasetitle''' + testobj = self.Updateinfo(force_releasetitle='somevalue') + result = False + if testobj.force_releasetitle == 'somevalue': + result = True + self.assertTrue(result, msg="Can't set force_releasetitle") + + def test_can_get_force_releasetitle(self): + '''Can i read force_releasetitle''' + testobj = self.Updateinfo() + + result = False + if testobj.force_releasetitle == None: + result = True + self.assertTrue(result, msg="Can't get force_releasetitle, or bad default") + + def test_can_set_force_releasetitle(self): + '''Can i set force_releasetitle''' + testobj = self.Updateinfo() + + testobj.force_releasetitle = 'somevalue' + result = False + if testobj.force_releasetitle == 'somevalue': + result = True + self.assertTrue(result, msg="Can't set force_releasetitle") + def test_can_init_force_collection_name(self): '''Can init setup force_collection_name''' testobj = self.Updateinfo(force_collection_name='somevalue') @@ -799,6 +826,48 @@ class UpdateinfoEventsTests(UpdateinfoModelTests): result = True self.assertTrue(result, msg="Can't force_status") + def test_add_check_force_releasetitle_init_simple(self): + '''Does force_releasetitle work when set at init''' + testobj = self.Updateinfo(force_releasetitle='Checkme') + testobj.add(self.entry_one_for_test()) + + result = False + if testobj['1'].releasetitle == 'Checkme': + result = True + self.assertTrue(result, msg="Can't force_releasetitle") + + def test_add_check_force_releasetitle_later_simple(self): + '''Does force_releasetitle work when set later''' + testobj = self.Updateinfo() + testobj.add(self.entry_one_for_test()) + testobj.force_releasetitle = 'Checkme' + + result = False + if testobj['1'].releasetitle == 'Checkme': + result = True + self.assertTrue(result, msg="Can't force_releasetitle") + + def test_add_check_force_releasetitle_init_not_simple(self): + '''Does force_releasetitle work when set at init''' + testobj = self.Updateinfo(force_releasetitle='checkme') + testobj.add(self.entry_one_merge_for_test()) + + result = False + if testobj['1'].releasetitle == 'Checkme': + result = True + self.assertTrue(result, msg="Can't force_releasetitle") + + def test_add_check_force_releasetitle_later_not_simple(self): + '''Does force_releasetitle work when set later''' + testobj = self.Updateinfo() + testobj.add(self.entry_one_merge_for_test()) + testobj.force_releasetitle = 'Checkme' + + result = False + if testobj['1'].releasetitle == 'Checkme': + result = True + self.assertTrue(result, msg="Can't force_releasetitle") + def test_add_check_force_collection_short_name_init(self): '''Does force_collection_short_name work when set at init''' testobj = self.Updateinfo(force_collection_short_name='testing')