from abc import ABC from typing import Dict from urllib.parse import SplitResult class Message(ABC): version: str headers: Dict[str, str] raw: str body: bytes def __init__(self, version: str, headers: Dict[str, str], raw=None, body: bytes = None): self.version = version self.headers = headers self.raw = raw self.body = body class ResponseMessage(Message): status: int msg: str def __init__(self, version: str, status: int, msg: str, headers: Dict[str, str], raw=None, body: bytes = None): super().__init__(version, headers, raw, body) self.status = status self.msg = msg class RequestMessage(Message): method: str target: SplitResult def __init__(self, version: str, method: str, target, headers: Dict[str, str], raw=None, body: bytes = None): super().__init__(version, headers, raw, body) self.method = method self.target = target