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.
Files changed (58) hide show
  1. {vayuapi-0.2.1 → vayuapi-0.2.2}/PKG-INFO +1 -1
  2. {vayuapi-0.2.1 → vayuapi-0.2.2}/pyproject.toml +1 -1
  3. {vayuapi-0.2.1 → vayuapi-0.2.2}/setup.py +1 -1
  4. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/application.py +57 -33
  5. {vayuapi-0.2.1 → vayuapi-0.2.2}/LICENSE +0 -0
  6. {vayuapi-0.2.1 → vayuapi-0.2.2}/MANIFEST.in +0 -0
  7. {vayuapi-0.2.1 → vayuapi-0.2.2}/README.md +0 -0
  8. {vayuapi-0.2.1 → vayuapi-0.2.2}/requirements.txt +0 -0
  9. {vayuapi-0.2.1 → vayuapi-0.2.2}/setup.cfg +0 -0
  10. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/__init__.py +0 -0
  11. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/admin/__init__.py +0 -0
  12. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/admin/enhanced_panel.py +0 -0
  13. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/admin/panel.py +0 -0
  14. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/ai/__init__.py +0 -0
  15. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/ai/langchain.py +0 -0
  16. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/ai/pydantic_ai.py +0 -0
  17. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/__init__.py +0 -0
  18. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/concurrency.py +0 -0
  19. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/decorators.py +0 -0
  20. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/dependencies.py +0 -0
  21. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/docs.py +0 -0
  22. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/exceptions.py +0 -0
  23. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/middleware.py +0 -0
  24. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/params.py +0 -0
  25. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/responses.py +0 -0
  26. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/routing.py +0 -0
  27. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/staticfiles.py +0 -0
  28. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/templating.py +0 -0
  29. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/uploads.py +0 -0
  30. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/core/websocket.py +0 -0
  31. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/di/__init__.py +0 -0
  32. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/di/container.py +0 -0
  33. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/di/injectable.py +0 -0
  34. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/di/provider.py +0 -0
  35. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/grpc/__init__.py +0 -0
  36. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/grpc/client.py +0 -0
  37. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/grpc/decorators.py +0 -0
  38. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/grpc/server.py +0 -0
  39. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/middleware/__init__.py +0 -0
  40. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/orm/__init__.py +0 -0
  41. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/orm/async_orm.py +0 -0
  42. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/orm/database.py +0 -0
  43. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/orm/django_orm.py +0 -0
  44. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/scheduler/__init__.py +0 -0
  45. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/scheduler/tasks.py +0 -0
  46. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/security/__init__.py +0 -0
  47. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/security/auth.py +0 -0
  48. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/security/encryption.py +0 -0
  49. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/security/jwt.py +0 -0
  50. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/status.py +0 -0
  51. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/tasks/__init__.py +0 -0
  52. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/tasks/arq_app.py +0 -0
  53. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/tasks/celery_app.py +0 -0
  54. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/tasks/decorators.py +0 -0
  55. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/tasks/worker.py +0 -0
  56. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/utils/__init__.py +0 -0
  57. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi/utils/helpers.py +0 -0
  58. {vayuapi-0.2.1 → vayuapi-0.2.2}/vayuapi.egg-info/SOURCES.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vayuapi
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary: The fastest Python async API framework for rapid development with AI/ML support
5
5
  Home-page: https://github.com/vayuapi/vayuapi
6
6
  Author: VayuAPI Team
@@ -6,7 +6,7 @@ include = ["vayuapi*"]
6
6
 
7
7
  [project]
8
8
  name = "vayuapi"
9
- version = "0.2.1"
9
+ version = "0.2.2"
10
10
  description = "The fastest Python async API framework for rapid development with AI/ML support"
11
11
  readme = "README.md"
12
12
  requires-python = ">=3.11,<3.16"
@@ -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.1",
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, middleware_or_class, **options):
240
+ def add_middleware(self, middleware_class: Type, **options) -> None:
241
241
  """
242
242
  Add middleware to the application.
243
243
 
244
- Accepts either:
245
- - A VayuAPI ``Middleware`` instance (custom middleware with
246
- ``process_request`` / ``process_response`` hooks)
247
- - A Starlette-compatible ASGI middleware **class** plus keyword
248
- arguments that will be forwarded to its constructor.
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
- # VayuAPI custom middleware
253
- app.add_middleware(MyMiddleware())
260
+ from vayuapi.middleware import CORSMiddleware, GZipMiddleware
261
+ from vayuapi.middleware import SessionMiddleware, HTTPSRedirectMiddleware
254
262
 
255
- # Starlette-style middleware class with options
256
- from vayuapi.middleware import CORSMiddleware
257
- app.add_middleware(
258
- CORSMiddleware,
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
- from vayuapi.middleware import SessionMiddleware
264
- app.add_middleware(SessionMiddleware, secret_key="secret")
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
- if isinstance(middleware_or_class, Middleware):
267
- # VayuAPI Middleware instance
268
- if options:
269
- raise TypeError(
270
- "Keyword arguments are not accepted when passing a "
271
- "Middleware instance. Pass the options to the constructor instead."
272
- )
273
- self.middleware_stack.add(middleware_or_class)
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 Middleware instance or a middleware class, "
282
- f"got {type(middleware_or_class)!r}"
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