fast-cache-middleware 0.0.1__py3-none-any.whl → 0.0.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,21 +1,21 @@
1
- import typing as tp
2
-
3
- from starlette.routing import Route
4
-
5
- from .depends import BaseCacheConfigDepends
6
-
7
-
8
- class RouteInfo:
9
- """Route information with cache configuration."""
10
-
11
- def __init__(
12
- self,
13
- route: Route,
14
- cache_config: tp.Optional[BaseCacheConfigDepends] = None,
15
- cache_drop_config: tp.Optional[BaseCacheConfigDepends] = None,
16
- ):
17
- self.route = route
18
- self.cache_config = cache_config
19
- self.cache_drop_config = cache_drop_config
20
- self.path: str = getattr(route, "path")
21
- self.methods: tp.Set[str] = getattr(route, "methods", set())
1
+ import typing as tp
2
+
3
+ from starlette.routing import Route
4
+
5
+ from .depends import BaseCacheConfigDepends
6
+
7
+
8
+ class RouteInfo:
9
+ """Route information with cache configuration."""
10
+
11
+ def __init__(
12
+ self,
13
+ route: Route,
14
+ cache_config: tp.Optional[BaseCacheConfigDepends] = None,
15
+ cache_drop_config: tp.Optional[BaseCacheConfigDepends] = None,
16
+ ):
17
+ self.route = route
18
+ self.cache_config = cache_config
19
+ self.cache_drop_config = cache_drop_config
20
+ self.path: str = getattr(route, "path")
21
+ self.methods: tp.Set[str] = getattr(route, "methods", set())
@@ -1,92 +1,92 @@
1
- import json
2
- import typing as tp
3
-
4
- from starlette.requests import Request
5
- from starlette.responses import Response
6
-
7
- # Define types for metadata and stored response
8
- Metadata: tp.TypeAlias = tp.Dict[str, tp.Any] # todo: make it models
9
- StoredResponse: tp.TypeAlias = tp.Tuple[Response, Request, Metadata]
10
-
11
-
12
- class BaseSerializer:
13
- def dumps(
14
- self, response: Response, request: Request, metadata: Metadata
15
- ) -> tp.Union[str, bytes]:
16
- raise NotImplementedError()
17
-
18
- def loads(
19
- self, data: tp.Union[str, bytes]
20
- ) -> tp.Tuple[Response, Request, Metadata]:
21
- raise NotImplementedError()
22
-
23
- @property
24
- def is_binary(self) -> bool:
25
- raise NotImplementedError()
26
-
27
-
28
- class JSONSerializer(BaseSerializer):
29
- def dumps(self, response: Response, request: Request, metadata: Metadata) -> str:
30
- serialized = {
31
- "response": {
32
- "status_code": response.status_code,
33
- "headers": [[k.decode(), v.decode()] for k, v in response.headers.raw],
34
- "content": (
35
- response.body.decode("utf-8", errors="ignore")
36
- if response.body
37
- else None
38
- ),
39
- },
40
- "request": {
41
- "method": request.method,
42
- "url": str(request.url),
43
- "headers": [[k.decode(), v.decode()] for k, v in request.headers.raw],
44
- },
45
- "metadata": metadata,
46
- }
47
- return json.dumps(serialized)
48
-
49
- def loads(self, data: tp.Union[str, bytes]) -> StoredResponse:
50
- if isinstance(data, bytes):
51
- data = data.decode()
52
-
53
- parsed = json.loads(data)
54
-
55
- # Restore Response
56
- response_data = parsed["response"]
57
- response = Response(
58
- content=(
59
- response_data["content"].encode("utf-8")
60
- if response_data["content"]
61
- else b""
62
- ),
63
- status_code=response_data["status_code"],
64
- headers=dict(response_data["headers"]),
65
- )
66
-
67
- # Restore Request - create mock object for compatibility
68
- request_data = parsed["request"]
69
-
70
- # Create minimal scope for Request
71
- from urllib.parse import urlparse
72
-
73
- parsed_url = urlparse(request_data["url"])
74
- scope = {
75
- "type": "http",
76
- "method": request_data["method"],
77
- "path": parsed_url.path,
78
- "query_string": parsed_url.query.encode() if parsed_url.query else b"",
79
- "headers": [[k.encode(), v.encode()] for k, v in request_data["headers"]],
80
- }
81
-
82
- # Create empty receive function
83
- async def receive():
84
- return {"type": "http.request", "body": b""}
85
-
86
- request = Request(scope, receive)
87
-
88
- return response, request, parsed["metadata"]
89
-
90
- @property
91
- def is_binary(self) -> bool:
92
- return False
1
+ import json
2
+ import typing as tp
3
+
4
+ from starlette.requests import Request
5
+ from starlette.responses import Response
6
+
7
+ # Define types for metadata and stored response
8
+ Metadata: tp.TypeAlias = tp.Dict[str, tp.Any] # todo: make it models
9
+ StoredResponse: tp.TypeAlias = tp.Tuple[Response, Request, Metadata]
10
+
11
+
12
+ class BaseSerializer:
13
+ def dumps(
14
+ self, response: Response, request: Request, metadata: Metadata
15
+ ) -> tp.Union[str, bytes]:
16
+ raise NotImplementedError()
17
+
18
+ def loads(
19
+ self, data: tp.Union[str, bytes]
20
+ ) -> tp.Tuple[Response, Request, Metadata]:
21
+ raise NotImplementedError()
22
+
23
+ @property
24
+ def is_binary(self) -> bool:
25
+ raise NotImplementedError()
26
+
27
+
28
+ class JSONSerializer(BaseSerializer):
29
+ def dumps(self, response: Response, request: Request, metadata: Metadata) -> str:
30
+ serialized = {
31
+ "response": {
32
+ "status_code": response.status_code,
33
+ "headers": [[k.decode(), v.decode()] for k, v in response.headers.raw],
34
+ "content": (
35
+ response.body.decode("utf-8", errors="ignore")
36
+ if response.body
37
+ else None
38
+ ),
39
+ },
40
+ "request": {
41
+ "method": request.method,
42
+ "url": str(request.url),
43
+ "headers": [[k.decode(), v.decode()] for k, v in request.headers.raw],
44
+ },
45
+ "metadata": metadata,
46
+ }
47
+ return json.dumps(serialized)
48
+
49
+ def loads(self, data: tp.Union[str, bytes]) -> StoredResponse:
50
+ if isinstance(data, bytes):
51
+ data = data.decode()
52
+
53
+ parsed = json.loads(data)
54
+
55
+ # Restore Response
56
+ response_data = parsed["response"]
57
+ response = Response(
58
+ content=(
59
+ response_data["content"].encode("utf-8")
60
+ if response_data["content"]
61
+ else b""
62
+ ),
63
+ status_code=response_data["status_code"],
64
+ headers=dict(response_data["headers"]),
65
+ )
66
+
67
+ # Restore Request - create mock object for compatibility
68
+ request_data = parsed["request"]
69
+
70
+ # Create minimal scope for Request
71
+ from urllib.parse import urlparse
72
+
73
+ parsed_url = urlparse(request_data["url"])
74
+ scope = {
75
+ "type": "http",
76
+ "method": request_data["method"],
77
+ "path": parsed_url.path,
78
+ "query_string": parsed_url.query.encode() if parsed_url.query else b"",
79
+ "headers": [[k.encode(), v.encode()] for k, v in request_data["headers"]],
80
+ }
81
+
82
+ # Create empty receive function
83
+ async def receive():
84
+ return {"type": "http.request", "body": b""}
85
+
86
+ request = Request(scope, receive)
87
+
88
+ return response, request, parsed["metadata"]
89
+
90
+ @property
91
+ def is_binary(self) -> bool:
92
+ return False