kennethreitz
1bfd85b003
Add Pydantic support for OpenAPI schema generation
...
Define your API schemas with Pydantic models instead of (or alongside)
YAML docstrings and marshmallow:
from pydantic import BaseModel
class PetIn(BaseModel):
name: str
age: int = 0
class PetOut(BaseModel):
id: int
name: str
age: int
@api.route("/pets", methods=["POST"],
request_model=PetIn, response_model=PetOut)
async def create_pet(req, resp):
data = await req.media()
resp.media = {"id": 1, **data}
Also works with @api.schema("Name") decorator for registering
standalone schema components.
Pydantic models, marshmallow schemas, and YAML docstrings can all
be used together in the same API.
Also: rewrite docs with more prose, restore sidebar logo and links,
add FastAPI acknowledgment, update homepage copy.
161 tests, 95% coverage.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-22 12:35:07 -04:00
kennethreitz
33ebc77f10
Rewrite docs from scratch, remove 14MB of bundled fonts
...
Complete documentation rewrite:
- Clean, code-first index page (no badges, no testimonials)
- Rewritten quickstart: request/response reference, templates, background tasks
- Rewritten feature tour: method filtering, lifespan, file serving,
error handling, hooks, WebSockets, GraphQL, OpenAPI, CORS, sessions
- Simplified testing and deployment guides
- Stripped conf.py to essential extensions only
Removed cruft:
- 14MB of paid font files (Mercury, Operator Mono)
- Google Analytics (deprecated Universal Analytics)
- UserVoice widget
- Konami code easter egg
- Algolia DocSearch (not configured)
- Twitter widgets
- Unused Sphinx extensions (mathjax, ifconfig, coverage, doctest, opengraph)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-22 12:17:22 -04:00
kennethreitz
0cbcaf9c4f
Code quality improvements and test fixes ( #592 )
...
## Summary
Comprehensive post-v3.0.0 modernization: new features, bug fixes,
dependency cleanup, docs, and test coverage.
**New features:**
- **HTTP method filtering** — `@api.route("/data", methods=["GET"])`
- **Lifespan context manager** — modern async startup/shutdown
- **`api.exception_handler()`** — custom error handling per exception
type
- **`api.graphql()`** — one-liner GraphQL setup
- **`resp.file()`** — serve files from disk with auto content-type
- **before_request short-circuit** — set status code to skip route
handler
- **`req.path_params`** / **`req.client`** / **`req.is_json`** — new
request properties
- **`uuid`** and **`path`** route convertors
- **PEP 561 `py.typed`** marker
**Bug fixes:**
- Fix multipart parser losing headers
- Fix `url_for()` with typed params (`{id:int}`)
- Fix `resp.body` encoding crash on bytes content
- Fix Python 3.9 type syntax (`from __future__ import annotations`)
- Fix broken session test and no-op file upload test
- Fix helloworld example 404 on root path
**Dependencies:**
- Flattened — `pip install responder` gets everything
- Core: just starlette + uvicorn (down from 10 deps)
**Docs & README:**
- All new features documented in tour
- Modernized README features list
- Deployment guide: Docker, cloud, uvicorn
- Removed Pipenv, extras, stale references throughout
**Tests & quality:**
- 117 tests (up from 92), 91% coverage, 0 warnings
- CaseInsensitiveDict, GraphQL edge cases, staticfiles tests
- Ruff clean, all `tmpdir` → `tmp_path`
🤖 Generated with [Claude Code](https://claude.com/claude-code )
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-22 07:44:11 -04:00
Andreas Motl
98ca45003b
Documentation: Badges, linking, wording, inline comments. This and that.
...
A few of the adjustments here have been required to mitigate Sphinx
warnings, which would converge to errors on CI, thus failing the build.
A few other changes, both wording and syntax/formatting fixes, are
coming from regular copyediting and documentation maintenance.
2024-10-27 18:13:13 +01:00
Vincent Barbaresi
86361523e2
fix async templates rendering requiring enable_async in jinja2
...
When trying to test the render_async() feature I realized that it wasn't working
The template instance needs to be created with enable_async=True
2019-10-19 14:49:50 +02:00
taoufik
85c1c0036c
[WIP] Update docs
2019-08-21 22:50:58 +02:00
Taoufik
f21b296fba
Add docs for route params convertors
2019-04-27 20:10:31 +02:00
kobayashi
ebed9fe3aa
fix typos
2019-03-17 19:05:14 -04:00
kobayashi
734b5e7303
add sample of uploading a file
2019-03-17 15:21:27 -04:00
taoufik07
9f39917895
Update docs and README
2019-02-22 01:12:25 +01:00
Edi Santoso
fa621d076d
DOC: Fix quickstart response headers
2018-10-27 00:53:11 +07:00
Dražen Lučanin
237a2ed426
document how to customise the address
2018-10-25 16:43:19 +02:00
Manish P Mathai
148a430da4
Fix typo in quickstart example
2018-10-16 22:36:54 -07:00
Romain Catajar
29e514fea6
Fix typo in quickstart documentation
2018-10-14 15:10:29 +02:00
kennethreitz
b3be767923
upgrades
2018-10-14 08:46:33 -04:00
kennethreitz
e86f2f3873
media()
2018-10-14 08:17:17 -04:00
kennethreitz
6e6bac429a
order
2018-10-14 07:24:48 -04:00
kennethreitz
5f33c6bfee
rendering a template
2018-10-14 07:23:10 -04:00
kennethreitz
b304d5d784
real fix
2018-10-14 07:12:45 -04:00
kennethreitz
cfe83b97d9
fix
2018-10-14 07:12:27 -04:00
kennethreitz
2fec2bf560
response headers
2018-10-14 07:11:14 -04:00
kennethreitz
73dc1a7839
!
2018-10-14 07:02:22 -04:00
kennethreitz
66fe951831
python
2018-10-14 07:01:13 -04:00
kennethreitz
7991bcbf1a
note
2018-10-14 06:59:26 -04:00
kennethreitz
de9516563a
await
2018-10-14 06:58:56 -04:00
kennethreitz
27fefb821c
quickstart
2018-10-14 06:58:14 -04:00
kennethreitz
c195894db9
yaml
2018-10-14 06:57:39 -04:00
kennethreitz
6777b4d370
data
2018-10-14 06:55:54 -04:00
kennethreitz
09269c22a2
fix
2018-10-14 06:46:21 -04:00
kennethreitz
5d9932dd61
more quickstart
2018-10-14 06:44:18 -04:00