vayuapi 0.2.1__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.1 → vayuapi-0.2.2}/PKG-INFO +1 -1
- {vayuapi-0.2.1 → vayuapi-0.2.2}/pyproject.toml +1 -1
- {vayuapi-0.2.1 → vayuapi-0.2.2}/setup.py +1 -1
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/application.py +57 -33
- {vayuapi-0.2.1 → vayuapi-0.2.2}/LICENSE +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/MANIFEST.in +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/README.md +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/requirements.txt +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/setup.cfg +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/__init__.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/admin/__init__.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/admin/enhanced_panel.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/admin/panel.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/ai/__init__.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/ai/langchain.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/ai/pydantic_ai.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/__init__.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/concurrency.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/decorators.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/dependencies.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/docs.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/exceptions.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/middleware.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/params.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/responses.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/routing.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/staticfiles.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/templating.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/uploads.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/websocket.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/di/__init__.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/di/container.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/di/injectable.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/di/provider.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/grpc/__init__.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/grpc/client.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/grpc/decorators.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/grpc/server.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/middleware/__init__.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/orm/__init__.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/orm/async_orm.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/orm/database.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/orm/django_orm.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/scheduler/__init__.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/scheduler/tasks.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/security/__init__.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/security/auth.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/security/encryption.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/security/jwt.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/status.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/tasks/__init__.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/tasks/arq_app.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/tasks/celery_app.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/tasks/decorators.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/tasks/worker.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/utils/__init__.py +0 -0
- {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/utils/helpers.py +0 -0
- {vayuapi-0.2.1 → 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",
|
|
@@ -237,51 +237,75 @@ class VayuAPI:
|
|
|
237
237
|
return func
|
|
238
238
|
return decorator
|
|
239
239
|
|
|
240
|
-
def add_middleware(self,
|
|
240
|
+
def add_middleware(self, middleware_class: Type, **options) -> None:
|
|
241
241
|
"""
|
|
242
242
|
Add middleware to the application.
|
|
243
243
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
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).
|
|
249
257
|
|
|
250
258
|
Examples::
|
|
251
259
|
|
|
252
|
-
|
|
253
|
-
|
|
260
|
+
from vayuapi.middleware import CORSMiddleware, GZipMiddleware
|
|
261
|
+
from vayuapi.middleware import SessionMiddleware, HTTPSRedirectMiddleware
|
|
254
262
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
app.add_middleware(
|
|
258
|
-
|
|
259
|
-
allow_origins=["*"],
|
|
260
|
-
allow_methods=["*"],
|
|
261
|
-
)
|
|
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)
|
|
262
267
|
|
|
263
|
-
|
|
264
|
-
|
|
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)
|
|
265
285
|
"""
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
elif isinstance(middleware_or_class, type):
|
|
275
|
-
# Starlette-style middleware class
|
|
276
|
-
self._starlette_middleware.append(
|
|
277
|
-
StarletteMiddleware(middleware_or_class, **options)
|
|
278
|
-
)
|
|
279
|
-
else:
|
|
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):
|
|
280
294
|
raise TypeError(
|
|
281
|
-
"add_middleware expects a
|
|
282
|
-
f"got {type(
|
|
295
|
+
"add_middleware expects a middleware class, "
|
|
296
|
+
f"got {type(middleware_class)!r}"
|
|
283
297
|
)
|
|
284
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
|
|
305
|
+
self._starlette_middleware.append(
|
|
306
|
+
StarletteMiddleware(middleware_class, **options)
|
|
307
|
+
)
|
|
308
|
+
|
|
285
309
|
def add_starlette_middleware(self, middleware_class: Type, **options):
|
|
286
310
|
"""Alias for add_middleware with a middleware class. Kept for backward compatibility."""
|
|
287
311
|
self.add_middleware(middleware_class, **options)
|
|
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
|
|
File without changes
|