def run (self): if self.host == None: self.host = cups.getServer () if self.port == None: self.port = cups.getPort () if self._encryption == None: self._encryption = cups.getEncryption () if self.user: cups.setUser (self.user) else: self.user = cups.getUser () try: cups.setPasswordCB2 (self._auth) except AttributeError: # Requires pycups >= 1.9.47. Fall back to rubbish API. cups.setPasswordCB (self._auth) try: conn = cups.Connection (host=self.host, port=self.port, encryption=self._encryption) self._reply (None) except RuntimeError, e: conn = None self._error (e)
def run (self): if self.host == None: self.host = cups.getServer () if self.port == None: self.port = cups.getPort () if self._encryption == None: self._encryption = cups.getEncryption () if self.user: cups.setUser (self.user) else: self.user = cups.getUser () cups.setPasswordCB2 (self._auth) try: conn = cups.Connection (host=self.host, port=self.port, encryption=self._encryption) self._reply (None) except RuntimeError, e: conn = None self._error (e)
def run (self): if self.host == None: self.host = cups.getServer () if self.port == None: self.port = cups.getPort () if self._encryption == None: self._encryption = cups.getEncryption () if self.user: cups.setUser (self.user) else: self.user = cups.getUser () cups.setPasswordCB2 (self._auth) try: conn = cups.Connection (host=self.host, port=self.port, encryption=self._encryption) self._reply (None) except RuntimeError as e: conn = None self._error (e) while True: # Wait to find out what operation to try. debugprint ("Awaiting further instructions") self.idle = self._queue.empty () item = self._queue.get () debugprint ("Next task: %s" % repr (item)) if item == None: # Our signal to quit. self._queue.task_done () break self.idle = False (fn, args, kwds, rh, eh, ah) = item if rh != False: self._reply_handler = rh if eh != False: self._error_handler = eh if ah != False: self._auth_handler = ah if fn == True: # Our signal to change user and reconnect. self.user = args[0] cups.setUser (self.user) debugprint ("Set user=%s; reconnecting..." % self.user) cups.setPasswordCB2 (self._auth) try: conn = cups.Connection (host=self.host, port=self.port, encryption=self._encryption) debugprint ("...reconnected") self._queue.task_done () self._reply (None) except RuntimeError as e: debugprint ("...failed") self._queue.task_done () self._error (e) continue # Normal IPP operation. Try to perform it. try: debugprint ("Call %s" % fn) result = fn (conn, *args, **kwds) if fn == cups.Connection.adminGetServerSettings.__call__: # Special case for a rubbish bit of API. if result == {}: # Authentication failed, but we aren't told that. raise cups.IPPError (cups.IPP_NOT_AUTHORIZED, '') debugprint ("...success") self._reply (result) except Exception as e: debugprint ("...failure (%s)" % repr (e)) self._error (e) self._queue.task_done () debugprint ("Thread exiting") self._destroyed = True del self._conn # already destroyed del self._reply_handler del self._error_handler del self._auth_handler del self._queue del self._auth_queue del conn cups.setPasswordCB2 (None)
def run(self): if self.host == None: self.host = cups.getServer() if self.port == None: self.port = cups.getPort() if self._encryption == None: self._encryption = cups.getEncryption() if self.user: cups.setUser(self.user) else: self.user = cups.getUser() cups.setPasswordCB2(self._auth) try: conn = cups.Connection(host=self.host, port=self.port, encryption=self._encryption) self._reply(None) except RuntimeError as e: conn = None self._error(e) while True: # Wait to find out what operation to try. debugprint("Awaiting further instructions") self.idle = self._queue.empty() item = self._queue.get() debugprint("Next task: %s" % repr(item)) if item == None: # Our signal to quit. self._queue.task_done() break elif self._destroyed: # Just mark all tasks done self._queue.task_done() continue self.idle = False (fn, args, kwds, rh, eh, ah) = item if rh != False: self._reply_handler = rh if eh != False: self._error_handler = eh if ah != False: self._auth_handler = ah if fn == True: # Our signal to change user and reconnect. self.user = args[0] cups.setUser(self.user) debugprint("Set user=%s; reconnecting..." % self.user) cups.setPasswordCB2(self._auth) try: conn = cups.Connection(host=self.host, port=self.port, encryption=self._encryption) debugprint("...reconnected") self._queue.task_done() self._reply(None) except RuntimeError as e: debugprint("...failed") self._queue.task_done() self._error(e) continue # Normal IPP operation. Try to perform it. try: debugprint("Call %s" % fn) result = fn(conn, *args, **kwds) if fn == cups.Connection.adminGetServerSettings.__call__: # Special case for a rubbish bit of API. if result == {}: # Authentication failed, but we aren't told that. raise cups.IPPError(cups.IPP_NOT_AUTHORIZED, "") debugprint("...success") self._reply(result) except Exception as e: debugprint("...failure (%s)" % repr(e)) self._error(e) self._queue.task_done() debugprint("Thread exiting") del self._conn # already destroyed del self._reply_handler del self._error_handler del self._auth_handler del self._queue del self._auth_queue del conn cups.setPasswordCB2(None)
self._error (e) self._queue.task_done () debugprint ("Thread exiting") self._destroyed = True del self._conn # already destroyed del self._reply_handler del self._error_handler del self._auth_handler del self._queue del self._auth_queue del conn try: cups.setPasswordCB2 (None) except AttributeError: # Requires pycups >= 1.9.47. Fall back to rubbish API. cups.setPasswordCB (lambda x: '') def _auth (self, prompt, conn=None, method=None, resource=None): def prompt_auth (prompt): gtk.gdk.threads_enter () if conn == None: self._auth_handler (prompt, self._conn) else: self._auth_handler (prompt, self._conn, method, resource) gtk.gdk.threads_leave () return False