176 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			176 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
Metadata-Version: 2.1
 | 
						|
Name: starlette
 | 
						|
Version: 0.37.2
 | 
						|
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.8
 | 
						|
Classifier: Programming Language :: Python :: 3.9
 | 
						|
Classifier: Programming Language :: Python :: 3.10
 | 
						|
Classifier: Programming Language :: Python :: 3.11
 | 
						|
Classifier: Programming Language :: Python :: 3.12
 | 
						|
Classifier: Topic :: Internet :: WWW/HTTP
 | 
						|
Requires-Python: >=3.8
 | 
						|
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>=0.0.7; 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>
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
[](https://github.com/encode/starlette/actions)
 | 
						|
[](https://pypi.python.org/pypi/starlette)
 | 
						|
[](https://pypi.org/project/starlette)
 | 
						|
 | 
						|
**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.8+
 | 
						|
 | 
						|
## 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://itsdangerous.palletsprojects.com/
 | 
						|
[sqlalchemy]: https://www.sqlalchemy.org
 | 
						|
[pyyaml]: https://pyyaml.org/wiki/PyYAMLDocumentation
 | 
						|
[techempower]: https://www.techempower.com/benchmarks/#hw=ph&test=fortune&l=zijzen-sf
 |