From bee6fb40a3d2fcef8214e818603138d1cf364061 Mon Sep 17 00:00:00 2001 From: Hazel Noack Date: Wed, 11 Jun 2025 12:44:57 +0200 Subject: [PATCH] implemented cache --- README.md | 4 +++- python_requests/__main__.py | 2 +- python_requests/connections.py | 43 +++++++++++++++++++++++++++++----- 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 9169bfe..243cfc0 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,12 @@ A Python library for simplified HTTP requests, featuring rate limiting, browser-like headers, and automatic retries. Built on the official `requests` library for reliability. +## Features + ## ToDo - [ ] basic structure -- [ ] caching +- [-] caching - [ ] add cloudscraper ## License diff --git a/python_requests/__main__.py b/python_requests/__main__.py index be9a0f0..b70314a 100644 --- a/python_requests/__main__.py +++ b/python_requests/__main__.py @@ -6,7 +6,7 @@ from . import cache def main(): - c = Connection() + c = Connection(cache_enable=False) c.generate_headers() print(c.session.headers) diff --git a/python_requests/connections.py b/python_requests/connections.py index 785710d..0c0051b 100644 --- a/python_requests/connections.py +++ b/python_requests/connections.py @@ -1,14 +1,23 @@ from __future__ import annotations from typing import Optional import requests +from datetime import timedelta from urllib.parse import urlparse, urlunsplit, ParseResult from . import cache class Connection: - def __init__(self, session: Optional[requests.Session] = None) -> None: + def __init__( + self, + session: Optional[requests.Session] = None, + cache_enable: bool = True, + cache_expires_after: Optional[timedelta] = None + ) -> None: self.session = session if session is not None else requests.Session() + self.cache_enable = cache_enable + self.cache_expires_after = cache_expires_after if cache_expires_after is not None else timedelta(hours=1) + def generate_headers(self, referer: Optional[str] = None): headers = { "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:139.0) Gecko/20100101 Firefox/139.0", @@ -21,10 +30,32 @@ class Connection: self.session.headers.update(**headers) - def get(self, url: str): - if cache.has_cache(url): + def send_request(self, request: requests.Request) -> requests.Response: + url = request.url + if url is None: + raise ValueError("can't send a request without url") + if self.cache_enable and cache.has_cache(url): return cache.get_cache(url) + + response = self.session.send(request.prepare()) + if self.cache_enable: + cache.write_cache(url, response) + return response - resp = self.session.get(url) - cache.write_cache(url, resp) - return resp + + def get(self, url: str, headers: Optional[dict] = None, **kwargs) -> requests.Response: + return self.send_request(requests.Request( + 'GET', + url=url, + headers=headers, + **kwargs + )) + + def post(self, url: str, headers: Optional[dict] = None, json: Optional[dict] = None, **kwargs) -> requests.Response: + return self.send_request(requests.Request( + 'POST', + url=url, + headers=headers, + json=json, + **kwargs, + ))