From 2929e1cba370280cc1b2db83d20e23282dc23579 Mon Sep 17 00:00:00 2001 From: Gonzalo Pena-Castellanos Date: Wed, 21 Sep 2016 17:24:17 -0400 Subject: [PATCH 01/10] Remove mutable default values --- conda_manager/models/packages.py | 3 ++- conda_manager/widgets/packages.py | 21 ++++++++++++--------- conda_manager/widgets/table.py | 4 ++-- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/conda_manager/models/packages.py b/conda_manager/models/packages.py index 6f5f376..89f3175 100755 --- a/conda_manager/models/packages.py +++ b/conda_manager/models/packages.py @@ -73,7 +73,8 @@ def _update_cell(self, row, column): end = self.index(row, column) self.dataChanged.emit(start, end) - def update_style_palette(self, palette={}): + def update_style_palette(self, palette=None): + """Update style palette for conda-manager extension.""" if palette: self._palette.update(palette) diff --git a/conda_manager/widgets/packages.py b/conda_manager/widgets/packages.py index 3683063..6f17232 100755 --- a/conda_manager/widgets/packages.py +++ b/conda_manager/widgets/packages.py @@ -147,7 +147,7 @@ def __init__(self, conda_api_url='https://api.anaconda.org', setup=True, data_directory=None, - extra_metadata={}): + extra_metadata=None): super(CondaPackagesWidget, self).__init__(parent) @@ -163,7 +163,7 @@ def __init__(self, self._parent = parent self._current_action_name = '' self._hide_widgets = False - self._metadata = extra_metadata # From repo.continuum + self._metadata = extra_metadata if extra_metadata else {} self._metadata_links = {} # Bundled metadata self.api = ManagerAPI() self.busy = False @@ -745,7 +745,7 @@ def update_actions(self, number_of_actions): # --- Non UI API # ------------------------------------------------------------------------- - def setup(self, check_updates=False, blacklist=[], metadata={}): + def setup(self, check_updates=False, blacklist=None, metadata=None): """ Setup packages. @@ -772,9 +772,9 @@ def setup(self, check_updates=False, blacklist=[], metadata={}): if blacklist: self.package_blacklist = [p.lower() for p in blacklist] - - if metadata: - self._metadata = metadata + else: + blacklist = [] + self._metadata = metadata if metadata else {} self._current_model_index = self.table.currentIndex() self._current_table_scroll = self.table.verticalScrollBar().value() @@ -837,9 +837,11 @@ def update_channels(self, channels, active_channels): tuple(active_channels)) self.setup(check_updates=True) - def update_style_sheet(self, style_sheet=None, extra_dialogs={}, - palette={}): + def update_style_sheet(self, style_sheet=None, extra_dialogs=None, + palette=None): if style_sheet: + extra_dialogs = extra_dialogs if extra_dialogs else {} + palette = palette if palette else {} self.style_sheet = style_sheet self.table.update_style_palette(palette=palette) self.textbox_search.update_style_sheet(style_sheet) @@ -1165,11 +1167,12 @@ def get_package_versions(self, name): # --- Conda actions # ------------------------------------------------------------------------- - def create_environment(self, name=None, prefix=None, packages=['python']): + def create_environment(self, name=None, prefix=None, packages=None): """ """ # If environment exists already? GUI should take care of this # BUT the api call should simply set that env as the env dic = {} + packages = packages if packages else ['python'] dic['name'] = name dic['prefix'] = prefix dic['pkgs'] = packages diff --git a/conda_manager/widgets/table.py b/conda_manager/widgets/table.py index c333884..4678b07 100755 --- a/conda_manager/widgets/table.py +++ b/conda_manager/widgets/table.py @@ -143,13 +143,13 @@ def __init__(self, parent): self.setContextMenuPolicy(Qt.CustomContextMenu) self.hide_columns() - def setup_model(self, packages, data, metadata_links={}): + def setup_model(self, packages, data, metadata_links=None): """ """ self.proxy_model = MultiColumnSortFilterProxy(self) self.source_model = CondaPackagesModel(self, packages, data) self.proxy_model.setSourceModel(self.source_model) self.setModel(self.proxy_model) - self.metadata_links = metadata_links + self.metadata_links = metadata_links if metadata_links else {} # FIXME: packages sizes... move to a better place? packages_sizes = {} From 7a0053d06ec5553b2a45701d613d0d2afdfc07e9 Mon Sep 17 00:00:00 2001 From: Gonzalo Pena-Castellanos Date: Wed, 21 Sep 2016 17:30:33 -0400 Subject: [PATCH 02/10] Avoid None as redundant second argument to dict.get() --- conda_manager/utils/qthelpers.py | 2 +- conda_manager/widgets/packages.py | 20 +++++++++----------- conda_manager/widgets/table.py | 2 +- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/conda_manager/utils/qthelpers.py b/conda_manager/utils/qthelpers.py index feddbc3..00f6877 100755 --- a/conda_manager/utils/qthelpers.py +++ b/conda_manager/utils/qthelpers.py @@ -27,7 +27,7 @@ def qapplication(translate=True, test_time=3): if translate: install_translator(app) - test_travis = os.environ.get('TEST_CI', None) + test_travis = os.environ.get('TEST_CI') if test_travis is not None: timer_shutdown = QTimer(app) timer_shutdown.timeout.connect(app.quit) diff --git a/conda_manager/widgets/packages.py b/conda_manager/widgets/packages.py index 6f17232..fb094ec 100755 --- a/conda_manager/widgets/packages.py +++ b/conda_manager/widgets/packages.py @@ -516,8 +516,8 @@ def _run_multiple_actions(self, worker=None, output=None, error=None): logger.error(str(error)) if output and isinstance(output, dict): - conda_error_type = output.get('error_type', None) - conda_error = output.get('error', None) + conda_error_type = output.get('error_type') + conda_error = output.get('error') if conda_error_type or conda_error: self.conda_errors.append((conda_error_type, conda_error)) @@ -591,10 +591,10 @@ def _partial_output_ready(self, worker, output, error): progress = (0, 0) if isinstance(output, dict): - progress = (output.get('progress', None), - output.get('maxval', None)) - name = output.get('name', None) - fetch = output.get('fetch', None) + progress = (output.get('progress'), + output.get('maxval')) + name = output.get('name') + fetch = output.get('fetch') if fetch: message = "Downloading {0}...".format(fetch) @@ -848,11 +848,9 @@ def update_style_sheet(self, style_sheet=None, extra_dialogs=None, self.setStyleSheet(style_sheet) if extra_dialogs: - cancel_dialog = extra_dialogs.get('cancel_dialog', None) - apply_actions_dialog = extra_dialogs.get('apply_actions_dialog', - None) - message_box_error = extra_dialogs.get('message_box_error', - None) + cancel_dialog = extra_dialogs.get('cancel_dialog') + apply_actions_dialog = extra_dialogs.get('apply_actions_dialog') + message_box_error = extra_dialogs.get('message_box_error') if cancel_dialog: self.cancel_dialog = cancel_dialog if apply_actions_dialog: diff --git a/conda_manager/widgets/table.py b/conda_manager/widgets/table.py index 4678b07..db10834 100755 --- a/conda_manager/widgets/table.py +++ b/conda_manager/widgets/table.py @@ -463,7 +463,7 @@ def action_released(self): if not versions: versions = [version] - action = actions.get(column, None) + action = actions.get(column) if type_ == const.CONDA_PACKAGE: self.sig_conda_action_requested.emit(name, action, version, From c62ebfe49191dce7c91fe9534b5ce827805a0403 Mon Sep 17 00:00:00 2001 From: Gonzalo Pena-Castellanos Date: Wed, 21 Sep 2016 17:32:34 -0400 Subject: [PATCH 03/10] Replace list by generator --- conda_manager/widgets/table.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/conda_manager/widgets/table.py b/conda_manager/widgets/table.py index db10834..5ebbf8f 100755 --- a/conda_manager/widgets/table.py +++ b/conda_manager/widgets/table.py @@ -160,12 +160,11 @@ def setup_model(self, packages, data, metadata_links=None): # Custom Proxy Model setup self.proxy_model.setDynamicSortFilter(True) - filter_text = \ - (lambda row, text, status: ( - all([t in row[const.COL_NAME].lower() for t in - to_text_string(text).lower().split()]) or - all([t in row[const.COL_DESCRIPTION].lower() for t in - to_text_string(text).split()]))) + filter_text = (lambda row, text, status: ( + all(t in row[const.COL_NAME].lower() for t in + to_text_string(text).lower().split()) or + all(t in row[const.COL_DESCRIPTION].lower() for t in + to_text_string(text).split()))) filter_status = (lambda row, text, status: to_text_string(row[const.COL_STATUS]) in From bd5bf43c4c14bb0ed58d315aadaf86a1571567dd Mon Sep 17 00:00:00 2001 From: Gonzalo Pena-Castellanos Date: Wed, 21 Sep 2016 17:40:22 -0400 Subject: [PATCH 04/10] Replace lambdas by nested functions --- conda_manager/widgets/table.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/conda_manager/widgets/table.py b/conda_manager/widgets/table.py index 5ebbf8f..d01dfe5 100755 --- a/conda_manager/widgets/table.py +++ b/conda_manager/widgets/table.py @@ -160,15 +160,18 @@ def setup_model(self, packages, data, metadata_links=None): # Custom Proxy Model setup self.proxy_model.setDynamicSortFilter(True) - filter_text = (lambda row, text, status: ( - all(t in row[const.COL_NAME].lower() for t in - to_text_string(text).lower().split()) or - all(t in row[const.COL_DESCRIPTION].lower() for t in - to_text_string(text).split()))) - - filter_status = (lambda row, text, status: - to_text_string(row[const.COL_STATUS]) in - to_text_string(status)) + + def filter_text(row, text, status): + name_match = all(t in row[const.COL_NAME].lower() for t in + to_text_string(text).lower().split()) + desc_match = all(t in row[const.COL_DESCRIPTION].lower() for t in + to_text_string(text).split()) + return name_match or desc_match + + def filter_status(row, text, status): + status_value = to_text_string(row[const.COL_STATUS]) + return status_value in to_text_string(status) + self.model().add_filter_function('status-search', filter_status) self.model().add_filter_function('text-search', filter_text) From 6f2bc489e6efd69786afe261a7277afdb5b0b5d0 Mon Sep 17 00:00:00 2001 From: Gonzalo Pena-Castellanos Date: Wed, 21 Sep 2016 17:44:00 -0400 Subject: [PATCH 05/10] Avoid using to check if a list is empty --- conda_manager/models/dependencies.py | 2 +- conda_manager/utils/__init__.py | 2 +- conda_manager/widgets/search.py | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/conda_manager/models/dependencies.py b/conda_manager/models/dependencies.py index 2dc4ae7..a1093e1 100755 --- a/conda_manager/models/dependencies.py +++ b/conda_manager/models/dependencies.py @@ -37,7 +37,7 @@ def __init__(self, parent, dic, packages_sizes=None): self._timer_dots = ['. ', '.. ', '...', ' '] self._timer_counter = 0 - if len(dic) == 0: + if not dic: self._timer.start(650) self._rows = [[_(u'Resolving dependencies '), u'', u'', u'']] self._bold_rows.append(0) diff --git a/conda_manager/utils/__init__.py b/conda_manager/utils/__init__.py index 0c2473d..df49cb0 100755 --- a/conda_manager/utils/__init__.py +++ b/conda_manager/utils/__init__.py @@ -129,7 +129,7 @@ def toint(x): # replace letters found by a negative number replace_dic = {} alpha = sorted(alpha, reverse=True) - if len(alpha): + if alpha: replace_dic = dict(zip(alpha, list(range(-1, -(len(alpha)+1), -1)))) # Complete with zeros based on longest item and replace alphas with number diff --git a/conda_manager/widgets/search.py b/conda_manager/widgets/search.py index f9a312e..c50e298 100755 --- a/conda_manager/widgets/search.py +++ b/conda_manager/widgets/search.py @@ -61,10 +61,10 @@ def __init__(self, parent=None, icon=True): def _toggle_visibility(self): """ """ - if len(self.text()) == 0: - self.button_clear.setVisible(False) - else: + if self.text(): self.button_clear.setVisible(True) + else: + self.button_clear.setVisible(False) def sizeHint(self): return QSize(200, self._pixmap_icon.height()) From acb4f8ea3121e1709853168a0329104056d46a5f Mon Sep 17 00:00:00 2001 From: Gonzalo Pena-Castellanos Date: Wed, 21 Sep 2016 17:56:17 -0400 Subject: [PATCH 06/10] Avoid unnecessary name repetition in equality comparisions --- conda_manager/models/packages.py | 40 ++++++++++++++------------------ 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/conda_manager/models/packages.py b/conda_manager/models/packages.py index 89f3175..7c179f1 100755 --- a/conda_manager/models/packages.py +++ b/conda_manager/models/packages.py @@ -197,10 +197,8 @@ def data(self, index, role=Qt.DisplayRole): return to_qvariant(P['icon.add.pressed']) else: return to_qvariant(P['icon.add.active']) - elif (status == C.INSTALLED or - status == C.UPGRADABLE or - status == C.DOWNGRADABLE or - status == C.MIXGRADABLE): + elif status in [C.INSTALLED, C.UPGRADABLE, C.DOWNGRADABLE, + C.MIXGRADABLE]: if r: return to_qvariant(P['icon.remove.pressed']) else: @@ -208,10 +206,8 @@ def data(self, index, role=Qt.DisplayRole): else: return to_qvariant(P['icon.add.inactive']) elif column == C.COL_REMOVE: - if (status == C.INSTALLED or - status == C.UPGRADABLE or - status == C.DOWNGRADABLE or - status == C.MIXGRADABLE): + if status in [C.INSTALLED, C.UPGRADABLE, C.DOWNGRADABLE, + C.MIXGRADABLE]: if r: return to_qvariant(P['icon.remove.pressed']) else: @@ -219,8 +215,7 @@ def data(self, index, role=Qt.DisplayRole): else: return to_qvariant(P['icon.remove.inactive']) elif column == C.COL_UPGRADE: - if status == C.UPGRADABLE or \ - status == C.MIXGRADABLE: + if status in [C.UPGRADABLE, C.MIXGRADABLE]: if u: return to_qvariant(P['icon.upgrade.pressed']) else: @@ -228,8 +223,7 @@ def data(self, index, role=Qt.DisplayRole): else: return to_qvariant(P['icon.upgrade.inactive']) elif column == C.COL_DOWNGRADE: - if status == C.DOWNGRADABLE or \ - status == C.MIXGRADABLE: + if status in [C.DOWNGRADABLE, C.MIXGRADABLE]: if d: return to_qvariant(P['icon.downgrade.pressed']) else: @@ -244,18 +238,18 @@ def data(self, index, role=Qt.DisplayRole): elif role == Qt.ToolTipRole: if column == C.COL_INSTALL and status == C.NOT_INSTALLED: return to_qvariant(_('Install package')) - elif column == C.COL_INSTALL and (status == C.INSTALLED or - status == C.UPGRADABLE or - status == C.DOWNGRADABLE or - status == C.MIXGRADABLE): + elif column == C.COL_INSTALL and (status in [C.INSTALLED, + C.UPGRADABLE, + C.DOWNGRADABLE, + C.MIXGRADABLE]): return to_qvariant(_('Remove package')) - elif column == C.COL_UPGRADE and (status == C.INSTALLED or - status == C.UPGRADABLE or - status == C.MIXGRADABLE): + elif column == C.COL_UPGRADE and (status in [C.INSTALLED, + C.UPGRADABLE, + C.MIXGRADABLE]): return to_qvariant(_('Upgrade package')) - elif column == C.COL_DOWNGRADE and (status == C.INSTALLED or - status == C.DOWNGRADABLE or - status == C.MIXGRADABLE): + elif column == C.COL_DOWNGRADE and (status in [C.INSTALLED, + C.DOWNGRADABLE, + C.MIXGRADABLE]): return to_qvariant(_('Downgrade package')) elif column == C.COL_PACKAGE_TYPE: if type_ == C.CONDA_PACKAGE: @@ -281,7 +275,7 @@ def data(self, index, role=Qt.DisplayRole): return to_qvariant(P['foreground.upgrade']) elif role == Qt.SizeHintRole: - if column in [C.ACTION_COLUMNS] + [C.COL_PACKAGE_TYPE]: + if column in C.ACTION_COLUMNS + [C.COL_PACKAGE_TYPE]: return to_qvariant(QSize(24, 24)) return to_qvariant() From 4d6f7d86caa36b1b84ff896e90b3cbd996e3b958 Mon Sep 17 00:00:00 2001 From: Gonzalo Pena-Castellanos Date: Wed, 21 Sep 2016 18:06:17 -0400 Subject: [PATCH 07/10] Add license code and use format instead of % --- bootstrap.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/bootstrap.py b/bootstrap.py index 94ccdd8..b486fb9 100644 --- a/bootstrap.py +++ b/bootstrap.py @@ -1,5 +1,13 @@ -# -*- coding: utf-8 -*- +# -*- coding:utf-8 -*- +# ----------------------------------------------------------------------------- +# Copyright © 2015 The Spyder Development Team +# Copyright © 2014 Gonzalo Peña-Castellanos (@goanpeca) +# +# Licensed under the terms of the MIT License +# ----------------------------------------------------------------------------- +"""Bottstrap script.""" +# Standard library imports import os.path as osp import sys @@ -9,7 +17,7 @@ # Patch sys.path sys.path.insert(0, DEVPATH) -print("01. Added %s to sys.path" % DEVPATH) +print("01. Added {0} to sys.path".format(DEVPATH)) # Run the app from conda_manager.app import main From 7699178a188e6181796df059dea96a09df3464de Mon Sep 17 00:00:00 2001 From: Gonzalo Pena-Castellanos Date: Wed, 21 Sep 2016 18:11:38 -0400 Subject: [PATCH 08/10] Use format instead of % --- conda_manager/utils/encoding.py | 2 +- conda_manager/utils/misc.py | 16 ++++++---------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/conda_manager/utils/encoding.py b/conda_manager/utils/encoding.py index 7a09b50..3ed564d 100755 --- a/conda_manager/utils/encoding.py +++ b/conda_manager/utils/encoding.py @@ -164,7 +164,7 @@ def encode(text, orig_coding): try: return text.encode(coding), coding except (UnicodeError, LookupError): - raise RuntimeError("Incorrect encoding (%s)" % coding) + raise RuntimeError("Incorrect encoding ({0})".format(coding)) if (orig_coding and orig_coding.endswith('-default') or orig_coding.endswith('-guessed')): coding = orig_coding.replace("-default", "") diff --git a/conda_manager/utils/misc.py b/conda_manager/utils/misc.py index c3d9e77..f855562 100644 --- a/conda_manager/utils/misc.py +++ b/conda_manager/utils/misc.py @@ -1,23 +1,19 @@ # -*- coding: utf-8 -*- def human_bytes(n): - """ - Return the number of bytes n in more human readable form. - """ + """Return the number of bytes n in more human readable form.""" if n < 1024: - return '%d B' % n + return '{0} B'.format(n) k = n/1024 if k < 1024: - return '%d KB' % round(k) + return '{0} KB'.format(round(k)) m = k/1024 if m < 1024: - return '%.1f MB' % m + return '{0:1f} MB'.format(m) g = m/1024 - return '%.2f GB' % g + return '{0:1f} GB'.format(g) def split_canonical_name(cname): - """ - Split a canonical package name into (name, version, build) strings. - """ + """Split a canonical package name into (name, version, build) strings.""" return tuple(cname.rsplit('-', 2)) From 6597a9a107ed6208ff39c66ee75e5ebfdb9e21b2 Mon Sep 17 00:00:00 2001 From: Gonzalo Pena-Castellanos Date: Wed, 21 Sep 2016 18:24:44 -0400 Subject: [PATCH 09/10] Use static methods when needed --- conda_manager/models/dependencies.py | 6 ++++-- conda_manager/models/packages.py | 11 ++++++----- conda_manager/widgets/main_window.py | 15 ++++++++++----- conda_manager/widgets/packages.py | 6 ++++-- conda_manager/widgets/table.py | 7 +++---- spyder_conda/condapackages.py | 9 ++++++--- 6 files changed, 33 insertions(+), 21 deletions(-) diff --git a/conda_manager/models/dependencies.py b/conda_manager/models/dependencies.py index a1093e1..637a1cf 100755 --- a/conda_manager/models/dependencies.py +++ b/conda_manager/models/dependencies.py @@ -121,7 +121,8 @@ def _build_packages_table(self, dic): return packages - def flags(self, index): + @staticmethod + def flags(index): """Override Qt method""" if not index.isValid(): return Qt.ItemIsEnabled @@ -174,7 +175,8 @@ def rowCount(self, index=QModelIndex()): """Override Qt method.""" return len(self._rows) - def columnCount(self, index=QModelIndex()): + @staticmethod + def columnCount(index=QModelIndex()): """Override Qt method.""" return 4 diff --git a/conda_manager/models/packages.py b/conda_manager/models/packages.py index 7c179f1..503d81a 100755 --- a/conda_manager/models/packages.py +++ b/conda_manager/models/packages.py @@ -78,17 +78,16 @@ def update_style_palette(self, palette=None): if palette: self._palette.update(palette) - def flags(self, index): + @staticmethod + def flags(index): """Override Qt method""" column = index.column() if index.isValid(): if column in [C.COL_START, C.COL_END]: -# return Qt.ItemFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) return Qt.ItemFlags(Qt.ItemIsEnabled) else: return Qt.ItemFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) -# return Qt.ItemFlags(Qt.ItemIsEnabled) else: return Qt.ItemFlags(Qt.ItemIsEnabled) @@ -280,7 +279,8 @@ def data(self, index, role=Qt.DisplayRole): return to_qvariant() - def headerData(self, section, orientation, role=Qt.DisplayRole): + @staticmethod + def headerData(section, orientation, role=Qt.DisplayRole): """Override Qt method""" if role == Qt.TextAlignmentRole: if orientation == Qt.Horizontal: @@ -305,7 +305,8 @@ def rowCount(self, index=QModelIndex()): """Override Qt method""" return len(self._rows) - def columnCount(self, index=QModelIndex()): + @staticmethod + def columnCount(index=QModelIndex()): """Override Qt method""" return len(C.COLUMNS) diff --git a/conda_manager/widgets/main_window.py b/conda_manager/widgets/main_window.py index d6f472a..2a8363e 100755 --- a/conda_manager/widgets/main_window.py +++ b/conda_manager/widgets/main_window.py @@ -116,23 +116,28 @@ def set_environments(self, prefix): """ """ self.packages.set_environment(prefix=prefix) - def add_env(self): + @staticmethod + def add_env(): """ """ # TODO: - def clone_env(self): + @staticmethod + def clone_env(): """ """ # TODO: - def remove_env(self): + @staticmethod + def remove_env(): """ """ # TODO: - def preferences(self): + @staticmethod + def preferences(): """ """ # TODO: - def report_issue(self): + @staticmethod + def report_issue(): if PY3: from urllib.parse import quote else: diff --git a/conda_manager/widgets/packages.py b/conda_manager/widgets/packages.py index fb094ec..908f5e8 100755 --- a/conda_manager/widgets/packages.py +++ b/conda_manager/widgets/packages.py @@ -54,7 +54,8 @@ def __init__(self, widget_before=None): QPushButton.__init__(self) self.widget_before = widget_before - def sizeHint(self): + @staticmethod + def sizeHint(): return QSize(0, 0) def focusInEvent(self, event): @@ -109,7 +110,8 @@ def event(self, event): else: return QPushButton.event(self, event) - def sizeHint(self): + @staticmethod + def sizeHint(): return QSize(0, 0) diff --git a/conda_manager/widgets/table.py b/conda_manager/widgets/table.py index d01dfe5..64440a5 100755 --- a/conda_manager/widgets/table.py +++ b/conda_manager/widgets/table.py @@ -684,10 +684,9 @@ def refresh_actions(self): number_of_actions += len(data) self.sig_actions_updated.emit(number_of_actions) - def open_url(self, url): - """ - Open link from action in default operating system browser. - """ + @staticmethod + def open_url(url): + """Open link from action in default operating system browser.""" if url is None: return QDesktopServices.openUrl(QUrl(url)) diff --git a/spyder_conda/condapackages.py b/spyder_conda/condapackages.py index 6684e4f..ca9c6fe 100644 --- a/spyder_conda/condapackages.py +++ b/spyder_conda/condapackages.py @@ -116,11 +116,13 @@ def __init__(self, parent=None): self.initialize_plugin() # ------ SpyderPluginWidget API ------------------------------------------- - def get_plugin_title(self): + @staticmethod + def get_plugin_title(): """Return widget title""" return _("Conda manager") - def get_plugin_icon(self): + @staticmethod + def get_plugin_icon(): """Return widget icon""" return QIcon(images.PATH_CONDA_LOGO) @@ -131,7 +133,8 @@ def get_focus_widget(self): """ return self.textbox_search - def get_plugin_actions(self): + @staticmethod + def get_plugin_actions(): """Return a list of actions related to plugin""" return [] From b884363b7ca3f100a7ed3f32e99393c2ff6fdc19 Mon Sep 17 00:00:00 2001 From: Gonzalo Pena-Castellanos Date: Wed, 21 Sep 2016 18:29:46 -0400 Subject: [PATCH 10/10] Avoid consecutive ifs --- conda_manager/models/packages.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/conda_manager/models/packages.py b/conda_manager/models/packages.py index 503d81a..0b7d6f4 100755 --- a/conda_manager/models/packages.py +++ b/conda_manager/models/packages.py @@ -255,8 +255,7 @@ def data(self, index, role=Qt.DisplayRole): return to_qvariant(_('Conda package')) elif type_ == C.PIP_PACKAGE: return to_qvariant(_('Python package')) - elif column == C.COL_VERSION: - if is_upgradable: + elif column == C.COL_VERSION and is_upgradable: return to_qvariant(_('Update available')) elif role == Qt.ForegroundRole: palette = QPalette() @@ -269,12 +268,11 @@ def data(self, index, role=Qt.DisplayRole): color = palette.color(QPalette.Mid) color = P['foreground.not.installed'] return to_qvariant(color) - elif column in [C.COL_VERSION]: - if is_upgradable: + elif column in [C.COL_VERSION] and is_upgradable: return to_qvariant(P['foreground.upgrade']) - elif role == Qt.SizeHintRole: - if column in C.ACTION_COLUMNS + [C.COL_PACKAGE_TYPE]: + elif (role == Qt.SizeHintRole and column in + C.ACTION_COLUMNS + [C.COL_PACKAGE_TYPE]): return to_qvariant(QSize(24, 24)) return to_qvariant()