def connect(clear_on_failure=False, interactive=True): if not is_connected(): config.logger.info("controller:connect(%s,%s)", clear_on_failure, interactive) try: connect_semaphore.acquire(1) if config.app_window is not None: connection.setKeyring() account = config.app_window.plus_account if account is None: account = config.app_window.plus_email if isinstance(threading.current_thread(), threading._MainThread): # this is dangerous and should only be done while running in the main GUI thread as a consequence are GUI actions which might crash in other threads interactive = True if account is not None: # @UndefinedVariable try: # try-catch as the keyring might not work config.passwd = keyring.get_password( config.app_name, account) # @UndefinedVariable if config.passwd is None: config.logger.debug( "controller: -> keyring.get_password returned None" ) else: config.logger.debug( "controller: -> keyring passwd received") except Exception as e: config.logger.error("controller: keyring Exception %s", e) if interactive and ( config.app_window.plus_account is None or config.passwd is None): # @UndefinedVariable # ask user for credentials import plus.login login, passwd, remember, res = plus.login.plus_login( config.app_window, config.app_window.plus_email, config.passwd, config.app_window. plus_remember_credentials) # @UndefinedVariable if res: # Login dialog not Canceled config.app_window.plus_remember_credentials = remember # store credentials config.app_window.plus_account = login if remember: config.app_window.plus_email = login else: config.app_window.plus_email = None # store the passwd in the keychain if login is not None and passwd is not None and remember: try: # try-catch as the keyring might not work keyring.set_password(config.app_name, login, passwd) config.logger.debug( "controller: -> keyring set password (%s)", login) except Exception as e: config.logger.error( "controller: keyring Exception %s", e) if not platform.system().startswith( "Windows" ) and platform.system() != 'Darwin': # on Linux remind to install the gnome-keyring config.app_window.sendmessageSignal.emit( QApplication.translate( "Plus", "Keyring error: Ensure that gnome-keyring is installed.", None), True, None) # @UndefinedVariable config.passwd = passwd # remember password in memory for this session if config.app_window.plus_account is None: # @UndefinedVariable if interactive: config.app_window.sendmessageSignal.emit( QApplication.translate("Plus", "Login aborted", None), True, None) # @UndefinedVariable else: success = connection.authentify() if success: config.connected = success config.app_window.sendmessageSignal.emit( config.app_window.plus_account + " " + QApplication.translate("Plus", "authentified", None), True, None) # @UndefinedVariable config.app_window.sendmessageSignal.emit( QApplication.translate("Plus", "Connected to artisan.plus", None), True, None) # @UndefinedVariable config.logger.info("Artisan v%s (%s, %s) connected", str(__version__), str(__revision__), str(__build__)) try: queue.start() # start the outbox queue except Exception: pass try: config.app_window.resetDonateCounter() except Exception: pass else: if clear_on_failure: connection.clearCredentials() config.app_window.sendmessageSignal.emit( QApplication.translate("Plus", "artisan.plus turned off", None), True, None) # @UndefinedVariable elif interactive: message = QApplication.translate( "Plus", "Authentication failed", None) if not config.app_window.plus_account is None: # @UndefinedVariable message = config.app_window.plus_account + " " + message # @UndefinedVariable config.app_window.sendmessageSignal.emit( message, True, None) # @UndefinedVariable except Exception as e: if interactive: config.logger.error("controller: connect Exception %s", e) if clear_on_failure: connection.clearCredentials() if interactive: config.app_window.sendmessageSignal.emit( QApplication.translate("Plus", "artisan.plus turned off", None), True, None) else: if interactive: config.app_window.sendmessageSignal.emit( QApplication.translate( "Plus", "Couldn't connect to artisan.plus", None), True, None) config.connected = False finally: if connect_semaphore.available() < 1: connect_semaphore.release(1) config.app_window.updatePlusStatusSignal.emit() # @UndefinedVariable if interactive and is_connected(): stock.update()
def connect(clear_on_failure=False,interactive=True): if not is_connected(): config.logger.info("controller:connect(%s,%s)",clear_on_failure,interactive) try: connect_semaphore.acquire(1) if config.app_window is not None: connection.setKeyring() if config.app_window.plus_account is not None: # @UndefinedVariable try: # try-catch as the keyring might not work config.passwd = keyring.get_password(config.app_name, config.app_window.plus_account) # @UndefinedVariable if config.passwd is None: config.logger.debug("controller: -> keyring.get_password returned None") else: config.logger.debug("controller: -> keyring passwd received") except Exception as e: config.logger.error("controller: keyring Exception %s",e) if interactive and (config.app_window.plus_account is None or config.passwd is None): # @UndefinedVariable # ask user for credentials import plus.login login,passwd,remember = plus.login.plus_login(config.app_window,config.app_window.plus_email,config.app_window.plus_remember_credentials) # @UndefinedVariable config.app_window.plus_remember_credentials = remember # store credentials config.app_window.plus_account = login if remember: config.app_window.plus_email = login else: config.app_window.plus_email = None # store the passwd in the keychain if login is not None and passwd is not None and remember: try: # try-catch as the keyring might not work keyring.set_password(config.app_name, login, passwd) config.logger.debug("controller: -> keyring set password (%s)",login) except Exception as e: config.logger.error("controller: keyring Exception %s",e) if not platform.system().startswith("Windows") and platform.system() != 'Darwin': # on Linux remind to install the gnome-keyring config.app_window.sendmessage(QApplication.translate("Plus","Keyring error: Ensure that gnome-keyring is installed.",None)) # @UndefinedVariable config.passwd = passwd # remember password in memory for this session if config.app_window.plus_account is None: # @UndefinedVariable if interactive: config.app_window.sendmessage(QApplication.translate("Plus","Login aborted",None)) # @UndefinedVariable else: success = connection.authentify() if success: config.connected = success config.app_window.sendmessage(config.app_window.plus_account + " " + QApplication.translate("Plus","authentified",None)) # @UndefinedVariable config.app_window.sendmessage(QApplication.translate("Plus","Connected to artisan.plus",None)) # @UndefinedVariable try: queue.start() # start the outbox queue except: pass else: if clear_on_failure: connection.clearCredentials() config.app_window.sendmessage(QApplication.translate("Plus","artisan.plus turned off",None)) # @UndefinedVariable elif interactive: message = QApplication.translate("Plus","Authentication failed",None) if not config.app_window.plus_account is None: # @UndefinedVariable message = config.app_window.plus_account + " " + message # @UndefinedVariable config.app_window.sendmessage(message) # @UndefinedVariable except Exception as e: if interactive: config.logger.error("controller: connect Exception %s",e) if clear_on_failure: connection.clearCredentials() if interactive: config.app_window.sendmessage(QApplication.translate("Plus","artisan.plus turned off",None)) # @UndefinedVariable else: if interactive: config.app_window.sendmessage(QApplication.translate("Plus","Couldn't connect to artisan.plus",None)) # @UndefinedVariable config.connected = False finally: if connect_semaphore.available() < 1: connect_semaphore.release(1) config.app_window.updatePlusStatus() # @UndefinedVariable if interactive and is_connected(): stock.update()