hmr 0.4.2__py3-none-any.whl → 0.5.0__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.
- {hmr-0.4.2.dist-info → hmr-0.5.0.dist-info}/METADATA +1 -1
- hmr-0.5.0.dist-info/RECORD +14 -0
- reactivity/helpers.py +4 -2
- reactivity/hmr/core.py +12 -23
- reactivity/hmr/utils.py +4 -0
- reactivity/primitives.py +10 -1
- hmr-0.4.2.dist-info/RECORD +0 -14
- {hmr-0.4.2.dist-info → hmr-0.5.0.dist-info}/WHEEL +0 -0
- {hmr-0.4.2.dist-info → hmr-0.5.0.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,14 @@
|
|
1
|
+
hmr-0.5.0.dist-info/METADATA,sha256=BjQm4EMgr3JdiaLg1pibfu40LvQmRETerF3GyRYoa3o,258
|
2
|
+
hmr-0.5.0.dist-info/WHEEL,sha256=tSfRZzRHthuv7vxpI4aehrdN9scLjk-dCJkPLzkHxGg,90
|
3
|
+
hmr-0.5.0.dist-info/entry_points.txt,sha256=g_T0uJ43WgsdG14kkkdaBQuIL0HO-m1qvtjXMP6d060,59
|
4
|
+
reactivity/__init__.py,sha256=pX-RUzkezCC1x4eOWGxNhXbwrbvBLP_3pQuZr9eZz1Y,300
|
5
|
+
reactivity/functional.py,sha256=U06vshcVhZ0sb218gcmHtEhfgTNAGtQ7zyvPz2w5qKM,1292
|
6
|
+
reactivity/helpers.py,sha256=DVwhsEEs9aRcsyMqTdF5eRG-Z0zVhS7AbmR-Y-PXCkg,5321
|
7
|
+
reactivity/hmr/__init__.py,sha256=S5ZIHqCRpevdzWuhS0aCua_S8F0LkK0YNg6IgeTScFQ,177
|
8
|
+
reactivity/hmr/__main__.py,sha256=uIcyjR5gMFIXH_3hS0B3SD00RirVf7GIct-uItx675o,64
|
9
|
+
reactivity/hmr/api.py,sha256=Esb1fYiBW0SLxQ0MPXby25ZgIIZhIp-M3b2KiqpffmU,2094
|
10
|
+
reactivity/hmr/core.py,sha256=ky7xaylCio8QWzg1nDK-krTmCu-h4fYTRChSyTFLrnY,11571
|
11
|
+
reactivity/hmr/hooks.py,sha256=jIFpe4CNxfaS9RcR4OIodx_sOZlnJ_IA1T1RtHPXhwU,945
|
12
|
+
reactivity/hmr/utils.py,sha256=h9m7iRXlvsLTrHoXV9gEVbhz3XsPK4KgnStYoCAWE5I,1616
|
13
|
+
reactivity/primitives.py,sha256=sPuIRi3pnAV7wV42rqD0j07HNkz4Bk4VxJWhdYToeZE,5907
|
14
|
+
hmr-0.5.0.dist-info/RECORD,,
|
reactivity/helpers.py
CHANGED
@@ -112,11 +112,13 @@ class Reactive[K, V](Subscribable, MutableMapping[K, V]):
|
|
112
112
|
|
113
113
|
def __iter__(self):
|
114
114
|
self.track()
|
115
|
-
|
115
|
+
unset = self.UNSET
|
116
|
+
return (key for key, signal in self._signals.items() if signal.get(track=False) is not unset)
|
116
117
|
|
117
118
|
def __len__(self):
|
118
119
|
self.track()
|
119
|
-
|
120
|
+
unset = self.UNSET
|
121
|
+
return sum(signal.get(track=False) is not unset for signal in self._signals.values())
|
120
122
|
|
121
123
|
def __repr__(self):
|
122
124
|
self.track()
|
reactivity/hmr/core.py
CHANGED
@@ -15,21 +15,21 @@ from weakref import WeakValueDictionary
|
|
15
15
|
from .. import Reactive, batch
|
16
16
|
from ..functional import create_effect
|
17
17
|
from ..helpers import DerivedMethod
|
18
|
-
from ..primitives import
|
18
|
+
from ..primitives import BaseDerived, Derived, Signal
|
19
19
|
from .hooks import call_post_reload_hooks, call_pre_reload_hooks
|
20
20
|
|
21
21
|
|
22
|
-
def
|
23
|
-
|
24
|
-
assert frame is not None
|
22
|
+
def is_called_internally(*, extra_depth=0) -> bool:
|
23
|
+
"""Protect private methods from being called from outside this package."""
|
25
24
|
|
26
|
-
frame =
|
25
|
+
frame = currentframe() # this function
|
27
26
|
assert frame is not None
|
28
27
|
|
29
|
-
|
30
|
-
|
28
|
+
for _ in range(extra_depth + 2):
|
29
|
+
frame = frame.f_back
|
30
|
+
assert frame is not None
|
31
31
|
|
32
|
-
return frame.f_globals.get("
|
32
|
+
return frame.f_globals.get("__package__") == __package__
|
33
33
|
|
34
34
|
|
35
35
|
class Name(Signal, BaseDerived):
|
@@ -83,7 +83,7 @@ class ReactiveModule(ModuleType):
|
|
83
83
|
|
84
84
|
@property
|
85
85
|
def file(self):
|
86
|
-
if
|
86
|
+
if is_called_internally(extra_depth=1): # + 1 for `__getattribute__`
|
87
87
|
return self.__file
|
88
88
|
raise AttributeError("file")
|
89
89
|
|
@@ -103,21 +103,10 @@ class ReactiveModule(ModuleType):
|
|
103
103
|
# unsubscribe it because we want invalidation to be fine-grained
|
104
104
|
dep.subscribers.remove(load)
|
105
105
|
load.dependencies.remove(dep)
|
106
|
-
elif isinstance(dep, BaseComputation):
|
107
|
-
visited = set() # cache visited nodes, maybe share cache between iteration too (?)
|
108
|
-
to_visit: set[BaseComputation] = {dep}
|
109
|
-
while to_visit and (current := to_visit.pop()) not in visited:
|
110
|
-
visited.add(current)
|
111
|
-
if load in current.dependencies:
|
112
|
-
# unsubscribe it to avoid circular dependencies
|
113
|
-
dep.subscribers.remove(load)
|
114
|
-
load.dependencies.remove(dep)
|
115
|
-
break
|
116
|
-
to_visit.update(i for i in current.dependencies if isinstance(i, BaseComputation))
|
117
106
|
|
118
107
|
@property
|
119
108
|
def load(self):
|
120
|
-
if
|
109
|
+
if is_called_internally(extra_depth=1): # + 1 for `__getattribute__`
|
121
110
|
return self.__load
|
122
111
|
raise AttributeError("load")
|
123
112
|
|
@@ -138,7 +127,7 @@ class ReactiveModule(ModuleType):
|
|
138
127
|
raise AttributeError(*e.args) from e
|
139
128
|
|
140
129
|
def __setattr__(self, name: str, value):
|
141
|
-
if
|
130
|
+
if is_called_internally():
|
142
131
|
return super().__setattr__(name, value)
|
143
132
|
self.__namespace_proxy[name] = value
|
144
133
|
|
@@ -349,4 +338,4 @@ def cli():
|
|
349
338
|
SyncReloader(entry).keep_watching_until_interrupt()
|
350
339
|
|
351
340
|
|
352
|
-
__version__ = "0.
|
341
|
+
__version__ = "0.5.0"
|
reactivity/hmr/utils.py
CHANGED
reactivity/primitives.py
CHANGED
@@ -212,4 +212,13 @@ class Derived[T](BaseDerived[T]):
|
|
212
212
|
|
213
213
|
|
214
214
|
def _pulled(sub: Subscribable):
|
215
|
-
|
215
|
+
visited = set()
|
216
|
+
to_visit: set[Subscribable] = {sub}
|
217
|
+
while to_visit:
|
218
|
+
visited.add(current := to_visit.pop())
|
219
|
+
for s in current.subscribers:
|
220
|
+
if not isinstance(s, BaseDerived):
|
221
|
+
return True
|
222
|
+
if s not in visited:
|
223
|
+
to_visit.add(s)
|
224
|
+
return False
|
hmr-0.4.2.dist-info/RECORD
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
hmr-0.4.2.dist-info/METADATA,sha256=0dGqIVXUA-EX7VuNsQSOLtOvX5aKy-noYyrRLZpSwkc,258
|
2
|
-
hmr-0.4.2.dist-info/WHEEL,sha256=tSfRZzRHthuv7vxpI4aehrdN9scLjk-dCJkPLzkHxGg,90
|
3
|
-
hmr-0.4.2.dist-info/entry_points.txt,sha256=g_T0uJ43WgsdG14kkkdaBQuIL0HO-m1qvtjXMP6d060,59
|
4
|
-
reactivity/__init__.py,sha256=pX-RUzkezCC1x4eOWGxNhXbwrbvBLP_3pQuZr9eZz1Y,300
|
5
|
-
reactivity/functional.py,sha256=U06vshcVhZ0sb218gcmHtEhfgTNAGtQ7zyvPz2w5qKM,1292
|
6
|
-
reactivity/helpers.py,sha256=1KCpre2HTFZrngEKkI2HwSFMkCmsUCq2aPEbp0y3kKg,5140
|
7
|
-
reactivity/hmr/__init__.py,sha256=S5ZIHqCRpevdzWuhS0aCua_S8F0LkK0YNg6IgeTScFQ,177
|
8
|
-
reactivity/hmr/__main__.py,sha256=uIcyjR5gMFIXH_3hS0B3SD00RirVf7GIct-uItx675o,64
|
9
|
-
reactivity/hmr/api.py,sha256=Esb1fYiBW0SLxQ0MPXby25ZgIIZhIp-M3b2KiqpffmU,2094
|
10
|
-
reactivity/hmr/core.py,sha256=x71UilKjeH-HH72ta_u46tnRV3Fb28KXqoqtGdGabko,12250
|
11
|
-
reactivity/hmr/hooks.py,sha256=jIFpe4CNxfaS9RcR4OIodx_sOZlnJ_IA1T1RtHPXhwU,945
|
12
|
-
reactivity/hmr/utils.py,sha256=-PO-LMP4sc3IP-Bn_baq2w9IFWBZ3zGesgRn5wR6bS0,1555
|
13
|
-
reactivity/primitives.py,sha256=mB6cbHKDqtilOfgaEhshtRWJq9s0nPEKqRK0hfCoyFE,5671
|
14
|
-
hmr-0.4.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|