From ccb57e05d14be9238e90c7e8aab83fff5f8e16d2 Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Wed, 15 Sep 2010 07:20:45 +0200 Subject: [PATCH] [entropy.services] open_session() can return None, state it clearly and handle the case everywhere the function is used --- libraries/entropy/client/interfaces/db.py | 33 +++++++++------- .../client/services/system/interfaces.py | 10 ++--- .../entropy/client/services/ugc/interfaces.py | 38 ++++++++++--------- libraries/entropy/services/ugc/interfaces.py | 11 +++++- 4 files changed, 53 insertions(+), 39 deletions(-) diff --git a/libraries/entropy/client/interfaces/db.py b/libraries/entropy/client/interfaces/db.py index 8e92902dd..614608231 100644 --- a/libraries/entropy/client/interfaces/db.py +++ b/libraries/entropy/client/interfaces/db.py @@ -1370,6 +1370,8 @@ class AvailablePackagesRepositoryUpdater(object): return False session = eapi3_interface.open_session() + if session is None: + return False try: mydbconn = self.__get_eapi3_local_database() @@ -1719,22 +1721,25 @@ class AvailablePackagesRepositoryUpdater(object): self._repo_eapi -= 1 else: session = eapi3_interface.open_session() - repo_metadata = self.__get_eapi3_repository_metadata( - eapi3_interface, session) - self.__eapi3_close(eapi3_interface, session = session) - repo_rev = repo_metadata.get('revision') - if repo_rev is not None: - try: - repo_rev = int(repo_rev) - except (ValueError, TypeError): - repo_rev = None - if repo_rev is None: - # cannot reliably detect revision in EAPI=3 world - # so we need to drop EAPI3 in favour of EAPI2 + if session is None: self._repo_eapi -= 1 else: - self._last_rev = repo_rev - return repo_rev + repo_metadata = self.__get_eapi3_repository_metadata( + eapi3_interface, session) + self.__eapi3_close(eapi3_interface, session = session) + repo_rev = repo_metadata.get('revision') + if repo_rev is not None: + try: + repo_rev = int(repo_rev) + except (ValueError, TypeError): + repo_rev = None + if repo_rev is None: + # cannot reliably detect revision in EAPI=3 world + # so we need to drop EAPI3 in favour of EAPI2 + self._repo_eapi -= 1 + else: + self._last_rev = repo_rev + return repo_rev avail_data = self._settings['repositories']['available'] repo_data = avail_data[self.__repository_id] diff --git a/libraries/entropy/client/services/system/interfaces.py b/libraries/entropy/client/services/system/interfaces.py index 28cac8d25..f71e8c95f 100644 --- a/libraries/entropy/client/services/system/interfaces.py +++ b/libraries/entropy/client/services/system/interfaces.py @@ -231,29 +231,29 @@ class Client: with self.CacheLock: srv = self.get_connection_cache() - if srv == None: + if srv is None: srv = self.get_service_connection(timeout = self.socket_timeout) if srv != None: self.cache_connection(srv) else: srv = srv['conn'] - if srv == None: + if srv is None: return False, 'no connection' cmd_tuple = (login_required, func,) new_session = False session = self.get_session_cache(cmd_tuple) - if session == None: + if session is None: new_session = True session = srv.open_session() - if session == None: + if session is None: return False, 'no session' else: if not srv.is_session_alive(session): new_session = True session = srv.open_session() - if session == None: + if session is None: return False, 'no session' self.set_session_cache(cmd_tuple, session) diff --git a/libraries/entropy/client/services/ugc/interfaces.py b/libraries/entropy/client/services/ugc/interfaces.py index b3b5dbb40..e3fd743a4 100644 --- a/libraries/entropy/client/services/ugc/interfaces.py +++ b/libraries/entropy/client/services/ugc/interfaces.py @@ -94,17 +94,17 @@ class Client: aware = self.UGCCache._get_live_cache_item(repository, 'is_repository_eapi3_aware') - if aware != None: + if aware is not None: return aware try: srv = self.get_service_connection(repository, check = False, timeout = 6) - if srv == None: + if srv is None: aware = False else: session = srv.open_session() - if session != None: + if session is not None: srv.close_session(session) srv.disconnect() aware = True @@ -126,7 +126,7 @@ class Client: def do_login(self, repository, force = False): login_data = self.read_login(repository) - if (login_data != None) and not force: + if (login_data is not None) and not force: return True, _('ok') aware = self.is_repository_eapi3_aware(repository) @@ -155,9 +155,11 @@ class Client: # now verify srv = self.get_service_connection(repository) - if srv == None: + if srv is None: return False, _('connection issues') session = srv.open_session() + if session is None: + return False, _('cannot open a session') login_status, login_msg = srv.CmdInterface.service_login( login_data['username'], login_data['password'], session) if not login_status: @@ -206,10 +208,10 @@ class Client: return False, err_msg srv = self.get_service_connection(repository) - if srv == None: + if srv is None: return False, 'no connection' session = srv.open_session() - if session == None: + if session is None: return False, 'no session' args.insert(0, session) @@ -218,7 +220,7 @@ class Client: while True: # login login_data = self.read_login(repository) - if login_data == None: + if login_data is None: status, msg = self.login(repository) if not status: return status, msg @@ -415,7 +417,7 @@ class AuthStore(Singleton): self.xmldoc = self.minidom.parse(self.access_file) except (self.expat.ExpatError, IOError,): self.xmldoc = None - if self.xmldoc != None: + if self.xmldoc is not None: try: self.parse_document() except self.expat.ExpatError: @@ -424,7 +426,7 @@ class AuthStore(Singleton): def setup_store_paths(self): myhome = os.getenv("HOME") - if myhome != None: + if myhome is not None: if os.path.isdir(myhome) and os.access(myhome, os.W_OK): self.access_file = os.path.join(myhome, ".config/entropy", os.path.basename(self.access_file)) @@ -650,7 +652,7 @@ class Cache: try: os.chmod(cache_file, 0o664) - if etpConst['entropygid'] != None: + if etpConst['entropygid'] is not None: os.chown(cache_file, -1, etpConst['entropygid']) except OSError: raise PermissionDenied("PermissionDenied: %s %s" % ( @@ -666,7 +668,7 @@ class Cache: def update_vote_cache(self, repository, vote_dict): cached = self.get_vote_cache(repository) - if cached == None: + if cached is None: cached = vote_dict.copy() else: cached.update(vote_dict) @@ -674,7 +676,7 @@ class Cache: def update_downloads_cache(self, repository, down_dict): cached = self.get_downloads_cache(repository) - if cached == None: + if cached is None: cached = down_dict.copy() else: cached.update(down_dict) @@ -713,7 +715,7 @@ class Cache: def get_vote_cache(self, repository): cache_key = self._get_vote_cache_key(repository) cached = self._get_live_cache_item(repository, cache_key) - if cached != None: + if cached is not None: return cached with self.CacheLock: cache_file = self._get_vote_cache_file(repository) @@ -721,7 +723,7 @@ class Cache: data = entropy.dump.loadobj( cache_file, complete_path = True) - if data != None: + if data is not None: self._set_live_cache_item(repository, cache_key, data) except (IOError, EOFError, OSError): data = None @@ -748,13 +750,13 @@ class Cache: def get_downloads_cache(self, repository): cache_key = self._get_downloads_cache_key(repository) cached = self._get_live_cache_item(repository, cache_key) - if cached != None: + if cached is not None: return cached with self.CacheLock: cache_file = self._get_downloads_cache_file(repository) try: data = entropy.dump.loadobj(cache_file, complete_path = True) - if data != None: + if data is not None: self._set_live_cache_item(repository, cache_key, data) except (IOError, EOFError, OSError): data = None @@ -790,7 +792,7 @@ class Cache: cache_file = self._get_alldocs_cache_file(pkgkey, repository) try: data = entropy.dump.loadobj(cache_file, complete_path = True) - if data != None: + if data is not None: cached[pkgkey] = data self._set_live_cache_item(repository, cache_key, cached) except (IOError, EOFError, OSError): diff --git a/libraries/entropy/services/ugc/interfaces.py b/libraries/entropy/services/ugc/interfaces.py index f7039f8c1..2bf4a39f1 100644 --- a/libraries/entropy/services/ugc/interfaces.py +++ b/libraries/entropy/services/ugc/interfaces.py @@ -1995,10 +1995,17 @@ class Client: return data def open_session(self): + """ + Open a remote session, returning a valid session id or None (in case + of errors). + """ self.check_socket_connection() self.socket.setdefaulttimeout(self.socket_timeout) - self.transmit('begin') - data = self.receive() + try: + self.transmit('begin') + data = self.receive() + except (SSLError, self.socket.error): + return None return const_convert_to_unicode(data) def is_session_alive(self, session):