-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 4800b57
Showing
125 changed files
with
22,948 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
github: encode |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
--- | ||
name: Issue | ||
about: Please only raise an issue if you've been advised to do so after discussion. Thanks! 🙏 | ||
--- | ||
|
||
The starting point for issues should usually be a discussion... | ||
|
||
https://github.com/encode/starlette/discussions | ||
|
||
Possible bugs may be raised as a "Potential Issue" discussion, feature requests may be raised as an "Ideas" discussion. We can then determine if the discussion needs to be escalated into an "Issue" or not. | ||
|
||
This will help us ensure that the "Issues" list properly reflects ongoing or needed work on the project. | ||
|
||
--- | ||
|
||
- [ ] Initially raised as discussion #... |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
# Ref: https://help.github.com/en/github/building-a-strong-community/configuring-issue-templates-for-your-repository#configuring-the-template-chooser | ||
blank_issues_enabled: false | ||
contact_links: | ||
- name: Discussions | ||
url: https://github.com/encode/starlette/discussions | ||
about: > | ||
The "Discussions" forum is where you want to start. 💖 | ||
- name: Chat | ||
url: https://gitter.im/encode/community | ||
about: > | ||
Our community chat forum. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
version: 2 | ||
updates: | ||
- package-ecosystem: "pip" | ||
directory: "/" | ||
schedule: | ||
interval: "monthly" | ||
groups: | ||
python-packages: | ||
patterns: | ||
- "*" | ||
- package-ecosystem: "github-actions" | ||
directory: "/" | ||
schedule: | ||
interval: monthly |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
<!-- Thanks for contributing to Starlette! 💚 | ||
Given this is a project maintained by volunteers, please read this template to not waste your time, or ours! 😁 --> | ||
|
||
# Summary | ||
|
||
<!-- Write a small summary about what is happening here. --> | ||
|
||
# Checklist | ||
|
||
- [ ] I understand that this PR may be closed in case there was no previous discussion. (This doesn't apply to typos!) | ||
- [ ] I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change. | ||
- [ ] I've updated the documentation accordingly. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
name: Publish | ||
|
||
on: | ||
push: | ||
tags: | ||
- '*' | ||
|
||
jobs: | ||
publish: | ||
name: "Publish release" | ||
runs-on: "ubuntu-latest" | ||
|
||
environment: | ||
name: deploy | ||
|
||
steps: | ||
- uses: "actions/checkout@v4" | ||
- uses: "actions/setup-python@v5" | ||
with: | ||
python-version: "3.11" | ||
- name: "Install dependencies" | ||
run: "scripts/install" | ||
- name: "Build package & docs" | ||
run: "scripts/build" | ||
- name: "Publish to PyPI & deploy docs" | ||
run: "scripts/publish" | ||
env: | ||
TWINE_USERNAME: __token__ | ||
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
--- | ||
name: Test Suite | ||
|
||
on: | ||
push: | ||
branches: ["master"] | ||
pull_request: | ||
branches: ["master"] | ||
|
||
jobs: | ||
tests: | ||
name: "Python ${{ matrix.python-version }}" | ||
runs-on: "ubuntu-latest" | ||
|
||
strategy: | ||
matrix: | ||
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] | ||
|
||
steps: | ||
- uses: "actions/checkout@v4" | ||
- uses: "actions/setup-python@v5" | ||
with: | ||
python-version: "${{ matrix.python-version }}" | ||
allow-prereleases: true | ||
- name: "Install dependencies" | ||
run: "scripts/install" | ||
- name: "Run linting checks" | ||
run: "scripts/check" | ||
- name: "Build package & docs" | ||
run: "scripts/build" | ||
- name: "Run tests" | ||
run: "scripts/test" | ||
- name: "Enforce coverage" | ||
run: "scripts/coverage" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
*.pyc | ||
test.db | ||
.coverage | ||
.pytest_cache/ | ||
.mypy_cache/ | ||
__pycache__/ | ||
htmlcov/ | ||
site/ | ||
*.egg-info/ | ||
venv*/ | ||
.python-version | ||
build/ | ||
dist/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,173 @@ | ||
Metadata-Version: 2.3 | ||
Name: starlette | ||
Version: 0.41.3 | ||
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 <[email protected]> | ||
License: BSD-3-Clause | ||
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: Programming Language :: Python :: 3.13 | ||
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.svg" 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**: <a href="https://www.starlette.io/" target="_blank">https://www.starlette.io</a> | ||
|
||
**Source Code**: <a href="https://github.com/encode/starlette" target="_blank">https://github.com/encode/starlette</a> | ||
|
||
--- | ||
|
||
# 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]. | ||
|
||
## Installation | ||
|
||
```shell | ||
$ pip install starlette | ||
``` | ||
|
||
You'll also want to install an ASGI server, such as [uvicorn](https://www.uvicorn.org/), [daphne](https://github.com/django/daphne/), or [hypercorn](https://hypercorn.readthedocs.io/en/latest/). | ||
|
||
```shell | ||
$ pip install uvicorn | ||
``` | ||
|
||
## Example | ||
|
||
```python title="example.py" | ||
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 `pip 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 |
Oops, something went wrong.