From 28791d8c4883881c4d6db4113e867b762678256c Mon Sep 17 00:00:00 2001 From: Papoteur Date: Wed, 1 Mar 2017 19:23:15 +0100 Subject: [PATCH 1/8] Add standard repos list vs expert --- dnfdragora/dialogs.py | 61 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 48 insertions(+), 13 deletions(-) diff --git a/dnfdragora/dialogs.py b/dnfdragora/dialogs.py index 1764f80e..b03202a7 100644 --- a/dnfdragora/dialogs.py +++ b/dnfdragora/dialogs.py @@ -182,6 +182,13 @@ def __init__(self, parent): self.mgaFactory = self.parent.mgaFactory self.backend = self.parent.backend self.itemList = {} + self.expert = False + self.simplified = { + 'categs':[{'name':'Core','disabling':False,'repos':['mageia-x86_64','updates-x86_64','mageia-i586','updates-i586'] }, + {'name':'Nonfree','disabling':True,'repos':['mageia-x86_64-nonfree', 'updates-x86_64-nonfree', 'mageia-i586-nonfree','updates-i586-nonfree'] }, + {'name':'Tainted','disabling':True,'repos':['mageia-x86_64-tainted','updates-x86_64-tainted','mageia-i586-tainted',' updates-i586-tainted'] }, + ] + } def _setupUI(self): ''' @@ -206,14 +213,17 @@ def _setupUI(self): self.factory.createHeading(hbox_iconbar, _("Repository Management")) + hbox_top = self.factory.createHBox(vbox) hbox_middle = self.factory.createHBox(vbox) hbox_bottom = self.factory.createHBox(vbox) hbox_footbar = self.factory.createHBox(vbox) + hbox_footbar.setWeight(1,10) hbox_middle.setWeight(1,50) hbox_bottom.setWeight(1,30) hbox_footbar.setWeight(1,10) + self.cb_expert = self.factory.createPushButton(hbox_top, _("Expert mode")) repoList_header = yui.YTableHeader() columns = [ _('Name'), _("Enabled")] @@ -232,23 +242,39 @@ def _setupUI(self): self.quitButton = self.factory.createIconButton(hbox_footbar,"",_("&Cancel")) self.quitButton.setWeight(0,3) self.dialog.setDefaultButton(self.quitButton) + self.drawList() + def drawList(self): self.itemList = {} # TODO fix the workaround when GetRepo(id) works again repos = self.backend.get_repo_ids("*") - for r in repos: - item = yui.YCBTableItem(r) - # TODO name from repo info - self.itemList[r] = { - 'item' : item, 'name': r, 'enabled' : False - } - item.this.own(False) - enabled_repos = self.backend.get_repo_ids("enabled") - for r in enabled_repos: - if r in self.itemList.keys(): - self.itemList[r]["enabled"] = True - self.itemList[r]["item"].check(True) - + if self.expert: + for r in repos: + item = yui.YCBTableItem(r) + # TODO name from repo info + self.itemList[r] = { + 'item' : item, 'name': r, 'enabled' : False + } + item.this.own(False) + enabled_repos = self.backend.get_repo_ids("enabled") + for r in enabled_repos: + if r in self.itemList.keys(): + self.itemList[r]["enabled"] = True + self.itemList[r]["item"].check(True) + else: + cat = self.simplified['categs'] + enabled_repos = self.backend.get_repo_ids("enabled") + for c in cat: + item = yui.YCBTableItem(c['name']) + # TODO name from repo info + self.itemList[c['name']] = { + 'item' : item, 'name': c['name'], 'enabled' : False + } + item.this.own(False) + r = c['repos'][0] + if r in enabled_repos: + self.itemList[c['name']]['enabled'] = True + self.itemList[c['name']]['item'].check(True) keylist = sorted(self.itemList.keys()) v = [] for key in keylist : @@ -264,6 +290,12 @@ def _setupUI(self): self.repoList.addItems(itemCollection) self.repoList.doneMultipleChanges() + def toogle_expert(self): + self.expert = not self.expert + self.cb_expert.setLabel( _("Standard mode") if self.expert else _("Expert mode")) + self.drawList() + self.dialog.recalcLayout() + def _selectedRepository(self) : ''' gets the selected repository id from repo list, if any selected @@ -332,6 +364,9 @@ def _handleEvents(self): except: logger.error("Unexpected error: %s ", sys.exc_info()[0]) self.info.setText(s) + elif(widget == self.cb_expert): + print('Toogle expert') + self.toogle_expert() def run(self): ''' From 5c77f3cc794c6afd77dbd740eae571dfb0deadb5 Mon Sep 17 00:00:00 2001 From: Papoteur Date: Sat, 4 Mar 2017 21:57:53 +0100 Subject: [PATCH 2/8] Repo Dialog, add action on repos enabling in standard mode --- dnfdragora/dialogs.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/dnfdragora/dialogs.py b/dnfdragora/dialogs.py index b03202a7..56b364a7 100644 --- a/dnfdragora/dialogs.py +++ b/dnfdragora/dialogs.py @@ -335,7 +335,13 @@ def _handleEvents(self): enabled_repos = [] for k in self.itemList.keys(): if self.itemList[k]['enabled'] : - enabled_repos.append(k) + if self.expert: + enabled_repos.append(k) + else: + for c in self.simplified['categs']: + if c['name'] == self.itemList[k]['name']: + for r in c['repos']: + enabled_repos.append(r) logger.info("Enabling repos %s "%" ".join(enabled_repos)) self.backend.SetEnabledRepos(enabled_repos) break From 8718a9bf6d0111b33a82acacb91e63e47ea00c94 Mon Sep 17 00:00:00 2001 From: Papoteur Date: Sun, 2 Apr 2017 15:06:26 +0200 Subject: [PATCH 3/8] read repos config for standard mode from a file --- dnfdragora/dialogs.py | 24 ++++++++++++++++-------- etc/dnfdragora-repos.yaml.in | 22 ++++++++++++++++++++++ 2 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 etc/dnfdragora-repos.yaml.in diff --git a/dnfdragora/dialogs.py b/dnfdragora/dialogs.py index 56b364a7..1ddfb0ad 100644 --- a/dnfdragora/dialogs.py +++ b/dnfdragora/dialogs.py @@ -15,6 +15,8 @@ from dnfdragora import const import dnfdragora.misc as misc from dnfdragora import const +import dnfdragora.config + import gettext from gettext import gettext as _ @@ -183,13 +185,18 @@ def __init__(self, parent): self.backend = self.parent.backend self.itemList = {} self.expert = False - self.simplified = { - 'categs':[{'name':'Core','disabling':False,'repos':['mageia-x86_64','updates-x86_64','mageia-i586','updates-i586'] }, - {'name':'Nonfree','disabling':True,'repos':['mageia-x86_64-nonfree', 'updates-x86_64-nonfree', 'mageia-i586-nonfree','updates-i586-nonfree'] }, - {'name':'Tainted','disabling':True,'repos':['mageia-x86_64-tainted','updates-x86_64-tainted','mageia-i586-tainted',' updates-i586-tainted'] }, - ] - } - + self.config_repos = dnfdragora.config.AppConfig('dnfdragora-repos') + self.hideStandard = False + try: + self.config_repos.load() + self.simplified = self.config_repos.content + except Exception as e: + print ("Exception: %s" % str(e)) + exc = "Configuration file <%s> problem" % self.config_repos.fileName + self.expert = True + self.hideStandard = True + + def _setupUI(self): ''' setup the dialog layout @@ -223,7 +230,8 @@ def _setupUI(self): hbox_bottom.setWeight(1,30) hbox_footbar.setWeight(1,10) - self.cb_expert = self.factory.createPushButton(hbox_top, _("Expert mode")) + if not self.hideStandard : + self.cb_expert = self.factory.createPushButton(hbox_top, _("Expert mode")) repoList_header = yui.YTableHeader() columns = [ _('Name'), _("Enabled")] diff --git a/etc/dnfdragora-repos.yaml.in b/etc/dnfdragora-repos.yaml.in new file mode 100644 index 00000000..5ce8148b --- /dev/null +++ b/etc/dnfdragora-repos.yaml.in @@ -0,0 +1,22 @@ +categs: + - name: Core + disabling: False + repos: + - mageia-x86_64 + - updates-x86_64 + - mageia-i586 + - updates-i586 + - name: Nonfree + disabling True + repos: + - mageia-x86_64-nonfree + - updates-x86_64-nonfree + - mageia-i586-nonfree + - updates-i586-nonfree + - name: Tainted + disabling: True + repos': + - mageia-x86_64-tainted + - updates-x86_64-tainted + - mageia-i586-tainted + - updates-i586-tainted From 8666696ed64d4120eb3f4c9239f152ab27352b9e Mon Sep 17 00:00:00 2001 From: Papoteur Date: Mon, 1 May 2017 10:28:45 +0200 Subject: [PATCH 4/8] Deal with enabling/disabling repos in categories in simplified mode --- dnfdragora/dialogs.py | 62 ++++++++++++++++++++++++++++--------------- 1 file changed, 41 insertions(+), 21 deletions(-) diff --git a/dnfdragora/dialogs.py b/dnfdragora/dialogs.py index 1ddfb0ad..04154e2d 100644 --- a/dnfdragora/dialogs.py +++ b/dnfdragora/dialogs.py @@ -269,7 +269,7 @@ def drawList(self): if r in self.itemList.keys(): self.itemList[r]["enabled"] = True self.itemList[r]["item"].check(True) - else: + else: # Standard mode cat = self.simplified['categs'] enabled_repos = self.backend.get_repo_ids("enabled") for c in cat: @@ -348,8 +348,9 @@ def _handleEvents(self): else: for c in self.simplified['categs']: if c['name'] == self.itemList[k]['name']: - for r in c['repos']: - enabled_repos.append(r) + if c['disabling']: + for r in c['repos']: + enabled_repos.append(r) logger.info("Enabling repos %s "%" ".join(enabled_repos)) self.backend.SetEnabledRepos(enabled_repos) break @@ -361,25 +362,44 @@ def _handleEvents(self): for it in self.itemList: if (self.itemList[it]['item'] == changedItem) : self.itemList[it]['enabled'] = changedItem.checked() - repo_id = self._selectedRepository() - s = "TODO show repo %s information
See https://github.com/timlau/dnf-daemon/issues/11"%(repo_id if repo_id else "---") - # TODO decide what and how to show when the crash https://github.com/timlau/dnf-daemon/issues/11 is fixed - try: - ri = self.backend.GetRepo(repo_id) - logger.debug(ri) - s = "" - for k in sorted(ri.keys()): - if (ri[k]): - s+= "%s: %s
"%(k, ri[k]) - except NameError as e: - logger.error("dnfdaemon NameError: %s ", e) - except AttributeError as e: - logger.error("dnfdaemon AttributeError: %s ", e) - except: - logger.error("Unexpected error: %s ", sys.exc_info()[0]) - self.info.setText(s) + if self.expert: + repo_id = self._selectedRepository() + s = "TODO show repo %s information
See https://github.com/timlau/dnf-daemon/issues/11"%(repo_id if repo_id else "---") + # TODO decide what and how to show when the crash https://github.com/timlau/dnf-daemon/issues/11 is fixed + try: + ri = self.backend.GetRepo(repo_id) + logger.debug(ri) + s = "" + for k in sorted(ri.keys()): + if (ri[k]): + s+= "%s: %s
"%(k, ri[k]) + except NameError as e: + logger.error("dnfdaemon NameError: %s ", e) + except AttributeError as e: + logger.error("dnfdaemon AttributeError: %s ", e) + except: + logger.error("Unexpected error: %s ", sys.exc_info()[0]) + self.info.setText(s) + else: + cat = self.simplified['categs'] + for it in self.itemList: + if (self.itemList[it]['item'] == changedItem) : + if (self.itemList[it]['enabled']): + s=_("Enabling:
") + else: + s=_("Disabling:
") + for c in cat: + if c['name']==self.itemList[it]['name']: + if c['disabling']: + for r in c['repos']: + s+="- %s
"%r + else: + s = _("Disabling is not allowed.") + break + break + self.info.setText(s) elif(widget == self.cb_expert): - print('Toogle expert') + logger.info('Toogle expert mode') self.toogle_expert() def run(self): From 34751f597ec4a7e4b90a94bb06111ffdd57c2685 Mon Sep 17 00:00:00 2001 From: Papoteur Date: Mon, 1 May 2017 14:06:39 +0200 Subject: [PATCH 5/8] Create mode button in any case --- dnfdragora/dialogs.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dnfdragora/dialogs.py b/dnfdragora/dialogs.py index 04154e2d..780f9101 100644 --- a/dnfdragora/dialogs.py +++ b/dnfdragora/dialogs.py @@ -230,8 +230,7 @@ def _setupUI(self): hbox_bottom.setWeight(1,30) hbox_footbar.setWeight(1,10) - if not self.hideStandard : - self.cb_expert = self.factory.createPushButton(hbox_top, _("Expert mode")) + self.cb_expert = self.factory.createPushButton(hbox_top, _("Expert mode") if self.hideStandard else _("Standard mode")) repoList_header = yui.YTableHeader() columns = [ _('Name'), _("Enabled")] From 2a9ead6cf9621e2b8092024c641df7b110f2806d Mon Sep 17 00:00:00 2001 From: Papoteur Date: Mon, 1 May 2017 17:58:09 +0200 Subject: [PATCH 6/8] Set good label for expert mode button Enable repos which are not allowed to be disabled --- dnfdragora/dialogs.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dnfdragora/dialogs.py b/dnfdragora/dialogs.py index 780f9101..cf8c124e 100644 --- a/dnfdragora/dialogs.py +++ b/dnfdragora/dialogs.py @@ -230,7 +230,7 @@ def _setupUI(self): hbox_bottom.setWeight(1,30) hbox_footbar.setWeight(1,10) - self.cb_expert = self.factory.createPushButton(hbox_top, _("Expert mode") if self.hideStandard else _("Standard mode")) + self.cb_expert = self.factory.createPushButton(hbox_top, _("Standard mode") if self.hideStandard else _("Expert mode")) repoList_header = yui.YTableHeader() columns = [ _('Name'), _("Enabled")] @@ -346,10 +346,10 @@ def _handleEvents(self): enabled_repos.append(k) else: for c in self.simplified['categs']: - if c['name'] == self.itemList[k]['name']: - if c['disabling']: - for r in c['repos']: - enabled_repos.append(r) + # Enabling categories which can't be disabled an selected ones + if c['name'] == self.itemList[k]['name'] or not c['disabling']: + for r in c['repos']: + enabled_repos.append(r) logger.info("Enabling repos %s "%" ".join(enabled_repos)) self.backend.SetEnabledRepos(enabled_repos) break From 2a7927bd371d4c08607c8ca3881ee054753c8bd9 Mon Sep 17 00:00:00 2001 From: Papoteur Date: Mon, 1 May 2017 19:56:26 +0200 Subject: [PATCH 7/8] Better detection of expert mode when no config file are present --- dnfdragora/dialogs.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/dnfdragora/dialogs.py b/dnfdragora/dialogs.py index cf8c124e..5b70e0ff 100644 --- a/dnfdragora/dialogs.py +++ b/dnfdragora/dialogs.py @@ -187,12 +187,10 @@ def __init__(self, parent): self.expert = False self.config_repos = dnfdragora.config.AppConfig('dnfdragora-repos') self.hideStandard = False - try: - self.config_repos.load() - self.simplified = self.config_repos.content - except Exception as e: - print ("Exception: %s" % str(e)) - exc = "Configuration file <%s> problem" % self.config_repos.fileName + self.config_repos.load() + self.simplified = self.config_repos.content + if self.simplified == None: + print ("Config file dnfdragora-repos.yaml not found. Expert mode selected") self.expert = True self.hideStandard = True @@ -230,7 +228,10 @@ def _setupUI(self): hbox_bottom.setWeight(1,30) hbox_footbar.setWeight(1,10) - self.cb_expert = self.factory.createPushButton(hbox_top, _("Standard mode") if self.hideStandard else _("Expert mode")) + if not self.hideStandard: + self.cb_expert = self.factory.createPushButton(hbox_top, _("Expert mode")) + else: + self.cb_expert = None repoList_header = yui.YTableHeader() columns = [ _('Name'), _("Enabled")] From f7b16255bb3162730d18f237ab8847d83d78a157 Mon Sep 17 00:00:00 2001 From: Papoteur Date: Mon, 1 May 2017 19:57:23 +0200 Subject: [PATCH 8/8] Move config file in share/dnfdragora --- {etc => share/dnfdragora}/dnfdragora-repos.yaml.in | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {etc => share/dnfdragora}/dnfdragora-repos.yaml.in (100%) diff --git a/etc/dnfdragora-repos.yaml.in b/share/dnfdragora/dnfdragora-repos.yaml.in similarity index 100% rename from etc/dnfdragora-repos.yaml.in rename to share/dnfdragora/dnfdragora-repos.yaml.in