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
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