Example #1
0
 def _checkBandwidth( self, request ):
     
     if not self._service.BandwidthOK():
         
         raise HydrusExceptions.BandwidthException( 'This service has run out of bandwidth. Please try again later.' )
         
     
     if not HG.server_controller.ServerBandwidthOK():
         
         raise HydrusExceptions.BandwidthException( 'This server has run out of bandwidth. Please try again later.' )
    def _checkService(self, request):

        HydrusServerResources.HydrusResource._checkService(self, request)

        if not self._service.BandwidthOK():

            raise HydrusExceptions.BandwidthException(
                'This service has run out of bandwidth. Please try again later.'
            )
Example #3
0
    def _DealWithResponse(self, method, response, parsed_response,
                          size_of_response):

        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 == 509:
                raise HydrusExceptions.BandwidthException(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)