qwak-sdk 0.5.36__py3-none-any.whl → 0.5.38__py3-none-any.whl
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.
Potentially problematic release.
This version of qwak-sdk might be problematic. Click here for more details.
- qwak_sdk/__init__.py +1 -1
- qwak_sdk/commands/feature_store/register/_logic.py +71 -76
- qwak_sdk/commands/feature_store/register/ui.py +3 -1
- qwak_sdk/inner/file_registry.py +2 -1
- {qwak_sdk-0.5.36.dist-info → qwak_sdk-0.5.38.dist-info}/METADATA +2 -2
- {qwak_sdk-0.5.36.dist-info → qwak_sdk-0.5.38.dist-info}/RECORD +8 -8
- {qwak_sdk-0.5.36.dist-info → qwak_sdk-0.5.38.dist-info}/WHEEL +0 -0
- {qwak_sdk-0.5.36.dist-info → qwak_sdk-0.5.38.dist-info}/entry_points.txt +0 -0
qwak_sdk/__init__.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import List, Optional, Tuple
|
|
1
|
+
from typing import List, Optional, Tuple, cast
|
|
2
2
|
|
|
3
3
|
from _qwak_proto.qwak.feature_store.entities.entity_pb2 import (
|
|
4
4
|
EntityDefinition as ProtoEntityDefinition,
|
|
@@ -10,17 +10,19 @@ from _qwak_proto.qwak.feature_store.features.feature_set_service_pb2 import (
|
|
|
10
10
|
GetFeatureSetByNameResponse as ProtoGetFeatureSetByNameResponse,
|
|
11
11
|
)
|
|
12
12
|
from _qwak_proto.qwak.features_operator.v3.features_operator_pb2 import (
|
|
13
|
-
Outputs,
|
|
14
13
|
SparkColumnDescription,
|
|
15
14
|
ValidationSuccessResponse,
|
|
16
15
|
)
|
|
17
16
|
from qwak.clients.feature_store import FeatureRegistryClient
|
|
18
17
|
from qwak.clients.feature_store.operator_client import FeaturesOperatorClient
|
|
19
18
|
from qwak.exceptions import QwakException
|
|
20
|
-
from qwak.feature_store.data_sources.
|
|
19
|
+
from qwak.feature_store.data_sources.base import BaseSource
|
|
21
20
|
from qwak.feature_store.entities.entity import Entity
|
|
22
21
|
from qwak.feature_store.feature_sets.base_feature_set import BaseFeatureSet
|
|
23
|
-
from qwak.feature_store.
|
|
22
|
+
from qwak.feature_store.validations.validation_response import (
|
|
23
|
+
SuccessValidationResponse,
|
|
24
|
+
ValidationResponse,
|
|
25
|
+
)
|
|
24
26
|
from tabulate import tabulate
|
|
25
27
|
|
|
26
28
|
from qwak_sdk.inner.file_registry import extract_class_objects
|
|
@@ -31,7 +33,9 @@ DELIMITER = "----------------------------------------"
|
|
|
31
33
|
|
|
32
34
|
|
|
33
35
|
def _register_entities(
|
|
34
|
-
qwak_python_files: List[str
|
|
36
|
+
qwak_python_files: List[Tuple[str, str]],
|
|
37
|
+
registry: FeatureRegistryClient,
|
|
38
|
+
force: bool,
|
|
35
39
|
):
|
|
36
40
|
"""
|
|
37
41
|
Register Feature Store Entity Objects
|
|
@@ -68,7 +72,7 @@ def _register_entities(
|
|
|
68
72
|
|
|
69
73
|
|
|
70
74
|
def _register_data_sources(
|
|
71
|
-
qwak_python_files: List[str],
|
|
75
|
+
qwak_python_files: List[Tuple[str, str]],
|
|
72
76
|
registry: FeatureRegistryClient,
|
|
73
77
|
operator_client: FeaturesOperatorClient,
|
|
74
78
|
force: bool,
|
|
@@ -89,7 +93,7 @@ def _register_data_sources(
|
|
|
89
93
|
with qwak_spinner(
|
|
90
94
|
begin_text="Finding Data Sources to register", print_callback=print
|
|
91
95
|
):
|
|
92
|
-
qwak_sources = extract_class_objects(qwak_python_files,
|
|
96
|
+
qwak_sources = extract_class_objects(qwak_python_files, BaseSource)
|
|
93
97
|
|
|
94
98
|
print(f"👀 Found {len(qwak_sources)} Data Sources")
|
|
95
99
|
for data_source, source_file_path in qwak_sources:
|
|
@@ -129,7 +133,7 @@ def _register_data_sources(
|
|
|
129
133
|
|
|
130
134
|
def _handle_data_source_validation(
|
|
131
135
|
operator_client: FeaturesOperatorClient,
|
|
132
|
-
data_source:
|
|
136
|
+
data_source: BaseSource,
|
|
133
137
|
):
|
|
134
138
|
print(f"Validating '{data_source.name}' data source")
|
|
135
139
|
with qwak_spinner(begin_text="", print_callback=print):
|
|
@@ -139,7 +143,7 @@ def _handle_data_source_validation(
|
|
|
139
143
|
|
|
140
144
|
response = getattr(result, result.WhichOneof("type"))
|
|
141
145
|
if isinstance(response, ValidationSuccessResponse):
|
|
142
|
-
print_validation_outputs(response)
|
|
146
|
+
print_validation_outputs(response.outputs.stdout, response.outputs.stderr)
|
|
143
147
|
print("✅ Validation completed successfully, got data source columns:")
|
|
144
148
|
|
|
145
149
|
table = [
|
|
@@ -147,13 +151,12 @@ def _handle_data_source_validation(
|
|
|
147
151
|
]
|
|
148
152
|
print(tabulate(table, headers=["column name", "type"]))
|
|
149
153
|
else:
|
|
150
|
-
raise QwakException(f"🧨 Validation failed
|
|
154
|
+
raise QwakException(f"🧨 Validation failed: \n{response}")
|
|
151
155
|
|
|
152
156
|
|
|
153
157
|
def _register_features_sets(
|
|
154
|
-
qwak_python_files: List[str],
|
|
158
|
+
qwak_python_files: List[Tuple[str, str]],
|
|
155
159
|
registry: FeatureRegistryClient,
|
|
156
|
-
operator_client: FeaturesOperatorClient,
|
|
157
160
|
force: bool,
|
|
158
161
|
git_commit: str,
|
|
159
162
|
no_validation: bool,
|
|
@@ -165,7 +168,6 @@ def _register_features_sets(
|
|
|
165
168
|
Args:
|
|
166
169
|
qwak_python_files: a list of python files containing qwak package imports
|
|
167
170
|
registry: FeatureRegistryClient
|
|
168
|
-
operator_client: features operator grpc client
|
|
169
171
|
force: boolean determining if to force register all encountered Feature Set objects
|
|
170
172
|
git_commit: the git commit of the parent folder
|
|
171
173
|
no_validation: whether to validate entities
|
|
@@ -174,43 +176,48 @@ def _register_features_sets(
|
|
|
174
176
|
with qwak_spinner(
|
|
175
177
|
begin_text="Finding Feature Sets to register", print_callback=print
|
|
176
178
|
):
|
|
177
|
-
qwak_feature_sets = extract_class_objects(qwak_python_files,
|
|
179
|
+
qwak_feature_sets = extract_class_objects(qwak_python_files, BaseFeatureSet)
|
|
178
180
|
|
|
179
181
|
print(f"👀 Found {len(qwak_feature_sets)} Feature Set(s)")
|
|
180
182
|
|
|
181
|
-
for
|
|
183
|
+
for featureset, source_file_path in qwak_feature_sets:
|
|
184
|
+
featureset = cast(BaseFeatureSet, featureset)
|
|
182
185
|
existing_feature_set: ProtoGetFeatureSetByNameResponse = (
|
|
183
|
-
registry.get_feature_set_by_name(
|
|
186
|
+
registry.get_feature_set_by_name(featureset.name)
|
|
184
187
|
)
|
|
185
188
|
|
|
186
189
|
registration: bool = False
|
|
187
190
|
if existing_feature_set:
|
|
188
191
|
# Provide entity information of registered feature set before any other operation
|
|
189
|
-
if
|
|
190
|
-
|
|
192
|
+
if featureset.key:
|
|
193
|
+
featureset.entity = (
|
|
191
194
|
existing_feature_set.feature_set.feature_set_definition.feature_set_spec.entity.entity_spec.name
|
|
192
195
|
)
|
|
193
196
|
|
|
194
197
|
registration = ask_yesno(
|
|
195
|
-
f"Update existing feature set '{
|
|
198
|
+
f"Update existing feature set '{featureset.name}' from source file '{source_file_path}'?", # nosec B608
|
|
196
199
|
force,
|
|
197
200
|
)
|
|
198
201
|
else:
|
|
199
202
|
registration = ask_yesno(
|
|
200
|
-
f"Create new feature set '{
|
|
203
|
+
f"Create new feature set '{featureset.name}' from source file '{source_file_path}'?",
|
|
201
204
|
force,
|
|
202
205
|
)
|
|
203
206
|
|
|
204
207
|
if registration:
|
|
205
|
-
|
|
206
|
-
|
|
208
|
+
features: Optional[List[ProtoFeature]] = []
|
|
209
|
+
artifact_url: Optional[str] = None
|
|
210
|
+
|
|
211
|
+
features, artifact_url = _validate_featureset(
|
|
212
|
+
featureset=featureset,
|
|
207
213
|
no_validation=no_validation,
|
|
208
|
-
operator=operator_client,
|
|
209
|
-
registry=registry,
|
|
210
214
|
)
|
|
211
215
|
|
|
212
|
-
proto_feature_set =
|
|
213
|
-
git_commit,
|
|
216
|
+
proto_feature_set, _ = featureset._to_proto(
|
|
217
|
+
git_commit=git_commit,
|
|
218
|
+
features=features,
|
|
219
|
+
feature_registry=registry,
|
|
220
|
+
artifact_url=artifact_url,
|
|
214
221
|
)
|
|
215
222
|
|
|
216
223
|
if existing_feature_set:
|
|
@@ -220,11 +227,12 @@ def _register_features_sets(
|
|
|
220
227
|
)
|
|
221
228
|
else:
|
|
222
229
|
_register_new_feature_set(
|
|
223
|
-
new_feature_set=
|
|
230
|
+
new_feature_set=featureset,
|
|
224
231
|
entity_key=proto_feature_set.entity,
|
|
225
232
|
registry=registry,
|
|
226
233
|
git_commit=git_commit,
|
|
227
|
-
|
|
234
|
+
features=features,
|
|
235
|
+
artifact_url=artifact_url,
|
|
228
236
|
)
|
|
229
237
|
|
|
230
238
|
|
|
@@ -233,7 +241,8 @@ def _register_new_feature_set(
|
|
|
233
241
|
entity_key: ProtoEntityDefinition,
|
|
234
242
|
registry: FeatureRegistryClient,
|
|
235
243
|
git_commit: str,
|
|
236
|
-
|
|
244
|
+
features: Optional[List[ProtoFeature]],
|
|
245
|
+
artifact_url: Optional[str] = None,
|
|
237
246
|
):
|
|
238
247
|
# Create entity for the defined key and set it as the fs's entity
|
|
239
248
|
if new_feature_set.key:
|
|
@@ -248,8 +257,8 @@ def _register_new_feature_set(
|
|
|
248
257
|
new_feature_set.entity = new_entity.name
|
|
249
258
|
|
|
250
259
|
# this is done to retrieve the entities metadata
|
|
251
|
-
proto_feature_set = new_feature_set._to_proto(
|
|
252
|
-
git_commit,
|
|
260
|
+
proto_feature_set, _ = new_feature_set._to_proto(
|
|
261
|
+
git_commit, features, registry, artifact_url=artifact_url
|
|
253
262
|
)
|
|
254
263
|
|
|
255
264
|
try:
|
|
@@ -264,32 +273,26 @@ def _register_new_feature_set(
|
|
|
264
273
|
raise e1
|
|
265
274
|
|
|
266
275
|
|
|
267
|
-
def
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
) -> List[SparkColumnDescription]:
|
|
272
|
-
print(f"Validating '{feature_set.name}' feature set")
|
|
276
|
+
def _handle_featureset_validation(
|
|
277
|
+
featureset: BaseFeatureSet,
|
|
278
|
+
) -> Tuple[List[ProtoFeature], Optional[str]]:
|
|
279
|
+
print(f"Validating '{featureset.name}' feature set")
|
|
273
280
|
with qwak_spinner(begin_text="", print_callback=print):
|
|
274
|
-
|
|
275
|
-
feature_registry=registry_client, features=None, git_commit=None
|
|
276
|
-
)
|
|
277
|
-
result = operator_client.validate_featureset_blocking(
|
|
278
|
-
feature_set_spec, resource_path=None, num_samples=10
|
|
279
|
-
)
|
|
281
|
+
from qwak.feature_store.validations.validator import FeaturesOperatorValidator
|
|
280
282
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
283
|
+
v = FeaturesOperatorValidator()
|
|
284
|
+
response: ValidationResponse
|
|
285
|
+
artifact_url: Optional[str]
|
|
286
|
+
|
|
287
|
+
response, artifact_url = v.validate_featureset(featureset=featureset)
|
|
288
|
+
if isinstance(response, SuccessValidationResponse):
|
|
289
|
+
print_validation_outputs(response.stdout, response.stderr)
|
|
284
290
|
print("✅ Validation completed successfully, got data source columns:")
|
|
285
|
-
table = [
|
|
286
|
-
(x.column_name, x.spark_type) for x in response.spark_column_description
|
|
287
|
-
]
|
|
291
|
+
table = [(x.feature_name, x.feature_type) for x in response.features]
|
|
288
292
|
print(tabulate(table, headers=["column name", "type"]))
|
|
289
|
-
return response.
|
|
290
|
-
|
|
293
|
+
return response.features, artifact_url
|
|
291
294
|
else:
|
|
292
|
-
raise QwakException(f"🧨 Validation failed
|
|
295
|
+
raise QwakException(f"🧨 Validation failed: \n{response}")
|
|
293
296
|
|
|
294
297
|
|
|
295
298
|
def _get_features_from_spark_columns_description(
|
|
@@ -315,55 +318,47 @@ def _get_features_from_spark_columns_description(
|
|
|
315
318
|
return None
|
|
316
319
|
|
|
317
320
|
|
|
318
|
-
def
|
|
319
|
-
|
|
321
|
+
def _validate_featureset(
|
|
322
|
+
featureset: BaseFeatureSet,
|
|
320
323
|
no_validation: bool,
|
|
321
|
-
|
|
322
|
-
registry: FeatureRegistryClient,
|
|
323
|
-
) -> Optional[List[ProtoFeature]]:
|
|
324
|
+
) -> Tuple[List[ProtoFeature], Optional[str]]:
|
|
324
325
|
"""
|
|
325
326
|
Validates featureset transformation
|
|
326
327
|
Args:
|
|
327
|
-
|
|
328
|
+
featureset: BaseFeatureSet featureset
|
|
328
329
|
no_validation: skip validation
|
|
329
330
|
operator: Operator client
|
|
330
331
|
registry: Registry client
|
|
331
332
|
Returns:
|
|
332
333
|
Optional list of features returned from validation
|
|
333
334
|
"""
|
|
334
|
-
|
|
335
|
-
|
|
335
|
+
features: List[ProtoFeature] = []
|
|
336
|
+
artifact_url: Optional[str] = None
|
|
336
337
|
if not no_validation:
|
|
337
338
|
try:
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
registry_client=registry,
|
|
341
|
-
feature_set=feature_set,
|
|
342
|
-
)
|
|
343
|
-
spark_columns_features = _get_features_from_spark_columns_description(
|
|
344
|
-
spark_columns_description
|
|
339
|
+
features, artifact_url = _handle_featureset_validation(
|
|
340
|
+
featureset=featureset
|
|
345
341
|
)
|
|
346
342
|
except Exception as e:
|
|
347
343
|
print(str(e))
|
|
348
344
|
print("Not continuing to registration due to failure in validation")
|
|
349
345
|
exit(1)
|
|
350
346
|
else:
|
|
351
|
-
print(f"Skipping validation for '{
|
|
352
|
-
return
|
|
347
|
+
print(f"Skipping validation for '{featureset.name}' feature set")
|
|
348
|
+
return features, artifact_url
|
|
353
349
|
|
|
354
350
|
|
|
355
|
-
def print_validation_outputs(
|
|
351
|
+
def print_validation_outputs(stdout: str, stderr: str) -> bool:
|
|
356
352
|
did_print = False
|
|
357
|
-
outputs = response.outputs
|
|
358
353
|
|
|
359
|
-
if
|
|
354
|
+
if stdout or stderr:
|
|
360
355
|
message = "Validation outputs: "
|
|
361
356
|
|
|
362
|
-
if
|
|
363
|
-
message += f"stdout: {
|
|
357
|
+
if stdout:
|
|
358
|
+
message += f"stdout: {stdout}\n "
|
|
364
359
|
|
|
365
|
-
if
|
|
366
|
-
message += f"stderr: {
|
|
360
|
+
if stderr:
|
|
361
|
+
message += f"stderr: {stderr}"
|
|
367
362
|
|
|
368
363
|
print(message)
|
|
369
364
|
did_print = True
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import os
|
|
2
2
|
from pathlib import Path
|
|
3
|
+
from typing import List, Tuple
|
|
3
4
|
|
|
4
5
|
import click
|
|
5
6
|
from qwak.clients.feature_store import FeatureRegistryClient
|
|
@@ -59,6 +60,8 @@ def register_fs_objects(
|
|
|
59
60
|
ignore_validation_errors: bool,
|
|
60
61
|
**kwargs,
|
|
61
62
|
):
|
|
63
|
+
qwak_python_files: List[Tuple[str, str]]
|
|
64
|
+
|
|
62
65
|
if not path:
|
|
63
66
|
path = Path.cwd()
|
|
64
67
|
else:
|
|
@@ -97,7 +100,6 @@ def register_fs_objects(
|
|
|
97
100
|
_register_features_sets(
|
|
98
101
|
qwak_python_files,
|
|
99
102
|
registry_client,
|
|
100
|
-
operator_client,
|
|
101
103
|
force,
|
|
102
104
|
git_commit,
|
|
103
105
|
no_validation,
|
qwak_sdk/inner/file_registry.py
CHANGED
|
@@ -3,11 +3,12 @@ import os
|
|
|
3
3
|
import sys
|
|
4
4
|
from contextlib import contextmanager
|
|
5
5
|
from pathlib import Path
|
|
6
|
+
from typing import List, Tuple
|
|
6
7
|
|
|
7
8
|
from yaspin.core import Yaspin
|
|
8
9
|
|
|
9
10
|
|
|
10
|
-
def list_qwak_python_files(path: Path, sp: Yaspin):
|
|
11
|
+
def list_qwak_python_files(path: Path, sp: Yaspin) -> List[Tuple[str, str]]:
|
|
11
12
|
"""
|
|
12
13
|
Helper function which finds python files with qwak imports in a given module
|
|
13
14
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: qwak-sdk
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.38
|
|
4
4
|
Summary: Qwak SDK and CLI for qwak models
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Keywords: mlops,ml,deployment,serving,model
|
|
@@ -28,7 +28,7 @@ Requires-Dist: pandas (<1.4) ; (python_full_version >= "3.7.1" and python_versio
|
|
|
28
28
|
Requires-Dist: pandas (>=1.4.3,<2.0.0) ; (python_version >= "3.8" and python_version < "3.10") and (extra == "batch" or extra == "feedback")
|
|
29
29
|
Requires-Dist: pyarrow (>=6.0.0,<11.0.0) ; extra == "batch"
|
|
30
30
|
Requires-Dist: python-json-logger (>=2.0.2)
|
|
31
|
-
Requires-Dist: qwak-core (==0.
|
|
31
|
+
Requires-Dist: qwak-core (==0.2.2)
|
|
32
32
|
Requires-Dist: qwak-inference (==0.1.8)
|
|
33
33
|
Requires-Dist: tabulate (>=0.8.0)
|
|
34
34
|
Requires-Dist: yaspin (>=2.0.0)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
qwak_sdk/__init__.py,sha256=
|
|
1
|
+
qwak_sdk/__init__.py,sha256=oaDII2u9M60aLGucJRmp7wpB06VbI3k_SXEQ-9qmRcE,135
|
|
2
2
|
qwak_sdk/cli.py,sha256=FIK1dUNxR57ypb-CeD7fKSJnPJ02lrjR9G4aj2qMLPU,2458
|
|
3
3
|
qwak_sdk/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
qwak_sdk/commands/_logic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -92,8 +92,8 @@ qwak_sdk/commands/feature_store/list/ui.py,sha256=NuXnQ3cdXSDCFAcC2jmgx4sAdjNuyI
|
|
|
92
92
|
qwak_sdk/commands/feature_store/pause/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
93
93
|
qwak_sdk/commands/feature_store/pause/ui.py,sha256=C89yl4ly-RpyZub30q5xV5g1UDnI_GmHSndvXAkXkw4,695
|
|
94
94
|
qwak_sdk/commands/feature_store/register/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
95
|
-
qwak_sdk/commands/feature_store/register/_logic.py,sha256=
|
|
96
|
-
qwak_sdk/commands/feature_store/register/ui.py,sha256=
|
|
95
|
+
qwak_sdk/commands/feature_store/register/_logic.py,sha256=pK2vd28go45KmLM4D1KdSPynQW_FVsUxh4UVGEOqpkw,13304
|
|
96
|
+
qwak_sdk/commands/feature_store/register/ui.py,sha256=fOnUj970AKLGpWFGzpImAsAKQOO-LGQx0oBlWfB8xNA,2874
|
|
97
97
|
qwak_sdk/commands/feature_store/resume/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
98
98
|
qwak_sdk/commands/feature_store/resume/ui.py,sha256=nI87xvA30qNQVJnT67lYJgwKGBtvZAurC6XX9ttpCZA,700
|
|
99
99
|
qwak_sdk/commands/feature_store/trigger/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -311,7 +311,7 @@ qwak_sdk/exceptions/qwak_command_exception.py,sha256=R2gZ12PA-_32UcxbC19k6a0JJ1Q
|
|
|
311
311
|
qwak_sdk/exceptions/qwak_deploy_new_build_failed.py,sha256=W7-csnigTM2vo7k-j4-MFTFRiPOqa2uEgw--LEnKaCc,129
|
|
312
312
|
qwak_sdk/exceptions/qwak_resource_not_found.py,sha256=EmNKlezjQ_tl5agt1IJOkjPKTzR8mw_S7ys7CCjlPo0,48
|
|
313
313
|
qwak_sdk/inner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
314
|
-
qwak_sdk/inner/file_registry.py,sha256=
|
|
314
|
+
qwak_sdk/inner/file_registry.py,sha256=uRw0gM5j6OVYb0M5-4itExwk2bi1PP6NN-Yt8eMfk_k,3220
|
|
315
315
|
qwak_sdk/inner/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
316
316
|
qwak_sdk/inner/tools/cli_tools.py,sha256=Kz3cOno2sNEO9foJDNhx8G8Os71FvZcoTTnDfWlwYcQ,6170
|
|
317
317
|
qwak_sdk/inner/tools/config_handler.py,sha256=BtmyIztAjMxccepPfv5-aqdFp1DlZtoG-m0ZIgEA5GQ,874
|
|
@@ -326,7 +326,7 @@ qwak_sdk/tools/colors.py,sha256=7pui_GGjC4uZKYFsIyXaJjYsjLxJVHb4OrfTgr93hqo,287
|
|
|
326
326
|
qwak_sdk/tools/files.py,sha256=AyKJTOy7NhvP3SrqwIw_lxYNCOy1CvLgMmSJpWZ0OKM,2257
|
|
327
327
|
qwak_sdk/tools/log_handling.py,sha256=NIQ-5uCb2NHzB7KwIbqbR9EhmhL1bawXLD_oamB6Gok,5711
|
|
328
328
|
qwak_sdk/tools/utils.py,sha256=SHmU4r_m2ABZyFYMC03P17GvltPbYbmB39hvalIZEtI,1168
|
|
329
|
-
qwak_sdk-0.5.
|
|
330
|
-
qwak_sdk-0.5.
|
|
331
|
-
qwak_sdk-0.5.
|
|
332
|
-
qwak_sdk-0.5.
|
|
329
|
+
qwak_sdk-0.5.38.dist-info/entry_points.txt,sha256=vSl0ELYDyj640oMM57u0AjBP87wtLYxCcGOendhEx80,47
|
|
330
|
+
qwak_sdk-0.5.38.dist-info/WHEEL,sha256=vVCvjcmxuUltf8cYhJ0sJMRDLr1XsPuxEId8YDzbyCY,88
|
|
331
|
+
qwak_sdk-0.5.38.dist-info/METADATA,sha256=dk39NLWIDLRL0E9MHljpzI-RwfxGU-GgeadiPeIT7Zo,1884
|
|
332
|
+
qwak_sdk-0.5.38.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|