https://github.com/rayattack/heaven
Extremely Stupid Simple, Blazing Fast, Get Out of your way immediately Microframework for building Python Web Applications.
https://github.com/rayattack/heaven
Last synced: 21 days ago
JSON representation
Extremely Stupid Simple, Blazing Fast, Get Out of your way immediately Microframework for building Python Web Applications.
- Host: GitHub
- URL: https://github.com/rayattack/heaven
- Owner: rayattack
- License: mit
- Created: 2021-03-06T20:18:53.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2024-03-23T19:00:45.000Z (about 1 year ago)
- Last Synced: 2024-05-21T00:24:13.065Z (11 months ago)
- Language: Python
- Size: 3.46 MB
- Stars: 5
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGES.md
- License: LICENSE
Awesome Lists containing this project
- awesome-blazingly-fast - routerling - Extremely Stupid Simple, Blazing Fast, Get Out of your way immediately Microframework for building Python Web Applications. (Python)
README
# Heaven :
Heaven is a very very small, extremely tiny, and insanely fast [ASGI](https://asgi.readthedocs.io) web application framework. It was designed to facilitate productivity by allowing for complete mastery in 10 minutes or less.
Heaven is a very light layer around ASGI with support for application mounting and is perhaps the simplest and one of the fastest python web frameworks (biased opinion of course).
- **Documentation** [Go To Docs](https://rayattack.github.io/heaven)
- **PyPi** [https://pypi.org/project/heaven](https://pypi.org/project/heaven)
- **Source Code** [Github](https://github.com/rayattack/heaven)
## Quickstart
1. Install with [pip](https://pip.pypa.io/en/stable/getting-started/)
```sh
$ pip install heaven
```
2. create a function to handle your http requests in a file of your choosing i.e. `patients.py` or `controllers/patients/records.py`
```py
from heaven import Request, Response, Contextasync def get_record_by_id(req: Request, res: Response, ctx: Context):
id = req.params.get('id')# we'll get to this in a minute
dbconn = req.app.peek('dbconnection')
results = await dbconn.execute('select * from patients where id = 1000')# req, res, ctx are available in your jinja templates
ctx.keep('results', results)
await res.render('patients.html')
```
3. **Optional** : You can create functions to be initialised at app startup i.e. in `middlewares/database.py`
```py
from heaven import Appasync def updatabase(app: App):
# write code to connect to your database here
pool = DatabasePool('dsn://here')# this will be available in all request handlers as request.app._.dbconn or req.app.peek('dbconn')
app.keep('dbconn', pool)
```
4. Create your heaven application and connect your request handler e.g. in `src/example.py`
```py
from heaven import App # also available as Router, Applicationrouter = Router()
# you can persist things like db connections etc at app startup
router.ON(STARTUP, 'middlewares.connections.updatabase')# note that you did not need to import your request handler, just giving heaven
# the path to your handler as a string is enough
router.GET('/v1/patients/:id', 'controllers.patients.records.get_record_by_id')
```
5. You can run with uvicorn, gunicorn or any other asgi HTTP, HTTP2, and web socket protocol server of your choice.
```sh
$ uvicorn app:example --reload
* Running on http://127.0.0.1:8000
```
## Contributing
For guidance on how to make contributions to Routerling, see the [Contribution Guidelines](contributions.md)