Skip to content
This repository was archived by the owner on Aug 19, 2025. It is now read-only.

Commit a482f4e

Browse files
committed
Update example docs
1 parent 9f4a892 commit a482f4e

4 files changed

Lines changed: 42 additions & 42 deletions

File tree

docs/examples.md

Lines changed: 34 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,21 @@ uvicorn
1515
**app.py**
1616

1717
```python
18+
import typesystem
19+
import uvicorn
1820
from starlette.applications import Starlette
1921
from starlette.responses import JSONResponse
2022
from starlette.routing import Route
21-
import typesystem
22-
import uvicorn
2323

2424
users = []
2525

2626

27-
class User(typesystem.Schema):
28-
username = typesystem.String(max_length=100)
29-
is_admin = typesystem.Boolean(default=False)
27+
user_schema = typesystem.Schema(
28+
fields={
29+
"username": typesystem.String(max_length=100),
30+
"is_admin": typesystem.Boolean(default=False),
31+
}
32+
)
3033

3134

3235
async def list_users(request):
@@ -39,7 +42,7 @@ async def add_user(request):
3942
if errors:
4043
return JSONResponse(dict(errors), status_code=400)
4144
users.append(user)
42-
return JSONResponse(dict(user))
45+
return JSONResponse(user)
4346

4447

4548
app = Starlette(debug=True, routes=[
@@ -62,7 +65,7 @@ Using typesystem for a simple Web submission page.
6265

6366
```
6467
aiofiles # Static files support
65-
boostrap4 # Form templates & static files
68+
bootstrap4 # Form templates & static files
6669
jinja2 # Form rendering
6770
python-multipart # Form parsing
6871
starlette
@@ -73,56 +76,55 @@ uvicorn
7376
**app.py**
7477

7578
```python
79+
import typesystem
80+
import uvicorn
7681
from starlette.applications import Starlette
7782
from starlette.responses import RedirectResponse
78-
from starlette.routing import Route, Mount
83+
from starlette.routing import Mount, Route
7984
from starlette.staticfiles import StaticFiles
8085
from starlette.templating import Jinja2Templates
81-
import typesystem
82-
import uvicorn
8386

8487
forms = typesystem.Jinja2Forms(package="bootstrap4")
8588
templates = Jinja2Templates(directory="templates")
8689
statics = StaticFiles(directory="statics", packages=["bootstrap4"])
8790
bookings = []
8891

8992

90-
class BookingSchema(typesystem.Schema):
91-
start_date = typesystem.Date(title="Start date")
92-
end_date = typesystem.Date(title="End date")
93-
room = typesystem.Choice(
94-
title="Room type",
95-
choices=[
96-
("double", "Double room"),
97-
("twin", "Twin room"),
98-
("single", "Single room"),
99-
],
100-
)
101-
include_breakfast = typesystem.Boolean(title="Include breakfast", default=False)
102-
103-
def __str__(self):
104-
breakfast = (
105-
"(with breakfast)" if self.include_breakfast else "(without breakfast)"
106-
)
107-
return f"Booking for {self.room} from {self.start_date} to {self.end_date}"
93+
booking_schema = typesystem.Schema(
94+
fields={
95+
"start_date": typesystem.Date(title="Start date"),
96+
"end_date": typesystem.Date(title="End date"),
97+
"room": typesystem.Choice(
98+
title="Room type",
99+
choices=[
100+
("double", "Double room"),
101+
("twin", "Twin room"),
102+
("single", "Single room"),
103+
],
104+
),
105+
"include_breakfast": typesystem.Boolean(
106+
title="Include breakfast", default=False
107+
),
108+
}
109+
)
108110

109111

110112
async def homepage(request):
111-
form = forms.Form(BookingSchema)
113+
form = forms.create_form(booking_schema)
112114
context = {"request": request, "form": form, "bookings": bookings}
113115
return templates.TemplateResponse("index.html", context)
114116

115117

116118
async def make_booking(request):
117119
data = await request.form()
118-
booking, errors = BookingSchema.validate_or_error(data)
120+
booking, errors = booking_schema.validate_or_error(data)
119121
if errors:
120-
form = forms.Form(BookingSchema, values=data, errors=errors)
122+
form = forms.create_form(booking_schema)
121123
context = {"request": request, "form": form, "bookings": bookings}
122124
return templates.TemplateResponse("index.html", context)
123125

124126
bookings.append(booking)
125-
return RedirectResponse(request.url_for("homepage"))
127+
return RedirectResponse(request.url_for("homepage"), status_code=303)
126128

127129

128130
app = Starlette(

examples/api/app.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1+
import typesystem
12
import uvicorn
23
from starlette.applications import Starlette
34
from starlette.responses import JSONResponse
45
from starlette.routing import Route
56

6-
import typesystem
7-
87
users = []
98

109

@@ -26,7 +25,7 @@ async def add_user(request):
2625
if errors:
2726
return JSONResponse(dict(errors), status_code=400)
2827
users.append(user)
29-
return JSONResponse(dict(user))
28+
return JSONResponse(user)
3029

3130

3231
app = Starlette(

examples/form/app.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1+
import typesystem
12
import uvicorn
23
from starlette.applications import Starlette
34
from starlette.responses import RedirectResponse
45
from starlette.routing import Mount, Route
56
from starlette.staticfiles import StaticFiles
67
from starlette.templating import Jinja2Templates
78

8-
import typesystem
9-
109
forms = typesystem.Jinja2Forms(package="bootstrap4")
1110
templates = Jinja2Templates(directory="templates")
1211
statics = StaticFiles(directory="statics", packages=["bootstrap4"])

tests/test_definitions.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ def test_string_references():
7676
}
7777
)
7878

79-
value = example_a.validate({"field_on_a": "123", "example_b": {"field_on_b": 456}})
80-
assert value == {"field_on_a": 123, "example_b": {"field_on_b": 456}}
79+
value = example_a.validate({"field_on_a": "123", "example_b": {"field_on_b": "456"}})
80+
assert value == {"field_on_a": 123, "example_b": {"field_on_b": "456"}}
8181

8282
example_d = typesystem.Schema(fields={"field_on_d": typesystem.Integer()})
8383

@@ -93,7 +93,7 @@ def test_string_references():
9393
)
9494

9595
value = example_c.validate(
96-
{"field_on_c": "123", "example_d": [{"field_on_d": 456}]}
96+
{"field_on_c": "123", "example_d": [{"field_on_d": "456"}]}
9797
)
9898
assert value == {"field_on_c": 123, "example_d": [{"field_on_d": 456}]}
9999

@@ -111,7 +111,7 @@ def test_string_references():
111111
)
112112

113113
value = example_e.validate(
114-
{"field_on_e": "123", "example_f": [{"field_on_f": 456}]}
114+
{"field_on_e": "123", "example_f": [{"field_on_f": "456"}]}
115115
)
116116
assert value == {"field_on_e": 123, "example_f": [{"field_on_f": 456}]}
117117

@@ -131,6 +131,6 @@ def test_string_references():
131131
)
132132

133133
value = example_g.validate(
134-
{"field_on_g": 123, "example_h": {"h": {"field_on_h": 456}}}
134+
{"field_on_g": "123", "example_h": {"h": {"field_on_h": "456"}}}
135135
)
136136
assert value == {"field_on_g": 123, "example_h": {"h": {"field_on_h": 456}}}

0 commit comments

Comments
 (0)