def GetIdentityAndName(self, service_key, session_key): with self._lock: if session_key not in self._service_keys_to_sessions[service_key]: raise HydrusExceptions.SessionException( 'Did not find that session!') else: (account, name, expires ) = self._service_keys_to_sessions[service_key][session_key] now = HC.GetNow() if now > expires: del self._service_keys_to_sessions[service_key][ session_key] raise HydrusExceptions.SessionException('Session expired!') return (account.GetAccountKey(), name)
def GetAccount( self, service_key, session_key ): with self._lock: service_sessions = self._service_keys_to_sessions[ service_key ] if session_key in service_sessions: ( account, expires ) = service_sessions[ session_key ] if HydrusData.TimeHasPassed( expires ): del service_sessions[ session_key ] else: return account raise HydrusExceptions.SessionException( 'Did not find that session! Try again!' )
def GetAccount(self, service_key, session_key): with self._lock: service_sessions = self._service_keys_to_sessions[service_key] if session_key in service_sessions: (account, expires) = service_sessions[session_key] now = HC.GetNow() if now > expires: del service_sessions[session_key] else: return account raise HydrusExceptions.SessionException()
def GetIdentityAndName( self, service_key, session_key ): with self._lock: if session_key not in self._service_keys_to_sessions[ service_key ]: raise HydrusExceptions.SessionException( 'Did not find that session!' ) else: ( account, name, expires ) = self._service_keys_to_sessions[ service_key ][ session_key ] if HydrusData.TimeHasPassed( expires ): del self._service_keys_to_sessions[ service_key ][ session_key ] raise HydrusExceptions.SessionException( 'Session expired! Try again!' ) return ( account.GetAccountKey(), name )
def Request( self, method, path_and_query, request_headers, body, report_hooks = None, temp_path = None ): if report_hooks is None: report_hooks = [] if method == HC.GET: method_string = 'GET' elif method == HC.POST: method_string = 'POST' if 'User-Agent' not in request_headers: request_headers[ 'User-Agent' ] = 'hydrus/' + str( HC.NETWORK_VERSION ) path_and_query = HydrusData.ToByteString( path_and_query ) request_headers = { str( k ) : str( v ) for ( k, v ) in request_headers.items() } response = self._GetResponse( method_string, path_and_query, request_headers, body ) ( parsed_response, size_of_response ) = self._ReadResponse( response, report_hooks, temp_path ) response_headers = { k : v for ( k, v ) in response.getheaders() if k != 'set-cookie' } cookies = self._ParseCookies( response.getheader( 'set-cookie' ) ) self._last_request_time = HydrusData.GetNow() if response.status == 200: return ( parsed_response, None, size_of_response, response_headers, cookies ) elif response.status in ( 301, 302, 303, 307 ): location = response.getheader( 'Location' ) if location is None: raise Exception( 'Received an invalid redirection response.' ) else: url = location if ', ' in url: url = url.split( ', ' )[0] elif ' ' in url: # some booru is giving daft redirect responses HydrusData.Print( url ) url = urllib.quote( HydrusData.ToByteString( url ), safe = '/?=&' ) HydrusData.Print( url ) if not url.startswith( self._scheme ): # assume it is like 'index.php' or '/index.php', rather than 'http://blah.com/index.php' if url.startswith( '/' ): slash_sep = '' else: slash_sep = '/' url = self._scheme + '://' + self._host + slash_sep + url if response.status in ( 301, 307 ): # 301: moved permanently, repeat request # 307: moved temporarily, repeat request redirect_info = ( method, url ) elif response.status in ( 302, 303 ): # 302: moved temporarily, repeat request (except everyone treats it like 303 for no good f*****g reason) # 303: thanks, now go here with GET redirect_info = ( HC.GET, url ) return ( parsed_response, redirect_info, size_of_response, response_headers, cookies ) elif response.status == 304: raise HydrusExceptions.NotModifiedException() else: if response.status == 401: raise HydrusExceptions.PermissionException( parsed_response ) elif response.status == 403: raise HydrusExceptions.ForbiddenException( parsed_response ) elif response.status == 404: raise HydrusExceptions.NotFoundException( parsed_response ) elif response.status == 419: raise HydrusExceptions.SessionException( parsed_response ) elif response.status == 426: raise HydrusExceptions.NetworkVersionException( parsed_response ) elif response.status in ( 500, 501, 502, 503 ): server_header = response.getheader( 'Server' ) if server_header is not None and 'hydrus' in server_header: hydrus_service = True else: hydrus_service = False if response.status == 503 and hydrus_service: raise HydrusExceptions.ServerBusyException( 'Server is busy, please try again later.' ) else: raise Exception( parsed_response ) else: raise Exception( parsed_response )