new
This commit is contained in:
@@ -0,0 +1 @@
|
||||
pip
|
@@ -0,0 +1,27 @@
|
||||
Copyright © 2018, [Encode OSS Ltd](https://www.encode.io/).
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
@@ -0,0 +1,213 @@
|
||||
Metadata-Version: 2.1
|
||||
Name: starlette
|
||||
Version: 0.13.6
|
||||
Summary: The little ASGI library that shines.
|
||||
Home-page: https://github.com/encode/starlette
|
||||
Author: Tom Christie
|
||||
Author-email: tom@tomchristie.com
|
||||
License: BSD
|
||||
Platform: UNKNOWN
|
||||
Classifier: Development Status :: 3 - Alpha
|
||||
Classifier: Environment :: Web Environment
|
||||
Classifier: Intended Audience :: Developers
|
||||
Classifier: License :: OSI Approved :: BSD License
|
||||
Classifier: Operating System :: OS Independent
|
||||
Classifier: Topic :: Internet :: WWW/HTTP
|
||||
Classifier: Programming Language :: Python :: 3
|
||||
Classifier: Programming Language :: Python :: 3.6
|
||||
Classifier: Programming Language :: Python :: 3.7
|
||||
Requires-Python: >=3.6
|
||||
Description-Content-Type: text/markdown
|
||||
Provides-Extra: full
|
||||
Requires-Dist: aiofiles ; extra == 'full'
|
||||
Requires-Dist: graphene ; extra == 'full'
|
||||
Requires-Dist: itsdangerous ; extra == 'full'
|
||||
Requires-Dist: jinja2 ; extra == 'full'
|
||||
Requires-Dist: python-multipart ; extra == 'full'
|
||||
Requires-Dist: pyyaml ; extra == 'full'
|
||||
Requires-Dist: requests ; extra == 'full'
|
||||
Requires-Dist: ujson ; extra == 'full'
|
||||
|
||||
<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/)
|
||||
|
||||
**Community**: [https://discuss.encode.io/c/starlette](https://discuss.encode.io/c/starlette)
|
||||
|
||||
---
|
||||
|
||||
# Starlette
|
||||
|
||||
Starlette is a lightweight [ASGI](https://asgi.readthedocs.io/en/latest/) framework/toolkit,
|
||||
which is ideal for building high performance asyncio services.
|
||||
|
||||
It is production-ready, and gives you the following:
|
||||
|
||||
* Seriously impressive performance.
|
||||
* WebSocket support.
|
||||
* GraphQL support.
|
||||
* In-process background tasks.
|
||||
* Startup and shutdown events.
|
||||
* Test client built on `requests`.
|
||||
* CORS, GZip, Static Files, Streaming responses.
|
||||
* Session and Cookie support.
|
||||
* 100% test coverage.
|
||||
* 100% type annotated codebase.
|
||||
* Zero hard dependencies.
|
||||
|
||||
## Requirements
|
||||
|
||||
Python 3.6+
|
||||
|
||||
## 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 does not have any hard dependencies, but the following are optional:
|
||||
|
||||
* [`requests`][requests] - Required if you want to use the `TestClient`.
|
||||
* [`aiofiles`][aiofiles] - Required if you want to use `FileResponse` or `StaticFiles`.
|
||||
* [`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.
|
||||
* [`graphene`][graphene] - Required for `GraphQLApp` support.
|
||||
* [`ujson`][ujson] - Required if you want to use `UJSONResponse`.
|
||||
|
||||
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.
|
||||
|
||||
## Performance
|
||||
|
||||
Independent TechEmpower benchmarks show Starlette applications running under Uvicorn
|
||||
as [one of the fastest Python frameworks available](https://www.techempower.com/benchmarks/#section=data-r17&hw=ph&test=fortune&l=zijzen-1). *(\*)*
|
||||
|
||||
For high throughput loads you should:
|
||||
|
||||
* Make sure to install `ujson` and use `UJSONResponse`.
|
||||
* Run using gunicorn using the `uvicorn` worker class.
|
||||
* Use one or two workers per-CPU core. (You might need to experiment with this.)
|
||||
* Disable access logging.
|
||||
|
||||
Eg.
|
||||
|
||||
```shell
|
||||
gunicorn -w 4 -k uvicorn.workers.UvicornWorker --log-level warning example:app
|
||||
```
|
||||
|
||||
Several of the ASGI servers also have pure Python implementations available,
|
||||
so you can also run under `PyPy` if your application code has parts that are
|
||||
CPU constrained.
|
||||
|
||||
Either programatically:
|
||||
|
||||
```python
|
||||
uvicorn.run(..., http='h11', loop='asyncio')
|
||||
```
|
||||
|
||||
Or using Gunicorn:
|
||||
|
||||
```shell
|
||||
gunicorn -k uvicorn.workers.UvicornH11Worker ...
|
||||
```
|
||||
|
||||
<p align="center">— ⭐️ —</p>
|
||||
<p align="center"><i>Starlette is <a href="https://github.com/encode/starlette/blob/master/LICENSE.md">BSD licensed</a> code. Designed & built in Brighton, England.</i></p>
|
||||
|
||||
[requests]: http://docs.python-requests.org/en/master/
|
||||
[aiofiles]: https://github.com/Tinche/aiofiles
|
||||
[jinja2]: http://jinja.pocoo.org/
|
||||
[python-multipart]: https://andrew-d.github.io/python-multipart/
|
||||
[graphene]: https://graphene-python.org/
|
||||
[itsdangerous]: https://pythonhosted.org/itsdangerous/
|
||||
[sqlalchemy]: https://www.sqlalchemy.org
|
||||
[pyyaml]: https://pyyaml.org/wiki/PyYAMLDocumentation
|
||||
[ujson]: https://github.com/esnme/ultrajson
|
||||
|
||||
|
@@ -0,0 +1,71 @@
|
||||
starlette-0.13.6.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
||||
starlette-0.13.6.dist-info/LICENSE.md,sha256=3LlWd6AiQCQxh-lk-UGEfRmxeCHPmeWvrmhPqzKMGb8,1518
|
||||
starlette-0.13.6.dist-info/METADATA,sha256=i6sijc6ZAc5FvOHISfu4KT9qnTmwBDqYAJQzDMsU_oY,6588
|
||||
starlette-0.13.6.dist-info/RECORD,,
|
||||
starlette-0.13.6.dist-info/WHEEL,sha256=g4nMs7d-Xl9-xC9XovUrsDHGXt-FT0E17Yqo92DEfvY,92
|
||||
starlette-0.13.6.dist-info/top_level.txt,sha256=K67T2Qto14wF1WfT5DtSy3X4rOZEnqMIvcmPpXKZxzM,31
|
||||
starlette/__init__.py,sha256=riz4KLyxI3rKxqm-AbvFFuR22uDgmXnMIjs0NxKBiIE,23
|
||||
starlette/__pycache__/__init__.cpython-39.pyc,,
|
||||
starlette/__pycache__/applications.cpython-39.pyc,,
|
||||
starlette/__pycache__/authentication.cpython-39.pyc,,
|
||||
starlette/__pycache__/background.cpython-39.pyc,,
|
||||
starlette/__pycache__/concurrency.cpython-39.pyc,,
|
||||
starlette/__pycache__/config.cpython-39.pyc,,
|
||||
starlette/__pycache__/convertors.cpython-39.pyc,,
|
||||
starlette/__pycache__/datastructures.cpython-39.pyc,,
|
||||
starlette/__pycache__/endpoints.cpython-39.pyc,,
|
||||
starlette/__pycache__/exceptions.cpython-39.pyc,,
|
||||
starlette/__pycache__/formparsers.cpython-39.pyc,,
|
||||
starlette/__pycache__/graphql.cpython-39.pyc,,
|
||||
starlette/__pycache__/requests.cpython-39.pyc,,
|
||||
starlette/__pycache__/responses.cpython-39.pyc,,
|
||||
starlette/__pycache__/routing.cpython-39.pyc,,
|
||||
starlette/__pycache__/schemas.cpython-39.pyc,,
|
||||
starlette/__pycache__/staticfiles.cpython-39.pyc,,
|
||||
starlette/__pycache__/status.cpython-39.pyc,,
|
||||
starlette/__pycache__/templating.cpython-39.pyc,,
|
||||
starlette/__pycache__/testclient.cpython-39.pyc,,
|
||||
starlette/__pycache__/types.cpython-39.pyc,,
|
||||
starlette/__pycache__/websockets.cpython-39.pyc,,
|
||||
starlette/applications.py,sha256=nmxhkn0J3IBmzTJNyyiI_yeZYSgmZbwE-7myT-JMrEU,7602
|
||||
starlette/authentication.py,sha256=eA7bVoUVIJhfwO2Z-GSkVnXexZZR3ISQrPcy0vwO91M,4422
|
||||
starlette/background.py,sha256=ifpq2wpMcJmB3DR7EBgCSZ7CBsNrYBRC7qY5SAtugC8,996
|
||||
starlette/concurrency.py,sha256=YK6iKru7mWVumPsDKecIw-CCYisUy-c69S3f80Wuesk,1739
|
||||
starlette/config.py,sha256=fsA5ADBb_e2euib-Z92mtVW0ChVkLiDPO6iEuF4Xd4U,3649
|
||||
starlette/convertors.py,sha256=AVlgEUu3LgDnc-SnGDGPJlZBSKeFePOcQamK3vTWq_w,2065
|
||||
starlette/datastructures.py,sha256=NMvzEQJ772ZUbdt_kGOIXYQJ0Ymk3r8o6uYJGO9T4mw,21410
|
||||
starlette/endpoints.py,sha256=M_-BHQCFqpz5MAJDbj0XAZncACC-xx1Y_uJJTEPJbc0,4613
|
||||
starlette/exceptions.py,sha256=cYJ0ReWfM48k_DwBJ6sxESvGFqVDOhRtkDWeIqU9O5M,3583
|
||||
starlette/formparsers.py,sha256=dnvitlhMsVPzen3s9Y6QH9jzSRGFL0DWtRIhEDXQBOA,8771
|
||||
starlette/graphql.py,sha256=RfONTnZB3tXzBGZsJlkdO3Hg345dn3Qzsb7UuXzfTpA,10113
|
||||
starlette/middleware/__init__.py,sha256=tEegvh1lBhUfHaJ0p-T_9FU7PRT1WHoIc2vZX0pUlm8,546
|
||||
starlette/middleware/__pycache__/__init__.cpython-39.pyc,,
|
||||
starlette/middleware/__pycache__/authentication.cpython-39.pyc,,
|
||||
starlette/middleware/__pycache__/base.cpython-39.pyc,,
|
||||
starlette/middleware/__pycache__/cors.cpython-39.pyc,,
|
||||
starlette/middleware/__pycache__/errors.cpython-39.pyc,,
|
||||
starlette/middleware/__pycache__/gzip.cpython-39.pyc,,
|
||||
starlette/middleware/__pycache__/httpsredirect.cpython-39.pyc,,
|
||||
starlette/middleware/__pycache__/sessions.cpython-39.pyc,,
|
||||
starlette/middleware/__pycache__/trustedhost.cpython-39.pyc,,
|
||||
starlette/middleware/__pycache__/wsgi.cpython-39.pyc,,
|
||||
starlette/middleware/authentication.py,sha256=utxyNReZAv6Uxnan-eLG1IoREGT1dXWtS0k4naWNKA0,1778
|
||||
starlette/middleware/base.py,sha256=wNdqR4pLVlUaSg5GHq96H8BJlpYom1WxArsrH9eigis,2282
|
||||
starlette/middleware/cors.py,sha256=KAY5gy8XxySBs_Mh5DetPnFFNShz7xIo12w7RxNtwQ0,6670
|
||||
starlette/middleware/errors.py,sha256=nZUpo0xVOmexIvEb75wdaupH_kXJYerk1EkMxFfbBxE,7642
|
||||
starlette/middleware/gzip.py,sha256=buFpZfst-cdIyAwAX5LSpQfvFt_7jXcq8ek9OuNDtMI,3850
|
||||
starlette/middleware/httpsredirect.py,sha256=SNTleaYALGoITV7xwbic4gB6VYdM8Ylea_ykciUz31g,848
|
||||
starlette/middleware/sessions.py,sha256=s-yDlWb4s08ngWb3QhSbDVUzjO3Sa9NTBRbD1h9m2Jo,3054
|
||||
starlette/middleware/trustedhost.py,sha256=Opir_k5x1hN1oOIZbUESJgEXT5sX_b_XOAc4AbJC_T4,2177
|
||||
starlette/middleware/wsgi.py,sha256=FaTPkvo3maaiZTJMdck4DFDU7yAI2UwRJCANKF6XwVU,5251
|
||||
starlette/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||
starlette/requests.py,sha256=wEodJVZz1-RnVHiWsg_1ZSieeWVOnoLN7XGmN2Gtcvs,9071
|
||||
starlette/responses.py,sha256=qlSyTYFWuuUG26Xm-0HWmmegZBNF50CGzMX5VCOv4fQ,10998
|
||||
starlette/routing.py,sha256=vIL9tS3igDc52fYkKEcJWsFV2JCOTMqGD7y5HK6K19s,25049
|
||||
starlette/schemas.py,sha256=K9bDGPCMN-ikPS9hTtl2Bp30LH-O0P_dSGOmS-oDNTA,4474
|
||||
starlette/staticfiles.py,sha256=33pKfzlxfXArR6-L50Knzf7OYLY8mwXZv4YNj3pKLYo,7744
|
||||
starlette/status.py,sha256=Hsz1NHGsURzVJJTgMFfESMOFBRkzz4bv8W8dWXjHy0g,2517
|
||||
starlette/templating.py,sha256=SI9W6p33O5dlA6CaKDqQ2nbWgjrVJ7GxaJIAtMSbfog,2755
|
||||
starlette/testclient.py,sha256=-oRysYXQv5cPKbrUe8DuZ7WjamS6TI18wbKkjZ5WyAM,17008
|
||||
starlette/types.py,sha256=RbisZ8DEsquztH1HwK6_8Iy5ZvQwddYcDDFW32KEN3o,302
|
||||
starlette/websockets.py,sha256=zq13ifb9jGRBunCDYFKkw5PWJoe_NlssWYAk0Vq3ms4,5590
|
@@ -0,0 +1,5 @@
|
||||
Wheel-Version: 1.0
|
||||
Generator: bdist_wheel (0.34.2)
|
||||
Root-Is-Purelib: true
|
||||
Tag: py3-none-any
|
||||
|
@@ -0,0 +1,2 @@
|
||||
starlette
|
||||
starlette/middleware
|
Reference in New Issue
Block a user