diff options
author | Wojtek Kosior <koszko@koszko.org> | 2022-08-11 15:47:13 +0200 |
---|---|---|
committer | Wojtek Kosior <koszko@koszko.org> | 2022-08-11 15:47:13 +0200 |
commit | a38d19576c387e505cc468b20ca5b8bcf2fa4759 (patch) | |
tree | a578f4056dfea683d3bb2714ae1620eac576da0e /src/hydrilla/proxy/policies/base.py | |
parent | ad97639bbf982b5b3b2757e75c3f91556e3a8eac (diff) | |
download | haketilo-hydrilla-a38d19576c387e505cc468b20ca5b8bcf2fa4759.tar.gz haketilo-hydrilla-a38d19576c387e505cc468b20ca5b8bcf2fa4759.zip |
move classes/protocols for representing HTTP requests and responses data into a separate file
Diffstat (limited to 'src/hydrilla/proxy/policies/base.py')
-rw-r--r-- | src/hydrilla/proxy/policies/base.py | 87 |
1 files changed, 9 insertions, 78 deletions
diff --git a/src/hydrilla/proxy/policies/base.py b/src/hydrilla/proxy/policies/base.py index 3bde6f2..bb95d29 100644 --- a/src/hydrilla/proxy/policies/base.py +++ b/src/hydrilla/proxy/policies/base.py @@ -31,13 +31,6 @@ # Enable using with Python 3.7. from __future__ import annotations -import sys - -if sys.version_info >= (3, 8): - from typing import Protocol -else: - from typing_extensions import Protocol - import dataclasses as dc import typing as t import enum @@ -46,8 +39,8 @@ from abc import ABC, abstractmethod from immutables import Map -from ...url_patterns import ParsedUrl from .. import state +from .. import http_messages class PolicyPriority(int, enum.Enum): @@ -56,72 +49,10 @@ class PolicyPriority(int, enum.Enum): _TWO = 2 _THREE = 3 -DefaultGetValue = t.TypeVar('DefaultGetValue', object, None) - -class IHeaders(Protocol): - """....""" - def __getitem__(self, key: str) -> str: ... - - def get_all(self, key: str) -> t.Iterable[str]: ... - - def get(self, key: str, default: DefaultGetValue = None) \ - -> t.Union[str, DefaultGetValue]: ... - - def items(self) -> t.Iterable[tuple[str, str]]: ... - -def encode_headers_items(headers: t.Iterable[tuple[str, str]]) \ - -> t.Iterable[tuple[bytes, bytes]]: - """....""" - for name, value in headers: - yield name.encode(), value.encode() - -@dc.dataclass(frozen=True) -class ProducedRequest: - """....""" - url: str - method: str - headers: t.Iterable[tuple[bytes, bytes]] - body: bytes - -@dc.dataclass(frozen=True) -class RequestInfo: - """....""" - url: ParsedUrl - method: str - headers: IHeaders - body: bytes - - def make_produced_request(self) -> ProducedRequest: - """....""" - return ProducedRequest( - url = self.url.orig_url, - method = self.method, - headers = encode_headers_items(self.headers.items()), - body = self.body - ) - -@dc.dataclass(frozen=True) -class ProducedResponse: - """....""" - status_code: int - headers: t.Iterable[tuple[bytes, bytes]] - body: bytes - -@dc.dataclass(frozen=True) -class ResponseInfo: - """....""" - url: ParsedUrl - status_code: int - headers: IHeaders - body: bytes - - def make_produced_response(self) -> ProducedResponse: - """....""" - return ProducedResponse( - status_code = self.status_code, - headers = encode_headers_items(self.headers.items()), - body = self.body - ) +ProducedMessage = t.Union[ + http_messages.ProducedRequest, + http_messages.ProducedResponse +] class Policy(ABC): """....""" @@ -134,13 +65,13 @@ class Policy(ABC): def anticache(self) -> bool: return self.process_request or self.process_response - def consume_request(self, request_info: RequestInfo) \ - -> t.Optional[t.Union[ProducedRequest, ProducedResponse]]: + def consume_request(self, request_info: http_messages.RequestInfo) \ + -> t.Optional[ProducedMessage]: """....""" return None - def consume_response(self, response_info: ResponseInfo) \ - -> t.Optional[ProducedResponse]: + def consume_response(self, response_info: http_messages.ResponseInfo) \ + -> t.Optional[http_messages.ProducedResponse]: """....""" return None |