vortexpy 6.2.1__tar.gz → 6.2.3__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.
Files changed (160) hide show
  1. {vortexpy-6.2.1 → vortexpy-6.2.3}/PKG-INFO +1 -1
  2. {vortexpy-6.2.1 → vortexpy-6.2.3}/pyproject.toml +1 -1
  3. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/TupleDocumentConverter.py +6 -2
  4. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexFactory.py +5 -2
  5. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexFactory_test.py +72 -0
  6. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/__init__.py +1 -1
  7. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortexpy.egg-info/PKG-INFO +1 -1
  8. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortexpy.egg-info/SOURCES.txt +0 -1
  9. vortexpy-6.2.1/LICENSE +0 -22
  10. {vortexpy-6.2.1 → vortexpy-6.2.3}/README.md +0 -0
  11. {vortexpy-6.2.1 → vortexpy-6.2.3}/example/TwistedDeferredTimeout.py +0 -0
  12. {vortexpy-6.2.1 → vortexpy-6.2.3}/example/__init__.py +0 -0
  13. {vortexpy-6.2.1 → vortexpy-6.2.3}/example/run_http_upgraded_websocket_ping_client.py +0 -0
  14. {vortexpy-6.2.1 → vortexpy-6.2.3}/example/run_http_upgraded_websocket_ping_server.py +0 -0
  15. {vortexpy-6.2.1 → vortexpy-6.2.3}/example/run_http_upgraded_websocket_rpc_test_client.py +0 -0
  16. {vortexpy-6.2.1 → vortexpy-6.2.3}/example/run_http_upgraded_websocket_rpc_test_server.py +0 -0
  17. {vortexpy-6.2.1 → vortexpy-6.2.3}/example/run_websocket_rpc_test_client.py +0 -0
  18. {vortexpy-6.2.1 → vortexpy-6.2.3}/example/run_websocket_rpc_test_server.py +0 -0
  19. {vortexpy-6.2.1 → vortexpy-6.2.3}/example/setup_example_logging.py +0 -0
  20. {vortexpy-6.2.1 → vortexpy-6.2.3}/example/store_and_load_json.py +0 -0
  21. {vortexpy-6.2.1 → vortexpy-6.2.3}/setup.cfg +0 -0
  22. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/DataWrapTuple.py +0 -0
  23. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/DeferUtil.py +0 -0
  24. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/DeferUtil_test.py +0 -0
  25. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/Jsonable.py +0 -0
  26. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/MtlsAuthorizedClientRegistry.py +0 -0
  27. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/MtlsAuthorizedClientRegistry_test.py +0 -0
  28. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/MtlsServerSslOptions.py +0 -0
  29. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/Payload.py +0 -0
  30. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/PayloadEndpoint.py +0 -0
  31. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/PayloadEndpointTest.py +0 -0
  32. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/PayloadEnvelope.py +0 -0
  33. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/PayloadFilterKeys.py +0 -0
  34. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/PayloadIO.py +0 -0
  35. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/PayloadPriority.py +0 -0
  36. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/PayloadResponse.py +0 -0
  37. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/PayloadResponseTest.py +0 -0
  38. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/PayloadResponse_test.py +0 -0
  39. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/PayloadTest.py +0 -0
  40. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/PerformTestActionTuple.py +0 -0
  41. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/SerialiseUtil.py +0 -0
  42. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/SerialiseUtil_test.py +0 -0
  43. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/TestTuple.py +0 -0
  44. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/Tuple.py +0 -0
  45. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/TupleAction.py +0 -0
  46. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/TupleBson.py +0 -0
  47. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/TupleBson_test.py +0 -0
  48. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/TupleDataForTest.py +0 -0
  49. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/TuplePerfTest.py +0 -0
  50. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/TuplePolymorphicTupleTypeFieldArgTest.py +0 -0
  51. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/TupleRestful.py +0 -0
  52. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/TupleRestful_test.py +0 -0
  53. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/TupleSelector.py +0 -0
  54. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/TupleTest.py +0 -0
  55. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexABC.py +0 -0
  56. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexAccessControlContextABC.py +0 -0
  57. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexAuthenticatorABC.py +0 -0
  58. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexClientHttp.py +0 -0
  59. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexClientHttpTest.py +0 -0
  60. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexClientTcp.py +0 -0
  61. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexClientWebsocketFactory.py +0 -0
  62. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexConnectionABC.py +0 -0
  63. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexEndpointPermission.py +0 -0
  64. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexPayloadProtocol.py +0 -0
  65. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexPermission.py +0 -0
  66. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexPermissionError.py +0 -0
  67. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexServer.py +0 -0
  68. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexServerConnection.py +0 -0
  69. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexServerConnection_test.py +0 -0
  70. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexServerHttpResource.py +0 -0
  71. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexServerTcp.py +0 -0
  72. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexServerTcp_test.py +0 -0
  73. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexServerWebsocket.py +0 -0
  74. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexServerWebsocket_test.py +0 -0
  75. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexServer_test.py +0 -0
  76. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexSession.py +0 -0
  77. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexSession_test.py +0 -0
  78. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexTcpMemoryLeakPayloadTest.py +0 -0
  79. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexTcpMemoryLeakRawTest.py +0 -0
  80. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexTest.py +0 -0
  81. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexUserDetailsABC.py +0 -0
  82. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexUtil.py +0 -0
  83. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexWritePushProducer.py +0 -0
  84. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/VortexWritePushProducer_test.py +0 -0
  85. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/data_loader/TupleDataLiveLockManager.py +0 -0
  86. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/data_loader/TupleDataLiveLockManager_test.py +0 -0
  87. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/data_loader/TupleDataLoader.py +0 -0
  88. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/data_loader/TupleDataLoaderDelegate.py +0 -0
  89. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/data_loader/TupleDataLoaderTupleABC.py +0 -0
  90. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/data_loader/TupleDataLoaderTuples.py +0 -0
  91. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/data_loader/__init__.py +0 -0
  92. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/event_bus/TupleChangeEventABC.py +0 -0
  93. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/event_bus/TupleChangeEventBus.py +0 -0
  94. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/event_bus/TupleChangeEventBusObserverABC.py +0 -0
  95. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/event_bus/__init__.py +0 -0
  96. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/handler/TupleActionProcessor.py +0 -0
  97. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/handler/TupleActionProcessorProxy.py +0 -0
  98. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/handler/TupleActionProcessorTestHandler.py +0 -0
  99. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/handler/TupleActionProcessor_shutdown_test.py +0 -0
  100. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/handler/TupleActionProcessor_test.py +0 -0
  101. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/handler/TupleActionPushOffline.py +0 -0
  102. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/handler/TupleActionPushOffline_test.py +0 -0
  103. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/handler/TupleDataAccessGranterABC.py +0 -0
  104. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/handler/TupleDataActionClient.py +0 -0
  105. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/handler/TupleDataActionClient_test.py +0 -0
  106. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/handler/TupleDataObservableCache.py +0 -0
  107. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/handler/TupleDataObservableCache_test.py +0 -0
  108. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/handler/TupleDataObservableHandler.py +0 -0
  109. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/handler/TupleDataObservableHandler_test.py +0 -0
  110. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/handler/TupleDataObservableProxyHandler.py +0 -0
  111. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/handler/TupleDataObservableProxyHandler_test.py +0 -0
  112. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/handler/TupleDataObservableTestHandler.py +0 -0
  113. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/handler/TupleDataObserverClient.py +0 -0
  114. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/handler/TupleDataOfflineObserverService.py +0 -0
  115. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/handler/TupleDataOfflineObserverService_test.py +0 -0
  116. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/handler/TupleDataProviderABC.py +0 -0
  117. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/handler/VortexJSTupleLoaderTestHandler.py +0 -0
  118. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/handler/__init__.py +0 -0
  119. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/mypy_plugin.py +0 -0
  120. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/payload_many_tuples_benchmark_test.py +0 -0
  121. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/py.typed +0 -0
  122. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/restful/GzippedDataHttpClient.py +0 -0
  123. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/restful/GzippedDataHttpClientTest.py +0 -0
  124. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/restful/GzippedPayloadHttpClient.py +0 -0
  125. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/restful/RestfulHttpClient.py +0 -0
  126. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/restful/RestfulResource.py +0 -0
  127. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/restful/__init__.py +0 -0
  128. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/restful/restful_http_client_test.py +0 -0
  129. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/restful/restful_resource_test.py +0 -0
  130. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/rpc/RPC.py +0 -0
  131. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/rpc/RPCTest.py +0 -0
  132. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/rpc/RPC_test.py +0 -0
  133. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/rpc/__init__.py +0 -0
  134. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/sqla_orm/OrmCrudHandler.py +0 -0
  135. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/sqla_orm/TupleProviderForDb.py +0 -0
  136. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/sqla_orm/VortexTupleJson.py +0 -0
  137. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/sqla_orm/__init__.py +0 -0
  138. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/storage/TupleActionStorageSqlite.py +0 -0
  139. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/storage/TupleOfflineStorageNameService.py +0 -0
  140. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/storage/TupleOfflineStorageSecureService.py +0 -0
  141. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/storage/TupleOfflineStorageSecureService_test.py +0 -0
  142. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/storage/TupleOfflineStorageService.py +0 -0
  143. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/storage/TupleStorageServiceABC.py +0 -0
  144. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/storage/TupleStorageSqlite.py +0 -0
  145. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/storage/TupleStorageSqliteService.py +0 -0
  146. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/storage/TupleStorageSqliteService_test.py +0 -0
  147. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/storage/__init__.py +0 -0
  148. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/tuple_json_schema/__init__.py +0 -0
  149. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/tuple_json_schema/constants.py +0 -0
  150. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/tuple_json_schema/json_schema_node_tuple.py +0 -0
  151. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/tuple_json_schema/tuple_json_schema_builder.py +0 -0
  152. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/tuple_json_schema/tuple_json_schema_test.py +0 -0
  153. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/tuple_json_schema/tuple_json_schema_test_tuples.py +0 -0
  154. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/tuple_test_fixtures.py +0 -0
  155. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/twisted_runtime_metrics.py +0 -0
  156. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortex/twisted_runtime_metrics_test.py +0 -0
  157. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortexpy.egg-info/dependency_links.txt +0 -0
  158. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortexpy.egg-info/entry_points.txt +0 -0
  159. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortexpy.egg-info/requires.txt +0 -0
  160. {vortexpy-6.2.1 → vortexpy-6.2.3}/vortexpy.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vortexpy
3
- Version: 6.2.1
3
+ Version: 6.2.3
4
4
  Summary: Flying Ion's observable, routable, data serialisation and transport code.
5
5
  Author-email: Flying Ion Pty Ltd <contact@flyingion.com>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "vortexpy"
7
- version = "6.2.1"
7
+ version = "6.2.3"
8
8
  license = {text = "MIT"}
9
9
  authors = [{name = "Flying Ion Pty Ltd", email = "contact@flyingion.com"}]
10
10
  description = "Flying Ion's observable, routable, data serialisation and transport code."
@@ -421,8 +421,12 @@ class TupleDocumentConverterBase:
421
421
  return cls._makeError(field_path, str(exc), ValueError)
422
422
  return None
423
423
 
424
- if isinstance(value, list) and get_origin(typeHint) is list:
425
- return None
424
+ if isinstance(value, list):
425
+ if get_origin(typeHint) is list:
426
+ return None
427
+ for unionArg in get_args(typeHint):
428
+ if get_origin(unionArg) is list:
429
+ return None
426
430
 
427
431
  if isinstance(value, dict):
428
432
  if get_origin(typeHint) is dict:
@@ -995,7 +995,10 @@ class VortexFactory:
995
995
  "Vortex %s went %s", vortexName, ("online" if online else "offline")
996
996
  )
997
997
 
998
+ # Rebuild the connection structs before notifying: handlers react to
999
+ # the status change synchronously (e.g. the offline observer re-tell)
1000
+ # and read getRemoteVortexName() from these structs.
1001
+ cls.connectionChanged()
1002
+
998
1003
  if vortexName in cls.__vortexStatusChangeSubjectsByName:
999
1004
  cls.__vortexStatusChangeSubjectsByName[vortexName].on_next(online)
1000
-
1001
- cls.connectionChanged()
@@ -112,3 +112,75 @@ def test_closeExistingVortexClientsForName_closesRegisteredClients() -> None:
112
112
  assert (
113
113
  VortexFactory.getLocalVortexClients("codie-mcp-local") == []
114
114
  )
115
+
116
+
117
+ def _resetVortexFactoryClassState() -> None:
118
+ VortexFactory._VortexFactory__vortexInfoState = _VortexFactoryVortexInfo()
119
+ VortexFactory._VortexFactory__vortexStatusChangeSubjectsByName = {}
120
+ VortexFactory._VortexFactory__isShutdown = False
121
+
122
+
123
+ def test_notifyOfVortexStatusChange_rebuildsStructsBeforeNotify() -> None:
124
+ _resetVortexFactoryClassState()
125
+ try:
126
+ client = _StubVortexClient("codie-mcp-local", "local-uuid-1")
127
+ VortexFactory._VortexFactory__vortexInfoState.addVortexClient(
128
+ "codie-mcp-local", client
129
+ )
130
+
131
+ # Mirror the handshake: _setNameAndUuid sets the remote info on the
132
+ # client before _notifyOfVortexStatusChange runs.
133
+ client._remote_name = "codie-hub"
134
+ client._remote_uuid = "hub-uuid-1"
135
+
136
+ notifications = []
137
+ VortexFactory.subscribeToVortexStatusChange("codie-hub").subscribe(
138
+ lambda online: notifications.append(
139
+ (online, VortexFactory.getRemoteVortexName())
140
+ )
141
+ )
142
+
143
+ VortexFactory._notifyOfVortexStatusChange("codie-hub", online=True)
144
+
145
+ assert len(notifications) == 1
146
+ online, remoteNames = notifications[0]
147
+ assert online is True
148
+ assert "codie-hub" in remoteNames
149
+ finally:
150
+ _resetVortexFactoryClassState()
151
+
152
+
153
+ def test_notifyOfVortexStatusChange_offlineAfterClearDropsName() -> None:
154
+ _resetVortexFactoryClassState()
155
+ try:
156
+ client = _StubVortexClient(
157
+ "codie-mcp-local",
158
+ "local-uuid-1",
159
+ remote_name="codie-hub",
160
+ remote_uuid="hub-uuid-1",
161
+ )
162
+ VortexFactory._VortexFactory__vortexInfoState.addVortexClient(
163
+ "codie-mcp-local", client
164
+ )
165
+ assert "codie-hub" in VortexFactory.getRemoteVortexName()
166
+
167
+ # Mirror connectionLost: _clearRemoteVortexInfo clears the remote
168
+ # info on the client before _notifyOfVortexStatusChange runs.
169
+ client._remote_name = None
170
+ client._remote_uuid = None
171
+
172
+ notifications = []
173
+ VortexFactory.subscribeToVortexStatusChange("codie-hub").subscribe(
174
+ lambda online: notifications.append(
175
+ (online, VortexFactory.getRemoteVortexName())
176
+ )
177
+ )
178
+
179
+ VortexFactory._notifyOfVortexStatusChange("codie-hub", online=False)
180
+
181
+ assert len(notifications) == 1
182
+ online, remoteNames = notifications[0]
183
+ assert online is False
184
+ assert "codie-hub" not in remoteNames
185
+ finally:
186
+ _resetVortexFactoryClassState()
@@ -6,4 +6,4 @@
6
6
  # Website : https://flyingion.com
7
7
  # Support : contact@flyingion.com
8
8
 
9
- __version__ = '6.2.1'
9
+ __version__ = '6.2.3'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vortexpy
3
- Version: 6.2.1
3
+ Version: 6.2.3
4
4
  Summary: Flying Ion's observable, routable, data serialisation and transport code.
5
5
  Author-email: Flying Ion Pty Ltd <contact@flyingion.com>
6
6
  License: MIT
@@ -1,4 +1,3 @@
1
- LICENSE
2
1
  README.md
3
2
  pyproject.toml
4
3
  example/TwistedDeferredTimeout.py
vortexpy-6.2.1/LICENSE DELETED
@@ -1,22 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2016-2026 Flying Ion Pty Ltd
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
22
-
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