devopness 2.7.2__tar.gz → 2.8.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) hide show
  1. {devopness-2.7.2 → devopness-2.8.1}/PKG-INFO +2 -2
  2. {devopness-2.7.2 → devopness-2.8.1}/pyproject.toml +5 -4
  3. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/base/__init__.py +6 -1
  4. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/base/base_service.py +56 -56
  5. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/client.py +101 -84
  6. devopness-2.8.1/src/devopness/client_state.py +27 -0
  7. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/core/api_error.py +7 -4
  8. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/core/response.py +33 -13
  9. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/users_api.py +2 -2
  10. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/team_service.py +15 -8
  11. {devopness-2.7.2 → devopness-2.8.1}/README.md +0 -0
  12. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/__init__.py +0 -0
  13. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/base/base_model.py +0 -0
  14. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/client_config.py +0 -0
  15. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/core/__init__.py +0 -0
  16. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/core/network_error.py +0 -0
  17. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/core/sdk_error.py +0 -0
  18. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/__init__.py +0 -0
  19. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/__init__.py +0 -0
  20. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/actions_api.py +0 -0
  21. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/actions_logs_api.py +0 -0
  22. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/applications_api.py +0 -0
  23. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/applications_hooks_api.py +0 -0
  24. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/applications_variables_api.py +0 -0
  25. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/credentials_api.py +0 -0
  26. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/credentials_repositories_api.py +0 -0
  27. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/cron_jobs_api.py +0 -0
  28. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/daemons_api.py +0 -0
  29. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/environments_actions_api.py +0 -0
  30. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/environments_api.py +0 -0
  31. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/hook_requests_api.py +0 -0
  32. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/hooks_api.py +0 -0
  33. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/hooks_requests_api.py +0 -0
  34. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/network_rules_api.py +0 -0
  35. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/networks_api.py +0 -0
  36. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/networks_subnets_api.py +0 -0
  37. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/organizations_api.py +0 -0
  38. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/pipelines_actions_api.py +0 -0
  39. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/pipelines_api.py +0 -0
  40. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/pipelines_hooks_api.py +0 -0
  41. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/pipelines_steps_api.py +0 -0
  42. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/projects_actions_api.py +0 -0
  43. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/projects_api.py +0 -0
  44. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/projects_api_tokens_api.py +0 -0
  45. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/projects_archived_environments_api.py +0 -0
  46. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/projects_environments_api.py +0 -0
  47. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/resource_events_api.py +0 -0
  48. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/resource_links_api.py +0 -0
  49. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/roles_api.py +0 -0
  50. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/servers_api.py +0 -0
  51. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/services_api.py +0 -0
  52. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/services_variables_api.py +0 -0
  53. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/social_accounts_api.py +0 -0
  54. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/ssh_keys_api.py +0 -0
  55. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/ssl_certificates_api.py +0 -0
  56. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/static_data_api.py +0 -0
  57. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/subnets_api.py +0 -0
  58. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/team_invitations_api.py +0 -0
  59. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/teams_api.py +0 -0
  60. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/teams_invitations_api.py +0 -0
  61. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/teams_members_api.py +0 -0
  62. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/users_environments_api.py +0 -0
  63. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/users_passwords_api.py +0 -0
  64. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/users_personal_access_tokens_api.py +0 -0
  65. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/users_projects_api.py +0 -0
  66. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/users_team_invitations_api.py +0 -0
  67. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/variables_api.py +0 -0
  68. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/api/virtual_hosts_api.py +0 -0
  69. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/__init__.py +0 -0
  70. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action.py +0 -0
  71. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_data.py +0 -0
  72. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_deployment_commit.py +0 -0
  73. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_deployment_content.py +0 -0
  74. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_deployment_data.py +0 -0
  75. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_hook_request.py +0 -0
  76. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_pipeline_create.py +0 -0
  77. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_relation.py +0 -0
  78. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_relation_shallow.py +0 -0
  79. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_resource.py +0 -0
  80. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_resource_data.py +0 -0
  81. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_retry_response.py +0 -0
  82. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_status.py +0 -0
  83. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_status_reason_code.py +0 -0
  84. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_step.py +0 -0
  85. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_summary.py +0 -0
  86. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_summary_target.py +0 -0
  87. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_target.py +0 -0
  88. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_target_credential_data.py +0 -0
  89. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_target_data.py +0 -0
  90. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_target_log_step.py +0 -0
  91. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_target_network_data.py +0 -0
  92. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_target_server_data.py +0 -0
  93. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_trigger_type.py +0 -0
  94. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_triggered_from.py +0 -0
  95. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/action_type.py +0 -0
  96. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/api_error.py +0 -0
  97. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/api_error_errors.py +0 -0
  98. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/api_error_errors_field_name_inner.py +0 -0
  99. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/api_token.py +0 -0
  100. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/api_token_project_create.py +0 -0
  101. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/api_token_project_rotate.py +0 -0
  102. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/api_token_relation.py +0 -0
  103. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/api_token_rotate_response.py +0 -0
  104. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/api_token_status.py +0 -0
  105. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/api_token_type.py +0 -0
  106. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/api_token_type_prefix.py +0 -0
  107. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/application.py +0 -0
  108. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/application_apply_template_response.py +0 -0
  109. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/application_environment_apply_template.py +0 -0
  110. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/application_environment_create.py +0 -0
  111. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/application_last_deployments.py +0 -0
  112. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/application_options.py +0 -0
  113. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/application_pipeline.py +0 -0
  114. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/application_relation.py +0 -0
  115. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/application_update.py +0 -0
  116. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/archived_environment_relation.py +0 -0
  117. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/billing_plan.py +0 -0
  118. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/billing_plans_options_relation.py +0 -0
  119. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/blueprint_service.py +0 -0
  120. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_instance_relation.py +0 -0
  121. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_os_version_code.py +0 -0
  122. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_provider.py +0 -0
  123. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_provider_code.py +0 -0
  124. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_provider_input_settings.py +0 -0
  125. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_provider_input_settings_default_value.py +0 -0
  126. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_provider_property_type.py +0 -0
  127. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_provider_property_validation.py +0 -0
  128. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_provider_relation.py +0 -0
  129. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_provider_service.py +0 -0
  130. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_provider_service_code.py +0 -0
  131. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_provider_service_region.py +0 -0
  132. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_provider_service_resource_type.py +0 -0
  133. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_provider_service_resource_type_scope.py +0 -0
  134. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_provider_settings.py +0 -0
  135. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_provider_settings_list.py +0 -0
  136. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_resource_instance_spec.py +0 -0
  137. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_resource_type.py +0 -0
  138. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_service_settings_aws_ec2.py +0 -0
  139. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_service_settings_azure_rm.py +0 -0
  140. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_service_settings_digital_ocean_droplet.py +0 -0
  141. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_service_settings_gcp_gce.py +0 -0
  142. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_service_settings_hetzner_hcloud.py +0 -0
  143. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cloud_service_settings_self_hosted_custom.py +0 -0
  144. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/commit.py +0 -0
  145. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/credential.py +0 -0
  146. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/credential_aws.py +0 -0
  147. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/credential_azure.py +0 -0
  148. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/credential_digital_ocean.py +0 -0
  149. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/credential_google_cloud.py +0 -0
  150. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/credential_hetzner.py +0 -0
  151. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/credential_input_settings.py +0 -0
  152. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/credential_input_settings_credential.py +0 -0
  153. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/credential_options.py +0 -0
  154. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/credential_organization_create.py +0 -0
  155. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/credential_provider.py +0 -0
  156. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/credential_provider_type.py +0 -0
  157. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/credential_relation.py +0 -0
  158. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/credential_setting.py +0 -0
  159. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/credential_source_provider.py +0 -0
  160. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/credential_update.py +0 -0
  161. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/credits.py +0 -0
  162. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cron_job.py +0 -0
  163. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cron_job_deploy.py +0 -0
  164. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cron_job_environment_create.py +0 -0
  165. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cron_job_options.py +0 -0
  166. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cron_job_pattern.py +0 -0
  167. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cron_job_relation.py +0 -0
  168. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/cron_job_update.py +0 -0
  169. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/daemon.py +0 -0
  170. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/daemon_deploy.py +0 -0
  171. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/daemon_environment_create.py +0 -0
  172. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/daemon_get_status.py +0 -0
  173. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/daemon_relation.py +0 -0
  174. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/daemon_restart.py +0 -0
  175. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/daemon_start.py +0 -0
  176. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/daemon_stop.py +0 -0
  177. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/daemon_update.py +0 -0
  178. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/deployment_application_create.py +0 -0
  179. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/deployment_default_step.py +0 -0
  180. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/deployment_type.py +0 -0
  181. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/environment.py +0 -0
  182. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/environment_link.py +0 -0
  183. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/environment_options.py +0 -0
  184. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/environment_project_create.py +0 -0
  185. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/environment_relation.py +0 -0
  186. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/environment_type.py +0 -0
  187. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/environment_update.py +0 -0
  188. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/hook.py +0 -0
  189. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/hook_incoming_settings.py +0 -0
  190. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/hook_outgoing_request_header.py +0 -0
  191. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/hook_outgoing_settings.py +0 -0
  192. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/hook_outgoing_settings_request_body.py +0 -0
  193. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/hook_outgoing_trigger_when_condition.py +0 -0
  194. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/hook_pipeline_create.py +0 -0
  195. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/hook_pipeline_create_settings.py +0 -0
  196. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/hook_relation.py +0 -0
  197. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/hook_request.py +0 -0
  198. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/hook_request_relation.py +0 -0
  199. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/hook_settings.py +0 -0
  200. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/hook_trigger_response.py +0 -0
  201. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/hook_trigger_when.py +0 -0
  202. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/hook_trigger_when_conditions_inner.py +0 -0
  203. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/hook_type.py +0 -0
  204. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/hook_type_param.py +0 -0
  205. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/hook_update.py +0 -0
  206. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/hook_variable.py +0 -0
  207. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/hook_variable_default_value.py +0 -0
  208. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/hook_variable_default_value_one_of_inner.py +0 -0
  209. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/hook_variable_type.py +0 -0
  210. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/invitation.py +0 -0
  211. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/invitation_relation.py +0 -0
  212. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/invitation_team_create.py +0 -0
  213. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/language.py +0 -0
  214. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/language_runtime.py +0 -0
  215. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/language_runtime_engine_versions_inner.py +0 -0
  216. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/language_runtime_framework.py +0 -0
  217. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/language_runtime_framework_commands.py +0 -0
  218. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/language_runtime_framework_defaults.py +0 -0
  219. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/linked_resource_data.py +0 -0
  220. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/linked_resource_summary_field.py +0 -0
  221. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/list_actions_filter_parameter.py +0 -0
  222. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/list_environment_actions_by_resource_type_filter_parameter.py +0 -0
  223. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/list_environment_actions_filter_parameter.py +0 -0
  224. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/log.py +0 -0
  225. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/member.py +0 -0
  226. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/member_relation.py +0 -0
  227. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/membership_relation.py +0 -0
  228. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/network.py +0 -0
  229. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/network_environment_create.py +0 -0
  230. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/network_provision_input.py +0 -0
  231. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/network_provision_input_settings.py +0 -0
  232. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/network_provision_input_settings_aws.py +0 -0
  233. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/network_provision_input_settings_azure.py +0 -0
  234. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/network_provision_input_settings_digital_ocean.py +0 -0
  235. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/network_provision_input_settings_gcp.py +0 -0
  236. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/network_relation.py +0 -0
  237. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/network_rule.py +0 -0
  238. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/network_rule_deploy.py +0 -0
  239. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/network_rule_direction.py +0 -0
  240. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/network_rule_environment_create.py +0 -0
  241. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/network_rule_options.py +0 -0
  242. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/network_rule_protocol.py +0 -0
  243. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/network_rule_relation.py +0 -0
  244. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/network_rule_update.py +0 -0
  245. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/network_update.py +0 -0
  246. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/operating_system.py +0 -0
  247. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/operating_system_version.py +0 -0
  248. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/operation_custom_settings.py +0 -0
  249. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/organization.py +0 -0
  250. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/organization_create.py +0 -0
  251. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/organization_relation.py +0 -0
  252. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/organization_update.py +0 -0
  253. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/os_users_inner.py +0 -0
  254. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/password_reset_response.py +0 -0
  255. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/password_user_reset.py +0 -0
  256. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/permission_relation.py +0 -0
  257. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/personal_access_token.py +0 -0
  258. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/personal_access_token_relation.py +0 -0
  259. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/personal_access_token_rotate_response.py +0 -0
  260. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/personal_access_token_user_create.py +0 -0
  261. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/personal_access_token_user_rotate.py +0 -0
  262. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/pipeline.py +0 -0
  263. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/pipeline_create.py +0 -0
  264. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/pipeline_relation.py +0 -0
  265. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/pipeline_settings.py +0 -0
  266. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/pipeline_settings_stage.py +0 -0
  267. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/pipeline_settings_variable.py +0 -0
  268. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/pipeline_step_runner_name.py +0 -0
  269. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/pipeline_trigger_when.py +0 -0
  270. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/pipeline_update.py +0 -0
  271. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/project.py +0 -0
  272. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/project_organization_create.py +0 -0
  273. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/project_relation.py +0 -0
  274. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/project_update.py +0 -0
  275. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/provider_auth_type.py +0 -0
  276. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/provider_callback_config.py +0 -0
  277. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/provider_code.py +0 -0
  278. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/provider_input_settings.py +0 -0
  279. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/provider_input_settings_validation.py +0 -0
  280. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/provider_relation.py +0 -0
  281. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/provider_settings.py +0 -0
  282. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/provider_type.py +0 -0
  283. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/provider_type_list_inner.py +0 -0
  284. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/related_action.py +0 -0
  285. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/repository.py +0 -0
  286. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/repository_branch.py +0 -0
  287. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/repository_relation.py +0 -0
  288. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/repository_tag.py +0 -0
  289. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/repository_tag_commit.py +0 -0
  290. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/request_relation.py +0 -0
  291. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/resource_event.py +0 -0
  292. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/resource_event_relation.py +0 -0
  293. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/resource_link_child.py +0 -0
  294. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/resource_link_relation.py +0 -0
  295. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/resource_operation.py +0 -0
  296. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/resource_summary_item.py +0 -0
  297. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/resource_summary_item_summary.py +0 -0
  298. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/resource_to_be_linked.py +0 -0
  299. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/resource_type.py +0 -0
  300. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/resource_type_related.py +0 -0
  301. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/resource_type_relation.py +0 -0
  302. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/role.py +0 -0
  303. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/role_organization_create.py +0 -0
  304. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/role_relation.py +0 -0
  305. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/role_update.py +0 -0
  306. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/script_runner.py +0 -0
  307. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/server.py +0 -0
  308. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/server_blueprint.py +0 -0
  309. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/server_blueprint_spec.py +0 -0
  310. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/server_cloud_service_code.py +0 -0
  311. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/server_command.py +0 -0
  312. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/server_environment_create.py +0 -0
  313. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/server_options.py +0 -0
  314. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/server_provision_input.py +0 -0
  315. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/server_provision_input_settings.py +0 -0
  316. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/server_relation.py +0 -0
  317. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/server_status.py +0 -0
  318. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/server_update.py +0 -0
  319. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/service.py +0 -0
  320. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/service_deploy.py +0 -0
  321. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/service_environment_create.py +0 -0
  322. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/service_get_status.py +0 -0
  323. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/service_initial_state.py +0 -0
  324. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/service_options.py +0 -0
  325. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/service_relation.py +0 -0
  326. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/service_reload.py +0 -0
  327. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/service_restart.py +0 -0
  328. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/service_start.py +0 -0
  329. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/service_stop.py +0 -0
  330. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/service_type.py +0 -0
  331. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/service_update.py +0 -0
  332. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/social_account.py +0 -0
  333. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/social_account_create.py +0 -0
  334. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/social_account_displayable_name.py +0 -0
  335. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/social_account_provider.py +0 -0
  336. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/social_account_relation.py +0 -0
  337. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/social_account_status.py +0 -0
  338. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/source_provider_auth_method_settings.py +0 -0
  339. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/source_provider_displayable_name.py +0 -0
  340. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/source_provider_name.py +0 -0
  341. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/source_provider_settings.py +0 -0
  342. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/source_type.py +0 -0
  343. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/ssh_key.py +0 -0
  344. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/ssh_key_deploy.py +0 -0
  345. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/ssh_key_environment_create.py +0 -0
  346. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/ssh_key_relation.py +0 -0
  347. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/ssh_key_update.py +0 -0
  348. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/ssl_certificate.py +0 -0
  349. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/ssl_certificate_deploy.py +0 -0
  350. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/ssl_certificate_environment_create.py +0 -0
  351. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/ssl_certificate_issuer.py +0 -0
  352. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/ssl_certificate_relation.py +0 -0
  353. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/ssl_certificate_type.py +0 -0
  354. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/ssl_certificate_validation_level.py +0 -0
  355. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/static_billing_info.py +0 -0
  356. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/static_cloud_provider_code.py +0 -0
  357. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/static_cron_job_frequency.py +0 -0
  358. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/static_environment_type.py +0 -0
  359. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/static_network_rule_direction.py +0 -0
  360. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/static_network_rule_protocol.py +0 -0
  361. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/static_network_rule_protocol_defaults.py +0 -0
  362. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/static_permission.py +0 -0
  363. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/static_service_type.py +0 -0
  364. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/static_service_type_supported_versions_inner.py +0 -0
  365. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/static_virtual_host_type.py +0 -0
  366. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/step.py +0 -0
  367. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/step_pipeline_create.py +0 -0
  368. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/step_pipeline_update.py +0 -0
  369. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/subnet.py +0 -0
  370. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/subnet_network_create.py +0 -0
  371. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/subnet_provision_input.py +0 -0
  372. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/subnet_provision_input_settings.py +0 -0
  373. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/subnet_provision_input_settings_aws.py +0 -0
  374. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/subnet_provision_input_settings_azure.py +0 -0
  375. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/subnet_provision_input_settings_digital_ocean.py +0 -0
  376. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/subnet_provision_input_settings_gcp.py +0 -0
  377. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/subnet_relation.py +0 -0
  378. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/subnet_type.py +0 -0
  379. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/subscription.py +0 -0
  380. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/subscription_balance.py +0 -0
  381. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/subscription_plan.py +0 -0
  382. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/team.py +0 -0
  383. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/team_environment_link.py +0 -0
  384. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/team_invitation_relation.py +0 -0
  385. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/team_invitation_status.py +0 -0
  386. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/team_invitation_type.py +0 -0
  387. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/team_membership_relation.py +0 -0
  388. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/team_organization_create.py +0 -0
  389. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/team_organization_link.py +0 -0
  390. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/team_project_link.py +0 -0
  391. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/team_relation.py +0 -0
  392. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/team_update.py +0 -0
  393. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/template.py +0 -0
  394. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/trigger_event.py +0 -0
  395. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/trigger_when_condition.py +0 -0
  396. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/trigger_when_condition_accepted_values_inner.py +0 -0
  397. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/trigger_when_condition_type.py +0 -0
  398. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/triggered_action_stats.py +0 -0
  399. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/triggered_action_summary.py +0 -0
  400. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/triggered_actions.py +0 -0
  401. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/user.py +0 -0
  402. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/user_activity.py +0 -0
  403. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/user_billing.py +0 -0
  404. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/user_environment_stats.py +0 -0
  405. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/user_login_response.py +0 -0
  406. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/user_me.py +0 -0
  407. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/user_profile_options.py +0 -0
  408. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/user_project_stats.py +0 -0
  409. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/user_refresh_token.py +0 -0
  410. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/user_refresh_token_response.py +0 -0
  411. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/user_relation.py +0 -0
  412. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/user_resend_verification.py +0 -0
  413. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/user_team_stats.py +0 -0
  414. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/user_type.py +0 -0
  415. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/user_url.py +0 -0
  416. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/variable.py +0 -0
  417. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/variable_application_create.py +0 -0
  418. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/variable_create.py +0 -0
  419. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/variable_relation.py +0 -0
  420. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/variable_service_create.py +0 -0
  421. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/variable_target.py +0 -0
  422. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/variable_targets.py +0 -0
  423. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/variable_type.py +0 -0
  424. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/variable_update.py +0 -0
  425. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/virtual_host.py +0 -0
  426. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/virtual_host_deploy.py +0 -0
  427. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/virtual_host_environment_create.py +0 -0
  428. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/virtual_host_get_status.py +0 -0
  429. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/virtual_host_options.py +0 -0
  430. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/virtual_host_relation.py +0 -0
  431. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/virtual_host_type.py +0 -0
  432. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/models/virtual_host_update.py +0 -0
  433. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/generated/utils.py +0 -0
  434. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/models.py +0 -0
  435. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/py.typed +0 -0
  436. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/__init__.py +0 -0
  437. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/action_service.py +0 -0
  438. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/api_token_service.py +0 -0
  439. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/application_service.py +0 -0
  440. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/credential_service.py +0 -0
  441. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/cron_job_service.py +0 -0
  442. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/daemon_service.py +0 -0
  443. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/environment_service.py +0 -0
  444. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/hook_service.py +0 -0
  445. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/network_rule_service.py +0 -0
  446. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/network_service.py +0 -0
  447. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/organization_service.py +0 -0
  448. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/pipeline_service.py +0 -0
  449. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/project_service.py +0 -0
  450. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/resource_event_service.py +0 -0
  451. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/resource_link_service.py +0 -0
  452. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/role_service.py +0 -0
  453. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/server_service.py +0 -0
  454. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/service_service.py +0 -0
  455. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/social_account_service.py +0 -0
  456. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/ssh_key_service.py +0 -0
  457. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/ssl_certificate_service.py +0 -0
  458. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/static_service.py +0 -0
  459. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/subnet_service.py +0 -0
  460. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/user_service.py +0 -0
  461. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/variable_service.py +0 -0
  462. {devopness-2.7.2 → devopness-2.8.1}/src/devopness/services/virtual_host_service.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devopness
3
- Version: 2.7.2
3
+ Version: 2.8.1
4
4
  Summary: Devopness API Python SDK - Painless essential DevOps to everyone
5
5
  License-Expression: Apache-2.0
6
6
  Keywords: API Client,Cloud Engineering,Cloud Infrastructure,Cloud Platform,Cloud Resource Management,Configuration Management,Deployment Automation,Devopness,DevOps,Infrastructure as Code,Platform Engineering,Python SDK,Server Management,Server Provisioning,Zero Downtime Deployment
@@ -25,7 +25,7 @@ Classifier: Topic :: System :: Systems Administration
25
25
  Classifier: Topic :: Utilities
26
26
  Requires-Dist: httpcore (>=1.0.9)
27
27
  Requires-Dist: httpx (>=0.28.1,<0.29.0)
28
- Requires-Dist: pydantic (>=2.13.4,<3.0.0)
28
+ Requires-Dist: pydantic (>=2.13.5,<3.0.0)
29
29
  Project-URL: Homepage, https://www.devopness.com
30
30
  Project-URL: Repository, https://github.com/devopness/devopness
31
31
  Description-Content-Type: text/markdown
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [project]
6
6
  name = "devopness"
7
- version = "2.7.2"
7
+ version = "2.8.1"
8
8
  description = "Devopness API Python SDK - Painless essential DevOps to everyone"
9
9
  license = "Apache-2.0"
10
10
  readme = "README.md"
@@ -53,7 +53,7 @@ dependencies = [
53
53
  # Related issue: https://github.com/devopness/devopness/security/dependabot/63
54
54
  "httpcore (>=1.0.9)",
55
55
  "httpx (>=0.28.1,<0.29.0)",
56
- "pydantic (>=2.13.4,<3.0.0)",
56
+ "pydantic (>=2.13.5,<3.0.0)",
57
57
  ]
58
58
 
59
59
  [project.urls]
@@ -67,8 +67,8 @@ packages = [
67
67
  exclude = ["src/devopness/generated/.openapi-generator-ignore"]
68
68
 
69
69
  [tool.poetry.group.dev.dependencies]
70
- openapi-generator-cli = { version = "7.24.0", markers = "python_version < '4.0'" }
71
- ruff = "^0.16.4"
70
+ openapi-generator-cli = { version = "7.25.0", markers = "python_version < '4.0'" }
71
+ ruff = "^0.16.5"
72
72
  mypy = "^2.3.1"
73
73
 
74
74
  [tool.ruff]
@@ -108,6 +108,7 @@ ignore = [
108
108
  "line-too-long", # Line too long
109
109
  "non-pep604-annotation-union", # Use `X | Y` for type annotations (auto-generated code uses Union)
110
110
  "builtin-argument-shadowing", # Shadowing builtin argument
111
+ "replace-str-enum", # Generated enums intentionally inherit from str and Enum
111
112
  ]
112
113
  "src/devopness/generated/**/__init__.py" = [
113
114
  "unused-import", # Module imported but unused
@@ -3,10 +3,15 @@ Devopness API Python SDK - Painless essential DevOps to everyone
3
3
  """
4
4
 
5
5
  from .base_model import DevopnessBaseModel
6
- from .base_service import DevopnessBaseService, DevopnessBaseServiceAsync
6
+ from .base_service import (
7
+ DevopnessBaseService,
8
+ DevopnessBaseServiceAsync,
9
+ DevopnessClientState,
10
+ )
7
11
 
8
12
  __all__ = [
9
13
  "DevopnessBaseModel",
10
14
  "DevopnessBaseService",
11
15
  "DevopnessBaseServiceAsync",
16
+ "DevopnessClientState",
12
17
  ]
@@ -7,10 +7,12 @@ from typing import Any
7
7
 
8
8
  import httpx
9
9
 
10
- from devopness.core.sdk_error import DevopnessSdkError
11
-
12
10
  from ..base import DevopnessBaseModel
13
11
  from ..client_config import DevopnessClientConfig
12
+ from ..client_state import (
13
+ DEVOPNESS_CLIENT_STATE_EXTENSION_KEY,
14
+ DevopnessClientState,
15
+ )
14
16
  from ..core.api_error import (
15
17
  raise_devopness_api_error,
16
18
  raise_devopness_api_error_sync,
@@ -19,10 +21,12 @@ from ..core.network_error import (
19
21
  handle_network_errors,
20
22
  handle_network_errors_sync,
21
23
  )
24
+ from ..core.sdk_error import DevopnessSdkError
22
25
 
23
26
  __all__ = [
24
27
  "DevopnessBaseService",
25
28
  "DevopnessBaseServiceAsync",
29
+ "DevopnessClientState",
26
30
  ]
27
31
 
28
32
 
@@ -33,24 +37,22 @@ class DevopnessBaseService:
33
37
  """
34
38
 
35
39
  _client: httpx.Client
36
- _config: DevopnessClientConfig
40
+ _state: DevopnessClientState
37
41
 
38
- _access_token: str | None = None
39
- _refresh_token: str | None = None
40
- _token_expires_at: datetime | None = None
41
-
42
- def __init__(self) -> None:
42
+ def __init__(self, state: DevopnessClientState | None = None) -> None:
43
43
  """
44
44
  Initializes the API base service with the provided configuration.
45
45
  """
46
- if getattr(DevopnessBaseService, "_config", None) is None:
47
- raise DevopnessSdkError("DevopnessBaseService is not initialized")
46
+ if state is None:
47
+ state = DevopnessClientState(config=DevopnessClientConfig())
48
+
49
+ self._state = state
48
50
 
49
51
  self._client = httpx.Client(
50
- base_url=self._config.base_url,
51
- timeout=self._config.timeout,
52
- default_encoding=self._config.default_encoding,
53
- headers=self._config.headers,
52
+ base_url=self._state.config.base_url,
53
+ timeout=self._state.config.timeout,
54
+ default_encoding=self._state.config.default_encoding,
55
+ headers=dict(self._state.config.headers),
54
56
  event_hooks={
55
57
  "request": [self._on_request_callback],
56
58
  "response": [self._on_response_callback],
@@ -119,7 +121,7 @@ class DevopnessBaseService:
119
121
  """
120
122
  response = self._post(
121
123
  "/users/refresh-token",
122
- {"refresh_token": DevopnessBaseService._refresh_token},
124
+ {"refresh_token": self._state.refresh_token},
123
125
  )
124
126
 
125
127
  self._save_access_token(response)
@@ -138,9 +140,9 @@ class DevopnessBaseService:
138
140
  expires_in: int = data["expires_in"]
139
141
  expires_at = now + timedelta(seconds=expires_in)
140
142
 
141
- DevopnessBaseService._access_token = data["access_token"]
142
- DevopnessBaseService._refresh_token = data["refresh_token"]
143
- DevopnessBaseService._token_expires_at = expires_at
143
+ self._state.access_token = data["access_token"]
144
+ self._state.refresh_token = data["refresh_token"]
145
+ self._state.token_expires_at = expires_at
144
146
 
145
147
  def _on_request_callback(self, request: httpx.Request) -> None:
146
148
  """
@@ -150,15 +152,17 @@ class DevopnessBaseService:
150
152
  Args:
151
153
  request (httpx.Request): The outgoing HTTP request.
152
154
  """
155
+ request.extensions[DEVOPNESS_CLIENT_STATE_EXTENSION_KEY] = self._state
156
+
153
157
  if (
154
- DevopnessBaseService._config.auto_refresh_token
155
- and is_access_token_expired(DevopnessBaseService)
158
+ self._state.config.auto_refresh_token
159
+ and is_access_token_expired(self._state)
156
160
  and not is_token_change_request(request.url.path)
157
161
  ):
158
162
  self._refresh_access_token()
159
163
 
160
- api_token = DevopnessBaseService._config.api_token
161
- access_token = DevopnessBaseService._access_token
164
+ api_token = self._state.config.api_token
165
+ access_token = self._state.access_token
162
166
 
163
167
  if api_token:
164
168
  request.headers["Authorization"] = f"Bearer {api_token}"
@@ -169,7 +173,7 @@ class DevopnessBaseService:
169
173
  elif "Authorization" in request.headers:
170
174
  del request.headers["Authorization"]
171
175
 
172
- if DevopnessBaseService._config.debug:
176
+ if self._state.config.debug:
173
177
  debug_request(request)
174
178
 
175
179
  def _on_response_callback(self, response: httpx.Response) -> httpx.Response:
@@ -185,13 +189,12 @@ class DevopnessBaseService:
185
189
  try:
186
190
  response.raise_for_status()
187
191
 
188
- if (
189
- DevopnessBaseService._config.auto_refresh_token
190
- and is_token_change_request(response.url.path)
192
+ if self._state.config.auto_refresh_token and is_token_change_request(
193
+ response.url.path
191
194
  ):
192
195
  self._save_access_token(response)
193
196
 
194
- if DevopnessBaseService._config.debug:
197
+ if self._state.config.debug:
195
198
  debug_response(response)
196
199
 
197
200
  except httpx.HTTPStatusError as e:
@@ -207,24 +210,22 @@ class DevopnessBaseServiceAsync:
207
210
  """
208
211
 
209
212
  _client: httpx.AsyncClient
210
- _config: DevopnessClientConfig
211
-
212
- _access_token: str | None = None
213
- _refresh_token: str | None = None
214
- _token_expires_at: datetime | None = None
213
+ _state: DevopnessClientState
215
214
 
216
- def __init__(self) -> None:
215
+ def __init__(self, state: DevopnessClientState | None = None) -> None:
217
216
  """
218
217
  Initializes the API base service with the provided configuration.
219
218
  """
220
- if getattr(DevopnessBaseServiceAsync, "_config", None) is None:
221
- raise DevopnessSdkError("DevopnessBaseServiceAsync is not initialized")
219
+ if state is None:
220
+ state = DevopnessClientState(config=DevopnessClientConfig())
221
+
222
+ self._state = state
222
223
 
223
224
  self._client = httpx.AsyncClient(
224
- base_url=self._config.base_url,
225
- timeout=self._config.timeout,
226
- default_encoding=self._config.default_encoding,
227
- headers=self._config.headers,
225
+ base_url=self._state.config.base_url,
226
+ timeout=self._state.config.timeout,
227
+ default_encoding=self._state.config.default_encoding,
228
+ headers=dict(self._state.config.headers),
228
229
  event_hooks={
229
230
  "request": [self._on_request_callback],
230
231
  "response": [self._on_response_callback],
@@ -293,7 +294,7 @@ class DevopnessBaseServiceAsync:
293
294
  """
294
295
  response = await self._post(
295
296
  "/users/refresh-token",
296
- {"refresh_token": DevopnessBaseServiceAsync._refresh_token},
297
+ {"refresh_token": self._state.refresh_token},
297
298
  )
298
299
 
299
300
  await self._save_access_token(response)
@@ -312,9 +313,9 @@ class DevopnessBaseServiceAsync:
312
313
  expires_in: int = data["expires_in"]
313
314
  expires_at = now + timedelta(seconds=expires_in)
314
315
 
315
- DevopnessBaseServiceAsync._access_token = data["access_token"]
316
- DevopnessBaseServiceAsync._refresh_token = data["refresh_token"]
317
- DevopnessBaseServiceAsync._token_expires_at = expires_at
316
+ self._state.access_token = data["access_token"]
317
+ self._state.refresh_token = data["refresh_token"]
318
+ self._state.token_expires_at = expires_at
318
319
 
319
320
  async def _on_request_callback(self, request: httpx.Request) -> None:
320
321
  """
@@ -324,15 +325,17 @@ class DevopnessBaseServiceAsync:
324
325
  Args:
325
326
  request (httpx.Request): The outgoing HTTP request.
326
327
  """
328
+ request.extensions[DEVOPNESS_CLIENT_STATE_EXTENSION_KEY] = self._state
329
+
327
330
  if (
328
- DevopnessBaseServiceAsync._config.auto_refresh_token
329
- and is_access_token_expired(DevopnessBaseServiceAsync)
331
+ self._state.config.auto_refresh_token
332
+ and is_access_token_expired(self._state)
330
333
  and not is_token_change_request(request.url.path)
331
334
  ):
332
335
  await self._refresh_access_token()
333
336
 
334
- api_token = DevopnessBaseServiceAsync._config.api_token
335
- access_token = DevopnessBaseServiceAsync._access_token
337
+ api_token = self._state.config.api_token
338
+ access_token = self._state.access_token
336
339
 
337
340
  if api_token:
338
341
  request.headers["Authorization"] = f"Bearer {api_token}"
@@ -343,7 +346,7 @@ class DevopnessBaseServiceAsync:
343
346
  elif "Authorization" in request.headers:
344
347
  del request.headers["Authorization"]
345
348
 
346
- if DevopnessBaseServiceAsync._config.debug:
349
+ if self._state.config.debug:
347
350
  debug_request(request)
348
351
 
349
352
  async def _on_response_callback(self, response: httpx.Response) -> httpx.Response:
@@ -359,13 +362,12 @@ class DevopnessBaseServiceAsync:
359
362
  try:
360
363
  response.raise_for_status()
361
364
 
362
- if (
363
- DevopnessBaseServiceAsync._config.auto_refresh_token
364
- and is_token_change_request(response.url.path)
365
+ if self._state.config.auto_refresh_token and is_token_change_request(
366
+ response.url.path
365
367
  ):
366
368
  await self._save_access_token(response)
367
369
 
368
- if DevopnessBaseServiceAsync._config.debug:
370
+ if self._state.config.debug:
369
371
  debug_response(response)
370
372
 
371
373
  except httpx.HTTPStatusError as e:
@@ -400,13 +402,11 @@ def debug_response(response: httpx.Response) -> None:
400
402
  print(f"[Devopness SDK] <-- [Response] {r_status_code} {r_reason_phrase}")
401
403
 
402
404
 
403
- def is_access_token_expired(
404
- service_cls: type[DevopnessBaseService] | type[DevopnessBaseServiceAsync],
405
- ) -> bool:
405
+ def is_access_token_expired(state: DevopnessClientState) -> bool:
406
406
  """
407
407
  Checks if the access token has expired.
408
408
  """
409
- expires_at = service_cls._token_expires_at
409
+ expires_at = state.token_expires_at
410
410
  if expires_at is None:
411
411
  return True
412
412
 
@@ -2,10 +2,7 @@
2
2
  Devopness API Python SDK - Painless essential DevOps to everyone
3
3
  """
4
4
 
5
- from .base import (
6
- DevopnessBaseService,
7
- DevopnessBaseServiceAsync,
8
- )
5
+ from .base import DevopnessClientState
9
6
  from .client_config import (
10
7
  DevopnessClientConfig,
11
8
  DevopnessClientConfigDict,
@@ -159,56 +156,82 @@ class DevopnessClient:
159
156
  self,
160
157
  config: DevopnessClientConfig | DevopnessClientConfigDict | None = None,
161
158
  ) -> None:
159
+ """
160
+ Build a synchronous Devopness client with isolated per-instance state.
161
+ """
162
+ self._state = self._build_state(config)
163
+
164
+ self.actions = ActionService(self._state)
165
+ self.api_tokens = APITokenService(self._state)
166
+ self.applications = ApplicationService(self._state)
167
+ self.credentials = CredentialService(self._state)
168
+ self.cron_jobs = CronJobService(self._state)
169
+ self.daemons = DaemonService(self._state)
170
+ self.environments = EnvironmentService(self._state)
171
+ self.hooks = HookService(self._state)
172
+ self.network_rules = NetworkRuleService(self._state)
173
+ self.networks = NetworkService(self._state)
174
+ self.organizations = OrganizationService(self._state)
175
+ self.pipelines = PipelineService(self._state)
176
+ self.projects = ProjectService(self._state)
177
+ self.resource_events = ResourceEventService(self._state)
178
+ self.resource_links = ResourceLinkService(self._state)
179
+ self.roles = RoleService(self._state)
180
+ self.servers = ServerService(self._state)
181
+ self.services = ServiceService(self._state)
182
+ self.social_accounts = SocialAccountService(self._state)
183
+ self.ssh_keys = SSHKeyService(self._state)
184
+ self.ssl_certificates = SSLCertificateService(self._state)
185
+ self.static = StaticService(self._state)
186
+ self.subnets = SubnetService(self._state)
187
+ self.teams = TeamService(self._state)
188
+ self.users = UserService(self._state)
189
+ self.variables = VariableService(self._state)
190
+ self.virtual_hosts = VirtualHostService(self._state)
191
+
192
+ @staticmethod
193
+ def _build_state(
194
+ config: DevopnessClientConfig | DevopnessClientConfigDict | None,
195
+ ) -> DevopnessClientState:
196
+ """
197
+ Normalize user input into an isolated client state object.
198
+ """
162
199
  if config is None:
163
- config = DevopnessClientConfig()
200
+ normalized_config = DevopnessClientConfig()
164
201
  elif isinstance(config, dict):
165
- config = DevopnessClientConfig.from_dict(config)
166
-
167
- DevopnessBaseService._config = config
202
+ normalized_config = DevopnessClientConfig.from_dict(config)
203
+ else:
204
+ normalized_config = config
168
205
 
169
- self.actions = ActionService()
170
- self.api_tokens = APITokenService()
171
- self.applications = ApplicationService()
172
- self.credentials = CredentialService()
173
- self.cron_jobs = CronJobService()
174
- self.daemons = DaemonService()
175
- self.environments = EnvironmentService()
176
- self.hooks = HookService()
177
- self.network_rules = NetworkRuleService()
178
- self.networks = NetworkService()
179
- self.organizations = OrganizationService()
180
- self.pipelines = PipelineService()
181
- self.projects = ProjectService()
182
- self.resource_events = ResourceEventService()
183
- self.resource_links = ResourceLinkService()
184
- self.roles = RoleService()
185
- self.servers = ServerService()
186
- self.services = ServiceService()
187
- self.social_accounts = SocialAccountService()
188
- self.ssh_keys = SSHKeyService()
189
- self.ssl_certificates = SSLCertificateService()
190
- self.static = StaticService()
191
- self.subnets = SubnetService()
192
- self.teams = TeamService()
193
- self.users = UserService()
194
- self.variables = VariableService()
195
- self.virtual_hosts = VirtualHostService()
206
+ normalized_config = normalized_config.model_copy(deep=True)
207
+ state = DevopnessClientState(config=normalized_config)
208
+ return state
196
209
 
197
210
  def __set_api_token(self, api_token: str) -> None:
198
- # pylint: disable=protected-access
199
- DevopnessBaseService._config.api_token = api_token
211
+ """
212
+ Update the API token for this client instance.
213
+ """
214
+ self._state.config.api_token = api_token
200
215
 
201
216
  def __get_api_token(self) -> str | None:
202
- # pylint: disable=protected-access
203
- return DevopnessBaseService._config.api_token
217
+ """
218
+ Return the API token for this client instance.
219
+ """
220
+ api_token = self._state.config.api_token
221
+ return api_token
204
222
 
205
223
  def __set_access_token(self, access_token: str) -> None:
206
- # pylint: disable=protected-access
207
- DevopnessBaseService._access_token = access_token
224
+ """
225
+ Update the access token for this client instance.
226
+ """
227
+ self._state.access_token = access_token
208
228
 
209
229
  def __get_access_token(self) -> str | None:
210
- # pylint: disable=protected-access
211
- return DevopnessBaseService._access_token
230
+ """
231
+ Return the access token for this client instance.
232
+ """
233
+ access_token = self._state.access_token
234
+ return access_token
212
235
 
213
236
  api_token = property(fset=__set_api_token, fget=__get_api_token)
214
237
  access_token = property(fset=__set_access_token, fget=__get_access_token)
@@ -251,56 +274,50 @@ class DevopnessClientAsync:
251
274
  self,
252
275
  config: DevopnessClientConfig | DevopnessClientConfigDict | None = None,
253
276
  ) -> None:
254
- if config is None:
255
- config = DevopnessClientConfig()
256
- elif isinstance(config, dict):
257
- config = DevopnessClientConfig.from_dict(config)
258
-
259
- DevopnessBaseServiceAsync._config = config
277
+ """
278
+ Build an asynchronous Devopness client with isolated per-instance state.
279
+ """
280
+ self._state = DevopnessClient._build_state(config)
260
281
 
261
- self.actions = ActionServiceAsync()
262
- self.api_tokens = APITokenServiceAsync()
263
- self.applications = ApplicationServiceAsync()
264
- self.credentials = CredentialServiceAsync()
265
- self.cron_jobs = CronJobServiceAsync()
266
- self.daemons = DaemonServiceAsync()
267
- self.environments = EnvironmentServiceAsync()
268
- self.hooks = HookServiceAsync()
269
- self.network_rules = NetworkRuleServiceAsync()
270
- self.networks = NetworkServiceAsync()
271
- self.organizations = OrganizationServiceAsync()
272
- self.pipelines = PipelineServiceAsync()
273
- self.projects = ProjectServiceAsync()
274
- self.resource_events = ResourceEventServiceAsync()
275
- self.resource_links = ResourceLinkServiceAsync()
276
- self.roles = RoleServiceAsync()
277
- self.servers = ServerServiceAsync()
278
- self.services = ServiceServiceAsync()
279
- self.social_accounts = SocialAccountServiceAsync()
280
- self.ssh_keys = SSHKeyServiceAsync()
281
- self.ssl_certificates = SSLCertificateServiceAsync()
282
- self.static = StaticServiceAsync()
283
- self.subnets = SubnetServiceAsync()
284
- self.teams = TeamServiceAsync()
285
- self.users = UserServiceAsync()
286
- self.variables = VariableServiceAsync()
287
- self.virtual_hosts = VirtualHostServiceAsync()
282
+ self.actions = ActionServiceAsync(self._state)
283
+ self.api_tokens = APITokenServiceAsync(self._state)
284
+ self.applications = ApplicationServiceAsync(self._state)
285
+ self.credentials = CredentialServiceAsync(self._state)
286
+ self.cron_jobs = CronJobServiceAsync(self._state)
287
+ self.daemons = DaemonServiceAsync(self._state)
288
+ self.environments = EnvironmentServiceAsync(self._state)
289
+ self.hooks = HookServiceAsync(self._state)
290
+ self.network_rules = NetworkRuleServiceAsync(self._state)
291
+ self.networks = NetworkServiceAsync(self._state)
292
+ self.organizations = OrganizationServiceAsync(self._state)
293
+ self.pipelines = PipelineServiceAsync(self._state)
294
+ self.projects = ProjectServiceAsync(self._state)
295
+ self.resource_events = ResourceEventServiceAsync(self._state)
296
+ self.resource_links = ResourceLinkServiceAsync(self._state)
297
+ self.roles = RoleServiceAsync(self._state)
298
+ self.servers = ServerServiceAsync(self._state)
299
+ self.services = ServiceServiceAsync(self._state)
300
+ self.social_accounts = SocialAccountServiceAsync(self._state)
301
+ self.ssh_keys = SSHKeyServiceAsync(self._state)
302
+ self.ssl_certificates = SSLCertificateServiceAsync(self._state)
303
+ self.static = StaticServiceAsync(self._state)
304
+ self.subnets = SubnetServiceAsync(self._state)
305
+ self.teams = TeamServiceAsync(self._state)
306
+ self.users = UserServiceAsync(self._state)
307
+ self.variables = VariableServiceAsync(self._state)
308
+ self.virtual_hosts = VirtualHostServiceAsync(self._state)
288
309
 
289
310
  def __set_api_token(self, api_token: str) -> None:
290
- # pylint: disable=protected-access
291
- DevopnessBaseServiceAsync._config.api_token = api_token
311
+ self._state.config.api_token = api_token
292
312
 
293
313
  def __get_api_token(self) -> str | None:
294
- # pylint: disable=protected-access
295
- return DevopnessBaseServiceAsync._config.api_token
314
+ return self._state.config.api_token
296
315
 
297
316
  def __set_access_token(self, access_token: str) -> None:
298
- # pylint: disable=protected-access
299
- DevopnessBaseServiceAsync._access_token = access_token
317
+ self._state.access_token = access_token
300
318
 
301
319
  def __get_access_token(self) -> str | None:
302
- # pylint: disable=protected-access
303
- return DevopnessBaseServiceAsync._access_token
320
+ return self._state.access_token
304
321
 
305
322
  api_token = property(fset=__set_api_token, fget=__get_api_token)
306
323
  access_token = property(fset=__set_access_token, fget=__get_access_token)
@@ -0,0 +1,27 @@
1
+ """
2
+ Devopness API Python SDK - Painless essential DevOps to everyone
3
+ """
4
+
5
+ from dataclasses import dataclass
6
+ from datetime import datetime
7
+ from typing import TYPE_CHECKING
8
+
9
+ if TYPE_CHECKING:
10
+ from .client_config import DevopnessClientConfig
11
+
12
+ DEVOPNESS_CLIENT_STATE_EXTENSION_KEY = "devopness_client_state"
13
+
14
+
15
+ @dataclass
16
+ class DevopnessClientState:
17
+ """
18
+ Per-client runtime state for Devopness SDK instances.
19
+
20
+ This groups the immutable client configuration with mutable runtime data
21
+ such as access tokens and token expiration timestamps.
22
+ """
23
+
24
+ config: "DevopnessClientConfig"
25
+ access_token: str | None = None
26
+ refresh_token: str | None = None
27
+ token_expires_at: datetime | None = None
@@ -76,15 +76,18 @@ class DevopnessApiError(DevopnessSdkError):
76
76
  if self.request_method and self.request_url:
77
77
  lines.append(f"Request: {self.request_method} {self.request_url}")
78
78
 
79
- lines.append(f"Status Code: {self.status_code}")
80
- lines.append(f"Message: {self.message}")
79
+ lines.extend(
80
+ [
81
+ f"Status Code: {self.status_code}",
82
+ f"Message: {self.message}",
83
+ ]
84
+ )
81
85
 
82
86
  if self.errors:
83
87
  lines.append("Errors:")
84
88
 
85
89
  for field, errors in self.errors.items():
86
- lines.append(f" - {field}:")
87
- lines.extend(f" {error}" for error in errors)
90
+ lines.extend([f" - {field}:", *[f" {error}" for error in errors]])
88
91
 
89
92
  return "\n".join(lines)
90
93