splight-lib 4.6.2__tar.gz → 4.6.4__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.6.2 → splight_lib-4.6.4}/PKG-INFO +2 -1
- {splight_lib-4.6.2 → splight_lib-4.6.4}/pyproject.toml +2 -1
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/component/abstract.py +21 -2
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/execution/engine.py +21 -8
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/file.py +30 -20
- {splight_lib-4.6.2 → splight_lib-4.6.4}/LICENSE.txt +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/README.md +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/__init__.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/abstract/__init__.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/abstract/client.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/auth/__init__.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/auth/exceptions.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/auth/mac_auth.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/auth/token.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/__init__.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/communication/__init__.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/communication/abstract.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/communication/classmap.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/communication/exceptions.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/communication/local_client.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/communication/remote_client.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/database/__init__.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/database/abstract.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/database/builder.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/database/classmap.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/database/local_client.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/database/remote_client.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/datalake/__init__.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/datalake/abstract.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/datalake/buffer.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/datalake/builder.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/datalake/exceptions.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/datalake/local_client.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/datalake/remote_client.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/exceptions.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/file_handler.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/filter.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/hub/__init__.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/hub/abstract.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/hub/client.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/tests/test_communication.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/tests/test_database.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/tests/test_datalake.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/client/tests/test_hub.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/communication/__init__.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/communication/event_handler.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/communication/tests/test_event_handler.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/component/__init__.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/component/exceptions.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/component/spec.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/component/tests/test_abstract.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/component/tests/test_spec.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/constants.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/encryption.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/execution/__init__.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/execution/exceptions.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/execution/scheduling.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/execution/task.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/execution/tests/test_execution.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/execution/tests/test_scheduling.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/execution/trigger.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/logging/__init__.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/logging/_internal.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/logging/component.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/logging/constants.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/logging/logging.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/logging/tests/test_logging.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/__init__.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/alert.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/asset.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/attribute.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/base.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/communication.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/component.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/dashboard.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/data_address.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/event.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/exceptions.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/function.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/generic.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/hub.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/metadata.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/native.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/pipeline.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/secret.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/tests/models.json +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/tests/test_component_object_instance.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/tests/test_database_model.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/tests/test_metadata.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/tests/test_models.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/restclient/__init__.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/restclient/client.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/restclient/exceptions.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/restclient/tests/test_restclient.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/restclient/types.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/settings.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/stringcase.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/testing/__init__.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/tests/FakeProc.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/tests/asset_geometries.json +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/tests/test_api_contracts.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/tests/test_encryption.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/utils/__init__.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/utils/custom_model.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/utils/hub.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/version.py +0 -0
- {splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/webhook.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: splight-lib
|
|
3
|
-
Version: 4.6.
|
|
3
|
+
Version: 4.6.4
|
|
4
4
|
Summary: Splight Library
|
|
5
5
|
Author: Splight Dev
|
|
6
6
|
Author-email: dev@splight-ae.com
|
|
@@ -34,6 +34,7 @@ Requires-Dist: requests (>=2.26.0)
|
|
|
34
34
|
Requires-Dist: retry (==0.9.2)
|
|
35
35
|
Requires-Dist: simplejson (==3.17.6)
|
|
36
36
|
Requires-Dist: strenum (==0.4.9)
|
|
37
|
+
Requires-Dist: typer (==0.9.0)
|
|
37
38
|
Requires-Dist: typing-extensions (>=4.6.1,<5.0.0)
|
|
38
39
|
Description-Content-Type: text/markdown
|
|
39
40
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "splight-lib"
|
|
3
|
-
version = "4.6.
|
|
3
|
+
version = "4.6.4"
|
|
4
4
|
description = "Splight Library"
|
|
5
5
|
authors = ["Splight Dev <dev@splight-ae.com>"]
|
|
6
6
|
readme = "README.md"
|
|
@@ -32,6 +32,7 @@ typing-extensions = "^4.6.1"
|
|
|
32
32
|
pydantic-settings = "2.0.3"
|
|
33
33
|
email-validator = "^2.1.0.post1"
|
|
34
34
|
apscheduler = "3.10.4"
|
|
35
|
+
typer = "0.9.0"
|
|
35
36
|
|
|
36
37
|
[tool.poetry.group.dev.dependencies]
|
|
37
38
|
black = "23.3.0"
|
|
@@ -8,6 +8,7 @@ from time import sleep
|
|
|
8
8
|
from typing import Callable, Dict, Optional, Type
|
|
9
9
|
|
|
10
10
|
from pydantic import BaseModel
|
|
11
|
+
from pydantic_core import ValidationError
|
|
11
12
|
|
|
12
13
|
from splight_lib.component.spec import Spec
|
|
13
14
|
from splight_lib.execution.engine import EngineStatus, ExecutionEngine
|
|
@@ -80,6 +81,26 @@ class SplightBaseComponent(ABC):
|
|
|
80
81
|
daemon=False,
|
|
81
82
|
)
|
|
82
83
|
|
|
84
|
+
self._spec = None
|
|
85
|
+
self._input = None
|
|
86
|
+
self._output = None
|
|
87
|
+
self._custom_types = None
|
|
88
|
+
self._routines = None
|
|
89
|
+
try:
|
|
90
|
+
self._setup_component(component_id)
|
|
91
|
+
except ValidationError as exc:
|
|
92
|
+
logger.debug(
|
|
93
|
+
"There was an error validating the component configuration"
|
|
94
|
+
)
|
|
95
|
+
logger.exception(exc, tags=LogTags.COMPONENT)
|
|
96
|
+
self.stop()
|
|
97
|
+
except Exception as exc:
|
|
98
|
+
logger.exception(exc, tags=LogTags.COMPONENT)
|
|
99
|
+
self.stop()
|
|
100
|
+
|
|
101
|
+
self.start = self._wrap_start(self.start)
|
|
102
|
+
|
|
103
|
+
def _setup_component(self, component_id: str):
|
|
83
104
|
self._spec = self._load_spec()
|
|
84
105
|
self._input = self._spec.component_input(component_id)
|
|
85
106
|
self._output = self._spec.get_output_models(component_id)
|
|
@@ -99,8 +120,6 @@ class SplightBaseComponent(ABC):
|
|
|
99
120
|
self._custom_types = self._get_custom_type_model(component_objects)
|
|
100
121
|
self._routines = self._get_routine_model(routine_objects)
|
|
101
122
|
|
|
102
|
-
self.start = self._wrap_start(self.start)
|
|
103
|
-
|
|
104
123
|
@property
|
|
105
124
|
def input(self) -> BaseModel:
|
|
106
125
|
return self._input
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from enum import
|
|
1
|
+
from enum import auto
|
|
2
2
|
from typing import Set, Tuple
|
|
3
3
|
|
|
4
4
|
import pytz
|
|
@@ -25,16 +25,21 @@ class ExecutionEngine:
|
|
|
25
25
|
self._logger.info(
|
|
26
26
|
"Execution client initialized.", tags=LogTags.RUNTIME
|
|
27
27
|
)
|
|
28
|
-
self._blocking_sch = BlockingScheduler(
|
|
28
|
+
self._blocking_sch = BlockingScheduler(
|
|
29
|
+
job_defaults={"misfire_grace_time": None},
|
|
30
|
+
timezone=pytz.UTC,
|
|
31
|
+
)
|
|
29
32
|
self._background_sch = BackgroundScheduler(
|
|
30
|
-
|
|
33
|
+
job_defaults={"misfire_grace_time": None},
|
|
34
|
+
timezone=pytz.UTC,
|
|
35
|
+
daemon=True,
|
|
31
36
|
)
|
|
32
37
|
self._critical_jobs: Set[str] = set()
|
|
33
38
|
self._blocking_sch.add_listener(
|
|
34
|
-
self.
|
|
39
|
+
self._task_fail_callback, EVENT_JOB_ERROR
|
|
35
40
|
)
|
|
36
41
|
self._background_sch.add_listener(
|
|
37
|
-
self.
|
|
42
|
+
self._task_fail_callback, EVENT_JOB_ERROR
|
|
38
43
|
)
|
|
39
44
|
self._running = True
|
|
40
45
|
self._state = EngineStatus.INITIALIZED
|
|
@@ -75,6 +80,7 @@ class ExecutionEngine:
|
|
|
75
80
|
task: BaseTask,
|
|
76
81
|
in_background: bool = True,
|
|
77
82
|
exit_on_fail: bool = False,
|
|
83
|
+
max_instances: int = 1,
|
|
78
84
|
):
|
|
79
85
|
"""Adds new task to the corresponding scheduler.
|
|
80
86
|
|
|
@@ -88,16 +94,23 @@ class ExecutionEngine:
|
|
|
88
94
|
exit_on_fail: bool
|
|
89
95
|
Used to stop the engine if the task execution failed. This
|
|
90
96
|
parameter is usefull to declare critical tasks.
|
|
97
|
+
max_instances: int = 1
|
|
98
|
+
Maximum number of concurrently running instances allowed for this
|
|
99
|
+
job
|
|
91
100
|
"""
|
|
92
101
|
if in_background:
|
|
93
|
-
job = self._background_sch.add_job(
|
|
102
|
+
job = self._background_sch.add_job(
|
|
103
|
+
**task.as_job(), max_instances=max_instances
|
|
104
|
+
)
|
|
94
105
|
else:
|
|
95
|
-
job = self._blocking_sch.add_job(
|
|
106
|
+
job = self._blocking_sch.add_job(
|
|
107
|
+
**task.as_job(), max_instances=max_instances
|
|
108
|
+
)
|
|
96
109
|
if exit_on_fail:
|
|
97
110
|
self._critical_jobs.add(job.id)
|
|
98
111
|
self._logger.info(f"Job {job.id} added", tags=LogTags.RUNTIME)
|
|
99
112
|
|
|
100
|
-
def
|
|
113
|
+
def _task_fail_callback(self, event: JobExecutionEvent):
|
|
101
114
|
if event.job_id in self._critical_jobs:
|
|
102
115
|
self._logger.error(
|
|
103
116
|
"An error ocurred in job execution. Stopping engine"
|
|
@@ -13,7 +13,8 @@ from splight_lib.models.base import SplightDatabaseBaseModel
|
|
|
13
13
|
class File(SplightDatabaseBaseModel):
|
|
14
14
|
id: Optional[str] = None
|
|
15
15
|
assets: List[Asset] = []
|
|
16
|
-
file: str
|
|
16
|
+
file: Optional[str] = None
|
|
17
|
+
name: Optional[str] = None
|
|
17
18
|
description: Optional[str] = Field(
|
|
18
19
|
default=None, max_length=DESCRIPTION_MAX_LENGTH
|
|
19
20
|
)
|
|
@@ -24,28 +25,24 @@ class File(SplightDatabaseBaseModel):
|
|
|
24
25
|
|
|
25
26
|
@model_validator(mode="after")
|
|
26
27
|
def validate_file(self):
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
# Compute the checksum if missing
|
|
31
|
-
if self.checksum is None:
|
|
32
|
-
hasher = hashlib.md5()
|
|
33
|
-
with open(self.file, "rb") as file:
|
|
34
|
-
# Read in chunks of 8KiB for large files
|
|
35
|
-
while chunk := file.read(8192):
|
|
36
|
-
hasher.update(chunk)
|
|
37
|
-
self.checksum = hasher.hexdigest()
|
|
28
|
+
if self.file:
|
|
29
|
+
self.file = self.file.replace("/", os.sep)
|
|
30
|
+
self.file = self.file.replace("\\", os.sep)
|
|
38
31
|
|
|
32
|
+
# Compute the checksum if missing
|
|
33
|
+
if self.checksum is None:
|
|
34
|
+
hasher = hashlib.md5()
|
|
35
|
+
with open(self.file, "rb") as file:
|
|
36
|
+
# Read in chunks of 8KiB for large files
|
|
37
|
+
while chunk := file.read(8192):
|
|
38
|
+
hasher.update(chunk)
|
|
39
|
+
self.checksum = hasher.hexdigest()
|
|
39
40
|
return self
|
|
40
41
|
|
|
41
42
|
@field_validator("metadata", mode="before")
|
|
42
43
|
def validate_metadata(cls, v):
|
|
43
44
|
return json.loads(v) if isinstance(v, str) else v
|
|
44
45
|
|
|
45
|
-
@property
|
|
46
|
-
def name(self):
|
|
47
|
-
return self.file.split(os.sep)[-1]
|
|
48
|
-
|
|
49
46
|
def download(self):
|
|
50
47
|
file = self._db_client.download(
|
|
51
48
|
resource_name=self.__class__.__name__,
|
|
@@ -55,12 +52,25 @@ class File(SplightDatabaseBaseModel):
|
|
|
55
52
|
|
|
56
53
|
def model_dump(self, *args, **kwargs):
|
|
57
54
|
res = super().model_dump(*args, **kwargs)
|
|
58
|
-
|
|
55
|
+
if self.metadata:
|
|
56
|
+
res["metadata"] = json.dumps(self.metadata)
|
|
59
57
|
return res
|
|
60
58
|
|
|
61
59
|
def model_dump_json(self, *args, **kwargs):
|
|
62
|
-
prev_metadata = self.metadata
|
|
63
|
-
self.metadata = json.dumps(self.metadata)
|
|
64
60
|
res = super().model_dump_json(*args, **kwargs)
|
|
65
|
-
self.metadata
|
|
61
|
+
if self.metadata:
|
|
62
|
+
prev_metadata = self.metadata
|
|
63
|
+
self.metadata = json.dumps(self.metadata)
|
|
64
|
+
self.metadata = prev_metadata
|
|
66
65
|
return res
|
|
66
|
+
|
|
67
|
+
def save(self):
|
|
68
|
+
saved = self._db_client.save(
|
|
69
|
+
self.__class__.__name__, self.model_dump(exclude_none=True)
|
|
70
|
+
)
|
|
71
|
+
if not self.id:
|
|
72
|
+
self.id = saved["id"]
|
|
73
|
+
self.name = saved["name"]
|
|
74
|
+
self.content_type = saved["content_type"]
|
|
75
|
+
self.checksum = saved["checksum"]
|
|
76
|
+
self.url = saved["url"]
|
|
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
|
{splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/communication/tests/test_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
|
{splight_lib-4.6.2 → splight_lib-4.6.4}/splight_lib/models/tests/test_component_object_instance.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
|