qwak-core 0.4.420__py3-none-any.whl → 0.5.0__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.
- _qwak_proto/qwak/builds/build_values_pb2.py +22 -18
- _qwak_proto/qwak/builds/build_values_pb2.pyi +21 -1
- qwak/__init__.py +1 -1
- qwak/exceptions/__init__.py +1 -0
- qwak/exceptions/qwak_grpc_address_exception.py +9 -0
- qwak/inner/const.py +2 -6
- qwak/inner/di_configuration/__init__.py +1 -67
- qwak/inner/di_configuration/dependency_wiring.py +98 -0
- qwak/inner/tool/grpc/grpc_tools.py +123 -3
- {qwak_core-0.4.420.dist-info → qwak_core-0.5.0.dist-info}/METADATA +1 -3
- {qwak_core-0.4.420.dist-info → qwak_core-0.5.0.dist-info}/RECORD +12 -10
- {qwak_core-0.4.420.dist-info → qwak_core-0.5.0.dist-info}/WHEEL +0 -0
|
@@ -14,7 +14,7 @@ _sym_db = _symbol_database.Default()
|
|
|
14
14
|
from _qwak_proto.qwak.user_application.common.v0 import resources_pb2 as qwak_dot_user__application_dot_common_dot_v0_dot_resources__pb2
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1eqwak/builds/build_values.proto\x12\x15qwak.build.management\x1a/qwak/user_application/common/v0/resources.proto\"\xc3\x03\n\x10ModelBuildValues\x12\x34\n\nbuild_info\x18\x01 \x01(\x0b\x32 .qwak.build.management.BuildInfo\x12<\n\x0emodel_metadata\x18\x02 \x01(\x0b\x32$.qwak.build.management.ModelMetadata\x12\x45\n\x13model_code_location\x18\x03 \x01(\x0b\x32(.qwak.build.management.ModelCodeLocation\x12G\n\x14\x62uild_execution_spec\x18\x04 \x01(\x0b\x32).qwak.build.management.BuildExecutionSpec\x12\x30\n\x08sdk_spec\x18\x05 \x01(\x0b\x32\x1e.qwak.build.management.SdkSpec\x12G\n\x14jfrog_ecosystem_spec\x18\x06 \x01(\x0b\x32).qwak.build.management.JfrogEcosystemSpec\x12\x30\n\x08job_spec\x18\x07 \x01(\x0b\x32\x1e.qwak.build.management.JobSpec\"\xa3\x01\n\tBuildInfo\x12\x10\n\x08\x62uild_id\x18\x01 \x01(\t\x12\x13\n\x0b\x62ranch_name\x18\x02 \x01(\t\x12\x12\n\nbuild_tags\x18\x03 \x03(\t\x12\x14\n\x0c\x62uild_config\x18\x04 \x01(\t\x12\x45\n\x13\x62uild_properties_v1\x18\x05 \x01(\x0b\x32(.qwak.build.management.BuildPropertiesV1\"]\n\x11\x42uildPropertiesV1\x12\x18\n\x10\x62uild_config_url\x18\x01 \x01(\t\x12\x15\n\rsdk_wheel_url\x18\x02 \x01(\t\x12\x17\n\x0fsdk_version_url\x18\x03 \x01(\t\"\x8e\x01\n\rModelMetadata\x12\x10\n\x08model_id\x18\x01 \x01(\t\x12\x12\n\naccount_id\x18\x02 \x01(\t\x12\x0f\n\x07user_id\x18\x03 \x01(\t\x12\x46\n\x13\x61rtifactory_details\x18\x04 \x01(\x0b\x32).qwak.build.management.ArtifactoryDetails\")\n\x12\x41rtifactoryDetails\x12\x13\n\x0bproject_key\x18\x01 \x01(\t\"\xa0\x01\n\x11ModelCodeLocation\x12\x1c\n\x14main_model_directory\x18\x01 \x01(\t\x12\x34\n\tlocal_uri\x18\x02 \x01(\x0b\x32\x1f.qwak.build.management.LocalUriH\x00\x12\x30\n\x07git_uri\x18\x03 \x01(\x0b\x32\x1d.qwak.build.management.GitUriH\x00\x42\x05\n\x03uri\"\x18\n\x08LocalUri\x12\x0c\n\x04path\x18\x01 \x01(\t\"M\n\x06GitUri\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x36\n\x0bgit_details\x18\x02 \x01(\x0b\x32!.qwak.build.management.GitDetails\"|\n\nGitDetails\x12\x0e\n\x06\x62ranch\x18\x01 \x01(\t\x12\x11\n\tcommit_id\x18\x02 \x01(\t\x12\x15\n\x0b\x63redentials\x18\x03 \x01(\tH\x00\x12!\n\x17\x63redentials_secret_name\x18\x04 \x01(\tH\x00\x42\x11\n\x0fgit_credentials\"\xd0\x02\n\x12\x42uildExecutionSpec\x12\x1f\n\x17\x62uild_image_destination\x18\x01 \x01(\t\x12\"\n\x1ashould_build_without_cache\x18\x02 \x01(\x08\x12G\n\x14logs_verbosity_level\x18\x03 \x01(\x0e\x32).qwak.build.management.LogsVerbosityLevel\x12\x12\n\nbase_image\x18\x04 \x01(\t\x12\x1b\n\x13\x63ustom_iam_role_arn\x18\x05 \x01(\t\x12\x10\n\x08\x65nv_vars\x18\x06 \x03(\t\x12\'\n\x1fremote_builder_auth_secret_name\x18\x07 \x01(\t\x12@\n\x10\x63ontainer_engine\x18\x08 \x01(\x0b\x32&.qwak.build.management.ContainerEngine\"a\n\x07SdkSpec\x12\x13\n\x0bsdk_version\x18\x01 \x01(\t\x12\x1b\n\x13sdk_extra_index_url\x18\x02 \x01(\t\x12$\n\x1csdk_runtime_version_override\x18\x03 \x01(\t\"k\n\x12JfrogEcosystemSpec\x12\x0f\n\x07\x62\x61seUrl\x18\x01 \x01(\t\x12\x1d\n\x15\x61\x63\x63\x65ssTokenSecretName\x18\x02 \x01(\t\x12%\n\x1d\x61rtifactorySettingsSecretName\x18\x03 \x01(\t\"\
|
|
17
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1eqwak/builds/build_values.proto\x12\x15qwak.build.management\x1a/qwak/user_application/common/v0/resources.proto\"\xc3\x03\n\x10ModelBuildValues\x12\x34\n\nbuild_info\x18\x01 \x01(\x0b\x32 .qwak.build.management.BuildInfo\x12<\n\x0emodel_metadata\x18\x02 \x01(\x0b\x32$.qwak.build.management.ModelMetadata\x12\x45\n\x13model_code_location\x18\x03 \x01(\x0b\x32(.qwak.build.management.ModelCodeLocation\x12G\n\x14\x62uild_execution_spec\x18\x04 \x01(\x0b\x32).qwak.build.management.BuildExecutionSpec\x12\x30\n\x08sdk_spec\x18\x05 \x01(\x0b\x32\x1e.qwak.build.management.SdkSpec\x12G\n\x14jfrog_ecosystem_spec\x18\x06 \x01(\x0b\x32).qwak.build.management.JfrogEcosystemSpec\x12\x30\n\x08job_spec\x18\x07 \x01(\x0b\x32\x1e.qwak.build.management.JobSpec\"\xa3\x01\n\tBuildInfo\x12\x10\n\x08\x62uild_id\x18\x01 \x01(\t\x12\x13\n\x0b\x62ranch_name\x18\x02 \x01(\t\x12\x12\n\nbuild_tags\x18\x03 \x03(\t\x12\x14\n\x0c\x62uild_config\x18\x04 \x01(\t\x12\x45\n\x13\x62uild_properties_v1\x18\x05 \x01(\x0b\x32(.qwak.build.management.BuildPropertiesV1\"]\n\x11\x42uildPropertiesV1\x12\x18\n\x10\x62uild_config_url\x18\x01 \x01(\t\x12\x15\n\rsdk_wheel_url\x18\x02 \x01(\t\x12\x17\n\x0fsdk_version_url\x18\x03 \x01(\t\"\x8e\x01\n\rModelMetadata\x12\x10\n\x08model_id\x18\x01 \x01(\t\x12\x12\n\naccount_id\x18\x02 \x01(\t\x12\x0f\n\x07user_id\x18\x03 \x01(\t\x12\x46\n\x13\x61rtifactory_details\x18\x04 \x01(\x0b\x32).qwak.build.management.ArtifactoryDetails\")\n\x12\x41rtifactoryDetails\x12\x13\n\x0bproject_key\x18\x01 \x01(\t\"\xa0\x01\n\x11ModelCodeLocation\x12\x1c\n\x14main_model_directory\x18\x01 \x01(\t\x12\x34\n\tlocal_uri\x18\x02 \x01(\x0b\x32\x1f.qwak.build.management.LocalUriH\x00\x12\x30\n\x07git_uri\x18\x03 \x01(\x0b\x32\x1d.qwak.build.management.GitUriH\x00\x42\x05\n\x03uri\"\x18\n\x08LocalUri\x12\x0c\n\x04path\x18\x01 \x01(\t\"M\n\x06GitUri\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x36\n\x0bgit_details\x18\x02 \x01(\x0b\x32!.qwak.build.management.GitDetails\"|\n\nGitDetails\x12\x0e\n\x06\x62ranch\x18\x01 \x01(\t\x12\x11\n\tcommit_id\x18\x02 \x01(\t\x12\x15\n\x0b\x63redentials\x18\x03 \x01(\tH\x00\x12!\n\x17\x63redentials_secret_name\x18\x04 \x01(\tH\x00\x42\x11\n\x0fgit_credentials\"\xd0\x02\n\x12\x42uildExecutionSpec\x12\x1f\n\x17\x62uild_image_destination\x18\x01 \x01(\t\x12\"\n\x1ashould_build_without_cache\x18\x02 \x01(\x08\x12G\n\x14logs_verbosity_level\x18\x03 \x01(\x0e\x32).qwak.build.management.LogsVerbosityLevel\x12\x12\n\nbase_image\x18\x04 \x01(\t\x12\x1b\n\x13\x63ustom_iam_role_arn\x18\x05 \x01(\t\x12\x10\n\x08\x65nv_vars\x18\x06 \x03(\t\x12\'\n\x1fremote_builder_auth_secret_name\x18\x07 \x01(\t\x12@\n\x10\x63ontainer_engine\x18\x08 \x01(\x0b\x32&.qwak.build.management.ContainerEngine\"a\n\x07SdkSpec\x12\x13\n\x0bsdk_version\x18\x01 \x01(\t\x12\x1b\n\x13sdk_extra_index_url\x18\x02 \x01(\t\x12$\n\x1csdk_runtime_version_override\x18\x03 \x01(\t\"k\n\x12JfrogEcosystemSpec\x12\x0f\n\x07\x62\x61seUrl\x18\x01 \x01(\t\x12\x1d\n\x15\x61\x63\x63\x65ssTokenSecretName\x18\x02 \x01(\t\x12%\n\x1d\x61rtifactorySettingsSecretName\x18\x03 \x01(\t\"\xb5\x04\n\x07JobSpec\x12\x11\n\tnamespace\x18\x01 \x01(\t\x12\"\n\x1aprovision_instance_timeout\x18\x02 \x01(\x05\x12>\n\x0fpurchase_option\x18\x03 \x01(\x0e\x32%.qwak.build.management.PurchaseOption\x12$\n\x1cis_node_optimization_enabled\x18\x04 \x01(\x08\x12\"\n\x1ashould_use_build_isolation\x18\x05 \x01(\x08\x12#\n\x1bis_multi_tenant_environment\x18\x06 \x01(\x08\x12\x1a\n\x12is_self_hosted_jpd\x18\n \x01(\x08\x12 \n\x18\x62uild_executor_image_url\x18\x07 \x01(\t\x12<\n\x0e\x63loud_provider\x18\x08 \x01(\x0e\x32$.qwak.build.management.CloudProvider\x12\x30\n\x08job_size\x18\t \x01(\x0b\x32\x1e.qwak.build.management.JobSize\x12Y\n\x17\x62uild_executor_env_vars\x18\x0b \x03(\x0b\x32\x38.qwak.build.management.JobSpec.BuildExecutorEnvVarsEntry\x1a;\n\x19\x42uildExecutorEnvVarsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x9e\x02\n\x07JobSize\x12\x0f\n\x03\x63pu\x18\x01 \x01(\x02\x42\x02\x18\x01\x12\x19\n\rmemory_amount\x18\x02 \x01(\x05\x42\x02\x18\x01\x12;\n\x0cmemory_units\x18\x03 \x01(\x0e\x32!.qwak.build.management.MemoryUnitB\x02\x18\x01\x12H\n\rgpu_resources\x18\x04 \x01(\x0b\x32-.qwak.user_application.common.v0.GpuResourcesB\x02\x18\x01\x12`\n\x1c\x63lient_pod_compute_resources\x18\x05 \x01(\x0b\x32:.qwak.user_application.common.v0.ClientPodComputeResources\"\x9d\x01\n\x0f\x43ontainerEngine\x12>\n\x06\x64ocker\x18\x01 \x01(\x0b\x32,.qwak.build.management.DockerContainerEngineH\x00\x12\x42\n\x06podman\x18\x02 \x01(\x0b\x32,.qwak.build.management.PodmanContainerEngineB\x02\x18\x01H\x00\x42\x06\n\x04type\"\x17\n\x15\x44ockerContainerEngine\"\x17\n\x15PodmanContainerEngine*e\n\x0ePurchaseOption\x12\x1b\n\x17INVALID_PURCHASE_OPTION\x10\x00\x12\x18\n\x14SPOT_PURCHASE_OPTION\x10\x01\x12\x1c\n\x18ONDEMAND_PURCHASE_OPTION\x10\x02*H\n\rCloudProvider\x12\x1a\n\x16INVALID_CLOUD_PROVIDER\x10\x00\x12\x07\n\x03\x41WS\x10\x01\x12\x07\n\x03GCP\x10\x02\x12\t\n\x05\x41ZURE\x10\x03*7\n\nMemoryUnit\x12\x17\n\x13INVALID_MEMORY_UNIT\x10\x00\x12\x07\n\x03MIB\x10\x01\x12\x07\n\x03GIB\x10\x02*S\n\x12LogsVerbosityLevel\x12\x1a\n\x16INVALID_LOGS_VERBOSITY\x10\x00\x12\t\n\x05\x44\x45\x42UG\x10\n\x12\x08\n\x04INFO\x10\x14\x12\x0c\n\x08\x43RITICAL\x10\x32\x42\x36\n com.qwak.ai.management.build.apiP\x01Z\x10qwak/build;buildb\x06proto3')
|
|
18
18
|
|
|
19
19
|
_globals = globals()
|
|
20
20
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -23,6 +23,8 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
23
23
|
|
|
24
24
|
DESCRIPTOR._options = None
|
|
25
25
|
DESCRIPTOR._serialized_options = b'\n com.qwak.ai.management.build.apiP\001Z\020qwak/build;build'
|
|
26
|
+
_JOBSPEC_BUILDEXECUTORENVVARSENTRY._options = None
|
|
27
|
+
_JOBSPEC_BUILDEXECUTORENVVARSENTRY._serialized_options = b'8\001'
|
|
26
28
|
_JOBSIZE.fields_by_name['cpu']._options = None
|
|
27
29
|
_JOBSIZE.fields_by_name['cpu']._serialized_options = b'\030\001'
|
|
28
30
|
_JOBSIZE.fields_by_name['memory_amount']._options = None
|
|
@@ -33,14 +35,14 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
33
35
|
_JOBSIZE.fields_by_name['gpu_resources']._serialized_options = b'\030\001'
|
|
34
36
|
_CONTAINERENGINE.fields_by_name['podman']._options = None
|
|
35
37
|
_CONTAINERENGINE.fields_by_name['podman']._serialized_options = b'\030\001'
|
|
36
|
-
_globals['_PURCHASEOPTION']._serialized_start=
|
|
37
|
-
_globals['_PURCHASEOPTION']._serialized_end=
|
|
38
|
-
_globals['_CLOUDPROVIDER']._serialized_start=
|
|
39
|
-
_globals['_CLOUDPROVIDER']._serialized_end=
|
|
40
|
-
_globals['_MEMORYUNIT']._serialized_start=
|
|
41
|
-
_globals['_MEMORYUNIT']._serialized_end=
|
|
42
|
-
_globals['_LOGSVERBOSITYLEVEL']._serialized_start=
|
|
43
|
-
_globals['_LOGSVERBOSITYLEVEL']._serialized_end=
|
|
38
|
+
_globals['_PURCHASEOPTION']._serialized_start=3017
|
|
39
|
+
_globals['_PURCHASEOPTION']._serialized_end=3118
|
|
40
|
+
_globals['_CLOUDPROVIDER']._serialized_start=3120
|
|
41
|
+
_globals['_CLOUDPROVIDER']._serialized_end=3192
|
|
42
|
+
_globals['_MEMORYUNIT']._serialized_start=3194
|
|
43
|
+
_globals['_MEMORYUNIT']._serialized_end=3249
|
|
44
|
+
_globals['_LOGSVERBOSITYLEVEL']._serialized_start=3251
|
|
45
|
+
_globals['_LOGSVERBOSITYLEVEL']._serialized_end=3334
|
|
44
46
|
_globals['_MODELBUILDVALUES']._serialized_start=107
|
|
45
47
|
_globals['_MODELBUILDVALUES']._serialized_end=558
|
|
46
48
|
_globals['_BUILDINFO']._serialized_start=561
|
|
@@ -66,13 +68,15 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
66
68
|
_globals['_JFROGECOSYSTEMSPEC']._serialized_start=1841
|
|
67
69
|
_globals['_JFROGECOSYSTEMSPEC']._serialized_end=1948
|
|
68
70
|
_globals['_JOBSPEC']._serialized_start=1951
|
|
69
|
-
_globals['_JOBSPEC']._serialized_end=
|
|
70
|
-
_globals['
|
|
71
|
-
_globals['
|
|
72
|
-
_globals['
|
|
73
|
-
_globals['
|
|
74
|
-
_globals['
|
|
75
|
-
_globals['
|
|
76
|
-
_globals['
|
|
77
|
-
_globals['
|
|
71
|
+
_globals['_JOBSPEC']._serialized_end=2516
|
|
72
|
+
_globals['_JOBSPEC_BUILDEXECUTORENVVARSENTRY']._serialized_start=2457
|
|
73
|
+
_globals['_JOBSPEC_BUILDEXECUTORENVVARSENTRY']._serialized_end=2516
|
|
74
|
+
_globals['_JOBSIZE']._serialized_start=2519
|
|
75
|
+
_globals['_JOBSIZE']._serialized_end=2805
|
|
76
|
+
_globals['_CONTAINERENGINE']._serialized_start=2808
|
|
77
|
+
_globals['_CONTAINERENGINE']._serialized_end=2965
|
|
78
|
+
_globals['_DOCKERCONTAINERENGINE']._serialized_start=2967
|
|
79
|
+
_globals['_DOCKERCONTAINERENGINE']._serialized_end=2990
|
|
80
|
+
_globals['_PODMANCONTAINERENGINE']._serialized_start=2992
|
|
81
|
+
_globals['_PODMANCONTAINERENGINE']._serialized_end=3015
|
|
78
82
|
# @@protoc_insertion_point(module_scope)
|
|
@@ -420,6 +420,21 @@ class JobSpec(google.protobuf.message.Message):
|
|
|
420
420
|
|
|
421
421
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
422
422
|
|
|
423
|
+
class BuildExecutorEnvVarsEntry(google.protobuf.message.Message):
|
|
424
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
425
|
+
|
|
426
|
+
KEY_FIELD_NUMBER: builtins.int
|
|
427
|
+
VALUE_FIELD_NUMBER: builtins.int
|
|
428
|
+
key: builtins.str
|
|
429
|
+
value: builtins.str
|
|
430
|
+
def __init__(
|
|
431
|
+
self,
|
|
432
|
+
*,
|
|
433
|
+
key: builtins.str = ...,
|
|
434
|
+
value: builtins.str = ...,
|
|
435
|
+
) -> None: ...
|
|
436
|
+
def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ...
|
|
437
|
+
|
|
423
438
|
NAMESPACE_FIELD_NUMBER: builtins.int
|
|
424
439
|
PROVISION_INSTANCE_TIMEOUT_FIELD_NUMBER: builtins.int
|
|
425
440
|
PURCHASE_OPTION_FIELD_NUMBER: builtins.int
|
|
@@ -430,6 +445,7 @@ class JobSpec(google.protobuf.message.Message):
|
|
|
430
445
|
BUILD_EXECUTOR_IMAGE_URL_FIELD_NUMBER: builtins.int
|
|
431
446
|
CLOUD_PROVIDER_FIELD_NUMBER: builtins.int
|
|
432
447
|
JOB_SIZE_FIELD_NUMBER: builtins.int
|
|
448
|
+
BUILD_EXECUTOR_ENV_VARS_FIELD_NUMBER: builtins.int
|
|
433
449
|
namespace: builtins.str
|
|
434
450
|
"""Kubernetes namespace in which to run the build job."""
|
|
435
451
|
provision_instance_timeout: builtins.int
|
|
@@ -443,6 +459,9 @@ class JobSpec(google.protobuf.message.Message):
|
|
|
443
459
|
cloud_provider: global___CloudProvider.ValueType
|
|
444
460
|
@property
|
|
445
461
|
def job_size(self) -> global___JobSize: ...
|
|
462
|
+
@property
|
|
463
|
+
def build_executor_env_vars(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]:
|
|
464
|
+
"""Environment variables to set on the build executor container."""
|
|
446
465
|
def __init__(
|
|
447
466
|
self,
|
|
448
467
|
*,
|
|
@@ -456,9 +475,10 @@ class JobSpec(google.protobuf.message.Message):
|
|
|
456
475
|
build_executor_image_url: builtins.str = ...,
|
|
457
476
|
cloud_provider: global___CloudProvider.ValueType = ...,
|
|
458
477
|
job_size: global___JobSize | None = ...,
|
|
478
|
+
build_executor_env_vars: collections.abc.Mapping[builtins.str, builtins.str] | None = ...,
|
|
459
479
|
) -> None: ...
|
|
460
480
|
def HasField(self, field_name: typing_extensions.Literal["job_size", b"job_size"]) -> builtins.bool: ...
|
|
461
|
-
def ClearField(self, field_name: typing_extensions.Literal["build_executor_image_url", b"build_executor_image_url", "cloud_provider", b"cloud_provider", "is_multi_tenant_environment", b"is_multi_tenant_environment", "is_node_optimization_enabled", b"is_node_optimization_enabled", "is_self_hosted_jpd", b"is_self_hosted_jpd", "job_size", b"job_size", "namespace", b"namespace", "provision_instance_timeout", b"provision_instance_timeout", "purchase_option", b"purchase_option", "should_use_build_isolation", b"should_use_build_isolation"]) -> None: ...
|
|
481
|
+
def ClearField(self, field_name: typing_extensions.Literal["build_executor_env_vars", b"build_executor_env_vars", "build_executor_image_url", b"build_executor_image_url", "cloud_provider", b"cloud_provider", "is_multi_tenant_environment", b"is_multi_tenant_environment", "is_node_optimization_enabled", b"is_node_optimization_enabled", "is_self_hosted_jpd", b"is_self_hosted_jpd", "job_size", b"job_size", "namespace", b"namespace", "provision_instance_timeout", b"provision_instance_timeout", "purchase_option", b"purchase_option", "should_use_build_isolation", b"should_use_build_isolation"]) -> None: ...
|
|
462
482
|
|
|
463
483
|
global___JobSpec = JobSpec
|
|
464
484
|
|
qwak/__init__.py
CHANGED
qwak/exceptions/__init__.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from .quiet_error import QuietError
|
|
2
2
|
from .qwak_exception import QwakException
|
|
3
3
|
from .qwak_general_build_exception import QwakGeneralBuildException
|
|
4
|
+
from .qwak_grpc_address_exception import QwakGrpcAddressException
|
|
4
5
|
from .qwak_http_exception import QwakHTTPException
|
|
5
6
|
from .qwak_inference_exception import QwakInferenceException
|
|
6
7
|
from .qwak_load_configuration_exception import LoadConfigurationException
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
from typing import Union
|
|
2
|
+
from urllib.parse import ParseResult
|
|
3
|
+
|
|
4
|
+
from qwak.exceptions import QwakException
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class QwakGrpcAddressException(QwakException):
|
|
8
|
+
def __init__(self, details: str, grpc_address: Union[str, ParseResult]):
|
|
9
|
+
self.message = f"Not a valid gRPC address: '{grpc_address}'. Details: {details}"
|
qwak/inner/const.py
CHANGED
|
@@ -33,10 +33,6 @@ class QwakConstants:
|
|
|
33
33
|
|
|
34
34
|
TOKEN_AUDIENCE: str = "https://auth-token.qwak.ai/" # nosec B105
|
|
35
35
|
|
|
36
|
-
QWAK_AUTHENTICATION_URL = "https://grpc.qwak.ai/api/v1/authentication/qwak-api-key"
|
|
37
|
-
|
|
38
|
-
QWAK_AUTHENTICATED_USER_ENDPOINT: str = (
|
|
39
|
-
"https://grpc.qwak.ai/api/v0/runtime/get-authenticated-user-context"
|
|
40
|
-
)
|
|
41
|
-
|
|
42
36
|
QWAK_APP_URL: str = "https://app.qwak.ai"
|
|
37
|
+
|
|
38
|
+
CONTROL_PLANE_GRPC_ADDRESS_ENVAR_NAME: str = "CONTROL_PLANE_GRPC_ADDRESS"
|
|
@@ -1,69 +1,3 @@
|
|
|
1
|
-
import os
|
|
2
|
-
|
|
3
1
|
from .account import UserAccountConfiguration
|
|
4
2
|
from .containers import QwakContainer
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
def wire_dependencies():
|
|
8
|
-
container = QwakContainer()
|
|
9
|
-
|
|
10
|
-
default_config_file = os.path.join(os.path.dirname(__file__), "config.yml")
|
|
11
|
-
container.config.from_yaml(default_config_file)
|
|
12
|
-
|
|
13
|
-
from qwak.clients import (
|
|
14
|
-
administration,
|
|
15
|
-
alert_management,
|
|
16
|
-
alerts_registry,
|
|
17
|
-
analytics,
|
|
18
|
-
audience,
|
|
19
|
-
automation_management,
|
|
20
|
-
autoscaling,
|
|
21
|
-
batch_job_management,
|
|
22
|
-
build_orchestrator,
|
|
23
|
-
data_versioning,
|
|
24
|
-
deployment,
|
|
25
|
-
feature_store,
|
|
26
|
-
file_versioning,
|
|
27
|
-
instance_template,
|
|
28
|
-
integration_management,
|
|
29
|
-
kube_deployment_captain,
|
|
30
|
-
logging_client,
|
|
31
|
-
model_management,
|
|
32
|
-
project,
|
|
33
|
-
prompt_manager,
|
|
34
|
-
system_secret,
|
|
35
|
-
user_application_instance,
|
|
36
|
-
vector_store,
|
|
37
|
-
workspace_manager,
|
|
38
|
-
)
|
|
39
|
-
|
|
40
|
-
container.wire(
|
|
41
|
-
packages=[
|
|
42
|
-
administration,
|
|
43
|
-
alert_management,
|
|
44
|
-
audience,
|
|
45
|
-
automation_management,
|
|
46
|
-
autoscaling,
|
|
47
|
-
analytics,
|
|
48
|
-
batch_job_management,
|
|
49
|
-
build_orchestrator,
|
|
50
|
-
data_versioning,
|
|
51
|
-
deployment,
|
|
52
|
-
file_versioning,
|
|
53
|
-
instance_template,
|
|
54
|
-
kube_deployment_captain,
|
|
55
|
-
logging_client,
|
|
56
|
-
model_management,
|
|
57
|
-
project,
|
|
58
|
-
feature_store,
|
|
59
|
-
user_application_instance,
|
|
60
|
-
alerts_registry,
|
|
61
|
-
workspace_manager,
|
|
62
|
-
vector_store,
|
|
63
|
-
integration_management,
|
|
64
|
-
system_secret,
|
|
65
|
-
prompt_manager,
|
|
66
|
-
]
|
|
67
|
-
)
|
|
68
|
-
|
|
69
|
-
return container
|
|
3
|
+
from .dependency_wiring import wire_dependencies
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
5
|
+
from qwak.inner.const import QwakConstants
|
|
6
|
+
from qwak.inner.di_configuration import QwakContainer
|
|
7
|
+
from qwak.inner.tool.grpc.grpc_tools import validate_grpc_address
|
|
8
|
+
from qwak.tools.logger import get_qwak_logger
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
logger = get_qwak_logger()
|
|
12
|
+
|
|
13
|
+
__DEFAULT_CONFIG_FILE_PATH: Path = Path(__file__).parent / "config.yml"
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def wire_dependencies():
|
|
17
|
+
container = QwakContainer()
|
|
18
|
+
|
|
19
|
+
container.config.from_yaml(__DEFAULT_CONFIG_FILE_PATH)
|
|
20
|
+
control_plane_grpc_address_override: Optional[str] = os.getenv(
|
|
21
|
+
QwakConstants.CONTROL_PLANE_GRPC_ADDRESS_ENVAR_NAME
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
if control_plane_grpc_address_override:
|
|
25
|
+
validate_grpc_address(control_plane_grpc_address_override)
|
|
26
|
+
__override_control_plane_grpc_address(
|
|
27
|
+
container, control_plane_grpc_address_override
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
from qwak.clients import (
|
|
31
|
+
administration,
|
|
32
|
+
alert_management,
|
|
33
|
+
alerts_registry,
|
|
34
|
+
analytics,
|
|
35
|
+
audience,
|
|
36
|
+
automation_management,
|
|
37
|
+
autoscaling,
|
|
38
|
+
batch_job_management,
|
|
39
|
+
build_orchestrator,
|
|
40
|
+
data_versioning,
|
|
41
|
+
deployment,
|
|
42
|
+
feature_store,
|
|
43
|
+
file_versioning,
|
|
44
|
+
instance_template,
|
|
45
|
+
integration_management,
|
|
46
|
+
kube_deployment_captain,
|
|
47
|
+
logging_client,
|
|
48
|
+
model_management,
|
|
49
|
+
project,
|
|
50
|
+
prompt_manager,
|
|
51
|
+
system_secret,
|
|
52
|
+
user_application_instance,
|
|
53
|
+
vector_store,
|
|
54
|
+
workspace_manager,
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
container.wire(
|
|
58
|
+
packages=[
|
|
59
|
+
administration,
|
|
60
|
+
alert_management,
|
|
61
|
+
audience,
|
|
62
|
+
automation_management,
|
|
63
|
+
autoscaling,
|
|
64
|
+
analytics,
|
|
65
|
+
batch_job_management,
|
|
66
|
+
build_orchestrator,
|
|
67
|
+
data_versioning,
|
|
68
|
+
deployment,
|
|
69
|
+
file_versioning,
|
|
70
|
+
instance_template,
|
|
71
|
+
kube_deployment_captain,
|
|
72
|
+
logging_client,
|
|
73
|
+
model_management,
|
|
74
|
+
project,
|
|
75
|
+
feature_store,
|
|
76
|
+
user_application_instance,
|
|
77
|
+
alerts_registry,
|
|
78
|
+
workspace_manager,
|
|
79
|
+
vector_store,
|
|
80
|
+
integration_management,
|
|
81
|
+
system_secret,
|
|
82
|
+
prompt_manager,
|
|
83
|
+
]
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
return container
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def __override_control_plane_grpc_address(
|
|
90
|
+
container: "QwakContainer", control_plane_grpc_address_override: str
|
|
91
|
+
):
|
|
92
|
+
logger.debug(
|
|
93
|
+
"Overriding control plane gRPC address from environment variable to %s.",
|
|
94
|
+
control_plane_grpc_address_override,
|
|
95
|
+
)
|
|
96
|
+
container.config.grpc.core.address.from_value(
|
|
97
|
+
control_plane_grpc_address_override.strip()
|
|
98
|
+
)
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import logging
|
|
2
|
+
import re
|
|
2
3
|
import time
|
|
3
4
|
from abc import ABC, abstractmethod
|
|
4
5
|
from random import randint
|
|
5
6
|
from typing import Callable, Optional, Tuple
|
|
7
|
+
from urllib.parse import urlparse, ParseResult
|
|
6
8
|
|
|
7
9
|
import grpc
|
|
8
|
-
from qwak.exceptions import QwakException
|
|
9
10
|
|
|
11
|
+
from qwak.exceptions import QwakException, QwakGrpcAddressException
|
|
10
12
|
from .grpc_auth import Auth0Client
|
|
11
13
|
|
|
12
14
|
logger = logging.getLogger()
|
|
15
|
+
HOSTNAME_REGEX: str = r"^(?!-)(?:[A-Za-z0-9-]{1,63}\.)*[A-Za-z0-9-]{1,63}(?<!-)$"
|
|
13
16
|
|
|
14
17
|
|
|
15
18
|
def create_grpc_channel(
|
|
@@ -19,7 +22,7 @@ def create_grpc_channel(
|
|
|
19
22
|
auth_metadata_plugin: grpc.AuthMetadataPlugin = None,
|
|
20
23
|
timeout: int = 100,
|
|
21
24
|
options=None,
|
|
22
|
-
backoff_options=
|
|
25
|
+
backoff_options=None,
|
|
23
26
|
max_attempts=4,
|
|
24
27
|
status_for_retry=(grpc.StatusCode.UNAVAILABLE,),
|
|
25
28
|
attempt=0,
|
|
@@ -40,6 +43,9 @@ def create_grpc_channel(
|
|
|
40
43
|
status_for_retry: grpc statuses to retry upon
|
|
41
44
|
Returns: Returns a grpc.Channel
|
|
42
45
|
"""
|
|
46
|
+
if backoff_options is None:
|
|
47
|
+
backoff_options = {}
|
|
48
|
+
|
|
43
49
|
if not url:
|
|
44
50
|
raise QwakException("Unable to create gRPC channel. URL has not been defined.")
|
|
45
51
|
|
|
@@ -101,11 +107,14 @@ def create_grpc_channel_or_none(
|
|
|
101
107
|
auth_metadata_plugin: grpc.AuthMetadataPlugin = None,
|
|
102
108
|
timeout: int = 30,
|
|
103
109
|
options=None,
|
|
104
|
-
backoff_options=
|
|
110
|
+
backoff_options=None,
|
|
105
111
|
max_attempts=2,
|
|
106
112
|
status_for_retry=(grpc.StatusCode.UNAVAILABLE,),
|
|
107
113
|
attempt=0,
|
|
108
114
|
) -> Callable[[Optional[str], Optional[bool]], Optional[grpc.Channel]]:
|
|
115
|
+
if backoff_options is None:
|
|
116
|
+
backoff_options = {}
|
|
117
|
+
|
|
109
118
|
def deferred_channel(
|
|
110
119
|
url_overwrite: Optional[str] = None, ssl_overwrite: Optional[bool] = None
|
|
111
120
|
):
|
|
@@ -129,6 +138,117 @@ def create_grpc_channel_or_none(
|
|
|
129
138
|
return deferred_channel
|
|
130
139
|
|
|
131
140
|
|
|
141
|
+
def validate_grpc_address(
|
|
142
|
+
grpc_address: str,
|
|
143
|
+
is_port_specification_allowed: bool = False,
|
|
144
|
+
is_url_scheme_allowed: bool = False,
|
|
145
|
+
):
|
|
146
|
+
"""
|
|
147
|
+
Validate gRPC address format
|
|
148
|
+
Args:
|
|
149
|
+
grpc_address (str): gRPC address to validate
|
|
150
|
+
is_port_specification_allowed (bool): Whether to allow port specification in the address
|
|
151
|
+
is_url_scheme_allowed (bool): Whether to allow URL scheme in the address
|
|
152
|
+
Raises:
|
|
153
|
+
QwakGrpcAddressException: If the gRPC address is invalid
|
|
154
|
+
"""
|
|
155
|
+
parsed_grpc_address: ParseResult = parse_address(grpc_address)
|
|
156
|
+
hostname: str = get_hostname_from_address(parsed_grpc_address)
|
|
157
|
+
validate_paths_are_not_included_in_address(parsed_grpc_address)
|
|
158
|
+
|
|
159
|
+
if not is_url_scheme_allowed:
|
|
160
|
+
__validate_url_scheme_not_included_in_address(parsed_grpc_address)
|
|
161
|
+
|
|
162
|
+
if not is_port_specification_allowed:
|
|
163
|
+
__validate_port_not_included_in_address(parsed_grpc_address)
|
|
164
|
+
|
|
165
|
+
if not is_valid_hostname(hostname):
|
|
166
|
+
raise QwakGrpcAddressException(
|
|
167
|
+
"gRPC address must be a simple hostname or fully qualified domain name.",
|
|
168
|
+
parsed_grpc_address,
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def validate_paths_are_not_included_in_address(
|
|
173
|
+
parsed_grpc_address: ParseResult,
|
|
174
|
+
) -> None:
|
|
175
|
+
has_invalid_path: bool = (
|
|
176
|
+
parsed_grpc_address.path not in {"", "/"}
|
|
177
|
+
or parsed_grpc_address.query
|
|
178
|
+
or parsed_grpc_address.fragment
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
if has_invalid_path:
|
|
182
|
+
raise QwakGrpcAddressException(
|
|
183
|
+
"gRPC address must not contain paths, queries, or fragments.",
|
|
184
|
+
parsed_grpc_address,
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def get_hostname_from_address(parsed_grpc_address: ParseResult) -> str:
|
|
189
|
+
hostname: Optional[str] = parsed_grpc_address.hostname
|
|
190
|
+
if not hostname:
|
|
191
|
+
raise QwakGrpcAddressException(
|
|
192
|
+
"gRPC address must contain a valid hostname.", parsed_grpc_address
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
return hostname
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def __validate_url_scheme_not_included_in_address(
|
|
199
|
+
parsed_grpc_address: ParseResult,
|
|
200
|
+
) -> None:
|
|
201
|
+
if parsed_grpc_address.scheme:
|
|
202
|
+
raise QwakGrpcAddressException(
|
|
203
|
+
"URL scheme is not allowed in the gRPC address.", parsed_grpc_address
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
def __validate_port_not_included_in_address(parsed_grpc_address: ParseResult):
|
|
208
|
+
try:
|
|
209
|
+
port: Optional[int] = parsed_grpc_address.port
|
|
210
|
+
except ValueError as exc:
|
|
211
|
+
raise QwakGrpcAddressException(
|
|
212
|
+
"Invalid port specification in the gRPC address.", parsed_grpc_address
|
|
213
|
+
) from exc
|
|
214
|
+
|
|
215
|
+
if port:
|
|
216
|
+
raise QwakGrpcAddressException(
|
|
217
|
+
"Port specification is not allowed in the gRPC address.",
|
|
218
|
+
parsed_grpc_address,
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
def parse_address(grpc_address: str) -> ParseResult:
|
|
223
|
+
if not grpc_address or not grpc_address.strip():
|
|
224
|
+
raise QwakGrpcAddressException(
|
|
225
|
+
"gRPC address must not be empty or whitespace.", grpc_address
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
trimmed_address: str = grpc_address.strip()
|
|
229
|
+
parsed_address: ParseResult = urlparse(
|
|
230
|
+
trimmed_address if "://" in trimmed_address else f"//{trimmed_address}"
|
|
231
|
+
)
|
|
232
|
+
|
|
233
|
+
return parsed_address
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
def is_valid_hostname(hostname: str) -> bool:
|
|
237
|
+
"""
|
|
238
|
+
Validate that the supplied hostname conforms to RFC-style label rules:
|
|
239
|
+
anchored pattern enforces full-string validation, negative lookahead/lookbehind block
|
|
240
|
+
leading or trailing hyphens per label, and each dot-separated label must be 1-63
|
|
241
|
+
alphanumeric/hyphen characters.
|
|
242
|
+
|
|
243
|
+
Args:
|
|
244
|
+
hostname (str): The hostname to validate.
|
|
245
|
+
Returns:
|
|
246
|
+
bool: True if the hostname is valid, False otherwise.
|
|
247
|
+
"""
|
|
248
|
+
hostname_pattern: re.Pattern = re.compile(HOSTNAME_REGEX)
|
|
249
|
+
return bool(hostname_pattern.fullmatch(hostname))
|
|
250
|
+
|
|
251
|
+
|
|
132
252
|
class SleepingPolicy(ABC):
|
|
133
253
|
@abstractmethod
|
|
134
254
|
def sleep(self, try_i: int):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: qwak-core
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
4
4
|
Summary: Qwak Core contains the necessary objects and communication tools for using the Qwak Platform
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Keywords: mlops,ml,deployment,serving,model
|
|
@@ -13,8 +13,6 @@ Classifier: Programming Language :: Python :: 3
|
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.9
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.10
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.7
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
18
16
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
19
17
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
20
18
|
Provides-Extra: feature-store
|
|
@@ -202,8 +202,8 @@ _qwak_proto/qwak/builds/build_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD
|
|
|
202
202
|
_qwak_proto/qwak/builds/build_url_pb2.py,sha256=G7EUD7nYmhEVsStEYPnmqiESsV6sKaWjmcuyvahI0nk,4611
|
|
203
203
|
_qwak_proto/qwak/builds/build_url_pb2.pyi,sha256=qaYyuLRHN2hOqYXlN9mKJo9gpggUnPmTVZIu-zNA0dI,11372
|
|
204
204
|
_qwak_proto/qwak/builds/build_url_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
|
205
|
-
_qwak_proto/qwak/builds/build_values_pb2.py,sha256=
|
|
206
|
-
_qwak_proto/qwak/builds/build_values_pb2.pyi,sha256=
|
|
205
|
+
_qwak_proto/qwak/builds/build_values_pb2.py,sha256=emkDIRrYkp2tHYkRXOVSmyOp0wDrLXxFroKmx0LCNcY,9514
|
|
206
|
+
_qwak_proto/qwak/builds/build_values_pb2.pyi,sha256=ZDT29YdzTwjxkyy7nDTaN6H_W3WeF7gPMss-AQPXf3c,25106
|
|
207
207
|
_qwak_proto/qwak/builds/build_values_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
|
208
208
|
_qwak_proto/qwak/builds/builds_orchestrator_service_pb2.py,sha256=nvh6ANn8rNVjWByiB0xu-8Kt45FKh-C8YJaw5_I_N9M,14575
|
|
209
209
|
_qwak_proto/qwak/builds/builds_orchestrator_service_pb2.pyi,sha256=Vl8UmQpIEslUhln3_xizdaHAWfBMBuaL8-aNAbdNBQs,24711
|
|
@@ -622,7 +622,7 @@ _qwak_proto/qwak/workspace/workspace_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXH
|
|
|
622
622
|
_qwak_proto/qwak/workspace/workspace_service_pb2.py,sha256=93uNm83VVrkLG_XVsuBOBTPs4UJF91YD1xJTOEbRyig,9239
|
|
623
623
|
_qwak_proto/qwak/workspace/workspace_service_pb2.pyi,sha256=nKKCHwnovZhsy8TSVmdz-Vtl0nviOOoX56HD-41Xo08,13726
|
|
624
624
|
_qwak_proto/qwak/workspace/workspace_service_pb2_grpc.py,sha256=yKGuexxTBza99Ihe0DSTniV2ZSd_AG47inHenqfi890,27193
|
|
625
|
-
qwak/__init__.py,sha256=
|
|
625
|
+
qwak/__init__.py,sha256=aaBONhY9W5XmAkfG2JMCYVo8o_97_6ZbIYUBvacmB7E,585
|
|
626
626
|
qwak/automations/__init__.py,sha256=qFZRvCxUUn8gcxkJR0v19ulHW2oJ0x6-Rif7HiheDP4,1522
|
|
627
627
|
qwak/automations/automation_executions.py,sha256=5MeH_epYYWb8NKXgAozwT_jPyyUDednBHG7izloi7RY,3228
|
|
628
628
|
qwak/automations/automations.py,sha256=2Wyrgj2mW5VmJzTKAXj3vQM_svYCuq_Bsu3_Vu9SdR4,12732
|
|
@@ -711,12 +711,13 @@ qwak/clients/vector_store/management_client.py,sha256=EiO6B-zO0ETgL0VonWJZnigqpF
|
|
|
711
711
|
qwak/clients/vector_store/serving_client.py,sha256=hl9B5Rr3fvCN12gCI6amlNoUll7sxT8rUE0a_JqhEHs,5293
|
|
712
712
|
qwak/clients/workspace_manager/__init__.py,sha256=sJ_tnt-CqjXVVNlcywmyQ5L3n5Dk0uMDNjSVvEwHziA,43
|
|
713
713
|
qwak/clients/workspace_manager/client.py,sha256=KXoipmYmzKTS1-auStjbZ7JKzXdCyHHqk22Q7KnrgV4,8136
|
|
714
|
-
qwak/exceptions/__init__.py,sha256=
|
|
714
|
+
qwak/exceptions/__init__.py,sha256=RgGCJgUvVbNm9Z_Kxnu3YUiI877LcqdMv7mJVtDxqYg,856
|
|
715
715
|
qwak/exceptions/quiet_error.py,sha256=ePdCGP6ta8afjzprMiGoJFY-gxf8albRwuY0t1WF2lY,559
|
|
716
716
|
qwak/exceptions/qwak_decode_exception.py,sha256=-Fgh3sc7iFEmhXTYJ1X5GFDvA32yRqTR2owgiYyDHbc,149
|
|
717
717
|
qwak/exceptions/qwak_exception.py,sha256=w4kmvUVy3VLroDzFxYE112s6Vd4oJuchStemhw4qMCg,192
|
|
718
718
|
qwak/exceptions/qwak_external_exception.py,sha256=i1-9D7uVHinkUhdKEBWEHi287dmVF5PgJaFq23ZGSI8,251
|
|
719
719
|
qwak/exceptions/qwak_general_build_exception.py,sha256=dKJo9t0OGSOrZNBsLOibkTAmV3mGzXf-C3wRQaDphqc,424
|
|
720
|
+
qwak/exceptions/qwak_grpc_address_exception.py,sha256=MUSn3eP8z81KKDhb5Fe_888vGz8b1RndS79ulHuHI5o,320
|
|
720
721
|
qwak/exceptions/qwak_http_exception.py,sha256=U1tlEFBp6BD5eICtATI8iCl4UJhVVFN2AWhWK-xbvoc,579
|
|
721
722
|
qwak/exceptions/qwak_inference_exception.py,sha256=wvVQDf_saQt0FucWyVPI-lsz90OCbT-WqcB77_DzhU0,100
|
|
722
723
|
qwak/exceptions/qwak_load_configuration_exception.py,sha256=rTs4lkgZbLYysgVBYt1Xi2i0GGSOFunen0oMpULYfdU,54
|
|
@@ -863,11 +864,12 @@ qwak/inner/build_logic/tools/files.py,sha256=druKkTp640Zy3x1MLjuTuXY56r5blEnH8dS
|
|
|
863
864
|
qwak/inner/build_logic/tools/ignore_files.py,sha256=E65s3m46pmSX4q4hX2-R5HYHDO4VCQHjip8Xn_yOBRg,750
|
|
864
865
|
qwak/inner/build_logic/tools/text.py,sha256=tH-v19Mt8l90sMVxku5XRtrderT0qdRqJ-jLijqannA,188
|
|
865
866
|
qwak/inner/build_logic/trigger_build_context.py,sha256=n5s7MRk41h8cxPI3IVuqMQUVuCc-D8A7Hhq35YuuAps,200
|
|
866
|
-
qwak/inner/const.py,sha256=
|
|
867
|
-
qwak/inner/di_configuration/__init__.py,sha256=
|
|
867
|
+
qwak/inner/const.py,sha256=H441szDAQsTBxCVWtk9HuawgZdPZkLFJRW6pxn1j5WM,991
|
|
868
|
+
qwak/inner/di_configuration/__init__.py,sha256=RxGaowPAmq-entRtvlp2Ln6uc08wD0TTFwnTr7cr5zI,133
|
|
868
869
|
qwak/inner/di_configuration/account.py,sha256=V5NOVOsxhe11-oD4i4UFskWMhq0EOyJ0rDbNSAv7GfA,5338
|
|
869
870
|
qwak/inner/di_configuration/config.yml,sha256=GUvaZMWIDIR_d7hFcPVG_kHdCwpERKH1AFDakG3vqI4,242
|
|
870
871
|
qwak/inner/di_configuration/containers.py,sha256=dK-cfd8ajT6yujlEhPhcRYB-avdYDcreQz_2kTIVDRQ,1252
|
|
872
|
+
qwak/inner/di_configuration/dependency_wiring.py,sha256=5T9kJ26MBnzuJxUYlj3Q9JKUptevQeHSuxuwdq6UNBE,2659
|
|
871
873
|
qwak/inner/di_configuration/session.py,sha256=Pwqapcu-0dsbb5dDn7ZGewVk4bYRN9sWk6ity72IDqY,452
|
|
872
874
|
qwak/inner/instance_template/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
873
875
|
qwak/inner/instance_template/verify_template_id.py,sha256=-c0Fh89XAfphKCpkurYaD-YyX3M3NkkpSLH4QsNPyko,1916
|
|
@@ -880,7 +882,7 @@ qwak/inner/tool/__init__.py,sha256=DDoMZk7LIZNfu63Ft0mLE5wflwlQoghAJ1ZmMAcAeVE,7
|
|
|
880
882
|
qwak/inner/tool/auth.py,sha256=_78ufvtkNQ3ogcFwkotVySZgdS1yMTuIDMLOBsICkSU,4483
|
|
881
883
|
qwak/inner/tool/grpc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
882
884
|
qwak/inner/tool/grpc/grpc_auth.py,sha256=_DvwaRruUu12l4K6ACvmzsTbIDlKl1kuKjm-ustQ5ns,1139
|
|
883
|
-
qwak/inner/tool/grpc/grpc_tools.py,sha256=
|
|
885
|
+
qwak/inner/tool/grpc/grpc_tools.py,sha256=XReEerN5bVh1JlDwxFx6Ea-gBecGnkesQnuYlzpyGGQ,10880
|
|
884
886
|
qwak/inner/tool/grpc/grpc_try_wrapping.py,sha256=4RScvo2jiCr5XwZvaH516OJWqbMSxC8MWIarrD-5HnA,5654
|
|
885
887
|
qwak/inner/tool/protobuf_factory.py,sha256=ar_oY38w_x0sxgVF7EBs5h7gchNsDntvtKK5sSYxb24,1686
|
|
886
888
|
qwak/inner/tool/retry_utils.py,sha256=KcSFJuj02RKF-H9INpCmdiTNXlywEMJ2ClBa00N9aNM,435
|
|
@@ -1095,6 +1097,6 @@ qwak_services_mock/mocks/workspace_manager_service_mock.py,sha256=O9ZSwln4T4kHVk
|
|
|
1095
1097
|
qwak_services_mock/services_mock.py,sha256=0BWwS2re9ryO3JrJJgSNyEQ0lDOjyrpV36oa8t7Pd7A,19163
|
|
1096
1098
|
qwak_services_mock/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1097
1099
|
qwak_services_mock/utils/service_utils.py,sha256=ZlB0CnB1J6oBn6_m7fQO2U8tKoboHdUa6ljjkRMYNXU,265
|
|
1098
|
-
qwak_core-0.
|
|
1099
|
-
qwak_core-0.
|
|
1100
|
-
qwak_core-0.
|
|
1100
|
+
qwak_core-0.5.0.dist-info/METADATA,sha256=pzzzeva96l3XgdUddzV2thBc-STh7nQAEdeIIK5klb0,1986
|
|
1101
|
+
qwak_core-0.5.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
1102
|
+
qwak_core-0.5.0.dist-info/RECORD,,
|
|
File without changes
|