Skip to content

Commit 8299cbc

Browse files
authored
Update examples to return Renderable from custom components (pelme#128)
* docs: Return Renderable if possible * examples: Return Renderable if possible * tests: Return Renderable if possible
1 parent 47f1aca commit 8299cbc

14 files changed

Lines changed: 37 additions & 37 deletions

File tree

docs/common-patterns.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ def greeting(request: HttpRequest) -> HttpResponse:
3535
```
3636

3737
```py title="components.py"
38-
from htpy import html, body, h1
38+
from htpy import Renderable, body, html, h1
3939

40-
def greeting_page(*, name: str) -> Element:
40+
def greeting_page(*, name: str) -> Renderable:
4141
return html[body[h1[f"hi {name}!"]]]
4242
```
4343

@@ -70,15 +70,15 @@ A common feature of template languages is to "extend" a base/parent template and
7070
```py title="components.py"
7171
import datetime
7272

73-
from htpy import body, div, h1, head, html, p, title, Node, Element
73+
from htpy import Node, Renderable, body, div, h1, head, html, p, title
7474

7575

7676
def base_layout(*,
7777
page_title: str | None = None,
7878
extra_head: Node = None,
7979
content: Node = None,
8080
body_class: str | None = None,
81-
) -> Element:
81+
) -> Renderable:
8282
return html[
8383
head[title[page_title], extra_head],
8484
body(class_=body_class)[
@@ -88,7 +88,7 @@ def base_layout(*,
8888
]
8989

9090

91-
def index_page() -> Element:
91+
def index_page() -> Renderable:
9292
return base_layout(
9393
page_title="Welcome!",
9494
body_class="green",
@@ -99,7 +99,7 @@ def index_page() -> Element:
9999
)
100100

101101

102-
def about_page() -> Element:
102+
def about_page() -> Renderable:
103103
return base_layout(
104104
page_title="About us",
105105
content=[
@@ -119,10 +119,10 @@ Wrapping [Bootstrap Modal](https://getbootstrap.com/docs/4.0/components/modal/)
119119
```py title="Creating wrapper for Bootstrap Modal"
120120
from markupsafe import Markup
121121

122-
from htpy import Element, Node, button, div, h5, span
122+
from htpy import Node, Renderable, button, div, h5, span
123123

124124

125-
def bootstrap_modal(*, title: str, body: Node = None, footer: Node = None) -> Element:
125+
def bootstrap_modal(*, title: str, body: Node = None, footer: Node = None) -> Renderable:
126126
return div(".modal", tabindex="-1", role="dialog")[
127127
div(".modal-dialog", role="document")[
128128
div(".modal-content")[

docs/django.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,19 +77,19 @@ def my_form(request: HttpRequest) -> HttpResponse:
7777
from django.http import HttpRequest
7878
from django.template.backends.utils import csrf_input
7979

80-
from htpy import Element, Node, body, button, form, h1, head, html, title
80+
from htpy import Node, Renderable, body, button, form, h1, head, html, title
8181

8282
from .forms import MyForm
8383

8484

85-
def base_page(page_title: str, content: Node) -> Element:
85+
def base_page(page_title: str, content: Node) -> Renderable:
8686
return html[
8787
head[title[page_title]],
8888
body[content],
8989
]
9090

9191

92-
def my_form_page(request: HttpRequest, *, my_form: MyForm) -> Element:
92+
def my_form_page(request: HttpRequest, *, my_form: MyForm) -> Renderable:
9393
return base_page(
9494
"My form",
9595
form(method="post")[
@@ -101,7 +101,7 @@ def my_form_page(request: HttpRequest, *, my_form: MyForm) -> Element:
101101
)
102102

103103

104-
def my_form_success_page() -> Element:
104+
def my_form_success_page() -> Renderable:
105105
return base_page(
106106
"Success!",
107107
h1["Success! The form was valid!"],

docs/static-typing.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class User:
1111
self.name = name
1212

1313

14-
def greeting(user: User) -> Element:
14+
def greeting(user: User) -> Renderable:
1515
return h1[f"Hi {user.first_name.capitalize()}!]
1616
# ^^^^^^^^^^
1717
# mypy: error: "User" has no attribute "first_name" [attr-defined]
@@ -80,8 +80,8 @@ or callables.
8080
Use `Node` when you want to create a wrapper function to be flexible with what you accept. This function will accept both a str or some other element to be passed as `contents`:
8181

8282
```python
83-
from htpy import Element, Node, div
83+
from htpy import Node, Renderable, div
8484

85-
def bootstrap_alert(contents: Node) -> Element:
85+
def bootstrap_alert(contents: Node) -> Renderable:
8686
return div(".alert", role="alert")[contents]
8787
```

examples/djangoproject/form/components.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
from django.http import HttpRequest
22
from django.template.backends.utils import csrf_input
33

4-
from htpy import Element, Node, body, button, form, h1, head, html, title
4+
from htpy import Node, Renderable, body, button, form, h1, head, html, title
55

66
from .forms import MyForm
77

88

9-
def base_page(page_title: str, content: Node) -> Element:
9+
def base_page(page_title: str, content: Node) -> Renderable:
1010
return html[
1111
head[title[page_title]],
1212
body[content],
1313
]
1414

1515

16-
def my_form_page(request: HttpRequest, *, my_form: MyForm) -> Element:
16+
def my_form_page(request: HttpRequest, *, my_form: MyForm) -> Renderable:
1717
return base_page(
1818
"My form",
1919
form(method="post")[
@@ -25,7 +25,7 @@ def my_form_page(request: HttpRequest, *, my_form: MyForm) -> Element:
2525
)
2626

2727

28-
def my_form_success_page() -> Element:
28+
def my_form_success_page() -> Renderable:
2929
return base_page(
3030
"Success!",
3131
h1["Success! The form was valid!"],

examples/djangoproject/stream/components.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
from collections.abc import Iterable
22

3-
from htpy import Element, body, h1, head, html, link, table, td, th, title, tr
3+
from htpy import Renderable, body, h1, head, html, link, table, td, th, title, tr
44

55
from .items import Item
66

77

8-
def streaming_table_page(items: Iterable[Item]) -> Element:
8+
def streaming_table_page(items: Iterable[Item]) -> Renderable:
99
return html[
1010
head[
1111
title["Stream example"],

examples/djangoproject/stream/views.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
from django.http import HttpRequest, StreamingHttpResponse
77

8-
from htpy import Element, body, h1, head, html, link, table, td, th, title, tr
8+
from htpy import Renderable, body, h1, head, html, link, table, td, th, title, tr
99

1010

1111
@dataclass
@@ -20,7 +20,7 @@ def generate_items() -> Iterable[Item]:
2020
time.sleep(1)
2121

2222

23-
def streaming_table_page(items: Iterable[Item]) -> Element:
23+
def streaming_table_page(items: Iterable[Item]) -> Renderable:
2424
return html[
2525
head[
2626
title["Stream example"],
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
from typing import Literal
22

3-
from htpy import Element, span
3+
from htpy import Renderable, span
44

55

66
def bootstrap_badge(
77
text: str,
88
style: Literal["success", "danger"],
9-
) -> Element:
9+
) -> Renderable:
1010
return span(f".badge.text-bg-{style}")[text]

examples/static_typing/example_node.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
from htpy import Element, Node, div
1+
from htpy import Node, Renderable, div
22

33

4-
def bootstrap_alert(contents: Node) -> Element:
4+
def bootstrap_alert(contents: Node) -> Renderable:
55
return div(".alert", role="alert")[contents]
66

77

examples/static_typing_example.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
from htpy import Element, h1
1+
from htpy import Renderable, h1
22

33

44
class User:
55
def __init__(self, name: str):
66
self.name = name
77

88

9-
def greeting(user: User) -> Element:
9+
def greeting(user: User) -> Renderable:
1010
return h1[f"Hi {user.first_name.capitalize()}!"]

examples/structure/bootstrap_modal.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
from markupsafe import Markup
22

3-
from htpy import Element, Node, button, div, h5, span
3+
from htpy import Node, Renderable, button, div, h5, span
44

55

6-
def bootstrap_modal(*, title: str, body: Node = None, footer: Node = None) -> Element:
6+
def bootstrap_modal(*, title: str, body: Node = None, footer: Node = None) -> Renderable:
77
return div(".modal", tabindex="-1", role="dialog")[
88
div(".modal-dialog", role="document")[
99
div(".modal-content")[

0 commit comments

Comments
 (0)