Metadata-Version: 2.1
Name: selva
Version: 0.14.3
Summary: ASGI Web Framework with Dependency Injection
Home-page: https://github.com/livioribeiro/selva
License: MIT
Keywords: asgi,framework,asyncio,web
Author: Livio Ribeiro
Author-email: livioribeiro@outlook.com
Requires-Python: >=3.11,<4.0
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Web Environment
Classifier: Framework :: AsyncIO
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Provides-Extra: jinja
Provides-Extra: memcached
Provides-Extra: redis
Provides-Extra: sqlalchemy
Requires-Dist: SQLAlchemy (>=2.0,<3.0) ; extra == "sqlalchemy"
Requires-Dist: asgikit (>=0.8,<0.9)
Requires-Dist: emcache (>=1.2,<2.0) ; extra == "memcached"
Requires-Dist: jinja2 (>=3.1,<4.0) ; extra == "jinja"
Requires-Dist: loguru (>=0.7,<0.8)
Requires-Dist: pydantic (>=2.7,<3.0)
Requires-Dist: python-dotenv (>=1.0,<2.0)
Requires-Dist: redis (>=5.0,<6.0) ; extra == "redis"
Requires-Dist: ruamel.yaml (>=0.18,<0.19)
Project-URL: Repository, https://github.com/livioribeiro/selva
Description-Content-Type: text/markdown

# Project Selva

Documentation: https://livioribeiro.github.io/selva/

Selva is a Python ASGI web framework built on top of [asgikit](https://pypi.org/project/asgikit/)
and inspired by Spring Boot, AspNet, FastAPI and Go's net/http.

It features a Dependency Injection system to help build robust and reliable applications.

## Quick start

Install `selva` and `uvicorn` to run application:

```shell
pip install selva uvicorn[standard]
```

Create a module called `application.py`:

```shell
touch application.py
```

Create a controller:

```python
from asgikit.requests import Request
from asgikit.responses import respond_text
from selva.web import controller, get


@controller
class Controller:
    @get
    async def hello(self, request: Request):
        await respond_text(request.response, "Hello, World!")
```

Run application with `uvicorn` (Selva will automatically load `application.py`):

```shell
uvicorn selva.run:app --reload
```

