vayuapi 0.2.0__tar.gz → 0.2.2__tar.gz
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.
- {vayuapi-0.2.0 → vayuapi-0.2.2}/PKG-INFO +1 -1
- {vayuapi-0.2.0 → vayuapi-0.2.2}/pyproject.toml +1 -1
- {vayuapi-0.2.0 → vayuapi-0.2.2}/setup.py +1 -1
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/core/application.py +70 -7
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/core/middleware.py +5 -5
- {vayuapi-0.2.0 → vayuapi-0.2.2}/LICENSE +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/MANIFEST.in +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/README.md +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/requirements.txt +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/setup.cfg +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/__init__.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/admin/__init__.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/admin/enhanced_panel.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/admin/panel.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/ai/__init__.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/ai/langchain.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/ai/pydantic_ai.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/core/__init__.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/core/concurrency.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/core/decorators.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/core/dependencies.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/core/docs.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/core/exceptions.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/core/params.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/core/responses.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/core/routing.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/core/staticfiles.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/core/templating.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/core/uploads.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/core/websocket.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/di/__init__.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/di/container.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/di/injectable.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/di/provider.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/grpc/__init__.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/grpc/client.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/grpc/decorators.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/grpc/server.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/middleware/__init__.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/orm/__init__.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/orm/async_orm.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/orm/database.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/orm/django_orm.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/scheduler/__init__.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/scheduler/tasks.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/security/__init__.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/security/auth.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/security/encryption.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/security/jwt.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/status.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/tasks/__init__.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/tasks/arq_app.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/tasks/celery_app.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/tasks/decorators.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/tasks/worker.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/utils/__init__.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi/utils/helpers.py +0 -0
- {vayuapi-0.2.0 → vayuapi-0.2.2}/vayuapi.egg-info/SOURCES.txt +0 -0
|
@@ -7,7 +7,7 @@ with open("README.md", "r", encoding="utf-8") as fh:
|
|
|
7
7
|
|
|
8
8
|
setup(
|
|
9
9
|
name="vayuapi",
|
|
10
|
-
version="0.2.
|
|
10
|
+
version="0.2.2",
|
|
11
11
|
author="VayuAPI Team",
|
|
12
12
|
author_email="codeswithalok@gmail.com",
|
|
13
13
|
description="The fastest Python async API framework for rapid development with AI/ML support",
|
|
@@ -100,7 +100,7 @@ class VayuAPI:
|
|
|
100
100
|
# Add default middleware
|
|
101
101
|
if cors_enabled:
|
|
102
102
|
from starlette.middleware.cors import CORSMiddleware
|
|
103
|
-
self.
|
|
103
|
+
self.add_middleware(
|
|
104
104
|
CORSMiddleware,
|
|
105
105
|
allow_origins=allowed_origins or ["*"],
|
|
106
106
|
allow_credentials=True,
|
|
@@ -120,7 +120,7 @@ class VayuAPI:
|
|
|
120
120
|
# Add session middleware for admin authentication
|
|
121
121
|
from starlette.middleware.sessions import SessionMiddleware
|
|
122
122
|
import secrets
|
|
123
|
-
self.
|
|
123
|
+
self.add_middleware(
|
|
124
124
|
SessionMiddleware,
|
|
125
125
|
secret_key=secrets.token_urlsafe(32)
|
|
126
126
|
)
|
|
@@ -237,16 +237,79 @@ class VayuAPI:
|
|
|
237
237
|
return func
|
|
238
238
|
return decorator
|
|
239
239
|
|
|
240
|
-
def add_middleware(self,
|
|
241
|
-
"""
|
|
242
|
-
|
|
240
|
+
def add_middleware(self, middleware_class: Type, **options) -> None:
|
|
241
|
+
"""
|
|
242
|
+
Add middleware to the application.
|
|
243
243
|
|
|
244
|
-
|
|
245
|
-
|
|
244
|
+
Identical API to FastAPI / Starlette — always pass a **class** and
|
|
245
|
+
optional keyword arguments. VayuAPI supports three kinds:
|
|
246
|
+
|
|
247
|
+
1. **ASGI / Starlette middleware** (``CORSMiddleware``,
|
|
248
|
+
``GZipMiddleware``, ``SessionMiddleware``, …) — any class whose
|
|
249
|
+
constructor accepts ``(app, **options)``.
|
|
250
|
+
|
|
251
|
+
2. **BaseHTTPMiddleware subclasses** — override ``dispatch(request,
|
|
252
|
+
call_next)``; pass the class without instantiating it.
|
|
253
|
+
|
|
254
|
+
3. **VayuAPI Middleware subclasses** — override
|
|
255
|
+
``process_request`` / ``process_response``; pass the class without
|
|
256
|
+
instantiating it (or pass an instance for backwards compatibility).
|
|
257
|
+
|
|
258
|
+
Examples::
|
|
259
|
+
|
|
260
|
+
from vayuapi.middleware import CORSMiddleware, GZipMiddleware
|
|
261
|
+
from vayuapi.middleware import SessionMiddleware, HTTPSRedirectMiddleware
|
|
262
|
+
|
|
263
|
+
app.add_middleware(CORSMiddleware, allow_origins=["*"], allow_methods=["*"])
|
|
264
|
+
app.add_middleware(GZipMiddleware, minimum_size=1000)
|
|
265
|
+
app.add_middleware(SessionMiddleware, secret_key="supersecret")
|
|
266
|
+
app.add_middleware(HTTPSRedirectMiddleware)
|
|
267
|
+
|
|
268
|
+
# BaseHTTPMiddleware subclass
|
|
269
|
+
from vayuapi.middleware import BaseHTTPMiddleware
|
|
270
|
+
class TimingMiddleware(BaseHTTPMiddleware):
|
|
271
|
+
async def dispatch(self, request, call_next):
|
|
272
|
+
import time
|
|
273
|
+
start = time.time()
|
|
274
|
+
response = await call_next(request)
|
|
275
|
+
response.headers["X-Process-Time"] = str(time.time() - start)
|
|
276
|
+
return response
|
|
277
|
+
app.add_middleware(TimingMiddleware)
|
|
278
|
+
|
|
279
|
+
# VayuAPI custom Middleware subclass
|
|
280
|
+
from vayuapi.middleware import Middleware
|
|
281
|
+
class LogMiddleware(Middleware):
|
|
282
|
+
async def process_request(self, request):
|
|
283
|
+
print(request.method, request.url)
|
|
284
|
+
app.add_middleware(LogMiddleware)
|
|
285
|
+
"""
|
|
286
|
+
from starlette.middleware.base import BaseHTTPMiddleware as _StarletteBaseHTTPMiddleware
|
|
287
|
+
|
|
288
|
+
# Backward-compat: accept a Middleware *instance* as well as a class
|
|
289
|
+
if isinstance(middleware_class, Middleware):
|
|
290
|
+
self.middleware_stack.add(middleware_class)
|
|
291
|
+
return
|
|
292
|
+
|
|
293
|
+
if not isinstance(middleware_class, type):
|
|
294
|
+
raise TypeError(
|
|
295
|
+
"add_middleware expects a middleware class, "
|
|
296
|
+
f"got {type(middleware_class)!r}"
|
|
297
|
+
)
|
|
298
|
+
|
|
299
|
+
# VayuAPI Middleware subclass (process_request / process_response style)
|
|
300
|
+
if issubclass(middleware_class, Middleware):
|
|
301
|
+
self.middleware_stack.add(middleware_class(**options))
|
|
302
|
+
return
|
|
303
|
+
|
|
304
|
+
# BaseHTTPMiddleware subclass or any ASGI middleware class
|
|
246
305
|
self._starlette_middleware.append(
|
|
247
306
|
StarletteMiddleware(middleware_class, **options)
|
|
248
307
|
)
|
|
249
308
|
|
|
309
|
+
def add_starlette_middleware(self, middleware_class: Type, **options):
|
|
310
|
+
"""Alias for add_middleware with a middleware class. Kept for backward compatibility."""
|
|
311
|
+
self.add_middleware(middleware_class, **options)
|
|
312
|
+
|
|
250
313
|
def add_exception_handler(self, exc_class: Type[Exception], handler: Callable):
|
|
251
314
|
"""
|
|
252
315
|
Add a custom exception handler.
|
|
@@ -203,7 +203,7 @@ class CORSMiddleware:
|
|
|
203
203
|
```python
|
|
204
204
|
from vayuapi.middleware import CORSMiddleware
|
|
205
205
|
|
|
206
|
-
app.
|
|
206
|
+
app.add_middleware(
|
|
207
207
|
CORSMiddleware,
|
|
208
208
|
allow_origins=["https://example.com"],
|
|
209
209
|
allow_credentials=True,
|
|
@@ -260,7 +260,7 @@ class GZipMiddleware:
|
|
|
260
260
|
```python
|
|
261
261
|
from vayuapi.middleware import GZipMiddleware
|
|
262
262
|
|
|
263
|
-
app.
|
|
263
|
+
app.add_middleware(
|
|
264
264
|
GZipMiddleware,
|
|
265
265
|
minimum_size=1000,
|
|
266
266
|
compresslevel=6,
|
|
@@ -298,7 +298,7 @@ class HTTPSRedirectMiddleware:
|
|
|
298
298
|
```python
|
|
299
299
|
from vayuapi.middleware import HTTPSRedirectMiddleware
|
|
300
300
|
|
|
301
|
-
app.
|
|
301
|
+
app.add_middleware(HTTPSRedirectMiddleware)
|
|
302
302
|
```
|
|
303
303
|
|
|
304
304
|
Automatically redirects HTTP requests to HTTPS.
|
|
@@ -321,7 +321,7 @@ class TrustedHostMiddleware:
|
|
|
321
321
|
```python
|
|
322
322
|
from vayuapi.middleware import TrustedHostMiddleware
|
|
323
323
|
|
|
324
|
-
app.
|
|
324
|
+
app.add_middleware(
|
|
325
325
|
TrustedHostMiddleware,
|
|
326
326
|
allowed_hosts=["example.com", "*.example.com"],
|
|
327
327
|
www_redirect=True,
|
|
@@ -359,7 +359,7 @@ class SessionMiddleware:
|
|
|
359
359
|
```python
|
|
360
360
|
from vayuapi.middleware import SessionMiddleware
|
|
361
361
|
|
|
362
|
-
app.
|
|
362
|
+
app.add_middleware(
|
|
363
363
|
SessionMiddleware,
|
|
364
364
|
secret_key="your-secret-key",
|
|
365
365
|
session_cookie="session",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|