Skip to content

Commit c81fec5

Browse files
committed
LayoutType -> BaseLayout
1 parent 30a8bf6 commit c81fec5

File tree

3 files changed

+29
-32
lines changed

3 files changed

+29
-32
lines changed

src/reactpy/core/layout.py

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from __future__ import annotations
22

3-
import abc
43
from asyncio import (
54
FIRST_COMPLETED,
65
CancelledError,
@@ -37,6 +36,7 @@
3736
from reactpy.core._life_cycle_hook import LifeCycleHook
3837
from reactpy.core.vdom import validate_vdom_json
3938
from reactpy.types import (
39+
BaseLayout,
4040
Component,
4141
Context,
4242
ContextProvider,
@@ -54,22 +54,7 @@
5454
logger = getLogger(__name__)
5555

5656

57-
class Layout:
58-
"""Responsible for "rendering" components. That is, turning them into VDOM."""
59-
60-
__slots__: tuple[str, ...] = (
61-
"_event_handlers",
62-
"_model_states_by_life_cycle_state_id",
63-
"_render_tasks",
64-
"_render_tasks_ready",
65-
"_rendering_queue",
66-
"_root_life_cycle_state_id",
67-
"root",
68-
)
69-
70-
if not hasattr(abc.ABC, "__weakref__"): # nocov
71-
__slots__ += ("__weakref__",)
72-
57+
class Layout(BaseLayout):
7358
def __init__(self, root: Component | Context[Any] | ContextProvider[Any]) -> None:
7459
super().__init__()
7560
if not isinstance(root, Component):

src/reactpy/core/serve.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
from reactpy.config import REACTPY_DEBUG
1111
from reactpy.core._life_cycle_hook import HOOK_STACK
12-
from reactpy.types import LayoutEventMessage, LayoutType, LayoutUpdateMessage
12+
from reactpy.types import BaseLayout, LayoutEventMessage, LayoutUpdateMessage
1313

1414
logger = getLogger(__name__)
1515

@@ -25,7 +25,7 @@
2525

2626

2727
async def serve_layout(
28-
layout: LayoutType[
28+
layout: BaseLayout[
2929
LayoutUpdateMessage | dict[str, Any], LayoutEventMessage | dict[str, Any]
3030
],
3131
send: SendCoroutine,
@@ -39,7 +39,7 @@ async def serve_layout(
3939

4040

4141
async def _single_outgoing_loop(
42-
layout: LayoutType[
42+
layout: BaseLayout[
4343
LayoutUpdateMessage | dict[str, Any], LayoutEventMessage | dict[str, Any]
4444
],
4545
send: SendCoroutine,
@@ -65,7 +65,7 @@ async def _single_outgoing_loop(
6565

6666
async def _single_incoming_loop(
6767
task_group: TaskGroup,
68-
layout: LayoutType[
68+
layout: BaseLayout[
6969
LayoutUpdateMessage | dict[str, Any], LayoutEventMessage | dict[str, Any]
7070
],
7171
recv: RecvCoroutine,

src/reactpy/types.py

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
TypeAlias,
1414
TypeVar,
1515
overload,
16-
runtime_checkable,
1716
)
1817

1918
from typing_extensions import NamedTuple, NotRequired, TypedDict, Unpack
@@ -76,23 +75,35 @@ def __repr__(self) -> str:
7675
_Event_contra = TypeVar("_Event_contra", contravariant=True)
7776

7877

79-
@runtime_checkable
80-
class LayoutType(Protocol[_Render_co, _Event_contra]):
81-
"""Renders and delivers, updates to views and events to handlers, respectively"""
78+
class BaseLayout(Protocol[_Render_co, _Event_contra]):
79+
"""Renders and delivers views, and submits events to handlers."""
80+
81+
__slots__: tuple[str, ...] = (
82+
"__weakref__",
83+
"_event_handlers",
84+
"_model_states_by_life_cycle_state_id",
85+
"_render_tasks",
86+
"_render_tasks_ready",
87+
"_rendering_queue",
88+
"_root_life_cycle_state_id",
89+
"root",
90+
)
8291

8392
async def render(
8493
self,
85-
) -> _Render_co: ... # Render an update to a view
94+
) -> _Render_co:
95+
"""Render an update to a view"""
96+
...
8697

87-
async def deliver(
88-
self, event: _Event_contra
89-
) -> None: ... # Relay an event to its respective handler
98+
async def deliver(self, event: _Event_contra) -> None:
99+
"""Relay an event to its respective handler"""
100+
...
90101

91102
async def __aenter__(
92103
self,
93-
) -> LayoutType[
94-
_Render_co, _Event_contra
95-
]: ... # Prepare the layout for its first render
104+
) -> BaseLayout[_Render_co, _Event_contra]:
105+
"""Prepare the layout for its first render"""
106+
...
96107

97108
async def __aexit__(
98109
self,
@@ -101,6 +112,7 @@ async def __aexit__(
101112
traceback: TracebackType,
102113
) -> bool | None:
103114
"""Clean up the view after its final render"""
115+
...
104116

105117

106118
class CssStyleTypeDict(TypedDict, total=False):

0 commit comments

Comments
 (0)