Beispiel #1
0
 def from_serializable(self, data: Any) -> Response:
     response = Response()
     for key in self.__response_keys:
         setattr(response, key, data[key])
     for key in self.__response_keys_special:
         if key == "raw":
             response.raw = BytesIO(data[key])
         if key == "headers":
             response.headers = CaseInsensitiveDict(data[key])
         if key == "elapsed":
             response.elapsed = datetime.timedelta(seconds=data[key])
         if key == "_content":
             encoding = response.encoding or self.__implicit_encoding
             indicator = data[self.__store_indicator]
             if indicator == 0:
                 what_store = data[key]
             elif indicator == 1:
                 what_store = data[key].encode(encoding)
             elif indicator == 2:
                 what_store = json.dumps(data[key])
                 what_store = what_store.encode(encoding)
             response._content = what_store  # type: ignore
         if key == "_next":
             setattr(response, "_next", data[key])
     return response
Beispiel #2
0
    def get(self, uri, headers={}, timeout=None):

        observation_datetime = self.conn.hget(uri, "observation_datetime")

        module_logger.debug("received headers of {}".format(headers))

        if observation_datetime is not None:

            odt = datetime.datetime.strptime(observation_datetime.decode('utf-8'), "%Y-%m-%dT%H:%M:%S")
            module_logger.debug("expiring URI if it more than {} seconds old".format(self.expiration_delta))

            age = (datetime.datetime.utcnow() - odt).seconds
            module_logger.debug("URI is {} - {} = {} seconds old".format(datetime.datetime.utcnow(), odt, age))

            if age > self.expiration_delta:
                self.purgeuri(uri)

        if self.conn.hget(uri, "response_status") is None:
            self.saveuri(uri, headers=headers)

        req_headers = CaseInsensitiveDict(json.loads(self.conn.hget(uri, "request_headers")))
        req_method = self.conn.hget(uri, "request_method")

        module_logger.debug("generating request object for URI {} with headers {}".format(uri, req_headers))
        request = requests.Request(req_method, uri, headers=req_headers)
        request.prepare()

        response = Response()
        response.request = request
        response.status_code = int(self.conn.hget(uri, "response_status"))
        response.reason = self.conn.hget(uri, "response_reason")
        response.elapsed = datetime.timedelta(microseconds=int(self.conn.hget(uri, "response_elapsed")))
        
        if type(self.conn.hget(uri, "response_encoding")) is bytes:
            response.encoding = self.conn.hget(uri, "response_encoding").decode('utf-8')
        else:
            response.encoding = self.conn.hget(uri, "response_encoding")

        module_logger.debug("encoding set to {} for URI {}".format(response.encoding, uri))
        response.headers = CaseInsensitiveDict(json.loads(self.conn.hget(uri, "response_headers")))
        
        module_logger.debug("response headers pulled from caceh for URI {}: {}".format(
            uri, response.headers
        ))

        response._content = self.conn.hget(uri, "response_content")
        response.url = uri

        return response