splight-lib 5.4.4__tar.gz → 5.5.0.dev1__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-5.4.4 → splight_lib-5.5.0.dev1}/PKG-INFO +1 -1
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/pyproject.toml +1 -1
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/client/datalake/__init__.py +2 -2
- splight_lib-5.5.0.dev1/splight_lib/client/datalake/builder.py +26 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/client/datalake/remote_client.py +97 -8
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/client/tests/test_datalake.py +3 -3
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/models/base.py +1 -2
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/models/pipeline.py +1 -1
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/settings.py +11 -2
- splight_lib-5.4.4/splight_lib/client/datalake/builder.py +0 -24
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/LICENSE.txt +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/README.md +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/__init__.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/abstract/__init__.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/abstract/client.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/auth/__init__.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/auth/exceptions.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/auth/mac_auth.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/auth/token.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/client/__init__.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/client/database/__init__.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/client/database/abstract.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/client/database/builder.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/client/database/classmap.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/client/database/local_client.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/client/database/remote_client.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/client/datalake/abstract.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/client/datalake/buffer.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/client/datalake/exceptions.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/client/datalake/local_client.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/client/datalake/schemas.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/client/exceptions.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/client/file_handler.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/client/filter.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/client/hub/__init__.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/client/hub/abstract.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/client/hub/client.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/client/tests/test_database.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/component/__init__.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/component/abstract.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/component/exceptions.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/component/spec.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/component/tests/test_abstract.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/component/tests/test_spec.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/constants.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/encryption.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/execution/__init__.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/execution/engine.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/execution/exceptions.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/execution/scheduling.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/execution/task.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/execution/tests/test_execution.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/execution/tests/test_scheduling.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/execution/trigger.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/logging/__init__.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/logging/_internal.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/logging/component.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/logging/constants.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/logging/logging.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/logging/tests/test_logging.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/models/__init__.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/models/alert.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/models/asset.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/models/attribute.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/models/component.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/models/dashboard.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/models/data_address.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/models/exceptions.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/models/file.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/models/function.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/models/generic.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/models/hub.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/models/metadata.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/models/native.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/models/secret.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/models/tests/models.json +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/models/tests/test_component_object_instance.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/models/tests/test_database_model.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/models/tests/test_metadata.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/models/tests/test_models.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/restclient/__init__.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/restclient/client.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/restclient/exceptions.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/restclient/tests/test_restclient.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/restclient/types.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/stringcase.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/testing/__init__.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/tests/FakeProc.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/tests/asset_geometries.json +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/tests/test_api_contracts.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/tests/test_encryption.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/utils/__init__.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/utils/custom_model.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/utils/hub.py +0 -0
- {splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/version.py +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
from splight_lib.client.datalake.builder import DatalakeClientBuilder
|
|
2
2
|
from splight_lib.client.datalake.local_client import LocalDatalakeClient
|
|
3
|
-
from splight_lib.client.datalake.remote_client import
|
|
3
|
+
from splight_lib.client.datalake.remote_client import SyncRemoteDatalakeClient
|
|
4
4
|
|
|
5
5
|
__all__ = [
|
|
6
6
|
DatalakeClientBuilder,
|
|
7
|
-
|
|
7
|
+
SyncRemoteDatalakeClient,
|
|
8
8
|
LocalDatalakeClient,
|
|
9
9
|
]
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from typing import Any, Dict
|
|
2
|
+
|
|
3
|
+
from splight_lib.client.datalake.abstract import AbstractDatalakeClient
|
|
4
|
+
from splight_lib.client.datalake.local_client import LocalDatalakeClient
|
|
5
|
+
from splight_lib.client.datalake.remote_client import (
|
|
6
|
+
BufferedAsyncRemoteDatalakeClient,
|
|
7
|
+
BufferedSyncRemoteDataClient,
|
|
8
|
+
SyncRemoteDatalakeClient,
|
|
9
|
+
)
|
|
10
|
+
from splight_lib.settings import DatalakeClientType
|
|
11
|
+
|
|
12
|
+
DL_CLIENT_TYPE_MAP = {
|
|
13
|
+
DatalakeClientType.BUFFERED_ASYNC: BufferedAsyncRemoteDatalakeClient,
|
|
14
|
+
DatalakeClientType.BUFFERED_SYNC: BufferedSyncRemoteDataClient,
|
|
15
|
+
DatalakeClientType.SYNC: SyncRemoteDatalakeClient,
|
|
16
|
+
DatalakeClientType.LOCAL: LocalDatalakeClient,
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class DatalakeClientBuilder:
|
|
21
|
+
@staticmethod
|
|
22
|
+
def build(
|
|
23
|
+
dl_client_type: DatalakeClientType = DatalakeClientType.BUFFERED_ASYNC,
|
|
24
|
+
parameters: Dict[str, Any] = {},
|
|
25
|
+
) -> AbstractDatalakeClient:
|
|
26
|
+
return DL_CLIENT_TYPE_MAP[dl_client_type](**parameters)
|
|
@@ -26,7 +26,7 @@ from splight_lib.stringcase import camelcase
|
|
|
26
26
|
logger = get_splight_logger()
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
class
|
|
29
|
+
class SyncRemoteDatalakeClient(AbstractDatalakeClient):
|
|
30
30
|
_PREFIX = "/data"
|
|
31
31
|
|
|
32
32
|
def __init__(
|
|
@@ -198,7 +198,7 @@ class RemoteDatalakeClient(AbstractDatalakeClient):
|
|
|
198
198
|
return df
|
|
199
199
|
|
|
200
200
|
|
|
201
|
-
class
|
|
201
|
+
class BufferedAsyncRemoteDatalakeClient(SyncRemoteDatalakeClient):
|
|
202
202
|
_PREFIX = "data"
|
|
203
203
|
|
|
204
204
|
def __init__(
|
|
@@ -239,9 +239,9 @@ class BufferedRemoteDatalakeClient(RemoteDatalakeClient):
|
|
|
239
239
|
buffer_size, buffer_timeout
|
|
240
240
|
),
|
|
241
241
|
}
|
|
242
|
+
self._lock = Lock()
|
|
242
243
|
self._flush_thread = Thread(target=self._flusher, daemon=True)
|
|
243
244
|
self._flush_thread.start()
|
|
244
|
-
self._lock = Lock()
|
|
245
245
|
logger.debug(
|
|
246
246
|
"Buffered Remote datalake client initialized.",
|
|
247
247
|
tags=LogTags.DATALAKE,
|
|
@@ -277,22 +277,111 @@ class BufferedRemoteDatalakeClient(RemoteDatalakeClient):
|
|
|
277
277
|
def _flush_buffer(
|
|
278
278
|
self, collection: str, buffer: DatalakeDocumentBuffer
|
|
279
279
|
) -> None:
|
|
280
|
-
|
|
281
|
-
|
|
280
|
+
with self._lock:
|
|
281
|
+
if buffer.should_flush():
|
|
282
|
+
try:
|
|
283
|
+
logger.debug(
|
|
284
|
+
"Flushing datalake buffer with %s elements",
|
|
285
|
+
len(buffer.data),
|
|
286
|
+
)
|
|
287
|
+
self._send_documents(collection, buffer.data)
|
|
288
|
+
buffer.reset()
|
|
289
|
+
except Exception:
|
|
290
|
+
logger.error("Unable to save documents", exc_info=True)
|
|
291
|
+
|
|
292
|
+
@retry(SPLIGHT_REQUEST_EXCEPTIONS, tries=3, delay=2, jitter=1)
|
|
293
|
+
def _send_documents(self, collection: str, docs: List[Dict]) -> List[Dict]:
|
|
294
|
+
url = self._base_url / f"{self._PREFIX}/write"
|
|
295
|
+
collection = camelcase(collection)
|
|
296
|
+
data = {
|
|
297
|
+
"collection": collection,
|
|
298
|
+
"records": docs,
|
|
299
|
+
}
|
|
300
|
+
response = self._restclient.post(url, json=data)
|
|
301
|
+
response.raise_for_status()
|
|
302
|
+
return docs
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
class BufferedSyncRemoteDataClient(SyncRemoteDatalakeClient):
|
|
306
|
+
_PREFIX = "data"
|
|
307
|
+
|
|
308
|
+
def __init__(
|
|
309
|
+
self,
|
|
310
|
+
base_url: str,
|
|
311
|
+
access_id: str,
|
|
312
|
+
secret_key: str,
|
|
313
|
+
buffer_size: int = DL_BUFFER_SIZE,
|
|
314
|
+
buffer_timeout: float = DL_BUFFER_TIMEOUT,
|
|
315
|
+
*args,
|
|
316
|
+
**kwargs,
|
|
317
|
+
):
|
|
318
|
+
super().__init__(
|
|
319
|
+
base_url,
|
|
320
|
+
access_id,
|
|
321
|
+
secret_key,
|
|
322
|
+
buffer_size,
|
|
323
|
+
buffer_timeout,
|
|
324
|
+
*args,
|
|
325
|
+
**kwargs,
|
|
326
|
+
)
|
|
327
|
+
self._base_url = furl(base_url)
|
|
328
|
+
token = SplightAuthToken(
|
|
329
|
+
access_key=access_id,
|
|
330
|
+
secret_key=secret_key,
|
|
331
|
+
)
|
|
332
|
+
self._restclient = SplightRestClient()
|
|
333
|
+
self._restclient.update_headers(token.header)
|
|
334
|
+
|
|
335
|
+
logger.debug(
|
|
336
|
+
"Initializing buffer with size %s and timeout %s",
|
|
337
|
+
buffer_size,
|
|
338
|
+
buffer_timeout,
|
|
339
|
+
)
|
|
340
|
+
self._data_buffers = {
|
|
341
|
+
"default": DatalakeDocumentBuffer(buffer_size, buffer_timeout),
|
|
342
|
+
"routine_evaluations": DatalakeDocumentBuffer(
|
|
343
|
+
buffer_size, buffer_timeout
|
|
344
|
+
),
|
|
345
|
+
}
|
|
346
|
+
self._lock = Lock()
|
|
347
|
+
logger.debug(
|
|
348
|
+
"Synchronous Buffered Remote datalake client initialized.",
|
|
349
|
+
tags=LogTags.DATALAKE,
|
|
350
|
+
)
|
|
351
|
+
|
|
352
|
+
def save(
|
|
353
|
+
self, collection: str, instances: Union[List[Dict], Dict]
|
|
354
|
+
) -> List[Dict]:
|
|
355
|
+
logger.debug("Saving documents in datalake")
|
|
356
|
+
instances = instances if isinstance(instances, List) else [instances]
|
|
357
|
+
if collection not in self._data_buffers:
|
|
358
|
+
raise InvalidCollectionName(collection)
|
|
359
|
+
buffer = self._data_buffers[collection]
|
|
360
|
+
with self._lock:
|
|
361
|
+
if buffer.should_flush():
|
|
282
362
|
logger.debug(
|
|
283
363
|
"Flushing datalake buffer with %s elements",
|
|
284
364
|
len(buffer.data),
|
|
285
365
|
)
|
|
286
366
|
self._send_documents(collection, buffer.data)
|
|
287
367
|
buffer.reset()
|
|
288
|
-
|
|
289
|
-
|
|
368
|
+
buffer.add_documents(instances)
|
|
369
|
+
return instances
|
|
370
|
+
|
|
371
|
+
def save_dataframe(
|
|
372
|
+
self, dataframe: pd.DataFrame, collection: str = DEFAULT_COLLECTION
|
|
373
|
+
) -> None:
|
|
374
|
+
logger.debug("Saving dataframe in datalake")
|
|
375
|
+
dataframe["timestamp"] = dataframe["timestamp"].apply(
|
|
376
|
+
lambda x: x.tz_localize(tz="UTC").isoformat()
|
|
377
|
+
)
|
|
378
|
+
instances = dataframe.to_dict("records")
|
|
379
|
+
self.save(collection, instances)
|
|
290
380
|
|
|
291
381
|
@retry(SPLIGHT_REQUEST_EXCEPTIONS, tries=3, delay=2, jitter=1)
|
|
292
382
|
def _send_documents(self, collection: str, docs: List[Dict]) -> List[Dict]:
|
|
293
383
|
url = self._base_url / f"{self._PREFIX}/write"
|
|
294
384
|
collection = camelcase(collection)
|
|
295
|
-
collection = camelcase(collection)
|
|
296
385
|
data = {
|
|
297
386
|
"collection": collection,
|
|
298
387
|
"records": docs,
|
|
@@ -2,7 +2,7 @@ import os
|
|
|
2
2
|
|
|
3
3
|
from pytest_mock import MockerFixture
|
|
4
4
|
|
|
5
|
-
from splight_lib.client.datalake import
|
|
5
|
+
from splight_lib.client.datalake import SyncRemoteDatalakeClient # noqa E402
|
|
6
6
|
from splight_lib.client.datalake.remote_client import ( # noqa E402
|
|
7
7
|
SplightRestClient,
|
|
8
8
|
)
|
|
@@ -34,7 +34,7 @@ def test_initialization(mocker: MockerFixture):
|
|
|
34
34
|
"update_headers",
|
|
35
35
|
return_value=None,
|
|
36
36
|
)
|
|
37
|
-
_ =
|
|
37
|
+
_ = SyncRemoteDatalakeClient(
|
|
38
38
|
base_url=base_url,
|
|
39
39
|
access_id=access_id,
|
|
40
40
|
secret_key=secret_key,
|
|
@@ -49,7 +49,7 @@ def test_save(mocker: MockerFixture):
|
|
|
49
49
|
secret_key = os.getenv("SECRET_KEY")
|
|
50
50
|
access_id = os.getenv("ACCESS_ID")
|
|
51
51
|
|
|
52
|
-
client =
|
|
52
|
+
client = SyncRemoteDatalakeClient(
|
|
53
53
|
base_url=base_url,
|
|
54
54
|
access_id=access_id,
|
|
55
55
|
secret_key=secret_key,
|
|
@@ -170,8 +170,7 @@ class SplightDatalakeBaseModel(BaseModel):
|
|
|
170
170
|
@staticmethod
|
|
171
171
|
def __get_datalake_client() -> AbstractDatalakeClient:
|
|
172
172
|
db_client = DatalakeClientBuilder.build(
|
|
173
|
-
|
|
174
|
-
use_buffer=settings.USE_BUFFER,
|
|
173
|
+
dl_client_type=settings.DL_CLIENT_TYPE,
|
|
175
174
|
parameters={
|
|
176
175
|
"path": settings.CURRENT_DIR,
|
|
177
176
|
"base_url": settings.SPLIGHT_PLATFORM_API_HOST,
|
|
@@ -12,7 +12,7 @@ from splight_lib.stringcase import camelcase
|
|
|
12
12
|
|
|
13
13
|
def get_datalake_client() -> AbstractDatalakeClient:
|
|
14
14
|
client = DatalakeClientBuilder.build(
|
|
15
|
-
|
|
15
|
+
dl_client_type=settings.DL_CLIENT_TYPE,
|
|
16
16
|
parameters={
|
|
17
17
|
"path": settings.CURRENT_DIR,
|
|
18
18
|
"base_url": settings.SPLIGHT_PLATFORM_API_HOST,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import os
|
|
2
|
+
from enum import Enum
|
|
2
3
|
from typing import Any, Dict, Optional, Tuple, Type
|
|
3
4
|
|
|
4
5
|
import yaml
|
|
@@ -11,6 +12,13 @@ from splight_lib.constants import DL_BUFFER_SIZE, DL_BUFFER_TIMEOUT
|
|
|
11
12
|
SPLIGHT_HOME = os.path.join(os.path.expanduser("~"), ".splight")
|
|
12
13
|
|
|
13
14
|
|
|
15
|
+
class DatalakeClientType(str, Enum):
|
|
16
|
+
LOCAL = "local"
|
|
17
|
+
SYNC = "sync"
|
|
18
|
+
BUFFERED_SYNC = "buffered_sync"
|
|
19
|
+
BUFFERED_ASYNC = "buffered_async"
|
|
20
|
+
|
|
21
|
+
|
|
14
22
|
class Singleton:
|
|
15
23
|
def __new__(cls, *args, **kw):
|
|
16
24
|
if not hasattr(cls, "_instance"):
|
|
@@ -58,12 +66,13 @@ class SplightSettings(BaseSettings, Singleton):
|
|
|
58
66
|
SPLIGHT_PLATFORM_API_HOST: str = "https://api.splight-ai.com"
|
|
59
67
|
|
|
60
68
|
# Parameters for local environment
|
|
69
|
+
# TODO: to deprecate this and its effects
|
|
61
70
|
LOCAL_ENVIRONMENT: bool = False
|
|
62
71
|
CURRENT_DIR: Optional[str] = None
|
|
63
72
|
|
|
64
|
-
# Parameters for
|
|
73
|
+
# Parameters for the datalake client
|
|
65
74
|
# Review if is better to use another class for only the DL Client settings
|
|
66
|
-
|
|
75
|
+
DL_CLIENT_TYPE: DatalakeClientType = DatalakeClientType.BUFFERED_ASYNC
|
|
67
76
|
DL_BUFFER_SIZE: int = DL_BUFFER_SIZE
|
|
68
77
|
DL_BUFFER_TIMEOUT: float = DL_BUFFER_TIMEOUT # seconds
|
|
69
78
|
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
from typing import Any, Dict
|
|
2
|
-
|
|
3
|
-
from splight_lib.client.datalake.abstract import AbstractDatalakeClient
|
|
4
|
-
from splight_lib.client.datalake.local_client import LocalDatalakeClient
|
|
5
|
-
from splight_lib.client.datalake.remote_client import (
|
|
6
|
-
BufferedRemoteDatalakeClient,
|
|
7
|
-
RemoteDatalakeClient,
|
|
8
|
-
)
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class DatalakeClientBuilder:
|
|
12
|
-
@staticmethod
|
|
13
|
-
def build(
|
|
14
|
-
local: bool = False,
|
|
15
|
-
use_buffer: bool = True,
|
|
16
|
-
parameters: Dict[str, Any] = {},
|
|
17
|
-
) -> AbstractDatalakeClient:
|
|
18
|
-
if local:
|
|
19
|
-
dl_client = LocalDatalakeClient(**parameters)
|
|
20
|
-
elif use_buffer:
|
|
21
|
-
dl_client = BufferedRemoteDatalakeClient(**parameters)
|
|
22
|
-
else:
|
|
23
|
-
dl_client = RemoteDatalakeClient(**parameters)
|
|
24
|
-
return dl_client
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/models/tests/test_database_model.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{splight_lib-5.4.4 → splight_lib-5.5.0.dev1}/splight_lib/restclient/tests/test_restclient.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
|