django-bolt 0.2.3__cp310-abi3-win_amd64.whl → 0.2.4__cp310-abi3-win_amd64.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.
Potentially problematic release.
This version of django-bolt might be problematic. Click here for more details.
- django_bolt/__init__.py +2 -0
- django_bolt/_core.pyd +0 -0
- django_bolt/api.py +3 -1
- django_bolt/auth/jwt_utils.py +6 -3
- django_bolt/dependencies.py +4 -4
- django_bolt/management/commands/runbolt.py +11 -8
- django_bolt/types.py +249 -0
- {django_bolt-0.2.3.dist-info → django_bolt-0.2.4.dist-info}/METADATA +3 -3
- {django_bolt-0.2.3.dist-info → django_bolt-0.2.4.dist-info}/RECORD +11 -10
- {django_bolt-0.2.3.dist-info → django_bolt-0.2.4.dist-info}/WHEEL +0 -0
- {django_bolt-0.2.3.dist-info → django_bolt-0.2.4.dist-info}/entry_points.txt +0 -0
django_bolt/__init__.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from .api import BoltAPI
|
|
2
2
|
from .responses import Response, JSON, StreamingResponse
|
|
3
3
|
from .compression import CompressionConfig
|
|
4
|
+
from .types import Request
|
|
4
5
|
|
|
5
6
|
# Views module
|
|
6
7
|
from .views import (
|
|
@@ -80,6 +81,7 @@ from .openapi import (
|
|
|
80
81
|
|
|
81
82
|
__all__ = [
|
|
82
83
|
"BoltAPI",
|
|
84
|
+
"Request",
|
|
83
85
|
"Response",
|
|
84
86
|
"JSON",
|
|
85
87
|
"StreamingResponse",
|
django_bolt/_core.pyd
CHANGED
|
Binary file
|
django_bolt/api.py
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
import inspect
|
|
2
4
|
import msgspec
|
|
3
5
|
import re
|
|
@@ -23,8 +25,8 @@ from .request_parsing import parse_form_data
|
|
|
23
25
|
from .dependencies import resolve_dependency
|
|
24
26
|
from .serialization import serialize_response
|
|
25
27
|
from .middleware.compiler import compile_middleware_meta
|
|
28
|
+
from .types import Request
|
|
26
29
|
|
|
27
|
-
Request = Dict[str, Any]
|
|
28
30
|
Response = Tuple[int, List[Tuple[str, str]], bytes]
|
|
29
31
|
|
|
30
32
|
# Global registry for BoltAPI instances (used by autodiscovery)
|
django_bolt/auth/jwt_utils.py
CHANGED
|
@@ -4,10 +4,13 @@ JWT utility functions for Django-Bolt.
|
|
|
4
4
|
Provides helper functions to create JWT tokens for Django users and
|
|
5
5
|
extract user information from request context.
|
|
6
6
|
"""
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
7
9
|
import time
|
|
8
10
|
import jwt
|
|
9
11
|
from typing import Any, Dict, Optional
|
|
10
12
|
from django.contrib.auth import get_user_model
|
|
13
|
+
from django_bolt.types import Request
|
|
11
14
|
|
|
12
15
|
|
|
13
16
|
def create_jwt_for_user(
|
|
@@ -95,7 +98,7 @@ def create_jwt_for_user(
|
|
|
95
98
|
return jwt.encode(payload, secret, algorithm=algorithm)
|
|
96
99
|
|
|
97
100
|
|
|
98
|
-
async def get_current_user(request:
|
|
101
|
+
async def get_current_user(request: Request):
|
|
99
102
|
"""
|
|
100
103
|
Dependency function to extract and fetch Django User from request context.
|
|
101
104
|
|
|
@@ -147,7 +150,7 @@ async def get_current_user(request: Dict[str, Any]):
|
|
|
147
150
|
return None
|
|
148
151
|
|
|
149
152
|
|
|
150
|
-
def extract_user_id_from_context(request:
|
|
153
|
+
def extract_user_id_from_context(request: Request) -> Optional[str]:
|
|
151
154
|
"""
|
|
152
155
|
Extract user_id from request context.
|
|
153
156
|
|
|
@@ -173,7 +176,7 @@ def extract_user_id_from_context(request: Dict[str, Any]) -> Optional[str]:
|
|
|
173
176
|
return context.get("user_id")
|
|
174
177
|
|
|
175
178
|
|
|
176
|
-
def get_auth_context(request:
|
|
179
|
+
def get_auth_context(request: Request) -> Dict[str, Any]:
|
|
177
180
|
"""
|
|
178
181
|
Get the full authentication context from request.
|
|
179
182
|
|
django_bolt/dependencies.py
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"""Dependency injection utilities."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
2
4
|
import inspect
|
|
3
|
-
from typing import Any, Callable, Dict, List
|
|
5
|
+
from typing import Any, Callable, Dict, List
|
|
4
6
|
from .params import Depends as DependsMarker
|
|
5
7
|
from .binding import convert_primitive
|
|
6
|
-
|
|
7
|
-
if TYPE_CHECKING:
|
|
8
|
-
from .typing import FieldDefinition
|
|
8
|
+
from .typing import FieldDefinition
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
async def resolve_dependency(
|
|
@@ -50,9 +50,6 @@ class Command(BaseCommand):
|
|
|
50
50
|
)
|
|
51
51
|
options['processes'] = 1
|
|
52
52
|
|
|
53
|
-
self.stdout.write(
|
|
54
|
-
self.style.SUCCESS("[django-bolt] 🔥 Development mode enabled (auto-reload on file changes)")
|
|
55
|
-
)
|
|
56
53
|
self.run_with_autoreload(options)
|
|
57
54
|
else:
|
|
58
55
|
# Production mode (current logic)
|
|
@@ -75,11 +72,18 @@ class Command(BaseCommand):
|
|
|
75
72
|
import sys
|
|
76
73
|
sys.exit(1)
|
|
77
74
|
|
|
75
|
+
# Print dev mode message only once (in the main reloader process)
|
|
76
|
+
import os
|
|
77
|
+
if os.environ.get('RUN_MAIN') == 'true':
|
|
78
|
+
self.stdout.write(
|
|
79
|
+
self.style.SUCCESS("[django-bolt] 🔥 Development mode enabled (auto-reload on file changes)")
|
|
80
|
+
)
|
|
81
|
+
|
|
78
82
|
# Use Django's autoreload system which is optimized
|
|
79
83
|
# It only restarts the Python interpreter when necessary
|
|
80
84
|
# and reuses the same process for faster reloads
|
|
81
85
|
def run_server():
|
|
82
|
-
self.start_single_process(options)
|
|
86
|
+
self.start_single_process(options, dev_mode=True)
|
|
83
87
|
|
|
84
88
|
autoreload.run_with_reloader(run_server)
|
|
85
89
|
|
|
@@ -133,7 +137,7 @@ class Command(BaseCommand):
|
|
|
133
137
|
except KeyboardInterrupt:
|
|
134
138
|
pass
|
|
135
139
|
|
|
136
|
-
def start_single_process(self, options, process_id=None):
|
|
140
|
+
def start_single_process(self, options, process_id=None, dev_mode=False):
|
|
137
141
|
"""Start a single process server"""
|
|
138
142
|
# Setup Django logging once at server startup (one-shot, respects existing LOGGING)
|
|
139
143
|
from django_bolt.logging.config import setup_django_logging
|
|
@@ -178,9 +182,9 @@ class Command(BaseCommand):
|
|
|
178
182
|
merged_api._register_openapi_routes()
|
|
179
183
|
|
|
180
184
|
if process_id is not None:
|
|
181
|
-
self.stdout.write(f"[django-bolt] Process {process_id}: OpenAPI docs enabled at {openapi_config.path}")
|
|
185
|
+
self.stdout.write(f"[django-bolt] Process {process_id}: OpenAPI docs enabled at http://{options['host']}:{options['port']}{openapi_config.path}")
|
|
182
186
|
else:
|
|
183
|
-
self.stdout.write(self.style.SUCCESS(f"[django-bolt] OpenAPI docs enabled at {openapi_config.path}"))
|
|
187
|
+
self.stdout.write(self.style.SUCCESS(f"[django-bolt] OpenAPI docs enabled at http://{options['host']}:{options['port']}{openapi_config.path}"))
|
|
184
188
|
|
|
185
189
|
# Register Django admin routes if not disabled
|
|
186
190
|
# Admin is controlled solely by --no-admin command-line flag
|
|
@@ -242,7 +246,6 @@ class Command(BaseCommand):
|
|
|
242
246
|
else:
|
|
243
247
|
self.stdout.write(self.style.SUCCESS(f"[django-bolt] Starting server on http://{options['host']}:{options['port']}"))
|
|
244
248
|
self.stdout.write(f"[django-bolt] Workers: {options['workers']}, Processes: {options['processes']}")
|
|
245
|
-
self.stdout.write(self.style.SUCCESS(f"[django-bolt] OpenAPI docs enabled at http://{options['host']}:{options['port']}/docs/"))
|
|
246
249
|
# Set environment variable for Rust to read worker count
|
|
247
250
|
import os
|
|
248
251
|
os.environ['DJANGO_BOLT_WORKERS'] = str(options['workers'])
|
django_bolt/types.py
ADDED
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Type definitions for Django-Bolt.
|
|
3
|
+
|
|
4
|
+
This module provides type hints and protocols for Django-Bolt objects,
|
|
5
|
+
enabling full IDE autocomplete and static type checking.
|
|
6
|
+
"""
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from typing import Protocol, Any, Dict, Optional, overload, runtime_checkable
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@runtime_checkable
|
|
13
|
+
class Request(Protocol):
|
|
14
|
+
"""
|
|
15
|
+
Django-Bolt request object (Rust-backed PyRequest).
|
|
16
|
+
|
|
17
|
+
Provides dict-like access to HTTP request data with full type safety.
|
|
18
|
+
This is a Protocol that matches the Rust PyRequest implementation,
|
|
19
|
+
enabling proper type hints and IDE autocomplete.
|
|
20
|
+
|
|
21
|
+
Example:
|
|
22
|
+
```python
|
|
23
|
+
from django_bolt import BoltAPI, Request
|
|
24
|
+
import msgspec
|
|
25
|
+
|
|
26
|
+
class UserCreate(msgspec.Struct):
|
|
27
|
+
name: str
|
|
28
|
+
email: str
|
|
29
|
+
|
|
30
|
+
api = BoltAPI()
|
|
31
|
+
|
|
32
|
+
# With request object and validated body
|
|
33
|
+
@api.post("/users")
|
|
34
|
+
async def create_user(request: Request, user: UserCreate):
|
|
35
|
+
# Type-safe access to request data
|
|
36
|
+
method = request.method # str
|
|
37
|
+
auth = request.get("auth") # Optional[Dict[str, Any]]
|
|
38
|
+
headers = request["headers"] # Dict[str, str]
|
|
39
|
+
|
|
40
|
+
# Validated body with full type safety
|
|
41
|
+
name = user.name # str
|
|
42
|
+
email = user.email # str
|
|
43
|
+
|
|
44
|
+
return {"id": 1, "name": name}
|
|
45
|
+
|
|
46
|
+
# With just request object
|
|
47
|
+
@api.get("/users/{user_id}")
|
|
48
|
+
async def get_user(request: Request, user_id: int):
|
|
49
|
+
auth = request.get("auth", {})
|
|
50
|
+
user_id = auth.get("user_id")
|
|
51
|
+
return {"user_id": user_id}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Available Keys (for .get() and [] access):
|
|
55
|
+
- "method": HTTP method (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS)
|
|
56
|
+
- "path": Request path (/users/123)
|
|
57
|
+
- "body": Raw request body (bytes)
|
|
58
|
+
- "params": Path parameters from URL pattern (Dict[str, str])
|
|
59
|
+
- "query": Query string parameters (Dict[str, str])
|
|
60
|
+
- "headers": HTTP headers (Dict[str, str])
|
|
61
|
+
- "cookies": Parsed cookies (Dict[str, str])
|
|
62
|
+
- "auth": Authentication context (Optional[Dict[str, Any]])
|
|
63
|
+
- "context": Same as "auth" (alias)
|
|
64
|
+
|
|
65
|
+
Auth Context Structure (when authentication is present):
|
|
66
|
+
```python
|
|
67
|
+
{
|
|
68
|
+
"user_id": "123", # User identifier (str)
|
|
69
|
+
"is_staff": False, # Staff status (bool)
|
|
70
|
+
"is_admin": False, # Admin/superuser status (bool)
|
|
71
|
+
"auth_backend": "jwt", # Backend used: jwt, api_key, etc.
|
|
72
|
+
"permissions": ["read", "write"], # User permissions (List[str], optional)
|
|
73
|
+
"auth_claims": { # Full JWT claims (optional, JWT only)
|
|
74
|
+
"sub": "123",
|
|
75
|
+
"exp": 1234567890,
|
|
76
|
+
"iat": 1234567800,
|
|
77
|
+
# ... additional claims
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
"""
|
|
82
|
+
|
|
83
|
+
# Properties (from Rust #[getter])
|
|
84
|
+
@property
|
|
85
|
+
def method(self) -> str:
|
|
86
|
+
"""
|
|
87
|
+
HTTP method.
|
|
88
|
+
|
|
89
|
+
Returns:
|
|
90
|
+
HTTP method string: "GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"
|
|
91
|
+
|
|
92
|
+
Example:
|
|
93
|
+
```python
|
|
94
|
+
if request.method == "POST":
|
|
95
|
+
# Handle POST request
|
|
96
|
+
pass
|
|
97
|
+
```
|
|
98
|
+
"""
|
|
99
|
+
...
|
|
100
|
+
|
|
101
|
+
@property
|
|
102
|
+
def path(self) -> str:
|
|
103
|
+
"""
|
|
104
|
+
Request path.
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
Request path string (e.g., "/users/123")
|
|
108
|
+
|
|
109
|
+
Example:
|
|
110
|
+
```python
|
|
111
|
+
path = request.path # "/api/users/123"
|
|
112
|
+
```
|
|
113
|
+
"""
|
|
114
|
+
...
|
|
115
|
+
|
|
116
|
+
@property
|
|
117
|
+
def body(self) -> bytes:
|
|
118
|
+
"""
|
|
119
|
+
Raw request body.
|
|
120
|
+
|
|
121
|
+
Returns:
|
|
122
|
+
Request body as bytes
|
|
123
|
+
|
|
124
|
+
Note:
|
|
125
|
+
For JSON requests, the framework automatically decodes this
|
|
126
|
+
when you use msgspec.Struct parameter types. You typically
|
|
127
|
+
don't need to access this directly.
|
|
128
|
+
|
|
129
|
+
Example:
|
|
130
|
+
```python
|
|
131
|
+
raw_body = request.body
|
|
132
|
+
# b'{"name": "John", "email": "john@example.com"}'
|
|
133
|
+
```
|
|
134
|
+
"""
|
|
135
|
+
...
|
|
136
|
+
|
|
137
|
+
@property
|
|
138
|
+
def context(self) -> Optional[Dict[str, Any]]:
|
|
139
|
+
"""
|
|
140
|
+
Authentication/middleware context.
|
|
141
|
+
|
|
142
|
+
Returns:
|
|
143
|
+
Context dictionary when authentication is present, None otherwise.
|
|
144
|
+
|
|
145
|
+
When present, contains:
|
|
146
|
+
- user_id (str): User identifier
|
|
147
|
+
- is_staff (bool): Staff status
|
|
148
|
+
- is_admin (bool): Admin/superuser status
|
|
149
|
+
- auth_backend (str): Backend used (jwt, api_key, etc.)
|
|
150
|
+
- permissions (List[str]): User permissions (if available)
|
|
151
|
+
- auth_claims (Dict): Full JWT claims (if JWT authentication)
|
|
152
|
+
|
|
153
|
+
Example:
|
|
154
|
+
```python
|
|
155
|
+
ctx = request.context
|
|
156
|
+
if ctx:
|
|
157
|
+
user_id = ctx.get("user_id")
|
|
158
|
+
is_admin = ctx.get("is_admin", False)
|
|
159
|
+
```
|
|
160
|
+
"""
|
|
161
|
+
...
|
|
162
|
+
|
|
163
|
+
# Methods
|
|
164
|
+
@overload
|
|
165
|
+
def get(self, key: str) -> Any:
|
|
166
|
+
"""Get request attribute (returns None if not found)."""
|
|
167
|
+
...
|
|
168
|
+
|
|
169
|
+
@overload
|
|
170
|
+
def get(self, key: str, default: Any) -> Any:
|
|
171
|
+
"""Get request attribute with default value."""
|
|
172
|
+
...
|
|
173
|
+
|
|
174
|
+
def get(self, key: str, default: Any = None) -> Any:
|
|
175
|
+
"""
|
|
176
|
+
Get request attribute with optional default value.
|
|
177
|
+
|
|
178
|
+
This method provides dict-like .get() access to request data,
|
|
179
|
+
with support for default values when keys don't exist.
|
|
180
|
+
|
|
181
|
+
Args:
|
|
182
|
+
key: Attribute name to retrieve. Available keys:
|
|
183
|
+
- "method": HTTP method (str)
|
|
184
|
+
- "path": Request path (str)
|
|
185
|
+
- "body": Raw body (bytes)
|
|
186
|
+
- "params": Path parameters (Dict[str, str])
|
|
187
|
+
- "query": Query parameters (Dict[str, str])
|
|
188
|
+
- "headers": HTTP headers (Dict[str, str])
|
|
189
|
+
- "cookies": Parsed cookies (Dict[str, str])
|
|
190
|
+
- "auth": Auth context (Optional[Dict[str, Any]])
|
|
191
|
+
- "context": Same as "auth"
|
|
192
|
+
default: Default value to return if key doesn't exist or is None.
|
|
193
|
+
Defaults to None.
|
|
194
|
+
|
|
195
|
+
Returns:
|
|
196
|
+
Attribute value if present, otherwise default value.
|
|
197
|
+
|
|
198
|
+
Special Behavior:
|
|
199
|
+
For "auth" and "context" keys, if authentication is not configured
|
|
200
|
+
or no credentials provided, returns the default value (not an empty dict).
|
|
201
|
+
|
|
202
|
+
Example:
|
|
203
|
+
```python
|
|
204
|
+
# Get with None as default
|
|
205
|
+
auth = request.get("auth") # None if no auth
|
|
206
|
+
|
|
207
|
+
# Get with custom default
|
|
208
|
+
auth = request.get("auth", {}) # {} if no auth
|
|
209
|
+
|
|
210
|
+
# Get method (always present)
|
|
211
|
+
method = request.get("method") # "GET", "POST", etc.
|
|
212
|
+
|
|
213
|
+
# Get query params
|
|
214
|
+
query = request.get("query", {})
|
|
215
|
+
page = query.get("page", "1")
|
|
216
|
+
```
|
|
217
|
+
"""
|
|
218
|
+
...
|
|
219
|
+
|
|
220
|
+
def __getitem__(self, key: str) -> Any:
|
|
221
|
+
"""
|
|
222
|
+
Dict-style access to request attributes.
|
|
223
|
+
|
|
224
|
+
Args:
|
|
225
|
+
key: Attribute name (same keys as .get())
|
|
226
|
+
|
|
227
|
+
Returns:
|
|
228
|
+
Attribute value
|
|
229
|
+
|
|
230
|
+
Raises:
|
|
231
|
+
KeyError: If key doesn't exist
|
|
232
|
+
|
|
233
|
+
Example:
|
|
234
|
+
```python
|
|
235
|
+
method = request["method"] # "GET"
|
|
236
|
+
headers = request["headers"] # Dict[str, str]
|
|
237
|
+
params = request["params"] # Dict[str, str]
|
|
238
|
+
|
|
239
|
+
# Raises KeyError if no auth
|
|
240
|
+
context = request["context"]
|
|
241
|
+
|
|
242
|
+
# Safe alternative with .get()
|
|
243
|
+
context = request.get("context", {})
|
|
244
|
+
```
|
|
245
|
+
"""
|
|
246
|
+
...
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
__all__ = ["Request"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: django-bolt
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.4
|
|
4
4
|
Classifier: Development Status :: 3 - Alpha
|
|
5
5
|
Classifier: Intended Audience :: Developers
|
|
6
6
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -536,11 +536,11 @@ async def stream_json():
|
|
|
536
536
|
|
|
537
537
|
```bash
|
|
538
538
|
# Clone repository
|
|
539
|
-
git clone https://github.com/
|
|
539
|
+
git clone https://github.com/FarhanAliRaza/django-bolt.git
|
|
540
540
|
cd django-bolt
|
|
541
541
|
|
|
542
542
|
# Install dependencies
|
|
543
|
-
|
|
543
|
+
uv sync
|
|
544
544
|
|
|
545
545
|
# Build Rust extension
|
|
546
546
|
make build # or: maturin develop --release
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
django_bolt-0.2.
|
|
2
|
-
django_bolt-0.2.
|
|
3
|
-
django_bolt-0.2.
|
|
4
|
-
django_bolt/__init__.py,sha256=
|
|
5
|
-
django_bolt/_core.pyd,sha256=
|
|
1
|
+
django_bolt-0.2.4.dist-info/METADATA,sha256=WcTs8UntAqUHJrapMRCiNUgbtB646anFRRvaGl-JMrE,21980
|
|
2
|
+
django_bolt-0.2.4.dist-info/WHEEL,sha256=4EDp_7DiFfWl1yYv5M4wSosAn5L_xgD1dyrQxQxfCx8,95
|
|
3
|
+
django_bolt-0.2.4.dist-info/entry_points.txt,sha256=cUEGAdiOY6BryNhsgOS_50AONPPHajI3yvhqr56ZiaU,51
|
|
4
|
+
django_bolt/__init__.py,sha256=BerkkdUuHfxTJUKTFoXxfjYr6OFCb3MH88NIBEjphm4,3183
|
|
5
|
+
django_bolt/_core.pyd,sha256=XMyXq12lOXHu6fKlJKSMmjm8ITa0ytvn3buTj3uDXHE,8955392
|
|
6
6
|
django_bolt/_json.py,sha256=oGxi29DHB8UYvbqjtqtrP6gThk7Qonlw333c4_cTr6s,4917
|
|
7
7
|
django_bolt/admin/__init__.py,sha256=BNN1afSvWvt-377rNzZLdNDEvKyMZXkmB_0MhTxAN8k,601
|
|
8
8
|
django_bolt/admin/admin_detection.py,sha256=1yQkLx9rF5DLMjJqbx8n4c82UgS9JEAnUcPdRfFqAXk,5825
|
|
@@ -10,13 +10,13 @@ django_bolt/admin/asgi_bridge.py,sha256=oJrOqbBi8w-OUZD_wvpa5FlRFGIOyRvV284z8OS1
|
|
|
10
10
|
django_bolt/admin/routes.py,sha256=dGrSz6fOwofLuBpNpzyqtcLuGbd4AgSQ2jZub_3cz1Y,3235
|
|
11
11
|
django_bolt/admin/static.py,sha256=eXeOs2VWnxKdLDKarI4eD2q92K9R3JJHW1XQYmAsVDA,4692
|
|
12
12
|
django_bolt/admin/static_routes.py,sha256=sdpuCPhULMr5LccVxfbU2XSfpmL8oP7DCXqUpy0cnNY,3512
|
|
13
|
-
django_bolt/api.py,sha256=
|
|
13
|
+
django_bolt/api.py,sha256=wR2sqaWtQIspyRfnVpCKbOSQO0Ee4FRuIKFqj2E1tas,49426
|
|
14
14
|
django_bolt/apps.py,sha256=OKBK6McSzRZ8zGQaId5iw239QbIgqs8tIbAqpuYxmn0,193
|
|
15
15
|
django_bolt/async_collector.py,sha256=m1U6wjE9wheVMuql8aooR47tkLz_RlADgkIl2p9H6Uw,7749
|
|
16
16
|
django_bolt/auth/__init__.py,sha256=ygi_SCzH1CNOcQwDe0ZKIe072xBa7zeKVUtUoG0_dwY,1968
|
|
17
17
|
django_bolt/auth/backends.py,sha256=T02zfiC17GZrARKlqzKSnkMOtEcYQDTmS4PouRvsNOU,7944
|
|
18
18
|
django_bolt/auth/guards.py,sha256=Dwbqhq4_I41BoN0eWrQ7Ad9mmr9zgCoPAg4C3GElTio,6591
|
|
19
|
-
django_bolt/auth/jwt_utils.py,sha256=
|
|
19
|
+
django_bolt/auth/jwt_utils.py,sha256=8Wprx4tbtXvNDNQWp2eQepG0n4sYPdF2uX8xCmBgSzg,6574
|
|
20
20
|
django_bolt/auth/revocation.py,sha256=YzzKALZwawV8jLk8TV00CrbQ61rDxWy8YElcexhtn8s,8674
|
|
21
21
|
django_bolt/auth/token.py,sha256=LAkjupXcQDLY8IoTrS9TrSDitK8Pfjef-zb3zUZT-i4,11449
|
|
22
22
|
django_bolt/binding.py,sha256=UtmwW55RKyBwNxbX5QQ74NF0EF5k5zaMGa5el7mgljg,12860
|
|
@@ -24,7 +24,7 @@ django_bolt/bootstrap.py,sha256=zXkVhcDZxluQBWXc_UHK0FfgOfpdgxCg01DmSbSdXos,3007
|
|
|
24
24
|
django_bolt/cli.py,sha256=0TBGM37cCqKEew_QA26ru7KkR8_6mP5wKXgFhr8GWng,4647
|
|
25
25
|
django_bolt/compression.py,sha256=8ioDa2j0TG_mna-Jh34-e6WjCeY0GSKwRPHMn8en8OQ,4025
|
|
26
26
|
django_bolt/decorators.py,sha256=hvfIZMxZI3S4eo6KYiOiEC-1Z96fSwQxQopLB4jmez0,6656
|
|
27
|
-
django_bolt/dependencies.py,sha256=
|
|
27
|
+
django_bolt/dependencies.py,sha256=mX19F2X5nbZ5Rzq9GbdeNBuX7EufftQljuHQlCeqpw0,4441
|
|
28
28
|
django_bolt/error_handlers.py,sha256=uD9_9vnub8FxZCRXgcqOdMic5M8cFD-sPXePdSl9IaY,10032
|
|
29
29
|
django_bolt/exceptions.py,sha256=iYTkmtel7VlpjwuOrijDgt8fsx8_Kd0gezLEdR6CrDs,8823
|
|
30
30
|
django_bolt/health.py,sha256=MBcXlgkTAdEiAvmGRPSgn9iePhH-rcHXan7Ge1EaPog,3356
|
|
@@ -33,7 +33,7 @@ django_bolt/logging/config.py,sha256=SE_7yvYzPVdgvMUAK9yU3Dyn2HJY_EVkajm0aAhgcNw
|
|
|
33
33
|
django_bolt/logging/middleware.py,sha256=_tkVN8cN8BloLv7Ebk-2RKBFkH4ooOTNs_dAxXSa0yU,10057
|
|
34
34
|
django_bolt/management/__init__.py,sha256=f0hFqUIOIxXbeDzGL06KrZqWGSsIGVSVVh3EemtatMY,38
|
|
35
35
|
django_bolt/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
36
|
-
django_bolt/management/commands/runbolt.py,sha256=
|
|
36
|
+
django_bolt/management/commands/runbolt.py,sha256=DWNDq3cnNz-ulLwyY5xkm6ZQuGWB7xbDLhhobIHyJS4,17966
|
|
37
37
|
django_bolt/middleware/__init__.py,sha256=C6e6vdSLqe4brMrKR4TueroD4f_OPsnoZZDlxkbyjbw,608
|
|
38
38
|
django_bolt/middleware/compiler.py,sha256=Knxh3XouU70ymIskDB-JWn1TcHSMPQvUBXtTPHEJJRY,4766
|
|
39
39
|
django_bolt/middleware/middleware.py,sha256=Qdr16OM15oOS1OYNnxFY3hJ0un9E8VaVwht-A8Qcuws,8113
|
|
@@ -86,6 +86,7 @@ django_bolt/status_codes.py,sha256=jTZ32kPwj3tC23jh6uC1Ci1P9EKttywsvyWINQIEwGg,9
|
|
|
86
86
|
django_bolt/testing/__init__.py,sha256=TgJjct2WucKL7HyrbMuQfplNptlCPhu4CL-WQZxaoRY,216
|
|
87
87
|
django_bolt/testing/client.py,sha256=Yx7N1lfXmJcH4yF--6K0YehtPY2_wiwb8U3a0qQoqDE,8616
|
|
88
88
|
django_bolt/testing/helpers.py,sha256=hq2HD1IEwHuW8tMgZO9ZW6BFdcE_JQXaV8sZc58LBDc,1472
|
|
89
|
+
django_bolt/types.py,sha256=sk8huP2mArTr5A7FmTVmIke5z0oR-SW0OmzzRfrRlxQ,7982
|
|
89
90
|
django_bolt/typing.py,sha256=sGlFUUXY8EJbYWCgARgNGLZPu7SaxxohZaSx1SRLYaE,8686
|
|
90
91
|
django_bolt/views.py,sha256=KewSpL6g-zZxXnEkwun6hueX3S_Eji-d2dawzoqe-GM,41715
|
|
91
|
-
django_bolt-0.2.
|
|
92
|
+
django_bolt-0.2.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|