vortexpy 4.0.7__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.7 → vortexpy-4.0.10}/PKG-INFO +1 -1
- {vortexpy-4.0.7 → vortexpy-4.0.10}/pyproject.toml +1 -1
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/__init__.py +1 -1
- vortexpy-4.0.10/vortex/event_bus/TupleChangeEventABC.py +15 -0
- {vortexpy-4.0.7/vortex/handler → vortexpy-4.0.10/vortex/event_bus}/TupleChangeEventBus.py +78 -42
- vortexpy-4.0.10/vortex/event_bus/TupleChangeEventBusObserverABC.py +11 -0
- vortexpy-4.0.10/vortex/storage/__init__.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortexpy.egg-info/PKG-INFO +1 -1
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortexpy.egg-info/SOURCES.txt +4 -2
- vortexpy-4.0.7/vortex/handler/TupleChangeEventBusObserverABC.py +0 -12
- {vortexpy-4.0.7 → vortexpy-4.0.10}/LICENSE +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/README.md +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/setup.cfg +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/DataWrapTuple.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/DeferUtil.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/Jsonable.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/Payload.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/PayloadEndpoint.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/PayloadEndpointTest.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/PayloadEnvelope.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/PayloadFilterKeys.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/PayloadIO.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/PayloadPriority.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/PayloadResponse.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/PayloadResponseTest.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/PayloadTest.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/PerformTestActionTuple.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/SerialiseUtil.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/TestTuple.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/Tuple.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/TupleAction.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/TupleActionVortex.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/TupleDataForTest.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/TuplePerfTest.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/TuplePolymorphicTupleTypeFieldArgTest.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/TupleRestfulTest.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/TupleSelector.py +2 -2
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/TupleTest.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/VortexABC.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/VortexClientHttp.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/VortexClientHttpTest.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/VortexClientTcp.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/VortexClientWebsocketFactory.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/VortexConnectionABC.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/VortexFactory.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/VortexPayloadProtocol.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/VortexServer.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/VortexServerConnection.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/VortexServerHttpResource.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/VortexServerTcp.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/VortexServerWebsocket.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/VortexTcpMemoryLeakPayloadTest.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/VortexTcpMemoryLeakRawTest.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/VortexTest.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/VortexUtil.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/VortexWritePushProducer.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/data_loader/TupleDataLiveLockManager.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/data_loader/TupleDataLoader.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/data_loader/TupleDataLoaderDelegate.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/data_loader/TupleDataLoaderTupleABC.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/data_loader/TupleDataLoaderTuples.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/data_loader/__init__.py +0 -0
- {vortexpy-4.0.7/vortex/handler → vortexpy-4.0.10/vortex/event_bus}/__init__.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/handler/TupleActionProcessor.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/handler/TupleActionProcessorProxy.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/handler/TupleActionProcessorTestHandler.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/handler/TupleDataActionClient.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/handler/TupleDataObservableCache.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/handler/TupleDataObservableHandler.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/handler/TupleDataObservableProxyHandler.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/handler/TupleDataObservableTestHandler.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/handler/TupleDataObserverClient.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/handler/VortexJSTupleLoaderTestHandler.py +0 -0
- {vortexpy-4.0.7/vortex/restful → vortexpy-4.0.10/vortex/handler}/__init__.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/restful/GzippedDataHttpClient.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/restful/GzippedDataHttpClientTest.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/restful/GzippedPayloadHttpClient.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/restful/RestfulHttpClient.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/restful/RestfulHttpClientTest.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/restful/RestfulResource.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/restful/RestfulResourceTest.py +0 -0
- {vortexpy-4.0.7/vortex/rpc → vortexpy-4.0.10/vortex/restful}/__init__.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/rpc/RPC.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/rpc/RPCTest.py +0 -0
- {vortexpy-4.0.7/vortex/sqla_orm → vortexpy-4.0.10/vortex/rpc}/__init__.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/sqla_orm/OrmCrudHandler.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/sqla_orm/TupleProviderForDb.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/sqla_orm/VortexTupleJson.py +0 -0
- {vortexpy-4.0.7/vortex/storage → vortexpy-4.0.10/vortex/sqla_orm}/__init__.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortex/storage/TupleStorageSqlite.py +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortexpy.egg-info/dependency_links.txt +0 -0
- {vortexpy-4.0.7 → vortexpy-4.0.10}/vortexpy.egg-info/requires.txt +0 -0
- {vortexpy-4.0.7 → 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,73 +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
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
)
|
|
92
|
+
eventName = event.eventType()
|
|
93
|
+
|
|
94
|
+
if eventName in self._weakObserversBySelectorName:
|
|
95
|
+
weakSets.append(list(self._weakObserversBySelectorName[eventName]))
|
|
98
96
|
|
|
99
97
|
for weakSet in weakSets:
|
|
100
98
|
for item in weakSet:
|
|
101
99
|
if not item:
|
|
102
100
|
continue
|
|
103
101
|
|
|
104
|
-
|
|
102
|
+
# noinspection PyUnresolvedReferences
|
|
103
|
+
reactor.callLater(0, self._notify, item, event)
|
|
105
104
|
|
|
106
105
|
@inlineCallbacks
|
|
107
|
-
def _notify(
|
|
106
|
+
def _notify(
|
|
107
|
+
self,
|
|
108
|
+
observable: TupleChangeEventBusObserverABC,
|
|
109
|
+
event: TupleChangeEventABC,
|
|
110
|
+
):
|
|
108
111
|
try:
|
|
109
112
|
startDate = datetime.now(pytz.utc)
|
|
110
|
-
yield observable.notifyFromBus(
|
|
113
|
+
yield observable.notifyFromBus(event)
|
|
111
114
|
|
|
112
115
|
# A blocking call taking more than 100ms is BAD
|
|
113
116
|
# Otherwise a call taking more than a 1s is just poor performance.
|
|
114
117
|
secondsTaken = (datetime.now(pytz.utc) - startDate).total_seconds()
|
|
115
118
|
if 0.1 < secondsTaken:
|
|
116
119
|
logger.debug(
|
|
117
|
-
"notifyFromBus took %s for %s,
|
|
120
|
+
"notifyFromBus took %s for %s, event %s",
|
|
118
121
|
secondsTaken,
|
|
119
122
|
observable.__class__.__name__,
|
|
120
|
-
|
|
123
|
+
event,
|
|
121
124
|
)
|
|
122
125
|
|
|
123
126
|
except Exception as e:
|
|
124
127
|
logger.error(
|
|
125
|
-
"Observable %s raised an error
|
|
128
|
+
"Observable %s raised an error"
|
|
129
|
+
" when being called with event %s",
|
|
126
130
|
observable.__class__.__name__,
|
|
127
|
-
|
|
131
|
+
event,
|
|
128
132
|
)
|
|
129
133
|
logger.exception(e)
|
|
130
134
|
|
|
131
135
|
def addObserver(
|
|
132
136
|
self,
|
|
133
137
|
observer: TupleChangeEventBusObserverABC,
|
|
134
|
-
|
|
135
|
-
Union[
|
|
138
|
+
eventNameOrClass: Optional[
|
|
139
|
+
Union[
|
|
140
|
+
str,
|
|
141
|
+
Type[TupleChangeEventABC],
|
|
142
|
+
TupleChangeEventABC,
|
|
143
|
+
]
|
|
136
144
|
] = None,
|
|
137
145
|
) -> None:
|
|
138
146
|
assert isinstance(
|
|
139
147
|
observer, TupleChangeEventBusObserverABC
|
|
140
148
|
), "observer must be a TupleChangeEventBusObserverABC"
|
|
141
149
|
|
|
142
|
-
if
|
|
143
|
-
self.
|
|
150
|
+
if eventNameOrClass is None:
|
|
151
|
+
self._weakObserversForAllTupleChangeEventABCNames.add(observer)
|
|
144
152
|
return
|
|
145
153
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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]"
|
|
149
184
|
)
|
|
150
|
-
|
|
185
|
+
|
|
186
|
+
if name == TupleSelector.tupleName():
|
|
151
187
|
raise Exception(
|
|
152
|
-
"
|
|
153
|
-
"
|
|
188
|
+
"We've found the name of TupleSelector.tupleType(),"
|
|
189
|
+
"which means we've been passed a TupleSelector."
|
|
154
190
|
)
|
|
155
191
|
|
|
156
|
-
|
|
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
|
|
@@ -52,10 +52,10 @@ class TupleSelector(Tuple):
|
|
|
52
52
|
if isinstance(nameOrTuple, str):
|
|
53
53
|
name = nameOrTuple
|
|
54
54
|
|
|
55
|
-
elif
|
|
55
|
+
elif isinstance(nameOrTuple, Tuple):
|
|
56
56
|
name = nameOrTuple.tupleType()
|
|
57
57
|
|
|
58
|
-
elif
|
|
58
|
+
elif issubclass(nameOrTuple, Tuple):
|
|
59
59
|
name = nameOrTuple.tupleType()
|
|
60
60
|
|
|
61
61
|
else:
|
|
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
|