|
|
Metadata-Version: 2.1 |
|
|
Name: starlette |
|
|
Version: 0.27.0 |
|
|
Summary: The little ASGI library that shines. |
|
|
Project-URL: Homepage, https://github.com/encode/starlette |
|
|
Project-URL: Documentation, https://www.starlette.io/ |
|
|
Project-URL: Changelog, https://www.starlette.io/release-notes/ |
|
|
Project-URL: Funding, https://github.com/sponsors/encode |
|
|
Project-URL: Source, https://github.com/encode/starlette |
|
|
Author-email: Tom Christie <tom@tomchristie.com> |
|
|
License-Expression: BSD-3-Clause |
|
|
License-File: LICENSE.md |
|
|
Classifier: Development Status :: 3 - Alpha |
|
|
Classifier: Environment :: Web Environment |
|
|
Classifier: Framework :: AnyIO |
|
|
Classifier: Intended Audience :: Developers |
|
|
Classifier: License :: OSI Approved :: BSD License |
|
|
Classifier: Operating System :: OS Independent |
|
|
Classifier: Programming Language :: Python :: 3 |
|
|
Classifier: Programming Language :: Python :: 3.7 |
|
|
Classifier: Programming Language :: Python :: 3.8 |
|
|
Classifier: Programming Language :: Python :: 3.9 |
|
|
Classifier: Programming Language :: Python :: 3.10 |
|
|
Classifier: Programming Language :: Python :: 3.11 |
|
|
Classifier: Topic :: Internet :: WWW/HTTP |
|
|
Requires-Python: >=3.7 |
|
|
Requires-Dist: anyio<5,>=3.4.0 |
|
|
Requires-Dist: typing-extensions>=3.10.0; python_version < '3.10' |
|
|
Provides-Extra: full |
|
|
Requires-Dist: httpx>=0.22.0; extra == 'full' |
|
|
Requires-Dist: itsdangerous; extra == 'full' |
|
|
Requires-Dist: jinja2; extra == 'full' |
|
|
Requires-Dist: python-multipart; extra == 'full' |
|
|
Requires-Dist: pyyaml; extra == 'full' |
|
|
Description-Content-Type: text/markdown |
|
|
|
|
|
<p align="center"> |
|
|
<a href="https://www.starlette.io/"><img width="420px" src="https://raw.githubusercontent.com/encode/starlette/master/docs/img/starlette.png" alt='starlette'></a> |
|
|
</p> |
|
|
<p align="center"> |
|
|
<em>✨ The little ASGI framework that shines. ✨</em> |
|
|
</p> |
|
|
<p align="center"> |
|
|
<a href="https://github.com/encode/starlette/actions"> |
|
|
<img src="https://github.com/encode/starlette/workflows/Test%20Suite/badge.svg" alt="Build Status"> |
|
|
</a> |
|
|
<a href="https://pypi.org/project/starlette/"> |
|
|
<img src="https://badge.fury.io/py/starlette.svg" alt="Package version"> |
|
|
</a> |
|
|
</p> |
|
|
|
|
|
--- |
|
|
|
|
|
**Documentation**: [https://www.starlette.io/](https://www.starlette.io/) |
|
|
|
|
|
--- |
|
|
|
|
|
# Starlette |
|
|
|
|
|
Starlette is a lightweight [ASGI][asgi] framework/toolkit, |
|
|
which is ideal for building async web services in Python. |
|
|
|
|
|
It is production-ready, and gives you the following: |
|
|
|
|
|
* A lightweight, low-complexity HTTP web framework. |
|
|
* WebSocket support. |
|
|
* In-process background tasks. |
|
|
* Startup and shutdown events. |
|
|
* Test client built on `httpx`. |
|
|
* CORS, GZip, Static Files, Streaming responses. |
|
|
* Session and Cookie support. |
|
|
* 100% test coverage. |
|
|
* 100% type annotated codebase. |
|
|
* Few hard dependencies. |
|
|
* Compatible with `asyncio` and `trio` backends. |
|
|
* Great overall performance [against independent benchmarks][techempower]. |
|
|
|
|
|
## Requirements |
|
|
|
|
|
Python 3.7+ (For Python 3.6 support, install version 0.19.1) |
|
|
|
|
|
## Installation |
|
|
|
|
|
```shell |
|
|
$ pip3 install starlette |
|
|
``` |
|
|
|
|
|
You'll also want to install an ASGI server, such as [uvicorn](http://www.uvicorn.org/), [daphne](https://github.com/django/daphne/), or [hypercorn](https://pgjones.gitlab.io/hypercorn/). |
|
|
|
|
|
```shell |
|
|
$ pip3 install uvicorn |
|
|
``` |
|
|
|
|
|
## Example |
|
|
|
|
|
**example.py**: |
|
|
|
|
|
```python |
|
|
from starlette.applications import Starlette |
|
|
from starlette.responses import JSONResponse |
|
|
from starlette.routing import Route |
|
|
|
|
|
|
|
|
async def homepage(request): |
|
|
return JSONResponse({'hello': 'world'}) |
|
|
|
|
|
routes = [ |
|
|
Route("/", endpoint=homepage) |
|
|
] |
|
|
|
|
|
app = Starlette(debug=True, routes=routes) |
|
|
``` |
|
|
|
|
|
Then run the application using Uvicorn: |
|
|
|
|
|
```shell |
|
|
$ uvicorn example:app |
|
|
``` |
|
|
|
|
|
For a more complete example, see [encode/starlette-example](https://github.com/encode/starlette-example). |
|
|
|
|
|
## Dependencies |
|
|
|
|
|
Starlette only requires `anyio`, and the following are optional: |
|
|
|
|
|
* [`httpx`][httpx] - Required if you want to use the `TestClient`. |
|
|
* [`jinja2`][jinja2] - Required if you want to use `Jinja2Templates`. |
|
|
* [`python-multipart`][python-multipart] - Required if you want to support form parsing, with `request.form()`. |
|
|
* [`itsdangerous`][itsdangerous] - Required for `SessionMiddleware` support. |
|
|
* [`pyyaml`][pyyaml] - Required for `SchemaGenerator` support. |
|
|
|
|
|
You can install all of these with `pip3 install starlette[full]`. |
|
|
|
|
|
## Framework or Toolkit |
|
|
|
|
|
Starlette is designed to be used either as a complete framework, or as |
|
|
an ASGI toolkit. You can use any of its components independently. |
|
|
|
|
|
```python |
|
|
from starlette.responses import PlainTextResponse |
|
|
|
|
|
|
|
|
async def app(scope, receive, send): |
|
|
assert scope['type'] == 'http' |
|
|
response = PlainTextResponse('Hello, world!') |
|
|
await response(scope, receive, send) |
|
|
``` |
|
|
|
|
|
Run the `app` application in `example.py`: |
|
|
|
|
|
```shell |
|
|
$ uvicorn example:app |
|
|
INFO: Started server process [11509] |
|
|
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) |
|
|
``` |
|
|
|
|
|
Run uvicorn with `--reload` to enable auto-reloading on code changes. |
|
|
|
|
|
## Modularity |
|
|
|
|
|
The modularity that Starlette is designed on promotes building re-usable |
|
|
components that can be shared between any ASGI framework. This should enable |
|
|
an ecosystem of shared middleware and mountable applications. |
|
|
|
|
|
The clean API separation also means it's easier to understand each component |
|
|
in isolation. |
|
|
|
|
|
--- |
|
|
|
|
|
<p align="center"><i>Starlette is <a href="https://github.com/encode/starlette/blob/master/LICENSE.md">BSD licensed</a> code.<br/>Designed & crafted with care.</i></br>— ⭐️ —</p> |
|
|
|
|
|
[asgi]: https://asgi.readthedocs.io/en/latest/ |
|
|
[httpx]: https://www.python-httpx.org/ |
|
|
[jinja2]: https://jinja.palletsprojects.com/ |
|
|
[python-multipart]: https://andrew-d.github.io/python-multipart/ |
|
|
[itsdangerous]: https://pythonhosted.org/itsdangerous/ |
|
|
[sqlalchemy]: https://www.sqlalchemy.org |
|
|
[pyyaml]: https://pyyaml.org/wiki/PyYAMLDocumentation |
|
|
[techempower]: https://www.techempower.com/benchmarks/#hw=ph&test=fortune&l=zijzen-sf
|
|
|
|