devopness 2.7.2__tar.gz → 2.8.0__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.
- {devopness-2.7.2 → devopness-2.8.0}/PKG-INFO +1 -1
- {devopness-2.7.2 → devopness-2.8.0}/pyproject.toml +1 -1
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/base/__init__.py +6 -1
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/base/base_service.py +56 -56
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/client.py +101 -84
- devopness-2.8.0/src/devopness/client_state.py +27 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/core/response.py +32 -12
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/team_service.py +15 -8
- {devopness-2.7.2 → devopness-2.8.0}/README.md +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/__init__.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/base/base_model.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/client_config.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/core/__init__.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/core/api_error.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/core/network_error.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/core/sdk_error.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/__init__.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/__init__.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/actions_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/actions_logs_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/applications_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/applications_hooks_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/applications_variables_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/credentials_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/credentials_repositories_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/cron_jobs_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/daemons_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/environments_actions_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/environments_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/hook_requests_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/hooks_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/hooks_requests_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/network_rules_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/networks_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/networks_subnets_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/organizations_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/pipelines_actions_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/pipelines_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/pipelines_hooks_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/pipelines_steps_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/projects_actions_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/projects_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/projects_api_tokens_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/projects_archived_environments_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/projects_environments_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/resource_events_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/resource_links_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/roles_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/servers_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/services_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/services_variables_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/social_accounts_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/ssh_keys_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/ssl_certificates_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/static_data_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/subnets_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/team_invitations_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/teams_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/teams_invitations_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/teams_members_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/users_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/users_environments_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/users_passwords_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/users_personal_access_tokens_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/users_projects_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/users_team_invitations_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/variables_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/api/virtual_hosts_api.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/__init__.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_data.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_deployment_commit.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_deployment_content.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_deployment_data.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_hook_request.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_pipeline_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_relation_shallow.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_resource.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_resource_data.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_retry_response.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_status.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_status_reason_code.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_step.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_summary.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_summary_target.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_target.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_target_credential_data.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_target_data.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_target_log_step.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_target_network_data.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_target_server_data.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_trigger_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_triggered_from.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/action_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/api_error.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/api_error_errors.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/api_error_errors_field_name_inner.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/api_token.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/api_token_project_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/api_token_project_rotate.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/api_token_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/api_token_rotate_response.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/api_token_status.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/api_token_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/api_token_type_prefix.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/application.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/application_apply_template_response.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/application_environment_apply_template.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/application_environment_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/application_last_deployments.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/application_options.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/application_pipeline.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/application_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/application_update.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/archived_environment_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/billing_plan.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/billing_plans_options_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/blueprint_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_instance_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_os_version_code.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_provider.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_provider_code.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_provider_input_settings.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_provider_input_settings_default_value.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_provider_property_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_provider_property_validation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_provider_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_provider_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_provider_service_code.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_provider_service_region.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_provider_service_resource_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_provider_service_resource_type_scope.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_provider_settings.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_provider_settings_list.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_resource_instance_spec.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_resource_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_service_settings_aws_ec2.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_service_settings_azure_rm.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_service_settings_digital_ocean_droplet.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_service_settings_gcp_gce.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_service_settings_hetzner_hcloud.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cloud_service_settings_self_hosted_custom.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/commit.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/credential.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/credential_aws.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/credential_azure.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/credential_digital_ocean.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/credential_google_cloud.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/credential_hetzner.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/credential_input_settings.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/credential_input_settings_credential.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/credential_options.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/credential_organization_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/credential_provider.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/credential_provider_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/credential_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/credential_setting.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/credential_source_provider.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/credential_update.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/credits.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cron_job.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cron_job_deploy.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cron_job_environment_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cron_job_options.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cron_job_pattern.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cron_job_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/cron_job_update.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/daemon.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/daemon_deploy.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/daemon_environment_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/daemon_get_status.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/daemon_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/daemon_restart.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/daemon_start.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/daemon_stop.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/daemon_update.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/deployment_application_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/deployment_default_step.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/deployment_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/environment.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/environment_link.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/environment_options.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/environment_project_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/environment_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/environment_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/environment_update.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/hook.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/hook_incoming_settings.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/hook_outgoing_request_header.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/hook_outgoing_settings.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/hook_outgoing_settings_request_body.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/hook_outgoing_trigger_when_condition.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/hook_pipeline_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/hook_pipeline_create_settings.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/hook_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/hook_request.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/hook_request_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/hook_settings.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/hook_trigger_response.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/hook_trigger_when.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/hook_trigger_when_conditions_inner.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/hook_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/hook_type_param.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/hook_update.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/hook_variable.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/hook_variable_default_value.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/hook_variable_default_value_one_of_inner.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/hook_variable_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/invitation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/invitation_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/invitation_team_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/language.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/language_runtime.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/language_runtime_engine_versions_inner.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/language_runtime_framework.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/language_runtime_framework_commands.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/language_runtime_framework_defaults.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/linked_resource_data.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/linked_resource_summary_field.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/list_actions_filter_parameter.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/list_environment_actions_by_resource_type_filter_parameter.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/list_environment_actions_filter_parameter.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/log.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/member.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/member_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/membership_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/network.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/network_environment_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/network_provision_input.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/network_provision_input_settings.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/network_provision_input_settings_aws.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/network_provision_input_settings_azure.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/network_provision_input_settings_digital_ocean.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/network_provision_input_settings_gcp.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/network_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/network_rule.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/network_rule_deploy.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/network_rule_direction.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/network_rule_environment_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/network_rule_options.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/network_rule_protocol.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/network_rule_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/network_rule_update.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/network_update.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/operating_system.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/operating_system_version.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/operation_custom_settings.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/organization.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/organization_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/organization_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/organization_update.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/os_users_inner.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/password_reset_response.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/password_user_reset.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/permission_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/personal_access_token.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/personal_access_token_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/personal_access_token_rotate_response.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/personal_access_token_user_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/personal_access_token_user_rotate.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/pipeline.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/pipeline_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/pipeline_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/pipeline_settings.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/pipeline_settings_stage.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/pipeline_settings_variable.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/pipeline_step_runner_name.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/pipeline_trigger_when.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/pipeline_update.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/project.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/project_organization_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/project_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/project_update.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/provider_auth_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/provider_callback_config.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/provider_code.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/provider_input_settings.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/provider_input_settings_validation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/provider_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/provider_settings.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/provider_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/provider_type_list_inner.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/related_action.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/repository.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/repository_branch.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/repository_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/repository_tag.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/repository_tag_commit.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/request_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/resource_event.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/resource_event_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/resource_link_child.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/resource_link_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/resource_operation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/resource_summary_item.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/resource_summary_item_summary.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/resource_to_be_linked.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/resource_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/resource_type_related.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/resource_type_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/role.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/role_organization_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/role_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/role_update.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/script_runner.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/server.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/server_blueprint.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/server_blueprint_spec.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/server_cloud_service_code.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/server_command.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/server_environment_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/server_options.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/server_provision_input.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/server_provision_input_settings.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/server_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/server_status.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/server_update.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/service_deploy.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/service_environment_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/service_get_status.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/service_initial_state.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/service_options.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/service_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/service_reload.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/service_restart.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/service_start.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/service_stop.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/service_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/service_update.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/social_account.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/social_account_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/social_account_displayable_name.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/social_account_provider.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/social_account_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/social_account_status.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/source_provider_auth_method_settings.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/source_provider_displayable_name.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/source_provider_name.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/source_provider_settings.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/source_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/ssh_key.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/ssh_key_deploy.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/ssh_key_environment_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/ssh_key_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/ssh_key_update.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/ssl_certificate.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/ssl_certificate_deploy.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/ssl_certificate_environment_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/ssl_certificate_issuer.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/ssl_certificate_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/ssl_certificate_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/ssl_certificate_validation_level.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/static_billing_info.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/static_cloud_provider_code.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/static_cron_job_frequency.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/static_environment_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/static_network_rule_direction.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/static_network_rule_protocol.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/static_network_rule_protocol_defaults.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/static_permission.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/static_service_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/static_service_type_supported_versions_inner.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/static_virtual_host_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/step.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/step_pipeline_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/step_pipeline_update.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/subnet.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/subnet_network_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/subnet_provision_input.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/subnet_provision_input_settings.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/subnet_provision_input_settings_aws.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/subnet_provision_input_settings_azure.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/subnet_provision_input_settings_digital_ocean.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/subnet_provision_input_settings_gcp.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/subnet_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/subnet_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/subscription.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/subscription_balance.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/subscription_plan.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/team.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/team_environment_link.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/team_invitation_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/team_invitation_status.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/team_invitation_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/team_membership_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/team_organization_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/team_organization_link.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/team_project_link.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/team_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/team_update.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/template.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/trigger_event.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/trigger_when_condition.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/trigger_when_condition_accepted_values_inner.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/trigger_when_condition_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/triggered_action_stats.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/triggered_action_summary.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/triggered_actions.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/user.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/user_activity.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/user_billing.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/user_environment_stats.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/user_login_response.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/user_me.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/user_profile_options.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/user_project_stats.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/user_refresh_token.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/user_refresh_token_response.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/user_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/user_resend_verification.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/user_team_stats.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/user_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/user_url.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/variable.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/variable_application_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/variable_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/variable_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/variable_service_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/variable_target.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/variable_targets.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/variable_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/variable_update.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/virtual_host.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/virtual_host_deploy.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/virtual_host_environment_create.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/virtual_host_get_status.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/virtual_host_options.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/virtual_host_relation.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/virtual_host_type.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/models/virtual_host_update.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/generated/utils.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/models.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/py.typed +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/__init__.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/action_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/api_token_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/application_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/credential_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/cron_job_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/daemon_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/environment_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/hook_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/network_rule_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/network_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/organization_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/pipeline_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/project_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/resource_event_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/resource_link_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/role_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/server_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/service_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/social_account_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/ssh_key_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/ssl_certificate_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/static_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/subnet_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/user_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/src/devopness/services/variable_service.py +0 -0
- {devopness-2.7.2 → devopness-2.8.0}/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.
|
|
3
|
+
Version: 2.8.0
|
|
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
|
|
@@ -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
|
|
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
|
-
|
|
40
|
+
_state: DevopnessClientState
|
|
37
41
|
|
|
38
|
-
|
|
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
|
|
47
|
-
|
|
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.
|
|
51
|
-
timeout=self.
|
|
52
|
-
default_encoding=self.
|
|
53
|
-
headers=self.
|
|
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":
|
|
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
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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
|
-
|
|
155
|
-
and is_access_token_expired(
|
|
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 =
|
|
161
|
-
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
221
|
-
|
|
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.
|
|
225
|
-
timeout=self.
|
|
226
|
-
default_encoding=self.
|
|
227
|
-
headers=self.
|
|
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":
|
|
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
|
-
|
|
316
|
-
|
|
317
|
-
|
|
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
|
-
|
|
329
|
-
and is_access_token_expired(
|
|
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 =
|
|
335
|
-
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
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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
|
-
|
|
200
|
+
normalized_config = DevopnessClientConfig()
|
|
164
201
|
elif isinstance(config, dict):
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
202
|
+
normalized_config = DevopnessClientConfig.from_dict(config)
|
|
203
|
+
else:
|
|
204
|
+
normalized_config = config
|
|
168
205
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
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
|
-
|
|
199
|
-
|
|
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
|
-
|
|
203
|
-
|
|
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
|
-
|
|
207
|
-
|
|
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
|
-
|
|
211
|
-
|
|
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
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
@@ -3,7 +3,6 @@ Devopness API Python SDK - Painless essential DevOps to everyone
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
import json
|
|
6
|
-
import sys
|
|
7
6
|
from typing import Any, Generic, TypeVar, cast, get_args, get_origin
|
|
8
7
|
from urllib.parse import parse_qs, urlparse
|
|
9
8
|
from warnings import warn
|
|
@@ -12,6 +11,7 @@ import httpx
|
|
|
12
11
|
from pydantic import ValidationError
|
|
13
12
|
|
|
14
13
|
from devopness.base import DevopnessBaseModel
|
|
14
|
+
from devopness.client_state import DEVOPNESS_CLIENT_STATE_EXTENSION_KEY
|
|
15
15
|
|
|
16
16
|
__all__ = ["DevopnessResponse"]
|
|
17
17
|
|
|
@@ -48,6 +48,7 @@ class DevopnessResponse(Generic[T]):
|
|
|
48
48
|
data: T
|
|
49
49
|
page_count: int
|
|
50
50
|
action_id: int | None
|
|
51
|
+
_config: object | None
|
|
51
52
|
|
|
52
53
|
def __init__(
|
|
53
54
|
self,
|
|
@@ -66,6 +67,7 @@ class DevopnessResponse(Generic[T]):
|
|
|
66
67
|
"""
|
|
67
68
|
self._is_async_response = False
|
|
68
69
|
self.status = response.status_code
|
|
70
|
+
self._config = self._extract_config(response)
|
|
69
71
|
self.data = cast(T, self._parse_data(response, model_cls))
|
|
70
72
|
self.page_count = self._extract_last_page_number(response)
|
|
71
73
|
self.action_id = self._parse_action_id(response)
|
|
@@ -90,6 +92,7 @@ class DevopnessResponse(Generic[T]):
|
|
|
90
92
|
|
|
91
93
|
result._is_async_response = True
|
|
92
94
|
result.status = response.status_code
|
|
95
|
+
result._config = result._extract_config(response)
|
|
93
96
|
result.data = cast(T, await result._async_parse_data(response, model_cls))
|
|
94
97
|
result.page_count = result._extract_last_page_number(response)
|
|
95
98
|
result.action_id = result._parse_action_id(response)
|
|
@@ -276,22 +279,39 @@ class DevopnessResponse(Generic[T]):
|
|
|
276
279
|
def _model_name(model_cls: type[DevopnessBaseModel] | type | None) -> str:
|
|
277
280
|
return getattr(model_cls, "__name__", repr(model_cls)) if model_cls else "None"
|
|
278
281
|
|
|
279
|
-
def
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
282
|
+
def _extract_config(self, response: httpx.Response) -> object | None:
|
|
283
|
+
"""
|
|
284
|
+
Extract the client config attached to the originating request.
|
|
285
|
+
"""
|
|
286
|
+
config: object | None = None
|
|
287
|
+
request: httpx.Request | None
|
|
288
|
+
|
|
289
|
+
try:
|
|
290
|
+
request = response.request
|
|
291
|
+
except RuntimeError:
|
|
292
|
+
request = None
|
|
293
|
+
|
|
294
|
+
if request is not None:
|
|
295
|
+
extensions = getattr(request, "extensions", None)
|
|
296
|
+
if isinstance(extensions, dict):
|
|
297
|
+
state = extensions.get(DEVOPNESS_CLIENT_STATE_EXTENSION_KEY)
|
|
298
|
+
config = getattr(state, "config", None)
|
|
287
299
|
|
|
288
|
-
return
|
|
300
|
+
return config
|
|
289
301
|
|
|
290
302
|
def _is_strict_validation_mode(self) -> bool:
|
|
291
|
-
|
|
303
|
+
"""
|
|
304
|
+
Check whether response validation should raise on model mismatch.
|
|
305
|
+
"""
|
|
306
|
+
strict_validation_mode = getattr(self._config, "strict_validation_mode", True)
|
|
307
|
+
return strict_validation_mode
|
|
292
308
|
|
|
293
309
|
def _is_debug_mode(self) -> bool:
|
|
294
|
-
|
|
310
|
+
"""
|
|
311
|
+
Check whether debug warnings should be emitted during parsing.
|
|
312
|
+
"""
|
|
313
|
+
debug_mode = getattr(self._config, "debug", False)
|
|
314
|
+
return debug_mode
|
|
295
315
|
|
|
296
316
|
@staticmethod
|
|
297
317
|
def _safe_validation_error_details(error: ValidationError) -> str:
|