frogml-core 0.0.78__py3-none-any.whl → 0.0.80__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.
- frogml_core/__init__.py +1 -1
- frogml_core/inner/tool/auth.py +17 -6
- {frogml_core-0.0.78.dist-info → frogml_core-0.0.80.dist-info}/METADATA +1 -1
- {frogml_core-0.0.78.dist-info → frogml_core-0.0.80.dist-info}/RECORD +7 -7
- frogml_proto/qwak/ecosystem/v0/ecosystem_pb2.py +6 -6
- frogml_proto/qwak/ecosystem/v0/ecosystem_pb2.pyi +4 -1
- {frogml_core-0.0.78.dist-info → frogml_core-0.0.80.dist-info}/WHEEL +0 -0
frogml_core/__init__.py
CHANGED
frogml_core/inner/tool/auth.py
CHANGED
@@ -5,40 +5,44 @@ from frogml_storage._utils import BearerAuth
|
|
5
5
|
from frogml_storage.authentication._authentication_utils import get_credentials
|
6
6
|
from frogml_storage.authentication.models._auth_config import AuthConfig
|
7
7
|
from requests.auth import AuthBase
|
8
|
+
from typing_extensions import Self
|
8
9
|
|
9
10
|
from frogml_core.exceptions import FrogmlLoginException
|
10
11
|
|
11
12
|
|
12
13
|
class FrogMLAuthClient:
|
13
|
-
|
14
|
+
__MIN_TOKEN_LENGTH: int = 64
|
15
|
+
|
16
|
+
def __init__(self: Self, auth_config: Optional[AuthConfig] = None):
|
14
17
|
self.auth_config: Optional[AuthConfig] = auth_config
|
15
18
|
self._token: Optional[str] = None
|
16
19
|
self._tenant_id: Optional[str] = None
|
17
20
|
|
18
|
-
def get_token(self) -> str:
|
21
|
+
def get_token(self: Self) -> str:
|
19
22
|
if not self._token:
|
20
23
|
self.login()
|
21
24
|
|
22
25
|
return cast(str, self._token)
|
23
26
|
|
24
|
-
def get_tenant_id(self) -> str:
|
27
|
+
def get_tenant_id(self: Self) -> str:
|
25
28
|
if not self._tenant_id:
|
26
29
|
self.login()
|
27
30
|
|
28
31
|
return cast(str, self._tenant_id)
|
29
32
|
|
30
|
-
def login(self):
|
33
|
+
def login(self: Self):
|
31
34
|
artifactory_url, auth = get_credentials(self.auth_config)
|
32
35
|
|
33
36
|
if isinstance(auth, BearerAuth): # For BearerAuth
|
37
|
+
self.__validate_token(auth.token)
|
34
38
|
self._token = auth.token
|
35
39
|
|
36
40
|
self.__get_tenant_id(artifactory_url, auth)
|
37
41
|
|
38
|
-
def get_auth(self) -> Union[AuthBase]:
|
42
|
+
def get_auth(self: Self) -> Union[AuthBase]:
|
39
43
|
return get_credentials(self.auth_config)[1]
|
40
44
|
|
41
|
-
def __get_tenant_id(self, artifactory_url: str, auth: AuthBase):
|
45
|
+
def __get_tenant_id(self: Self, artifactory_url: str, auth: AuthBase):
|
42
46
|
login_exception = FrogmlLoginException(
|
43
47
|
"Failed to authenticate with JFrog. Please check your credentials"
|
44
48
|
)
|
@@ -63,3 +67,10 @@ class FrogMLAuthClient:
|
|
63
67
|
|
64
68
|
except (requests.exceptions.RequestException, ValueError) as exc:
|
65
69
|
raise login_exception from exc
|
70
|
+
|
71
|
+
def __validate_token(self: Self, token: Optional[str]):
|
72
|
+
if token is None or len(token) <= self.__MIN_TOKEN_LENGTH:
|
73
|
+
raise FrogmlLoginException(
|
74
|
+
"Authentication with JFrog failed: Only JWT Access Tokens are supported. "
|
75
|
+
"Please ensure you are using a valid JWT Access Token."
|
76
|
+
)
|
@@ -1,4 +1,4 @@
|
|
1
|
-
frogml_core/__init__.py,sha256
|
1
|
+
frogml_core/__init__.py,sha256=-ck2YixE0mitTCy2cIHa1WErswHW7By6Pj8vEmrkDEQ,777
|
2
2
|
frogml_core/automations/__init__.py,sha256=j2gD15MN-xVWhI5rAFsDwhL0CIyICLNT0scXsKvNBkU,1547
|
3
3
|
frogml_core/automations/automation_executions.py,sha256=xpOb9Dq8gPPGNQDJTvBBZbNz4woZDRZY0HqnLSu7pwU,3230
|
4
4
|
frogml_core/automations/automations.py,sha256=GKEQyQMi8sxX5oZn62PaxPi0zD8IaJRjBkhczRJxHNs,13070
|
@@ -281,7 +281,7 @@ frogml_core/inner/runtime_di/__init__.py,sha256=HXqtejgH3J9TXjnEBT6cNwnTDPq6v3sT
|
|
281
281
|
frogml_core/inner/runtime_di/containers.py,sha256=LbapepWFjBjkELEOTK7m7AJEfj4KENVDlpD7lv7zw6o,577
|
282
282
|
frogml_core/inner/singleton_meta.py,sha256=1cU99I0f9tjuMQLMJyLsK1oK3fZJMsO5-TbRHAMXqds,627
|
283
283
|
frogml_core/inner/tool/__init__.py,sha256=rmOSE-ejnzDG_H7kbikPQxEO4TFIkhBWjOXhTIrldiU,35
|
284
|
-
frogml_core/inner/tool/auth.py,sha256=
|
284
|
+
frogml_core/inner/tool/auth.py,sha256=H0tQTc8JgEGLxv79IS_28jahi8cq8NNoP3lpxlQshPs,2714
|
285
285
|
frogml_core/inner/tool/grpc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
286
286
|
frogml_core/inner/tool/grpc/grpc_auth.py,sha256=WPFWn7CfGp-pSqlnUTplHB6lfuJdzpS6jeidmpyondo,1421
|
287
287
|
frogml_core/inner/tool/grpc/grpc_tools.py,sha256=8sXDWBd_kVRuwmUSdpQNobylT6u8H_83Q8WlZJYOi0c,7247
|
@@ -675,8 +675,8 @@ frogml_proto/qwak/ecosystem/jfrog/v0/token_service_pb2_grpc.py,sha256=LzyOygLpd4
|
|
675
675
|
frogml_proto/qwak/ecosystem/v0/credentials_pb2.py,sha256=6ZYXYF7t6vCVBnUDnDjNP5WagHl3BscQzaONc2ErYhg,3641
|
676
676
|
frogml_proto/qwak/ecosystem/v0/credentials_pb2.pyi,sha256=7sxOny-BUipUxrEpBxKVNuJF3-N77Z6Ov1eWI-87Uoo,4098
|
677
677
|
frogml_proto/qwak/ecosystem/v0/credentials_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
678
|
-
frogml_proto/qwak/ecosystem/v0/ecosystem_pb2.py,sha256=
|
679
|
-
frogml_proto/qwak/ecosystem/v0/ecosystem_pb2.pyi,sha256=
|
678
|
+
frogml_proto/qwak/ecosystem/v0/ecosystem_pb2.py,sha256=mc7uqHY-KAKW8E_IkYrgS9M-qKGnRKwC3g-H3YQGays,13872
|
679
|
+
frogml_proto/qwak/ecosystem/v0/ecosystem_pb2.pyi,sha256=pftVQ9_osUAmmwHlbESeZ14GvnRBQQTiEiljjViTmSk,16067
|
680
680
|
frogml_proto/qwak/ecosystem/v0/ecosystem_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
681
681
|
frogml_proto/qwak/ecosystem/v0/ecosystem_runtime_service_pb2.py,sha256=wO68NjLymxfHHbeGw6VeQd6KDKSaJ29iPSPI4C-3MaQ,18891
|
682
682
|
frogml_proto/qwak/ecosystem/v0/ecosystem_runtime_service_pb2.pyi,sha256=qoGgIDToRKMaBf7Kd_yWL9u9_Wf4UvCt0IS-Qorfbs4,19570
|
@@ -1096,6 +1096,6 @@ frogml_services_mock/mocks/workspace_manager_service_mock.py,sha256=WbOiWgOyr-xT
|
|
1096
1096
|
frogml_services_mock/services_mock.py,sha256=xfbYvl05gFUq2oT82cT-6K2CEJ6d9kFX_tk77QZHTFI,20787
|
1097
1097
|
frogml_services_mock/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1098
1098
|
frogml_services_mock/utils/service_utils.py,sha256=ZlB0CnB1J6oBn6_m7fQO2U8tKoboHdUa6ljjkRMYNXU,265
|
1099
|
-
frogml_core-0.0.
|
1100
|
-
frogml_core-0.0.
|
1101
|
-
frogml_core-0.0.
|
1099
|
+
frogml_core-0.0.80.dist-info/METADATA,sha256=P2IaUx1Q7b5XueqiIDe6eImIlPnPVIYiaOKRFlkH738,2004
|
1100
|
+
frogml_core-0.0.80.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
1101
|
+
frogml_core-0.0.80.dist-info/RECORD,,
|
@@ -20,7 +20,7 @@ from frogml_proto.qwak.administration.v0.environments import configuration_pb2 a
|
|
20
20
|
from frogml_proto.qwak.administration.v0.users import user_pb2 as qwak_dot_administration_dot_v0_dot_users_dot_user__pb2
|
21
21
|
|
22
22
|
|
23
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!qwak/ecosystem/v0/ecosystem.proto\x12\x11qwak.ecosystem.v0\x1a\x30qwak/administration/account/v1/preferences.proto\x1a*qwak/administration/account/v1/terms.proto\x1a,qwak/administration/account/v1/account.proto\x1a\x39qwak/administration/account/v1/jfrog_tenant_details.proto\x1a\x37qwak/administration/v0/environments/configuration.proto\x1a\'qwak/administration/v0/users/user.proto\"<\n\x16UsernamePasswordMethod\x12\x10\n\x08username\x18\x01 \x01(\t\x12\x10\n\x08password\x18\x02 \x01(\t\"(\n\x10QwakApiKeyMethod\x12\x14\n\x0cqwak_api_key\x18\x01 \x01(\t\"\\\n\x18\x41uthenticatedUserContext\x12@\n\x04user\x18\x01 \x01(\x0b\x32\x32.qwak.ecosystem.v0.AuthenticatedUnifiedUserContext\"\xfe\x01\n\x1f\x41uthenticatedUnifiedUserContext\x12\x0f\n\x07user_id\x18\x04 \x01(\t\x12\x45\n\x0f\x61\x63\x63ount_details\x18\x05 \x01(\x0b\x32,.qwak.ecosystem.v0.UserContextAccountDetails\x12?\n\x0c\x61\x63\x63ount_role\x18\x01 \x01(\x0e\x32).qwak.administration.user.QwakAccountRole\x12\x42\n\x13\x65nvironment_details\x18\x06 \x01(\x0b\x32%.qwak.ecosystem.v0.EnvironmentDetails\"\xd6\x06\n\x19UserContextAccountDetails\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x1e\n\x16\x64\x65\x66\x61ult_environment_id\x18\x03 \x01(\t\x12\x44\n\x0bpreferences\x18\x05 \x01(\x0b\x32/.qwak.administration.account.AccountPreferences\x12\\\n\x11\x65nvironment_by_id\x18\x04 \x03(\x0b\x32\x41.qwak.ecosystem.v0.UserContextAccountDetails.EnvironmentByIdEntry\x12t\n\x1euser_context_environment_by_id\x18\x06 \x03(\x0b\x32L.qwak.ecosystem.v0.UserContextAccountDetails.UserContextEnvironmentByIdEntry\x12\x39\n\x04type\x18\x07 \x01(\x0e\x32+.qwak.administration.account.v1.AccountType\x12\x39\n\x04tier\x18\x08 \x01(\x0e\x32+.qwak.administration.account.v1.AccountTier\x12I\n\x0e\x61\x63\x63\x65pted_terms\x18\t \x01(\x0b\x32\x31.qwak.administration.account.AccountAcceptedTerms\x12P\n\x14jfrog_tenant_details\x18\n \x01(\x0b\x32\x32.qwak.administration.account.v1.JfrogTenantDetails\x1a]\n\x14\x45nvironmentByIdEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x34\n\x05value\x18\x02 \x01(\x0b\x32%.qwak.ecosystem.v0.EnvironmentDetails:\x02\x38\x01\x1as\n\x1fUserContextEnvironmentByIdEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12?\n\x05value\x18\x02 \x01(\x0b\x32\x30.qwak.ecosystem.v0.UserContextEnvironmentDetails:\x02\x38\x01\"\x1f\n\x1dUserContextEnvironmentDetails\"\xd8\x04\n\x0e\x41\x63\x63ountDetails\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x44\n\x0bpreferences\x18\x03 \x01(\x0b\x32/.qwak.administration.account.AccountPreferences\x12\x1e\n\x16\x64\x65\x66\x61ult_environment_id\x18\x05 \x01(\t\x12S\n\x12\x65nvironments_by_id\x18\x04 \x03(\x0b\x32\x37.qwak.ecosystem.v0.AccountDetails.EnvironmentsByIdEntry\x12\x39\n\x04type\x18\x06 \x01(\x0e\x32+.qwak.administration.account.v1.AccountType\x12\x39\n\x04tier\x18\x07 \x01(\x0e\x32+.qwak.administration.account.v1.AccountTier\x12I\n\x0e\x61\x63\x63\x65pted_terms\x18\x08 \x01(\x0b\x32\x31.qwak.administration.account.AccountAcceptedTerms\x12P\n\x14jfrog_tenant_details\x18\t \x01(\x0b\x32\x32.qwak.administration.account.v1.JfrogTenantDetails\x1a^\n\x15\x45nvironmentsByIdEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x34\n\x05value\x18\x02 \x01(\x0b\x32%.qwak.ecosystem.v0.EnvironmentDetails:\x02\x38\x01\"\
|
23
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!qwak/ecosystem/v0/ecosystem.proto\x12\x11qwak.ecosystem.v0\x1a\x30qwak/administration/account/v1/preferences.proto\x1a*qwak/administration/account/v1/terms.proto\x1a,qwak/administration/account/v1/account.proto\x1a\x39qwak/administration/account/v1/jfrog_tenant_details.proto\x1a\x37qwak/administration/v0/environments/configuration.proto\x1a\'qwak/administration/v0/users/user.proto\"<\n\x16UsernamePasswordMethod\x12\x10\n\x08username\x18\x01 \x01(\t\x12\x10\n\x08password\x18\x02 \x01(\t\"(\n\x10QwakApiKeyMethod\x12\x14\n\x0cqwak_api_key\x18\x01 \x01(\t\"\\\n\x18\x41uthenticatedUserContext\x12@\n\x04user\x18\x01 \x01(\x0b\x32\x32.qwak.ecosystem.v0.AuthenticatedUnifiedUserContext\"\xfe\x01\n\x1f\x41uthenticatedUnifiedUserContext\x12\x0f\n\x07user_id\x18\x04 \x01(\t\x12\x45\n\x0f\x61\x63\x63ount_details\x18\x05 \x01(\x0b\x32,.qwak.ecosystem.v0.UserContextAccountDetails\x12?\n\x0c\x61\x63\x63ount_role\x18\x01 \x01(\x0e\x32).qwak.administration.user.QwakAccountRole\x12\x42\n\x13\x65nvironment_details\x18\x06 \x01(\x0b\x32%.qwak.ecosystem.v0.EnvironmentDetails\"\xd6\x06\n\x19UserContextAccountDetails\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x1e\n\x16\x64\x65\x66\x61ult_environment_id\x18\x03 \x01(\t\x12\x44\n\x0bpreferences\x18\x05 \x01(\x0b\x32/.qwak.administration.account.AccountPreferences\x12\\\n\x11\x65nvironment_by_id\x18\x04 \x03(\x0b\x32\x41.qwak.ecosystem.v0.UserContextAccountDetails.EnvironmentByIdEntry\x12t\n\x1euser_context_environment_by_id\x18\x06 \x03(\x0b\x32L.qwak.ecosystem.v0.UserContextAccountDetails.UserContextEnvironmentByIdEntry\x12\x39\n\x04type\x18\x07 \x01(\x0e\x32+.qwak.administration.account.v1.AccountType\x12\x39\n\x04tier\x18\x08 \x01(\x0e\x32+.qwak.administration.account.v1.AccountTier\x12I\n\x0e\x61\x63\x63\x65pted_terms\x18\t \x01(\x0b\x32\x31.qwak.administration.account.AccountAcceptedTerms\x12P\n\x14jfrog_tenant_details\x18\n \x01(\x0b\x32\x32.qwak.administration.account.v1.JfrogTenantDetails\x1a]\n\x14\x45nvironmentByIdEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x34\n\x05value\x18\x02 \x01(\x0b\x32%.qwak.ecosystem.v0.EnvironmentDetails:\x02\x38\x01\x1as\n\x1fUserContextEnvironmentByIdEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12?\n\x05value\x18\x02 \x01(\x0b\x32\x30.qwak.ecosystem.v0.UserContextEnvironmentDetails:\x02\x38\x01\"\x1f\n\x1dUserContextEnvironmentDetails\"\xd8\x04\n\x0e\x41\x63\x63ountDetails\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x44\n\x0bpreferences\x18\x03 \x01(\x0b\x32/.qwak.administration.account.AccountPreferences\x12\x1e\n\x16\x64\x65\x66\x61ult_environment_id\x18\x05 \x01(\t\x12S\n\x12\x65nvironments_by_id\x18\x04 \x03(\x0b\x32\x37.qwak.ecosystem.v0.AccountDetails.EnvironmentsByIdEntry\x12\x39\n\x04type\x18\x06 \x01(\x0e\x32+.qwak.administration.account.v1.AccountType\x12\x39\n\x04tier\x18\x07 \x01(\x0e\x32+.qwak.administration.account.v1.AccountTier\x12I\n\x0e\x61\x63\x63\x65pted_terms\x18\x08 \x01(\x0b\x32\x31.qwak.administration.account.AccountAcceptedTerms\x12P\n\x14jfrog_tenant_details\x18\t \x01(\x0b\x32\x32.qwak.administration.account.v1.JfrogTenantDetails\x1a^\n\x15\x45nvironmentsByIdEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x34\n\x05value\x18\x02 \x01(\x0b\x32%.qwak.ecosystem.v0.EnvironmentDetails:\x02\x38\x01\"\x98\x01\n\x12\x45nvironmentDetails\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12T\n\rconfiguration\x18\x03 \x01(\x0b\x32=.qwak.administration.environment.QwakEnvironmentConfiguration\x12\x12\n\ncluster_id\x18\x04 \x01(\t\"\xde\x01\n\x0fUserAccountList\x12\x1a\n\x12\x64\x65\x66\x61ult_account_id\x18\x01 \x01(\t\x12L\n\x0e\x61\x63\x63ounts_by_id\x18\x02 \x03(\x0b\x32\x34.qwak.ecosystem.v0.UserAccountList.AccountsByIdEntry\x1a\x61\n\x11\x41\x63\x63ountsByIdEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12;\n\x05value\x18\x02 \x01(\x0b\x32,.qwak.ecosystem.v0.UserContextAccountDetails:\x02\x38\x01\x42\xb7\x01\n\x1c\x63om.qwak.ai.common.ecosystemP\x01Z\x94\x01github.com/qwak-ai/qwak-platform/services/shared/java/libs/qwak-common/qwak-common-api/qwak-platform-ecosystem-api/pb/qwak/ecosystem/v0;ecosystem_v0b\x06proto3')
|
24
24
|
|
25
25
|
|
26
26
|
|
@@ -165,9 +165,9 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
165
165
|
_ACCOUNTDETAILS_ENVIRONMENTSBYIDENTRY._serialized_start=2205
|
166
166
|
_ACCOUNTDETAILS_ENVIRONMENTSBYIDENTRY._serialized_end=2299
|
167
167
|
_ENVIRONMENTDETAILS._serialized_start=2302
|
168
|
-
_ENVIRONMENTDETAILS._serialized_end=
|
169
|
-
_USERACCOUNTLIST._serialized_start=
|
170
|
-
_USERACCOUNTLIST._serialized_end=
|
171
|
-
_USERACCOUNTLIST_ACCOUNTSBYIDENTRY._serialized_start=
|
172
|
-
_USERACCOUNTLIST_ACCOUNTSBYIDENTRY._serialized_end=
|
168
|
+
_ENVIRONMENTDETAILS._serialized_end=2454
|
169
|
+
_USERACCOUNTLIST._serialized_start=2457
|
170
|
+
_USERACCOUNTLIST._serialized_end=2679
|
171
|
+
_USERACCOUNTLIST_ACCOUNTSBYIDENTRY._serialized_start=2582
|
172
|
+
_USERACCOUNTLIST_ACCOUNTSBYIDENTRY._serialized_end=2679
|
173
173
|
# @@protoc_insertion_point(module_scope)
|
@@ -280,6 +280,7 @@ class EnvironmentDetails(google.protobuf.message.Message):
|
|
280
280
|
ID_FIELD_NUMBER: builtins.int
|
281
281
|
NAME_FIELD_NUMBER: builtins.int
|
282
282
|
CONFIGURATION_FIELD_NUMBER: builtins.int
|
283
|
+
CLUSTER_ID_FIELD_NUMBER: builtins.int
|
283
284
|
id: builtins.str
|
284
285
|
"""Environment id"""
|
285
286
|
name: builtins.str
|
@@ -287,15 +288,17 @@ class EnvironmentDetails(google.protobuf.message.Message):
|
|
287
288
|
@property
|
288
289
|
def configuration(self) -> frogml_proto.qwak.administration.v0.environments.configuration_pb2.QwakEnvironmentConfiguration:
|
289
290
|
"""Environment configuration"""
|
291
|
+
cluster_id: builtins.str
|
290
292
|
def __init__(
|
291
293
|
self,
|
292
294
|
*,
|
293
295
|
id: builtins.str = ...,
|
294
296
|
name: builtins.str = ...,
|
295
297
|
configuration: frogml_proto.qwak.administration.v0.environments.configuration_pb2.QwakEnvironmentConfiguration | None = ...,
|
298
|
+
cluster_id: builtins.str = ...,
|
296
299
|
) -> None: ...
|
297
300
|
def HasField(self, field_name: typing_extensions.Literal["configuration", b"configuration"]) -> builtins.bool: ...
|
298
|
-
def ClearField(self, field_name: typing_extensions.Literal["configuration", b"configuration", "id", b"id", "name", b"name"]) -> None: ...
|
301
|
+
def ClearField(self, field_name: typing_extensions.Literal["cluster_id", b"cluster_id", "configuration", b"configuration", "id", b"id", "name", b"name"]) -> None: ...
|
299
302
|
|
300
303
|
global___EnvironmentDetails = EnvironmentDetails
|
301
304
|
|
File without changes
|