ark-sdk-python 2.1.7__py3-none-any.whl → 2.2.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.
Files changed (166) hide show
  1. ark_sdk_python/actions/ark_exec_action.py +1 -0
  2. ark_sdk_python/ark_api.py +36 -0
  3. ark_sdk_python/auth/ark_auth.py +6 -1
  4. ark_sdk_python/auth/identity/ark_identity_fqdn_resolver.py +4 -4
  5. ark_sdk_python/common/ark_version.py +1 -1
  6. ark_sdk_python/common/isp/ark_isp_service_client.py +3 -1
  7. ark_sdk_python/examples/validate_ssh_connection.py +11 -4
  8. ark_sdk_python/models/actions/services/__init__.py +6 -0
  9. ark_sdk_python/models/actions/services/ark_access_exec_action_consts.py +20 -0
  10. ark_sdk_python/models/actions/services/ark_ars_exec_action_consts.py +40 -0
  11. ark_sdk_python/models/actions/services/ark_cmgr_exec_action_consts.py +45 -1
  12. ark_sdk_python/models/actions/services/ark_sia_exec_action_consts.py +80 -4
  13. ark_sdk_python/models/common/ark_application_code.py +5 -0
  14. ark_sdk_python/models/common/ark_os_type.py +1 -0
  15. ark_sdk_python/models/common/ark_region.py +2 -1
  16. ark_sdk_python/models/services/access/__init__.py +15 -0
  17. ark_sdk_python/models/services/access/assets/__init__.py +13 -0
  18. ark_sdk_python/models/services/access/assets/ark_access_assets_asset.py +61 -0
  19. ark_sdk_python/models/services/access/assets/ark_access_assets_assets.py +15 -0
  20. ark_sdk_python/models/services/access/assets/ark_access_assets_list_assets.py +32 -0
  21. ark_sdk_python/models/services/access/assets/ark_access_assets_secret.py +15 -0
  22. ark_sdk_python/models/services/ars/__init__.py +0 -0
  23. ark_sdk_python/models/services/ars/common/__init__.py +9 -0
  24. ark_sdk_python/models/services/ars/common/ark_ars_filter.py +14 -0
  25. ark_sdk_python/models/services/ars/common/ark_ars_query.py +22 -0
  26. ark_sdk_python/models/services/ars/requests/__init__.py +31 -0
  27. ark_sdk_python/models/services/ars/requests/ark_ars_access_request.py +82 -0
  28. ark_sdk_python/models/services/ars/requests/ark_ars_access_request_async_task.py +44 -0
  29. ark_sdk_python/models/services/ars/requests/ark_ars_access_request_form.py +67 -0
  30. ark_sdk_python/models/services/ars/requests/ark_ars_access_request_info.py +23 -0
  31. ark_sdk_python/models/services/ars/requests/ark_ars_access_requests_stats.py +17 -0
  32. ark_sdk_python/models/services/ars/requests/ark_ars_cancel_access_request.py +8 -0
  33. ark_sdk_python/models/services/ars/requests/ark_ars_finalize_access_request.py +20 -0
  34. ark_sdk_python/models/services/ars/requests/ark_ars_get_access_request.py +7 -0
  35. ark_sdk_python/models/services/ars/requests/ark_ars_list_access_request_forms.py +12 -0
  36. ark_sdk_python/models/services/ars/requests/ark_ars_request_type.py +6 -0
  37. ark_sdk_python/models/services/ars/requests/ark_ars_submit_access_request.py +18 -0
  38. ark_sdk_python/models/services/ars/requests/ark_target_category.py +32 -0
  39. ark_sdk_python/models/services/cmgr/__init__.py +59 -3
  40. ark_sdk_python/models/services/cmgr/ark_cmgr_component.py +82 -0
  41. ark_sdk_python/models/services/cmgr/ark_cmgr_component_operation_async_task.py +31 -0
  42. ark_sdk_python/models/services/cmgr/ark_cmgr_components_filter.py +16 -0
  43. ark_sdk_python/models/services/cmgr/ark_cmgr_components_stats.py +15 -0
  44. ark_sdk_python/models/services/cmgr/ark_cmgr_connector.py +52 -0
  45. ark_sdk_python/models/services/cmgr/ark_cmgr_connector_components_filter.py +7 -0
  46. ark_sdk_python/models/services/cmgr/ark_cmgr_connector_setup_script.py +8 -0
  47. ark_sdk_python/models/services/cmgr/ark_cmgr_connectors_filter.py +34 -0
  48. ark_sdk_python/models/services/cmgr/ark_cmgr_connectors_stats.py +31 -0
  49. ark_sdk_python/models/services/cmgr/ark_cmgr_delete_connector.py +24 -0
  50. ark_sdk_python/models/services/cmgr/ark_cmgr_get_connector.py +7 -0
  51. ark_sdk_python/models/services/cmgr/ark_cmgr_get_connector_component.py +8 -0
  52. ark_sdk_python/models/services/cmgr/ark_cmgr_get_connector_setup_script.py +23 -0
  53. ark_sdk_python/models/services/cmgr/ark_cmgr_install_component.py +12 -0
  54. ark_sdk_python/models/services/cmgr/ark_cmgr_install_connector.py +28 -0
  55. ark_sdk_python/models/services/cmgr/ark_cmgr_list_connector_components.py +7 -0
  56. ark_sdk_python/models/services/cmgr/ark_cmgr_reinstall_component.py +8 -0
  57. ark_sdk_python/models/services/cmgr/ark_cmgr_rescan_components.py +7 -0
  58. ark_sdk_python/models/services/cmgr/ark_cmgr_uninstall_component.py +16 -0
  59. ark_sdk_python/models/services/cmgr/ark_cmgr_uninstall_connector.py +21 -0
  60. ark_sdk_python/models/services/cmgr/ark_cmgr_upgrade_component.py +9 -0
  61. ark_sdk_python/models/services/cmgr/ark_cmgr_upgrade_connector.py +7 -0
  62. ark_sdk_python/models/services/cmgr/ark_cmgr_workspace_type_serializer.py +18 -0
  63. ark_sdk_python/models/services/sia/access/__init__.py +54 -0
  64. ark_sdk_python/models/services/sia/access/ark_sia_connector.py +119 -0
  65. ark_sdk_python/models/services/sia/access/ark_sia_connectors_filter.py +39 -0
  66. ark_sdk_python/models/services/sia/access/ark_sia_connectors_stats.py +33 -0
  67. ark_sdk_python/models/services/sia/access/ark_sia_delete_connector.py +25 -0
  68. ark_sdk_python/models/services/sia/access/ark_sia_delete_https_relay.py +31 -0
  69. ark_sdk_python/models/services/sia/access/ark_sia_get_connector.py +7 -0
  70. ark_sdk_python/models/services/sia/access/ark_sia_get_connector_setup_script.py +4 -0
  71. ark_sdk_python/models/services/sia/access/ark_sia_get_https_relay.py +7 -0
  72. ark_sdk_python/models/services/sia/access/ark_sia_get_https_relay_setup_script.py +19 -0
  73. ark_sdk_python/models/services/sia/access/ark_sia_https_relay.py +34 -0
  74. ark_sdk_python/models/services/sia/access/ark_sia_https_relay_setup_script.py +8 -0
  75. ark_sdk_python/models/services/sia/access/ark_sia_https_relay_status_codes.py +14 -0
  76. ark_sdk_python/models/services/sia/access/ark_sia_https_relays_filter.py +13 -0
  77. ark_sdk_python/models/services/sia/access/ark_sia_install_connector.py +13 -2
  78. ark_sdk_python/models/services/sia/access/ark_sia_install_relay.py +32 -0
  79. ark_sdk_python/models/services/sia/access/ark_sia_k8s_details.py +36 -0
  80. ark_sdk_python/models/services/sia/access/ark_sia_rotate_connector.py +7 -0
  81. ark_sdk_python/models/services/sia/access/ark_sia_rotate_https_relay.py +7 -0
  82. ark_sdk_python/models/services/sia/access/ark_sia_uninstall_connector.py +15 -3
  83. ark_sdk_python/models/services/sia/access/ark_sia_uninstall_relay.py +23 -0
  84. ark_sdk_python/models/services/sia/access/ark_sia_update_connector_maintenance_mode.py +23 -0
  85. ark_sdk_python/models/services/sia/access/ark_sia_upgrade_connector.py +7 -0
  86. ark_sdk_python/models/services/sia/access/ark_sia_upgrade_connector_async_task.py +32 -0
  87. ark_sdk_python/models/services/sia/access/ark_sia_upgrade_https_relay.py +7 -0
  88. ark_sdk_python/models/services/sia/k8s/__init__.py +11 -1
  89. ark_sdk_python/models/services/sia/k8s/ark_sia_k8s_cluster.py +22 -0
  90. ark_sdk_python/models/services/sia/k8s/ark_sia_k8s_clusters.py +10 -0
  91. ark_sdk_python/models/services/sia/k8s/ark_sia_k8s_generate_cluster_config.py +13 -0
  92. ark_sdk_python/models/services/sia/k8s/ark_sia_k8s_list_clusters.py +9 -0
  93. ark_sdk_python/models/services/sia/secrets/db/__init__.py +22 -6
  94. ark_sdk_python/models/services/sia/secrets/db/ark_sia_db_add_secret.py +54 -3
  95. ark_sdk_python/models/services/sia/secrets/db/ark_sia_db_delete_secret.py +4 -0
  96. ark_sdk_python/models/services/sia/secrets/db/ark_sia_db_get_secret.py +4 -0
  97. ark_sdk_python/models/services/sia/secrets/db/ark_sia_db_list_strong_accounts_response.py +16 -0
  98. ark_sdk_python/models/services/sia/secrets/db/ark_sia_db_secret_metadata.py +27 -2
  99. ark_sdk_python/models/services/sia/secrets/db/ark_sia_db_secrets_filter.py +7 -0
  100. ark_sdk_python/models/services/sia/secrets/db/ark_sia_db_strong_accounts_filter.py +29 -0
  101. ark_sdk_python/models/services/sia/secrets/db/ark_sia_db_update_secret.py +51 -3
  102. ark_sdk_python/models/services/sia/settings/__init__.py +2 -0
  103. ark_sdk_python/models/services/sia/settings/ark_sia_settings_feature_name.py +1 -0
  104. ark_sdk_python/models/services/sia/settings/ark_sia_settings_https_relay.py +11 -0
  105. ark_sdk_python/models/services/sia/settings/ark_sia_settings_list_settings.py +4 -1
  106. ark_sdk_python/models/services/sia/settings/ark_sia_settings_set_settings.py +2 -0
  107. ark_sdk_python/models/services/sia/settings/ark_sia_settings_setting_types.py +2 -0
  108. ark_sdk_python/models/services/sia/settings/ark_sia_settings_settings.py +2 -0
  109. ark_sdk_python/models/services/sia/shortened_connection_string/__init__.py +11 -0
  110. ark_sdk_python/models/services/sia/shortened_connection_string/ark_sia_generate_shortened_connection_string.py +7 -0
  111. ark_sdk_python/models/services/sia/shortened_connection_string/ark_sia_generate_shortened_connection_string_response.py +8 -0
  112. ark_sdk_python/models/services/sia/sso/ark_sia_sso_get_short_lived_rdp_file.py +16 -2
  113. ark_sdk_python/models/services/sia/sso/ark_sia_sso_get_ssh_key.py +1 -0
  114. ark_sdk_python/models/services/sia/workspaces/db/__init__.py +27 -8
  115. ark_sdk_python/models/services/sia/workspaces/db/ark_sia_db_add_database.py +152 -0
  116. ark_sdk_python/models/services/sia/workspaces/db/ark_sia_db_database.py +101 -2
  117. ark_sdk_python/models/services/sia/workspaces/db/ark_sia_db_database_info.py +47 -1
  118. ark_sdk_python/models/services/sia/workspaces/db/ark_sia_db_databases_filter.py +13 -0
  119. ark_sdk_python/models/services/sia/workspaces/db/ark_sia_db_databases_stats.py +12 -0
  120. ark_sdk_python/models/services/sia/workspaces/db/ark_sia_db_delete_database.py +13 -0
  121. ark_sdk_python/models/services/sia/workspaces/db/ark_sia_db_get_database.py +13 -0
  122. ark_sdk_python/models/services/sia/workspaces/db/ark_sia_db_provider.py +25 -1
  123. ark_sdk_python/models/services/sia/workspaces/db/ark_sia_db_target_constraints.py +39 -0
  124. ark_sdk_python/models/services/sia/workspaces/db/ark_sia_db_update_database.py +166 -0
  125. ark_sdk_python/models/services/sm/ark_sm_session.py +1 -0
  126. ark_sdk_python/models/services/uap/common/__init__.py +2 -0
  127. ark_sdk_python/models/services/uap/common/ark_uap_access_approval.py +24 -0
  128. ark_sdk_python/models/services/uap/common/ark_uap_change_info.py +1 -1
  129. ark_sdk_python/models/services/uap/common/ark_uap_conditions.py +15 -1
  130. ark_sdk_python/models/services/uap/common/ark_uap_metadata.py +1 -1
  131. ark_sdk_python/models/services/uap/common/ark_uap_principal.py +2 -2
  132. ark_sdk_python/models/services/uap/sia/common/ark_uap_sia_common_conditions.py +14 -0
  133. ark_sdk_python/models/services/uap/sia/vm/__init__.py +2 -0
  134. ark_sdk_python/models/services/uap/sia/vm/ark_uap_sia_vm_access_policy.py +11 -0
  135. ark_sdk_python/models/services/uap/sia/vm/ark_uap_sia_vm_conditions.py +28 -0
  136. ark_sdk_python/services/access/__init__.py +3 -0
  137. ark_sdk_python/services/access/ark_access_api.py +17 -0
  138. ark_sdk_python/services/access/assets/__init__.py +3 -0
  139. ark_sdk_python/services/access/assets/ark_access_assets_service.py +91 -0
  140. ark_sdk_python/services/ars/__init__.py +0 -0
  141. ark_sdk_python/services/ars/requests/__init__.py +7 -0
  142. ark_sdk_python/services/ars/requests/ark_ars_requests_async_request.py +145 -0
  143. ark_sdk_python/services/ars/requests/ark_ars_requests_service.py +377 -0
  144. ark_sdk_python/services/cmgr/__init__.py +2 -1
  145. ark_sdk_python/services/cmgr/ark_cmgr_component_operation_async_request.py +139 -0
  146. ark_sdk_python/services/cmgr/ark_cmgr_service.py +754 -3
  147. ark_sdk_python/services/sia/access/__init__.py +2 -1
  148. ark_sdk_python/services/sia/access/ark_sia_access_service.py +691 -11
  149. ark_sdk_python/services/sia/access/ark_sia_upgrade_connector_async_request.py +136 -0
  150. ark_sdk_python/services/sia/ark_sia_api.py +12 -0
  151. ark_sdk_python/services/sia/k8s/ark_sia_k8s_service.py +77 -1
  152. ark_sdk_python/services/sia/secrets/db/ark_sia_db_secrets_service.py +354 -1
  153. ark_sdk_python/services/sia/settings/ark_sia_settings_service.py +60 -2
  154. ark_sdk_python/services/sia/shortened_connection_string/__init__.py +7 -0
  155. ark_sdk_python/services/sia/shortened_connection_string/ark_sia_shortened_connection_string_service.py +75 -0
  156. ark_sdk_python/services/sia/sso/ark_sia_sso_service.py +12 -2
  157. ark_sdk_python/services/sia/sso/consts.py +9 -0
  158. ark_sdk_python/services/sia/workspaces/db/ark_sia_db_workspace_service.py +346 -7
  159. ark_sdk_python/services/uap/common/ark_uap_base_service.py +13 -6
  160. ark_sdk_python/services/uap/sca/ark_uap_sca_service.py +4 -4
  161. {ark_sdk_python-2.1.7.dist-info → ark_sdk_python-2.2.0.dist-info}/METADATA +2 -1
  162. {ark_sdk_python-2.1.7.dist-info → ark_sdk_python-2.2.0.dist-info}/RECORD +166 -71
  163. {ark_sdk_python-2.1.7.dist-info → ark_sdk_python-2.2.0.dist-info}/WHEEL +0 -0
  164. {ark_sdk_python-2.1.7.dist-info → ark_sdk_python-2.2.0.dist-info}/entry_points.txt +0 -0
  165. {ark_sdk_python-2.1.7.dist-info → ark_sdk_python-2.2.0.dist-info}/licenses/LICENSE.txt +0 -0
  166. {ark_sdk_python-2.1.7.dist-info → ark_sdk_python-2.2.0.dist-info}/licenses/NOTICES.md +0 -0
@@ -0,0 +1,61 @@
1
+ from typing import Any, Dict, List, Optional
2
+
3
+ from pydantic import Field
4
+
5
+ from ark_sdk_python.models.ark_model import ArkCamelizedModel
6
+
7
+
8
+ class ArkAccessAssetsAsset(ArkCamelizedModel):
9
+ # identifiers
10
+ asset_category: str = Field(description='The category of the asset')
11
+ asset_type: str = Field(description='The type of the asset')
12
+ asset_id: str = Field(description='Asset identifier')
13
+
14
+ # metadata fields
15
+ last_accessed: Optional[str] = Field(default=None, description='The date and time when the asset was last accessed (ISO 8601 format)')
16
+ is_favorite: bool = Field(default=False, description='Is the asset marked as a favorite')
17
+ link_type: Optional[str] = Field(default=None, description='The link type of the asset')
18
+ link_uid: Optional[str] = Field(default=None, description='The UID of the base asset this asset is linked to')
19
+
20
+ # general connection fields
21
+ protocol: Optional[str] = Field(default=None, description='The infrastructure asset protocol')
22
+ access_method: Optional[str] = Field(default=None, description='The access method to the infrastructure asset')
23
+ address: Optional[str] = Field(default=None, description='The infrastructure asset address/ID')
24
+ domain: Optional[str] = Field(default=None, description='The infrastructure asset domain')
25
+ network_name: Optional[str] = Field(default=None, description='The infrastructure asset network name')
26
+ platform_type: Optional[str] = Field(default=None, description='The infrastructure asset platform type')
27
+
28
+ # vaulted fields
29
+ username: Optional[str] = Field(default=None, description='The infrastructure asset username')
30
+ platform_id: Optional[str] = Field(default=None, description='The infrastructure asset platform identifier')
31
+ platform_subtype: Optional[str] = Field(default=None, description='The infrastructure asset platform subtype')
32
+ workflow_status: Optional[Dict[str, Any]] = Field(default=None, description='The infrastructure asset workflow status')
33
+ file_categories: Optional[Dict[str, Any]] = Field(default=None, description='The infrastructure asset file categories')
34
+ jit_elevate_vaulted_cred: Optional[bool] = Field(
35
+ default=None,
36
+ description='Indicates whether Just-in-Time (JIT) credential elevation is enabled for this vaulted infrastructure asset',
37
+ )
38
+
39
+ # discovery zsp fields
40
+ os_type: Optional[str] = Field(default=None, description='The infrastructure asset operating system')
41
+ protocols: Optional[Dict[str, str]] = Field(
42
+ default=None, description='The infrastructure asset protocols and their permissions for Discovery ZSP assets'
43
+ )
44
+ ips: Optional[List[str]] = Field(default=None, description='The infrastructure asset IPs')
45
+ workspace_id: Optional[str] = Field(default=None, description='The infrastructure asset workspace identifier')
46
+ location_type: Optional[str] = Field(default=None, description='The infrastructure asset location')
47
+
48
+ # identity fields
49
+ name: Optional[str] = Field(default=None, description='The Identity asset name')
50
+ icon: Optional[str] = Field(default=None, description='The Identity asset icon URL')
51
+ is_sca_enabled: Optional[bool] = Field(
52
+ default=None, description='Indicates whether SCA (Secure Cloud Access) is enabled for the asset application'
53
+ )
54
+ is_sws_enabled: Optional[bool] = Field(
55
+ default=None, description='Indicates whether SWS (Secure Web Sessions) is enabled for the asset application'
56
+ )
57
+ is_launch_disabled: Optional[bool] = Field(default=None, description='Indicates if launch is disabled for the Identity application')
58
+
59
+ # Manual ZSP fields
60
+ selected_token_option: Optional[str] = Field(default=None, description='Selected token option')
61
+ network_id: Optional[str] = Field(default=None, description='Network ID')
@@ -0,0 +1,15 @@
1
+ from typing import List
2
+
3
+ from pydantic import Field
4
+
5
+ from ark_sdk_python.models.ark_model import ArkCamelizedModel
6
+ from ark_sdk_python.models.services.access.assets.ark_access_assets_asset import ArkAccessAssetsAsset
7
+
8
+
9
+ class ArkAccessAssetsAssets(ArkCamelizedModel):
10
+ assets: List[ArkAccessAssetsAsset] = Field(
11
+ description='List of the end-user assets.',
12
+ default_factory=list,
13
+ validation_alias='targets',
14
+ )
15
+ size: int = Field(description='The total number of assets')
@@ -0,0 +1,32 @@
1
+ from typing import Optional
2
+
3
+ from pydantic import Field
4
+
5
+ from ark_sdk_python.models.ark_model import ArkModel
6
+
7
+
8
+ class ArkAccessAssetsListAssets(ArkModel):
9
+ recents_only: bool = Field(description='Should return only recently-used assets', default=False)
10
+ favorites_only: bool = Field(description='Should return only favorite assets', default=False)
11
+ access_method: Optional[str] = Field(
12
+ description='Filter infrastructure assets by access method', default=None, examples=['vaulted', 'zsp']
13
+ )
14
+ limit: Optional[int] = Field(
15
+ ge=1,
16
+ le=1000,
17
+ default=None,
18
+ description='This parameter sets the maximum number of the infrastructure items to be retrieved. '
19
+ 'The default value is 1000, the minimum limit is 1, and the maximum limit is 1000',
20
+ )
21
+ sort: Optional[str] = Field(
22
+ description='This parameter sets the sorting order of the retrieved items.'
23
+ ' The sorting order can be set to ascending or descending. '
24
+ 'The default value is ascending',
25
+ default=None,
26
+ examples=['address.asc', 'platformId.desc', 'lastAccessed.desc'],
27
+ )
28
+ search: Optional[str] = Field(
29
+ description='This parameter is used to search for the assets based on specific criteria',
30
+ default=None,
31
+ examples=['address contains "1.2.3.4"'],
32
+ )
@@ -0,0 +1,15 @@
1
+ from typing import Optional
2
+
3
+ from pydantic import Field
4
+ from ark_sdk_python.models.ark_model import ArkCamelizedModel, ArkModel
5
+
6
+
7
+ class ArkAccessAssetsSecretRequest(ArkModel):
8
+ asset_id: str = Field(description='Asset identifier', min_length=1)
9
+ reason: Optional[str] = Field(description='Reason for retrieving the secret', default=None)
10
+
11
+
12
+ class ArkAccessAssetsSecretResponse(ArkCamelizedModel):
13
+ asset_id: str = Field(description='Asset identifier', min_length=1)
14
+ secret: str = Field(description='Secret value')
15
+ security_message: Optional[str] = Field(default=None, description='Security guidelines for users handling sensitive information')
File without changes
@@ -0,0 +1,9 @@
1
+ from ark_sdk_python.models.services.ars.common.ark_ars_filter import ArkARSFilter
2
+ from ark_sdk_python.models.services.ars.common.ark_ars_query import ArkARSPaginationQuery, ArkARSSortDirection, ArkARSSortQuery
3
+
4
+ __all__ = [
5
+ 'ArkARSPaginationQuery',
6
+ 'ArkARSSortDirection',
7
+ 'ArkARSSortQuery',
8
+ 'ArkARSFilter',
9
+ ]
@@ -0,0 +1,14 @@
1
+ from typing import Optional
2
+
3
+ from pydantic import Field
4
+
5
+ from ark_sdk_python.models import ArkCamelizedModel
6
+ from ark_sdk_python.models.services.ars.common.ark_ars_query import ArkARSPaginationQuery
7
+
8
+
9
+ class ArkARSFilter(ArkCamelizedModel):
10
+ pagination: ArkARSPaginationQuery = Field(
11
+ default_factory=ArkARSPaginationQuery, description='Pagination details on the response after the filter'
12
+ )
13
+ filter: Optional[str] = Field(default=None, description='Filter string to perform on the response items')
14
+ extended: bool = Field(description='Whether to return an extended response or not', default=False)
@@ -0,0 +1,22 @@
1
+ from enum import Enum
2
+ from typing import List, Optional, Union
3
+
4
+ from pydantic import Field
5
+
6
+ from ark_sdk_python.models import ArkCamelizedModel
7
+
8
+
9
+ class ArkARSSortDirection(str, Enum):
10
+ ASC = 'asc'
11
+ DESC = 'desc'
12
+
13
+
14
+ class ArkARSSortQuery(ArkCamelizedModel):
15
+ direction: Optional[ArkARSSortDirection] = Field(default=None, description='Direction in which to sort the response')
16
+ field: Optional[str] = Field(default=None, description='Which field to sort the response on')
17
+
18
+
19
+ class ArkARSPaginationQuery(ArkCamelizedModel):
20
+ offset: Optional[int] = Field(default=None, description='Offset of the items for the response')
21
+ limit: int = Field(default=1000, description='Limit amount of items for the response')
22
+ sort: Optional[Union[ArkARSSortQuery, List[ArkARSSortQuery]]] = Field(default=None, description='How to sort the response')
@@ -0,0 +1,31 @@
1
+ from ark_sdk_python.models.services.ars.requests.ark_ars_access_request import (
2
+ ArkARSAccessRequest,
3
+ ArkARSAccessRequestResult,
4
+ ArkARSAccessRequestState,
5
+ )
6
+ from ark_sdk_python.models.services.ars.requests.ark_ars_access_request_async_task import ArkARSAccessRequestAsyncTask
7
+ from ark_sdk_python.models.services.ars.requests.ark_ars_access_request_form import ArkARSAccessRequestForm, ArkARSAccessRequestForms
8
+ from ark_sdk_python.models.services.ars.requests.ark_ars_access_request_info import ArkARSAccessRequestInfo, ArkARSAccessRequestsInfo
9
+ from ark_sdk_python.models.services.ars.requests.ark_ars_access_requests_stats import ArkARSAccessRequestsStats
10
+ from ark_sdk_python.models.services.ars.requests.ark_ars_cancel_access_request import ArkARSCancelAccessRequest
11
+ from ark_sdk_python.models.services.ars.requests.ark_ars_finalize_access_request import ArkARSFinalizeAccessRequest
12
+ from ark_sdk_python.models.services.ars.requests.ark_ars_get_access_request import ArkARSGetAccessRequest
13
+ from ark_sdk_python.models.services.ars.requests.ark_ars_list_access_request_forms import ArkARSListAccessRequestForms
14
+ from ark_sdk_python.models.services.ars.requests.ark_ars_submit_access_request import ArkARSSubmitAccessRequest
15
+
16
+ __all__ = [
17
+ 'ArkARSCancelAccessRequest',
18
+ 'ArkARSFinalizeAccessRequest',
19
+ 'ArkARSGetAccessRequest',
20
+ 'ArkARSSubmitAccessRequest',
21
+ 'ArkARSAccessRequestInfo',
22
+ 'ArkARSAccessRequestsInfo',
23
+ 'ArkARSAccessRequestState',
24
+ 'ArkARSAccessRequestResult',
25
+ 'ArkARSAccessRequest',
26
+ 'ArkARSAccessRequestsStats',
27
+ 'ArkARSAccessRequestAsyncTask',
28
+ 'ArkARSAccessRequestForm',
29
+ 'ArkARSAccessRequestForms',
30
+ 'ArkARSListAccessRequestForms',
31
+ ]
@@ -0,0 +1,82 @@
1
+ from datetime import datetime
2
+ from enum import Enum
3
+ from typing import Any, Dict, List, Optional
4
+
5
+ from humps.main import decamelize
6
+ from pydantic import Field, field_validator, model_validator
7
+
8
+ from ark_sdk_python.models import ArkCamelizedModel
9
+ from ark_sdk_python.models.services.ars.requests.ark_target_category import ArkTargetCategory
10
+
11
+
12
+ class ArkARSAccessRequestState(str, Enum):
13
+ STARTING = 'STARTING'
14
+ RUNNING = 'RUNNING'
15
+ PENDING = 'PENDING'
16
+ FULFILLING = 'FULFILLING'
17
+ REVERTING_FULFILLMENT = 'REVERTING_FULFILLMENT'
18
+ FINISHED = 'FINISHED'
19
+ EXPIRED = 'EXPIRED'
20
+
21
+
22
+ class ArkARSAccessRequestResult(str, Enum):
23
+ FULFILLED = 'FULFILLED'
24
+ APPROVED = 'APPROVED'
25
+ REJECTED = 'REJECTED'
26
+ CANCELED = 'CANCELED'
27
+ FAILED = 'FAILED'
28
+ UNKNOWN = 'UNKNOWN'
29
+
30
+
31
+ class ArkARSAccessRequest(ArkCamelizedModel):
32
+ request_id: str = Field(description='ID of the request')
33
+ target_category: ArkTargetCategory = Field(description='Target category the request is related to')
34
+ request_link: Optional[str] = Field(description='Link to the request itself', default=None)
35
+ request_state: ArkARSAccessRequestState = Field(description='Current request state')
36
+ request_result: ArkARSAccessRequestResult = Field(description='Result of the request', default=ArkARSAccessRequestResult.UNKNOWN)
37
+ request_survey_input: Optional[Dict[str, Any]] = Field(
38
+ description='Survey input given to this request. Deprecated: use request_details instead.', default=None, deprecated=True
39
+ )
40
+ request_details: Optional[Dict[str, Any]] = Field(description='Details given to this request', default=None)
41
+ request_approvers: List[Dict[str, Any]] = Field(
42
+ description='Related entities who approved or rejected the request', default_factory=list
43
+ )
44
+ request_outcomes: Optional[Dict[str, Any]] = Field(description='Outcomes of this request', default_factory=dict)
45
+ request_steps: Dict[str, Any] = Field(description='Status in regards to the steps in the access request', default_factory=dict)
46
+ last_executed_step: Optional[str] = Field(description='Last step that was actually executed', default=None)
47
+ associations: Dict[str, List[Dict[str, Any]]] = Field(description='Entity associations to the request', default_factory=dict)
48
+ finalization_reason: Optional[str] = Field(description='Reason for canceling or rejecting or approving the request', default=None)
49
+ requester: Optional[Dict[str, Any]] = Field(description='The requester of the request', default=None)
50
+ created_by: str = Field(description='Who created the request')
51
+ created_at: datetime = Field(description='Creation time of the request')
52
+ updated_by: str = Field(description='Who last updated the request')
53
+ updated_at: datetime = Field(description='When was the request last updated')
54
+
55
+ @staticmethod
56
+ def _validate_dict_snake_case(v):
57
+ if v is None:
58
+ return v
59
+ if not isinstance(v, dict):
60
+ raise ValueError('Value must be a dictionary')
61
+ snake_case_dict = {}
62
+ for key, value in v.items():
63
+ if not isinstance(key, str):
64
+ raise ValueError('All keys must be strings')
65
+ snake_case_key = decamelize(key)
66
+ snake_case_dict[snake_case_key] = value
67
+ return snake_case_dict
68
+
69
+ # pylint: disable=no-self-use,no-self-argument
70
+ @field_validator('request_survey_input', mode='before')
71
+ def validate_request_survey_input(cls, v):
72
+ return cls._validate_dict_snake_case(v)
73
+
74
+ @field_validator('request_details', mode='before')
75
+ def validate_request_details(cls, v):
76
+ return cls._validate_dict_snake_case(v)
77
+
78
+ @model_validator(mode='after')
79
+ def sync_request_fields(self):
80
+ if self.request_details is None and self.request_survey_input is not None:
81
+ self.request_details = self.request_survey_input
82
+ return self
@@ -0,0 +1,44 @@
1
+ from typing import List
2
+
3
+ from overrides import overrides
4
+ from pydantic import Field
5
+ from typing_extensions import Literal
6
+
7
+ from ark_sdk_python.models.common import ArkStatus
8
+ from ark_sdk_python.models.common.ark_async_task import ArkAsyncTask
9
+ from ark_sdk_python.models.services.ars.requests.ark_ars_access_request import (
10
+ ArkARSAccessRequest,
11
+ ArkARSAccessRequestResult,
12
+ ArkARSAccessRequestState,
13
+ )
14
+
15
+
16
+ class ArkARSAccessRequestAsyncTask(ArkAsyncTask):
17
+ request: ArkARSAccessRequest = Field(description='Request itself')
18
+ action: Literal['StartRequest', 'UpdateRequest', 'FinalizeRequest', 'CancelRequest'] = Field(description='Action performed')
19
+ target_statuses: List[ArkStatus] = Field(description='Target status')
20
+
21
+ # pylint: disable=no-member
22
+ @overrides
23
+ def task_status(self) -> ArkStatus:
24
+ if self.request.request_state == ArkARSAccessRequestState.FINISHED:
25
+ if self.request.request_result in (
26
+ ArkARSAccessRequestResult.APPROVED,
27
+ ArkARSAccessRequestResult.FULFILLED,
28
+ ArkARSAccessRequestResult.REJECTED,
29
+ ArkARSAccessRequestResult.CANCELED,
30
+ ):
31
+ return ArkStatus.Success
32
+ return ArkStatus.Failed
33
+ if self.request.request_state == ArkARSAccessRequestState.EXPIRED:
34
+ return ArkStatus.Failed
35
+ if self.request.request_state == ArkARSAccessRequestState.PENDING:
36
+ return ArkStatus.Pending
37
+ if self.request.request_state in (
38
+ ArkARSAccessRequestState.RUNNING,
39
+ ArkARSAccessRequestState.FULFILLING,
40
+ ArkARSAccessRequestState.REVERTING_FULFILLMENT,
41
+ ArkARSAccessRequestState.STARTING,
42
+ ):
43
+ return ArkStatus.InProgress
44
+ return ArkStatus.Failed
@@ -0,0 +1,67 @@
1
+ from enum import Enum
2
+ from typing import Any, List, Optional, Union
3
+
4
+ from pydantic import Field
5
+
6
+ from ark_sdk_python.models import ArkCamelizedModel
7
+ from ark_sdk_python.models.services.ars.requests.ark_ars_request_type import ArkARSRequestType
8
+ from ark_sdk_python.models.services.ars.requests.ark_target_category import ArkTargetCategory
9
+
10
+
11
+ class ArkARSQueryValueType(str, Enum):
12
+ string = 'STRING'
13
+ text = 'TEXT'
14
+ choice = 'CHOICE'
15
+ datetime = 'DATETIME'
16
+ date = 'DATE'
17
+ time = 'TIME'
18
+ timezone = 'TIMEZONE'
19
+ integer = 'INTEGER'
20
+ bool = 'BOOL'
21
+ list = 'LIST'
22
+ any = 'ANY'
23
+
24
+
25
+ class ArkARSQueryBinaryOperator(str, Enum):
26
+ and_ = 'AND'
27
+ or_ = 'OR'
28
+
29
+
30
+ class ArkARSRegexCondition(ArkCamelizedModel):
31
+ name: str = Field(default='regex_condition', description='Name of the condition')
32
+ key: str = Field(description='Key name (id) of the question')
33
+ condition: str = Field(description='Regex pattern to match the value of the answer')
34
+
35
+
36
+ class ArkARSConditionalField(ArkCamelizedModel):
37
+ operator: ArkARSQueryBinaryOperator = Field(default=ArkARSQueryBinaryOperator.and_, description='Operator to use for the conditions')
38
+ conditions: List[ArkARSRegexCondition] = Field(description='List of conditions to check')
39
+
40
+
41
+ class ArkARSValueValidator(ArkCamelizedModel):
42
+ name: str = Field(description='Name of the validator')
43
+
44
+
45
+ class ArkARSSurveyQuestion(ArkCamelizedModel):
46
+ key: str = Field(description='Key name / id of the question')
47
+ required: Union[bool, ArkARSConditionalField] = Field(description='Whether this is a required question or not')
48
+ default: Optional[Any] = Field(default=None, description='Default value for the question')
49
+ title: Optional[str] = Field(default=None, description='Title of the question')
50
+ description: Optional[str] = Field(default=None, description='Description of the question')
51
+ value_type: Optional[ArkARSQueryValueType] = Field(default=None, description='Type of the response value')
52
+ value_choices: Optional[List[Any]] = Field(default=None, description='If the value is a choice, what are the possible choices')
53
+ validators: Optional[List[ArkARSValueValidator]] = Field(default=None, description='Validators for the question')
54
+
55
+
56
+ class ArkARSSurvey(ArkCamelizedModel):
57
+ questions: List[ArkARSSurveyQuestion] = Field(description='Questions required answering on the survey')
58
+
59
+
60
+ class ArkARSAccessRequestForm(ArkCamelizedModel):
61
+ target_category: ArkTargetCategory = Field(description='Target category the request form is related to')
62
+ request_type: ArkARSRequestType = Field(description='Request type the request form is related to')
63
+ request_form: ArkARSSurvey = Field(description='Structure of the request form, as the questions to answer when submitting a request')
64
+
65
+
66
+ class ArkARSAccessRequestForms(ArkCamelizedModel):
67
+ request_forms: List[ArkARSAccessRequestForm] = Field(description='Request forms matching the given filters', default_factory=list)
@@ -0,0 +1,23 @@
1
+ from datetime import datetime
2
+ from typing import List, Optional, Union
3
+
4
+ from pydantic import Field
5
+
6
+ from ark_sdk_python.models import ArkCamelizedModel
7
+ from ark_sdk_python.models.services.ars.requests.ark_ars_access_request import ArkARSAccessRequest, ArkARSAccessRequestState
8
+ from ark_sdk_python.models.services.ars.requests.ark_target_category import ArkTargetCategory
9
+
10
+
11
+ class ArkARSAccessRequestInfo(ArkCamelizedModel):
12
+ request_id: str = Field(description='ID of the request')
13
+ target_category: ArkTargetCategory = Field(description='Target category the request is related to')
14
+ request_link: Optional[str] = Field(description='Link to the request itself', default=None)
15
+ request_state: ArkARSAccessRequestState = Field(description='Current request state')
16
+ creation_time: datetime = Field(description='Creation time of the request')
17
+ last_update_time: datetime = Field(description='When was the request last updated')
18
+
19
+
20
+ class ArkARSAccessRequestsInfo(ArkCamelizedModel):
21
+ items: List[Union[ArkARSAccessRequestInfo, ArkARSAccessRequest]] = Field(description='Amount of items')
22
+ count: int = Field(description='Count of items returned post filter / pagination')
23
+ total_count: int = Field(description='Overall items that exists')
@@ -0,0 +1,17 @@
1
+ from typing import Dict
2
+
3
+ from pydantic import Field
4
+
5
+ from ark_sdk_python.models import ArkCamelizedModel
6
+ from ark_sdk_python.models.services.ars.requests.ark_ars_access_request import (
7
+ ArkARSAccessRequestResult,
8
+ ArkARSAccessRequestState,
9
+ ArkTargetCategory,
10
+ )
11
+
12
+
13
+ class ArkARSAccessRequestsStats(ArkCamelizedModel):
14
+ requests_count: int = Field(description='Overall access requests count')
15
+ requests_count_by_category: Dict[ArkTargetCategory, int] = Field(description='Access requests count by category')
16
+ requests_count_by_state: Dict[ArkARSAccessRequestState, int] = Field(description='Access requests count by state')
17
+ requests_count_by_result: Dict[ArkARSAccessRequestResult, int] = Field(description='Access requests count by result')
@@ -0,0 +1,8 @@
1
+ from pydantic import Field
2
+
3
+ from ark_sdk_python.models import ArkPollableModel
4
+
5
+
6
+ class ArkARSCancelAccessRequest(ArkPollableModel):
7
+ request_id: str = Field(description='The access request id to cancel')
8
+ cancel_reason: str = Field(description='What is the reason for the cancel')
@@ -0,0 +1,20 @@
1
+ from typing import Any, Dict, Optional
2
+
3
+ from pydantic import Field
4
+
5
+ from ark_sdk_python.models import ArkPollableModel
6
+ from ark_sdk_python.models.services.ars.requests.ark_ars_access_request import ArkARSAccessRequestResult
7
+
8
+
9
+ class ArkARSFinalizeAccessRequest(ArkPollableModel):
10
+ request_id: str = Field(description='Which request to finalize')
11
+ result: ArkARSAccessRequestResult = Field(description='The finalized result')
12
+ request_details: Optional[Dict[str, Any]] = Field(
13
+ default=None,
14
+ description='Optionally, the request details related to the request that needs to be updated',
15
+ )
16
+ finalization_reason: Optional[str] = Field(default=None, description='If rejected, what is the reason for the rejection')
17
+ wait_until_finished: bool = Field(
18
+ description='If polling is enabled, whether to wait for the entire ' 'request to finish, or only until it reaches pending state',
19
+ default=False,
20
+ )
@@ -0,0 +1,7 @@
1
+ from pydantic import Field
2
+
3
+ from ark_sdk_python.models import ArkCamelizedModel
4
+
5
+
6
+ class ArkARSGetAccessRequest(ArkCamelizedModel):
7
+ request_id: str = Field(description='The access request id to get')
@@ -0,0 +1,12 @@
1
+ from pydantic import Field
2
+
3
+ from ark_sdk_python.models import ArkCamelizedModel
4
+ from ark_sdk_python.models.services.ars.requests.ark_ars_request_type import ArkARSRequestType
5
+ from ark_sdk_python.models.services.ars.requests.ark_target_category import ArkTargetCategory
6
+
7
+
8
+ class ArkARSListAccessRequestForms(ArkCamelizedModel):
9
+ target_category: ArkTargetCategory = Field(description='Target category to list the access request forms for')
10
+ request_type: ArkARSRequestType = Field(
11
+ description='Request type to list the access request forms for', default=ArkARSRequestType.ON_DEMAND
12
+ )
@@ -0,0 +1,6 @@
1
+ from enum import StrEnum
2
+
3
+
4
+ class ArkARSRequestType(StrEnum):
5
+ DUAL_CONTROL = 'DUAL_CONTROL'
6
+ ON_DEMAND = 'ON_DEMAND'
@@ -0,0 +1,18 @@
1
+ from typing import Any, Dict, Optional
2
+
3
+ from pydantic import Field
4
+
5
+ from ark_sdk_python.models import ArkPollableModel
6
+ from ark_sdk_python.models.services.ars.requests.ark_ars_request_type import ArkARSRequestType
7
+ from ark_sdk_python.models.services.ars.requests.ark_target_category import ArkTargetCategory
8
+
9
+
10
+ class ArkARSSubmitAccessRequest(ArkPollableModel):
11
+ target_category: ArkTargetCategory = Field(description='What is the category that is required to execute')
12
+ request_type: ArkARSRequestType = Field(description='The type of request to start', default=ArkARSRequestType.ON_DEMAND)
13
+ request_details: Dict[str, Any] = Field(description='The details related to the workload', default=None)
14
+ association: Optional[Dict[str, Any]] = Field(description='Optionally an associated policy', default=None)
15
+ wait_until_finished: bool = Field(
16
+ description='If polling is enabled, whether to wait for the entire request to finish, or only until it reaches pending state',
17
+ default=False,
18
+ )
@@ -0,0 +1,32 @@
1
+ from enum import Enum
2
+ from typing import Annotated, Any, Final, FrozenSet
3
+
4
+ from packaging.version import Version
5
+ from pydantic import PlainSerializer, PlainValidator
6
+ from pydantic.version import VERSION
7
+
8
+ from ark_sdk_python.models.common import ArkCategoryType
9
+
10
+ ARS_SUPPORTED_CATEGORIES: Final[FrozenSet[ArkCategoryType]] = frozenset({ArkCategoryType.CLOUD_CONSOLE, ArkCategoryType.VM})
11
+
12
+
13
+ def _validate_target_category(value: Any) -> ArkCategoryType:
14
+ category = ArkCategoryType.__members__.get(str(value).replace(' ', '_').upper())
15
+ if category not in ARS_SUPPORTED_CATEGORIES:
16
+ raise ValueError(f'Unsupported target category [{value}], supported categories are {[c.name for c in ARS_SUPPORTED_CATEGORIES]}')
17
+ return category
18
+
19
+
20
+ # Versions under 2.9 do not support json_schema_input_type
21
+ if Version(VERSION) < Version("2.9"):
22
+
23
+ class ArkTargetCategory(str, Enum):
24
+ CLOUD_CONSOLE = 'CLOUD_CONSOLE'
25
+ VM = 'VM'
26
+
27
+ else:
28
+ ArkTargetCategory = Annotated[
29
+ ArkCategoryType,
30
+ PlainValidator(_validate_target_category, json_schema_input_type=str),
31
+ PlainSerializer(lambda v: v.name),
32
+ ]