14481 Package version Info image lock exception not handled
14437 pm traceback in update_all on startup
--- a/src/checkforupdates.py Fri Feb 12 14:44:06 2010 +0000
+++ b/src/checkforupdates.py Fri Feb 12 16:41:23 2010 +0000
@@ -32,7 +32,7 @@
import pkg.client.progress as progress
import pkg.client.api_errors as api_errors
-import pkg.gui.misc_non_gui as gui_misc
+import pkg.gui.misc_non_gui as nongui_misc
import pkg.gui.enumerations as enumerations
import pkg.misc as misc
from pkg.client import global_settings
@@ -50,12 +50,14 @@
message = None
try:
- api_obj = gui_misc.get_api_object(image_directory, pr)
+ api_obj = nongui_misc.get_api_object(image_directory, pr)
except api_errors.VersionException, e:
message = "Version mismatch: expected version %d, got version %d" % \
(e.expected_version, e.received_version)
except api_errors.ImageNotFoundException, e:
message = "%s is not an install image" % e.user_dir
+ except api_errors.ApiException, e:
+ message = "Unexpected exception: %s" % str(e)
if message != None:
if debug:
print "Failed to get Api object: %s" % message
@@ -93,12 +95,16 @@
return enumerations.NO_UPDATES_AVAILABLE
def __check_last_refresh(api_obj):
- cache_dir = gui_misc.get_cache_dir(api_obj)
+ cache_dir = nongui_misc.get_cache_dir(api_obj)
if not cache_dir:
return enumerations.UPDATES_UNDETERMINED
try:
- info = gui_misc.read_cache_file(os.path.join(
+ info = nongui_misc.read_cache_file(os.path.join(
cache_dir, CACHE_NAME + '.cpl'))
+ if len(info) == 0:
+ if debug:
+ print "No cache"
+ return enumerations.UPDATES_UNDETERMINED
if info.get("version") != CACHE_VERSION:
if debug:
print "Cache version mismatch:", \
@@ -137,7 +143,7 @@
return enumerations.UPDATES_UNDETERMINED
def __dump_updates_available(api_obj, stuff_to_do):
- cache_dir = gui_misc.get_cache_dir(api_obj)
+ cache_dir = nongui_misc.get_cache_dir(api_obj)
if not cache_dir:
return
publisher_list = {}
@@ -155,7 +161,7 @@
dump_info["publishers"] = publisher_list
try:
- gui_misc.dump_cache_file(os.path.join(
+ nongui_misc.dump_cache_file(os.path.join(
cache_dir, CACHE_NAME + '.cpl'), dump_info)
except IOError, e:
if debug:
--- a/src/gui/modules/installupdate.py Fri Feb 12 14:44:06 2010 +0000
+++ b/src/gui/modules/installupdate.py Fri Feb 12 16:41:23 2010 +0000
@@ -70,6 +70,7 @@
progress.GuiProgressTracker.__init__(self)
self.web_install = web_install
self.web_updates_list = None
+ self.web_install_all_installed = False
self.parent = parent
self.api_o = gui_misc.get_api_object(image_directory,
self, main_window)
@@ -92,6 +93,7 @@
self.ip = None
self.ips_update = False
self.operations_done = False
+ self.operations_done_ex = False
self.prev_ind_phase = None
self.uarenamebe_o = None
self.prev_pkg = None
@@ -422,7 +424,7 @@
def __on_cancelcreateplan_clicked(self, widget):
'''Handler for signal send by cancel button, which user might press
during evaluation stage - while the dialog is creating plan'''
- if self.api_o.can_be_canceled():
+ if self.api_o.can_be_canceled() and self.operations_done_ex == False:
self.canceling = True
Thread(target = self.api_o.cancel, args = ()).start()
cancel_txt = _("Canceling...")
@@ -433,11 +435,16 @@
gtk.STOCK_CANCEL, gtk.ICON_SIZE_MENU)
gobject.idle_add(self.w_stages_label.set_markup, cancel_txt)
self.w_cancel_button.set_sensitive(False)
- if self.operations_done:
+ if self.operations_done or self.operations_done_ex:
self.w_dialog.hide()
if self.web_install:
- gobject.idle_add(self.parent.update_package_list,
- self.web_updates_list)
+ if self.operations_done_ex == False and \
+ not self.web_install_all_installed:
+ gobject.idle_add(self.parent.update_package_list,
+ None)
+ else:
+ gobject.idle_add(self.parent.update_package_list,
+ self.web_updates_list)
return
gobject.idle_add(self.parent.update_package_list, None)
@@ -692,7 +699,10 @@
to_remove = gtk.ListStore(str, str, str)
- plan = self.api_o.describe().get_changes()
+ plan_desc = self.api_o.describe()
+ if plan_desc == None:
+ return
+ plan = plan_desc.get_changes()
for pkg_plan in plan:
orig = pkg_plan[0]
@@ -879,6 +889,7 @@
if msg == None or len(msg) == 0:
msg = _("No futher information available")
self.operations_done = True
+ self.operations_done_ex = True
self.stop_bouncing_progress()
self.update_details_text(_("\nError:\n"), "bold")
self.update_details_text("%s" % msg, "level1")
@@ -892,6 +903,7 @@
def __g_exception_stage(self, tracebk):
self.operations_done = True
+ self.operations_done_ex = True
self.stop_bouncing_progress()
if self.action == enumerations.IMAGE_UPDATE:
info_url = misc.get_release_notes_url()
@@ -1027,6 +1039,13 @@
and not self.action == enumerations.IMAGE_UPDATE:
self.parent.update_package_list(self.update_list)
if self.web_install:
+ if done_txt == \
+ _("All packages already installed.") or \
+ done_txt == \
+ _("Installation completed successfully"):
+ self.web_install_all_installed = True
+ else:
+ self.web_install_all_installed = False
self.web_updates_list = self.update_list
if self.ips_update:
self.w_dialog.hide()
@@ -1058,7 +1077,10 @@
install_iter = None
update_iter = None
remove_iter = None
- plan = self.api_o.describe().get_changes()
+ plan_desc = self.api_o.describe()
+ if plan_desc == None:
+ return
+ plan = plan_desc.get_changes()
self.update_details_text("\n")
for pkg_plan in plan:
origin_fmri = pkg_plan[0]
@@ -1133,12 +1155,8 @@
to_install[stem][1] = info_s.summary
elif stem in to_remove:
to_remove[stem][1] = info_s.summary
- except api_errors.TransportError, tpex:
- err = str(tpex)
- logger.error(err)
- gui_misc.notify_log_error(self.parent)
- except api_errors.InvalidDepotResponseException, idex:
- err = str(idex)
+ except api_errors.ApiException, ex:
+ err = str(ex)
logger.error(err)
gui_misc.notify_log_error(self.parent)
--- a/src/gui/modules/misc.py Fri Feb 12 14:44:06 2010 +0000
+++ b/src/gui/modules/misc.py Fri Feb 12 16:41:23 2010 +0000
@@ -36,6 +36,7 @@
import urllib2
import urlparse
import socket
+import traceback
try:
import gobject
import gnome
@@ -268,13 +269,23 @@
(ex.expected_version, ex.received_version)
except api_errors.ImageNotFoundException, ex:
message = _("%s is not an install image") % ex.user_dir
- if message != None:
- if parent_dialog != None:
- error_occurred(parent_dialog,
- message, _("API Error"))
- sys.exit(0)
- else:
- print message
+ except api_errors.ImageLockedError, ex:
+ message = str(ex)
+ except api_errors.ApiException, ex:
+ message = _("An unknown error occurred") + "\n\n" + _("Error details:\n")
+ message += str(ex)
+ except Exception:
+ traceback_lines = traceback.format_exc().splitlines()
+ traceback_str = ""
+ for line in traceback_lines:
+ traceback_str += line + "\n"
+ message = _("An unknown error occurred")
+ if traceback_str != "":
+ message += "\n\n" + _("Error details:\n") + traceback_str
+ if api_o == None or message != None:
+ if message == None:
+ message = _("An unknown error occurred")
+ raise Exception(message)
return api_o
def error_occurred(parent, error_msg, msg_title = None,
--- a/src/gui/modules/repository.py Fri Feb 12 14:44:06 2010 +0000
+++ b/src/gui/modules/repository.py Fri Feb 12 16:41:23 2010 +0000
@@ -79,6 +79,7 @@
self.publishers_list = None
self.repository_modify_publisher = None
self.no_changes = 0
+ self.pylintstub = None
w_tree_add_publisher = \
gtk.glade.XML(parent.gladefile, "add_publisher")
w_tree_add_publisher_complete = \
@@ -415,14 +416,22 @@
selection = self.w_publishers_treeview.get_selection()
selected_rows = selection.get_selected_rows()
self.w_publishers_treeview.set_model(None)
- pubs = self.api_o.get_publishers(duplicate=True)
+ try:
+ pubs = self.api_o.get_publishers(duplicate=True)
+ except api_errors.ApiException, e:
+ self.__show_errors([("", e)])
+ return
if not sorted_model:
return
filtered_model = sorted_model.get_model()
model = filtered_model.get_model()
if len(pubs) > 1:
- so = self.api_o.get_pub_search_order()
+ try:
+ so = self.api_o.get_pub_search_order()
+ except api_errors.ApiException, e:
+ self.__show_errors([("", e)])
+ return
pub_dict = dict([(p.prefix, p) for p in pubs])
pubs = [
pub_dict[name]
@@ -554,7 +563,12 @@
if not misc.valid_pub_prefix(name):
self.name_error = _("Name contains invalid characters")
return False
- for p in self.api_o.get_publishers():
+ try:
+ pubs = self.api_o.get_publishers()
+ except api_errors.ApiException, e:
+ self.__show_errors([("", e)])
+ return False
+ for p in pubs:
if name == p.prefix or name == p.alias:
self.name_error = _("Name already in use")
return False
@@ -586,8 +600,12 @@
def __modify_publisher_dialog(self, pub):
gui_misc.set_modal_and_transient(self.w_modify_repository_dialog,
self.w_manage_publishers_dialog)
- self.repository_modify_publisher = self.api_o.get_publisher(
- prefix=pub.prefix, alias=pub.prefix, duplicate=True)
+ try:
+ self.repository_modify_publisher = self.api_o.get_publisher(
+ prefix=pub.prefix, alias=pub.prefix, duplicate=True)
+ except api_errors.ApiException, e:
+ self.__show_errors([("", e)])
+ return
updated_modify_repository = self.__update_modify_repository_dialog(True,
True, True, True)
@@ -699,8 +717,7 @@
try:
repo.add_mirror(new_mirror)
self.w_addmirror_entry.set_text("")
- except (api_errors.PublisherError,
- api_errors.CertificateError), e:
+ except api_errors.ApiException, e:
self.__show_errors([(pub, e)])
self.__update_modify_repository_dialog(update_mirrors=True)
@@ -713,7 +730,7 @@
repo = pub.selected_repository
try:
repo.remove_mirror(remove_mirror)
- except api_errors.PublisherError, e:
+ except api_errors.ApiException, e:
self.__show_errors([(pub, e)])
self.__update_modify_repository_dialog(update_mirrors=True)
@@ -723,8 +740,7 @@
try:
repo.add_origin(new_origin)
self.w_addorigin_entry.set_text("")
- except (api_errors.PublisherError,
- api_errors.CertificateError), e:
+ except api_errors.ApiException, e:
self.__show_errors([(pub, e)])
self.__update_modify_repository_dialog(update_origins=True)
@@ -737,7 +753,7 @@
repo = pub.selected_repository
try:
repo.remove_origin(remove_origin)
- except api_errors.PublisherError, e:
+ except api_errors.ApiException, e:
self.__show_errors([(pub, e)])
self.__update_modify_repository_dialog(update_origins=True)
@@ -863,8 +879,7 @@
alias=name)
self.__g_update_details_text(
_("Publisher %s succesfully removed\n") % name)
- except (api_errors.PermissionsException,
- api_errors.PublisherError), e:
+ except api_errors.ApiException, e:
errors.append((pub, e))
self.progress_stop_thread = True
else:
@@ -906,14 +921,7 @@
raise e
else:
errors.append((pub, e))
- except api_errors.CatalogRefreshException, e:
- errors.append((pub, e))
- except api_errors.InvalidDepotResponseException, e:
- errors.append((pub, e))
- except api_errors.CertificateError, e:
- errors.append((pub, e))
- except (api_errors.PermissionsException,
- api_errors.PublisherError), e:
+ except api_errors.ApiException, e:
errors.append((pub, e))
return errors
@@ -1048,8 +1056,7 @@
self.__g_update_details_text(details_text %
{"enable" : enable_text, "name" : name})
self.api_o.update_publisher(pub)
- except (api_errors.PermissionsException,
- api_errors.PublisherError), e:
+ except api_errors.ApiException, e:
errors.append(pub, e)
self.progress_stop_thread = True
gobject.idle_add(self.publishers_apply_expander.set_expanded, False)
@@ -1061,6 +1068,7 @@
def __proceed_after_confirmation(self):
errors = []
+ image_lock_err = False
for row in self.priority_changes:
try:
if row[0] == enumerations.PUBLISHER_MOVE_BEFORE:
@@ -1073,9 +1081,12 @@
self.__g_update_details_text(
_("Changing priority for publisher %s\n")
% row[1])
- except (api_errors.PermissionsException,
- api_errors.PublisherError,
- api_errors.InvalidDepotResponseException), e:
+ except api_errors.ImageLockedError, e:
+ self.no_changes = 0
+ if not image_lock_err:
+ errors.append((row[1], e))
+ image_lock_err = True
+ except api_errors.ApiException, e:
errors.append((row[1], e))
for row in self.publishers_list:
@@ -1105,10 +1116,13 @@
self.__g_update_details_text(details_text %
{"enable" : enable_text, "name" : name})
self.api_o.update_publisher(pub)
- except (api_errors.PermissionsException,
- api_errors.PublisherError,
- api_errors.CatalogRefreshException,
- api_errors.InvalidDepotResponseException), e:
+ except api_errors.ImageLockedError, e:
+ self.no_changes = 0
+ if not image_lock_err:
+ errors.append(
+ (row[enumerations.PUBLISHER_OBJECT], e))
+ image_lock_err = True
+ except api_errors.ApiException, e:
errors.append((row[enumerations.PUBLISHER_OBJECT], e))
self.progress_stop_thread = True
if len(errors) > 0:
@@ -1622,8 +1636,7 @@
widget.hide()
return True
- @staticmethod
- def __get_or_create_pub_with_url(api_o, name, origin_url):
+ def __get_or_create_pub_with_url(self, api_o, name, origin_url):
new_pub = False
repo = None
pub = None
@@ -1643,6 +1656,8 @@
else:
origin = repo.origins[0]
origin.uri = origin_url
+ except api_errors.ApiException, e:
+ self.__show_errors([(name, e)])
return (pub, repo, new_pub)
@staticmethod
@@ -1662,8 +1677,7 @@
for uri in repo.mirrors:
uri.ssl_cert = ssl_cert
uri.ssl_key = ssl_key
- except (api_errors.PublisherError,
- api_errors.CertificateError), e:
+ except api_errors.ApiException, e:
errors.append((pub, e))
return errors
@@ -1684,8 +1698,7 @@
w_label.set_sensitive(True)
w_label.show()
- @staticmethod
- def __is_url_valid(url):
+ def __is_url_valid(self, url):
url_error = None
if len(url) == 0:
return False, url_error
@@ -1706,6 +1719,9 @@
else:
url_error = _("URI is not valid")
return False, url_error
+ except api_errors.ApiException, e:
+ self.__show_errors([("", e)])
+ return False, url_error
@staticmethod
def __validate_ssl_key_cert(origin_url, ssl_key, ssl_cert,
@@ -1864,6 +1880,7 @@
pass
def is_progress_bouncing(self):
+ self.pylintstub = self
return True
def stop_bouncing_progress(self):
--- a/src/gui/modules/webinstall.py Fri Feb 12 14:44:06 2010 +0000
+++ b/src/gui/modules/webinstall.py Fri Feb 12 16:41:23 2010 +0000
@@ -300,6 +300,10 @@
self.w_webinstall_dialog,
str(ex),
_("Publisher Error"))
+ except api_errors.ApiException, ex:
+ gobject.idle_add(gui_misc.error_occurred,
+ self.w_webinstall_dialog,
+ str(ex), _("Web Installer Error"))
return False
def __disabled_pubs_info(self, disabled_pubs):
@@ -345,11 +349,21 @@
gobject.idle_add(gui_misc.error_occurred,
self.w_webinstall_dialog,
str(ex), _("Publisher Error"))
+ except api_errors.ApiException, ex:
+ gobject.idle_add(gui_misc.error_occurred,
+ self.w_webinstall_dialog,
+ str(ex), _("Web Installer Error"))
return False
def __on_proceed_button_clicked(self, widget):
if not self.first_run:
- self.api_o.reset()
+ try:
+ self.api_o.reset()
+ except api_errors.ApiException, ex:
+ gobject.idle_add(gui_misc.error_occurred,
+ self.w_webinstall_dialog,
+ str(ex), _("Web Installer Error"))
+ return
self.pub_pkg_list = self.api_parse_publisher_info()
self.__create_task_lists()
else:
@@ -411,7 +425,19 @@
if len(self.pkg_install_tasks) == 0:
return
# Handle all packages from all pubs as single install action
- pref_pub = self.api_o.get_preferred_publisher()
+ try:
+ pref_pub = self.api_o.get_preferred_publisher()
+ except api_errors.PublisherError, ex:
+ gobject.idle_add(gui_misc.error_occurred,
+ self.w_webinstall_dialog,
+ str(ex),
+ _("Publisher Error"))
+ return
+ except api_errors.ApiException, ex:
+ gobject.idle_add(gui_misc.error_occurred,
+ self.w_webinstall_dialog,
+ str(ex), _("Web Installer Error"))
+ return
self.preferred = pref_pub.prefix
all_package_stems = []
for pkg_installs in self.pkg_install_tasks:
@@ -446,6 +472,8 @@
# Install Callback - invoked at end of installing packages
def update_package_list(self, update_list):
+ if update_list == None:
+ return
self.pkg_install_tasks = []
if len(self.disabled_pubs) > 0 and self.repo_gui:
gobject.idle_add(self.repo_gui.webinstall_enable_disable_pubs,
@@ -458,11 +486,7 @@
returns list of publisher and package list tuples'''
try:
return self.api_o.parse_p5i(location=self.param)
- except (api_errors.InvalidP5IFile,
- api_errors.InvalidResourceLocation,
- api_errors.RetrievalError,
- api_errors.UnsupportedP5IFile,
- api_errors.PublisherError), ex:
+ except api_errors.ApiException, ex:
self.w_webinstall_proceed.set_sensitive(False)
gui_misc.error_occurred(
self.w_webinstall_dialog,
--- a/src/packagemanager.py Fri Feb 12 14:44:06 2010 +0000
+++ b/src/packagemanager.py Fri Feb 12 16:41:23 2010 +0000
@@ -874,12 +874,17 @@
return
try:
fobj = open(filename, 'w')
- except IOError, ex_sel:
- self.error_occurred(ex_sel, _("Export Selections Error"))
+ self.api_o.write_p5i(fobj, pkg_names=self.selected_pkgs,
+ pubs=self.selected_pkgs.keys())
+ except IOError, ex:
+ err = str(ex)
+ self.error_occurred(err, _("Export Selections Error"))
return
-
- self.api_o.write_p5i(fobj, pkg_names=self.selected_pkgs,
- pubs=self.selected_pkgs.keys())
+ except api_errors.ApiException, ex:
+ fobj.close()
+ err = str(ex)
+ self.error_occurred(err, _("Export Selections Error"))
+ return
fobj.close()
os.chmod(filename, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP |
stat.S_IWGRP | stat.S_IROTH | stat.S_IWOTH )
@@ -2462,13 +2467,28 @@
if search_all:
self.search_all_pub_being_searched = _("All Publishers")
servers = None
- pub_prefix = self.api_o.get_preferred_publisher().prefix
+ try:
+ pref_pub = self.api_o.get_preferred_publisher()
+ pub_prefix = pref_pub.prefix
+ except api_errors.ApiException, ex:
+ err = str(ex)
+ gobject.idle_add(self.error_occurred, err,
+ None, gtk.MESSAGE_INFO)
+ gobject.idle_add(self.unset_busy_cursor)
+ return
else:
pub_prefix = self.__get_selected_publisher()
- if pub_prefix != None:
- pub = self.api_o.get_publisher(prefix=pub_prefix)
- else:
- pub = self.api_o.get_preferred_publisher()
+ try:
+ if pub_prefix != None:
+ pub = self.api_o.get_publisher(prefix=pub_prefix)
+ else:
+ pub = self.api_o.get_preferred_publisher()
+ except api_errors.ApiException, ex:
+ err = str(ex)
+ gobject.idle_add(self.error_occurred, err,
+ None, gtk.MESSAGE_INFO)
+ gobject.idle_add(self.unset_busy_cursor)
+ return
origin_uri = self.__get_origin_uri(pub.selected_repository)
servers.append({"origin": origin_uri})
self.search_all_pub_being_searched = \
@@ -2479,17 +2499,17 @@
#TBD If we ever search just Installed pkgs should allow for a local search
case_sensitive = False
return_actions = True
- searches.append(self.api_o.remote_search(
- [api.Query(" ".join(pargs), case_sensitive, return_actions)],
- servers=servers))
- if debug:
- print "Search Args: %s : cs: %s : retact: %s" % \
- ("".join(pargs), case_sensitive, return_actions)
last_name = ""
# Sorting results by Name gives best overall appearance and flow
sort_col = enumerations.NAME_COLUMN
try:
+ searches.append(self.api_o.remote_search(
+ [api.Query(" ".join(pargs), case_sensitive, return_actions)],
+ servers=servers))
+ if debug:
+ print "Search Args: %s : cs: %s : retact: %s" % \
+ ("".join(pargs), case_sensitive, return_actions)
for query_num, pub, (v, return_type, tmp) in \
itertools.chain(*searches):
if v < 1 or return_type != api.Query.RETURN_PACKAGES:
@@ -2532,6 +2552,12 @@
gobject.idle_add(self.unset_busy_cursor)
gobject.idle_add(self.__process_after_cancel)
return
+ except api_errors.ImageLockedError, ex:
+ err = str(ex)
+ gobject.idle_add(self.error_occurred, err,
+ None, gtk.MESSAGE_INFO)
+ self.__process_after_search_failure()
+ return
except Exception, aex:
err = str(aex)
logger.error(err)
@@ -3655,7 +3681,8 @@
Thread(target = self.__get_info, args = (pkg_stem, name)).start()
def __get_info(self, pkg_stem, name):
- self.api_o.reset()
+ if not self.__do_api_reset():
+ return
local_info = gui_misc.get_pkg_info(self, self.api_o, pkg_stem, True)
remote_info = gui_misc.get_pkg_info(self, self.api_o, pkg_stem, False)
if self.exiting:
@@ -3675,11 +3702,17 @@
stuff_to_do = self.api_o.plan_install(
install_update_list,
refresh_catalogs = False)
- except api_errors.ApiException:
+ except api_errors.ApiException, ex:
+ err = str(ex)
+ logger.error(err)
+ gobject.idle_add(gui_misc.notify_log_error, self)
gobject.idle_add(self.unset_busy_cursor)
return
if stuff_to_do:
- plan = self.api_o.describe().get_changes()
+ plan_desc = self.api_o.describe()
+ if plan_desc == None:
+ return
+ plan = plan_desc.get_changes()
plan_pkg = None
for pkg_plan in plan:
if name == pkg_plan[1].pkg_stem:
@@ -3839,8 +3872,19 @@
self.__on_info_ok_button_clicked(None)
return True
+ def __do_api_reset(self):
+ try:
+ self.api_o.reset()
+ except api_errors.ApiException, ex:
+ err = str(ex)
+ gobject.idle_add(self.error_occurred, err,
+ None, gtk.MESSAGE_INFO)
+ return False
+ return True
+
def __on_install_update(self, widget):
- self.api_o.reset()
+ if not self.__do_api_reset():
+ return
install_update = []
confirmation_list = None
if self.show_install:
@@ -3859,7 +3903,8 @@
confirmation_list = confirmation_list)
def __on_update_all(self, widget):
- self.api_o.reset()
+ if not self.__do_api_reset():
+ return
confirmation = None
if self.show_image_update:
confirmation = []
@@ -3904,7 +3949,8 @@
desc, status])
def __on_remove(self, widget):
- self.api_o.reset()
+ if not self.__do_api_reset():
+ return
remove_list = []
confirmation_list = None
if self.show_remove:
@@ -3941,10 +3987,12 @@
def __catalog_refresh(self):
"""Update image's catalogs."""
success = self.__do_refresh(immediate=True)
+ if not success:
+ gobject.idle_add(self.unset_busy_cursor)
+ gobject.idle_add(self.update_statusbar)
+ return -1
gobject.idle_add(self.__clear_recent_searches)
self.__catalog_refresh_done()
- if not success:
- return -1
return 0
def __catalog_refresh_done(self):
@@ -4537,6 +4585,7 @@
if self.use_cache:
self.info_cache[pkg_stem] = (labs, text, inst_str,
local_info, dep_info, installed_dep_info)
+ self.unset_busy_cursor()
@staticmethod
def setup_package_license(licenses):
@@ -4655,6 +4704,7 @@
pkg_status = model.get_value(itr, enumerations.STATUS_COLUMN)
if self.info_cache.has_key(pkg_stem):
return
+ self.set_busy_cursor()
Thread(target = self.__show_package_info,
args = (pkg, pkg_stem, pkg_status, self.last_show_info_id)).start()
@@ -4902,15 +4952,6 @@
self.w_selectupdates_menuitem.set_sensitive(False)
return
- def __get_inventory_list(self, pargs, all_known, all_versions):
- self.__image_activity_lock.acquire()
- try:
- res = misc.get_inventory_list(self.api_o.img,
- pargs, all_known, all_versions)
- finally:
- self.__image_activity_lock.release()
- return res
-
def __enable_disable_export_selections(self):
if self.selected_pkgs == None or len(self.selected_pkgs) == 0:
self.w_export_selections_menuitem.set_sensitive(False)
@@ -5457,7 +5498,7 @@
if count == total:
self.w_progress_frame.hide()
return False
- if self.api_o.can_be_canceled():
+ if self.api_o and self.api_o.can_be_canceled():
self.progress_cancel.set_sensitive(True)
else:
self.progress_cancel.set_sensitive(False)
@@ -5481,7 +5522,7 @@
def __progress_pulse(self):
gobject.idle_add(self.w_progress_frame.show)
while not self.progress_stop_thread:
- if self.api_o != None and self.api_o.can_be_canceled():
+ if self.api_o and self.api_o.can_be_canceled():
gobject.idle_add(self.progress_cancel.set_sensitive, True)
else:
gobject.idle_add(self.progress_cancel.set_sensitive,
@@ -5552,15 +5593,21 @@
dt = version.get_timestamp()
return dt
- @staticmethod
- def __get_version(api_o, local, pkg):
- info = api_o.info([pkg], local, frozenset(
- [api.PackageInfo.STATE, api.PackageInfo.IDENTITY]))
- found = info[api.ImageInterface.INFO_FOUND]
+ def __get_version(self, api_o, local, pkg):
+ version = None
try:
+ info = api_o.info([pkg], local, frozenset(
+ [api.PackageInfo.STATE, api.PackageInfo.IDENTITY]))
+ found = info[api.ImageInterface.INFO_FOUND]
version = found[0]
except IndexError:
- version = None
+ pass
+ except api_errors.ApiException, ex:
+ err = str(ex)
+ logger.error(err)
+ gobject.idle_add(gui_misc.notify_log_error, self)
+ except Exception, ex:
+ pass
return version
#-----------------------------------------------------------------------------#
@@ -5756,7 +5803,14 @@
visible_list = update_list.get(visible_publisher)
if self.is_all_publishers or self.is_all_publishers_installed \
or self.in_recent_search:
- for pub in self.api_o.get_publishers():
+ try:
+ pubs = self.api_o.get_publishers()
+ except api_errors.ApiException, ex:
+ err = str(ex)
+ gobject.idle_add(self.error_occurred, err,
+ None, gtk.MESSAGE_INFO)
+ return
+ for pub in pubs:
if pub.disabled:
continue
prefix = pub.prefix
--- a/src/tests/gui_pylintrc Fri Feb 12 14:44:06 2010 +0000
+++ b/src/tests/gui_pylintrc Fri Feb 12 16:41:23 2010 +0000
@@ -159,7 +159,7 @@
# Maximum number of lines in a module
# Increased from 1500 as the packagemanager is doing a lot of GUI initialisation that we can't logically put anywhere else.
-max-module-lines=6100
+max-module-lines=7000
# String used as indentation unit. This is usually " " (4 spaces) or
# "\t" (1 tab).
--- a/src/updatemanager.py Fri Feb 12 14:44:06 2010 +0000
+++ b/src/updatemanager.py Fri Feb 12 16:41:23 2010 +0000
@@ -51,6 +51,7 @@
import pkg.gui.installupdate as installupdate
import pkg.gui.enumerations as enumerations
import pkg.gui.misc as gui_misc
+import pkg.client.api_errors as api_errors
import pkg.misc as misc
from pkg.client import global_settings
logger = global_settings.logger
@@ -371,7 +372,13 @@
list_option = api.ImageInterface.LIST_UPGRADABLE
if list_uninstalled:
list_option = api.ImageInterface.LIST_INSTALLED_NEWEST
- pkgs_from_api = self.api_obj.get_pkg_list(pkg_list = list_option)
+ try:
+ pkgs_from_api = self.api_obj.get_pkg_list(pkg_list = list_option)
+ except api_errors.ApiException, ex:
+ gobject.idle_add(gui_misc.error_occurred,
+ self.w_um_dialog,
+ str(ex), _("Update Manager"))
+ return
for entry in pkgs_from_api:
(pkg_pub, pkg_name, ver) = entry[0]
states = entry[3]
@@ -547,7 +554,13 @@
def __on_updateall_button_clicked(self, widget):
self.__selectall_toggle(True)
- self.__get_api_obj().reset()
+ try:
+ self.__get_api_obj().reset()
+ except api_errors.ApiException, ex:
+ gobject.idle_add(gui_misc.error_occurred,
+ self.w_um_dialog,
+ str(ex), _("Update Manager"))
+ return
installupdate.InstallUpdate([], self,
self.__get_image_path(), action = enumerations.IMAGE_UPDATE,
parent_name = _("Update Manager"),
@@ -559,11 +572,6 @@
def __on_selectall_checkbutton_toggled(self, widget):
self.__selectall_toggle(widget.get_active())
- def __handle_cancel_exception(self):
- gobject.idle_add(self.w_progress_dialog.hide)
- gobject.idle_add(self.w_progressinfo_expander.set_expanded, False)
- self.__cleanup()
-
def __prompt_to_load_beadm(self):
msgbox = gtk.MessageDialog(parent = self.w_progress_dialog,
buttons = gtk.BUTTONS_OK_CANCEL, flags = gtk.DIALOG_MODAL,
@@ -592,11 +600,6 @@
list2 = dict([(k, None) for k in list2])
return [item for item in list1 if item not in list2]
- def __cleanup(self):
- self.api_obj.reset()
- self.pr.reset()
- self.progress_stop_thread = True
-
@staticmethod
def __on_um_expander_activate(widget):
return