From 6b80e1a383e0b6a18f92f4bea9d90bc7e34ae256 Mon Sep 17 00:00:00 2001 From: sHa Date: Fri, 22 Mar 2024 00:49:17 +0200 Subject: [PATCH] Add schemas --- manager/history.py | 58 ++++++++++++++++++++++++++++++++++++++++++ schema/answer.py | 7 +++++ schema/methods.py | 11 ++++++++ schema/request_data.py | 10 ++++++++ schema/status.py | 7 +++++ 5 files changed, 93 insertions(+) create mode 100644 manager/history.py create mode 100644 schema/answer.py create mode 100644 schema/methods.py create mode 100644 schema/request_data.py create mode 100644 schema/status.py diff --git a/manager/history.py b/manager/history.py new file mode 100644 index 0000000..c8f6037 --- /dev/null +++ b/manager/history.py @@ -0,0 +1,58 @@ +import json +import os +from schema.methods import Methods + +class History: + HISTORY_LIMIT = 10 + HISTORY_STORAGE = "storage" + + def __init__(self, namespace: str = "requests") -> None: + self.namespace = namespace + self.filename = f"{self.HISTORY_STORAGE}/{namespace}.json" + self.data: list = [] + self.check_directory() + + def check_directory(self) -> None: + if not os.path.exists(self.HISTORY_STORAGE): + os.makedirs(self.HISTORY_STORAGE) + + def load(self) -> None: + try: + with open(self.filename, "r") as f: + self.data = json.load(f) + except (FileNotFoundError, json.JSONDecodeError): + self.data = [] + + def save(self) -> None: + with open(self.filename, "w") as f: + json.dump(self.data, f, indent=4) + + def clear(self) -> None: + self.data = [] + self.save() + + def all(self) -> list | None: + self.load() + if len(self.data) == 0: + return None + for item in self.data: + if "method" in item: + item["method"] = Methods(item["method"]) + return self.data + + def get(self, index: int) -> dict | None: + self.all() + + return self.data[index] if index < len(self.data) else None + + def last(self) -> dict | None: + self.all() + + return self.data[-1] if len(self.data) > 0 else None + + def add(self, request_data: dict) -> None: + self.load() + self.data.append(request_data) + if len(self.data) > self.HISTORY_LIMIT: + self.data.pop(0) + self.save() diff --git a/schema/answer.py b/schema/answer.py new file mode 100644 index 0000000..5dd4704 --- /dev/null +++ b/schema/answer.py @@ -0,0 +1,7 @@ +from pydantic import BaseModel +from schema.status import Status + + +class Answer(BaseModel): + status: Status + message: str diff --git a/schema/methods.py b/schema/methods.py new file mode 100644 index 0000000..2a4e69f --- /dev/null +++ b/schema/methods.py @@ -0,0 +1,11 @@ +from enum import Enum + + +class Methods(str, Enum): + GET = "GET" + POST = "POST" + PUT = "PUT" + DELETE = "DELETE" + PATCH = "PATCH" + OPTIONS = "OPTIONS" + HEAD = "HEAD" diff --git a/schema/request_data.py b/schema/request_data.py new file mode 100644 index 0000000..0a0e459 --- /dev/null +++ b/schema/request_data.py @@ -0,0 +1,10 @@ +from pydantic import BaseModel +from schema.methods import Methods + + +class RequestData(BaseModel): + data: dict + method: Methods = Methods.GET + url: str + headers: dict + time: str diff --git a/schema/status.py b/schema/status.py new file mode 100644 index 0000000..2267438 --- /dev/null +++ b/schema/status.py @@ -0,0 +1,7 @@ +from enum import Enum + + +class Status(str, Enum): + ok = "ok" + success = "success" + error = "error"