splight-lib 4.0.0.dev4__tar.gz → 4.0.0.dev6__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.
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/PKG-INFO +1 -1
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/setup.py +1 -1
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/component/abstract.py +25 -43
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/execution.py +39 -11
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/models/component.py +14 -1
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib.egg-info/PKG-INFO +1 -1
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/LICENSE.txt +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/README.md +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/pyproject.toml +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/setup.cfg +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/__init__.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/abstract/__init__.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/abstract/client.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/auth/__init__.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/auth/exceptions.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/auth/mac_auth.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/auth/token.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/__init__.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/communication/__init__.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/communication/abstract.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/communication/classmap.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/communication/exceptions.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/communication/local_client.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/communication/remote_client.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/database/__init__.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/database/abstract.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/database/builder.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/database/classmap.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/database/local_client.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/database/remote_client.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/datalake/__init__.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/datalake/abstract.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/datalake/builder.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/datalake/local_client.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/datalake/remote_client.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/exceptions.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/file_handler.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/filter.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/hub/__init__.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/hub/abstract.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/hub/client.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/communication/__init__.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/communication/event_handler.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/component/__init__.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/component/exceptions.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/component/spec.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/constants.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/encryption.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/logging/__init__.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/logging/_internal.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/logging/component.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/logging/constants.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/logging/logging.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/models/__init__.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/models/alert.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/models/asset.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/models/attribute.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/models/base.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/models/communication.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/models/dashboard.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/models/data_address.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/models/event.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/models/exceptions.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/models/file.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/models/hub.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/models/native.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/models/pipeline.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/models/query.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/models/secret.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/models/setpoint.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/restclient/__init__.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/restclient/client.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/restclient/exceptions.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/restclient/types.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/settings.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/testing/__init__.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/utils/__init__.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/utils/custom_model.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/utils/hub.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/version.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/webhook.py +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib.egg-info/SOURCES.txt +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib.egg-info/dependency_links.txt +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib.egg-info/not-zip-safe +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib.egg-info/requires.txt +0 -0
- {splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib.egg-info/top_level.txt +0 -0
|
@@ -1,16 +1,13 @@
|
|
|
1
|
+
from abc import abstractmethod
|
|
1
2
|
import os
|
|
2
3
|
import sys
|
|
3
|
-
import traceback
|
|
4
4
|
from functools import partial
|
|
5
5
|
from tempfile import NamedTemporaryFile
|
|
6
6
|
from time import sleep
|
|
7
7
|
from typing import Dict, List, Optional, Type
|
|
8
8
|
|
|
9
|
-
from furl import furl
|
|
10
9
|
from pydantic import BaseModel, create_model
|
|
11
|
-
from retry import retry
|
|
12
10
|
|
|
13
|
-
from splight_lib.auth import SplightAuthToken
|
|
14
11
|
from splight_lib.client.communication import RemoteCommunicationClient
|
|
15
12
|
from splight_lib.communication.event_handler import (
|
|
16
13
|
command_event_handler,
|
|
@@ -18,7 +15,6 @@ from splight_lib.communication.event_handler import (
|
|
|
18
15
|
setpoint_event_handler,
|
|
19
16
|
)
|
|
20
17
|
from splight_lib.component.exceptions import (
|
|
21
|
-
DuplicatedComponentException,
|
|
22
18
|
InvalidBidingObject,
|
|
23
19
|
MissingBindingCallback,
|
|
24
20
|
MissingCommandCallback,
|
|
@@ -44,7 +40,6 @@ from splight_lib.models.setpoint import SetPoint
|
|
|
44
40
|
from splight_lib.restclient import (
|
|
45
41
|
ConnectError,
|
|
46
42
|
HTTPError,
|
|
47
|
-
SplightRestClient,
|
|
48
43
|
Timeout,
|
|
49
44
|
)
|
|
50
45
|
from splight_lib.settings import settings
|
|
@@ -83,16 +78,16 @@ class HealthCheckProcessor:
|
|
|
83
78
|
if not is_alive:
|
|
84
79
|
exc = self._engine.get_last_exception()
|
|
85
80
|
self._log_exception(exc)
|
|
86
|
-
self._logger.
|
|
87
|
-
"Healthcheck
|
|
81
|
+
self._logger.info(
|
|
82
|
+
"Healthcheck finished", tags=LogTags.RUNTIME
|
|
88
83
|
)
|
|
89
84
|
self._health_file.close()
|
|
90
|
-
self._logger.
|
|
85
|
+
self._logger.info(
|
|
91
86
|
"Healthcheck file removed: %s",
|
|
92
87
|
self._health_file,
|
|
93
88
|
tags=LogTags.RUNTIME,
|
|
94
89
|
)
|
|
95
|
-
|
|
90
|
+
break
|
|
96
91
|
sleep(self._HEALTHCHECK_INTERVAL)
|
|
97
92
|
|
|
98
93
|
def stop(self):
|
|
@@ -113,8 +108,6 @@ class SplightBaseComponent:
|
|
|
113
108
|
):
|
|
114
109
|
self._component_id = component_id
|
|
115
110
|
|
|
116
|
-
if not settings.LOCAL_ENVIRONMENT:
|
|
117
|
-
self._check_duplicated_component()
|
|
118
111
|
# TODO: Change to use builder patter
|
|
119
112
|
self._comm_client = RemoteCommunicationClient(
|
|
120
113
|
url=settings.SPLIGHT_PLATFORM_API_HOST,
|
|
@@ -123,9 +116,9 @@ class SplightBaseComponent:
|
|
|
123
116
|
instance_id=component_id,
|
|
124
117
|
)
|
|
125
118
|
self._execution_engine = ExecutionClient()
|
|
126
|
-
|
|
119
|
+
self._health_check = HealthCheckProcessor(self._execution_engine)
|
|
127
120
|
self._health_check_thread = Thread(
|
|
128
|
-
target=
|
|
121
|
+
target=self._health_check.start, args=(), daemon=False
|
|
129
122
|
)
|
|
130
123
|
# We can't add the healthcheck thread into the execution engine
|
|
131
124
|
# because that thread should stop if any of the registered threads
|
|
@@ -186,6 +179,12 @@ class SplightBaseComponent:
|
|
|
186
179
|
def execution_engine(self) -> ExecutionClient:
|
|
187
180
|
return self._execution_engine
|
|
188
181
|
|
|
182
|
+
def _register_exit(self):
|
|
183
|
+
if self._execution_engine.get_last_exception():
|
|
184
|
+
sys.exit(1)
|
|
185
|
+
else:
|
|
186
|
+
sys.exit(0)
|
|
187
|
+
|
|
189
188
|
def _get_custom_type_model(
|
|
190
189
|
self, component_object: Dict[str, Type[ComponentObjectInstance]]
|
|
191
190
|
) -> BaseModel:
|
|
@@ -301,37 +300,20 @@ class SplightBaseComponent:
|
|
|
301
300
|
),
|
|
302
301
|
)
|
|
303
302
|
|
|
304
|
-
@retry(REQUEST_EXCEPTIONS, tries=3, delay=2, jitter=1)
|
|
305
|
-
def _check_duplicated_component(self):
|
|
306
|
-
"""
|
|
307
|
-
Validates that there are no other connections to communication client
|
|
308
|
-
"""
|
|
309
|
-
token = SplightAuthToken(
|
|
310
|
-
access_key=settings.SPLIGHT_ACCESS_ID,
|
|
311
|
-
secret_key=settings.SPLIGHT_SECRET_KEY,
|
|
312
|
-
)
|
|
313
|
-
rest_client = SplightRestClient()
|
|
314
|
-
rest_client.update_headers(token.header)
|
|
315
|
-
base_url = furl(settings.SPLIGHT_PLATFORM_API_HOST)
|
|
316
|
-
base_path = "v2/engine/component/components"
|
|
317
|
-
api_url = base_url / f"{base_path}/{self._component_id}/connections/"
|
|
318
|
-
response = rest_client.get(api_url)
|
|
319
|
-
if response.status_code == 200:
|
|
320
|
-
connections = response.json()["subscription_count"]
|
|
321
|
-
if int(connections) > 0:
|
|
322
|
-
raise DuplicatedComponentException(self._component_id)
|
|
323
|
-
else:
|
|
324
|
-
raise Exception(
|
|
325
|
-
(
|
|
326
|
-
"Error checking if component is already running. "
|
|
327
|
-
f"Status: {response.status_code}"
|
|
328
|
-
)
|
|
329
|
-
)
|
|
330
|
-
|
|
331
303
|
def start(self):
|
|
332
|
-
|
|
304
|
+
self.run_component()
|
|
305
|
+
|
|
306
|
+
# The following it for waiting for all threads to finish
|
|
307
|
+
for thread in self._execution_engine.threads:
|
|
308
|
+
thread.join()
|
|
309
|
+
|
|
310
|
+
self._health_check_thread.join()
|
|
311
|
+
self._register_exit()
|
|
333
312
|
|
|
334
313
|
def stop(self):
|
|
335
|
-
self._execution_engine.stop(self._health_check_thread)
|
|
336
314
|
self._execution_engine.terminate_all()
|
|
337
315
|
sys.exit(1)
|
|
316
|
+
|
|
317
|
+
@abstractmethod
|
|
318
|
+
def run_component(self) -> None:
|
|
319
|
+
raise NotImplementedError()
|
|
@@ -294,21 +294,38 @@ class ExecutionClient(AbstractClient):
|
|
|
294
294
|
self._register_exit_functions()
|
|
295
295
|
super(ExecutionClient, self).__init__(*args, **kwargs)
|
|
296
296
|
logger.info("Execution client initialized.", tags=LogTags.RUNTIME)
|
|
297
|
+
self._exc = None
|
|
298
|
+
self._thread_exc = None
|
|
297
299
|
|
|
298
300
|
def _register_exit_functions(self) -> None:
|
|
299
301
|
excepthook = sys.excepthook
|
|
302
|
+
thread_exchook = threading.excepthook
|
|
300
303
|
|
|
301
304
|
def wrap_excepthook(type, value, traceback):
|
|
305
|
+
self._exc = (type, value, traceback)
|
|
302
306
|
self.terminate_all()
|
|
303
307
|
excepthook(type, value, traceback)
|
|
304
308
|
|
|
305
|
-
|
|
309
|
+
def wrap_thread_excepthook(args):
|
|
310
|
+
self._thread_exc = (
|
|
311
|
+
args.exc_type,
|
|
312
|
+
args.exc_value,
|
|
313
|
+
args.exc_traceback,
|
|
314
|
+
)
|
|
315
|
+
self.terminate_all()
|
|
316
|
+
thread_exchook(args)
|
|
317
|
+
|
|
318
|
+
# atexit.register(self.terminate_all)
|
|
306
319
|
sys.excepthook = wrap_excepthook
|
|
320
|
+
threading.excepthook = wrap_thread_excepthook
|
|
307
321
|
|
|
308
322
|
def __del__(self) -> None:
|
|
309
323
|
self.terminate_all()
|
|
310
324
|
|
|
311
325
|
def terminate_all(self) -> None:
|
|
326
|
+
if hasattr(self, "_scheduler"):
|
|
327
|
+
self._scheduler.stop()
|
|
328
|
+
|
|
312
329
|
for p in self.processes:
|
|
313
330
|
p.terminate()
|
|
314
331
|
|
|
@@ -360,15 +377,19 @@ class ExecutionClient(AbstractClient):
|
|
|
360
377
|
# not using the execution client explicitly and is doing some
|
|
361
378
|
# processing directly in the main thread so the healtcheck should
|
|
362
379
|
# say the component is healthy.
|
|
363
|
-
main_thread = threading.main_thread()
|
|
380
|
+
# main_thread = threading.main_thread()
|
|
381
|
+
# threads_status = [
|
|
382
|
+
# p.is_alive() or p.exit_ok() for p in self.processes + self.threads
|
|
383
|
+
# ]
|
|
364
384
|
threads_status = [
|
|
365
|
-
p.is_alive()
|
|
385
|
+
p.is_alive() for p in self.processes + self.threads
|
|
366
386
|
]
|
|
367
|
-
return (
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
)
|
|
387
|
+
return all(threads_status)
|
|
388
|
+
# (
|
|
389
|
+
# main_thread.is_alive() or all(threads_status)
|
|
390
|
+
# if threads_status
|
|
391
|
+
# else main_thread.is_alive()
|
|
392
|
+
# )
|
|
372
393
|
|
|
373
394
|
def healthcheck(self) -> Tuple[bool, ComponentStatus]:
|
|
374
395
|
"""Check if the component is alive and return the status.
|
|
@@ -395,7 +416,14 @@ class ExecutionClient(AbstractClient):
|
|
|
395
416
|
It assumes that there is only one thread that crashed
|
|
396
417
|
Also, only works for the thread not the processes.
|
|
397
418
|
"""
|
|
398
|
-
broken_thread = [x.exc for x in self.threads if x.exc]
|
|
399
|
-
if
|
|
400
|
-
return
|
|
419
|
+
# broken_thread = [x.exc for x in self.threads if x.exc]
|
|
420
|
+
if self._exc:
|
|
421
|
+
return self._exc[1]
|
|
422
|
+
if self._thread_exc:
|
|
423
|
+
return self._thread_exc[1]
|
|
424
|
+
# if broken_thread:
|
|
425
|
+
# print("THREAD EXC")
|
|
426
|
+
# print(self._thread_exc)
|
|
427
|
+
# print()
|
|
428
|
+
# return broken_thread[0]
|
|
401
429
|
return None
|
|
@@ -5,7 +5,14 @@ from datetime import datetime
|
|
|
5
5
|
from enum import auto
|
|
6
6
|
from typing import Any, ClassVar, Dict, List, Optional, Type, Union
|
|
7
7
|
|
|
8
|
-
from pydantic import
|
|
8
|
+
from pydantic import (
|
|
9
|
+
AnyUrl,
|
|
10
|
+
BaseModel,
|
|
11
|
+
Field,
|
|
12
|
+
PrivateAttr,
|
|
13
|
+
create_model,
|
|
14
|
+
validator,
|
|
15
|
+
)
|
|
9
16
|
from strenum import LowercaseStrEnum, PascalCaseStrEnum
|
|
10
17
|
|
|
11
18
|
from splight_lib.models.asset import Asset
|
|
@@ -67,6 +74,12 @@ class DataAddress(Parameter):
|
|
|
67
74
|
type: str = Field("DataAddress", const=True)
|
|
68
75
|
value_type: str = "Number"
|
|
69
76
|
|
|
77
|
+
@validator("type", pre=True)
|
|
78
|
+
def check_wrong_name(cls, value: str) -> str:
|
|
79
|
+
if value == "DataAdress":
|
|
80
|
+
value = "DataAddress"
|
|
81
|
+
return value
|
|
82
|
+
|
|
70
83
|
|
|
71
84
|
class InputDataAddress(DataAddress):
|
|
72
85
|
value: Optional[Union[List[Dict[str, str]], Dict[str, str]]]
|
|
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
|
{splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/communication/__init__.py
RENAMED
|
File without changes
|
{splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/communication/abstract.py
RENAMED
|
File without changes
|
{splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/communication/classmap.py
RENAMED
|
File without changes
|
{splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/communication/exceptions.py
RENAMED
|
File without changes
|
{splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/communication/local_client.py
RENAMED
|
File without changes
|
{splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/communication/remote_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/database/local_client.py
RENAMED
|
File without changes
|
{splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/database/remote_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/datalake/local_client.py
RENAMED
|
File without changes
|
{splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/client/datalake/remote_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{splight-lib-4.0.0.dev4 → splight-lib-4.0.0.dev6}/splight_lib/communication/event_handler.py
RENAMED
|
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
|