vayuapi 0.2.3__tar.gz → 0.2.4__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 (59) hide show
  1. {vayuapi-0.2.3 → vayuapi-0.2.4}/PKG-INFO +1 -1
  2. {vayuapi-0.2.3 → vayuapi-0.2.4}/pyproject.toml +1 -1
  3. {vayuapi-0.2.3 → vayuapi-0.2.4}/setup.py +1 -1
  4. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/__init__.py +1 -0
  5. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/core/application.py +32 -7
  6. {vayuapi-0.2.3 → vayuapi-0.2.4}/LICENSE +0 -0
  7. {vayuapi-0.2.3 → vayuapi-0.2.4}/MANIFEST.in +0 -0
  8. {vayuapi-0.2.3 → vayuapi-0.2.4}/README.md +0 -0
  9. {vayuapi-0.2.3 → vayuapi-0.2.4}/requirements.txt +0 -0
  10. {vayuapi-0.2.3 → vayuapi-0.2.4}/setup.cfg +0 -0
  11. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/admin/__init__.py +0 -0
  12. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/admin/enhanced_panel.py +0 -0
  13. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/admin/panel.py +0 -0
  14. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/ai/__init__.py +0 -0
  15. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/ai/langchain.py +0 -0
  16. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/ai/pydantic_ai.py +0 -0
  17. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/core/__init__.py +0 -0
  18. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/core/concurrency.py +0 -0
  19. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/core/decorators.py +0 -0
  20. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/core/dependencies.py +0 -0
  21. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/core/docs.py +0 -0
  22. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/core/exceptions.py +0 -0
  23. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/core/middleware.py +0 -0
  24. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/core/params.py +0 -0
  25. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/core/responses.py +0 -0
  26. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/core/routing.py +0 -0
  27. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/core/staticfiles.py +0 -0
  28. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/core/templating.py +0 -0
  29. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/core/uploads.py +0 -0
  30. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/core/websocket.py +0 -0
  31. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/di/__init__.py +0 -0
  32. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/di/container.py +0 -0
  33. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/di/injectable.py +0 -0
  34. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/di/provider.py +0 -0
  35. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/grpc/__init__.py +0 -0
  36. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/grpc/client.py +0 -0
  37. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/grpc/decorators.py +0 -0
  38. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/grpc/server.py +0 -0
  39. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/middleware/__init__.py +0 -0
  40. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/orm/__init__.py +0 -0
  41. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/orm/async_orm.py +0 -0
  42. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/orm/database.py +0 -0
  43. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/orm/django_orm.py +0 -0
  44. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/response.py +0 -0
  45. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/scheduler/__init__.py +0 -0
  46. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/scheduler/tasks.py +0 -0
  47. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/security/__init__.py +0 -0
  48. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/security/auth.py +0 -0
  49. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/security/encryption.py +0 -0
  50. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/security/jwt.py +0 -0
  51. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/status.py +0 -0
  52. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/tasks/__init__.py +0 -0
  53. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/tasks/arq_app.py +0 -0
  54. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/tasks/celery_app.py +0 -0
  55. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/tasks/decorators.py +0 -0
  56. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/tasks/worker.py +0 -0
  57. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/utils/__init__.py +0 -0
  58. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi/utils/helpers.py +0 -0
  59. {vayuapi-0.2.3 → vayuapi-0.2.4}/vayuapi.egg-info/SOURCES.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vayuapi
3
- Version: 0.2.3
3
+ Version: 0.2.4
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.3"
9
+ version = "0.2.4"
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.3",
10
+ version="0.2.4",
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",
@@ -58,6 +58,7 @@ from vayuapi.core.concurrency import (
58
58
 
59
59
  # Exception handling
60
60
  from vayuapi.core.exceptions import (
61
+ ExceptionHandler,
61
62
  HTTPException,
62
63
  RequestValidationError,
63
64
  WebSocketException,
@@ -61,6 +61,7 @@ class VayuAPI:
61
61
  allowed_origins: List[str] = None,
62
62
  middleware: List[Middleware] = None,
63
63
  lifespan: Optional[Callable] = None,
64
+ exception_handlers: Optional[Dict[Type[Exception], Callable]] = None,
64
65
  ):
65
66
  """
66
67
  Initialize VayuAPI application.
@@ -81,6 +82,7 @@ class VayuAPI:
81
82
  allowed_origins: List of allowed origins for CORS
82
83
  middleware: List of middleware to add
83
84
  lifespan: Lifespan context manager
85
+ exception_handlers: Dict mapping exception classes to handler callables
84
86
  """
85
87
  self.title = title
86
88
  self.version = version
@@ -154,7 +156,10 @@ class VayuAPI:
154
156
 
155
157
  # Exception handlers
156
158
  from vayuapi.core.exceptions import ExceptionHandler
157
- self.exception_handler = ExceptionHandler()
159
+ self._exception_handler = ExceptionHandler()
160
+ if exception_handlers:
161
+ for exc_class, handler in exception_handlers.items():
162
+ self._exception_handler.add_handler(exc_class, handler)
158
163
  #---------------------Routes------------------------------Added-------#
159
164
  @property
160
165
  def routes(self):
@@ -343,7 +348,27 @@ class VayuAPI:
343
348
  exc_class: Exception class to handle
344
349
  handler: Async function that handles the exception
345
350
  """
346
- self.exception_handler.add_handler(exc_class, handler)
351
+ self._exception_handler.add_handler(exc_class, handler)
352
+
353
+ def exception_handler(self, exc_class: Type[Exception]):
354
+ """
355
+ Decorator to register a custom exception handler.
356
+
357
+ Example:
358
+ ```python
359
+ @app.exception_handler(HTTPException)
360
+ async def http_error_handler(request, exc):
361
+ return JSONResponse(status_code=exc.status_code, content={"error": exc.detail})
362
+
363
+ @app.exception_handler(RedirectToLogin)
364
+ async def redirect_handler(request, exc):
365
+ return RedirectResponse(url="/login")
366
+ ```
367
+ """
368
+ def decorator(handler: Callable):
369
+ self._exception_handler.add_handler(exc_class, handler)
370
+ return handler
371
+ return decorator
347
372
 
348
373
  def route(
349
374
  self,
@@ -649,7 +674,7 @@ class VayuAPI:
649
674
  return JSONResponse({"message": "Success"})
650
675
  return JSONResponse({"data": result})
651
676
  except Exception as e:
652
- return await self.exception_handler.handle(request, e)
677
+ return await self._exception_handler.handle(request, e)
653
678
  return simple_wrapped
654
679
  else:
655
680
  async def simple_wrapped_sync(request: Request) -> Response:
@@ -668,7 +693,7 @@ class VayuAPI:
668
693
  return JSONResponse({"message": "Success"})
669
694
  return JSONResponse({"data": result})
670
695
  except Exception as e:
671
- return await self.exception_handler.handle(request, e)
696
+ return await self._exception_handler.handle(request, e)
672
697
  return simple_wrapped_sync
673
698
 
674
699
  #------------------------------------------------------------------------------------------------------------#
@@ -867,10 +892,10 @@ class VayuAPI:
867
892
  except ValidationError as e:
868
893
  from vayuapi.core.exceptions import RequestValidationError
869
894
  validation_error = RequestValidationError(e.errors())
870
- return await self.exception_handler.handle(request, validation_error)
895
+ return await self._exception_handler.handle(request, validation_error)
871
896
  except Exception as e:
872
897
  # Use exception handler
873
- return await self.exception_handler.handle(request, e)
898
+ return await self._exception_handler.handle(request, e)
874
899
 
875
900
  return wrapped
876
901
 
@@ -952,7 +977,7 @@ class VayuAPI:
952
977
  from starlette.exceptions import HTTPException as StarletteHTTPException
953
978
 
954
979
  mw_stack = self.middleware_stack # capture reference
955
- exc_handler = self.exception_handler # capture reference
980
+ exc_handler = self._exception_handler # capture reference
956
981
 
957
982
  class _VayuMiddlewareWrapper(BaseHTTPMiddleware):
958
983
  async def dispatch(self, request, call_next):
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