pulse-framework 0.1.62__py3-none-any.whl
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/__init__.py +1493 -0
- pulse/_examples.py +29 -0
- pulse/app.py +1086 -0
- pulse/channel.py +607 -0
- pulse/cli/__init__.py +0 -0
- pulse/cli/cmd.py +575 -0
- pulse/cli/dependencies.py +181 -0
- pulse/cli/folder_lock.py +134 -0
- pulse/cli/helpers.py +271 -0
- pulse/cli/logging.py +102 -0
- pulse/cli/models.py +35 -0
- pulse/cli/packages.py +262 -0
- pulse/cli/processes.py +292 -0
- pulse/cli/secrets.py +39 -0
- pulse/cli/uvicorn_log_config.py +87 -0
- pulse/code_analysis.py +38 -0
- pulse/codegen/__init__.py +0 -0
- pulse/codegen/codegen.py +359 -0
- pulse/codegen/templates/__init__.py +0 -0
- pulse/codegen/templates/layout.py +106 -0
- pulse/codegen/templates/route.py +345 -0
- pulse/codegen/templates/routes_ts.py +42 -0
- pulse/codegen/utils.py +20 -0
- pulse/component.py +237 -0
- pulse/components/__init__.py +0 -0
- pulse/components/for_.py +83 -0
- pulse/components/if_.py +86 -0
- pulse/components/react_router.py +94 -0
- pulse/context.py +108 -0
- pulse/cookies.py +322 -0
- pulse/decorators.py +344 -0
- pulse/dom/__init__.py +0 -0
- pulse/dom/elements.py +1024 -0
- pulse/dom/events.py +445 -0
- pulse/dom/props.py +1250 -0
- pulse/dom/svg.py +0 -0
- pulse/dom/tags.py +328 -0
- pulse/dom/tags.pyi +480 -0
- pulse/env.py +178 -0
- pulse/form.py +538 -0
- pulse/helpers.py +541 -0
- pulse/hooks/__init__.py +0 -0
- pulse/hooks/core.py +452 -0
- pulse/hooks/effects.py +88 -0
- pulse/hooks/init.py +668 -0
- pulse/hooks/runtime.py +464 -0
- pulse/hooks/setup.py +254 -0
- pulse/hooks/stable.py +138 -0
- pulse/hooks/state.py +192 -0
- pulse/js/__init__.py +125 -0
- pulse/js/__init__.pyi +115 -0
- pulse/js/_types.py +299 -0
- pulse/js/array.py +339 -0
- pulse/js/console.py +50 -0
- pulse/js/date.py +119 -0
- pulse/js/document.py +145 -0
- pulse/js/error.py +140 -0
- pulse/js/json.py +66 -0
- pulse/js/map.py +97 -0
- pulse/js/math.py +69 -0
- pulse/js/navigator.py +79 -0
- pulse/js/number.py +57 -0
- pulse/js/obj.py +81 -0
- pulse/js/object.py +172 -0
- pulse/js/promise.py +172 -0
- pulse/js/pulse.py +115 -0
- pulse/js/react.py +495 -0
- pulse/js/regexp.py +57 -0
- pulse/js/set.py +124 -0
- pulse/js/string.py +38 -0
- pulse/js/weakmap.py +53 -0
- pulse/js/weakset.py +48 -0
- pulse/js/window.py +205 -0
- pulse/messages.py +202 -0
- pulse/middleware.py +471 -0
- pulse/plugin.py +96 -0
- pulse/proxy.py +242 -0
- pulse/py.typed +0 -0
- pulse/queries/__init__.py +0 -0
- pulse/queries/client.py +609 -0
- pulse/queries/common.py +101 -0
- pulse/queries/effect.py +55 -0
- pulse/queries/infinite_query.py +1418 -0
- pulse/queries/mutation.py +295 -0
- pulse/queries/protocol.py +136 -0
- pulse/queries/query.py +1314 -0
- pulse/queries/store.py +120 -0
- pulse/react_component.py +88 -0
- pulse/reactive.py +1208 -0
- pulse/reactive_extensions.py +1172 -0
- pulse/render_session.py +768 -0
- pulse/renderer.py +584 -0
- pulse/request.py +205 -0
- pulse/routing.py +598 -0
- pulse/serializer.py +279 -0
- pulse/state.py +556 -0
- pulse/test_helpers.py +15 -0
- pulse/transpiler/__init__.py +111 -0
- pulse/transpiler/assets.py +81 -0
- pulse/transpiler/builtins.py +1029 -0
- pulse/transpiler/dynamic_import.py +130 -0
- pulse/transpiler/emit_context.py +49 -0
- pulse/transpiler/errors.py +96 -0
- pulse/transpiler/function.py +611 -0
- pulse/transpiler/id.py +18 -0
- pulse/transpiler/imports.py +341 -0
- pulse/transpiler/js_module.py +336 -0
- pulse/transpiler/modules/__init__.py +33 -0
- pulse/transpiler/modules/asyncio.py +57 -0
- pulse/transpiler/modules/json.py +24 -0
- pulse/transpiler/modules/math.py +265 -0
- pulse/transpiler/modules/pulse/__init__.py +5 -0
- pulse/transpiler/modules/pulse/tags.py +250 -0
- pulse/transpiler/modules/typing.py +63 -0
- pulse/transpiler/nodes.py +1987 -0
- pulse/transpiler/py_module.py +135 -0
- pulse/transpiler/transpiler.py +1100 -0
- pulse/transpiler/vdom.py +256 -0
- pulse/types/__init__.py +0 -0
- pulse/types/event_handler.py +50 -0
- pulse/user_session.py +386 -0
- pulse/version.py +69 -0
- pulse_framework-0.1.62.dist-info/METADATA +198 -0
- pulse_framework-0.1.62.dist-info/RECORD +126 -0
- pulse_framework-0.1.62.dist-info/WHEEL +4 -0
- pulse_framework-0.1.62.dist-info/entry_points.txt +3 -0
pulse/version.py
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Pulse package version indicator.
|
|
3
|
+
|
|
4
|
+
This module exposes `__version__` which is guaranteed to match the
|
|
5
|
+
distribution version declared in `pyproject.toml` when installed.
|
|
6
|
+
|
|
7
|
+
During editable/development usage (when importlib.metadata cannot find the
|
|
8
|
+
installed distribution), we fall back to reading the nearby `pyproject.toml`
|
|
9
|
+
to keep version information consistent without duplication.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
from importlib.metadata import PackageNotFoundError
|
|
15
|
+
from importlib.metadata import version as _pkg_version
|
|
16
|
+
from pathlib import Path
|
|
17
|
+
|
|
18
|
+
__all__ = ["__version__"]
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _read_local_pyproject_version() -> str | None:
|
|
22
|
+
"""Best-effort read of version from a local pyproject.toml (dev/editable).
|
|
23
|
+
|
|
24
|
+
Searches upwards from this file to find `packages/pulse/python/pyproject.toml` and
|
|
25
|
+
parses the minimal `version = "x.y.z"` line without importing tomllib to
|
|
26
|
+
avoid unnecessary dependency at runtime.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
try:
|
|
30
|
+
here = Path(__file__).resolve()
|
|
31
|
+
root = (
|
|
32
|
+
here.parent.parent.parent
|
|
33
|
+
) # packages/pulse/python/src/pulse -> packages/pulse/python
|
|
34
|
+
pyproject = root / "pyproject.toml"
|
|
35
|
+
if not pyproject.exists():
|
|
36
|
+
return None
|
|
37
|
+
for line in pyproject.read_text().splitlines():
|
|
38
|
+
line = line.strip()
|
|
39
|
+
if line.startswith("version") and "=" in line:
|
|
40
|
+
# naive parse: version = "0.0.0"
|
|
41
|
+
try:
|
|
42
|
+
_, rhs = line.split("=", 1)
|
|
43
|
+
rhs = rhs.strip().strip("\"'")
|
|
44
|
+
if rhs:
|
|
45
|
+
return rhs
|
|
46
|
+
except Exception:
|
|
47
|
+
return None
|
|
48
|
+
return None
|
|
49
|
+
except Exception:
|
|
50
|
+
return None
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def _version() -> str:
|
|
54
|
+
# Primary: installed distribution metadata
|
|
55
|
+
try:
|
|
56
|
+
return _pkg_version("pulse-framework")
|
|
57
|
+
except PackageNotFoundError:
|
|
58
|
+
pass
|
|
59
|
+
|
|
60
|
+
# Fallback: local pyproject during dev/editable installs
|
|
61
|
+
local = _read_local_pyproject_version()
|
|
62
|
+
if local:
|
|
63
|
+
return local
|
|
64
|
+
|
|
65
|
+
# Last resort to avoid exceptions (should not happen in practice)
|
|
66
|
+
return "0.0.0"
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
__version__: str = _version()
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
|
+
Name: pulse-framework
|
|
3
|
+
Version: 0.1.62
|
|
4
|
+
Summary: Pulse - Full-stack framework for building real-time React applications in Python
|
|
5
|
+
Requires-Dist: websockets>=12.0
|
|
6
|
+
Requires-Dist: fastapi>=0.128.0
|
|
7
|
+
Requires-Dist: uvicorn>=0.24.0
|
|
8
|
+
Requires-Dist: mako>=1.3.10
|
|
9
|
+
Requires-Dist: typer>=0.16.0
|
|
10
|
+
Requires-Dist: python-socketio>=5.16.0
|
|
11
|
+
Requires-Dist: rich>=13.7.1
|
|
12
|
+
Requires-Dist: python-multipart>=0.0.20
|
|
13
|
+
Requires-Dist: python-dateutil>=2.9.0.post0
|
|
14
|
+
Requires-Dist: starlette>=0.50.0,<0.51.0
|
|
15
|
+
Requires-Dist: urllib3>=2.6.3
|
|
16
|
+
Requires-Dist: watchfiles>=1.1.0
|
|
17
|
+
Requires-Dist: httpx>=0.28.1
|
|
18
|
+
Requires-Python: >=3.11
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
|
|
21
|
+
# Pulse Python
|
|
22
|
+
|
|
23
|
+
Core Python framework for building full-stack reactive web apps with React frontends.
|
|
24
|
+
|
|
25
|
+
## Architecture
|
|
26
|
+
|
|
27
|
+
Server-driven UI model: Python components render to VDOM, synced to React via WebSocket. State changes trigger re-renders; diffs are sent to client.
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
31
|
+
│ Python Server │
|
|
32
|
+
│ ┌──────────┐ ┌───────────────┐ ┌──────────────────────────┐ │
|
|
33
|
+
│ │ App │──│ RenderSession │──│ VDOM Renderer │ │
|
|
34
|
+
│ │ (FastAPI)│ │ (per browser) │ │ (diff & serialize) │ │
|
|
35
|
+
│ └──────────┘ └───────────────┘ └──────────────────────────┘ │
|
|
36
|
+
│ │ │ │ │
|
|
37
|
+
│ │ ┌──────┴───────┐ │ │
|
|
38
|
+
│ │ │ Hooks │ │ │
|
|
39
|
+
│ │ │ (state/setup)│ │ │
|
|
40
|
+
│ │ └──────────────┘ │ │
|
|
41
|
+
└───────┼───────────────────────────────────────┼─────────────────┘
|
|
42
|
+
│ Socket.IO │ VDOM updates
|
|
43
|
+
▼ ▼
|
|
44
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
45
|
+
│ Browser (React) │
|
|
46
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Folder Structure
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
src/pulse/
|
|
53
|
+
├── app.py # Main App class, FastAPI + Socket.IO setup
|
|
54
|
+
├── channel.py # Bidirectional real-time channels
|
|
55
|
+
├── routing.py # Route/Layout definitions, URL matching
|
|
56
|
+
├── vdom.py # VDOM node types (Element, Component, Node)
|
|
57
|
+
├── renderer.py # VDOM rendering and diffing
|
|
58
|
+
├── render_session.py # Per-browser session, manages mounted routes
|
|
59
|
+
├── reactive.py # Signal/Computed/Effect primitives
|
|
60
|
+
├── reactive_extensions.py # ReactiveList, ReactiveDict, ReactiveSet
|
|
61
|
+
├── state.py # State management
|
|
62
|
+
├── serializer.py # Python<->JSON serialization
|
|
63
|
+
├── middleware.py # Request middleware (prerender, connect, message)
|
|
64
|
+
├── plugin.py # Plugin interface for extensions
|
|
65
|
+
├── form.py # Form handling
|
|
66
|
+
├── context.py # PulseContext (request/session context)
|
|
67
|
+
├── cookies.py # Cookie management
|
|
68
|
+
├── request.py # PulseRequest abstraction
|
|
69
|
+
├── user_session.py # User session storage
|
|
70
|
+
├── helpers.py # Utilities (CSSProperties, later, repeat)
|
|
71
|
+
├── decorators.py # @computed, @effect decorators
|
|
72
|
+
├── messages.py # Client<->server message types
|
|
73
|
+
├── react_component.py # ReactComponent wrapper for JS libraries
|
|
74
|
+
│
|
|
75
|
+
├── hooks/ # Server-side hooks (like React hooks)
|
|
76
|
+
│ ├── core.py # Hook registry, HooksAPI
|
|
77
|
+
│ ├── runtime.py # session(), route(), navigate(), redirect()
|
|
78
|
+
│ ├── states.py # Reactive state hook
|
|
79
|
+
│ ├── effects.py # Side effects hook
|
|
80
|
+
│ ├── setup.py # Initialization hook
|
|
81
|
+
│ ├── init.py # One-time setup hook
|
|
82
|
+
│ └── stable.py # Memoization hook
|
|
83
|
+
│
|
|
84
|
+
├── queries/ # Data fetching (like TanStack Query)
|
|
85
|
+
│ ├── query.py # @query decorator
|
|
86
|
+
│ ├── mutation.py # @mutation decorator
|
|
87
|
+
│ ├── infinite_query.py # Pagination support
|
|
88
|
+
│ ├── client.py # QueryClient for cache management
|
|
89
|
+
│ └── store.py # Query state store
|
|
90
|
+
│
|
|
91
|
+
├── components/ # Built-in components
|
|
92
|
+
│ ├── for_.py # <For> loop component
|
|
93
|
+
│ ├── if_.py # <If> conditional component
|
|
94
|
+
│ └── react_router.py # Link, Outlet for routing
|
|
95
|
+
│
|
|
96
|
+
├── html/ # HTML element bindings
|
|
97
|
+
│ ├── tags.py # div, span, button, etc.
|
|
98
|
+
│ ├── props.py # Typed props for HTML elements
|
|
99
|
+
│ ├── events.py # Event types (MouseEvent, etc.)
|
|
100
|
+
│ └── elements.py # Element type definitions
|
|
101
|
+
│
|
|
102
|
+
├── transpiler/ # Python->JS transpilation
|
|
103
|
+
│ ├── function.py # JsFunction, @javascript decorator
|
|
104
|
+
│ └── imports.py # Import/CssImport for client-side JS
|
|
105
|
+
│
|
|
106
|
+
├── codegen/ # Code generation for React Router
|
|
107
|
+
│ ├── codegen.py # Generates routes.ts, loaders
|
|
108
|
+
│ └── templates/ # Mako templates for generated code
|
|
109
|
+
│
|
|
110
|
+
├── cli/ # Command-line interface
|
|
111
|
+
│ ├── cmd.py # pulse run, pulse build
|
|
112
|
+
│ └── processes.py # Dev server process management
|
|
113
|
+
│
|
|
114
|
+
└── js/ # JS API stubs for transpilation
|
|
115
|
+
├── window.py, document.py, navigator.py
|
|
116
|
+
├── array.py, object.py, string.py
|
|
117
|
+
└── ...
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Key Concepts
|
|
121
|
+
|
|
122
|
+
### App
|
|
123
|
+
|
|
124
|
+
Entry point defining routes, middleware, plugins.
|
|
125
|
+
|
|
126
|
+
```python
|
|
127
|
+
import pulse as ps
|
|
128
|
+
|
|
129
|
+
app = ps.App(routes=[
|
|
130
|
+
ps.Route("/", home),
|
|
131
|
+
ps.Layout("/dashboard", layout, children=[
|
|
132
|
+
ps.Route("/", dashboard),
|
|
133
|
+
]),
|
|
134
|
+
])
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Components
|
|
138
|
+
|
|
139
|
+
Functions returning VDOM. Use `@ps.component` for stateful components.
|
|
140
|
+
|
|
141
|
+
```python
|
|
142
|
+
def greeting(name: str):
|
|
143
|
+
return ps.div(f"Hello, {name}!")
|
|
144
|
+
|
|
145
|
+
@ps.component
|
|
146
|
+
def counter():
|
|
147
|
+
count = ps.states.use(0)
|
|
148
|
+
return ps.button(f"Count: {count()}", onClick=lambda _: count.set(count() + 1))
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Reactivity
|
|
152
|
+
|
|
153
|
+
- `Signal[T]` - reactive value
|
|
154
|
+
- `Computed[T]` - derived value
|
|
155
|
+
- `Effect` - side effect on change
|
|
156
|
+
|
|
157
|
+
### Hooks
|
|
158
|
+
|
|
159
|
+
Server-side hooks via `ps.state`, `ps.effect`, `ps.setup`:
|
|
160
|
+
- `ps.state(StateClass)` - reactive state (auto-keyed by callsite; use `key=` for manual control)
|
|
161
|
+
- `@ps.effect` - side effects decorator
|
|
162
|
+
- `ps.setup(fn)` - one-time initialization
|
|
163
|
+
|
|
164
|
+
### Queries
|
|
165
|
+
|
|
166
|
+
Data fetching with caching:
|
|
167
|
+
|
|
168
|
+
```python
|
|
169
|
+
@ps.query
|
|
170
|
+
async def fetch_user(id: str):
|
|
171
|
+
return await db.get_user(id)
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### Channels
|
|
175
|
+
|
|
176
|
+
Bidirectional real-time messaging:
|
|
177
|
+
|
|
178
|
+
```python
|
|
179
|
+
ch = ps.channel("chat")
|
|
180
|
+
|
|
181
|
+
@ch.on("message")
|
|
182
|
+
def handle_message(data):
|
|
183
|
+
ch.broadcast("new_message", data)
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Main Exports
|
|
187
|
+
|
|
188
|
+
- `App`, `Route`, `Layout` - app/routing
|
|
189
|
+
- `component` - server-side component decorator
|
|
190
|
+
- `states`, `effects`, `setup`, `init` - hooks
|
|
191
|
+
- `query`, `mutation`, `infinite_query` - data fetching
|
|
192
|
+
- `channel` - real-time channels
|
|
193
|
+
- `State`, `@computed`, `@effect` - reactivity
|
|
194
|
+
- `ReactiveList`, `ReactiveDict`, `ReactiveSet` - reactive containers
|
|
195
|
+
- `div`, `span`, `button`, ... - HTML elements
|
|
196
|
+
- `For`, `If`, `Link`, `Outlet` - built-in components
|
|
197
|
+
- `@react_component` - wrap JS components
|
|
198
|
+
- `@javascript` - transpile Python to JS
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
pulse/__init__.py,sha256=_7WUYtxNI78XXdnVu0CFTxRInlCEaP1tGEf-WXMU48I,31993
|
|
2
|
+
pulse/_examples.py,sha256=dFuhD2EVXsbvAeexoG57s4VuN4gWLaTMOEMNYvlPm9A,561
|
|
3
|
+
pulse/app.py,sha256=KnP6U8uHgfBbFMguDcVk0KgjakY1UC1NJk2rS5l6Sas,35145
|
|
4
|
+
pulse/channel.py,sha256=sQrDLh3k9Z8CyJQkEHzKu4h-yR4XSTgAA3OCQax3Ciw,15766
|
|
5
|
+
pulse/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
pulse/cli/cmd.py,sha256=zh3Ah6c16cNg3o_v_If_S58Qe8rvxNe5M2VrTkwvDU8,15957
|
|
7
|
+
pulse/cli/dependencies.py,sha256=ezFw-7YWnJcvB1k25b0nB_OaOaP-EKtleNtBE2oJUUk,4603
|
|
8
|
+
pulse/cli/folder_lock.py,sha256=-AKld2iM91G0uHB3F5ARD0QAjOw0TmsYYGaFgy_V350,3477
|
|
9
|
+
pulse/cli/helpers.py,sha256=XXRRXeGFgeq-jbp0QGFFVq_aGg_Kp7_AkYsTK8LfSdg,7810
|
|
10
|
+
pulse/cli/logging.py,sha256=3uuB1dqI-lHJkodNUURN6UMWdKF5UQ9spNG-hBG7bA4,2516
|
|
11
|
+
pulse/cli/models.py,sha256=NBV5byBDNoAQSk0vKwibLjoxuA85XBYIyOVJn64L8oU,858
|
|
12
|
+
pulse/cli/packages.py,sha256=DSnhxz61AoLVvBre3c0dnVYSpiKPI0rKFq4YmgM_VlA,7220
|
|
13
|
+
pulse/cli/processes.py,sha256=BFSKTRoNlCTAi3lDAjKHsKN1c-S032eol0tFd84pdVQ,7566
|
|
14
|
+
pulse/cli/secrets.py,sha256=dNfQe6AzSYhZuWveesjCRHIbvaPd3-F9lEJ-kZA7ROw,921
|
|
15
|
+
pulse/cli/uvicorn_log_config.py,sha256=f7ikDc5foXh3TmFMrnfnW8yev48ZAdlo8F4F_aMVoVk,2391
|
|
16
|
+
pulse/code_analysis.py,sha256=NBba_7VtOxZYMyfku_p-bWkG0O_1pi1AxcaNyVM1nmY,1024
|
|
17
|
+
pulse/codegen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
+
pulse/codegen/codegen.py,sha256=Zw55vzevg_17hFtSi6KLl-EWSiABKRfZe6fB-cWpLAk,10330
|
|
19
|
+
pulse/codegen/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
+
pulse/codegen/templates/layout.py,sha256=nmWPQcO9SRXc3mCCVLCmykreSF96TqQfdDY7dvUBxRg,4737
|
|
21
|
+
pulse/codegen/templates/route.py,sha256=UjBrb3e_8tMkd1OjBjEsnYmK6PCQqOYZBWDuU59FcrI,9234
|
|
22
|
+
pulse/codegen/templates/routes_ts.py,sha256=nPgKCvU0gzue2k6KlOL1TJgrBqqRLmyy7K_qKAI8zAE,1129
|
|
23
|
+
pulse/codegen/utils.py,sha256=QoXcV-h-DLLmq_t03hDNUePS0fNnofUQLoR-TXzDFCY,539
|
|
24
|
+
pulse/component.py,sha256=TVgV0dgNDf2Smt2xsJVD0-Wejsnqm14n-NxBzsdObjc,6227
|
|
25
|
+
pulse/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
|
+
pulse/components/for_.py,sha256=lrt1JHegf4OkBbL9nrMOy7zxmbuD8Kn11x32ZGS72lY,2390
|
|
27
|
+
pulse/components/if_.py,sha256=5IOq3R70B-JdI-fvDNYDyAaSEtO8L5OaiqHp-jUn-Kw,2153
|
|
28
|
+
pulse/components/react_router.py,sha256=Nl6juntLSowFc38q7g_VMdcc4ju6lj8DUhpNR2NuOKQ,2934
|
|
29
|
+
pulse/context.py,sha256=odTQlOhVRIwNvtatrmPe_Fd8Zk0rMcbcqQHBxvWYH5o,2677
|
|
30
|
+
pulse/cookies.py,sha256=ozfdBKExdbpeM5ileIA1z8BZA5hoUrZ5_iO9fIMrgRk,8768
|
|
31
|
+
pulse/decorators.py,sha256=BtNaisiqaJvlCuoqBgqQWbeFklDYLDrO1o1MRzFlybY,9932
|
|
32
|
+
pulse/dom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
|
+
pulse/dom/elements.py,sha256=YHXkVpfMAC4-0o61fK-E0LGTOM3KMCtBfpHHAwLx7dw,23241
|
|
34
|
+
pulse/dom/events.py,sha256=yHioH8Y-b7raOaZ43JuCxk2lUBryUAcDSc-5VhXtiSI,14699
|
|
35
|
+
pulse/dom/props.py,sha256=WrPwOYSoJmn-VWxU2KvJC1j64L4tlT8X2JpabK94gYQ,26721
|
|
36
|
+
pulse/dom/svg.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
|
+
pulse/dom/tags.py,sha256=U6mKmwB9JAFM6LTESMJcoIejNfnyxIdQo2-TLM5OaZ0,7585
|
|
38
|
+
pulse/dom/tags.pyi,sha256=0BC7zTh22roPBuMQawL8hgI6IrfN8xJZuDIoKMd4QKc,14393
|
|
39
|
+
pulse/env.py,sha256=etfubfwq7VWlo2iKy_972WtHZSiVe4StAnjFga0xgj8,4244
|
|
40
|
+
pulse/form.py,sha256=dzzcxuIkA8EOAETrbMV916Jv_tlgVuoBKfgL3P2MySo,14058
|
|
41
|
+
pulse/helpers.py,sha256=feHkC2g3DgfGN7FrvgRPZjmXzBjBYXwFu6wRPdy3w_I,15056
|
|
42
|
+
pulse/hooks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
43
|
+
pulse/hooks/core.py,sha256=tDEcB_CTD4yI5bNKn7CtB40sRKIanGNqPD5_qLgSzf4,10982
|
|
44
|
+
pulse/hooks/effects.py,sha256=cEPurXwRQoFmxasI0tZE1cQsZYnZr6VB5mWMUK0Db8c,2604
|
|
45
|
+
pulse/hooks/init.py,sha256=PhjVBLlHpodPzVrRcx_QfEUrsx_6gEX_NuVhe6ojiYI,17834
|
|
46
|
+
pulse/hooks/runtime.py,sha256=nxqwl8ByclIh5i3ZcCN6L3f0X3ZpwOBWajLb_FSbcDw,11839
|
|
47
|
+
pulse/hooks/setup.py,sha256=ILbn2v6UFJPFBOWnJef1X2A9JLpIagEHN9Mx0d9947I,6925
|
|
48
|
+
pulse/hooks/stable.py,sha256=y3V6gFEs7XU1ru92krOpjv2_rj_EzqUpy4lncSyLkQ4,3707
|
|
49
|
+
pulse/hooks/state.py,sha256=ORaYNoPhqpwFBlKleBOSNZebJgFHtt7oMOuHxrmnBHk,5288
|
|
50
|
+
pulse/js/__init__.py,sha256=tj1A6-eR5WS83UNgHb3Dw23m37oJsEuyV0ezUB6kXbg,3636
|
|
51
|
+
pulse/js/__init__.pyi,sha256=WN22WsJB-XFk6auL9zklwG2Kof3zeOsc56A56dJ3MWg,3097
|
|
52
|
+
pulse/js/_types.py,sha256=F4Go2JtJ2dbxq1fXpc2ablG_nyvhvHzOlZLlEv0VmyU,7421
|
|
53
|
+
pulse/js/array.py,sha256=_tC6QZlflWCXOXXUMMtowM3UK7iDWAtFM8BKqR5rjKk,8883
|
|
54
|
+
pulse/js/console.py,sha256=A-GNKEnPby10gdcTdYsBPVfz4m94PYzTXRwGhfaPRpc,1775
|
|
55
|
+
pulse/js/date.py,sha256=qJjdwupuUtKS95u8N8C8FKMKOIB8qjVMsYA3VYfe-tA,3363
|
|
56
|
+
pulse/js/document.py,sha256=SBinVGfb05jFpeyxAE0yk5Z__dkdW_mFsTI-rvgc-S8,3004
|
|
57
|
+
pulse/js/error.py,sha256=v0_DmpN5ESt_CJTrIYfy8980eerjK8mHhQatNV_1M_8,2611
|
|
58
|
+
pulse/js/json.py,sha256=P8nxOANjIxrzUA1XkBrd0SmNyAGyB3pVXZDPnA1OKks,1908
|
|
59
|
+
pulse/js/map.py,sha256=bhw75CUMIearH4JACCs9zAffdzfla3Rae7SKGcCLGoc,2243
|
|
60
|
+
pulse/js/math.py,sha256=OBbMlgoa6ZHLDgmXGNKMj5wYrvroV5ICIx-VsSE5_II,1757
|
|
61
|
+
pulse/js/navigator.py,sha256=2QWSr9xyyBfgd76P472qmayXQRYXIEo-b8zLzvfhHfg,1517
|
|
62
|
+
pulse/js/number.py,sha256=fX2M6hZ5ry2FPsYaHhGlqgO6reBEXw7C-gtu0-8_Zyw,1262
|
|
63
|
+
pulse/js/obj.py,sha256=8JG9OZZ1CNqAFoMTdYtxWhTmb6zs1BqxC-nLT7KYMF8,2030
|
|
64
|
+
pulse/js/object.py,sha256=95WvnGWgB-PL-D7l12UgdxNy_fxO5sJXool3Rx5ahUQ,4433
|
|
65
|
+
pulse/js/promise.py,sha256=vBXcL-U9BuZN-q1jbYhyzQaOL2niDPw4LsD7q7Y_yco,4670
|
|
66
|
+
pulse/js/pulse.py,sha256=m-LgqwhYygVBj7GzjeO-uo8fK5ThyVe7c3QvOJt_vc0,2962
|
|
67
|
+
pulse/js/react.py,sha256=eRMrgM8RsoAIn2lcHDoUYas3l4tImLOW51dwmw9AxQU,12057
|
|
68
|
+
pulse/js/regexp.py,sha256=qO-3nmt7uGN7V_bwimPCN-2RSsPfE6YiY7G1MjoP3YY,1055
|
|
69
|
+
pulse/js/set.py,sha256=omG3g-25GRHxgoKISSB4x-M8UDFlaXtFV9cSIpd5uB0,3017
|
|
70
|
+
pulse/js/string.py,sha256=VsvDF_ve8R9QIiBdDotLP2KpCKwmpEfGgRQWckOCmHk,813
|
|
71
|
+
pulse/js/weakmap.py,sha256=HACZEZ8EZk1xoaCmTXk__opvJLxlJ9_0U3y-01KQkHU,1412
|
|
72
|
+
pulse/js/weakset.py,sha256=jerMG9ubroR29HvOLIm6lkLxMj-GGWbiE57U9F6zRuQ,1256
|
|
73
|
+
pulse/js/window.py,sha256=yC1BjyH2jqp1x-CXJCUFta-ASyZ5668ozQ0AmAjZcxA,4097
|
|
74
|
+
pulse/messages.py,sha256=hz5EUFVHbzXHkcByZcV_Y199vb-M9cGjMMBL1HXPctE,4024
|
|
75
|
+
pulse/middleware.py,sha256=2syzmJ0r9fEa0k1pD7zC_1DHUMs9qLSWRzo5XXtKqsA,10896
|
|
76
|
+
pulse/plugin.py,sha256=bu90qaUVFtZsIsW41dpshVK1vvIGHUsg6mFoiF0Wfso,2370
|
|
77
|
+
pulse/proxy.py,sha256=Rj0hOVnwyI36lrkK9fEKAgFK-WCwt5X526J87A2EvMs,7773
|
|
78
|
+
pulse/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
79
|
+
pulse/queries/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
80
|
+
pulse/queries/client.py,sha256=AW42ZPdZJfDkCERpoxQnsiU5cYLfOlZX0sIb9BdIL4E,18495
|
|
81
|
+
pulse/queries/common.py,sha256=TYhn6LyldfmOKYYurxINgCEr3C3WSEwB0cIki1a5iBM,2488
|
|
82
|
+
pulse/queries/effect.py,sha256=7KvV_yK7OHTWhfQbZFGzg_pRhyI2mn25pKIF9AmSmcU,1471
|
|
83
|
+
pulse/queries/infinite_query.py,sha256=oPZq_TEVPHTdMy6-XfjN0hGFy_uhU14vdtn-UsCUHBQ,45764
|
|
84
|
+
pulse/queries/mutation.py,sha256=fhEpOZ7CuHImH4Y02QapYdTJrwe6K52-keb0d67wmms,8274
|
|
85
|
+
pulse/queries/protocol.py,sha256=R8n238Ex9DbYIAVKB83a8FAPtnCiPNhWar-F01K2fTo,3345
|
|
86
|
+
pulse/queries/query.py,sha256=GTZY6xvan4mC3GgLbkRnzo6lSvfRhriN2UznyjyiEWE,38682
|
|
87
|
+
pulse/queries/store.py,sha256=Ct7a-h1-Cq07zEfe9vw-LM85Fm7jIJx7CLAIlsiznlU,3444
|
|
88
|
+
pulse/react_component.py,sha256=8RLg4Bi7IcjqbnbEnp4hJpy8t1UsE7mG0UR1Q655LDk,2332
|
|
89
|
+
pulse/reactive.py,sha256=FxxpH7NBtQr7G89iCVN7y1EG21f23GcRi1M-XIxcRQA,31280
|
|
90
|
+
pulse/reactive_extensions.py,sha256=yQ1PpdAh4kMvll7R15T72FOg8NFdG_HGBsGc63dawYk,33754
|
|
91
|
+
pulse/render_session.py,sha256=9gfwuBZRCWuQMN_nFuaAi__1UPN3I3C1mKWtAXyA3-A,21340
|
|
92
|
+
pulse/renderer.py,sha256=fjSsUvCqV12jyN7Y5XspKUfjQJJzKX-Chha5oF5PrAk,16001
|
|
93
|
+
pulse/request.py,sha256=N0oFOLiGxpbgSgxznjvu64lG3YyOcZPKC8JFyKx6X7w,6023
|
|
94
|
+
pulse/routing.py,sha256=LzTITvGgaLI1w7qTDZjFwoBcWAb4O8Dz7AmXeTNYrFU,16903
|
|
95
|
+
pulse/serializer.py,sha256=HmQZgxQiaCx2SL2XwmEQLd_xsk_P8XfLtGciLLLOxx0,7616
|
|
96
|
+
pulse/state.py,sha256=VMphVpYNU1CyHMMg1_kNJO3cfqLXJPAuq9gr9RYyUAw,15922
|
|
97
|
+
pulse/test_helpers.py,sha256=4iO5Ymy3SMvSjh-UaAaSdqm1I_SAJMNjdY2iYVro5f8,436
|
|
98
|
+
pulse/transpiler/__init__.py,sha256=wDDnzqxgHpp_OLtcgyrJEg2jVoTnFIe3SSSTOsMDW8w,4700
|
|
99
|
+
pulse/transpiler/assets.py,sha256=digd5hKYPEgLOzMtDBHULX3Adj1sfngdvnx3quQmgPY,2299
|
|
100
|
+
pulse/transpiler/builtins.py,sha256=QZrow7XJ2wxGMAE-mgZmaUD03egOnXCbikOg8yMx9vQ,30807
|
|
101
|
+
pulse/transpiler/dynamic_import.py,sha256=1AmBl6agGSoTZBp_94seXH733fewLOULUix9BOBPtKI,3372
|
|
102
|
+
pulse/transpiler/emit_context.py,sha256=GyK6VdsBSTVIewQRhBagaV0hlqLTlPZ1i8EAZGi8SaY,1321
|
|
103
|
+
pulse/transpiler/errors.py,sha256=LSBjLBnMglbl2D94p9JR4y-3jDefk6iHSlUVBaBOTu4,2823
|
|
104
|
+
pulse/transpiler/function.py,sha256=a871LZFergCmjs1vr-XlOx4eU1FQKAuYxSLJej-LHHc,17036
|
|
105
|
+
pulse/transpiler/id.py,sha256=CdgA1NndBpZjv0Hp4XiYbKn7wi-x4zWsFSjEiViKxVk,434
|
|
106
|
+
pulse/transpiler/imports.py,sha256=RWw5HJXWwQKRCOoNCMtfBA_CQMBte5XfVTmYqXdQuaA,9702
|
|
107
|
+
pulse/transpiler/js_module.py,sha256=OcIgmrfiA6Hh6aukzgkyX63KsVSHdLzx5ezdKiJFUaQ,11093
|
|
108
|
+
pulse/transpiler/modules/__init__.py,sha256=JGi3CuZoF4sug4dNhQg3MFhpEQqnXec4xRJM2cHNP3c,1184
|
|
109
|
+
pulse/transpiler/modules/asyncio.py,sha256=kWMuFU2vZbqutCM_EXJMvy5SdlB66XiT0czs8lELj_o,1584
|
|
110
|
+
pulse/transpiler/modules/json.py,sha256=Zxe8dsaQ0Eoq3yHUiJeKEx6ibiN36HCT61ScFkLFCeY,676
|
|
111
|
+
pulse/transpiler/modules/math.py,sha256=8gjvdYTMqtuOnXrvX_Lwuo0ywAdSl7cpss4TMk6mQtQ,7044
|
|
112
|
+
pulse/transpiler/modules/pulse/__init__.py,sha256=TfMsiiB53ZFlxdNl7jfCAiMZs-vSRUTxUmqzkLTj-po,91
|
|
113
|
+
pulse/transpiler/modules/pulse/tags.py,sha256=FMN1mWMlnsXa2qO6VmXxUAhFn1uOfGoKPQOjH4ZPlRE,6218
|
|
114
|
+
pulse/transpiler/modules/typing.py,sha256=J9QCkXE6zzwMjiprX2q1BtK-iKLIiS21sQ78JH4RSMc,1716
|
|
115
|
+
pulse/transpiler/nodes.py,sha256=oiAoHZ-q7zmp3zenvVr1aDesyd3nPmC8Uxgm5KG7qeM,50474
|
|
116
|
+
pulse/transpiler/py_module.py,sha256=um4BYLrbs01bpgv2LEBHTbhXXh8Bs174c3ygv5tHHOg,4410
|
|
117
|
+
pulse/transpiler/transpiler.py,sha256=28diEp1yZTs3RsUEJZZdCv1DfzgO9WyOGI-xSHe7y_4,32562
|
|
118
|
+
pulse/transpiler/vdom.py,sha256=Ie36iHa2bkUbui5iMClbMSFDGlKaNxI98Ux0JLPCGT4,6399
|
|
119
|
+
pulse/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
120
|
+
pulse/types/event_handler.py,sha256=psQCydj-WEtBcFU5JU4mDwvyzkW8V2O0g_VFRU2EOHI,1618
|
|
121
|
+
pulse/user_session.py,sha256=nsnsMgqq2xGJZLpbHRMHUHcLrElMP8WcA4gjGMrcoBk,10208
|
|
122
|
+
pulse/version.py,sha256=711vaM1jVIQPgkisGgKZqwmw019qZIsc_QTae75K2pg,1895
|
|
123
|
+
pulse_framework-0.1.62.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
|
|
124
|
+
pulse_framework-0.1.62.dist-info/entry_points.txt,sha256=i7aohd3QaPu5IcuGKKvsQQEiMYMe5HcF56QEsaLVO64,46
|
|
125
|
+
pulse_framework-0.1.62.dist-info/METADATA,sha256=Vs73aVk7hGZuZcVSnMmuJC6BY-rMUpTXTtc6UkRsWN0,8300
|
|
126
|
+
pulse_framework-0.1.62.dist-info/RECORD,,
|