pulse-framework 0.1.75__tar.gz → 0.1.76__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/PKG-INFO +1 -1
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/pyproject.toml +1 -1
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/__init__.py +12 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/channel.py +6 -3
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/dom/props.py +2 -0
- pulse_framework-0.1.76/src/pulse/refs.py +893 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/render_session.py +27 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/renderer.py +23 -1
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/transpiler/vdom.py +12 -1
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/README.md +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/_examples.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/app.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/cli/__init__.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/cli/cmd.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/cli/dependencies.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/cli/folder_lock.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/cli/helpers.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/cli/logging.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/cli/models.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/cli/packages.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/cli/processes.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/cli/secrets.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/cli/uvicorn_log_config.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/code_analysis.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/codegen/__init__.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/codegen/codegen.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/codegen/templates/__init__.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/codegen/templates/layout.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/codegen/templates/route.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/codegen/templates/routes_ts.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/codegen/utils.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/component.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/components/__init__.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/components/for_.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/components/if_.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/components/react_router.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/context.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/cookies.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/debounce.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/decorators.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/dom/__init__.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/dom/elements.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/dom/events.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/dom/svg.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/dom/tags.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/dom/tags.pyi +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/env.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/forms.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/helpers.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/hooks/__init__.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/hooks/core.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/hooks/effects.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/hooks/init.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/hooks/runtime.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/hooks/setup.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/hooks/stable.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/hooks/state.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/__init__.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/__init__.pyi +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/_types.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/abort_controller.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/array.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/array_buffer.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/blob.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/console.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/crypto.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/custom_event.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/date.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/document.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/dom_parser.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/error.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/fetch_api.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/file.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/file_reader.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/form_data.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/intersection_observer.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/intl.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/json.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/map.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/math.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/mutation_observer.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/navigator.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/number.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/obj.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/object.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/performance_observer.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/promise.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/pulse.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/react.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/regexp.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/resize_observer.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/set.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/string.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/text_encoding.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/url.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/weakmap.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/weakset.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/js/window.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/messages.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/middleware.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/plugin.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/proxy.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/py.typed +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/queries/__init__.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/queries/client.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/queries/common.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/queries/effect.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/queries/infinite_query.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/queries/mutation.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/queries/protocol.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/queries/query.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/queries/store.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/react_component.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/reactive.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/reactive_extensions.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/request.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/requirements.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/routing.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/scheduling.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/serializer.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/state/__init__.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/state/property.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/state/query_param.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/state/state.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/test_helpers.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/transpiler/__init__.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/transpiler/assets.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/transpiler/builtins.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/transpiler/dynamic_import.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/transpiler/emit_context.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/transpiler/errors.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/transpiler/function.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/transpiler/id.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/transpiler/imports.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/transpiler/js_module.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/transpiler/modules/__init__.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/transpiler/modules/asyncio.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/transpiler/modules/json.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/transpiler/modules/math.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/transpiler/modules/pulse/__init__.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/transpiler/modules/pulse/tags.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/transpiler/modules/typing.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/transpiler/nodes.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/transpiler/parse.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/transpiler/py_module.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/transpiler/transpiler.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/types/__init__.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/types/event_handler.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/user_session.py +0 -0
- {pulse_framework-0.1.75 → pulse_framework-0.1.76}/src/pulse/version.py +0 -0
|
@@ -1409,6 +1409,18 @@ from pulse.reactive_extensions import (
|
|
|
1409
1409
|
from pulse.reactive_extensions import (
|
|
1410
1410
|
unwrap as unwrap,
|
|
1411
1411
|
)
|
|
1412
|
+
from pulse.refs import (
|
|
1413
|
+
RefHandle as RefHandle,
|
|
1414
|
+
)
|
|
1415
|
+
from pulse.refs import (
|
|
1416
|
+
RefNotMounted as RefNotMounted,
|
|
1417
|
+
)
|
|
1418
|
+
from pulse.refs import (
|
|
1419
|
+
RefTimeout as RefTimeout,
|
|
1420
|
+
)
|
|
1421
|
+
from pulse.refs import (
|
|
1422
|
+
ref as ref,
|
|
1423
|
+
)
|
|
1412
1424
|
|
|
1413
1425
|
# JavaScript execution
|
|
1414
1426
|
from pulse.render_session import JsExecError as JsExecError
|
|
@@ -81,7 +81,9 @@ class ChannelsManager:
|
|
|
81
81
|
self.pending_requests = {}
|
|
82
82
|
|
|
83
83
|
# ------------------------------------------------------------------
|
|
84
|
-
def create(
|
|
84
|
+
def create(
|
|
85
|
+
self, identifier: str | None = None, *, bind_route: bool = True
|
|
86
|
+
) -> "Channel":
|
|
85
87
|
ctx = PulseContext.get()
|
|
86
88
|
render = ctx.render
|
|
87
89
|
session = ctx.session
|
|
@@ -93,7 +95,7 @@ class ChannelsManager:
|
|
|
93
95
|
raise ValueError(f"Channel id '{channel_id}' is already in use")
|
|
94
96
|
|
|
95
97
|
route_path: str | None = None
|
|
96
|
-
if ctx.route is not None:
|
|
98
|
+
if bind_route and ctx.route is not None:
|
|
97
99
|
# unique_path() returns absolute path, use as-is for keys
|
|
98
100
|
route_path = ctx.route.pulse_route.unique_path()
|
|
99
101
|
|
|
@@ -129,7 +131,8 @@ class ChannelsManager:
|
|
|
129
131
|
if not response_to:
|
|
130
132
|
return
|
|
131
133
|
|
|
132
|
-
|
|
134
|
+
error = message.get("error")
|
|
135
|
+
if error is not None:
|
|
133
136
|
self.resolve_pending_error(response_to, error)
|
|
134
137
|
else:
|
|
135
138
|
self._resolve_pending_success(response_to, message.get("payload"))
|
|
@@ -68,6 +68,7 @@ from pulse.dom.events import (
|
|
|
68
68
|
TextAreaDOMEvents,
|
|
69
69
|
)
|
|
70
70
|
from pulse.helpers import CSSProperties
|
|
71
|
+
from pulse.refs import RefHandle
|
|
71
72
|
from pulse.transpiler.nodes import Expr
|
|
72
73
|
|
|
73
74
|
Booleanish = Literal[True, False, "true", "false"]
|
|
@@ -82,6 +83,7 @@ class BaseHTMLProps(TypedDict, total=False):
|
|
|
82
83
|
defaultValue: str | int | list[str]
|
|
83
84
|
suppressContentEditableWarning: bool
|
|
84
85
|
suppressHydrationWarning: bool
|
|
86
|
+
ref: RefHandle[Any]
|
|
85
87
|
|
|
86
88
|
# Standard HTML Attributes
|
|
87
89
|
accessKey: str
|