vortexpy 4.0.8__tar.gz → 4.0.10__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.
- {vortexpy-4.0.8 → vortexpy-4.0.10}/PKG-INFO +1 -1
- {vortexpy-4.0.8 → vortexpy-4.0.10}/pyproject.toml +1 -1
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/__init__.py +1 -1
- vortexpy-4.0.10/vortex/event_bus/TupleChangeEventABC.py +15 -0
- {vortexpy-4.0.8/vortex/handler → vortexpy-4.0.10/vortex/event_bus}/TupleChangeEventBus.py +77 -43
- vortexpy-4.0.10/vortex/event_bus/TupleChangeEventBusObserverABC.py +11 -0
- vortexpy-4.0.10/vortex/storage/__init__.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortexpy.egg-info/PKG-INFO +1 -1
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortexpy.egg-info/SOURCES.txt +4 -2
- vortexpy-4.0.8/vortex/handler/TupleChangeEventBusObserverABC.py +0 -12
- {vortexpy-4.0.8 → vortexpy-4.0.10}/LICENSE +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/README.md +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/setup.cfg +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/DataWrapTuple.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/DeferUtil.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/Jsonable.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/Payload.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/PayloadEndpoint.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/PayloadEndpointTest.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/PayloadEnvelope.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/PayloadFilterKeys.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/PayloadIO.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/PayloadPriority.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/PayloadResponse.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/PayloadResponseTest.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/PayloadTest.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/PerformTestActionTuple.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/SerialiseUtil.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/TestTuple.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/Tuple.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/TupleAction.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/TupleActionVortex.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/TupleDataForTest.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/TuplePerfTest.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/TuplePolymorphicTupleTypeFieldArgTest.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/TupleRestfulTest.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/TupleSelector.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/TupleTest.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/VortexABC.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/VortexClientHttp.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/VortexClientHttpTest.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/VortexClientTcp.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/VortexClientWebsocketFactory.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/VortexConnectionABC.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/VortexFactory.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/VortexPayloadProtocol.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/VortexServer.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/VortexServerConnection.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/VortexServerHttpResource.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/VortexServerTcp.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/VortexServerWebsocket.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/VortexTcpMemoryLeakPayloadTest.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/VortexTcpMemoryLeakRawTest.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/VortexTest.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/VortexUtil.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/VortexWritePushProducer.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/data_loader/TupleDataLiveLockManager.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/data_loader/TupleDataLoader.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/data_loader/TupleDataLoaderDelegate.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/data_loader/TupleDataLoaderTupleABC.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/data_loader/TupleDataLoaderTuples.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/data_loader/__init__.py +0 -0
- {vortexpy-4.0.8/vortex/handler → vortexpy-4.0.10/vortex/event_bus}/__init__.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/handler/TupleActionProcessor.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/handler/TupleActionProcessorProxy.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/handler/TupleActionProcessorTestHandler.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/handler/TupleDataActionClient.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/handler/TupleDataObservableCache.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/handler/TupleDataObservableHandler.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/handler/TupleDataObservableProxyHandler.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/handler/TupleDataObservableTestHandler.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/handler/TupleDataObserverClient.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/handler/VortexJSTupleLoaderTestHandler.py +0 -0
- {vortexpy-4.0.8/vortex/restful → vortexpy-4.0.10/vortex/handler}/__init__.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/restful/GzippedDataHttpClient.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/restful/GzippedDataHttpClientTest.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/restful/GzippedPayloadHttpClient.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/restful/RestfulHttpClient.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/restful/RestfulHttpClientTest.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/restful/RestfulResource.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/restful/RestfulResourceTest.py +0 -0
- {vortexpy-4.0.8/vortex/rpc → vortexpy-4.0.10/vortex/restful}/__init__.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/rpc/RPC.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/rpc/RPCTest.py +0 -0
- {vortexpy-4.0.8/vortex/sqla_orm → vortexpy-4.0.10/vortex/rpc}/__init__.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/sqla_orm/OrmCrudHandler.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/sqla_orm/TupleProviderForDb.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/sqla_orm/VortexTupleJson.py +0 -0
- {vortexpy-4.0.8/vortex/storage → vortexpy-4.0.10/vortex/sqla_orm}/__init__.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortex/storage/TupleStorageSqlite.py +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortexpy.egg-info/dependency_links.txt +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortexpy.egg-info/requires.txt +0 -0
- {vortexpy-4.0.8 → vortexpy-4.0.10}/vortexpy.egg-info/top_level.txt +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "vortexpy"
|
|
7
|
-
version = "4.0.
|
|
7
|
+
version = "4.0.10"
|
|
8
8
|
authors = [{name = "Synerty", email = "contact@synerty.com"}]
|
|
9
9
|
description = "Synertys observable, routable, data serialisation and transport code."
|
|
10
10
|
keywords = [
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from abc import ABCMeta
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class TupleChangeEventABC(metaclass=ABCMeta):
|
|
6
|
+
__eventType__ = None
|
|
7
|
+
|
|
8
|
+
@classmethod
|
|
9
|
+
def eventType(cls) -> str:
|
|
10
|
+
return cls.__eventType__
|
|
11
|
+
|
|
12
|
+
def __repr__(self):
|
|
13
|
+
return json.dumps(
|
|
14
|
+
{"class": self.__class__.__name__, "fields": self.__dict__}
|
|
15
|
+
)
|
|
@@ -8,12 +8,9 @@ import pytz
|
|
|
8
8
|
from twisted.internet import reactor
|
|
9
9
|
from twisted.internet.defer import inlineCallbacks
|
|
10
10
|
|
|
11
|
-
from vortex.
|
|
12
|
-
from vortex.
|
|
13
|
-
|
|
14
|
-
InvalidTupleSelectorNameException,
|
|
15
|
-
)
|
|
16
|
-
from vortex.handler.TupleChangeEventBusObserverABC import (
|
|
11
|
+
from vortex.TupleSelector import TupleSelector
|
|
12
|
+
from vortex.event_bus.TupleChangeEventABC import TupleChangeEventABC
|
|
13
|
+
from vortex.event_bus.TupleChangeEventBusObserverABC import (
|
|
17
14
|
TupleChangeEventBusObserverABC,
|
|
18
15
|
)
|
|
19
16
|
|
|
@@ -22,7 +19,7 @@ logger = logging.getLogger(__name__)
|
|
|
22
19
|
|
|
23
20
|
class TupleChangeEventBus:
|
|
24
21
|
def __init__(self):
|
|
25
|
-
self.
|
|
22
|
+
self._weakObserversForAllTupleChangeEventABCNames: WeakSet[
|
|
26
23
|
TupleChangeEventBusObserverABC
|
|
27
24
|
] = WeakSet([])
|
|
28
25
|
|
|
@@ -30,11 +27,11 @@ class TupleChangeEventBus:
|
|
|
30
27
|
str, WeakSet[TupleChangeEventBusObserverABC]
|
|
31
28
|
] = defaultdict(lambda: WeakSet([]))
|
|
32
29
|
|
|
33
|
-
def notifyMany(self,
|
|
34
|
-
for
|
|
35
|
-
self.notify(
|
|
30
|
+
def notifyMany(self, events: list[TupleChangeEventABC]) -> None:
|
|
31
|
+
for event in events:
|
|
32
|
+
self.notify(event)
|
|
36
33
|
|
|
37
|
-
def notify(self,
|
|
34
|
+
def notify(self, event: TupleChangeEventABC) -> None:
|
|
38
35
|
"""
|
|
39
36
|
Notify
|
|
40
37
|
|
|
@@ -49,7 +46,8 @@ class TupleChangeEventBus:
|
|
|
49
46
|
however, see best practices.
|
|
50
47
|
|
|
51
48
|
BEST PRACTICE: Only notify the bus of precisely
|
|
52
|
-
the data that has changed, as close to the code that changes it as
|
|
49
|
+
the data that has changed, as close to the code that changes it as
|
|
50
|
+
possible.
|
|
53
51
|
|
|
54
52
|
Do not notify the bus of tuple selectors that need updating.
|
|
55
53
|
|
|
@@ -60,8 +58,8 @@ class TupleChangeEventBus:
|
|
|
60
58
|
|
|
61
59
|
For example. If you have two tuple selectors:
|
|
62
60
|
|
|
63
|
-
1)
|
|
64
|
-
2)
|
|
61
|
+
1) TupleChangeEventABC(MyTuple, {id:1})
|
|
62
|
+
2) TupleChangeEventABC(ListOfMyTuples)
|
|
65
63
|
|
|
66
64
|
TupleChangeEventBus.notify should be called for MyTuple
|
|
67
65
|
just after changes are committed.
|
|
@@ -72,11 +70,11 @@ class TupleChangeEventBus:
|
|
|
72
70
|
A typical observer's method might look like this:
|
|
73
71
|
|
|
74
72
|
```python
|
|
75
|
-
def notifyFromBus(self,
|
|
76
|
-
if
|
|
77
|
-
self.tupleDataObservable.notifyOfTupleUpdate(
|
|
73
|
+
def notifyFromBus(self, event: TupleChangeEventABC) -> None:
|
|
74
|
+
if event.isForTuple(MyTuple):
|
|
75
|
+
self.tupleDataObservable.notifyOfTupleUpdate(event)
|
|
78
76
|
self.tupleDataObservable.notifyOfTupleUpdate(
|
|
79
|
-
|
|
77
|
+
TupleChangeEventABC(ListOfMyTuples)
|
|
80
78
|
)
|
|
81
79
|
return
|
|
82
80
|
|
|
@@ -84,75 +82,111 @@ class TupleChangeEventBus:
|
|
|
84
82
|
|
|
85
83
|
```
|
|
86
84
|
|
|
87
|
-
:param
|
|
85
|
+
:param event: The tuple selector that describes the tuple
|
|
88
86
|
that has been changed. This change might be created, updated, or
|
|
89
87
|
deleted.
|
|
90
88
|
:return:
|
|
91
89
|
"""
|
|
92
|
-
weakSets = [self.
|
|
90
|
+
weakSets = [self._weakObserversForAllTupleChangeEventABCNames]
|
|
93
91
|
|
|
94
|
-
|
|
92
|
+
eventName = event.eventType()
|
|
95
93
|
|
|
96
|
-
if
|
|
97
|
-
weakSets.append(
|
|
98
|
-
list(self._weakObserversBySelectorName[tupleSelectorName])
|
|
99
|
-
)
|
|
94
|
+
if eventName in self._weakObserversBySelectorName:
|
|
95
|
+
weakSets.append(list(self._weakObserversBySelectorName[eventName]))
|
|
100
96
|
|
|
101
97
|
for weakSet in weakSets:
|
|
102
98
|
for item in weakSet:
|
|
103
99
|
if not item:
|
|
104
100
|
continue
|
|
105
101
|
|
|
106
|
-
|
|
102
|
+
# noinspection PyUnresolvedReferences
|
|
103
|
+
reactor.callLater(0, self._notify, item, event)
|
|
107
104
|
|
|
108
105
|
@inlineCallbacks
|
|
109
|
-
def _notify(
|
|
106
|
+
def _notify(
|
|
107
|
+
self,
|
|
108
|
+
observable: TupleChangeEventBusObserverABC,
|
|
109
|
+
event: TupleChangeEventABC,
|
|
110
|
+
):
|
|
110
111
|
try:
|
|
111
112
|
startDate = datetime.now(pytz.utc)
|
|
112
|
-
yield observable.notifyFromBus(
|
|
113
|
+
yield observable.notifyFromBus(event)
|
|
113
114
|
|
|
114
115
|
# A blocking call taking more than 100ms is BAD
|
|
115
116
|
# Otherwise a call taking more than a 1s is just poor performance.
|
|
116
117
|
secondsTaken = (datetime.now(pytz.utc) - startDate).total_seconds()
|
|
117
118
|
if 0.1 < secondsTaken:
|
|
118
119
|
logger.debug(
|
|
119
|
-
"notifyFromBus took %s for %s,
|
|
120
|
+
"notifyFromBus took %s for %s, event %s",
|
|
120
121
|
secondsTaken,
|
|
121
122
|
observable.__class__.__name__,
|
|
122
|
-
|
|
123
|
+
event,
|
|
123
124
|
)
|
|
124
125
|
|
|
125
126
|
except Exception as e:
|
|
126
127
|
logger.error(
|
|
127
|
-
"Observable %s raised an error
|
|
128
|
+
"Observable %s raised an error"
|
|
129
|
+
" when being called with event %s",
|
|
128
130
|
observable.__class__.__name__,
|
|
129
|
-
|
|
131
|
+
event,
|
|
130
132
|
)
|
|
131
133
|
logger.exception(e)
|
|
132
134
|
|
|
133
135
|
def addObserver(
|
|
134
136
|
self,
|
|
135
137
|
observer: TupleChangeEventBusObserverABC,
|
|
136
|
-
|
|
137
|
-
Union[
|
|
138
|
+
eventNameOrClass: Optional[
|
|
139
|
+
Union[
|
|
140
|
+
str,
|
|
141
|
+
Type[TupleChangeEventABC],
|
|
142
|
+
TupleChangeEventABC,
|
|
143
|
+
]
|
|
138
144
|
] = None,
|
|
139
145
|
) -> None:
|
|
140
146
|
assert isinstance(
|
|
141
147
|
observer, TupleChangeEventBusObserverABC
|
|
142
148
|
), "observer must be a TupleChangeEventBusObserverABC"
|
|
143
149
|
|
|
144
|
-
if
|
|
145
|
-
self.
|
|
150
|
+
if eventNameOrClass is None:
|
|
151
|
+
self._weakObserversForAllTupleChangeEventABCNames.add(observer)
|
|
146
152
|
return
|
|
147
153
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
154
|
+
eventName = self._nameFromEvent(eventNameOrClass)
|
|
155
|
+
|
|
156
|
+
self._weakObserversBySelectorName[eventName].add(observer)
|
|
157
|
+
|
|
158
|
+
# noinspection PyMethodMayBeStatic
|
|
159
|
+
def _nameFromEvent(
|
|
160
|
+
self,
|
|
161
|
+
nameOrTuple: Optional[
|
|
162
|
+
Union[str, Type[TupleChangeEventABC], TupleChangeEventABC]
|
|
163
|
+
],
|
|
164
|
+
) -> Optional[str]:
|
|
165
|
+
# When the TupleSelector is reconstructed / deserialize,
|
|
166
|
+
# it's constructed with
|
|
167
|
+
# no arguments
|
|
168
|
+
if nameOrTuple is None:
|
|
169
|
+
return None
|
|
170
|
+
|
|
171
|
+
if isinstance(nameOrTuple, str):
|
|
172
|
+
name = nameOrTuple
|
|
173
|
+
|
|
174
|
+
elif isinstance(nameOrTuple, TupleChangeEventABC):
|
|
175
|
+
name = nameOrTuple.eventType()
|
|
176
|
+
|
|
177
|
+
elif issubclass(nameOrTuple, TupleChangeEventABC):
|
|
178
|
+
name = nameOrTuple.eventType()
|
|
179
|
+
|
|
180
|
+
else:
|
|
181
|
+
raise Exception(
|
|
182
|
+
"Argument should be of type "
|
|
183
|
+
"Union[str, Type[TupleChangeEventABC], TupleChangeEventABC]"
|
|
151
184
|
)
|
|
152
|
-
|
|
185
|
+
|
|
186
|
+
if name == TupleSelector.tupleName():
|
|
153
187
|
raise Exception(
|
|
154
|
-
"
|
|
155
|
-
"
|
|
188
|
+
"We've found the name of TupleSelector.tupleType(),"
|
|
189
|
+
"which means we've been passed a TupleSelector."
|
|
156
190
|
)
|
|
157
191
|
|
|
158
|
-
|
|
192
|
+
return name
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from abc import ABCMeta, abstractmethod
|
|
2
|
+
|
|
3
|
+
from vortex.event_bus.TupleChangeEventABC import TupleChangeEventABC
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class TupleChangeEventBusObserverABC(metaclass=ABCMeta):
|
|
7
|
+
@abstractmethod
|
|
8
|
+
def notifyFromBus(self, event: TupleChangeEventABC) -> None:
|
|
9
|
+
raise NotImplementedError(
|
|
10
|
+
"TupleChangeEventBusObserverABC.notifyFromBus"
|
|
11
|
+
)
|
|
File without changes
|
|
@@ -52,11 +52,13 @@ vortex/data_loader/TupleDataLoaderDelegate.py
|
|
|
52
52
|
vortex/data_loader/TupleDataLoaderTupleABC.py
|
|
53
53
|
vortex/data_loader/TupleDataLoaderTuples.py
|
|
54
54
|
vortex/data_loader/__init__.py
|
|
55
|
+
vortex/event_bus/TupleChangeEventABC.py
|
|
56
|
+
vortex/event_bus/TupleChangeEventBus.py
|
|
57
|
+
vortex/event_bus/TupleChangeEventBusObserverABC.py
|
|
58
|
+
vortex/event_bus/__init__.py
|
|
55
59
|
vortex/handler/TupleActionProcessor.py
|
|
56
60
|
vortex/handler/TupleActionProcessorProxy.py
|
|
57
61
|
vortex/handler/TupleActionProcessorTestHandler.py
|
|
58
|
-
vortex/handler/TupleChangeEventBus.py
|
|
59
|
-
vortex/handler/TupleChangeEventBusObserverABC.py
|
|
60
62
|
vortex/handler/TupleDataActionClient.py
|
|
61
63
|
vortex/handler/TupleDataObservableCache.py
|
|
62
64
|
vortex/handler/TupleDataObservableHandler.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|