From dc9cad9b868989634ea8c56318f901dccff19a29 Mon Sep 17 00:00:00 2001 From: Craig Monson Date: Wed, 7 Jul 2021 10:28:57 -0400 Subject: [PATCH 1/8] Removing old code, and replacing with strictly openapi generated client code --- .dockerignore | 37 - .gitignore | 70 +- .pre-commit-config.yaml | 25 - .stickler.yml | 10 - .travis.yml | 43 - CHANGELOG.md | 290 -- CODE_OF_CONDUCT.md | 76 - Dockerfile | 31 - Dockerfile-py39 | 31 - LICENSE | 20 +- Makefile | 183 +- Pipfile | 11 - README.md | 406 ++- REFERENCE.md | 57 - SECURITY.md | 14 - build/.gitignore | 4 + build/fix-api.py | 27 + build/fix-generated-code.py | 34 + cloudendure/__init__.py | 30 +- cloudendure/__version__.py | 1 - cloudendure/api.py | 242 -- cloudendure/api/__init__.py | 3 + cloudendure/api/account_api.py | 130 + cloudendure/api/actions_api.py | 960 +++++++ cloudendure/api/authentication_api.py | 211 ++ cloudendure/api/blueprint_api.py | 463 ++++ cloudendure/api/cloud_api.py | 568 ++++ cloudendure/api/cloud_credentials_api.py | 429 +++ cloudendure/api/default_api.py | 1157 ++++++++ cloudendure/api/licensing_api.py | 236 ++ cloudendure/api/machines_api.py | 775 ++++++ cloudendure/api/project_api.py | 736 +++++ cloudendure/api/recovery_plans_api.py | 642 +++++ cloudendure/api/replication_api.py | 806 ++++++ cloudendure/api/user_api.py | 401 +++ cloudendure/api_client.py | 961 +++++++ cloudendure/apis/__init__.py | 28 + cloudendure/aws.py | 0 cloudendure/cloudendure.py | 1146 -------- cloudendure/cloudendure_api/__init__.py | 239 -- cloudendure/cloudendure_api/api/__init__.py | 18 - .../cloudendure_api/api/account_api.py | 136 - .../cloudendure_api/api/actions_api.py | 1470 ---------- .../cloudendure_api/api/authentication_api.py | 224 -- .../cloudendure_api/api/blueprint_api.py | 519 ---- cloudendure/cloudendure_api/api/cloud_api.py | 605 ----- .../api/cloud_credentials_api.py | 465 ---- .../cloudendure_api/api/default_api.py | 1195 --------- .../cloudendure_api/api/licensing_api.py | 234 -- .../cloudendure_api/api/machines_api.py | 753 ------ .../cloudendure_api/api/project_api.py | 672 ----- .../cloudendure_api/api/recovery_plans_api.py | 742 ------ .../cloudendure_api/api/replication_api.py | 909 ------- cloudendure/cloudendure_api/api/user_api.py | 447 ---- cloudendure/cloudendure_api/api_client.py | 706 ----- cloudendure/cloudendure_api/configuration.py | 366 --- .../cloudendure_api/models/__init__.py | 230 -- .../models/cloud_endure_account.py | 512 ---- .../models/cloud_endure_account_request.py | 232 -- .../cloud_endure_account_request_list.py | 103 - .../models/cloud_endure_accounts_list.py | 114 - ...ure_agent_next_replication_init_request.py | 110 - .../cloud_endure_all_project_features.py | 968 ------- .../models/cloud_endure_audit_log.py | 143 - .../cloud_endure_audit_log_changed_field.py | 162 -- .../models/cloud_endure_audit_log_entry.py | 297 --- .../cloud_endure_bandwidth_throttling.py | 112 - .../models/cloud_endure_blueprint.py | 1072 -------- .../models/cloud_endure_blueprint_list.py | 114 - .../models/cloud_endure_cloud.py | 181 -- .../models/cloud_endure_cloud_credentials.py | 226 -- .../cloud_endure_cloud_credentials_list.py | 114 - .../cloud_endure_cloud_credentials_request.py | 263 -- .../models/cloud_endure_clouds_list.py | 114 - .../models/cloud_endure_compute_location.py | 168 -- .../models/cloud_endure_configurations.py | 134 - .../cloud_endure_configurations_list.py | 114 - .../models/cloud_endure_error.py | 134 - .../cloud_endure_extended_account_info.py | 328 --- .../cloud_endure_find_files_parameters.py | 137 - .../models/cloud_endure_find_files_result.py | 174 -- .../cloud_endure_find_files_result_pit.py | 138 - .../models/cloud_endure_find_files_results.py | 204 -- .../cloud_endure_gcp_machines_finance_data.py | 306 --- ...ure_identity_provider_redirect_response.py | 110 - .../cloud_endure_initialization_step.py | 190 -- .../models/cloud_endure_job.py | 336 --- .../models/cloud_endure_jobs_list.py | 114 - .../models/cloud_endure_key_value_list.py | 110 - ...cloud_endure_launch_machines_parameters.py | 180 -- .../models/cloud_endure_license.py | 327 --- .../models/cloud_endure_license_features.py | 134 - .../models/cloud_endure_license_list.py | 114 - .../models/cloud_endure_list_users_result.py | 225 -- .../models/cloud_endure_list_users_results.py | 114 - .../models/cloud_endure_logical_location.py | 134 - .../models/cloud_endure_machine.py | 444 ---- ...dure_machine_and_path_and_point_in_time.py | 170 -- .../cloud_endure_machine_and_point_in_time.py | 141 - ...ndure_machine_replication_configuration.py | 577 ---- .../cloud_endure_machine_snapshot_credits.py | 112 - ...ud_endure_machine_throttle_time_seconds.py | 112 - .../models/cloud_endure_machines_list.py | 114 - ...dure_machines_list_invalid_i_ds_and_job.py | 175 -- .../models/cloud_endure_network_interface.py | 158 -- .../models/cloud_endure_point_in_time.py | 136 - .../models/cloud_endure_point_in_time_list.py | 114 - .../models/cloud_endure_project.py | 513 ---- .../models/cloud_endure_project_storage.py | 225 -- .../models/cloud_endure_projects_and_users.py | 110 - .../models/cloud_endure_projects_list.py | 114 - .../models/cloud_endure_recovery_plan.py | 166 -- .../models/cloud_endure_recovery_plan_list.py | 114 - .../models/cloud_endure_recovery_plan_step.py | 162 -- .../cloud_endure_recovery_plan_steps.py | 114 - .../models/cloud_endure_region.py | 690 ----- .../models/cloud_endure_regions_list.py | 114 - .../models/cloud_endure_replica.py | 349 --- .../cloud_endure_replication_configuration.py | 660 ----- ...d_endure_replication_configuration_list.py | 114 - .../cloud_endure_replication_server_config.py | 110 - .../cloud_endure_restore_files_parameters.py | 114 - .../models/cloud_endure_saml_settings.py | 171 -- .../models/cloud_endure_security_group.py | 164 -- .../models/cloud_endure_storage_location.py | 134 - .../models/cloud_endure_subnet.py | 158 -- .../models/cloud_endure_time.py | 110 - .../models/cloud_endure_updateable_scripts.py | 134 - .../cloud_endure_upgrade_counter_delay.py | 110 - .../models/cloud_endure_usage.py | 198 -- .../models/cloud_endure_usage_list.py | 114 - .../models/cloud_endure_user.py | 382 --- .../models/cloud_endure_user_report.py | 360 --- .../models/cloud_endure_user_reports.py | 114 - .../models/cloud_endure_users_and_roles.py | 110 - .../models/cloud_endure_users_list.py | 114 - .../models/cloud_endure_v_center_subnet.py | 134 - .../test/test_authentication_api.py | 37 - ...ure_agent_next_replication_init_request.py | 41 - .../test_cloud_endure_all_project_features.py | 41 - ...st_cloud_endure_audit_log_changed_field.py | 41 - .../test/test_cloud_endure_audit_log_entry.py | 39 - .../test_cloud_endure_bandwidth_throttling.py | 41 - .../test/test_cloud_endure_blueprint_list.py | 39 - .../test_cloud_endure_cloud_credentials.py | 41 - ...est_cloud_endure_cloud_credentials_list.py | 41 - ..._cloud_endure_cloud_credentials_request.py | 41 - .../test/test_cloud_endure_clouds_list.py | 39 - .../test_cloud_endure_compute_location.py | 41 - .../test/test_cloud_endure_configurations.py | 39 - .../test_cloud_endure_configurations_list.py | 41 - ...test_cloud_endure_extended_account_info.py | 41 - ...test_cloud_endure_find_files_parameters.py | 41 - .../test_cloud_endure_find_files_result.py | 41 - ...test_cloud_endure_find_files_result_pit.py | 41 - .../test_cloud_endure_find_files_results.py | 41 - ...ure_identity_provider_redirect_response.py | 41 - .../test_cloud_endure_initialization_step.py | 41 - .../test/test_cloud_endure_jobs_list.py | 39 - .../test/test_cloud_endure_key_value_list.py | 39 - ...cloud_endure_launch_machines_parameters.py | 41 - .../test_cloud_endure_license_features.py | 41 - .../test/test_cloud_endure_license_list.py | 39 - .../test_cloud_endure_list_users_result.py | 41 - .../test_cloud_endure_list_users_results.py | 41 - .../test_cloud_endure_logical_location.py | 41 - ...dure_machine_and_path_and_point_in_time.py | 41 - ..._cloud_endure_machine_and_point_in_time.py | 41 - ...ndure_machine_replication_configuration.py | 41 - ...t_cloud_endure_machine_snapshot_credits.py | 41 - ...ud_endure_machine_throttle_time_seconds.py | 41 - .../test/test_cloud_endure_machines_list.py | 39 - ...dure_machines_list_invalid_i_ds_and_job.py | 41 - .../test_cloud_endure_network_interface.py | 41 - .../test/test_cloud_endure_point_in_time.py | 39 - .../test_cloud_endure_point_in_time_list.py | 41 - .../test/test_cloud_endure_project.py | 39 - .../test/test_cloud_endure_project_storage.py | 39 - .../test_cloud_endure_projects_and_users.py | 41 - .../test/test_cloud_endure_projects_list.py | 39 - .../test/test_cloud_endure_recovery_plan.py | 39 - .../test_cloud_endure_recovery_plan_list.py | 41 - .../test_cloud_endure_recovery_plan_step.py | 41 - .../test_cloud_endure_recovery_plan_steps.py | 41 - .../test/test_cloud_endure_regions_list.py | 39 - .../test/test_cloud_endure_replica.py | 39 - ..._cloud_endure_replication_configuration.py | 41 - ...d_endure_replication_configuration_list.py | 41 - ..._cloud_endure_replication_server_config.py | 41 - ...t_cloud_endure_restore_files_parameters.py | 41 - .../test/test_cloud_endure_saml_settings.py | 39 - .../test/test_cloud_endure_security_group.py | 39 - .../test_cloud_endure_storage_location.py | 41 - .../test_cloud_endure_updateable_scripts.py | 41 - ...test_cloud_endure_upgrade_counter_delay.py | 41 - .../test/test_cloud_endure_user_report.py | 39 - .../test/test_cloud_endure_user_reports.py | 39 - .../test/test_cloud_endure_users_and_roles.py | 39 - .../test/test_cloud_endure_users_list.py | 39 - .../test/test_cloud_endure_v_center_subnet.py | 39 - cloudendure/config.py | 160 -- cloudendure/configuration.py | 462 ++++ cloudendure/constants.py | 38 - cloudendure/events.py | 95 - cloudendure/exceptions.py | 211 +- cloudendure/model/__init__.py | 5 + cloudendure/model/account.py | 232 ++ .../model/account_ce_admin_properties.py | 189 ++ cloudendure/model/account_link.py | 177 ++ cloudendure/model/account_link_list.py | 175 ++ cloudendure/model/account_request.py | 197 ++ cloudendure/model/account_request_list.py | 175 ++ cloudendure/model/accounts_list.py | 175 ++ .../agent_next_replication_init_request.py | 168 ++ cloudendure/model/all_project_features.py | 295 ++ cloudendure/model/audit_log.py | 178 ++ cloudendure/model/audit_log_changed_field.py | 174 ++ cloudendure/model/audit_log_entry.py | 199 ++ .../audit_log_entry_participating_machines.py | 174 ++ cloudendure/model/bandwidth_throttling.py | 168 ++ cloudendure/model/blueprint.py | 309 +++ cloudendure/model/blueprint_disks.py | 195 ++ cloudendure/model/blueprint_list.py | 175 ++ cloudendure/model/cloud.py | 190 ++ cloudendure/model/cloud_credentials.py | 180 ++ cloudendure/model/cloud_credentials_list.py | 175 ++ .../model/cloud_credentials_request.py | 192 ++ cloudendure/model/clouds_list.py | 175 ++ cloudendure/model/compute_location.py | 174 ++ cloudendure/model/configurations.py | 171 ++ cloudendure/model/configurations_list.py | 175 ++ cloudendure/model/cslp_item.py | 186 ++ cloudendure/model/cslp_request.py | 187 ++ cloudendure/model/cslp_result.py | 187 ++ cloudendure/model/disk_config.py | 202 ++ cloudendure/model/dynamic_configuration.py | 168 ++ cloudendure/model/error.py | 171 ++ cloudendure/model/extended_account_info.py | 213 ++ .../model/gcp_machines_finance_data.py | 189 ++ .../identity_provider_redirect_response.py | 168 ++ cloudendure/model/initialization_step.py | 207 ++ cloudendure/model/inline_object.py | 175 ++ cloudendure/model/inline_object1.py | 186 ++ cloudendure/model/inline_object10.py | 185 ++ cloudendure/model/inline_object2.py | 171 ++ cloudendure/model/inline_object3.py | 168 ++ cloudendure/model/inline_object4.py | 171 ++ cloudendure/model/inline_object5.py | 168 ++ cloudendure/model/inline_object6.py | 171 ++ cloudendure/model/inline_object7.py | 171 ++ cloudendure/model/inline_object8.py | 168 ++ cloudendure/model/inline_object9.py | 168 ++ cloudendure/model/inline_response200.py | 168 ++ cloudendure/model/inline_response2001.py | 168 ++ cloudendure/model/inline_response2002.py | 168 ++ cloudendure/model/job.py | 220 ++ cloudendure/model/job_log.py | 171 ++ cloudendure/model/job_target_machine.py | 180 ++ cloudendure/model/jobs_list.py | 175 ++ cloudendure/model/key_value_list.py | 179 ++ .../model/launch_machines_parameters.py | 197 ++ ...aunch_machines_parameters_debug_scripts.py | 171 ++ cloudendure/model/license.py | 212 ++ .../model/license_ce_admin_properties.py | 177 ++ cloudendure/model/license_features.py | 171 ++ cloudendure/model/license_list.py | 175 ++ cloudendure/model/list_users_result.py | 180 ++ cloudendure/model/list_users_results.py | 175 ++ cloudendure/model/logical_location.py | 171 ++ cloudendure/model/machine.py | 231 ++ .../machine_and_path_and_point_in_time.py | 178 ++ .../model/machine_and_point_in_time.py | 174 ++ cloudendure/model/machine_license.py | 171 ++ cloudendure/model/machine_life_cycle.py | 195 ++ .../machine_replication_configuration.py | 277 ++ cloudendure/model/machine_replication_info.py | 208 ++ ...hine_replication_info_initiation_states.py | 182 ++ ...eplication_info_initiation_states_items.py | 178 ++ cloudendure/model/machine_snapshot_credits.py | 168 ++ .../model/machine_source_properties.py | 222 ++ .../model/machine_source_properties_cpu.py | 171 ++ .../model/machine_source_properties_disks.py | 178 ++ ...ource_properties_installed_applications.py | 184 ++ ...properties_installed_applications_items.py | 168 ++ ...hine_source_properties_running_services.py | 182 ++ ...ource_properties_running_services_items.py | 168 ++ .../model/machine_throttle_time_seconds.py | 168 ++ cloudendure/model/machines_list.py | 175 ++ .../machines_list_invalid_ids_and_job.py | 183 ++ cloudendure/model/network_interface.py | 174 ++ cloudendure/model/outpost.py | 174 ++ cloudendure/model/point_in_time.py | 171 ++ cloudendure/model/point_in_time_list.py | 175 ++ cloudendure/model/populate_job_names.py | 168 ++ cloudendure/model/populate_job_params.py | 174 ++ cloudendure/model/project.py | 228 ++ .../model/project_ce_admin_properties.py | 171 ++ cloudendure/model/project_features.py | 192 ++ cloudendure/model/project_storage.py | 189 ++ .../model/project_storage_working_storage.py | 171 ++ cloudendure/model/projects_and_users.py | 175 ++ cloudendure/model/projects_and_users_items.py | 171 ++ cloudendure/model/projects_list.py | 175 ++ cloudendure/model/recovery_plan.py | 181 ++ cloudendure/model/recovery_plan_list.py | 175 ++ cloudendure/model/recovery_plan_step.py | 174 ++ cloudendure/model/recovery_plan_steps.py | 175 ++ cloudendure/model/region.py | 250 ++ cloudendure/model/regions_list.py | 175 ++ cloudendure/model/replica.py | 198 ++ .../model/replication_configuration.py | 275 ++ .../model/replication_configuration_list.py | 175 ++ ...lication_configuration_replication_tags.py | 171 ++ cloudendure/model/saml_settings.py | 174 ++ cloudendure/model/security_group.py | 174 ++ cloudendure/model/storage_location.py | 171 ++ cloudendure/model/subnet.py | 177 ++ cloudendure/model/time.py | 168 ++ cloudendure/model/updateable_scripts.py | 178 ++ .../model/updateable_scripts_result.py | 223 ++ ...eable_scripts_result_on_premise_volumes.py | 174 ++ cloudendure/model/upgrade_counter_delay.py | 168 ++ cloudendure/model/usage.py | 177 ++ cloudendure/model/usage_list.py | 175 ++ cloudendure/model/user.py | 215 ++ cloudendure/model/user_report.py | 206 ++ .../user_report_gcp_machines_finance_data.py | 175 ++ cloudendure/model/user_reports.py | 175 ++ cloudendure/model/user_settings.py | 177 ++ .../model/user_settings_send_notifications.py | 171 ++ cloudendure/model/users_and_roles.py | 175 ++ cloudendure/model/users_and_roles_items.py | 178 ++ cloudendure/model/users_list.py | 175 ++ cloudendure/model_utils.py | 1924 ++++++++++++++ cloudendure/models.py | 244 -- cloudendure/models/__init__.py | 178 ++ cloudendure/{cloudendure_api => }/rest.py | 119 +- cloudendure/templates.py | 108 - cloudendure/tests/__init__.py | 0 cloudendure/tests/test_utils.py | 0 cloudendure/utils.py | 69 - docker-compose.yml | 25 - docs/API_README.md | 214 -- docs/Account.md | 27 + docs/AccountApi.md | 56 +- docs/AccountCeAdminProperties.md | 16 + docs/AccountLink.md | 13 + docs/AccountLinkList.md | 11 + docs/AccountRequest.md | 17 + docs/AccountRequestList.md | 11 + docs/AccountsList.md | 11 + docs/ActionsApi.md | 678 ++--- docs/AgentNextReplicationInitRequest.md | 10 + docs/AllProjectFeatures.md | 50 + docs/AuditLog.md | 12 + docs/AuditLogChangedField.md | 12 + docs/AuditLogEntry.md | 17 + docs/AuditLogEntryParticipatingMachines.md | 12 + docs/AuthenticationApi.md | 110 +- docs/BandwidthThrottling.md | 10 + docs/Blueprint.md | 45 + docs/BlueprintApi.md | 336 ++- docs/BlueprintDisks.md | 13 + docs/BlueprintList.md | 11 + docs/CSLPItem.md | 17 + docs/CSLPRequest.md | 15 + docs/CSLPResult.md | 13 + docs/Cloud.md | 13 + docs/CloudApi.md | 357 ++- docs/CloudCredentials.md | 15 + docs/CloudCredentialsApi.md | 230 +- docs/CloudCredentialsList.md | 11 + docs/CloudCredentialsRequest.md | 16 + docs/CloudEndureAccount.md | 23 - docs/CloudEndureAccountRequest.md | 13 - docs/CloudEndureAccountRequestList.md | 9 - docs/CloudEndureAccountsList.md | 9 - ...udEndureAgentNextReplicationInitRequest.md | 9 - docs/CloudEndureAllProjectFeatures.md | 40 - docs/CloudEndureAuditLog.md | 10 - docs/CloudEndureAuditLogChangedField.md | 11 - docs/CloudEndureAuditLogEntry.md | 15 - docs/CloudEndureBandwidthThrottling.md | 9 - docs/CloudEndureBlueprint.md | 41 - docs/CloudEndureBlueprintList.md | 9 - docs/CloudEndureCloud.md | 11 - docs/CloudEndureCloudCredentials.md | 13 - docs/CloudEndureCloudCredentialsList.md | 9 - docs/CloudEndureCloudCredentialsRequest.md | 14 - docs/CloudEndureCloudsList.md | 9 - docs/CloudEndureComputeLocation.md | 11 - docs/CloudEndureConfigurations.md | 10 - docs/CloudEndureConfigurationsList.md | 9 - docs/CloudEndureError.md | 10 - docs/CloudEndureExtendedAccountInfo.md | 16 - docs/CloudEndureFindFilesParameters.md | 10 - docs/CloudEndureFindFilesResult.md | 11 - docs/CloudEndureFindFilesResultPit.md | 10 - docs/CloudEndureFindFilesResults.md | 12 - docs/CloudEndureGcpMachinesFinanceData.md | 16 - ...dEndureIdentityProviderRedirectResponse.md | 9 - docs/CloudEndureInitializationStep.md | 11 - docs/CloudEndureJob.md | 16 - docs/CloudEndureJobsList.md | 9 - docs/CloudEndureKeyValueList.md | 9 - docs/CloudEndureLaunchMachinesParameters.md | 11 - docs/CloudEndureLicense.md | 16 - docs/CloudEndureLicenseFeatures.md | 10 - docs/CloudEndureLicenseList.md | 9 - docs/CloudEndureListUsersResult.md | 13 - docs/CloudEndureListUsersResults.md | 9 - docs/CloudEndureLogicalLocation.md | 10 - docs/CloudEndureMachine.md | 20 - ...CloudEndureMachineAndPathAndPointInTime.md | 11 - ...udEndureMachineReplicationConfiguration.md | 25 - docs/CloudEndureMachineSnapshotCredits.md | 9 - docs/CloudEndureMachineThrottleTimeSeconds.md | 9 - docs/CloudEndureMachinesList.md | 9 - ...CloudEndureMachinesListInvalidIDsAndJob.md | 11 - docs/CloudEndureNetworkInterface.md | 11 - docs/CloudEndurePointInTimeList.md | 9 - docs/CloudEndureProject.md | 23 - docs/CloudEndureProjectStorage.md | 13 - docs/CloudEndureProjectsAndUsers.md | 9 - docs/CloudEndureProjectsList.md | 9 - docs/CloudEndureRecoveryPlan.md | 11 - docs/CloudEndureRecoveryPlanList.md | 9 - docs/CloudEndureRecoveryPlanStep.md | 11 - docs/CloudEndureRecoveryPlanSteps.md | 9 - docs/CloudEndureRegion.md | 29 - docs/CloudEndureRegionsList.md | 9 - docs/CloudEndureReplica.md | 17 - docs/CloudEndureReplicationConfiguration.md | 28 - ...CloudEndureReplicationConfigurationList.md | 9 - docs/CloudEndureReplicationServerConfig.md | 9 - docs/CloudEndureRestoreFilesParameters.md | 9 - docs/CloudEndureSamlSettings.md | 11 - docs/CloudEndureSecurityGroup.md | 11 - docs/CloudEndureStorageLocation.md | 10 - docs/CloudEndureSubnet.md | 11 - docs/CloudEndureTime.md | 9 - docs/CloudEndureUpdateableScripts.md | 10 - docs/CloudEndureUpgradeCounterDelay.md | 9 - docs/CloudEndureUsage.md | 12 - docs/CloudEndureUsageList.md | 9 - docs/CloudEndureUser.md | 18 - docs/CloudEndureUserReport.md | 18 - docs/CloudEndureUserReports.md | 9 - docs/CloudEndureUsersAndRoles.md | 9 - docs/CloudEndureUsersList.md | 9 - docs/CloudEndureVCenterSubnet.md | 10 - docs/CloudsList.md | 11 + docs/ComputeLocation.md | 12 + docs/Configurations.md | 12 + docs/ConfigurationsList.md | 11 + docs/DefaultApi.md | 694 +++-- docs/DiskConfig.md | 15 + docs/DynamicConfiguration.md | 10 + docs/Error.md | 11 + docs/ExtendedAccountInfo.md | 19 + docs/GcpMachinesFinanceData.md | 18 + docs/IdentityProviderRedirectResponse.md | 10 + docs/InitializationStep.md | 14 + docs/InlineObject.md | 11 + docs/InlineObject1.md | 16 + docs/InlineObject10.md | 12 + docs/InlineObject2.md | 11 + docs/InlineObject3.md | 10 + docs/InlineObject4.md | 11 + docs/InlineObject5.md | 10 + docs/InlineObject6.md | 10 + docs/InlineObject7.md | 11 + docs/InlineObject8.md | 10 + docs/InlineObject9.md | 10 + docs/InlineResponse200.md | 10 + docs/InlineResponse2001.md | 10 + docs/InlineResponse2002.md | 10 + docs/Job.md | 19 + docs/JobLog.md | 11 + docs/JobTargetMachine.md | 15 + docs/JobsList.md | 11 + docs/KeyValueList.md | 10 + docs/LaunchMachinesParameters.md | 13 + docs/LaunchMachinesParametersDebugScripts.md | 12 + docs/License.md | 17 + docs/LicenseCeAdminProperties.md | 14 + docs/LicenseFeatures.md | 11 + docs/LicenseList.md | 11 + docs/LicensingApi.md | 108 +- docs/ListUsersResult.md | 15 + docs/ListUsersResults.md | 11 + docs/LogicalLocation.md | 11 + docs/Machine.md | 23 + docs/MachineAndPathAndPointInTime.md | 13 + ...ointInTime.md => MachineAndPointInTime.md} | 10 +- docs/MachineLicense.md | 12 + docs/MachineLifeCycle.md | 20 + docs/MachineReplicationConfiguration.md | 41 + docs/MachineReplicationInfo.md | 20 + .../MachineReplicationInfoInitiationStates.md | 11 + ...ineReplicationInfoInitiationStatesItems.md | 11 + docs/MachineSnapshotCredits.md | 10 + docs/MachineSourceProperties.md | 20 + docs/MachineSourcePropertiesCpu.md | 11 + docs/MachineSourcePropertiesDisks.md | 12 + ...neSourcePropertiesInstalledApplications.md | 12 + ...rcePropertiesInstalledApplicationsItems.md | 10 + .../MachineSourcePropertiesRunningServices.md | 12 + ...ineSourcePropertiesRunningServicesItems.md | 10 + docs/MachineThrottleTimeSeconds.md | 10 + docs/MachinesApi.md | 707 ++++- docs/MachinesList.md | 11 + docs/MachinesListInvalidIDsAndJob.md | 13 + docs/NetworkInterface.md | 12 + docs/Outpost.md | 12 + ...oudEndurePointInTime.md => PointInTime.md} | 9 +- docs/PointInTimeList.md | 11 + docs/PopulateJobNames.md | 11 + docs/PopulateJobParams.md | 12 + docs/Project.md | 26 + docs/ProjectApi.md | 473 +++- docs/ProjectCeAdminProperties.md | 12 + docs/ProjectFeatures.md | 18 + docs/ProjectStorage.md | 15 + docs/ProjectStorageWorkingStorage.md | 11 + docs/ProjectsAndUsers.md | 11 + docs/ProjectsAndUsersItems.md | 11 + docs/ProjectsList.md | 11 + docs/RecoveryPlan.md | 13 + docs/RecoveryPlanList.md | 11 + docs/RecoveryPlanStep.md | 13 + docs/RecoveryPlanSteps.md | 11 + docs/RecoveryPlansApi.md | 341 ++- docs/Region.md | 32 + docs/RegionsList.md | 11 + docs/Replica.md | 21 + docs/ReplicationApi.md | 481 +++- docs/ReplicationConfiguration.md | 41 + docs/ReplicationConfigurationList.md | 11 + ...ReplicationConfigurationReplicationTags.md | 11 + docs/SamlSettings.md | 12 + docs/SecurityGroup.md | 12 + docs/StorageLocation.md | 11 + docs/Subnet.md | 13 + docs/Time.md | 11 + docs/UpdateableScripts.md | 11 + docs/UpdateableScriptsResult.md | 24 + ...UpdateableScriptsResultOnPremiseVolumes.md | 12 + docs/UpgradeCounterDelay.md | 11 + docs/Usage.md | 14 + docs/UsageList.md | 11 + docs/User.md | 20 + docs/UserApi.md | 225 +- docs/UserReport.md | 19 + docs/UserReportGcpMachinesFinanceData.md | 10 + docs/UserReports.md | 11 + docs/UserSettings.md | 10 + docs/UserSettingsSendNotifications.md | 11 + docs/UsersAndRoles.md | 11 + docs/UsersAndRolesItems.md | 11 + docs/UsersList.md | 11 + examples/README.md | 6 - examples/json/policy.json | 62 - examples/terraform/README.md | 8 - examples/terraform/main.tf | 90 - examples/terraform/outputs.tf | 0 examples/terraform/variables.tf | 10 - images/ce_dataflow.png | Bin 282539 -> 0 bytes images/ce_migration_pipeline.png | Bin 185996 -> 0 bytes images/stepfunctions_graph.svg | 2 - lambda/__init__.py | 0 lambda/copy_ami.py | 110 - lambda/exceptions.py | 21 - lambda/handler.py | 147 - .../templates/README_common.mustache | 153 ++ .../templates/api_client.mustache | 891 +++++++ poetry.lock | 2368 +++-------------- pydocmd.yml | 158 -- pyproject.toml | 209 +- reference/swagger_config.json | 6 - setup.cfg | 84 - step/cloudwatch.tf | 36 - step/iam.tf | 139 - step/lambdas.tf | 160 -- step/lambdas/copy_image.py | 61 - step/lambdas/create_image.py | 46 - step/lambdas/find_instance.py | 76 - step/lambdas/get_copy_status.py | 63 - step/lambdas/get_image_status.py | 38 - step/lambdas/get_instance_status.py | 54 - step/lambdas/image_cleanup.py | 51 - step/lambdas/migrationstate.py | 77 - step/lambdas/share_image.py | 63 - step/lambdas/split_image.py | 92 - step/lambdas/update_status.py | 23 - step/provider.tf | 4 - step/sqs.tf | 11 - step/step-function.tf | 255 -- step/variable.tf | 11 - .../cloudendure_api/test => test}/__init__.py | 0 .../test_account.py | 32 +- .../test => test}/test_account_api.py | 19 +- test/test_account_ce_admin_properties.py | 35 + test/test_account_link.py | 35 + test/test_account_link_list.py | 37 + test/test_account_request.py | 35 + test/test_account_request_list.py | 37 + test/test_accounts_list.py | 37 + .../test => test}/test_actions_api.py | 40 +- ...est_agent_next_replication_init_request.py | 35 + .../test_all_project_features.py | 30 +- test/test_audit_log.py | 37 + test/test_audit_log_changed_field.py | 35 + .../test_audit_log_entry.py | 32 +- ..._audit_log_entry_participating_machines.py | 28 +- test/test_authentication_api.py | 42 + test/test_bandwidth_throttling.py | 35 + test/test_blueprint.py | 39 + .../test => test}/test_blueprint_api.py | 19 +- test/test_blueprint_disks.py | 35 + test/test_blueprint_list.py | 37 + test/test_cloud.py | 35 + .../test => test}/test_cloud_api.py | 19 +- .../test_cloud_credentials.py | 28 +- .../test_cloud_credentials_api.py | 19 +- test/test_cloud_credentials_list.py | 37 + test/test_cloud_credentials_request.py | 35 + test/test_clouds_list.py | 37 + test/test_compute_location.py | 35 + test/test_configurations.py | 35 + test/test_configurations_list.py | 37 + test/test_cslp_item.py | 35 + test/test_cslp_request.py | 37 + test/test_cslp_result.py | 37 + .../test => test}/test_default_api.py | 32 +- test/test_disk_config.py | 35 + test/test_dynamic_configuration.py | 35 + test/test_error.py | 35 + test/test_extended_account_info.py | 49 + test/test_gcp_machines_finance_data.py | 35 + ...est_identity_provider_redirect_response.py | 28 +- test/test_initialization_step.py | 35 + test/test_inline_object.py | 35 + test/test_inline_object1.py | 35 + test/test_inline_object10.py | 35 + test/test_inline_object2.py | 35 + test/test_inline_object3.py | 35 + test/test_inline_object4.py | 35 + test/test_inline_object5.py | 35 + test/test_inline_object6.py | 35 + test/test_inline_object7.py | 35 + test/test_inline_object8.py | 35 + test/test_inline_object9.py | 35 + test/test_inline_response200.py | 35 + test/test_inline_response2001.py | 35 + test/test_inline_response2002.py | 35 + test/test_job.py | 39 + test/test_job_log.py | 35 + test/test_job_target_machine.py | 35 + test/test_jobs_list.py | 37 + test/test_key_value_list.py | 37 + .../test_launch_machines_parameters.py | 34 +- ...aunch_machines_parameters_debug_scripts.py | 28 +- .../test_license.py | 32 +- test/test_license_ce_admin_properties.py | 35 + test/test_license_features.py | 35 + test/test_license_list.py | 37 + .../test => test}/test_licensing_api.py | 19 +- test/test_list_users_result.py | 35 + test/test_list_users_results.py | 37 + test/test_logical_location.py | 35 + test/test_machine.py | 47 + ...test_machine_and_path_and_point_in_time.py | 35 + test/test_machine_and_point_in_time.py | 35 + test/test_machine_license.py | 35 + test/test_machine_life_cycle.py | 35 + .../test_machine_replication_configuration.py | 34 +- .../test_machine_replication_info.py | 30 +- ...hine_replication_info_initiation_states.py | 30 +- ...eplication_info_initiation_states_items.py | 30 +- test/test_machine_snapshot_credits.py | 35 + test/test_machine_source_properties.py | 43 + test/test_machine_source_properties_cpu.py | 35 + test/test_machine_source_properties_disks.py | 35 + ...ource_properties_installed_applications.py | 30 +- ...properties_installed_applications_items.py | 35 + ...hine_source_properties_running_services.py | 30 +- ...ource_properties_running_services_items.py | 35 + test/test_machine_throttle_time_seconds.py | 35 + .../test => test}/test_machines_api.py | 28 +- test/test_machines_list.py | 37 + .../test_machines_list_invalid_ids_and_job.py | 32 +- test/test_network_interface.py | 35 + test/test_outpost.py | 35 + test/test_point_in_time.py | 35 + test/test_point_in_time_list.py | 37 + test/test_populate_job_names.py | 35 + test/test_populate_job_params.py | 35 + test/test_project.py | 39 + .../test => test}/test_project_api.py | 26 +- test/test_project_ce_admin_properties.py | 35 + test/test_project_features.py | 35 + test/test_project_storage.py | 37 + test/test_project_storage_working_storage.py | 35 + test/test_projects_and_users.py | 37 + test/test_projects_and_users_items.py | 35 + test/test_projects_list.py | 37 + test/test_recovery_plan.py | 37 + test/test_recovery_plan_list.py | 37 + test/test_recovery_plan_step.py | 35 + test/test_recovery_plan_steps.py | 37 + .../test => test}/test_recovery_plans_api.py | 19 +- test/test_region.py | 49 + test/test_regions_list.py | 37 + test/test_replica.py | 35 + .../test => test}/test_replication_api.py | 23 +- test/test_replication_configuration.py | 37 + .../test_replication_configuration_list.py | 30 +- ...lication_configuration_replication_tags.py | 35 + test/test_saml_settings.py | 35 + test/test_security_group.py | 35 + test/test_storage_location.py | 35 + test/test_subnet.py | 35 + test/test_time.py | 35 + test/test_updateable_scripts.py | 37 + test/test_updateable_scripts_result.py | 37 + ...eable_scripts_result_on_premise_volumes.py | 35 + test/test_upgrade_counter_delay.py | 35 + test/test_usage.py | 35 + test/test_usage_list.py | 37 + test/test_user.py | 37 + .../test => test}/test_user_api.py | 19 +- test/test_user_report.py | 37 + ...t_user_report_gcp_machines_finance_data.py | 30 +- test/test_user_reports.py | 37 + test/test_user_settings.py | 37 + test/test_user_settings_send_notifications.py | 35 + test/test_users_and_roles.py | 37 + test/test_users_and_roles_items.py | 35 + test/test_users_list.py | 37 + tox.ini | 8 - 741 files changed, 46204 insertions(+), 40012 deletions(-) delete mode 100644 .dockerignore delete mode 100644 .pre-commit-config.yaml delete mode 100644 .stickler.yml delete mode 100644 .travis.yml delete mode 100644 CHANGELOG.md delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 Dockerfile delete mode 100644 Dockerfile-py39 delete mode 100644 Pipfile delete mode 100644 REFERENCE.md delete mode 100644 SECURITY.md create mode 100644 build/.gitignore create mode 100644 build/fix-api.py create mode 100644 build/fix-generated-code.py delete mode 100644 cloudendure/__version__.py delete mode 100644 cloudendure/api.py create mode 100644 cloudendure/api/__init__.py create mode 100644 cloudendure/api/account_api.py create mode 100644 cloudendure/api/actions_api.py create mode 100644 cloudendure/api/authentication_api.py create mode 100644 cloudendure/api/blueprint_api.py create mode 100644 cloudendure/api/cloud_api.py create mode 100644 cloudendure/api/cloud_credentials_api.py create mode 100644 cloudendure/api/default_api.py create mode 100644 cloudendure/api/licensing_api.py create mode 100644 cloudendure/api/machines_api.py create mode 100644 cloudendure/api/project_api.py create mode 100644 cloudendure/api/recovery_plans_api.py create mode 100644 cloudendure/api/replication_api.py create mode 100644 cloudendure/api/user_api.py create mode 100644 cloudendure/api_client.py create mode 100644 cloudendure/apis/__init__.py delete mode 100644 cloudendure/aws.py delete mode 100644 cloudendure/cloudendure.py delete mode 100644 cloudendure/cloudendure_api/__init__.py delete mode 100644 cloudendure/cloudendure_api/api/__init__.py delete mode 100644 cloudendure/cloudendure_api/api/account_api.py delete mode 100644 cloudendure/cloudendure_api/api/actions_api.py delete mode 100644 cloudendure/cloudendure_api/api/authentication_api.py delete mode 100644 cloudendure/cloudendure_api/api/blueprint_api.py delete mode 100644 cloudendure/cloudendure_api/api/cloud_api.py delete mode 100644 cloudendure/cloudendure_api/api/cloud_credentials_api.py delete mode 100644 cloudendure/cloudendure_api/api/default_api.py delete mode 100644 cloudendure/cloudendure_api/api/licensing_api.py delete mode 100644 cloudendure/cloudendure_api/api/machines_api.py delete mode 100644 cloudendure/cloudendure_api/api/project_api.py delete mode 100644 cloudendure/cloudendure_api/api/recovery_plans_api.py delete mode 100644 cloudendure/cloudendure_api/api/replication_api.py delete mode 100644 cloudendure/cloudendure_api/api/user_api.py delete mode 100644 cloudendure/cloudendure_api/api_client.py delete mode 100644 cloudendure/cloudendure_api/configuration.py delete mode 100644 cloudendure/cloudendure_api/models/__init__.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_account.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_account_request.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_account_request_list.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_accounts_list.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_agent_next_replication_init_request.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_all_project_features.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_audit_log.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_audit_log_changed_field.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_audit_log_entry.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_bandwidth_throttling.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_blueprint.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_blueprint_list.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_cloud.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_cloud_credentials.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_cloud_credentials_list.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_cloud_credentials_request.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_clouds_list.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_compute_location.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_configurations.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_configurations_list.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_error.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_extended_account_info.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_find_files_parameters.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_find_files_result.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_find_files_result_pit.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_find_files_results.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_gcp_machines_finance_data.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_identity_provider_redirect_response.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_initialization_step.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_job.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_jobs_list.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_key_value_list.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_launch_machines_parameters.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_license.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_license_features.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_license_list.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_list_users_result.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_list_users_results.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_logical_location.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_machine.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_machine_and_path_and_point_in_time.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_machine_and_point_in_time.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_machine_replication_configuration.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_machine_snapshot_credits.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_machine_throttle_time_seconds.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_machines_list.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_machines_list_invalid_i_ds_and_job.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_network_interface.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_point_in_time.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_point_in_time_list.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_project.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_project_storage.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_projects_and_users.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_projects_list.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_recovery_plan.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_recovery_plan_list.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_recovery_plan_step.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_recovery_plan_steps.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_region.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_regions_list.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_replica.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_replication_configuration.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_replication_configuration_list.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_replication_server_config.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_restore_files_parameters.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_saml_settings.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_security_group.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_storage_location.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_subnet.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_time.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_updateable_scripts.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_upgrade_counter_delay.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_usage.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_usage_list.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_user.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_user_report.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_user_reports.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_users_and_roles.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_users_list.py delete mode 100644 cloudendure/cloudendure_api/models/cloud_endure_v_center_subnet.py delete mode 100644 cloudendure/cloudendure_api/test/test_authentication_api.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_agent_next_replication_init_request.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_all_project_features.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_audit_log_changed_field.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_audit_log_entry.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_bandwidth_throttling.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_blueprint_list.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_cloud_credentials.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_cloud_credentials_list.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_cloud_credentials_request.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_clouds_list.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_compute_location.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_configurations.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_configurations_list.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_extended_account_info.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_find_files_parameters.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_find_files_result.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_find_files_result_pit.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_find_files_results.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_identity_provider_redirect_response.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_initialization_step.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_jobs_list.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_key_value_list.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_launch_machines_parameters.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_license_features.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_license_list.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_list_users_result.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_list_users_results.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_logical_location.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_machine_and_path_and_point_in_time.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_machine_and_point_in_time.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_machine_replication_configuration.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_machine_snapshot_credits.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_machine_throttle_time_seconds.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_machines_list.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_machines_list_invalid_i_ds_and_job.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_network_interface.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_point_in_time.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_point_in_time_list.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_project.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_project_storage.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_projects_and_users.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_projects_list.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_recovery_plan.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_recovery_plan_list.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_recovery_plan_step.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_recovery_plan_steps.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_regions_list.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_replica.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_replication_configuration.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_replication_configuration_list.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_replication_server_config.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_restore_files_parameters.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_saml_settings.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_security_group.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_storage_location.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_updateable_scripts.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_upgrade_counter_delay.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_user_report.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_user_reports.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_users_and_roles.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_users_list.py delete mode 100644 cloudendure/cloudendure_api/test/test_cloud_endure_v_center_subnet.py delete mode 100644 cloudendure/config.py create mode 100644 cloudendure/configuration.py delete mode 100644 cloudendure/constants.py delete mode 100644 cloudendure/events.py create mode 100644 cloudendure/model/__init__.py create mode 100644 cloudendure/model/account.py create mode 100644 cloudendure/model/account_ce_admin_properties.py create mode 100644 cloudendure/model/account_link.py create mode 100644 cloudendure/model/account_link_list.py create mode 100644 cloudendure/model/account_request.py create mode 100644 cloudendure/model/account_request_list.py create mode 100644 cloudendure/model/accounts_list.py create mode 100644 cloudendure/model/agent_next_replication_init_request.py create mode 100644 cloudendure/model/all_project_features.py create mode 100644 cloudendure/model/audit_log.py create mode 100644 cloudendure/model/audit_log_changed_field.py create mode 100644 cloudendure/model/audit_log_entry.py create mode 100644 cloudendure/model/audit_log_entry_participating_machines.py create mode 100644 cloudendure/model/bandwidth_throttling.py create mode 100644 cloudendure/model/blueprint.py create mode 100644 cloudendure/model/blueprint_disks.py create mode 100644 cloudendure/model/blueprint_list.py create mode 100644 cloudendure/model/cloud.py create mode 100644 cloudendure/model/cloud_credentials.py create mode 100644 cloudendure/model/cloud_credentials_list.py create mode 100644 cloudendure/model/cloud_credentials_request.py create mode 100644 cloudendure/model/clouds_list.py create mode 100644 cloudendure/model/compute_location.py create mode 100644 cloudendure/model/configurations.py create mode 100644 cloudendure/model/configurations_list.py create mode 100644 cloudendure/model/cslp_item.py create mode 100644 cloudendure/model/cslp_request.py create mode 100644 cloudendure/model/cslp_result.py create mode 100644 cloudendure/model/disk_config.py create mode 100644 cloudendure/model/dynamic_configuration.py create mode 100644 cloudendure/model/error.py create mode 100644 cloudendure/model/extended_account_info.py create mode 100644 cloudendure/model/gcp_machines_finance_data.py create mode 100644 cloudendure/model/identity_provider_redirect_response.py create mode 100644 cloudendure/model/initialization_step.py create mode 100644 cloudendure/model/inline_object.py create mode 100644 cloudendure/model/inline_object1.py create mode 100644 cloudendure/model/inline_object10.py create mode 100644 cloudendure/model/inline_object2.py create mode 100644 cloudendure/model/inline_object3.py create mode 100644 cloudendure/model/inline_object4.py create mode 100644 cloudendure/model/inline_object5.py create mode 100644 cloudendure/model/inline_object6.py create mode 100644 cloudendure/model/inline_object7.py create mode 100644 cloudendure/model/inline_object8.py create mode 100644 cloudendure/model/inline_object9.py create mode 100644 cloudendure/model/inline_response200.py create mode 100644 cloudendure/model/inline_response2001.py create mode 100644 cloudendure/model/inline_response2002.py create mode 100644 cloudendure/model/job.py create mode 100644 cloudendure/model/job_log.py create mode 100644 cloudendure/model/job_target_machine.py create mode 100644 cloudendure/model/jobs_list.py create mode 100644 cloudendure/model/key_value_list.py create mode 100644 cloudendure/model/launch_machines_parameters.py create mode 100644 cloudendure/model/launch_machines_parameters_debug_scripts.py create mode 100644 cloudendure/model/license.py create mode 100644 cloudendure/model/license_ce_admin_properties.py create mode 100644 cloudendure/model/license_features.py create mode 100644 cloudendure/model/license_list.py create mode 100644 cloudendure/model/list_users_result.py create mode 100644 cloudendure/model/list_users_results.py create mode 100644 cloudendure/model/logical_location.py create mode 100644 cloudendure/model/machine.py create mode 100644 cloudendure/model/machine_and_path_and_point_in_time.py create mode 100644 cloudendure/model/machine_and_point_in_time.py create mode 100644 cloudendure/model/machine_license.py create mode 100644 cloudendure/model/machine_life_cycle.py create mode 100644 cloudendure/model/machine_replication_configuration.py create mode 100644 cloudendure/model/machine_replication_info.py create mode 100644 cloudendure/model/machine_replication_info_initiation_states.py create mode 100644 cloudendure/model/machine_replication_info_initiation_states_items.py create mode 100644 cloudendure/model/machine_snapshot_credits.py create mode 100644 cloudendure/model/machine_source_properties.py create mode 100644 cloudendure/model/machine_source_properties_cpu.py create mode 100644 cloudendure/model/machine_source_properties_disks.py create mode 100644 cloudendure/model/machine_source_properties_installed_applications.py create mode 100644 cloudendure/model/machine_source_properties_installed_applications_items.py create mode 100644 cloudendure/model/machine_source_properties_running_services.py create mode 100644 cloudendure/model/machine_source_properties_running_services_items.py create mode 100644 cloudendure/model/machine_throttle_time_seconds.py create mode 100644 cloudendure/model/machines_list.py create mode 100644 cloudendure/model/machines_list_invalid_ids_and_job.py create mode 100644 cloudendure/model/network_interface.py create mode 100644 cloudendure/model/outpost.py create mode 100644 cloudendure/model/point_in_time.py create mode 100644 cloudendure/model/point_in_time_list.py create mode 100644 cloudendure/model/populate_job_names.py create mode 100644 cloudendure/model/populate_job_params.py create mode 100644 cloudendure/model/project.py create mode 100644 cloudendure/model/project_ce_admin_properties.py create mode 100644 cloudendure/model/project_features.py create mode 100644 cloudendure/model/project_storage.py create mode 100644 cloudendure/model/project_storage_working_storage.py create mode 100644 cloudendure/model/projects_and_users.py create mode 100644 cloudendure/model/projects_and_users_items.py create mode 100644 cloudendure/model/projects_list.py create mode 100644 cloudendure/model/recovery_plan.py create mode 100644 cloudendure/model/recovery_plan_list.py create mode 100644 cloudendure/model/recovery_plan_step.py create mode 100644 cloudendure/model/recovery_plan_steps.py create mode 100644 cloudendure/model/region.py create mode 100644 cloudendure/model/regions_list.py create mode 100644 cloudendure/model/replica.py create mode 100644 cloudendure/model/replication_configuration.py create mode 100644 cloudendure/model/replication_configuration_list.py create mode 100644 cloudendure/model/replication_configuration_replication_tags.py create mode 100644 cloudendure/model/saml_settings.py create mode 100644 cloudendure/model/security_group.py create mode 100644 cloudendure/model/storage_location.py create mode 100644 cloudendure/model/subnet.py create mode 100644 cloudendure/model/time.py create mode 100644 cloudendure/model/updateable_scripts.py create mode 100644 cloudendure/model/updateable_scripts_result.py create mode 100644 cloudendure/model/updateable_scripts_result_on_premise_volumes.py create mode 100644 cloudendure/model/upgrade_counter_delay.py create mode 100644 cloudendure/model/usage.py create mode 100644 cloudendure/model/usage_list.py create mode 100644 cloudendure/model/user.py create mode 100644 cloudendure/model/user_report.py create mode 100644 cloudendure/model/user_report_gcp_machines_finance_data.py create mode 100644 cloudendure/model/user_reports.py create mode 100644 cloudendure/model/user_settings.py create mode 100644 cloudendure/model/user_settings_send_notifications.py create mode 100644 cloudendure/model/users_and_roles.py create mode 100644 cloudendure/model/users_and_roles_items.py create mode 100644 cloudendure/model/users_list.py create mode 100644 cloudendure/model_utils.py delete mode 100644 cloudendure/models.py create mode 100644 cloudendure/models/__init__.py rename cloudendure/{cloudendure_api => }/rest.py (81%) delete mode 100644 cloudendure/templates.py delete mode 100644 cloudendure/tests/__init__.py delete mode 100644 cloudendure/tests/test_utils.py delete mode 100644 cloudendure/utils.py delete mode 100644 docker-compose.yml delete mode 100644 docs/API_README.md create mode 100644 docs/Account.md create mode 100644 docs/AccountCeAdminProperties.md create mode 100644 docs/AccountLink.md create mode 100644 docs/AccountLinkList.md create mode 100644 docs/AccountRequest.md create mode 100644 docs/AccountRequestList.md create mode 100644 docs/AccountsList.md create mode 100644 docs/AgentNextReplicationInitRequest.md create mode 100644 docs/AllProjectFeatures.md create mode 100644 docs/AuditLog.md create mode 100644 docs/AuditLogChangedField.md create mode 100644 docs/AuditLogEntry.md create mode 100644 docs/AuditLogEntryParticipatingMachines.md create mode 100644 docs/BandwidthThrottling.md create mode 100644 docs/Blueprint.md create mode 100644 docs/BlueprintDisks.md create mode 100644 docs/BlueprintList.md create mode 100644 docs/CSLPItem.md create mode 100644 docs/CSLPRequest.md create mode 100644 docs/CSLPResult.md create mode 100644 docs/Cloud.md create mode 100644 docs/CloudCredentials.md create mode 100644 docs/CloudCredentialsList.md create mode 100644 docs/CloudCredentialsRequest.md delete mode 100644 docs/CloudEndureAccount.md delete mode 100644 docs/CloudEndureAccountRequest.md delete mode 100644 docs/CloudEndureAccountRequestList.md delete mode 100644 docs/CloudEndureAccountsList.md delete mode 100644 docs/CloudEndureAgentNextReplicationInitRequest.md delete mode 100644 docs/CloudEndureAllProjectFeatures.md delete mode 100644 docs/CloudEndureAuditLog.md delete mode 100644 docs/CloudEndureAuditLogChangedField.md delete mode 100644 docs/CloudEndureAuditLogEntry.md delete mode 100644 docs/CloudEndureBandwidthThrottling.md delete mode 100644 docs/CloudEndureBlueprint.md delete mode 100644 docs/CloudEndureBlueprintList.md delete mode 100644 docs/CloudEndureCloud.md delete mode 100644 docs/CloudEndureCloudCredentials.md delete mode 100644 docs/CloudEndureCloudCredentialsList.md delete mode 100644 docs/CloudEndureCloudCredentialsRequest.md delete mode 100644 docs/CloudEndureCloudsList.md delete mode 100644 docs/CloudEndureComputeLocation.md delete mode 100644 docs/CloudEndureConfigurations.md delete mode 100644 docs/CloudEndureConfigurationsList.md delete mode 100644 docs/CloudEndureError.md delete mode 100644 docs/CloudEndureExtendedAccountInfo.md delete mode 100644 docs/CloudEndureFindFilesParameters.md delete mode 100644 docs/CloudEndureFindFilesResult.md delete mode 100644 docs/CloudEndureFindFilesResultPit.md delete mode 100644 docs/CloudEndureFindFilesResults.md delete mode 100644 docs/CloudEndureGcpMachinesFinanceData.md delete mode 100644 docs/CloudEndureIdentityProviderRedirectResponse.md delete mode 100644 docs/CloudEndureInitializationStep.md delete mode 100644 docs/CloudEndureJob.md delete mode 100644 docs/CloudEndureJobsList.md delete mode 100644 docs/CloudEndureKeyValueList.md delete mode 100644 docs/CloudEndureLaunchMachinesParameters.md delete mode 100644 docs/CloudEndureLicense.md delete mode 100644 docs/CloudEndureLicenseFeatures.md delete mode 100644 docs/CloudEndureLicenseList.md delete mode 100644 docs/CloudEndureListUsersResult.md delete mode 100644 docs/CloudEndureListUsersResults.md delete mode 100644 docs/CloudEndureLogicalLocation.md delete mode 100644 docs/CloudEndureMachine.md delete mode 100644 docs/CloudEndureMachineAndPathAndPointInTime.md delete mode 100644 docs/CloudEndureMachineReplicationConfiguration.md delete mode 100644 docs/CloudEndureMachineSnapshotCredits.md delete mode 100644 docs/CloudEndureMachineThrottleTimeSeconds.md delete mode 100644 docs/CloudEndureMachinesList.md delete mode 100644 docs/CloudEndureMachinesListInvalidIDsAndJob.md delete mode 100644 docs/CloudEndureNetworkInterface.md delete mode 100644 docs/CloudEndurePointInTimeList.md delete mode 100644 docs/CloudEndureProject.md delete mode 100644 docs/CloudEndureProjectStorage.md delete mode 100644 docs/CloudEndureProjectsAndUsers.md delete mode 100644 docs/CloudEndureProjectsList.md delete mode 100644 docs/CloudEndureRecoveryPlan.md delete mode 100644 docs/CloudEndureRecoveryPlanList.md delete mode 100644 docs/CloudEndureRecoveryPlanStep.md delete mode 100644 docs/CloudEndureRecoveryPlanSteps.md delete mode 100644 docs/CloudEndureRegion.md delete mode 100644 docs/CloudEndureRegionsList.md delete mode 100644 docs/CloudEndureReplica.md delete mode 100644 docs/CloudEndureReplicationConfiguration.md delete mode 100644 docs/CloudEndureReplicationConfigurationList.md delete mode 100644 docs/CloudEndureReplicationServerConfig.md delete mode 100644 docs/CloudEndureRestoreFilesParameters.md delete mode 100644 docs/CloudEndureSamlSettings.md delete mode 100644 docs/CloudEndureSecurityGroup.md delete mode 100644 docs/CloudEndureStorageLocation.md delete mode 100644 docs/CloudEndureSubnet.md delete mode 100644 docs/CloudEndureTime.md delete mode 100644 docs/CloudEndureUpdateableScripts.md delete mode 100644 docs/CloudEndureUpgradeCounterDelay.md delete mode 100644 docs/CloudEndureUsage.md delete mode 100644 docs/CloudEndureUsageList.md delete mode 100644 docs/CloudEndureUser.md delete mode 100644 docs/CloudEndureUserReport.md delete mode 100644 docs/CloudEndureUserReports.md delete mode 100644 docs/CloudEndureUsersAndRoles.md delete mode 100644 docs/CloudEndureUsersList.md delete mode 100644 docs/CloudEndureVCenterSubnet.md create mode 100644 docs/CloudsList.md create mode 100644 docs/ComputeLocation.md create mode 100644 docs/Configurations.md create mode 100644 docs/ConfigurationsList.md create mode 100644 docs/DiskConfig.md create mode 100644 docs/DynamicConfiguration.md create mode 100644 docs/Error.md create mode 100644 docs/ExtendedAccountInfo.md create mode 100644 docs/GcpMachinesFinanceData.md create mode 100644 docs/IdentityProviderRedirectResponse.md create mode 100644 docs/InitializationStep.md create mode 100644 docs/InlineObject.md create mode 100644 docs/InlineObject1.md create mode 100644 docs/InlineObject10.md create mode 100644 docs/InlineObject2.md create mode 100644 docs/InlineObject3.md create mode 100644 docs/InlineObject4.md create mode 100644 docs/InlineObject5.md create mode 100644 docs/InlineObject6.md create mode 100644 docs/InlineObject7.md create mode 100644 docs/InlineObject8.md create mode 100644 docs/InlineObject9.md create mode 100644 docs/InlineResponse200.md create mode 100644 docs/InlineResponse2001.md create mode 100644 docs/InlineResponse2002.md create mode 100644 docs/Job.md create mode 100644 docs/JobLog.md create mode 100644 docs/JobTargetMachine.md create mode 100644 docs/JobsList.md create mode 100644 docs/KeyValueList.md create mode 100644 docs/LaunchMachinesParameters.md create mode 100644 docs/LaunchMachinesParametersDebugScripts.md create mode 100644 docs/License.md create mode 100644 docs/LicenseCeAdminProperties.md create mode 100644 docs/LicenseFeatures.md create mode 100644 docs/LicenseList.md create mode 100644 docs/ListUsersResult.md create mode 100644 docs/ListUsersResults.md create mode 100644 docs/LogicalLocation.md create mode 100644 docs/Machine.md create mode 100644 docs/MachineAndPathAndPointInTime.md rename docs/{CloudEndureMachineAndPointInTime.md => MachineAndPointInTime.md} (53%) create mode 100644 docs/MachineLicense.md create mode 100644 docs/MachineLifeCycle.md create mode 100644 docs/MachineReplicationConfiguration.md create mode 100644 docs/MachineReplicationInfo.md create mode 100644 docs/MachineReplicationInfoInitiationStates.md create mode 100644 docs/MachineReplicationInfoInitiationStatesItems.md create mode 100644 docs/MachineSnapshotCredits.md create mode 100644 docs/MachineSourceProperties.md create mode 100644 docs/MachineSourcePropertiesCpu.md create mode 100644 docs/MachineSourcePropertiesDisks.md create mode 100644 docs/MachineSourcePropertiesInstalledApplications.md create mode 100644 docs/MachineSourcePropertiesInstalledApplicationsItems.md create mode 100644 docs/MachineSourcePropertiesRunningServices.md create mode 100644 docs/MachineSourcePropertiesRunningServicesItems.md create mode 100644 docs/MachineThrottleTimeSeconds.md create mode 100644 docs/MachinesList.md create mode 100644 docs/MachinesListInvalidIDsAndJob.md create mode 100644 docs/NetworkInterface.md create mode 100644 docs/Outpost.md rename docs/{CloudEndurePointInTime.md => PointInTime.md} (50%) create mode 100644 docs/PointInTimeList.md create mode 100644 docs/PopulateJobNames.md create mode 100644 docs/PopulateJobParams.md create mode 100644 docs/Project.md create mode 100644 docs/ProjectCeAdminProperties.md create mode 100644 docs/ProjectFeatures.md create mode 100644 docs/ProjectStorage.md create mode 100644 docs/ProjectStorageWorkingStorage.md create mode 100644 docs/ProjectsAndUsers.md create mode 100644 docs/ProjectsAndUsersItems.md create mode 100644 docs/ProjectsList.md create mode 100644 docs/RecoveryPlan.md create mode 100644 docs/RecoveryPlanList.md create mode 100644 docs/RecoveryPlanStep.md create mode 100644 docs/RecoveryPlanSteps.md create mode 100644 docs/Region.md create mode 100644 docs/RegionsList.md create mode 100644 docs/Replica.md create mode 100644 docs/ReplicationConfiguration.md create mode 100644 docs/ReplicationConfigurationList.md create mode 100644 docs/ReplicationConfigurationReplicationTags.md create mode 100644 docs/SamlSettings.md create mode 100644 docs/SecurityGroup.md create mode 100644 docs/StorageLocation.md create mode 100644 docs/Subnet.md create mode 100644 docs/Time.md create mode 100644 docs/UpdateableScripts.md create mode 100644 docs/UpdateableScriptsResult.md create mode 100644 docs/UpdateableScriptsResultOnPremiseVolumes.md create mode 100644 docs/UpgradeCounterDelay.md create mode 100644 docs/Usage.md create mode 100644 docs/UsageList.md create mode 100644 docs/User.md create mode 100644 docs/UserReport.md create mode 100644 docs/UserReportGcpMachinesFinanceData.md create mode 100644 docs/UserReports.md create mode 100644 docs/UserSettings.md create mode 100644 docs/UserSettingsSendNotifications.md create mode 100644 docs/UsersAndRoles.md create mode 100644 docs/UsersAndRolesItems.md create mode 100644 docs/UsersList.md delete mode 100644 examples/README.md delete mode 100644 examples/json/policy.json delete mode 100644 examples/terraform/README.md delete mode 100644 examples/terraform/main.tf delete mode 100644 examples/terraform/outputs.tf delete mode 100644 examples/terraform/variables.tf delete mode 100644 images/ce_dataflow.png delete mode 100644 images/ce_migration_pipeline.png delete mode 100644 images/stepfunctions_graph.svg delete mode 100644 lambda/__init__.py delete mode 100644 lambda/copy_ami.py delete mode 100644 lambda/exceptions.py delete mode 100644 lambda/handler.py create mode 100644 openapi-generator/templates/README_common.mustache create mode 100644 openapi-generator/templates/api_client.mustache delete mode 100644 pydocmd.yml delete mode 100644 reference/swagger_config.json delete mode 100644 setup.cfg delete mode 100644 step/cloudwatch.tf delete mode 100644 step/iam.tf delete mode 100644 step/lambdas.tf delete mode 100644 step/lambdas/copy_image.py delete mode 100644 step/lambdas/create_image.py delete mode 100644 step/lambdas/find_instance.py delete mode 100644 step/lambdas/get_copy_status.py delete mode 100644 step/lambdas/get_image_status.py delete mode 100644 step/lambdas/get_instance_status.py delete mode 100644 step/lambdas/image_cleanup.py delete mode 100644 step/lambdas/migrationstate.py delete mode 100644 step/lambdas/share_image.py delete mode 100644 step/lambdas/split_image.py delete mode 100644 step/lambdas/update_status.py delete mode 100644 step/provider.tf delete mode 100644 step/sqs.tf delete mode 100644 step/step-function.tf delete mode 100644 step/variable.tf rename {cloudendure/cloudendure_api/test => test}/__init__.py (100%) rename cloudendure/cloudendure_api/test/test_cloud_endure_job.py => test/test_account.py (61%) rename {cloudendure/cloudendure_api/test => test}/test_account_api.py (71%) create mode 100644 test/test_account_ce_admin_properties.py create mode 100644 test/test_account_link.py create mode 100644 test/test_account_link_list.py create mode 100644 test/test_account_request.py create mode 100644 test/test_account_request_list.py create mode 100644 test/test_accounts_list.py rename {cloudendure/cloudendure_api/test => test}/test_actions_api.py (71%) create mode 100644 test/test_agent_next_replication_init_request.py rename cloudendure/cloudendure_api/test/test_cloud_endure_user.py => test/test_all_project_features.py (61%) create mode 100644 test/test_audit_log.py create mode 100644 test/test_audit_log_changed_field.py rename cloudendure/cloudendure_api/test/test_cloud_endure_accounts_list.py => test/test_audit_log_entry.py (58%) rename cloudendure/cloudendure_api/test/test_cloud_endure_usage.py => test/test_audit_log_entry_participating_machines.py (61%) create mode 100644 test/test_authentication_api.py create mode 100644 test/test_bandwidth_throttling.py create mode 100644 test/test_blueprint.py rename {cloudendure/cloudendure_api/test => test}/test_blueprint_api.py (78%) create mode 100644 test/test_blueprint_disks.py create mode 100644 test/test_blueprint_list.py create mode 100644 test/test_cloud.py rename {cloudendure/cloudendure_api/test => test}/test_cloud_api.py (80%) rename cloudendure/cloudendure_api/test/test_cloud_endure_cloud.py => test/test_cloud_credentials.py (61%) rename {cloudendure/cloudendure_api/test => test}/test_cloud_credentials_api.py (76%) create mode 100644 test/test_cloud_credentials_list.py create mode 100644 test/test_cloud_credentials_request.py create mode 100644 test/test_clouds_list.py create mode 100644 test/test_compute_location.py create mode 100644 test/test_configurations.py create mode 100644 test/test_configurations_list.py create mode 100644 test/test_cslp_item.py create mode 100644 test/test_cslp_request.py create mode 100644 test/test_cslp_result.py rename {cloudendure/cloudendure_api/test => test}/test_default_api.py (80%) create mode 100644 test/test_disk_config.py create mode 100644 test/test_dynamic_configuration.py create mode 100644 test/test_error.py create mode 100644 test/test_extended_account_info.py create mode 100644 test/test_gcp_machines_finance_data.py rename cloudendure/cloudendure_api/test/test_cloud_endure_time.py => test/test_identity_provider_redirect_response.py (61%) create mode 100644 test/test_initialization_step.py create mode 100644 test/test_inline_object.py create mode 100644 test/test_inline_object1.py create mode 100644 test/test_inline_object10.py create mode 100644 test/test_inline_object2.py create mode 100644 test/test_inline_object3.py create mode 100644 test/test_inline_object4.py create mode 100644 test/test_inline_object5.py create mode 100644 test/test_inline_object6.py create mode 100644 test/test_inline_object7.py create mode 100644 test/test_inline_object8.py create mode 100644 test/test_inline_object9.py create mode 100644 test/test_inline_response200.py create mode 100644 test/test_inline_response2001.py create mode 100644 test/test_inline_response2002.py create mode 100644 test/test_job.py create mode 100644 test/test_job_log.py create mode 100644 test/test_job_target_machine.py create mode 100644 test/test_jobs_list.py create mode 100644 test/test_key_value_list.py rename cloudendure/cloudendure_api/test/test_cloud_endure_account_request_list.py => test/test_launch_machines_parameters.py (55%) rename cloudendure/cloudendure_api/test/test_cloud_endure_subnet.py => test/test_launch_machines_parameters_debug_scripts.py (61%) rename cloudendure/cloudendure_api/test/test_cloud_endure_error.py => test/test_license.py (61%) create mode 100644 test/test_license_ce_admin_properties.py create mode 100644 test/test_license_features.py create mode 100644 test/test_license_list.py rename {cloudendure/cloudendure_api/test => test}/test_licensing_api.py (73%) create mode 100644 test/test_list_users_result.py create mode 100644 test/test_list_users_results.py create mode 100644 test/test_logical_location.py create mode 100644 test/test_machine.py create mode 100644 test/test_machine_and_path_and_point_in_time.py create mode 100644 test/test_machine_and_point_in_time.py create mode 100644 test/test_machine_license.py create mode 100644 test/test_machine_life_cycle.py rename cloudendure/cloudendure_api/test/test_cloud_endure_gcp_machines_finance_data.py => test/test_machine_replication_configuration.py (55%) rename cloudendure/cloudendure_api/test/test_cloud_endure_blueprint.py => test/test_machine_replication_info.py (59%) rename cloudendure/cloudendure_api/test/test_cloud_endure_license.py => test/test_machine_replication_info_initiation_states.py (56%) rename cloudendure/cloudendure_api/test/test_cloud_endure_usage_list.py => test/test_machine_replication_info_initiation_states_items.py (58%) create mode 100644 test/test_machine_snapshot_credits.py create mode 100644 test/test_machine_source_properties.py create mode 100644 test/test_machine_source_properties_cpu.py create mode 100644 test/test_machine_source_properties_disks.py rename cloudendure/cloudendure_api/test/test_cloud_endure_account_request.py => test/test_machine_source_properties_installed_applications.py (54%) create mode 100644 test/test_machine_source_properties_installed_applications_items.py rename cloudendure/cloudendure_api/test/test_cloud_endure_machine.py => test/test_machine_source_properties_running_services.py (56%) create mode 100644 test/test_machine_source_properties_running_services_items.py create mode 100644 test/test_machine_throttle_time_seconds.py rename {cloudendure/cloudendure_api/test => test}/test_machines_api.py (81%) create mode 100644 test/test_machines_list.py rename cloudendure/cloudendure_api/test/test_cloud_endure_region.py => test/test_machines_list_invalid_ids_and_job.py (60%) create mode 100644 test/test_network_interface.py create mode 100644 test/test_outpost.py create mode 100644 test/test_point_in_time.py create mode 100644 test/test_point_in_time_list.py create mode 100644 test/test_populate_job_names.py create mode 100644 test/test_populate_job_params.py create mode 100644 test/test_project.py rename {cloudendure/cloudendure_api/test => test}/test_project_api.py (80%) create mode 100644 test/test_project_ce_admin_properties.py create mode 100644 test/test_project_features.py create mode 100644 test/test_project_storage.py create mode 100644 test/test_project_storage_working_storage.py create mode 100644 test/test_projects_and_users.py create mode 100644 test/test_projects_and_users_items.py create mode 100644 test/test_projects_list.py create mode 100644 test/test_recovery_plan.py create mode 100644 test/test_recovery_plan_list.py create mode 100644 test/test_recovery_plan_step.py create mode 100644 test/test_recovery_plan_steps.py rename {cloudendure/cloudendure_api/test => test}/test_recovery_plans_api.py (82%) create mode 100644 test/test_region.py create mode 100644 test/test_regions_list.py create mode 100644 test/test_replica.py rename {cloudendure/cloudendure_api/test => test}/test_replication_api.py (83%) create mode 100644 test/test_replication_configuration.py rename cloudendure/cloudendure_api/test/test_cloud_endure_account.py => test/test_replication_configuration_list.py (60%) create mode 100644 test/test_replication_configuration_replication_tags.py create mode 100644 test/test_saml_settings.py create mode 100644 test/test_security_group.py create mode 100644 test/test_storage_location.py create mode 100644 test/test_subnet.py create mode 100644 test/test_time.py create mode 100644 test/test_updateable_scripts.py create mode 100644 test/test_updateable_scripts_result.py create mode 100644 test/test_updateable_scripts_result_on_premise_volumes.py create mode 100644 test/test_upgrade_counter_delay.py create mode 100644 test/test_usage.py create mode 100644 test/test_usage_list.py create mode 100644 test/test_user.py rename {cloudendure/cloudendure_api/test => test}/test_user_api.py (77%) create mode 100644 test/test_user_report.py rename cloudendure/cloudendure_api/test/test_cloud_endure_audit_log.py => test/test_user_report_gcp_machines_finance_data.py (59%) create mode 100644 test/test_user_reports.py create mode 100644 test/test_user_settings.py create mode 100644 test/test_user_settings_send_notifications.py create mode 100644 test/test_users_and_roles.py create mode 100644 test/test_users_and_roles_items.py create mode 100644 test/test_users_list.py delete mode 100644 tox.ini diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index e75fe32a2..000000000 --- a/.dockerignore +++ /dev/null @@ -1,37 +0,0 @@ -.gitignore -LICENSE -*.md -reference/ -.mypy_cache/ -.pytest_cache/ -.github/ - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# Docs -_build/ - -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# pyenv -.python-version diff --git a/.gitignore b/.gitignore index 663d8c9dc..5baeaaa7b 100644 --- a/.gitignore +++ b/.gitignore @@ -6,12 +6,9 @@ __pycache__/ # C extensions *.so -# Docs -_build/ - # Distribution / packaging .Python -build/ +env/ develop-eggs/ dist/ downloads/ @@ -22,11 +19,9 @@ lib64/ parts/ sdist/ var/ -wheels/ *.egg-info/ .installed.cfg *.egg -MANIFEST # PyInstaller # Usually these files are written by a python script from a template @@ -46,9 +41,12 @@ htmlcov/ .cache nosetests.xml coverage.xml -*.cover +*,cover .hypothesis/ -.pytest_cache/ +venv/ +.venv/ +.python-version +.pytest_cache # Translations *.mo @@ -56,15 +54,6 @@ coverage.xml # Django stuff: *.log -local_settings.py -db.sqlite3 - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy # Sphinx documentation docs/_build/ @@ -72,48 +61,11 @@ docs/_build/ # PyBuilder target/ -# Jupyter Notebook +#Ipython Notebook .ipynb_checkpoints -# pyenv -.python-version - -# celery beat schedule file -celerybeat-schedule - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.vscode/settings.json - -# archives -*.zip - -# terraform builds -.terraform/ -terraform.tfstate* -*.tfvars +# vim saves +*.sw* +my-test.py -# vscode -.vscode/ +.openapi-generator/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml deleted file mode 100644 index 0bc37811f..000000000 --- a/.pre-commit-config.yaml +++ /dev/null @@ -1,25 +0,0 @@ -repos: -- repo: https://github.com/pre-commit/pre-commit-hooks - rev: 'v2.2.3' - hooks: - - id: trailing-whitespace - - id: check-executables-have-shebangs - - id: check-merge-conflict - - id: debug-statements - - id: end-of-file-fixer - - id: fix-encoding-pragma -- repo: https://github.com/antonbabenko/pre-commit-terraform - rev: 'v1.12.0' - hooks: - - id: terraform_fmt - - id: terraform_docs -- repo: https://github.com/jumanjihouse/pre-commit-hooks - sha: '1.11.0' - hooks: - - id: forbid-binary - - id: markdownlint - - id: require-ascii -- repo: https://github.com/pre-commit/mirrors-isort - rev: 'v4.3.20' - hooks: - - id: isort diff --git a/.stickler.yml b/.stickler.yml deleted file mode 100644 index 4d0bd7fba..000000000 --- a/.stickler.yml +++ /dev/null @@ -1,10 +0,0 @@ ---- -linters: - black: - fixer: false - py36: true - flake8: - python: 3 - max-line-length: 120 - max-complexity: 20 - fixer: false diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index ff47f3798..000000000 --- a/.travis.yml +++ /dev/null @@ -1,43 +0,0 @@ -language: python -dist: xenial -sudo: true -os: - - linux -install: "make" - -services: - - docker - -cache: pip - -jobs: - include: - - stage: publish - python: '3.7' - script: - - poetry install - - pydocmd build - deploy: - - provider: pages - skip-cleanup: true - github-token: $GITHUB_TOKEN - keep-history: true - local-dir: _build/site - target-branch: gh-pages - on: - branch: master - - provider: pypi - user: $PYPI_USER - password: $PYPI_PASSWORD - distributions: "sdist bdist_wheel" - skip_existing: true - skip_cleanup: true - on: - tags: true - - provider: releases - api_key: $GITHUB_TOKEN - file: - - "dist/cloudendure-*-py3-none-any.whl" - - "dist/cloudendure-*.tar.gz" - on: - tags: true diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index a9415d03f..000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,290 +0,0 @@ -# Change Log - -## [v0.2.1](https://github.com/2ndWatch/cloudendure-python/tree/v0.2.1) (2020-03-24) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/v0.2.0...v0.2.1) - -**Implemented enhancements:** - -- Adjust project configs and update deps [\#104](https://github.com/2ndWatch/cloudendure-python/pull/104) ([mbeacom](https://github.com/mbeacom)) - -**Fixed bugs:** - -- Docker build errors [\#102](https://github.com/2ndWatch/cloudendure-python/issues/102) -- Adjust Docker image [\#103](https://github.com/2ndWatch/cloudendure-python/pull/103) ([mbeacom](https://github.com/mbeacom)) - -## [v0.2.0](https://github.com/2ndWatch/cloudendure-python/tree/v0.2.0) (2020-03-24) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/v0.1.10...v0.2.0) - -**Implemented enhancements:** - -- Migrate environment management from pipenv to poetry [\#97](https://github.com/2ndWatch/cloudendure-python/issues/97) -- Converted project from using pipenv to poetry [\#98](https://github.com/2ndWatch/cloudendure-python/pull/98) ([selpan](https://github.com/selpan)) - -**Merged pull requests:** - -- Bump bleach from 3.1.1 to 3.1.2 [\#101](https://github.com/2ndWatch/cloudendure-python/pull/101) ([dependabot[bot]](https://github.com/apps/dependabot)) - -## [v0.1.10](https://github.com/2ndWatch/cloudendure-python/tree/v0.1.10) (2020-03-24) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/v0.1.9...v0.1.10) - -**Implemented enhancements:** - -- Update API explorer to use Bravado [\#64](https://github.com/2ndWatch/cloudendure-python/issues/64) - -**Fixed bugs:** - -- Missing depedency [\#99](https://github.com/2ndWatch/cloudendure-python/issues/99) -- Adjust setup.py to conform to pipfile [\#100](https://github.com/2ndWatch/cloudendure-python/pull/100) ([mbeacom](https://github.com/mbeacom)) - -## [v0.1.9](https://github.com/2ndWatch/cloudendure-python/tree/v0.1.9) (2020-03-20) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/v0.1.8...v0.1.9) - -**Fixed bugs:** - -- YAML module missing after pipenv install [\#94](https://github.com/2ndWatch/cloudendure-python/issues/94) -- Added pyyaml package to Pipfile [\#95](https://github.com/2ndWatch/cloudendure-python/pull/95) ([selpan](https://github.com/selpan)) - -**Closed issues:** - -- Migrate environment management from pipenv to poetry [\#96](https://github.com/2ndWatch/cloudendure-python/issues/96) - -## [v0.1.8](https://github.com/2ndWatch/cloudendure-python/tree/v0.1.8) (2019-11-26) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/v0.1.7...v0.1.8) - -**Implemented enhancements:** - -- Update CE to handle instance type updates [\#93](https://github.com/2ndWatch/cloudendure-python/pull/93) ([mbeacom](https://github.com/mbeacom)) - -## [v0.1.7](https://github.com/2ndWatch/cloudendure-python/tree/v0.1.7) (2019-11-21) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/v0.1.6...v0.1.7) - -## [v0.1.6](https://github.com/2ndWatch/cloudendure-python/tree/v0.1.6) (2019-11-21) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/v0.1.5...v0.1.6) - -**Implemented enhancements:** - -- Add check for sg/subnet existance in config and patch privateIPAction [\#92](https://github.com/2ndWatch/cloudendure-python/pull/92) ([mbeacom](https://github.com/mbeacom)) -- add in support for custom subnet and security groups [\#91](https://github.com/2ndWatch/cloudendure-python/pull/91) ([twarnock](https://github.com/twarnock)) - -**Merged pull requests:** - -- removing duplicated tag in ec2 resource [\#90](https://github.com/2ndWatch/cloudendure-python/pull/90) ([twarnock](https://github.com/twarnock)) -- get\_copy\_status now uses role assumption [\#89](https://github.com/2ndWatch/cloudendure-python/pull/89) ([twarnock](https://github.com/twarnock)) -- change to using describe\_instances vs \_status. linted. [\#88](https://github.com/2ndWatch/cloudendure-python/pull/88) ([twarnock](https://github.com/twarnock)) - -## [v0.1.5](https://github.com/2ndWatch/cloudendure-python/tree/v0.1.5) (2019-10-22) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/v0.1.4...v0.1.5) - -## [v0.1.4](https://github.com/2ndWatch/cloudendure-python/tree/v0.1.4) (2019-10-22) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/0.1.4...v0.1.4) - -## [0.1.4](https://github.com/2ndWatch/cloudendure-python/tree/0.1.4) (2019-10-22) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/v0.1.3...0.1.4) - -## [v0.1.3](https://github.com/2ndWatch/cloudendure-python/tree/v0.1.3) (2019-10-22) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/0.1.3...v0.1.3) - -## [0.1.3](https://github.com/2ndWatch/cloudendure-python/tree/0.1.3) (2019-10-22) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/v0.1.2...0.1.3) - -**Implemented enhancements:** - -- Update servicenow lambda refs to conform to generic status update [\#87](https://github.com/2ndWatch/cloudendure-python/pull/87) ([mbeacom](https://github.com/mbeacom)) - -## [v0.1.2](https://github.com/2ndWatch/cloudendure-python/tree/v0.1.2) (2019-10-07) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/v0.1.1...v0.1.2) - -**Implemented enhancements:** - -- 0.1.1 [\#80](https://github.com/2ndWatch/cloudendure-python/pull/80) ([mbeacom](https://github.com/mbeacom)) - -**Closed issues:** - -- Make lambdas more generic [\#85](https://github.com/2ndWatch/cloudendure-python/issues/85) -- Update Blueprint Removes Disks [\#81](https://github.com/2ndWatch/cloudendure-python/issues/81) - -**Merged pull requests:** - -- Fix \#85 generic migration state [\#86](https://github.com/2ndWatch/cloudendure-python/pull/86) ([twarnock](https://github.com/twarnock)) -- Step sqs [\#84](https://github.com/2ndWatch/cloudendure-python/pull/84) ([twarnock](https://github.com/twarnock)) -- Update dependencies [\#83](https://github.com/2ndWatch/cloudendure-python/pull/83) ([mbeacom](https://github.com/mbeacom)) -- Fixes \#81 fix update blueprint [\#82](https://github.com/2ndWatch/cloudendure-python/pull/82) ([twarnock](https://github.com/twarnock)) - -## [v0.1.1](https://github.com/2ndWatch/cloudendure-python/tree/v0.1.1) (2019-09-26) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/v0.1.0...v0.1.1) - -**Implemented enhancements:** - -- Add cookiecutter base handler [\#74](https://github.com/2ndWatch/cloudendure-python/pull/74) ([mbeacom](https://github.com/mbeacom)) - -**Merged pull requests:** - -- included cloudwatch event. changed tf to ce for lambdas. assumed role as a variable. [\#79](https://github.com/2ndWatch/cloudendure-python/pull/79) ([twarnock](https://github.com/twarnock)) -- moved to png. added dataflow [\#78](https://github.com/2ndWatch/cloudendure-python/pull/78) ([twarnock](https://github.com/twarnock)) - -## [v0.1.0](https://github.com/2ndWatch/cloudendure-python/tree/v0.1.0) (2019-09-06) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/v0.0.10...v0.1.0) - -**Implemented enhancements:** - -- Adjust machine replication [\#75](https://github.com/2ndWatch/cloudendure-python/issues/75) -- CLI authentication [\#66](https://github.com/2ndWatch/cloudendure-python/issues/66) -- Simplify project method args and init flow [\#55](https://github.com/2ndWatch/cloudendure-python/issues/55) -- Configurable disk type for blueprints [\#46](https://github.com/2ndWatch/cloudendure-python/issues/46) -- Configurable PublicIPAction for blueprints [\#45](https://github.com/2ndWatch/cloudendure-python/issues/45) -- Handle MFA/SAML between AWS and CloudEndure [\#5](https://github.com/2ndWatch/cloudendure-python/issues/5) -- Add replication control for machines [\#76](https://github.com/2ndWatch/cloudendure-python/pull/76) ([mbeacom](https://github.com/mbeacom)) -- Project provisioning [\#72](https://github.com/2ndWatch/cloudendure-python/pull/72) ([mbeacom](https://github.com/mbeacom)) -- delete-image and terminate added [\#69](https://github.com/2ndWatch/cloudendure-python/pull/69) ([twarnock](https://github.com/twarnock)) -- Add cli auth and adjust user api token handling [\#67](https://github.com/2ndWatch/cloudendure-python/pull/67) ([mbeacom](https://github.com/mbeacom)) -- Adjust init flow and user feedback [\#56](https://github.com/2ndWatch/cloudendure-python/pull/56) ([mbeacom](https://github.com/mbeacom)) -- made step more readable. modified input/output to just use critical data [\#53](https://github.com/2ndWatch/cloudendure-python/pull/53) ([twarnock](https://github.com/twarnock)) -- Fix \#45 \#46 - Update config and CE module to update public\_ip and dis… [\#47](https://github.com/2ndWatch/cloudendure-python/pull/47) ([mbeacom](https://github.com/mbeacom)) -- Step functions refactor. get-terraform can use tagging module [\#44](https://github.com/2ndWatch/cloudendure-python/pull/44) ([twarnock](https://github.com/twarnock)) - -**Fixed bugs:** - -- CloudEndure token usage not working [\#63](https://github.com/2ndWatch/cloudendure-python/issues/63) -- Running gen-terraform against tagless AMIs results in error [\#51](https://github.com/2ndWatch/cloudendure-python/issues/51) -- Update CloudEndureConfig to use destination\_account vs accounts [\#49](https://github.com/2ndWatch/cloudendure-python/issues/49) -- Adjust CLI/config consolidation to avoid overwrites with empty values [\#68](https://github.com/2ndWatch/cloudendure-python/pull/68) ([mbeacom](https://github.com/mbeacom)) -- Check for nonetype before iterating through image.tags [\#52](https://github.com/2ndWatch/cloudendure-python/pull/52) ([mbeacom](https://github.com/mbeacom)) - -**Closed issues:** - -- CE worker lambda diagram [\#54](https://github.com/2ndWatch/cloudendure-python/issues/54) - -**Merged pull requests:** - -- Add Github action for pypi build/publishing [\#77](https://github.com/2ndWatch/cloudendure-python/pull/77) ([mbeacom](https://github.com/mbeacom)) -- changes to support STS. [\#70](https://github.com/2ndWatch/cloudendure-python/pull/70) ([twarnock](https://github.com/twarnock)) -- Update pythonpackage.yml [\#62](https://github.com/2ndWatch/cloudendure-python/pull/62) ([mbeacom](https://github.com/mbeacom)) -- Update gh pages workflow [\#61](https://github.com/2ndWatch/cloudendure-python/pull/61) ([mbeacom](https://github.com/mbeacom)) -- Update repo from transfer and make minor adjustments [\#60](https://github.com/2ndWatch/cloudendure-python/pull/60) ([mbeacom](https://github.com/mbeacom)) -- Optimize SVG for size [\#59](https://github.com/2ndWatch/cloudendure-python/pull/59) ([mbeacom](https://github.com/mbeacom)) -- Added diagram [\#58](https://github.com/2ndWatch/cloudendure-python/pull/58) ([twarnock](https://github.com/twarnock)) -- Create CODE\_OF\_CONDUCT.md [\#57](https://github.com/2ndWatch/cloudendure-python/pull/57) ([mbeacom](https://github.com/mbeacom)) -- Update config for single destination account [\#50](https://github.com/2ndWatch/cloudendure-python/pull/50) ([mbeacom](https://github.com/mbeacom)) -- moved to sharing to a single account [\#48](https://github.com/2ndWatch/cloudendure-python/pull/48) ([twarnock](https://github.com/twarnock)) - -## [v0.0.10](https://github.com/2ndWatch/cloudendure-python/tree/v0.0.10) (2019-08-23) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/docker-base-layer...v0.0.10) - -**Merged pull requests:** - -- Cross region support for copy\_and\_split. gen\_terraform fixes [\#43](https://github.com/2ndWatch/cloudendure-python/pull/43) ([twarnock](https://github.com/twarnock)) - -## [docker-base-layer](https://github.com/2ndWatch/cloudendure-python/tree/docker-base-layer) (2019-08-23) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/v0.0.9...docker-base-layer) - -**Merged pull requests:** - -- Remove launch types [\#42](https://github.com/2ndWatch/cloudendure-python/pull/42) ([mbeacom](https://github.com/mbeacom)) - -## [v0.0.9](https://github.com/2ndWatch/cloudendure-python/tree/v0.0.9) (2019-08-22) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/v0.0.8...v0.0.9) - -**Closed issues:** - -- Deprecate launch\_type throughout project [\#41](https://github.com/2ndWatch/cloudendure-python/issues/41) - -## [v0.0.8](https://github.com/2ndWatch/cloudendure-python/tree/v0.0.8) (2019-08-22) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/v0.0.7...v0.0.8) - -**Implemented enhancements:** - -- Generate generic output infrastructure-as-code projects for migration waves [\#29](https://github.com/2ndWatch/cloudendure-python/issues/29) - -**Merged pull requests:** - -- Step function [\#40](https://github.com/2ndWatch/cloudendure-python/pull/40) ([twarnock](https://github.com/twarnock)) -- tf generator first pass. various fixes [\#39](https://github.com/2ndWatch/cloudendure-python/pull/39) ([twarnock](https://github.com/twarnock)) - -## [v0.0.7](https://github.com/2ndWatch/cloudendure-python/tree/v0.0.7) (2019-08-13) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/v0.0.6...v0.0.7) - -**Implemented enhancements:** - -- Migrate all config items to config module [\#28](https://github.com/2ndWatch/cloudendure-python/issues/28) -- Update replication settings to conform to desired KMS usage [\#24](https://github.com/2ndWatch/cloudendure-python/issues/24) -- Update main CLI handling to employ defined exceptions/feedback loops [\#6](https://github.com/2ndWatch/cloudendure-python/issues/6) -- Add typing throughout and import annotations from future [\#35](https://github.com/2ndWatch/cloudendure-python/pull/35) ([mbeacom](https://github.com/mbeacom)) -- Update documentation with events entry and logos [\#34](https://github.com/2ndWatch/cloudendure-python/pull/34) ([mbeacom](https://github.com/mbeacom)) -- Move all configs to use Config for env and yaml [\#33](https://github.com/2ndWatch/cloudendure-python/pull/33) ([mbeacom](https://github.com/mbeacom)) -- Add base event handler and implementation on launch function [\#32](https://github.com/2ndWatch/cloudendure-python/pull/32) ([mbeacom](https://github.com/mbeacom)) -- Change image name to avoid blowup [\#26](https://github.com/2ndWatch/cloudendure-python/pull/26) ([twarnock](https://github.com/twarnock)) - -**Fixed bugs:** - -- Bug in update blueprint flow [\#10](https://github.com/2ndWatch/cloudendure-python/issues/10) -- Image creation failure [\#9](https://github.com/2ndWatch/cloudendure-python/issues/9) -- Share AMI should pull image id from env/config [\#8](https://github.com/2ndWatch/cloudendure-python/issues/8) -- Bug in last launch checks in main cli [\#7](https://github.com/2ndWatch/cloudendure-python/issues/7) - -**Closed issues:** - -- Remove 3.6 support and prepare 0.0.7 [\#37](https://github.com/2ndWatch/cloudendure-python/issues/37) -- Upgrade docker images to buster [\#36](https://github.com/2ndWatch/cloudendure-python/issues/36) -- Event handling - track wave status [\#31](https://github.com/2ndWatch/cloudendure-python/issues/31) - -**Merged pull requests:** - -- Upgrade docker images and drop py3.6 support [\#38](https://github.com/2ndWatch/cloudendure-python/pull/38) ([mbeacom](https://github.com/mbeacom)) -- update-encryption-key added [\#25](https://github.com/2ndWatch/cloudendure-python/pull/25) ([twarnock](https://github.com/twarnock)) -- made image names not 'test' [\#23](https://github.com/2ndWatch/cloudendure-python/pull/23) ([twarnock](https://github.com/twarnock)) -- v0.0.6 [\#22](https://github.com/2ndWatch/cloudendure-python/pull/22) ([mbeacom](https://github.com/mbeacom)) - -## [v0.0.6](https://github.com/2ndWatch/cloudendure-python/tree/v0.0.6) (2019-08-06) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/v0.0.5...v0.0.6) - -**Implemented enhancements:** - -- Add python-fire to package dependencies [\#13](https://github.com/2ndWatch/cloudendure-python/issues/13) -- copy\_image and split\_image support [\#20](https://github.com/2ndWatch/cloudendure-python/pull/20) ([twarnock](https://github.com/twarnock)) -- Add black to makefile [\#18](https://github.com/2ndWatch/cloudendure-python/pull/18) ([mbeacom](https://github.com/mbeacom)) -- Add typing throughout base project [\#17](https://github.com/2ndWatch/cloudendure-python/pull/17) ([mbeacom](https://github.com/mbeacom)) -- Check uses replica now. Launch looks up project\_id and stops on replica. [\#16](https://github.com/2ndWatch/cloudendure-python/pull/16) ([twarnock](https://github.com/twarnock)) - -**Merged pull requests:** - -- Fixed update\_blueprint to actually work [\#21](https://github.com/2ndWatch/cloudendure-python/pull/21) ([twarnock](https://github.com/twarnock)) -- Create and share image changes. [\#19](https://github.com/2ndWatch/cloudendure-python/pull/19) ([twarnock](https://github.com/twarnock)) -- Update dependencies and adjust formatting [\#15](https://github.com/2ndWatch/cloudendure-python/pull/15) ([mbeacom](https://github.com/mbeacom)) - -## [v0.0.5](https://github.com/2ndWatch/cloudendure-python/tree/v0.0.5) (2019-06-28) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/v0.0.4...v0.0.5) - -**Implemented enhancements:** - -- Add security policy [\#12](https://github.com/2ndWatch/cloudendure-python/issues/12) -- Add fire [\#14](https://github.com/2ndWatch/cloudendure-python/pull/14) ([mbeacom](https://github.com/mbeacom)) - -## [v0.0.4](https://github.com/2ndWatch/cloudendure-python/tree/v0.0.4) (2019-06-28) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/v0.0.3...v0.0.4) - -**Implemented enhancements:** - -- Update docstrings, docs, and typing [\#11](https://github.com/2ndWatch/cloudendure-python/pull/11) ([mbeacom](https://github.com/mbeacom)) - -## [v0.0.3](https://github.com/2ndWatch/cloudendure-python/tree/v0.0.3) (2019-06-20) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/v0.0.2...v0.0.3) - -**Implemented enhancements:** - -- Update pip dependencies [\#3](https://github.com/2ndWatch/cloudendure-python/pull/3) ([mbeacom](https://github.com/mbeacom)) - -**Merged pull requests:** - -- Update README.md [\#4](https://github.com/2ndWatch/cloudendure-python/pull/4) ([twarnock](https://github.com/twarnock)) - -## [v0.0.2](https://github.com/2ndWatch/cloudendure-python/tree/v0.0.2) (2019-06-16) -[Full Changelog](https://github.com/2ndWatch/cloudendure-python/compare/v0.0.1...v0.0.2) - -**Implemented enhancements:** - -- Pointed API usecase and CLI additions [\#2](https://github.com/2ndWatch/cloudendure-python/pull/2) ([mbeacom](https://github.com/mbeacom)) - -## [v0.0.1](https://github.com/2ndWatch/cloudendure-python/tree/v0.0.1) (2019-05-30) - - -\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index 65cf5ffee..000000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,76 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, sex characteristics, gender identity and expression, -level of experience, education, socio-economic status, nationality, personal -appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment -include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or - advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic - address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or -reject comments, commits, code, wiki edits, issues, and other contributions -that are not aligned to this Code of Conduct, or to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team. All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team is -obligated to maintain confidentiality with regard to the reporter of an incident. -Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html - -[homepage]: https://www.contributor-covenant.org - -For answers to common questions about this code of conduct, see -https://www.contributor-covenant.org/faq diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index cdce9e8c3..000000000 --- a/Dockerfile +++ /dev/null @@ -1,31 +0,0 @@ -FROM python:3.8-slim - -WORKDIR /app - -RUN apt-get -qq update && \ - apt-get -qq install make - -COPY . /app - -RUN pip install --upgrade pip wheel setuptools poetry - -RUN poetry config virtualenvs.create false && \ - poetry install --no-interaction --no-ansi - -RUN apt-get clean autoclean && \ - apt-get autoremove --yes && \ - rm -rf /var/lib/{apt,dpkg,cache,log}/ - -ARG BUILD_DATETIME -ARG SHA1 -ARG VERSION - -LABEL io.github.mbeacom.description="CloudEndure CLI and API client module" \ - io.github.mbeacom.documentation="https://mbeacom.github.io/cloudendure-python/" \ - io.github.mbeacom.licenses="MIT" \ - io.github.mbeacom.image.revision=$SHA1 \ - io.github.mbeacom.image.version=$VERSION \ - io.github.mbeacom.image.vendor="mbeacom" \ - io.github.mbeacom.image.source="https://github.com/mbeacom/cloudendure-python" \ - io.github.mbeacom.image.title="CloudEndure Client" \ - io.github.mbeacom.image.created=$BUILD_DATETIME diff --git a/Dockerfile-py39 b/Dockerfile-py39 deleted file mode 100644 index 0f469d9bb..000000000 --- a/Dockerfile-py39 +++ /dev/null @@ -1,31 +0,0 @@ -FROM python:3.9-rc - -WORKDIR /app - -RUN apt-get -qq update && \ - apt-get -qq install make - -COPY . /app - -RUN pip install --upgrade pip wheel setuptools poetry - -RUN poetry config virtualenvs.create false && \ - poetry install --no-interaction --no-ansi - -RUN apt-get clean autoclean && \ - apt-get autoremove --yes && \ - rm -rf /var/lib/{apt,dpkg,cache,log}/ - -ARG BUILD_DATETIME -ARG SHA1 -ARG VERSION - -LABEL io.github.mbeacom.description="CloudEndure CLI and API client module" \ - io.github.mbeacom.documentation="https://mbeacom.github.io/cloudendure-python/" \ - io.github.mbeacom.licenses="MIT" \ - io.github.mbeacom.image.revision=$SHA1 \ - io.github.mbeacom.image.version=$VERSION \ - io.github.mbeacom.image.vendor="mbeacom" \ - io.github.mbeacom.image.source="https://github.com/mbeacom/cloudendure-python" \ - io.github.mbeacom.image.title="CloudEndure Client" \ - io.github.mbeacom.image.created=$BUILD_DATETIME diff --git a/LICENSE b/LICENSE index 842732752..9d87fee75 100644 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,19 @@ -Copyright 2019 Mark Beacom +Copyright 2019 Craig Monson -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Makefile b/Makefile index d5ad67062..c691c3aa4 100644 --- a/Makefile +++ b/Makefile @@ -1,120 +1,81 @@ -# Define make entry and help functionality -.DEFAULT_GOAL := help - .PHONY: help +help: ## print out this help + @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' -REPO_NAME := mbeacom/cloudendure-python -SHA1 := $$(git log -1 --pretty=%h) -CURRENT_BRANCH := $$(git symbolic-ref -q --short HEAD) -LATEST_TAG := ${REPO_NAME}:latest -GIT_TAG := ${REPO_NAME}:${SHA1} -VERSION := v0.3.5 - -info: ## Show information about the current git state. - @echo "Github Project: https://github.com/${REPO_NAME}\nCurrent Branch: ${CURRENT_BRANCH}\nSHA1: ${SHA1}\n" - -run-docker: ## Run the local development environment docker shell. - @docker run -v $(pwd):/app --rm -it airproducts /bin/bash - -build: ## Build the release docker image. - @docker build \ - --stream \ - --pull \ - --build-arg BUILD_DATETIME=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \ - --build-arg "SHA1=${SHA1}" \ - --build-arg "VERSION=${VERSION}" \ - -t "${GIT_TAG}" . - @docker tag "${GIT_TAG}" "${LATEST_TAG}" - @docker tag "${GIT_TAG}" "${VERSION}" - -build_py38: ## Build the Python 3.8 docker image. - @docker build \ - --stream \ - --pull \ - --build-arg BUILD_DATETIME=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \ - --build-arg "SHA1=${SHA1}" \ - --build-arg "VERSION=${VERSION}" \ - -t "${GIT_TAG}-py38" --file Dockerfile-py38 . - @docker tag "${GIT_TAG}-py38" "${LATEST_TAG}-py38" - @docker tag "${GIT_TAG}-py38" "${VERSION}-py38" - -gh_push: ## Push the release Docker image to Github. - @docker tag ${GIT_TAG} docker.pkg.github.com/mbeacom/cloudendure-python/cloudendure:${VERSION} - @docker push docker.pkg.github.com/mbeacom/cloudendure-python/cloudendure:${VERSION} - -gh_push_py38: ## Push the Python 3.8 Docker image to Github. - @docker tag ${GIT_TAG}-py38 docker.pkg.github.com/mbeacom/cloudendure-python/cloudendure:${VERSION}-py38 - @docker push docker.pkg.github.com/mbeacom/cloudendure-python/cloudendure:${VERSION}-py38 - -login: ## Login to Docker Hub. - @docker login -u "${DOCKER_USER}" -p "${DOCKER_PASS}" - -gh_login: ## Login to Docker Hub. - @docker login docker.pkg.github.com -u "${DOCKER_GH_USER}" -p "${DOCKER_GH_TOKEN}" - -push: ## Push the Docker image to the Docker Hub repository. - @docker push "${REPO_NAME}" - -docker: build build_py38 ## Build and publish Docker images. - -lint: isort ## Lint the CloudEndure project with Black. - @poetry run black . - -update_prereqs: ## Update the local development pre-requisite packages. - @pip install --upgrade wheel setuptools pip - -install-py-deps: update_prereqs ## Install the Python dependencies specified in the Pipfile.lock. - @echo "Installing Python project dependencies..." - @poetry install - @echo "Python dependencies installed!" - -init: ## Initialize the project. - @pip install --upgrade wheel setuptools pip - @curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python - @source $HOME/.poetry/env - @poetry install - -ci: ## Run the CI specific tests. - @poetry run py.test -n 8 --boxed --junitxml=report.xml - -flake8: ## Run Flake8 against the project. - @poetry run flake8 --ignore=E501,F401,E128,E402,E731,F821 cloudendure - -yapf: ## Run YAPF against the project. - @poetry run yapf cloudendure - -isort: ## Run isort against the project. - @poetry run isort -sp=setup.cfg -rc . - -coverage: ## Generate a test coverage report. - poetry run py.test --cov-config .coveragerc --verbose --cov-report term --cov-report xml --cov=cloudendure tests - -publish: ## Publish the package to PyPi. - poetry build - poetry publish +.PHONY: generator-help +generator-help: ## openapi-generator help generate | less + openapi-generator help generate | less + +.PHONY: init +init: + poetry init + +.PHONY: install +install: + poetry install + +.PHONY: test +test: ## execute pytest in the poetry environment + #poetry run pytest + #poetry run python my-test.py + + +.PHONY: isort +isort: ## run isort (order import statements) on our py code + poetry run isort tests/ cloudendure/ + +.PHONY: black +black: ## run black (linter) agaist our python code + poetry run black cloudendure/ -docs: ## Build the documentation. - poetry run pydocmd build +.PHONY: lint +lint: isort black ## run isort and black against our python code -update_fork: ## Update the current fork master branch with upstream master. - @echo "Updating the current fork with the upstream master branch..." - @git checkout master - @git fetch upstream - @git merge upstream/master - @git push origin master - @echo "Updated!" +.PHONY: rebuild-api +rebuild-api: pull-api fix-api-definition regenerate-api fix-generated-code lint ## regenerates the client code (deletes old code): pull fix-json delete gen fix-code and lint -gen_client: ## Generate the swagger client from the API config. - @swagger-codegen generate -i https://console.cloudendure.com/api_doc/apis.json -l python --model-name-prefix CloudEndure --git-user-id mbeacom --git-repo-id cloudendure-python -c reference/swagger_config.json -o gen/ +.PHONY: build-api +build-api: pull-api fix-api-definition generate-api fix-generated-code lint ## does the whole shebang: pull fix-json gen fix-code and lint -update_deps: update_prereqs ## Update the package dependencies via poetry. - @poetry update +.PHONY: generate-api +generate-api: ## builds the cloudendure api code from the fixed openapi definition stored in ./build + openapi-generator generate -i build/cloudendure-api-fixed.json -g python --package-name cloudendure --git-host 'github.com' --git-repo-id '2ndWatch/python-cloudendure' --git-user-id craigmonson -t openapi-generator/templates -install: isort build_py ## Install the local development version of the module. - @poetry install . +.PHONY: regenerate-api +regenerate-api: generate-delete generate-api ## deletes generated code: README.md, cloudendure/, docs/, setup.py, test/, test-requirements.txt -build_py: update_deps ## Build and package the project for PyPi source and wheel distribution. - @poetry build +.PHONY: pull-api +pull-api: ## pull and store the api json in the build dir + curl https://console.cloudendure.com/api_doc/apis.json > build/cloudendure-api.json + +.PHONY: fix-api-definition +fix-api-definition: ## fix any problematic api defs from the cloudendure def if possible. + cd build && python fix-api.py + +.PHONY: fix-generated-code +fix-generated-code: ## There are some cases where the api def is wrong, and can't be fixed in the swagger def, so we can fix it in the code. + cd build && python fix-generated-code.py + +.PHONY: generate-missing-docs +generate-missing-docs: ## there's some top level docs missing... this will generate them. + poetry run pydoc + +.PHONY: generate-delete +generate-delete: clean-api ## delete all the generated code + rm -rf README.md cloudendure docs test + +.PHONY: clean-api +clean-api: ## get rid of unnecessary files + rm -f git_push.sh requirements.txt setup.cfg setup.py test-requirements.txt tox.ini + +.PHONY: build +build: ## build the packages + poetry build -help: ## Show this help information. - @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[33m%-25s\033[0m %s\n", $$1, $$2}' +.PHONY: tag +tag: ## tag this repo with $TAG (and mark the pyproject version as the same) + poetry version $(TAG) + git commit -am "Bumping version to $(TAG)" + git push + git tag -a $(TAG) -m "Rebuilding and Retagging to $(TAG)" + git push --tags diff --git a/Pipfile b/Pipfile deleted file mode 100644 index b723d0199..000000000 --- a/Pipfile +++ /dev/null @@ -1,11 +0,0 @@ -[[source]] -name = "pypi" -url = "https://pypi.org/simple" -verify_ssl = true - -[dev-packages] - -[packages] - -[requires] -python_version = "3.7" diff --git a/README.md b/README.md index 09d7fcca1..393e532d2 100644 --- a/README.md +++ b/README.md @@ -1,94 +1,384 @@ -# cloudendure-python +# cloudendure +© 2021 CloudEndure All rights reserved -Python wrapper and CLI for [CloudEndure](https://www.cloudendure.com/) +# General +Request authentication in CloudEndure's API is done using session cookies. +A session cookie is returned upon successful execution of the \"login\" method. +This value must then be provided within the request headers of all subsequent API requests. -[![PyPI](https://img.shields.io/pypi/v/cloudendure) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/cloudendure)](https://pypi.org/project/cloudendure/) [![PyPi Publish](https://github.com/2ndWatch/cloudendure-python/workflows/PyPi%20Publish/badge.svg)](https://2ndwatch.github.io/cloudendure-python/) [![Documenation](https://github.com/2ndWatch/cloudendure-python/workflows/Github%20Pages/badge.svg)](https://2ndwatch.github.io/cloudendure-python/) +## Errors +Some errors are not specifically written in every method since they may always return. +Those are: +1) 401 (Unauthorized) - for unauthenticated requests. +2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). +3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. +4) 422 (Unprocessable Entity) - for invalid input. -## Requirements +## Formats +All strings with date-time format are according to RFC3339. -[Python 3.7+](https://www.python.org/downloads/) +All strings with \"duration\" format are according to ISO8601. +For example, a full day duration can be specified with \"PNNNND\". -## Installation & Usage -### Basic Installation / pip +This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: -```sh -pip install cloudendure -cloudendure version -``` +- API version: 5 +- Package version: 1.0.0 +- Build package: org.openapitools.codegen.languages.PythonClientCodegen +For more information, please visit [https://bit.ly/2T54hSc](https://bit.ly/2T54hSc) -### Local Development with Poetry +## Requirements. -```sh -brew install poetry # if not installed -poetry install -``` +Python >= 3.6 + +## Installation & Usage +### pip install -### Local Development with Docker +If the python package is hosted on a repository, you can install directly using: ```sh -docker run --rm -it cloudendurepy/cloudendure bash +pip install git+https://github.com/craigmonson/2ndWatch/python-cloudendure.git ``` - -### Usage +(you may need to run `pip` with root permission: `sudo pip install git+https://github.com/craigmonson/2ndWatch/python-cloudendure.git`) Then import the package: - ```python import cloudendure ``` -## Getting Started -CloudEndure Pipeline Flow -![CloudEndure Pipeline Flow](images/ce_migration_pipeline.png) - -CloudEndure Data Flow -![CloudEndure Data Flow](images/ce_dataflow.png) - -Pipeline Flow (as seen in AWS Console) -![Pipeline_Flow](images/stepfunctions_graph.svg) +### Setuptools -### Logging in via CLI using environment variables - -Please note: `cloudendure` and `ce` can be used interchangeably +Install via [Setuptools](http://pypi.python.org/pypi/setuptools). ```sh -export CLOUDENDURE_USERNAME= -export CLOUDENDURE_PASSWORD= -export CLOUDENDURE_DESTINATION_ACCOUNT= - -cloudendure api login +python setup.py install --user ``` +(or `sudo python setup.py install` to install the package for all users) -or - -```sh -export CLOUDENDURE_USER_API_TOKEN= -export CLOUDENDURE_DESTINATION_ACCOUNT= - -ce api login +Then import the package: +```python +import cloudendure ``` -### Logging in via CLI inline +## Getting Started -Please note: `cloudendure` and `ce` can be used interchangeably +Please follow the [installation procedure](#installation--usage) and then run the following: -```sh -cloudendure api login --user= --password= +```python +import cloudendure +from cloudendure.api import authentication_api +from cloudendure.api import project_api +# since the api def doesn't have this defined, we'll rename it. +from cloudendure.models import InlineObject1 as LoginModel + +# bare, base api client +api_client = cloudendure.ApiClient() + +# we need to auth before anything else... if we don't have a session... +auth_client = authentication_api.AuthenticationApi(api_client) +# your token can be found in the 'Setup & Info' page, in the 'OTHER SETTINGS' tab under the 'API Token' section. +login_model = LoginModel(user_api_token="xxxx-yyyy-zzzz...") +auth_client.login_post(login_model) +# In order to set the proper session cookie and headers: +api_client.set_auth_from_last_response() + +# you can get both parts of the auth to store for later use (so you don't have to log in again) +# stored in the header as 'X-XSRF-TOKEN' +xsrf_token = api_client.xsrf_token + +# the session cookie +cookie = api_client.cookie + +# no need to log back in if you've got valid token and session cookie +new_api_client = cloudendure.ApiClient() +new_api_client.set_session_auth(xsrf_token, cookie) + +# now... do something useful +project_client = project_api.ProjectApi(new_api_client) # or api_client +response = project_client.projects_get() +print(response.items) +project_id = response.items[0].id + +machine_client = machines_api.MachinesApi(api_client) # or new_api_client +response = machine_client.projects_project_id_machinies_get(project_id) +print(response.items) ``` -or - -```sh -ce api login --token= +## Documentation for API Endpoints + + + +All URIs are relative to *https://console.cloudendure.com/api/latest* + +Class | Method | HTTP request | Description +------------ | ------------- | ------------- | ------------- +*AccountApi* | [**accounts_account_id_get**](docs/AccountApi.md#accounts_account_id_get) | **GET** /accounts/{accountId} | Get Account information +*ActionsApi* | [**projects_project_id_jobs_get**](docs/ActionsApi.md#projects_project_id_jobs_get) | **GET** /projects/{projectId}/jobs | List Jobs +*ActionsApi* | [**projects_project_id_jobs_job_id_get**](docs/ActionsApi.md#projects_project_id_jobs_job_id_get) | **GET** /projects/{projectId}/jobs/{jobId} | Get Job +*ActionsApi* | [**projects_project_id_launch_machines_post**](docs/ActionsApi.md#projects_project_id_launch_machines_post) | **POST** /projects/{projectId}/launchMachines | Launch target machines +*ActionsApi* | [**projects_project_id_move_machines_post**](docs/ActionsApi.md#projects_project_id_move_machines_post) | **POST** /projects/{projectId}/moveMachines | Moves machines to another project +*ActionsApi* | [**projects_project_id_pause_replication_post**](docs/ActionsApi.md#projects_project_id_pause_replication_post) | **POST** /projects/{projectId}/pauseReplication | Pause replication +*ActionsApi* | [**projects_project_id_replicas_delete**](docs/ActionsApi.md#projects_project_id_replicas_delete) | **DELETE** /projects/{projectId}/replicas | Perform Cleanup +*ActionsApi* | [**projects_project_id_reverse_replication_post**](docs/ActionsApi.md#projects_project_id_reverse_replication_post) | **POST** /projects/{projectId}/reverseReplication | Reverse replication direction +*ActionsApi* | [**projects_project_id_start_replication_post**](docs/ActionsApi.md#projects_project_id_start_replication_post) | **POST** /projects/{projectId}/startReplication | Start replication +*ActionsApi* | [**projects_project_id_stop_replication_post**](docs/ActionsApi.md#projects_project_id_stop_replication_post) | **POST** /projects/{projectId}/stopReplication | Stop replication +*AuthenticationApi* | [**login_post**](docs/AuthenticationApi.md#login_post) | **POST** /login | Login +*AuthenticationApi* | [**logout_post**](docs/AuthenticationApi.md#logout_post) | **POST** /logout | Logout +*BlueprintApi* | [**projects_project_id_blueprints_blueprint_id_get**](docs/BlueprintApi.md#projects_project_id_blueprints_blueprint_id_get) | **GET** /projects/{projectId}/blueprints/{blueprintId} | Get Blueprint +*BlueprintApi* | [**projects_project_id_blueprints_blueprint_id_patch**](docs/BlueprintApi.md#projects_project_id_blueprints_blueprint_id_patch) | **PATCH** /projects/{projectId}/blueprints/{blueprintId} | Configure Blueprint +*BlueprintApi* | [**projects_project_id_blueprints_get**](docs/BlueprintApi.md#projects_project_id_blueprints_get) | **GET** /projects/{projectId}/blueprints | List Blueprints +*BlueprintApi* | [**projects_project_id_blueprints_post**](docs/BlueprintApi.md#projects_project_id_blueprints_post) | **POST** /projects/{projectId}/blueprints | Create Blueprint +*CloudApi* | [**cloud_credentials_creds_id_regions_get**](docs/CloudApi.md#cloud_credentials_creds_id_regions_get) | **GET** /cloudCredentials/{credsId}/regions | List Regions +*CloudApi* | [**cloud_credentials_creds_id_regions_region_id_delete**](docs/CloudApi.md#cloud_credentials_creds_id_regions_region_id_delete) | **DELETE** /cloudCredentials/{credsId}/regions/{regionId} | Delete region (VCenter) +*CloudApi* | [**cloud_credentials_creds_id_regions_region_id_get**](docs/CloudApi.md#cloud_credentials_creds_id_regions_region_id_get) | **GET** /cloudCredentials/{credsId}/regions/{regionId} | Get Region +*CloudApi* | [**cloud_credentials_creds_id_regions_region_id_patch**](docs/CloudApi.md#cloud_credentials_creds_id_regions_region_id_patch) | **PATCH** /cloudCredentials/{credsId}/regions/{regionId} | Patch region (rename) +*CloudApi* | [**clouds_get**](docs/CloudApi.md#clouds_get) | **GET** /clouds | List Clouds +*CloudCredentialsApi* | [**cloud_credentials_creds_id_get**](docs/CloudCredentialsApi.md#cloud_credentials_creds_id_get) | **GET** /cloudCredentials/{credsId} | Get Credentials +*CloudCredentialsApi* | [**cloud_credentials_creds_id_patch**](docs/CloudCredentialsApi.md#cloud_credentials_creds_id_patch) | **PATCH** /cloudCredentials/{credsId} | Change Credentials +*CloudCredentialsApi* | [**cloud_credentials_get**](docs/CloudCredentialsApi.md#cloud_credentials_get) | **GET** /cloudCredentials | List Credentials +*CloudCredentialsApi* | [**cloud_credentials_post**](docs/CloudCredentialsApi.md#cloud_credentials_post) | **POST** /cloudCredentials | Create Credentials +*DefaultApi* | [**accounts_account_id_access_get**](docs/DefaultApi.md#accounts_account_id_access_get) | **GET** /accounts/{accountId}/access | get a temporary token by email +*DefaultApi* | [**extended_account_info_get**](docs/DefaultApi.md#extended_account_info_get) | **GET** /extendedAccountInfo | Returns the extended current account information. +*DefaultApi* | [**projects_assign_users_post**](docs/DefaultApi.md#projects_assign_users_post) | **POST** /projects/assignUsers | Assign User +*DefaultApi* | [**projects_project_id_audit_log_get**](docs/DefaultApi.md#projects_project_id_audit_log_get) | **GET** /projects/{projectId}/auditLog | Get audit log +*DefaultApi* | [**projects_project_id_machines_machine_id_force_rescan_post**](docs/DefaultApi.md#projects_project_id_machines_machine_id_force_rescan_post) | **POST** /projects/{projectId}/machines/{machineId}/forceRescan | Force rescan of machine volumes. +*DefaultApi* | [**projects_project_id_storage_get**](docs/DefaultApi.md#projects_project_id_storage_get) | **GET** /projects/{projectId}/storage | project's storage +*DefaultApi* | [**projects_remove_users_post**](docs/DefaultApi.md#projects_remove_users_post) | **POST** /projects/removeUsers | Remove User +*DefaultApi* | [**replace_api_token_post**](docs/DefaultApi.md#replace_api_token_post) | **POST** /replaceApiToken | Replaces API token +*DefaultApi* | [**set_password_post**](docs/DefaultApi.md#set_password_post) | **POST** /setPassword | Set password for invited user +*DefaultApi* | [**users_assign_roles_post**](docs/DefaultApi.md#users_assign_roles_post) | **POST** /users/assignRoles | Add roles to users +*DefaultApi* | [**users_post**](docs/DefaultApi.md#users_post) | **POST** /users | Create a new User +*DefaultApi* | [**users_revoke_roles_post**](docs/DefaultApi.md#users_revoke_roles_post) | **POST** /users/revokeRoles | Revoke roles from users +*LicensingApi* | [**licenses_get**](docs/LicensingApi.md#licenses_get) | **GET** /licenses | List Licenses +*LicensingApi* | [**licenses_license_id_get**](docs/LicensingApi.md#licenses_license_id_get) | **GET** /licenses/{licenseId} | Get License +*MachinesApi* | [**projects_project_id_machines_delete**](docs/MachinesApi.md#projects_project_id_machines_delete) | **DELETE** /projects/{projectId}/machines | Uninstall multiple agents +*MachinesApi* | [**projects_project_id_machines_get**](docs/MachinesApi.md#projects_project_id_machines_get) | **GET** /projects/{projectId}/machines | List Machines +*MachinesApi* | [**projects_project_id_machines_machine_id_delete**](docs/MachinesApi.md#projects_project_id_machines_machine_id_delete) | **DELETE** /projects/{projectId}/machines/{machineId} | Uninstall agent +*MachinesApi* | [**projects_project_id_machines_machine_id_get**](docs/MachinesApi.md#projects_project_id_machines_machine_id_get) | **GET** /projects/{projectId}/machines/{machineId} | Get a specific machine. +*MachinesApi* | [**projects_project_id_machines_machine_id_patch**](docs/MachinesApi.md#projects_project_id_machines_machine_id_patch) | **PATCH** /projects/{projectId}/machines/{machineId} | Update a machine. Accepts only Launch time updates. +*MachinesApi* | [**projects_project_id_machines_patch**](docs/MachinesApi.md#projects_project_id_machines_patch) | **PATCH** /projects/{projectId}/machines | Batch-update multiple machines +*MachinesApi* | [**projects_project_id_replicas_replica_id_get**](docs/MachinesApi.md#projects_project_id_replicas_replica_id_get) | **GET** /projects/{projectId}/replicas/{replicaId} | Get Target Machine +*ProjectApi* | [**projects_get**](docs/ProjectApi.md#projects_get) | **GET** /projects | List Projects +*ProjectApi* | [**projects_post**](docs/ProjectApi.md#projects_post) | **POST** /projects | Create Project +*ProjectApi* | [**projects_project_id_delete**](docs/ProjectApi.md#projects_project_id_delete) | **DELETE** /projects/{projectId} | Delete Project and all sub-resources including cloud assets other than launched target machines +*ProjectApi* | [**projects_project_id_get**](docs/ProjectApi.md#projects_project_id_get) | **GET** /projects/{projectId} | Get Project +*ProjectApi* | [**projects_project_id_patch**](docs/ProjectApi.md#projects_project_id_patch) | **PATCH** /projects/{projectId} | Update Project (including partial update) +*ProjectApi* | [**projects_project_id_tags_get**](docs/ProjectApi.md#projects_project_id_tags_get) | **GET** /projects/{projectId}/tags | Gets all instance tags of all machines in the project. +*ProjectApi* | [**projects_project_id_target_cloud_credentials_post**](docs/ProjectApi.md#projects_project_id_target_cloud_credentials_post) | **POST** /projects/{projectId}/targetCloudCredentials | Set target cloud credentials +*RecoveryPlansApi* | [**projects_project_id_recovery_plans_get**](docs/RecoveryPlansApi.md#projects_project_id_recovery_plans_get) | **GET** /projects/{projectId}/recoveryPlans | Gets all recovery plans for the project. +*RecoveryPlansApi* | [**projects_project_id_recovery_plans_post**](docs/RecoveryPlansApi.md#projects_project_id_recovery_plans_post) | **POST** /projects/{projectId}/recoveryPlans | Creates a new recovery plan. +*RecoveryPlansApi* | [**projects_project_id_recovery_plans_recovery_plan_id_delete**](docs/RecoveryPlansApi.md#projects_project_id_recovery_plans_recovery_plan_id_delete) | **DELETE** /projects/{projectId}/recoveryPlans/{recoveryPlanId} | Deletes a recovery plan. +*RecoveryPlansApi* | [**projects_project_id_recovery_plans_recovery_plan_id_get**](docs/RecoveryPlansApi.md#projects_project_id_recovery_plans_recovery_plan_id_get) | **GET** /projects/{projectId}/recoveryPlans/{recoveryPlanId} | Gets a recovery plan. +*RecoveryPlansApi* | [**projects_project_id_recovery_plans_recovery_plan_id_patch**](docs/RecoveryPlansApi.md#projects_project_id_recovery_plans_recovery_plan_id_patch) | **PATCH** /projects/{projectId}/recoveryPlans/{recoveryPlanId} | Updates a new recovery plan. +*RecoveryPlansApi* | [**projects_project_id_run_recovery_plan_post**](docs/RecoveryPlansApi.md#projects_project_id_run_recovery_plan_post) | **POST** /projects/{projectId}/runRecoveryPlan | Launch a recovery plan. +*ReplicationApi* | [**projects_project_id_machines_machine_id_bandwidth_throttling_get**](docs/ReplicationApi.md#projects_project_id_machines_machine_id_bandwidth_throttling_get) | **GET** /projects/{projectId}/machines/{machineId}/bandwidthThrottling | Get value of network bandwidth throttling setting for Machine +*ReplicationApi* | [**projects_project_id_machines_machine_id_bandwidth_throttling_patch**](docs/ReplicationApi.md#projects_project_id_machines_machine_id_bandwidth_throttling_patch) | **PATCH** /projects/{projectId}/machines/{machineId}/bandwidthThrottling | Set value of network bandwidth throttling setting for Machine +*ReplicationApi* | [**projects_project_id_machines_machine_id_delete**](docs/ReplicationApi.md#projects_project_id_machines_machine_id_delete) | **DELETE** /projects/{projectId}/machines/{machineId} | Uninstall agent +*ReplicationApi* | [**projects_project_id_machines_machine_id_pointsintime_get**](docs/ReplicationApi.md#projects_project_id_machines_machine_id_pointsintime_get) | **GET** /projects/{projectId}/machines/{machineId}/pointsintime | List Available Points-in-time +*ReplicationApi* | [**projects_project_id_replication_configurations_get**](docs/ReplicationApi.md#projects_project_id_replication_configurations_get) | **GET** /projects/{projectId}/replicationConfigurations | List Replication Configurations +*ReplicationApi* | [**projects_project_id_replication_configurations_post**](docs/ReplicationApi.md#projects_project_id_replication_configurations_post) | **POST** /projects/{projectId}/replicationConfigurations | Create Replication Configuration +*ReplicationApi* | [**projects_project_id_replication_configurations_replication_configuration_id_patch**](docs/ReplicationApi.md#projects_project_id_replication_configurations_replication_configuration_id_patch) | **PATCH** /projects/{projectId}/replicationConfigurations/{replicationConfigurationId} | Modify Replication Configuration +*UserApi* | [**change_password_post**](docs/UserApi.md#change_password_post) | **POST** /changePassword | Change Password +*UserApi* | [**me_get**](docs/UserApi.md#me_get) | **GET** /me | Me +*UserApi* | [**users_user_id_delete**](docs/UserApi.md#users_user_id_delete) | **DELETE** /users/{userId} | Delete a User +*UserApi* | [**users_user_id_patch**](docs/UserApi.md#users_user_id_patch) | **PATCH** /users/{userId} | Modify user settings + + +## Documentation For Models + + - [Account](docs/Account.md) + - [AccountCeAdminProperties](docs/AccountCeAdminProperties.md) + - [AccountLink](docs/AccountLink.md) + - [AccountLinkList](docs/AccountLinkList.md) + - [AccountRequest](docs/AccountRequest.md) + - [AccountRequestList](docs/AccountRequestList.md) + - [AccountsList](docs/AccountsList.md) + - [AgentNextReplicationInitRequest](docs/AgentNextReplicationInitRequest.md) + - [AllProjectFeatures](docs/AllProjectFeatures.md) + - [AuditLog](docs/AuditLog.md) + - [AuditLogChangedField](docs/AuditLogChangedField.md) + - [AuditLogEntry](docs/AuditLogEntry.md) + - [AuditLogEntryParticipatingMachines](docs/AuditLogEntryParticipatingMachines.md) + - [BandwidthThrottling](docs/BandwidthThrottling.md) + - [Blueprint](docs/Blueprint.md) + - [BlueprintDisks](docs/BlueprintDisks.md) + - [BlueprintList](docs/BlueprintList.md) + - [CSLPItem](docs/CSLPItem.md) + - [CSLPRequest](docs/CSLPRequest.md) + - [CSLPResult](docs/CSLPResult.md) + - [Cloud](docs/Cloud.md) + - [CloudCredentials](docs/CloudCredentials.md) + - [CloudCredentialsList](docs/CloudCredentialsList.md) + - [CloudCredentialsRequest](docs/CloudCredentialsRequest.md) + - [CloudsList](docs/CloudsList.md) + - [ComputeLocation](docs/ComputeLocation.md) + - [Configurations](docs/Configurations.md) + - [ConfigurationsList](docs/ConfigurationsList.md) + - [DiskConfig](docs/DiskConfig.md) + - [DynamicConfiguration](docs/DynamicConfiguration.md) + - [Error](docs/Error.md) + - [ExtendedAccountInfo](docs/ExtendedAccountInfo.md) + - [GcpMachinesFinanceData](docs/GcpMachinesFinanceData.md) + - [IdentityProviderRedirectResponse](docs/IdentityProviderRedirectResponse.md) + - [InitializationStep](docs/InitializationStep.md) + - [InlineObject](docs/InlineObject.md) + - [InlineObject1](docs/InlineObject1.md) + - [InlineObject10](docs/InlineObject10.md) + - [InlineObject2](docs/InlineObject2.md) + - [InlineObject3](docs/InlineObject3.md) + - [InlineObject4](docs/InlineObject4.md) + - [InlineObject5](docs/InlineObject5.md) + - [InlineObject6](docs/InlineObject6.md) + - [InlineObject7](docs/InlineObject7.md) + - [InlineObject8](docs/InlineObject8.md) + - [InlineObject9](docs/InlineObject9.md) + - [InlineResponse200](docs/InlineResponse200.md) + - [InlineResponse2001](docs/InlineResponse2001.md) + - [InlineResponse2002](docs/InlineResponse2002.md) + - [Job](docs/Job.md) + - [JobLog](docs/JobLog.md) + - [JobTargetMachine](docs/JobTargetMachine.md) + - [JobsList](docs/JobsList.md) + - [KeyValueList](docs/KeyValueList.md) + - [LaunchMachinesParameters](docs/LaunchMachinesParameters.md) + - [LaunchMachinesParametersDebugScripts](docs/LaunchMachinesParametersDebugScripts.md) + - [License](docs/License.md) + - [LicenseCeAdminProperties](docs/LicenseCeAdminProperties.md) + - [LicenseFeatures](docs/LicenseFeatures.md) + - [LicenseList](docs/LicenseList.md) + - [ListUsersResult](docs/ListUsersResult.md) + - [ListUsersResults](docs/ListUsersResults.md) + - [LogicalLocation](docs/LogicalLocation.md) + - [Machine](docs/Machine.md) + - [MachineAndPathAndPointInTime](docs/MachineAndPathAndPointInTime.md) + - [MachineAndPointInTime](docs/MachineAndPointInTime.md) + - [MachineLicense](docs/MachineLicense.md) + - [MachineLifeCycle](docs/MachineLifeCycle.md) + - [MachineReplicationConfiguration](docs/MachineReplicationConfiguration.md) + - [MachineReplicationInfo](docs/MachineReplicationInfo.md) + - [MachineReplicationInfoInitiationStates](docs/MachineReplicationInfoInitiationStates.md) + - [MachineReplicationInfoInitiationStatesItems](docs/MachineReplicationInfoInitiationStatesItems.md) + - [MachineSnapshotCredits](docs/MachineSnapshotCredits.md) + - [MachineSourceProperties](docs/MachineSourceProperties.md) + - [MachineSourcePropertiesCpu](docs/MachineSourcePropertiesCpu.md) + - [MachineSourcePropertiesDisks](docs/MachineSourcePropertiesDisks.md) + - [MachineSourcePropertiesInstalledApplications](docs/MachineSourcePropertiesInstalledApplications.md) + - [MachineSourcePropertiesInstalledApplicationsItems](docs/MachineSourcePropertiesInstalledApplicationsItems.md) + - [MachineSourcePropertiesRunningServices](docs/MachineSourcePropertiesRunningServices.md) + - [MachineSourcePropertiesRunningServicesItems](docs/MachineSourcePropertiesRunningServicesItems.md) + - [MachineThrottleTimeSeconds](docs/MachineThrottleTimeSeconds.md) + - [MachinesList](docs/MachinesList.md) + - [MachinesListInvalidIDsAndJob](docs/MachinesListInvalidIDsAndJob.md) + - [NetworkInterface](docs/NetworkInterface.md) + - [Outpost](docs/Outpost.md) + - [PointInTime](docs/PointInTime.md) + - [PointInTimeList](docs/PointInTimeList.md) + - [PopulateJobNames](docs/PopulateJobNames.md) + - [PopulateJobParams](docs/PopulateJobParams.md) + - [Project](docs/Project.md) + - [ProjectCeAdminProperties](docs/ProjectCeAdminProperties.md) + - [ProjectFeatures](docs/ProjectFeatures.md) + - [ProjectStorage](docs/ProjectStorage.md) + - [ProjectStorageWorkingStorage](docs/ProjectStorageWorkingStorage.md) + - [ProjectsAndUsers](docs/ProjectsAndUsers.md) + - [ProjectsAndUsersItems](docs/ProjectsAndUsersItems.md) + - [ProjectsList](docs/ProjectsList.md) + - [RecoveryPlan](docs/RecoveryPlan.md) + - [RecoveryPlanList](docs/RecoveryPlanList.md) + - [RecoveryPlanStep](docs/RecoveryPlanStep.md) + - [RecoveryPlanSteps](docs/RecoveryPlanSteps.md) + - [Region](docs/Region.md) + - [RegionsList](docs/RegionsList.md) + - [Replica](docs/Replica.md) + - [ReplicationConfiguration](docs/ReplicationConfiguration.md) + - [ReplicationConfigurationList](docs/ReplicationConfigurationList.md) + - [ReplicationConfigurationReplicationTags](docs/ReplicationConfigurationReplicationTags.md) + - [SamlSettings](docs/SamlSettings.md) + - [SecurityGroup](docs/SecurityGroup.md) + - [StorageLocation](docs/StorageLocation.md) + - [Subnet](docs/Subnet.md) + - [Time](docs/Time.md) + - [UpdateableScripts](docs/UpdateableScripts.md) + - [UpdateableScriptsResult](docs/UpdateableScriptsResult.md) + - [UpdateableScriptsResultOnPremiseVolumes](docs/UpdateableScriptsResultOnPremiseVolumes.md) + - [UpgradeCounterDelay](docs/UpgradeCounterDelay.md) + - [Usage](docs/Usage.md) + - [UsageList](docs/UsageList.md) + - [User](docs/User.md) + - [UserReport](docs/UserReport.md) + - [UserReportGcpMachinesFinanceData](docs/UserReportGcpMachinesFinanceData.md) + - [UserReports](docs/UserReports.md) + - [UserSettings](docs/UserSettings.md) + - [UserSettingsSendNotifications](docs/UserSettingsSendNotifications.md) + - [UsersAndRoles](docs/UsersAndRoles.md) + - [UsersAndRolesItems](docs/UsersAndRolesItems.md) + - [UsersList](docs/UsersList.md) + + +## Documentation For Authorization + + See the above example for authorization. + +## Author + +(2nd Watch)[https://www.2ndwatch.com] + + + +## Notes for Large OpenAPI documents +If the OpenAPI document is large, imports in cloudendure.apis and cloudendure.models may fail with a +RecursionError indicating the maximum recursion limit has been exceeded. In that case, there are a couple of solutions: + +Solution 1: +Use specific imports for apis and models like: +- `from cloudendure.api.default_api import DefaultApi` +- `from cloudendure.model.pet import Pet` + +Solution 2: +Before importing the package, adjust the maximum recursion limit as shown below: +``` +import sys +sys.setrecursionlimit(1500) +import cloudendure +from cloudendure.apis import * +from cloudendure.models import * ``` -Logging in for the first time will generate the `~/.cloudendure.yml` file. +## Generating the API + +### Dependencies +First things first, you'll need these tools installed in order to build this +projects client code: + * `curl` + * `python` + * (Poetry)[https://python-poetry.org/] + * (openapi-generator)[https://github.com/OpenAPITools/openapi-generator] + +### `Makefile`, Build / Rebuild +This project makes extensive use of `GNU make`. You can view all the available +make commands by just typing the `make` command, or `make help`. Each of the +components used to build this project are their own command, but the two that +we're looking for to do everything for us are: + * `make build-api` + * `make rebuild-api` + +Both of these commands do all the things. The only difference is that +`rebuild-api` deletes all the generated code first. I prefer this method to +make sure any cruft that's different between the apis from cloudendure is +removed. So, simply run: + +```bash +%> make rebuild-api +``` -## Coming Soon +... and boom! it's built! -This project is currently a work in progress and will actively change. This client has not yet been finalized and is entirely subject to change. +Now, commit the changes, then tag using the `make tag` command. Do note that +the actual API version from CE is "5", so the versions here will not entirely +match up. Given that this needed to be regenerated, it was likely a breaking +change, but we at _least_ want to stick with the "5", so we'll bump the MINOR +version.ie: the `X` in `v5.X.0` -## Changelog +once this step is done we should be complete. -Check out the [CHANGELOG](CHANGELOG.md) diff --git a/REFERENCE.md b/REFERENCE.md deleted file mode 100644 index c40959eb5..000000000 --- a/REFERENCE.md +++ /dev/null @@ -1,57 +0,0 @@ -# Reference Materials - -## Documentation - -### CloudEndure - -- [General Documentation](https://docs.cloudendure.com/) -- [Getting Started - API](https://docs.cloudendure.com/Content/Getting_Started_with_CloudEndure/API/API.htm) -- [REST API](https://console.cloudendure.com/api_doc/apis.html) - -## API References - -### Errors - -Some errors are not specifically written in every method since they may always return. Those are: - -- 401 (Unauthorized) - for unauthenticated requests. -- 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). -- 403 (Forbidden) - request is authenticated, but the user is not allowed to access. -- 422 (Unprocessable Entity) - for invalid input. - -## Package Related - -### General Guidance - -- [Python 3 - Type hints](https://docs.python.org/3/library/typing.html) -- [MyPy - Python 3 Cheat Sheet](https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html) - -### Packages & Dependencies - -#### Package Dependencies - -- [Boto3 - AWS SDK](https://github.com/boto/boto3) -- [Requests - Python HTTP module](https://github.com/kennethreitz/requests) -- [Python Fire - CLI module](https://github.com/google/python-fire) - -#### Build/Dev/Testing Dependencies - -- [black - Python linter]() -- [isort - Python import automatic sorting]() -- [pydocstyle - Python docstring/pep-257 linting]() -- [pycodestyle - Python code complexity / McCabe validation]() -- [yapf - Python linter / automatic styling]() -- [pylint - Python linter]() -- [flake8 - Python linter]() -- [bandit]() -- [autopep8 - Python automatic styling/linting]() -- [pytest - Python test module]() -- [pytest-sugar - PyTest plugin]() -- [pytest-isort - PyTest isort plugin]() -- [coverage - Python Coverage module]() -- [codecov - CodeCov.io coverage service]() -- [pytest-cov - PyTest coverage plugin]() -- [mock - Python test mocking module]() -- [responses - Python request response testing module]() -- [twine - Python package bundling]() -- [mypy - Python type validation]() diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 7a3411cfc..000000000 --- a/SECURITY.md +++ /dev/null @@ -1,14 +0,0 @@ -# Security Policy - -This project is currently in alpha and is not guaranteed. Please be warned... Your mileage may vary! -All current versions of this client are pre-releases. - -## Supported Versions - -| Version | Supported | -| ------- | ------------------ | -| 0.0.x | :x: | - -## Reporting a Vulnerability - -Please report bugs by raising a new issue on this repository: https://github.com/mbeacom/cloudendure-python/issues/new diff --git a/build/.gitignore b/build/.gitignore new file mode 100644 index 000000000..ff55ad2fe --- /dev/null +++ b/build/.gitignore @@ -0,0 +1,4 @@ +* + +!.gitignore +!fix-*.py diff --git a/build/fix-api.py b/build/fix-api.py new file mode 100644 index 000000000..2eeaa427c --- /dev/null +++ b/build/fix-api.py @@ -0,0 +1,27 @@ +import json + +fh = open("cloudendure-api.json") +j_data = json.load(fh) + +## +## Since the CE def is swagger 2.0, we can't use any kind of oneOf for the volume +## encryption keys. Nothing will work via the json, so we'll have to fix the code. +## +# get rid of incorrect definition, and replace with correct one +# del j_data["definitions"]["Region"]["properties"]["volumeEncryptionKeys"]["items"][ +# "type" +# ] +# j_data["definitions"]["Region"]["properties"]["volumeEncryptionKeys"]["items"][ +# "oneOf" +# ] = [ +# {"type": "string"}, +# {"type": "object"}, +# ] +# j_data["definitions"]["Region"]["properties"]["volumeEncryptionKeys"]["items"][ +# "AnyValue" +# ] = {} +# j_data["definitions"]["Region"]["properties"]["volumeEncryptionKeys"]["items"][ + +# write correct api json +with open("cloudendure-api-fixed.json", "w") as outfile: + json.dump(j_data, outfile) diff --git a/build/fix-generated-code.py b/build/fix-generated-code.py new file mode 100644 index 000000000..0c1d2a0a5 --- /dev/null +++ b/build/fix-generated-code.py @@ -0,0 +1,34 @@ +import sys + +## This fixes the broken volume_encryption_keys +broken_model_path = "../cloudendure/model/region.py" +fh = open(broken_model_path, mode="r") +original_file_contents = fh.readlines() +fh.close() + +code_found = False +docs_found = False +with open(broken_model_path, mode="w") as wfh: + for line in original_file_contents: + if line == " 'volume_encryption_keys': ([str],), # noqa: E501\n": + print("Fixing broken code...") + code_found = True + wfh.write( + " 'volume_encryption_keys': ([str,dict,none_type],), # noqa: E501\n" + ) + elif ( + line + == " volume_encryption_keys ([str]): [optional] # noqa: E501\n" + ): + print("Fixing broken docs...") + docs_found = True + wfh.write( + " volume_encryption_keys ([str,dict,none_type]): [optional] # noqa: E501\n" + ) + else: + wfh.write(line) + +if not code_found or not docs_found: + sys.exit( + f"Expected line not found. Has the swagger def changed? (code: {code_found}, docs: {docs_found})" + ) diff --git a/cloudendure/__init__.py b/cloudendure/__init__.py index 7b78df4c3..850bc2c48 100644 --- a/cloudendure/__init__.py +++ b/cloudendure/__init__.py @@ -1,3 +1,29 @@ -from .cloudendure import CloudEndure +# flake8: noqa -__all__ = ["CloudEndure"] +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +__version__ = "1.0.0" + +# import ApiClient +from cloudendure.api_client import ApiClient + +# import Configuration +from cloudendure.configuration import Configuration + +# import exceptions +from cloudendure.exceptions import ( + ApiAttributeError, + ApiException, + ApiKeyError, + ApiTypeError, + ApiValueError, + OpenApiException, +) diff --git a/cloudendure/__version__.py b/cloudendure/__version__.py deleted file mode 100644 index a8d4557d2..000000000 --- a/cloudendure/__version__.py +++ /dev/null @@ -1 +0,0 @@ -__version__ = "0.3.5" diff --git a/cloudendure/api.py b/cloudendure/api.py deleted file mode 100644 index de787f802..000000000 --- a/cloudendure/api.py +++ /dev/null @@ -1,242 +0,0 @@ -# -*- coding: utf-8 -*- -"""Define the CloudEndure API wrapper related logic. - -Attributes: - API_VERSION (str): The CloudEndure API version to be used. - AUTH_TTL (str): The authentication token expiration in seconds. Defaults to: 3600. - HOST (str): The CloudEndure API URI. Defaults to: https://console.cloudendure.com - logger (logging.Logger): The default logger for the module. - -""" -from __future__ import annotations - -import datetime -import json -import logging -import os -from typing import Any, Dict, List -from webbrowser import open_new_tab - -import requests -from requests.models import Response -from requests.sessions import Session - -from cloudendure.config import CloudEndureConfig -from cloudendure.exceptions import CloudEndureException -from cloudendure.utils import get_user_agent - -HOST: str = os.environ.get("CLOUDENDURE_HOST", "https://console.cloudendure.com") -API_VERSION: str = os.environ.get("CLOUDENDURE_API_VERSION", "latest").lower() -AUTH_TTL: datetime.timedelta = datetime.timedelta( - seconds=int(os.environ.get("CLOUDENDURE_AUTH_TTL", "3600")) -) # Default to 60 minutes. -METHOD_TYPES: List[str] = ["get", "post", "patch", "delete", "put"] - -logger: logging.Logger = logging.getLogger(__name__) - - -class CloudEndureAPI: - """Define the CloudEndure API base. - - Attributes: - api_endpoint (str): The CloudEndure API endpoint to be used for API calls. - credentials (dict): The mapping of CloudEndure credentials. - session (requests.Session): The requests Session to be used throughout the lifecycle - of this API interaction. - - """ - - TOP_LEVEL: List[str] = ["projects", "blueprints"] - - def __init__(self, config: CloudEndureConfig, *args, **kwargs) -> None: - """Initialize the CloudEndure API client. - - Attributes: - time_now (datetime): The datetime now in UTC. - - """ - time_now: datetime.datetime = datetime.datetime.utcnow() - - self.api_endpoint: str = f"{HOST}/api/{API_VERSION}" - self.config: CloudEndureConfig = config - - self.projects: List[str] = [] - self.session: Session = requests.Session() - _xsrf_token: str = self.config.active_config.get("token", "") - self.session.headers: Dict[str, str] = { - "Content-Type": "application/json", - "Accept": "text/plain", - "User-Agent": get_user_agent(), - } - self.timestamps: Dict[str, Any] = { - "created": time_now, - "updated": time_now, - "last_call": time_now, - } - - if _xsrf_token: - self.session.headers.update({"X-XSRF-TOKEN": _xsrf_token}) - - def login(self, username: str = "", password: str = "", token: str = "") -> bool: - """Login to the CloudEndure API console. - - Args: - username (str): The CloudEndure username to be used. - Defaults to the environment specific default. - password (str): The CloudEndure password to be used. - Defaults to the environment specific default. - token (str): The CloudEndure token to be used. This argument takes precedence. - If provided, username and password will not be used. - Defaults to the environment specific default. - - Attributes: - endpoint (str): The CloudEndure API endpoint to be used. - _username (str): The CloudEndure API username. - _password (str): The CloudEndure API password. - _token (str): The CloudEndure API token. - _auth (dict): The CloudEndure API username/password dictionary map. - response (requests.Response): The CloudEndure API login request response object. - _xsrf_token (str): The XSRF token to be used for subsequent API requests. - - TODO: - * Verify default XSRF-Token TTL and check validity before performing - subsequent authentication requests. - - """ - _username: str = self.config.active_config["username"] or username - _password: str = self.config.active_config["password"] or password - _token: str = self.config.active_config["user_api_token"] or token - _auth: Dict[str, str] = {} - - if _token: - _auth["userApiToken"] = _token - elif _username and _password: - _auth = {"username": _username, "password": _password} - else: - print("You must configure your authentication credentials!") - return False - - # Attempt to login to the CloudEndure API via a POST request. - response: requests.Response = self.api_call("login", "post", data=json.dumps(_auth)) - - # Check whether or not the request was successful. - if response.status_code not in [200, 307]: - if response.status_code == 401: - print("\nBad CloudEndure Credentials! Check your username/password and try again!\n") - elif response.status_code == 402: - print("\nNo CloudEndure License! Please configure your account and try again!\n") - elif response.status_code == 429: - print("\nCloudEndure authentication failure limit reached! Please try again later!\n") - return False - - # Grab the XSRF token received from the response, as stored in cookies. - # _xsrf_token: str = str(response.cookies["XSRF-TOKEN"]) - _xsrf_token: str = str(response.cookies.get("XSRF-TOKEN", "")) - if not _xsrf_token: - raise CloudEndureException("Failed to fetch a token from CloudEndure!") - - # Strip the XSRF token of wrapping double-quotes from the cookie. - if _xsrf_token.startswith('"') and _xsrf_token.endswith('"'): - _xsrf_token: str = _xsrf_token[1:-1] - - # Set the XSRF token data on the CloudEndureAPI object. - time_now: datetime.datetime = datetime.datetime.utcnow() - self.config.update_token(_xsrf_token) - self.session.headers.update({"X-XSRF-TOKEN": _xsrf_token}) - self.timestamps["last_call"] = time_now - return True - - @staticmethod - def get_endpoint(path: str, api_version: str = "latest", host: str = "https://console.cloudendure.com") -> str: - """Build the endpoint path. - - Args: - path (str): The path to be requested. - api_version (str): The API version to be used. - For example: v5 - Defaults to: latest - host (str): The API URL to be used. - Defaults to: https://console.cloudendure.com - - Returns: - str: The CloudEndure API endpoint to be used. - - """ - return f"{host}/api/{api_version}/{path}" - - def api_call(self, path: str, method: str = "get", data: Dict[str, Any] = None) -> Response: - """Handle CloudEndure API calls based on the defined parameters. - - Args: - path (str): The path to be used to perform the call. - - Keyword Args: - method (str): The API method call to be performed. i.e.: get, - data (dict): The data dictionary to be used to perform the request. - - Returns: - requests.models.Response: The CloudEndure API response. - - """ - method: str = method.lower() # Ensure the provided method is lowercase. - - if data is None: - data: Dict[str, Any] = {} - - if method not in METHOD_TYPES: - print("Please specify a valid method type! Must be one of: ", METHOD_TYPES) - return Response() - - if method not in ["get", "delete"] and not data: - print("Paramater mismatch! If calling anything other than get or delete provide data!") - return Response() - - # Attempt to call the CloudEndure API. - try: - ce_call = getattr(self.session, method) - _path = self.get_endpoint(path) - return ce_call(_path, data=data) - except Exception as e: - print(f"Exception encountered in CloudEndure API call: ({e})") - return Response() - - def check_creds(self, login: bool = True) -> Dict[str, str]: - """Check the credential TTL.""" - threshold: datetime.datetime = datetime.datetime.utcnow() - AUTH_TTL - - if threshold < self.config.active_config.get("last_updated", 0): - if login: - is_valid: bool = self.login() - if is_valid: - return {"status": "updated"} - return {"status": "expired"} - return {"status": "valid"} - - def post_endpoint(self, path: str = "") -> Response: - """Create a POST request against the specified path.""" - response: requests.Response = self.session.post(f"{self.api_endpoint}/{path}") - return response - - def get_projects(self, current_project: str = "") -> List[Any]: - """Get the CloudEndure projects associated with the authenticated account.""" - self.login() - response: requests.Response = self.session.get(f"{self.api_endpoint}/projects") - data: Dict[str, Any] = response.json() - status_code: int = response.status_code - - if status_code not in [200]: - raise CloudEndureException() - projects: List[Any] = data["items"] - self.projects: List[Any] = projects - - if current_project: - return list(filter(lambda project: project["name"] == current_project, projects)) - - return projects - - @classmethod - def docs(self) -> str: - """Open the CloudEndure API documentation page.""" - docs_url: str = os.environ.get("CLOUDENDURE_API_DOCS", "https://console.cloudendure.com/api_doc/apis.html") - open_new_tab(docs_url) - return docs_url diff --git a/cloudendure/api/__init__.py b/cloudendure/api/__init__.py new file mode 100644 index 000000000..c21c50522 --- /dev/null +++ b/cloudendure/api/__init__.py @@ -0,0 +1,3 @@ +# do not import all apis into this module because that uses a lot of memory and stack frames +# if you need the ability to import all apis from one package, import them with +# from cloudendure.apis import AccountApi diff --git a/cloudendure/api/account_api.py b/cloudendure/api/account_api.py new file mode 100644 index 000000000..ace3673d4 --- /dev/null +++ b/cloudendure/api/account_api.py @@ -0,0 +1,130 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.model.account import Account +from cloudendure.model_utils import ( + check_allowed_values, # noqa: F401 + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types, +) + + +class AccountApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def __accounts_account_id_get(self, account_id, **kwargs): + """Get Account information # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.accounts_account_id_get(account_id, async_req=True) + >>> result = thread.get() + + Args: + account_id (str): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Account + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["account_id"] = account_id + return self.call_with_http_info(**kwargs) + + self.accounts_account_id_get = _Endpoint( + settings={ + "response_type": (Account,), + "auth": [], + "endpoint_path": "/accounts/{accountId}", + "operation_id": "accounts_account_id_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "account_id", + ], + "required": [ + "account_id", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "account_id": (str,), + }, + "attribute_map": { + "account_id": "accountId", + }, + "location_map": { + "account_id": "path", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__accounts_account_id_get, + ) diff --git a/cloudendure/api/actions_api.py b/cloudendure/api/actions_api.py new file mode 100644 index 000000000..c1681da5f --- /dev/null +++ b/cloudendure/api/actions_api.py @@ -0,0 +1,960 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.model.error import Error +from cloudendure.model.inline_object3 import InlineObject3 +from cloudendure.model.inline_object4 import InlineObject4 +from cloudendure.model.inline_object5 import InlineObject5 +from cloudendure.model.inline_object7 import InlineObject7 +from cloudendure.model.inline_object9 import InlineObject9 +from cloudendure.model.job import Job +from cloudendure.model.jobs_list import JobsList +from cloudendure.model.launch_machines_parameters import LaunchMachinesParameters +from cloudendure.model.machines_list_invalid_ids_and_job import ( + MachinesListInvalidIDsAndJob, +) +from cloudendure.model_utils import ( + check_allowed_values, # noqa: F401 + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types, +) + + +class ActionsApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def __projects_project_id_jobs_get(self, project_id, **kwargs): + """List Jobs # noqa: E501 + + Returns the list of jobs in the project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_jobs_get(project_id, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + + Keyword Args: + offset (int): With which item to start (0 based).. [optional] if omitted the server will use the default value of 0 + limit (int): A number specifying how many entries to return.. [optional] if omitted the server will use the default value of 1500 + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + JobsList + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + return self.call_with_http_info(**kwargs) + + self.projects_project_id_jobs_get = _Endpoint( + settings={ + "response_type": (JobsList,), + "auth": [], + "endpoint_path": "/projects/{projectId}/jobs", + "operation_id": "projects_project_id_jobs_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "offset", + "limit", + ], + "required": [ + "project_id", + ], + "nullable": [], + "enum": [], + "validation": [ + "offset", + "limit", + ], + }, + root_map={ + "validations": { + ("offset",): { + "inclusive_minimum": 0, + }, + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, + }, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "offset": (int,), + "limit": (int,), + }, + "attribute_map": { + "project_id": "projectId", + "offset": "offset", + "limit": "limit", + }, + "location_map": { + "project_id": "path", + "offset": "query", + "limit": "query", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__projects_project_id_jobs_get, + ) + + def __projects_project_id_jobs_job_id_get(self, project_id, job_id, **kwargs): + """Get Job # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_jobs_job_id_get(project_id, job_id, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + job_id (str): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Job + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["job_id"] = job_id + return self.call_with_http_info(**kwargs) + + self.projects_project_id_jobs_job_id_get = _Endpoint( + settings={ + "response_type": (Job,), + "auth": [], + "endpoint_path": "/projects/{projectId}/jobs/{jobId}", + "operation_id": "projects_project_id_jobs_job_id_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "job_id", + ], + "required": [ + "project_id", + "job_id", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "job_id": (str,), + }, + "attribute_map": { + "project_id": "projectId", + "job_id": "jobId", + }, + "location_map": { + "project_id": "path", + "job_id": "path", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__projects_project_id_jobs_job_id_get, + ) + + def __projects_project_id_launch_machines_post( + self, project_id, launch_machines, **kwargs + ): + """Launch target machines # noqa: E501 + + Launch target machines for test, recovery or cutover (by passing enum value to launchType param) # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_launch_machines_post(project_id, launch_machines, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + launch_machines (LaunchMachinesParameters): Machines to launch + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Job + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["launch_machines"] = launch_machines + return self.call_with_http_info(**kwargs) + + self.projects_project_id_launch_machines_post = _Endpoint( + settings={ + "response_type": (Job,), + "auth": [], + "endpoint_path": "/projects/{projectId}/launchMachines", + "operation_id": "projects_project_id_launch_machines_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "launch_machines", + ], + "required": [ + "project_id", + "launch_machines", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "launch_machines": (LaunchMachinesParameters,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "launch_machines": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__projects_project_id_launch_machines_post, + ) + + def __projects_project_id_move_machines_post( + self, project_id, move_machines_params, **kwargs + ): + """Moves machines to another project # noqa: E501 + + TBC # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_move_machines_post(project_id, move_machines_params, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + move_machines_params (InlineObject4): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["move_machines_params"] = move_machines_params + return self.call_with_http_info(**kwargs) + + self.projects_project_id_move_machines_post = _Endpoint( + settings={ + "response_type": None, + "auth": [], + "endpoint_path": "/projects/{projectId}/moveMachines", + "operation_id": "projects_project_id_move_machines_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "move_machines_params", + ], + "required": [ + "project_id", + "move_machines_params", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "move_machines_params": (InlineObject4,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "move_machines_params": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__projects_project_id_move_machines_post, + ) + + def __projects_project_id_pause_replication_post( + self, project_id, machine_ids, **kwargs + ): + """Pause replication # noqa: E501 + + Pause replication for given machines # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_pause_replication_post(project_id, machine_ids, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + machine_ids (InlineObject9): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + MachinesListInvalidIDsAndJob + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["machine_ids"] = machine_ids + return self.call_with_http_info(**kwargs) + + self.projects_project_id_pause_replication_post = _Endpoint( + settings={ + "response_type": (MachinesListInvalidIDsAndJob,), + "auth": [], + "endpoint_path": "/projects/{projectId}/pauseReplication", + "operation_id": "projects_project_id_pause_replication_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "machine_ids", + ], + "required": [ + "project_id", + "machine_ids", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "machine_ids": (InlineObject9,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "machine_ids": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__projects_project_id_pause_replication_post, + ) + + def __projects_project_id_replicas_delete( + self, project_id, replica_ids, **kwargs + ): + """Perform Cleanup # noqa: E501 + + Spawns a cleanup job to remove the specified target machines from the cloud. Returns the job information. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_replicas_delete(project_id, replica_ids, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + replica_ids (InlineObject5): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Job + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["replica_ids"] = replica_ids + return self.call_with_http_info(**kwargs) + + self.projects_project_id_replicas_delete = _Endpoint( + settings={ + "response_type": (Job,), + "auth": [], + "endpoint_path": "/projects/{projectId}/replicas", + "operation_id": "projects_project_id_replicas_delete", + "http_method": "DELETE", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "replica_ids", + ], + "required": [ + "project_id", + "replica_ids", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "replica_ids": (InlineObject5,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "replica_ids": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__projects_project_id_replicas_delete, + ) + + def __projects_project_id_reverse_replication_post(self, project_id, **kwargs): + """Reverse replication direction # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_reverse_replication_post(project_id, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + return self.call_with_http_info(**kwargs) + + self.projects_project_id_reverse_replication_post = _Endpoint( + settings={ + "response_type": None, + "auth": [], + "endpoint_path": "/projects/{projectId}/reverseReplication", + "operation_id": "projects_project_id_reverse_replication_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + ], + "required": [ + "project_id", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__projects_project_id_reverse_replication_post, + ) + + def __projects_project_id_start_replication_post( + self, project_id, machine_ids, **kwargs + ): + """Start replication # noqa: E501 + + Start replication of the specified source machines. Returns the machine for which replication has been successfully started, and the IDs for which replication could not be started. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_start_replication_post(project_id, machine_ids, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + machine_ids (InlineObject3): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + MachinesListInvalidIDsAndJob + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["machine_ids"] = machine_ids + return self.call_with_http_info(**kwargs) + + self.projects_project_id_start_replication_post = _Endpoint( + settings={ + "response_type": (MachinesListInvalidIDsAndJob,), + "auth": [], + "endpoint_path": "/projects/{projectId}/startReplication", + "operation_id": "projects_project_id_start_replication_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "machine_ids", + ], + "required": [ + "project_id", + "machine_ids", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "machine_ids": (InlineObject3,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "machine_ids": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__projects_project_id_start_replication_post, + ) + + def __projects_project_id_stop_replication_post( + self, project_id, machine_ids, **kwargs + ): + """Stop replication # noqa: E501 + + Stop replication of the specified source machines. Returns the machine for which replication has been successfully stopped, and the IDs for which replication could not be stopped. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_stop_replication_post(project_id, machine_ids, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + machine_ids (InlineObject7): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + MachinesListInvalidIDsAndJob + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["machine_ids"] = machine_ids + return self.call_with_http_info(**kwargs) + + self.projects_project_id_stop_replication_post = _Endpoint( + settings={ + "response_type": (MachinesListInvalidIDsAndJob,), + "auth": [], + "endpoint_path": "/projects/{projectId}/stopReplication", + "operation_id": "projects_project_id_stop_replication_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "machine_ids", + ], + "required": [ + "project_id", + "machine_ids", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "machine_ids": (InlineObject7,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "machine_ids": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__projects_project_id_stop_replication_post, + ) diff --git a/cloudendure/api/authentication_api.py b/cloudendure/api/authentication_api.py new file mode 100644 index 000000000..cd3e0e39c --- /dev/null +++ b/cloudendure/api/authentication_api.py @@ -0,0 +1,211 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.model.error import Error +from cloudendure.model.inline_object1 import InlineObject1 +from cloudendure.model.user import User +from cloudendure.model_utils import ( + check_allowed_values, # noqa: F401 + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types, +) + + +class AuthenticationApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def __login_post(self, login_info, **kwargs): + """Login # noqa: E501 + + Upon successful authentication, this method returns a session identifier cookie that can be used to authenticate subsequent API calls. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.login_post(login_info, async_req=True) + >>> result = thread.get() + + Args: + login_info (InlineObject1): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + User + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["login_info"] = login_info + return self.call_with_http_info(**kwargs) + + self.login_post = _Endpoint( + settings={ + "response_type": (User,), + "auth": [], + "endpoint_path": "/login", + "operation_id": "login_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [ + "login_info", + ], + "required": [ + "login_info", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "login_info": (InlineObject1,), + }, + "attribute_map": {}, + "location_map": { + "login_info": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__login_post, + ) + + def __logout_post(self, **kwargs): + """Logout # noqa: E501 + + Invalidates the session identifier associated with this session. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.logout_post(async_req=True) + >>> result = thread.get() + + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + return self.call_with_http_info(**kwargs) + + self.logout_post = _Endpoint( + settings={ + "response_type": None, + "auth": [], + "endpoint_path": "/logout", + "operation_id": "logout_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [], + "required": [], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": {}, + "attribute_map": {}, + "location_map": {}, + "collection_format_map": {}, + }, + headers_map={ + "accept": [], + "content_type": [], + }, + api_client=api_client, + callable=__logout_post, + ) diff --git a/cloudendure/api/blueprint_api.py b/cloudendure/api/blueprint_api.py new file mode 100644 index 000000000..445954cd2 --- /dev/null +++ b/cloudendure/api/blueprint_api.py @@ -0,0 +1,463 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.model.blueprint import Blueprint +from cloudendure.model.blueprint_list import BlueprintList +from cloudendure.model_utils import ( + check_allowed_values, # noqa: F401 + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types, +) + + +class BlueprintApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def __projects_project_id_blueprints_blueprint_id_get( + self, project_id, blueprint_id, **kwargs + ): + """Get Blueprint # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_blueprints_blueprint_id_get(project_id, blueprint_id, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + blueprint_id (str): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Blueprint + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["blueprint_id"] = blueprint_id + return self.call_with_http_info(**kwargs) + + self.projects_project_id_blueprints_blueprint_id_get = _Endpoint( + settings={ + "response_type": (Blueprint,), + "auth": [], + "endpoint_path": "/projects/{projectId}/blueprints/{blueprintId}", + "operation_id": "projects_project_id_blueprints_blueprint_id_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "blueprint_id", + ], + "required": [ + "project_id", + "blueprint_id", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "blueprint_id": (str,), + }, + "attribute_map": { + "project_id": "projectId", + "blueprint_id": "blueprintId", + }, + "location_map": { + "project_id": "path", + "blueprint_id": "path", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__projects_project_id_blueprints_blueprint_id_get, + ) + + def __projects_project_id_blueprints_blueprint_id_patch( + self, project_id, blueprint_id, blueprint, **kwargs + ): + """Configure Blueprint # noqa: E501 + + Configure target machine characteristics: machine and disk types, network configuration, etc. Returns the modified object. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_blueprints_blueprint_id_patch(project_id, blueprint_id, blueprint, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + blueprint_id (str): + blueprint (Blueprint): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Blueprint + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["blueprint_id"] = blueprint_id + kwargs["blueprint"] = blueprint + return self.call_with_http_info(**kwargs) + + self.projects_project_id_blueprints_blueprint_id_patch = _Endpoint( + settings={ + "response_type": (Blueprint,), + "auth": [], + "endpoint_path": "/projects/{projectId}/blueprints/{blueprintId}", + "operation_id": "projects_project_id_blueprints_blueprint_id_patch", + "http_method": "PATCH", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "blueprint_id", + "blueprint", + ], + "required": [ + "project_id", + "blueprint_id", + "blueprint", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "blueprint_id": (str,), + "blueprint": (Blueprint,), + }, + "attribute_map": { + "project_id": "projectId", + "blueprint_id": "blueprintId", + }, + "location_map": { + "project_id": "path", + "blueprint_id": "path", + "blueprint": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__projects_project_id_blueprints_blueprint_id_patch, + ) + + def __projects_project_id_blueprints_get(self, project_id, **kwargs): + """List Blueprints # noqa: E501 + + Returns the list of available blueprints in the project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_blueprints_get(project_id, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + + Keyword Args: + offset (int): With which item to start (0 based).. [optional] if omitted the server will use the default value of 0 + limit (int): A number specifying how many entries to return.. [optional] if omitted the server will use the default value of 1500 + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + BlueprintList + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + return self.call_with_http_info(**kwargs) + + self.projects_project_id_blueprints_get = _Endpoint( + settings={ + "response_type": (BlueprintList,), + "auth": [], + "endpoint_path": "/projects/{projectId}/blueprints", + "operation_id": "projects_project_id_blueprints_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "offset", + "limit", + ], + "required": [ + "project_id", + ], + "nullable": [], + "enum": [], + "validation": [ + "offset", + "limit", + ], + }, + root_map={ + "validations": { + ("offset",): { + "inclusive_minimum": 0, + }, + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, + }, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "offset": (int,), + "limit": (int,), + }, + "attribute_map": { + "project_id": "projectId", + "offset": "offset", + "limit": "limit", + }, + "location_map": { + "project_id": "path", + "offset": "query", + "limit": "query", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__projects_project_id_blueprints_get, + ) + + def __projects_project_id_blueprints_post( + self, project_id, blueprint, **kwargs + ): + """Create Blueprint # noqa: E501 + + Define the target machine characteristics: machine and disk types, network configuration, etc. There can be only one blueprint per machine per region. Returns the newly created object. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_blueprints_post(project_id, blueprint, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + blueprint (Blueprint): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Blueprint + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["blueprint"] = blueprint + return self.call_with_http_info(**kwargs) + + self.projects_project_id_blueprints_post = _Endpoint( + settings={ + "response_type": (Blueprint,), + "auth": [], + "endpoint_path": "/projects/{projectId}/blueprints", + "operation_id": "projects_project_id_blueprints_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "blueprint", + ], + "required": [ + "project_id", + "blueprint", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "blueprint": (Blueprint,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "blueprint": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__projects_project_id_blueprints_post, + ) diff --git a/cloudendure/api/cloud_api.py b/cloudendure/api/cloud_api.py new file mode 100644 index 000000000..3447cce8c --- /dev/null +++ b/cloudendure/api/cloud_api.py @@ -0,0 +1,568 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.model.clouds_list import CloudsList +from cloudendure.model.region import Region +from cloudendure.model.regions_list import RegionsList +from cloudendure.model_utils import ( + check_allowed_values, # noqa: F401 + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types, +) + + +class CloudApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def __cloud_credentials_creds_id_regions_get(self, creds_id, **kwargs): + """List Regions # noqa: E501 + + Returns the list of regions these credentials provide access to. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.cloud_credentials_creds_id_regions_get(creds_id, async_req=True) + >>> result = thread.get() + + Args: + creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + + Keyword Args: + offset (int): With which item to start (0 based).. [optional] if omitted the server will use the default value of 0 + limit (int): A number specifying how many entries to return.. [optional] if omitted the server will use the default value of 1500 + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + RegionsList + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["creds_id"] = creds_id + return self.call_with_http_info(**kwargs) + + self.cloud_credentials_creds_id_regions_get = _Endpoint( + settings={ + "response_type": (RegionsList,), + "auth": [], + "endpoint_path": "/cloudCredentials/{credsId}/regions", + "operation_id": "cloud_credentials_creds_id_regions_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "creds_id", + "offset", + "limit", + ], + "required": [ + "creds_id", + ], + "nullable": [], + "enum": [], + "validation": [ + "offset", + "limit", + ], + }, + root_map={ + "validations": { + ("offset",): { + "inclusive_minimum": 0, + }, + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, + }, + "allowed_values": {}, + "openapi_types": { + "creds_id": (str,), + "offset": (int,), + "limit": (int,), + }, + "attribute_map": { + "creds_id": "credsId", + "offset": "offset", + "limit": "limit", + }, + "location_map": { + "creds_id": "path", + "offset": "query", + "limit": "query", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__cloud_credentials_creds_id_regions_get, + ) + + def __cloud_credentials_creds_id_regions_region_id_delete( + self, creds_id, region_id, **kwargs + ): + """Delete region (VCenter) # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.cloud_credentials_creds_id_regions_region_id_delete(creds_id, region_id, async_req=True) + >>> result = thread.get() + + Args: + creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + region_id (str): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["creds_id"] = creds_id + kwargs["region_id"] = region_id + return self.call_with_http_info(**kwargs) + + self.cloud_credentials_creds_id_regions_region_id_delete = _Endpoint( + settings={ + "response_type": None, + "auth": [], + "endpoint_path": "/cloudCredentials/{credsId}/regions/{regionId}", + "operation_id": "cloud_credentials_creds_id_regions_region_id_delete", + "http_method": "DELETE", + "servers": None, + }, + params_map={ + "all": [ + "creds_id", + "region_id", + ], + "required": [ + "creds_id", + "region_id", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "creds_id": (str,), + "region_id": (str,), + }, + "attribute_map": { + "creds_id": "credsId", + "region_id": "regionId", + }, + "location_map": { + "creds_id": "path", + "region_id": "path", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": [], + "content_type": [], + }, + api_client=api_client, + callable=__cloud_credentials_creds_id_regions_region_id_delete, + ) + + def __cloud_credentials_creds_id_regions_region_id_get( + self, creds_id, region_id, **kwargs + ): + """Get Region # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.cloud_credentials_creds_id_regions_region_id_get(creds_id, region_id, async_req=True) + >>> result = thread.get() + + Args: + creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + region_id (str): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Region + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["creds_id"] = creds_id + kwargs["region_id"] = region_id + return self.call_with_http_info(**kwargs) + + self.cloud_credentials_creds_id_regions_region_id_get = _Endpoint( + settings={ + "response_type": (Region,), + "auth": [], + "endpoint_path": "/cloudCredentials/{credsId}/regions/{regionId}", + "operation_id": "cloud_credentials_creds_id_regions_region_id_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "creds_id", + "region_id", + ], + "required": [ + "creds_id", + "region_id", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "creds_id": (str,), + "region_id": (str,), + }, + "attribute_map": { + "creds_id": "credsId", + "region_id": "regionId", + }, + "location_map": { + "creds_id": "path", + "region_id": "path", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__cloud_credentials_creds_id_regions_region_id_get, + ) + + def __cloud_credentials_creds_id_regions_region_id_patch( + self, creds_id, region_id, region, **kwargs + ): + """Patch region (rename) # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.cloud_credentials_creds_id_regions_region_id_patch(creds_id, region_id, region, async_req=True) + >>> result = thread.get() + + Args: + creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + region_id (str): + region (Region): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Region + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["creds_id"] = creds_id + kwargs["region_id"] = region_id + kwargs["region"] = region + return self.call_with_http_info(**kwargs) + + self.cloud_credentials_creds_id_regions_region_id_patch = _Endpoint( + settings={ + "response_type": (Region,), + "auth": [], + "endpoint_path": "/cloudCredentials/{credsId}/regions/{regionId}", + "operation_id": "cloud_credentials_creds_id_regions_region_id_patch", + "http_method": "PATCH", + "servers": None, + }, + params_map={ + "all": [ + "creds_id", + "region_id", + "region", + ], + "required": [ + "creds_id", + "region_id", + "region", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "creds_id": (str,), + "region_id": (str,), + "region": (Region,), + }, + "attribute_map": { + "creds_id": "credsId", + "region_id": "regionId", + }, + "location_map": { + "creds_id": "path", + "region_id": "path", + "region": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__cloud_credentials_creds_id_regions_region_id_patch, + ) + + def __clouds_get(self, **kwargs): + """List Clouds # noqa: E501 + + Returns a list of clouds that can be used with CloudEndure. The roles array determines whether this cloud can be used as source, target, or both. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.clouds_get(async_req=True) + >>> result = thread.get() + + + Keyword Args: + offset (int): With which item to start (0 based).. [optional] if omitted the server will use the default value of 0 + limit (int): A number specifying how many entries to return.. [optional] if omitted the server will use the default value of 1500 + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + CloudsList + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + return self.call_with_http_info(**kwargs) + + self.clouds_get = _Endpoint( + settings={ + "response_type": (CloudsList,), + "auth": [], + "endpoint_path": "/clouds", + "operation_id": "clouds_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "offset", + "limit", + ], + "required": [], + "nullable": [], + "enum": [], + "validation": [ + "offset", + "limit", + ], + }, + root_map={ + "validations": { + ("offset",): { + "inclusive_minimum": 0, + }, + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, + }, + "allowed_values": {}, + "openapi_types": { + "offset": (int,), + "limit": (int,), + }, + "attribute_map": { + "offset": "offset", + "limit": "limit", + }, + "location_map": { + "offset": "query", + "limit": "query", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__clouds_get, + ) diff --git a/cloudendure/api/cloud_credentials_api.py b/cloudendure/api/cloud_credentials_api.py new file mode 100644 index 000000000..58498d2e4 --- /dev/null +++ b/cloudendure/api/cloud_credentials_api.py @@ -0,0 +1,429 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.model.cloud_credentials import CloudCredentials +from cloudendure.model.cloud_credentials_list import CloudCredentialsList +from cloudendure.model.cloud_credentials_request import CloudCredentialsRequest +from cloudendure.model_utils import ( + check_allowed_values, # noqa: F401 + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types, +) + + +class CloudCredentialsApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def __cloud_credentials_creds_id_get(self, creds_id, **kwargs): + """Get Credentials # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.cloud_credentials_creds_id_get(creds_id, async_req=True) + >>> result = thread.get() + + Args: + creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + CloudCredentials + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["creds_id"] = creds_id + return self.call_with_http_info(**kwargs) + + self.cloud_credentials_creds_id_get = _Endpoint( + settings={ + "response_type": (CloudCredentials,), + "auth": [], + "endpoint_path": "/cloudCredentials/{credsId}", + "operation_id": "cloud_credentials_creds_id_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "creds_id", + ], + "required": [ + "creds_id", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "creds_id": (str,), + }, + "attribute_map": { + "creds_id": "credsId", + }, + "location_map": { + "creds_id": "path", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__cloud_credentials_creds_id_get, + ) + + def __cloud_credentials_creds_id_patch( + self, creds_id, cloud_credentials, **kwargs + ): + """Change Credentials # noqa: E501 + + Changes the cloud credentials. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.cloud_credentials_creds_id_patch(creds_id, cloud_credentials, async_req=True) + >>> result = thread.get() + + Args: + creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + cloud_credentials (CloudCredentialsRequest): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + CloudCredentials + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["creds_id"] = creds_id + kwargs["cloud_credentials"] = cloud_credentials + return self.call_with_http_info(**kwargs) + + self.cloud_credentials_creds_id_patch = _Endpoint( + settings={ + "response_type": (CloudCredentials,), + "auth": [], + "endpoint_path": "/cloudCredentials/{credsId}", + "operation_id": "cloud_credentials_creds_id_patch", + "http_method": "PATCH", + "servers": None, + }, + params_map={ + "all": [ + "creds_id", + "cloud_credentials", + ], + "required": [ + "creds_id", + "cloud_credentials", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "creds_id": (str,), + "cloud_credentials": (CloudCredentialsRequest,), + }, + "attribute_map": { + "creds_id": "credsId", + }, + "location_map": { + "creds_id": "path", + "cloud_credentials": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__cloud_credentials_creds_id_patch, + ) + + def __cloud_credentials_get(self, **kwargs): + """List Credentials # noqa: E501 + + Returns the list of cloudCredentials in the account. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.cloud_credentials_get(async_req=True) + >>> result = thread.get() + + + Keyword Args: + offset (int): With which item to start (0 based).. [optional] if omitted the server will use the default value of 0 + limit (int): A number specifying how many entries to return.. [optional] if omitted the server will use the default value of 1500 + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + CloudCredentialsList + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + return self.call_with_http_info(**kwargs) + + self.cloud_credentials_get = _Endpoint( + settings={ + "response_type": (CloudCredentialsList,), + "auth": [], + "endpoint_path": "/cloudCredentials", + "operation_id": "cloud_credentials_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "offset", + "limit", + ], + "required": [], + "nullable": [], + "enum": [], + "validation": [ + "offset", + "limit", + ], + }, + root_map={ + "validations": { + ("offset",): { + "inclusive_minimum": 0, + }, + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, + }, + "allowed_values": {}, + "openapi_types": { + "offset": (int,), + "limit": (int,), + }, + "attribute_map": { + "offset": "offset", + "limit": "limit", + }, + "location_map": { + "offset": "query", + "limit": "query", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__cloud_credentials_get, + ) + + def __cloud_credentials_post(self, cloud_credentials, **kwargs): + """Create Credentials # noqa: E501 + + Provide the credentials with which to access the cloud API. Returns the newly created object. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.cloud_credentials_post(cloud_credentials, async_req=True) + >>> result = thread.get() + + Args: + cloud_credentials (CloudCredentialsRequest): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + CloudCredentials + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["cloud_credentials"] = cloud_credentials + return self.call_with_http_info(**kwargs) + + self.cloud_credentials_post = _Endpoint( + settings={ + "response_type": (CloudCredentials,), + "auth": [], + "endpoint_path": "/cloudCredentials", + "operation_id": "cloud_credentials_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [ + "cloud_credentials", + ], + "required": [ + "cloud_credentials", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "cloud_credentials": (CloudCredentialsRequest,), + }, + "attribute_map": {}, + "location_map": { + "cloud_credentials": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__cloud_credentials_post, + ) diff --git a/cloudendure/api/default_api.py b/cloudendure/api/default_api.py new file mode 100644 index 000000000..af173c55c --- /dev/null +++ b/cloudendure/api/default_api.py @@ -0,0 +1,1157 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.model.audit_log import AuditLog +from cloudendure.model.error import Error +from cloudendure.model.extended_account_info import ExtendedAccountInfo +from cloudendure.model.inline_object2 import InlineObject2 +from cloudendure.model.inline_object6 import InlineObject6 +from cloudendure.model.inline_response2001 import InlineResponse2001 +from cloudendure.model.inline_response2002 import InlineResponse2002 +from cloudendure.model.project_storage import ProjectStorage +from cloudendure.model.projects_and_users import ProjectsAndUsers +from cloudendure.model.user import User +from cloudendure.model.users_and_roles import UsersAndRoles +from cloudendure.model.users_list import UsersList +from cloudendure.model_utils import ( + check_allowed_values, # noqa: F401 + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types, +) + + +class DefaultApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def __accounts_account_id_access_get(self, account_id, username, **kwargs): + """get a temporary token by email # noqa: E501 + + get a temporary token by email. Available for account owner when SSO is used # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.accounts_account_id_access_get(account_id, username, async_req=True) + >>> result = thread.get() + + Args: + account_id (str): + username (str): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + InlineResponse2002 + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["account_id"] = account_id + kwargs["username"] = username + return self.call_with_http_info(**kwargs) + + self.accounts_account_id_access_get = _Endpoint( + settings={ + "response_type": (InlineResponse2002,), + "auth": [], + "endpoint_path": "/accounts/{accountId}/access", + "operation_id": "accounts_account_id_access_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "account_id", + "username", + ], + "required": [ + "account_id", + "username", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "account_id": (str,), + "username": (str,), + }, + "attribute_map": { + "account_id": "accountId", + "username": "username", + }, + "location_map": { + "account_id": "path", + "username": "query", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__accounts_account_id_access_get, + ) + + def __extended_account_info_get(self, **kwargs): + """Returns the extended current account information. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.extended_account_info_get(async_req=True) + >>> result = thread.get() + + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + ExtendedAccountInfo + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + return self.call_with_http_info(**kwargs) + + self.extended_account_info_get = _Endpoint( + settings={ + "response_type": (ExtendedAccountInfo,), + "auth": [], + "endpoint_path": "/extendedAccountInfo", + "operation_id": "extended_account_info_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [], + "required": [], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": {}, + "attribute_map": {}, + "location_map": {}, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__extended_account_info_get, + ) + + def __projects_assign_users_post(self, projects_and_users, **kwargs): + """Assign User # noqa: E501 + + Assign User to Project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_assign_users_post(projects_and_users, async_req=True) + >>> result = thread.get() + + Args: + projects_and_users (ProjectsAndUsers): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["projects_and_users"] = projects_and_users + return self.call_with_http_info(**kwargs) + + self.projects_assign_users_post = _Endpoint( + settings={ + "response_type": None, + "auth": [], + "endpoint_path": "/projects/assignUsers", + "operation_id": "projects_assign_users_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [ + "projects_and_users", + ], + "required": [ + "projects_and_users", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "projects_and_users": (ProjectsAndUsers,), + }, + "attribute_map": {}, + "location_map": { + "projects_and_users": "body", + }, + "collection_format_map": {}, + }, + headers_map={"accept": [], "content_type": ["application/json"]}, + api_client=api_client, + callable=__projects_assign_users_post, + ) + + def __projects_project_id_audit_log_get(self, project_id, **kwargs): + """Get audit log # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_audit_log_get(project_id, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + + Keyword Args: + limit (int): A number specifying how many entries to return.. [optional] if omitted the server will use the default value of 1500 + from_date_time (datetime): Used to limit the response to a specific date range. Must be used in conjunction with toDateTime param.. [optional] + to_date_time (datetime): Used to limit the response to a specific date range. Must be used in conjunction with fromDateTime param.. [optional] + format (str): [optional] if omitted the server will use the default value of "json" + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + AuditLog + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + return self.call_with_http_info(**kwargs) + + self.projects_project_id_audit_log_get = _Endpoint( + settings={ + "response_type": (AuditLog,), + "auth": [], + "endpoint_path": "/projects/{projectId}/auditLog", + "operation_id": "projects_project_id_audit_log_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "limit", + "from_date_time", + "to_date_time", + "format", + ], + "required": [ + "project_id", + ], + "nullable": [], + "enum": [], + "validation": [ + "limit", + ], + }, + root_map={ + "validations": { + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, + }, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "limit": (int,), + "from_date_time": (datetime,), + "to_date_time": (datetime,), + "format": (str,), + }, + "attribute_map": { + "project_id": "projectId", + "limit": "limit", + "from_date_time": "fromDateTime", + "to_date_time": "toDateTime", + "format": "format", + }, + "location_map": { + "project_id": "path", + "limit": "query", + "from_date_time": "query", + "to_date_time": "query", + "format": "query", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json", "text/csv"], + "content_type": [], + }, + api_client=api_client, + callable=__projects_project_id_audit_log_get, + ) + + def __projects_project_id_machines_machine_id_force_rescan_post( + self, project_id, machine_id, **kwargs + ): + """Force rescan of machine volumes. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_machines_machine_id_force_rescan_post(project_id, machine_id, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + machine_id (str): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["machine_id"] = machine_id + return self.call_with_http_info(**kwargs) + + self.projects_project_id_machines_machine_id_force_rescan_post = _Endpoint( + settings={ + "response_type": None, + "auth": [], + "endpoint_path": "/projects/{projectId}/machines/{machineId}/forceRescan", + "operation_id": "projects_project_id_machines_machine_id_force_rescan_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "machine_id", + ], + "required": [ + "project_id", + "machine_id", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "machine_id": (str,), + }, + "attribute_map": { + "project_id": "projectId", + "machine_id": "machineId", + }, + "location_map": { + "project_id": "path", + "machine_id": "path", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__projects_project_id_machines_machine_id_force_rescan_post, + ) + + def __projects_project_id_storage_get(self, project_id, **kwargs): + """project's storage # noqa: E501 + + get project's storage usage (vCenter only) # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_storage_get(project_id, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + ProjectStorage + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + return self.call_with_http_info(**kwargs) + + self.projects_project_id_storage_get = _Endpoint( + settings={ + "response_type": (ProjectStorage,), + "auth": [], + "endpoint_path": "/projects/{projectId}/storage", + "operation_id": "projects_project_id_storage_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + ], + "required": [ + "project_id", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__projects_project_id_storage_get, + ) + + def __projects_remove_users_post(self, projects_and_users, **kwargs): + """Remove User # noqa: E501 + + Remove User from Project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_remove_users_post(projects_and_users, async_req=True) + >>> result = thread.get() + + Args: + projects_and_users (ProjectsAndUsers): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["projects_and_users"] = projects_and_users + return self.call_with_http_info(**kwargs) + + self.projects_remove_users_post = _Endpoint( + settings={ + "response_type": None, + "auth": [], + "endpoint_path": "/projects/removeUsers", + "operation_id": "projects_remove_users_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [ + "projects_and_users", + ], + "required": [ + "projects_and_users", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "projects_and_users": (ProjectsAndUsers,), + }, + "attribute_map": {}, + "location_map": { + "projects_and_users": "body", + }, + "collection_format_map": {}, + }, + headers_map={"accept": [], "content_type": ["application/json"]}, + api_client=api_client, + callable=__projects_remove_users_post, + ) + + def __replace_api_token_post(self, **kwargs): + """Replaces API token # noqa: E501 + + Replaces API token # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.replace_api_token_post(async_req=True) + >>> result = thread.get() + + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + InlineResponse2001 + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + return self.call_with_http_info(**kwargs) + + self.replace_api_token_post = _Endpoint( + settings={ + "response_type": (InlineResponse2001,), + "auth": [], + "endpoint_path": "/replaceApiToken", + "operation_id": "replace_api_token_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [], + "required": [], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": {}, + "attribute_map": {}, + "location_map": {}, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__replace_api_token_post, + ) + + def __set_password_post(self, set_password_params, **kwargs): + """Set password for invited user # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.set_password_post(set_password_params, async_req=True) + >>> result = thread.get() + + Args: + set_password_params (InlineObject2): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["set_password_params"] = set_password_params + return self.call_with_http_info(**kwargs) + + self.set_password_post = _Endpoint( + settings={ + "response_type": None, + "auth": [], + "endpoint_path": "/setPassword", + "operation_id": "set_password_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [ + "set_password_params", + ], + "required": [ + "set_password_params", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "set_password_params": (InlineObject2,), + }, + "attribute_map": {}, + "location_map": { + "set_password_params": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__set_password_post, + ) + + def __users_assign_roles_post(self, users_and_roles, **kwargs): + """Add roles to users # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.users_assign_roles_post(users_and_roles, async_req=True) + >>> result = thread.get() + + Args: + users_and_roles (UsersAndRoles): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + UsersList + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["users_and_roles"] = users_and_roles + return self.call_with_http_info(**kwargs) + + self.users_assign_roles_post = _Endpoint( + settings={ + "response_type": (UsersList,), + "auth": [], + "endpoint_path": "/users/assignRoles", + "operation_id": "users_assign_roles_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [ + "users_and_roles", + ], + "required": [ + "users_and_roles", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "users_and_roles": (UsersAndRoles,), + }, + "attribute_map": {}, + "location_map": { + "users_and_roles": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__users_assign_roles_post, + ) + + def __users_post(self, users_params, **kwargs): + """Create a new User # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.users_post(users_params, async_req=True) + >>> result = thread.get() + + Args: + users_params (InlineObject6): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + User + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["users_params"] = users_params + return self.call_with_http_info(**kwargs) + + self.users_post = _Endpoint( + settings={ + "response_type": (User,), + "auth": [], + "endpoint_path": "/users", + "operation_id": "users_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [ + "users_params", + ], + "required": [ + "users_params", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "users_params": (InlineObject6,), + }, + "attribute_map": {}, + "location_map": { + "users_params": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__users_post, + ) + + def __users_revoke_roles_post(self, users_and_roles, **kwargs): + """Revoke roles from users # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.users_revoke_roles_post(users_and_roles, async_req=True) + >>> result = thread.get() + + Args: + users_and_roles (UsersAndRoles): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + UsersList + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["users_and_roles"] = users_and_roles + return self.call_with_http_info(**kwargs) + + self.users_revoke_roles_post = _Endpoint( + settings={ + "response_type": (UsersList,), + "auth": [], + "endpoint_path": "/users/revokeRoles", + "operation_id": "users_revoke_roles_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [ + "users_and_roles", + ], + "required": [ + "users_and_roles", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "users_and_roles": (UsersAndRoles,), + }, + "attribute_map": {}, + "location_map": { + "users_and_roles": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__users_revoke_roles_post, + ) diff --git a/cloudendure/api/licensing_api.py b/cloudendure/api/licensing_api.py new file mode 100644 index 000000000..06acdeb33 --- /dev/null +++ b/cloudendure/api/licensing_api.py @@ -0,0 +1,236 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.model.license import License +from cloudendure.model.license_list import LicenseList +from cloudendure.model_utils import ( + check_allowed_values, # noqa: F401 + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types, +) + + +class LicensingApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def __licenses_get(self, **kwargs): + """List Licenses # noqa: E501 + + Returns the list of licenses currently associated with this user. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.licenses_get(async_req=True) + >>> result = thread.get() + + + Keyword Args: + offset (int): With which item to start (0 based).. [optional] if omitted the server will use the default value of 0 + limit (int): A number specifying how many entries to return.. [optional] if omitted the server will use the default value of 1500 + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + LicenseList + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + return self.call_with_http_info(**kwargs) + + self.licenses_get = _Endpoint( + settings={ + "response_type": (LicenseList,), + "auth": [], + "endpoint_path": "/licenses", + "operation_id": "licenses_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "offset", + "limit", + ], + "required": [], + "nullable": [], + "enum": [], + "validation": [ + "offset", + "limit", + ], + }, + root_map={ + "validations": { + ("offset",): { + "inclusive_minimum": 0, + }, + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, + }, + "allowed_values": {}, + "openapi_types": { + "offset": (int,), + "limit": (int,), + }, + "attribute_map": { + "offset": "offset", + "limit": "limit", + }, + "location_map": { + "offset": "query", + "limit": "query", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__licenses_get, + ) + + def __licenses_license_id_get(self, license_id, **kwargs): + """Get License # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.licenses_license_id_get(license_id, async_req=True) + >>> result = thread.get() + + Args: + license_id (str): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + License + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["license_id"] = license_id + return self.call_with_http_info(**kwargs) + + self.licenses_license_id_get = _Endpoint( + settings={ + "response_type": (License,), + "auth": [], + "endpoint_path": "/licenses/{licenseId}", + "operation_id": "licenses_license_id_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "license_id", + ], + "required": [ + "license_id", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "license_id": (str,), + }, + "attribute_map": { + "license_id": "licenseId", + }, + "location_map": { + "license_id": "path", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__licenses_license_id_get, + ) diff --git a/cloudendure/api/machines_api.py b/cloudendure/api/machines_api.py new file mode 100644 index 000000000..007b57bc7 --- /dev/null +++ b/cloudendure/api/machines_api.py @@ -0,0 +1,775 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.model.error import Error +from cloudendure.model.inline_object8 import InlineObject8 +from cloudendure.model.machine import Machine +from cloudendure.model.machines_list import MachinesList +from cloudendure.model.replica import Replica +from cloudendure.model_utils import ( + check_allowed_values, # noqa: F401 + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types, +) + + +class MachinesApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def __projects_project_id_machines_delete( + self, project_id, machine_ids, **kwargs + ): + """Uninstall multiple agents # noqa: E501 + + Stops replication and removes the cloudendure agent from the specified machines. All cloud artifacts associated with those machines with the exception of launched target machines are deleted. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_machines_delete(project_id, machine_ids, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + machine_ids (InlineObject8): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["machine_ids"] = machine_ids + return self.call_with_http_info(**kwargs) + + self.projects_project_id_machines_delete = _Endpoint( + settings={ + "response_type": None, + "auth": [], + "endpoint_path": "/projects/{projectId}/machines", + "operation_id": "projects_project_id_machines_delete", + "http_method": "DELETE", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "machine_ids", + ], + "required": [ + "project_id", + "machine_ids", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "machine_ids": (InlineObject8,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "machine_ids": "body", + }, + "collection_format_map": {}, + }, + headers_map={"accept": [], "content_type": ["application/json"]}, + api_client=api_client, + callable=__projects_project_id_machines_delete, + ) + + def __projects_project_id_machines_get(self, project_id, **kwargs): + """List Machines # noqa: E501 + + Returns the list of all source machines in the Project (i.e. machines that have an Agent installed). # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_machines_get(project_id, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + + Keyword Args: + offset (int): With which item to start (0 based).. [optional] if omitted the server will use the default value of 0 + limit (int): A number specifying how many entries to return.. [optional] if omitted the server will use the default value of 1500 + all (bool): When set to false, returns only currently replicating machines. When set to true, returns all machines in the project regardless of replications status. machines are consuming/ have consumed licenses. Note that some license types are transferable and therefore once you remove the and set to true false, returns only currently replicating machines. When set to true, returns all machines in the project regardless of replications status. . [optional] if omitted the server will use the default value of False + types (str): Use this url query param to control which machines are returned when doing GET. If you do not include the \\\"types\\\" query param, you will only get source machines . [optional] + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + MachinesList + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + return self.call_with_http_info(**kwargs) + + self.projects_project_id_machines_get = _Endpoint( + settings={ + "response_type": (MachinesList,), + "auth": [], + "endpoint_path": "/projects/{projectId}/machines", + "operation_id": "projects_project_id_machines_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "offset", + "limit", + "all", + "types", + ], + "required": [ + "project_id", + ], + "nullable": [], + "enum": [], + "validation": [ + "offset", + "limit", + ], + }, + root_map={ + "validations": { + ("offset",): { + "inclusive_minimum": 0, + }, + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, + }, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "offset": (int,), + "limit": (int,), + "all": (bool,), + "types": (str,), + }, + "attribute_map": { + "project_id": "projectId", + "offset": "offset", + "limit": "limit", + "all": "all", + "types": "types", + }, + "location_map": { + "project_id": "path", + "offset": "query", + "limit": "query", + "all": "query", + "types": "query", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__projects_project_id_machines_get, + ) + + def __projects_project_id_machines_machine_id_delete( + self, project_id, machine_id, **kwargs + ): + """Uninstall agent # noqa: E501 + + Stops replication and removes the cloudendure agent from this machine. All cloud artifacts associated with those machines with the exception of launched target machine are deleted. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_machines_machine_id_delete(project_id, machine_id, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + machine_id (str): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["machine_id"] = machine_id + return self.call_with_http_info(**kwargs) + + self.projects_project_id_machines_machine_id_delete = _Endpoint( + settings={ + "response_type": None, + "auth": [], + "endpoint_path": "/projects/{projectId}/machines/{machineId}", + "operation_id": "projects_project_id_machines_machine_id_delete", + "http_method": "DELETE", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "machine_id", + ], + "required": [ + "project_id", + "machine_id", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "machine_id": (str,), + }, + "attribute_map": { + "project_id": "projectId", + "machine_id": "machineId", + }, + "location_map": { + "project_id": "path", + "machine_id": "path", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": [], + "content_type": [], + }, + api_client=api_client, + callable=__projects_project_id_machines_machine_id_delete, + ) + + def __projects_project_id_machines_machine_id_get( + self, project_id, machine_id, **kwargs + ): + """Get a specific machine. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_machines_machine_id_get(project_id, machine_id, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + machine_id (str): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Machine + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["machine_id"] = machine_id + return self.call_with_http_info(**kwargs) + + self.projects_project_id_machines_machine_id_get = _Endpoint( + settings={ + "response_type": (Machine,), + "auth": [], + "endpoint_path": "/projects/{projectId}/machines/{machineId}", + "operation_id": "projects_project_id_machines_machine_id_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "machine_id", + ], + "required": [ + "project_id", + "machine_id", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "machine_id": (str,), + }, + "attribute_map": { + "project_id": "projectId", + "machine_id": "machineId", + }, + "location_map": { + "project_id": "path", + "machine_id": "path", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__projects_project_id_machines_machine_id_get, + ) + + def __projects_project_id_machines_machine_id_patch( + self, project_id, machine_id, machine, **kwargs + ): + """Update a machine. Accepts only Launch time updates. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_machines_machine_id_patch(project_id, machine_id, machine, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + machine_id (str): + machine (Machine): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Machine + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["machine_id"] = machine_id + kwargs["machine"] = machine + return self.call_with_http_info(**kwargs) + + self.projects_project_id_machines_machine_id_patch = _Endpoint( + settings={ + "response_type": (Machine,), + "auth": [], + "endpoint_path": "/projects/{projectId}/machines/{machineId}", + "operation_id": "projects_project_id_machines_machine_id_patch", + "http_method": "PATCH", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "machine_id", + "machine", + ], + "required": [ + "project_id", + "machine_id", + "machine", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "machine_id": (str,), + "machine": (Machine,), + }, + "attribute_map": { + "project_id": "projectId", + "machine_id": "machineId", + }, + "location_map": { + "project_id": "path", + "machine_id": "path", + "machine": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__projects_project_id_machines_machine_id_patch, + ) + + def __projects_project_id_machines_patch( + self, project_id, machines_list, **kwargs + ): + """Batch-update multiple machines # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_machines_patch(project_id, machines_list, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + machines_list (MachinesList): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + MachinesList + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["machines_list"] = machines_list + return self.call_with_http_info(**kwargs) + + self.projects_project_id_machines_patch = _Endpoint( + settings={ + "response_type": (MachinesList,), + "auth": [], + "endpoint_path": "/projects/{projectId}/machines", + "operation_id": "projects_project_id_machines_patch", + "http_method": "PATCH", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "machines_list", + ], + "required": [ + "project_id", + "machines_list", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "machines_list": (MachinesList,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "machines_list": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__projects_project_id_machines_patch, + ) + + def __projects_project_id_replicas_replica_id_get( + self, project_id, replica_id, **kwargs + ): + """Get Target Machine # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_replicas_replica_id_get(project_id, replica_id, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + replica_id (str): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Replica + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["replica_id"] = replica_id + return self.call_with_http_info(**kwargs) + + self.projects_project_id_replicas_replica_id_get = _Endpoint( + settings={ + "response_type": (Replica,), + "auth": [], + "endpoint_path": "/projects/{projectId}/replicas/{replicaId}", + "operation_id": "projects_project_id_replicas_replica_id_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "replica_id", + ], + "required": [ + "project_id", + "replica_id", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "replica_id": (str,), + }, + "attribute_map": { + "project_id": "projectId", + "replica_id": "replicaId", + }, + "location_map": { + "project_id": "path", + "replica_id": "path", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__projects_project_id_replicas_replica_id_get, + ) diff --git a/cloudendure/api/project_api.py b/cloudendure/api/project_api.py new file mode 100644 index 000000000..5e550c776 --- /dev/null +++ b/cloudendure/api/project_api.py @@ -0,0 +1,736 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.model.cloud_credentials_request import CloudCredentialsRequest +from cloudendure.model.error import Error +from cloudendure.model.inline_response200 import InlineResponse200 +from cloudendure.model.project import Project +from cloudendure.model.projects_list import ProjectsList +from cloudendure.model_utils import ( + check_allowed_values, # noqa: F401 + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types, +) + + +class ProjectApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def __projects_get(self, **kwargs): + """List Projects # noqa: E501 + + Returns the list of projects defined in this account. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_get(async_req=True) + >>> result = thread.get() + + + Keyword Args: + offset (int): With which item to start (0 based).. [optional] if omitted the server will use the default value of 0 + limit (int): A number specifying how many entries to return.. [optional] if omitted the server will use the default value of 1500 + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + ProjectsList + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + return self.call_with_http_info(**kwargs) + + self.projects_get = _Endpoint( + settings={ + "response_type": (ProjectsList,), + "auth": [], + "endpoint_path": "/projects", + "operation_id": "projects_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "offset", + "limit", + ], + "required": [], + "nullable": [], + "enum": [], + "validation": [ + "offset", + "limit", + ], + }, + root_map={ + "validations": { + ("offset",): { + "inclusive_minimum": 0, + }, + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, + }, + "allowed_values": {}, + "openapi_types": { + "offset": (int,), + "limit": (int,), + }, + "attribute_map": { + "offset": "offset", + "limit": "limit", + }, + "location_map": { + "offset": "query", + "limit": "query", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__projects_get, + ) + + def __projects_post(self, project, **kwargs): + """Create Project # noqa: E501 + + Create project # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_post(project, async_req=True) + >>> result = thread.get() + + Args: + project (Project): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Project + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project"] = project + return self.call_with_http_info(**kwargs) + + self.projects_post = _Endpoint( + settings={ + "response_type": (Project,), + "auth": [], + "endpoint_path": "/projects", + "operation_id": "projects_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [ + "project", + ], + "required": [ + "project", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project": (Project,), + }, + "attribute_map": {}, + "location_map": { + "project": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__projects_post, + ) + + def __projects_project_id_delete(self, project_id, **kwargs): + """Delete Project and all sub-resources including cloud assets other than launched target machines # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_delete(project_id, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + return self.call_with_http_info(**kwargs) + + self.projects_project_id_delete = _Endpoint( + settings={ + "response_type": None, + "auth": [], + "endpoint_path": "/projects/{projectId}", + "operation_id": "projects_project_id_delete", + "http_method": "DELETE", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + ], + "required": [ + "project_id", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": [], + "content_type": [], + }, + api_client=api_client, + callable=__projects_project_id_delete, + ) + + def __projects_project_id_get(self, project_id, **kwargs): + """Get Project # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_get(project_id, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Project + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + return self.call_with_http_info(**kwargs) + + self.projects_project_id_get = _Endpoint( + settings={ + "response_type": (Project,), + "auth": [], + "endpoint_path": "/projects/{projectId}", + "operation_id": "projects_project_id_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + ], + "required": [ + "project_id", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__projects_project_id_get, + ) + + def __projects_project_id_patch(self, project_id, project, **kwargs): + """Update Project (including partial update) # noqa: E501 + + Set project properties including Data Replication source location and replicationConfiguration to use. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_patch(project_id, project, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + project (Project): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Project + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["project"] = project + return self.call_with_http_info(**kwargs) + + self.projects_project_id_patch = _Endpoint( + settings={ + "response_type": (Project,), + "auth": [], + "endpoint_path": "/projects/{projectId}", + "operation_id": "projects_project_id_patch", + "http_method": "PATCH", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "project", + ], + "required": [ + "project_id", + "project", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "project": (Project,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "project": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__projects_project_id_patch, + ) + + def __projects_project_id_tags_get(self, project_id, **kwargs): + """Gets all instance tags of all machines in the project. # noqa: E501 + + Returns all instance tags of all machines in the project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_tags_get(project_id, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + + Keyword Args: + offset (int): With which item to start (0 based).. [optional] if omitted the server will use the default value of 0 + limit (int): A number specifying how many entries to return.. [optional] if omitted the server will use the default value of 1500 + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + InlineResponse200 + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + return self.call_with_http_info(**kwargs) + + self.projects_project_id_tags_get = _Endpoint( + settings={ + "response_type": (InlineResponse200,), + "auth": [], + "endpoint_path": "/projects/{projectId}/tags", + "operation_id": "projects_project_id_tags_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "offset", + "limit", + ], + "required": [ + "project_id", + ], + "nullable": [], + "enum": [], + "validation": [ + "offset", + "limit", + ], + }, + root_map={ + "validations": { + ("offset",): { + "inclusive_minimum": 0, + }, + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, + }, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "offset": (int,), + "limit": (int,), + }, + "attribute_map": { + "project_id": "projectId", + "offset": "offset", + "limit": "limit", + }, + "location_map": { + "project_id": "path", + "offset": "query", + "limit": "query", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__projects_project_id_tags_get, + ) + + def __projects_project_id_target_cloud_credentials_post( + self, project_id, cloud_credentials, **kwargs + ): + """Set target cloud credentials # noqa: E501 + + Used to set different account for staging and target. Changes target credentials for account. null values can be used to remove the credentials. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_target_cloud_credentials_post(project_id, cloud_credentials, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + cloud_credentials (CloudCredentialsRequest): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Project + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["cloud_credentials"] = cloud_credentials + return self.call_with_http_info(**kwargs) + + self.projects_project_id_target_cloud_credentials_post = _Endpoint( + settings={ + "response_type": (Project,), + "auth": [], + "endpoint_path": "/projects/{projectId}/targetCloudCredentials", + "operation_id": "projects_project_id_target_cloud_credentials_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "cloud_credentials", + ], + "required": [ + "project_id", + "cloud_credentials", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "cloud_credentials": (CloudCredentialsRequest,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "cloud_credentials": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__projects_project_id_target_cloud_credentials_post, + ) diff --git a/cloudendure/api/recovery_plans_api.py b/cloudendure/api/recovery_plans_api.py new file mode 100644 index 000000000..893941e26 --- /dev/null +++ b/cloudendure/api/recovery_plans_api.py @@ -0,0 +1,642 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.model.inline_object10 import InlineObject10 +from cloudendure.model.job import Job +from cloudendure.model.recovery_plan import RecoveryPlan +from cloudendure.model.recovery_plan_list import RecoveryPlanList +from cloudendure.model_utils import ( + check_allowed_values, # noqa: F401 + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types, +) + + +class RecoveryPlansApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def __projects_project_id_recovery_plans_get(self, project_id, **kwargs): + """Gets all recovery plans for the project. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_recovery_plans_get(project_id, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + RecoveryPlanList + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + return self.call_with_http_info(**kwargs) + + self.projects_project_id_recovery_plans_get = _Endpoint( + settings={ + "response_type": (RecoveryPlanList,), + "auth": [], + "endpoint_path": "/projects/{projectId}/recoveryPlans", + "operation_id": "projects_project_id_recovery_plans_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + ], + "required": [ + "project_id", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__projects_project_id_recovery_plans_get, + ) + + def __projects_project_id_recovery_plans_post( + self, project_id, recovery_plan, **kwargs + ): + """Creates a new recovery plan. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_recovery_plans_post(project_id, recovery_plan, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + recovery_plan (RecoveryPlan): Recovery Plan to create + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + RecoveryPlan + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["recovery_plan"] = recovery_plan + return self.call_with_http_info(**kwargs) + + self.projects_project_id_recovery_plans_post = _Endpoint( + settings={ + "response_type": (RecoveryPlan,), + "auth": [], + "endpoint_path": "/projects/{projectId}/recoveryPlans", + "operation_id": "projects_project_id_recovery_plans_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "recovery_plan", + ], + "required": [ + "project_id", + "recovery_plan", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "recovery_plan": (RecoveryPlan,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "recovery_plan": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__projects_project_id_recovery_plans_post, + ) + + def __projects_project_id_recovery_plans_recovery_plan_id_delete( + self, project_id, recovery_plan_id, **kwargs + ): + """Deletes a recovery plan. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_recovery_plans_recovery_plan_id_delete(project_id, recovery_plan_id, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + recovery_plan_id (str): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["recovery_plan_id"] = recovery_plan_id + return self.call_with_http_info(**kwargs) + + self.projects_project_id_recovery_plans_recovery_plan_id_delete = _Endpoint( + settings={ + "response_type": None, + "auth": [], + "endpoint_path": "/projects/{projectId}/recoveryPlans/{recoveryPlanId}", + "operation_id": "projects_project_id_recovery_plans_recovery_plan_id_delete", + "http_method": "DELETE", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "recovery_plan_id", + ], + "required": [ + "project_id", + "recovery_plan_id", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "recovery_plan_id": (str,), + }, + "attribute_map": { + "project_id": "projectId", + "recovery_plan_id": "recoveryPlanId", + }, + "location_map": { + "project_id": "path", + "recovery_plan_id": "path", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": [], + "content_type": [], + }, + api_client=api_client, + callable=__projects_project_id_recovery_plans_recovery_plan_id_delete, + ) + + def __projects_project_id_recovery_plans_recovery_plan_id_get( + self, project_id, recovery_plan_id, **kwargs + ): + """Gets a recovery plan. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_recovery_plans_recovery_plan_id_get(project_id, recovery_plan_id, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + recovery_plan_id (str): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + RecoveryPlan + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["recovery_plan_id"] = recovery_plan_id + return self.call_with_http_info(**kwargs) + + self.projects_project_id_recovery_plans_recovery_plan_id_get = _Endpoint( + settings={ + "response_type": (RecoveryPlan,), + "auth": [], + "endpoint_path": "/projects/{projectId}/recoveryPlans/{recoveryPlanId}", + "operation_id": "projects_project_id_recovery_plans_recovery_plan_id_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "recovery_plan_id", + ], + "required": [ + "project_id", + "recovery_plan_id", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "recovery_plan_id": (str,), + }, + "attribute_map": { + "project_id": "projectId", + "recovery_plan_id": "recoveryPlanId", + }, + "location_map": { + "project_id": "path", + "recovery_plan_id": "path", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__projects_project_id_recovery_plans_recovery_plan_id_get, + ) + + def __projects_project_id_recovery_plans_recovery_plan_id_patch( + self, project_id, recovery_plan_id, recovery_plan, **kwargs + ): + """Updates a new recovery plan. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_recovery_plans_recovery_plan_id_patch(project_id, recovery_plan_id, recovery_plan, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + recovery_plan_id (str): + recovery_plan (RecoveryPlan): Recovery Plan to create + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + RecoveryPlan + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["recovery_plan_id"] = recovery_plan_id + kwargs["recovery_plan"] = recovery_plan + return self.call_with_http_info(**kwargs) + + self.projects_project_id_recovery_plans_recovery_plan_id_patch = _Endpoint( + settings={ + "response_type": (RecoveryPlan,), + "auth": [], + "endpoint_path": "/projects/{projectId}/recoveryPlans/{recoveryPlanId}", + "operation_id": "projects_project_id_recovery_plans_recovery_plan_id_patch", + "http_method": "PATCH", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "recovery_plan_id", + "recovery_plan", + ], + "required": [ + "project_id", + "recovery_plan_id", + "recovery_plan", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "recovery_plan_id": (str,), + "recovery_plan": (RecoveryPlan,), + }, + "attribute_map": { + "project_id": "projectId", + "recovery_plan_id": "recoveryPlanId", + }, + "location_map": { + "project_id": "path", + "recovery_plan_id": "path", + "recovery_plan": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__projects_project_id_recovery_plans_recovery_plan_id_patch, + ) + + def __projects_project_id_run_recovery_plan_post( + self, project_id, init_recovery_plan_params, **kwargs + ): + """Launch a recovery plan. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_run_recovery_plan_post(project_id, init_recovery_plan_params, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + init_recovery_plan_params (InlineObject10): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Job + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["init_recovery_plan_params"] = init_recovery_plan_params + return self.call_with_http_info(**kwargs) + + self.projects_project_id_run_recovery_plan_post = _Endpoint( + settings={ + "response_type": (Job,), + "auth": [], + "endpoint_path": "/projects/{projectId}/runRecoveryPlan", + "operation_id": "projects_project_id_run_recovery_plan_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "init_recovery_plan_params", + ], + "required": [ + "project_id", + "init_recovery_plan_params", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "init_recovery_plan_params": (InlineObject10,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "init_recovery_plan_params": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__projects_project_id_run_recovery_plan_post, + ) diff --git a/cloudendure/api/replication_api.py b/cloudendure/api/replication_api.py new file mode 100644 index 000000000..70f0b73b8 --- /dev/null +++ b/cloudendure/api/replication_api.py @@ -0,0 +1,806 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.model.bandwidth_throttling import BandwidthThrottling +from cloudendure.model.error import Error +from cloudendure.model.point_in_time_list import PointInTimeList +from cloudendure.model.replication_configuration import ReplicationConfiguration +from cloudendure.model.replication_configuration_list import ( + ReplicationConfigurationList, +) +from cloudendure.model_utils import ( + check_allowed_values, # noqa: F401 + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types, +) + + +class ReplicationApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def __projects_project_id_machines_machine_id_bandwidth_throttling_get( + self, project_id, machine_id, **kwargs + ): + """Get value of network bandwidth throttling setting for Machine # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_machines_machine_id_bandwidth_throttling_get(project_id, machine_id, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + machine_id (str): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + BandwidthThrottling + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["machine_id"] = machine_id + return self.call_with_http_info(**kwargs) + + self.projects_project_id_machines_machine_id_bandwidth_throttling_get = _Endpoint( + settings={ + "response_type": (BandwidthThrottling,), + "auth": [], + "endpoint_path": "/projects/{projectId}/machines/{machineId}/bandwidthThrottling", + "operation_id": "projects_project_id_machines_machine_id_bandwidth_throttling_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "machine_id", + ], + "required": [ + "project_id", + "machine_id", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "machine_id": (str,), + }, + "attribute_map": { + "project_id": "projectId", + "machine_id": "machineId", + }, + "location_map": { + "project_id": "path", + "machine_id": "path", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__projects_project_id_machines_machine_id_bandwidth_throttling_get, + ) + + def __projects_project_id_machines_machine_id_bandwidth_throttling_patch( + self, project_id, machine_id, bandwidth_throttling, **kwargs + ): + """Set value of network bandwidth throttling setting for Machine # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_machines_machine_id_bandwidth_throttling_patch(project_id, machine_id, bandwidth_throttling, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + machine_id (str): + bandwidth_throttling (BandwidthThrottling): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + BandwidthThrottling + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["machine_id"] = machine_id + kwargs["bandwidth_throttling"] = bandwidth_throttling + return self.call_with_http_info(**kwargs) + + self.projects_project_id_machines_machine_id_bandwidth_throttling_patch = _Endpoint( + settings={ + "response_type": (BandwidthThrottling,), + "auth": [], + "endpoint_path": "/projects/{projectId}/machines/{machineId}/bandwidthThrottling", + "operation_id": "projects_project_id_machines_machine_id_bandwidth_throttling_patch", + "http_method": "PATCH", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "machine_id", + "bandwidth_throttling", + ], + "required": [ + "project_id", + "machine_id", + "bandwidth_throttling", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "machine_id": (str,), + "bandwidth_throttling": (BandwidthThrottling,), + }, + "attribute_map": { + "project_id": "projectId", + "machine_id": "machineId", + }, + "location_map": { + "project_id": "path", + "machine_id": "path", + "bandwidth_throttling": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__projects_project_id_machines_machine_id_bandwidth_throttling_patch, + ) + + def __projects_project_id_machines_machine_id_delete( + self, project_id, machine_id, **kwargs + ): + """Uninstall agent # noqa: E501 + + Stops replication and removes the cloudendure agent from this machine. All cloud artifacts associated with those machines with the exception of launched target machine are deleted. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_machines_machine_id_delete(project_id, machine_id, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + machine_id (str): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["machine_id"] = machine_id + return self.call_with_http_info(**kwargs) + + self.projects_project_id_machines_machine_id_delete = _Endpoint( + settings={ + "response_type": None, + "auth": [], + "endpoint_path": "/projects/{projectId}/machines/{machineId}", + "operation_id": "projects_project_id_machines_machine_id_delete", + "http_method": "DELETE", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "machine_id", + ], + "required": [ + "project_id", + "machine_id", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "machine_id": (str,), + }, + "attribute_map": { + "project_id": "projectId", + "machine_id": "machineId", + }, + "location_map": { + "project_id": "path", + "machine_id": "path", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": [], + "content_type": [], + }, + api_client=api_client, + callable=__projects_project_id_machines_machine_id_delete, + ) + + def __projects_project_id_machines_machine_id_pointsintime_get( + self, project_id, machine_id, **kwargs + ): + """List Available Points-in-time # noqa: E501 + + Returns the list of available recovery points for this machine. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_machines_machine_id_pointsintime_get(project_id, machine_id, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + machine_id (str): + + Keyword Args: + offset (int): With which item to start (0 based).. [optional] if omitted the server will use the default value of 0 + limit (int): A number specifying how many entries to return.. [optional] if omitted the server will use the default value of 1500 + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + PointInTimeList + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["machine_id"] = machine_id + return self.call_with_http_info(**kwargs) + + self.projects_project_id_machines_machine_id_pointsintime_get = _Endpoint( + settings={ + "response_type": (PointInTimeList,), + "auth": [], + "endpoint_path": "/projects/{projectId}/machines/{machineId}/pointsintime", + "operation_id": "projects_project_id_machines_machine_id_pointsintime_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "machine_id", + "offset", + "limit", + ], + "required": [ + "project_id", + "machine_id", + ], + "nullable": [], + "enum": [], + "validation": [ + "offset", + "limit", + ], + }, + root_map={ + "validations": { + ("offset",): { + "inclusive_minimum": 0, + }, + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, + }, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "machine_id": (str,), + "offset": (int,), + "limit": (int,), + }, + "attribute_map": { + "project_id": "projectId", + "machine_id": "machineId", + "offset": "offset", + "limit": "limit", + }, + "location_map": { + "project_id": "path", + "machine_id": "path", + "offset": "query", + "limit": "query", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__projects_project_id_machines_machine_id_pointsintime_get, + ) + + def __projects_project_id_replication_configurations_get( + self, project_id, **kwargs + ): + """List Replication Configurations # noqa: E501 + + Returns the list of replication configuration objects defined in this project. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_replication_configurations_get(project_id, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + + Keyword Args: + offset (int): With which item to start (0 based).. [optional] if omitted the server will use the default value of 0 + limit (int): A number specifying how many entries to return.. [optional] if omitted the server will use the default value of 1500 + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + ReplicationConfigurationList + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + return self.call_with_http_info(**kwargs) + + self.projects_project_id_replication_configurations_get = _Endpoint( + settings={ + "response_type": (ReplicationConfigurationList,), + "auth": [], + "endpoint_path": "/projects/{projectId}/replicationConfigurations", + "operation_id": "projects_project_id_replication_configurations_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "offset", + "limit", + ], + "required": [ + "project_id", + ], + "nullable": [], + "enum": [], + "validation": [ + "offset", + "limit", + ], + }, + root_map={ + "validations": { + ("offset",): { + "inclusive_minimum": 0, + }, + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, + }, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "offset": (int,), + "limit": (int,), + }, + "attribute_map": { + "project_id": "projectId", + "offset": "offset", + "limit": "limit", + }, + "location_map": { + "project_id": "path", + "offset": "query", + "limit": "query", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__projects_project_id_replication_configurations_get, + ) + + def __projects_project_id_replication_configurations_post( + self, project_id, replication_configuration, **kwargs + ): + """Create Replication Configuration # noqa: E501 + + Control Data Replication parameters such as target cloud credentials, Staging Area and replication network configuration. A single configuration can exist per target region. Returns the newly created object. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_replication_configurations_post(project_id, replication_configuration, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + replication_configuration (ReplicationConfiguration): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + ReplicationConfiguration + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["replication_configuration"] = replication_configuration + return self.call_with_http_info(**kwargs) + + self.projects_project_id_replication_configurations_post = _Endpoint( + settings={ + "response_type": (ReplicationConfiguration,), + "auth": [], + "endpoint_path": "/projects/{projectId}/replicationConfigurations", + "operation_id": "projects_project_id_replication_configurations_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "replication_configuration", + ], + "required": [ + "project_id", + "replication_configuration", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "replication_configuration": (ReplicationConfiguration,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "replication_configuration": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__projects_project_id_replication_configurations_post, + ) + + def __projects_project_id_replication_configurations_replication_configuration_id_patch( + self, + project_id, + replication_configuration_id, + replication_configuration, + **kwargs + ): + """Modify Replication Configuration # noqa: E501 + + Modifying volumeEncryptionKey or modifying cloudCredentials to ones matching a different cloud account will result in replication restarting from initial sync. Returns the modified object. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.projects_project_id_replication_configurations_replication_configuration_id_patch(project_id, replication_configuration_id, replication_configuration, async_req=True) + >>> result = thread.get() + + Args: + project_id (str): + replication_configuration_id (str): + replication_configuration (ReplicationConfiguration): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + ReplicationConfiguration + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["project_id"] = project_id + kwargs["replication_configuration_id"] = replication_configuration_id + kwargs["replication_configuration"] = replication_configuration + return self.call_with_http_info(**kwargs) + + self.projects_project_id_replication_configurations_replication_configuration_id_patch = _Endpoint( + settings={ + "response_type": (ReplicationConfiguration,), + "auth": [], + "endpoint_path": "/projects/{projectId}/replicationConfigurations/{replicationConfigurationId}", + "operation_id": "projects_project_id_replication_configurations_replication_configuration_id_patch", + "http_method": "PATCH", + "servers": None, + }, + params_map={ + "all": [ + "project_id", + "replication_configuration_id", + "replication_configuration", + ], + "required": [ + "project_id", + "replication_configuration_id", + "replication_configuration", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "project_id": (str,), + "replication_configuration_id": (str,), + "replication_configuration": (ReplicationConfiguration,), + }, + "attribute_map": { + "project_id": "projectId", + "replication_configuration_id": "replicationConfigurationId", + }, + "location_map": { + "project_id": "path", + "replication_configuration_id": "path", + "replication_configuration": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__projects_project_id_replication_configurations_replication_configuration_id_patch, + ) diff --git a/cloudendure/api/user_api.py b/cloudendure/api/user_api.py new file mode 100644 index 000000000..6d395e395 --- /dev/null +++ b/cloudendure/api/user_api.py @@ -0,0 +1,401 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.model.error import Error +from cloudendure.model.inline_object import InlineObject +from cloudendure.model.user import User +from cloudendure.model_utils import ( + check_allowed_values, # noqa: F401 + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types, +) + + +class UserApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def __change_password_post(self, password_params, **kwargs): + """Change Password # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.change_password_post(password_params, async_req=True) + >>> result = thread.get() + + Args: + password_params (InlineObject): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["password_params"] = password_params + return self.call_with_http_info(**kwargs) + + self.change_password_post = _Endpoint( + settings={ + "response_type": None, + "auth": [], + "endpoint_path": "/changePassword", + "operation_id": "change_password_post", + "http_method": "POST", + "servers": None, + }, + params_map={ + "all": [ + "password_params", + ], + "required": [ + "password_params", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "password_params": (InlineObject,), + }, + "attribute_map": {}, + "location_map": { + "password_params": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__change_password_post, + ) + + def __me_get(self, **kwargs): + """Me # noqa: E501 + + Provides user configuration information for the currently logged in user. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.me_get(async_req=True) + >>> result = thread.get() + + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + User + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + return self.call_with_http_info(**kwargs) + + self.me_get = _Endpoint( + settings={ + "response_type": (User,), + "auth": [], + "endpoint_path": "/me", + "operation_id": "me_get", + "http_method": "GET", + "servers": None, + }, + params_map={ + "all": [], + "required": [], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": {}, + "attribute_map": {}, + "location_map": {}, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, + api_client=api_client, + callable=__me_get, + ) + + def __users_user_id_delete(self, user_id, **kwargs): + """Delete a User # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.users_user_id_delete(user_id, async_req=True) + >>> result = thread.get() + + Args: + user_id (str): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["user_id"] = user_id + return self.call_with_http_info(**kwargs) + + self.users_user_id_delete = _Endpoint( + settings={ + "response_type": None, + "auth": [], + "endpoint_path": "/users/{userId}", + "operation_id": "users_user_id_delete", + "http_method": "DELETE", + "servers": None, + }, + params_map={ + "all": [ + "user_id", + ], + "required": [ + "user_id", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "user_id": (str,), + }, + "attribute_map": { + "user_id": "userId", + }, + "location_map": { + "user_id": "path", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": [], + "content_type": [], + }, + api_client=api_client, + callable=__users_user_id_delete, + ) + + def __users_user_id_patch(self, user_id, user, **kwargs): + """Modify user settings # noqa: E501 + + Configure which projects this user can receive e-mail notifications for. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.users_user_id_patch(user_id, user, async_req=True) + >>> result = thread.get() + + Args: + user_id (str): + user (User): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + User + If the method is called asynchronously, returns the request + thread. + """ + kwargs["async_req"] = kwargs.get("async_req", False) + kwargs["_return_http_data_only"] = kwargs.get( + "_return_http_data_only", True + ) + kwargs["_preload_content"] = kwargs.get("_preload_content", True) + kwargs["_request_timeout"] = kwargs.get("_request_timeout", None) + kwargs["_check_input_type"] = kwargs.get("_check_input_type", True) + kwargs["_check_return_type"] = kwargs.get("_check_return_type", True) + kwargs["_host_index"] = kwargs.get("_host_index") + kwargs["user_id"] = user_id + kwargs["user"] = user + return self.call_with_http_info(**kwargs) + + self.users_user_id_patch = _Endpoint( + settings={ + "response_type": (User,), + "auth": [], + "endpoint_path": "/users/{userId}", + "operation_id": "users_user_id_patch", + "http_method": "PATCH", + "servers": None, + }, + params_map={ + "all": [ + "user_id", + "user", + ], + "required": [ + "user_id", + "user", + ], + "nullable": [], + "enum": [], + "validation": [], + }, + root_map={ + "validations": {}, + "allowed_values": {}, + "openapi_types": { + "user_id": (str,), + "user": (User,), + }, + "attribute_map": { + "user_id": "userId", + }, + "location_map": { + "user_id": "path", + "user": "body", + }, + "collection_format_map": {}, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"], + }, + api_client=api_client, + callable=__users_user_id_patch, + ) diff --git a/cloudendure/api_client.py b/cloudendure/api_client.py new file mode 100644 index 000000000..0d4cca0f8 --- /dev/null +++ b/cloudendure/api_client.py @@ -0,0 +1,961 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import atexit +import io +import json +import mimetypes +import os +import re +import typing +from multiprocessing.pool import ThreadPool +from urllib.parse import quote + +from urllib3.fields import RequestField + +from cloudendure import rest +from cloudendure.configuration import Configuration +from cloudendure.exceptions import ApiException, ApiTypeError, ApiValueError +from cloudendure.model_utils import ( + ModelComposed, + ModelNormal, + ModelSimple, + check_allowed_values, + check_validations, + date, + datetime, + deserialize_file, + file_type, + model_to_dict, + none_type, + validate_and_convert_types, +) + + +class ApiClient(object): + """Generic API client for OpenAPI client library builds. + + OpenAPI generic API client. This client handles the client- + server communication, and is invariant across implementations. Specifics of + the methods and models for each application are generated from the OpenAPI + templates. + + NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + Do not edit the class manually. + + :param configuration: .Configuration object for this client + :param header_name: a header to pass when making calls to the API. + :param header_value: a header value to pass when making calls to + the API. + :param cookie: a cookie to include in the header when making calls + to the API + :param pool_threads: The number of threads to use for async requests + to the API. More threads means more concurrent API requests. + """ + + _pool = None + + def __init__( + self, + configuration=None, + header_name=None, + header_value=None, + cookie=None, + pool_threads=1, + ): + if configuration is None: + configuration = Configuration.get_default_copy() + self.configuration = configuration + self.pool_threads = pool_threads + + self.rest_client = rest.RESTClientObject(configuration) + self.default_headers = {} + if header_name is not None: + self.default_headers[header_name] = header_value + self.cookie = cookie + # Set default User-Agent. + self.user_agent = "OpenAPI-Generator/1.0.0/python" + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.close() + + def close(self): + if self._pool: + self._pool.close() + self._pool.join() + self._pool = None + if hasattr(atexit, "unregister"): + atexit.unregister(self.close) + + @property + def pool(self): + """Create thread pool on first request + avoids instantiating unused threadpool for blocking clients. + """ + if self._pool is None: + atexit.register(self.close) + self._pool = ThreadPool(self.pool_threads) + return self._pool + + @property + def user_agent(self): + """User agent for this API client""" + return self.default_headers["User-Agent"] + + @user_agent.setter + def user_agent(self, value): + self.default_headers["User-Agent"] = value + + def set_default_header(self, header_name, header_value): + self.default_headers[header_name] = header_value + + def __call_api( + self, + resource_path: str, + method: str, + path_params: typing.Optional[typing.Dict[str, typing.Any]] = None, + query_params: typing.Optional[ + typing.List[typing.Tuple[str, typing.Any]] + ] = None, + header_params: typing.Optional[typing.Dict[str, typing.Any]] = None, + body: typing.Optional[typing.Any] = None, + post_params: typing.Optional[typing.List[typing.Tuple[str, typing.Any]]] = None, + files: typing.Optional[typing.Dict[str, typing.List[io.IOBase]]] = None, + response_type: typing.Optional[typing.Tuple[typing.Any]] = None, + auth_settings: typing.Optional[typing.List[str]] = None, + _return_http_data_only: typing.Optional[bool] = None, + collection_formats: typing.Optional[typing.Dict[str, str]] = None, + _preload_content: bool = True, + _request_timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + _host: typing.Optional[str] = None, + _check_type: typing.Optional[bool] = None, + ): + + config = self.configuration + + # header parameters + header_params = header_params or {} + header_params.update(self.default_headers) + if self.cookie: + header_params["Cookie"] = self.cookie + if header_params: + header_params = self.sanitize_for_serialization(header_params) + header_params = dict( + self.parameters_to_tuples(header_params, collection_formats) + ) + + # path parameters + if path_params: + path_params = self.sanitize_for_serialization(path_params) + path_params = self.parameters_to_tuples(path_params, collection_formats) + for k, v in path_params: + # specified safe chars, encode everything + resource_path = resource_path.replace( + "{%s}" % k, quote(str(v), safe=config.safe_chars_for_path_param) + ) + + # query parameters + if query_params: + query_params = self.sanitize_for_serialization(query_params) + query_params = self.parameters_to_tuples(query_params, collection_formats) + + # post parameters + if post_params or files: + post_params = post_params if post_params else [] + post_params = self.sanitize_for_serialization(post_params) + post_params = self.parameters_to_tuples(post_params, collection_formats) + post_params.extend(self.files_parameters(files)) + if header_params["Content-Type"].startswith("multipart"): + post_params = self.parameters_to_multipart(post_params, (dict)) + + # body + if body: + body = self.sanitize_for_serialization(body) + + # auth setting + self.update_params_for_auth( + header_params, query_params, auth_settings, resource_path, method, body + ) + + # request url + if _host is None: + url = self.configuration.host + resource_path + else: + # use server/host defined in path or operation instead + url = _host + resource_path + + try: + # perform request and return response + response_data = self.request( + method, + url, + query_params=query_params, + headers=header_params, + post_params=post_params, + body=body, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + ) + except ApiException as e: + e.body = e.body.decode("utf-8") + raise e + + self.last_response = response_data + + return_data = response_data + + if not _preload_content: + return return_data + return return_data + + # deserialize response data + if response_type: + if response_type != (file_type,): + encoding = "utf-8" + content_type = response_data.getheader("content-type") + if content_type is not None: + match = re.search(r"charset=([a-zA-Z\-\d]+)[\s\;]?", content_type) + if match: + encoding = match.group(1) + response_data.data = response_data.data.decode(encoding) + + return_data = self.deserialize(response_data, response_type, _check_type) + else: + return_data = None + + if _return_http_data_only: + return return_data + else: + return (return_data, response_data.status, response_data.getheaders()) + + def parameters_to_multipart(self, params, collection_types): + """Get parameters as list of tuples, formatting as json if value is collection_types + + :param params: Parameters as list of two-tuples + :param dict collection_types: Parameter collection types + :return: Parameters as list of tuple or urllib3.fields.RequestField + """ + new_params = [] + if collection_types is None: + collection_types = dict + for k, v in ( + params.items() if isinstance(params, dict) else params + ): # noqa: E501 + if isinstance( + v, collection_types + ): # v is instance of collection_type, formatting as application/json + v = json.dumps(v, ensure_ascii=False).encode("utf-8") + field = RequestField(k, v) + field.make_multipart(content_type="application/json; charset=utf-8") + new_params.append(field) + else: + new_params.append((k, v)) + return new_params + + @classmethod + def sanitize_for_serialization(cls, obj): + """Prepares data for transmission before it is sent with the rest client + If obj is None, return None. + If obj is str, int, long, float, bool, return directly. + If obj is datetime.datetime, datetime.date + convert to string in iso8601 format. + If obj is list, sanitize each element in the list. + If obj is dict, return the dict. + If obj is OpenAPI model, return the properties dict. + If obj is io.IOBase, return the bytes + :param obj: The data to serialize. + :return: The serialized form of data. + """ + if isinstance(obj, (ModelNormal, ModelComposed)): + return { + key: cls.sanitize_for_serialization(val) + for key, val in model_to_dict(obj, serialize=True).items() + } + elif isinstance(obj, io.IOBase): + return cls.get_file_data_and_close_file(obj) + elif isinstance(obj, (str, int, float, none_type, bool)): + return obj + elif isinstance(obj, (datetime, date)): + return obj.isoformat() + elif isinstance(obj, ModelSimple): + return cls.sanitize_for_serialization(obj.value) + elif isinstance(obj, (list, tuple)): + return [cls.sanitize_for_serialization(item) for item in obj] + if isinstance(obj, dict): + return { + key: cls.sanitize_for_serialization(val) for key, val in obj.items() + } + raise ApiValueError( + "Unable to prepare type {} for serialization".format(obj.__class__.__name__) + ) + + def deserialize(self, response, response_type, _check_type): + """Deserializes response into an object. + + :param response: RESTResponse object to be deserialized. + :param response_type: For the response, a tuple containing: + valid classes + a list containing valid classes (for list schemas) + a dict containing a tuple of valid classes as the value + Example values: + (str,) + (Pet,) + (float, none_type) + ([int, none_type],) + ({str: (bool, str, int, float, date, datetime, str, none_type)},) + :param _check_type: boolean, whether to check the types of the data + received from the server + :type _check_type: bool + + :return: deserialized object. + """ + # handle file downloading + # save response body into a tmp file and return the instance + if response_type == (file_type,): + content_disposition = response.getheader("Content-Disposition") + return deserialize_file( + response.data, + self.configuration, + content_disposition=content_disposition, + ) + + # fetch data from response object + try: + received_data = json.loads(response.data) + except ValueError: + received_data = response.data + + # store our data under the key of 'received_data' so users have some + # context if they are deserializing a string and the data type is wrong + deserialized_data = validate_and_convert_types( + received_data, + response_type, + ["received_data"], + True, + _check_type, + configuration=self.configuration, + ) + return deserialized_data + + def call_api( + self, + resource_path: str, + method: str, + path_params: typing.Optional[typing.Dict[str, typing.Any]] = None, + query_params: typing.Optional[ + typing.List[typing.Tuple[str, typing.Any]] + ] = None, + header_params: typing.Optional[typing.Dict[str, typing.Any]] = None, + body: typing.Optional[typing.Any] = None, + post_params: typing.Optional[typing.List[typing.Tuple[str, typing.Any]]] = None, + files: typing.Optional[typing.Dict[str, typing.List[io.IOBase]]] = None, + response_type: typing.Optional[typing.Tuple[typing.Any]] = None, + auth_settings: typing.Optional[typing.List[str]] = None, + async_req: typing.Optional[bool] = None, + _return_http_data_only: typing.Optional[bool] = None, + collection_formats: typing.Optional[typing.Dict[str, str]] = None, + _preload_content: bool = True, + _request_timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + _host: typing.Optional[str] = None, + _check_type: typing.Optional[bool] = None, + ): + """Makes the HTTP request (synchronous) and returns deserialized data. + + To make an async_req request, set the async_req parameter. + + :param resource_path: Path to method endpoint. + :param method: Method to call. + :param path_params: Path parameters in the url. + :param query_params: Query parameters in the url. + :param header_params: Header parameters to be + placed in the request header. + :param body: Request body. + :param post_params dict: Request post form parameters, + for `application/x-www-form-urlencoded`, `multipart/form-data`. + :param auth_settings list: Auth Settings names for the request. + :param response_type: For the response, a tuple containing: + valid classes + a list containing valid classes (for list schemas) + a dict containing a tuple of valid classes as the value + Example values: + (str,) + (Pet,) + (float, none_type) + ([int, none_type],) + ({str: (bool, str, int, float, date, datetime, str, none_type)},) + :param files: key -> field name, value -> a list of open file + objects for `multipart/form-data`. + :type files: dict + :param async_req bool: execute request asynchronously + :type async_req: bool, optional + :param _return_http_data_only: response data without head status code + and headers + :type _return_http_data_only: bool, optional + :param collection_formats: dict of collection formats for path, query, + header, and post parameters. + :type collection_formats: dict, optional + :param _preload_content: if False, the urllib3.HTTPResponse object will + be returned without reading/decoding response + data. Default is True. + :type _preload_content: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _check_type: boolean describing if the data back from the server + should have its type checked. + :type _check_type: bool, optional + :return: + If async_req parameter is True, + the request will be called asynchronously. + The method will return the request thread. + If parameter async_req is False or missing, + then the method will return the response directly. + """ + if not async_req: + return self.__call_api( + resource_path, + method, + path_params, + query_params, + header_params, + body, + post_params, + files, + response_type, + auth_settings, + _return_http_data_only, + collection_formats, + _preload_content, + _request_timeout, + _host, + _check_type, + ) + + return self.pool.apply_async( + self.__call_api, + ( + resource_path, + method, + path_params, + query_params, + header_params, + body, + post_params, + files, + response_type, + auth_settings, + _return_http_data_only, + collection_formats, + _preload_content, + _request_timeout, + _host, + _check_type, + ), + ) + + def request( + self, + method, + url, + query_params=None, + headers=None, + post_params=None, + body=None, + _preload_content=True, + _request_timeout=None, + ): + """Makes the HTTP request using RESTClient.""" + if method == "GET": + return self.rest_client.GET( + url, + query_params=query_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + headers=headers, + ) + elif method == "HEAD": + return self.rest_client.HEAD( + url, + query_params=query_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + headers=headers, + ) + elif method == "OPTIONS": + return self.rest_client.OPTIONS( + url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body, + ) + elif method == "POST": + return self.rest_client.POST( + url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body, + ) + elif method == "PUT": + return self.rest_client.PUT( + url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body, + ) + elif method == "PATCH": + return self.rest_client.PATCH( + url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body, + ) + elif method == "DELETE": + return self.rest_client.DELETE( + url, + query_params=query_params, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body, + ) + else: + raise ApiValueError( + "http method must be `GET`, `HEAD`, `OPTIONS`," + " `POST`, `PATCH`, `PUT` or `DELETE`." + ) + + def parameters_to_tuples(self, params, collection_formats): + """Get parameters as list of tuples, formatting collections. + + :param params: Parameters as dict or list of two-tuples + :param dict collection_formats: Parameter collection formats + :return: Parameters as list of tuples, collections formatted + """ + new_params = [] + if collection_formats is None: + collection_formats = {} + for k, v in ( + params.items() if isinstance(params, dict) else params + ): # noqa: E501 + if k in collection_formats: + collection_format = collection_formats[k] + if collection_format == "multi": + new_params.extend((k, value) for value in v) + else: + if collection_format == "ssv": + delimiter = " " + elif collection_format == "tsv": + delimiter = "\t" + elif collection_format == "pipes": + delimiter = "|" + else: # csv is the default + delimiter = "," + new_params.append((k, delimiter.join(str(value) for value in v))) + else: + new_params.append((k, v)) + return new_params + + @staticmethod + def get_file_data_and_close_file(file_instance: io.IOBase) -> bytes: + file_data = file_instance.read() + file_instance.close() + return file_data + + def files_parameters( + self, files: typing.Optional[typing.Dict[str, typing.List[io.IOBase]]] = None + ): + """Builds form parameters. + + :param files: None or a dict with key=param_name and + value is a list of open file objects + :return: List of tuples of form parameters with file data + """ + if files is None: + return [] + + params = [] + for param_name, file_instances in files.items(): + if file_instances is None: + # if the file field is nullable, skip None values + continue + for file_instance in file_instances: + if file_instance is None: + # if the file field is nullable, skip None values + continue + if file_instance.closed is True: + raise ApiValueError( + "Cannot read a closed file. The passed in file_type " + "for %s must be open." % param_name + ) + filename = os.path.basename(file_instance.name) + filedata = self.get_file_data_and_close_file(file_instance) + mimetype = ( + mimetypes.guess_type(filename)[0] or "application/octet-stream" + ) + params.append( + tuple([param_name, tuple([filename, filedata, mimetype])]) + ) + + return params + + def select_header_accept(self, accepts): + """Returns `Accept` based on an array of accepts provided. + + :param accepts: List of headers. + :return: Accept (e.g. application/json). + """ + if not accepts: + return + + accepts = [x.lower() for x in accepts] + + if "application/json" in accepts: + return "application/json" + else: + return ", ".join(accepts) + + def select_header_content_type(self, content_types): + """Returns `Content-Type` based on an array of content_types provided. + + :param content_types: List of content-types. + :return: Content-Type (e.g. application/json). + """ + if not content_types: + return "application/json" + + content_types = [x.lower() for x in content_types] + + if "application/json" in content_types or "*/*" in content_types: + return "application/json" + else: + return content_types[0] + + def update_params_for_auth( + self, headers, querys, auth_settings, resource_path, method, body + ): + """Updates header and query params based on authentication setting. + + :param headers: Header parameters dict to be updated. + :param querys: Query parameters tuple list to be updated. + :param auth_settings: Authentication setting identifiers list. + :param resource_path: A string representation of the HTTP request resource path. + :param method: A string representation of the HTTP request method. + :param body: A object representing the body of the HTTP request. + The object type is the return value of _encoder.default(). + """ + if not auth_settings: + return + + for auth in auth_settings: + auth_setting = self.configuration.auth_settings().get(auth) + if auth_setting: + if auth_setting["in"] == "cookie": + headers["Cookie"] = auth_setting["value"] + elif auth_setting["in"] == "header": + if auth_setting["type"] != "http-signature": + headers[auth_setting["key"]] = auth_setting["value"] + elif auth_setting["in"] == "query": + querys.append((auth_setting["key"], auth_setting["value"])) + else: + raise ApiValueError( + "Authentication token must be in `query` or `header`" + ) + + ## + ## HERE: This was included to persist the auth setup for CE. As of yet, I see no + ## way to do it via the mechanism above (see the `auth in auth_settings` logic + ## above) + def set_auth_from_last_response(self): + if not self.last_response: + raise OpenApiException( + "no last_response: There must have been a successful request to set auth." + ) + + cookie = self.last_response.getheader("Set-Cookie") + + # pull the values + token = re.search('XSRF-TOKEN="(.+)"', cookie).group(1) + session = re.search("(session=.*?);", cookie).group(1) + + ## set them properly + self.set_session_auth(token, session) + + def set_session_auth(self, token, session): + self.set_default_header("X-XSRF-TOKEN", token) + self.cookie = session + + ## END HERE ## + + +class Endpoint(object): + def __init__( + self, + settings=None, + params_map=None, + root_map=None, + headers_map=None, + api_client=None, + callable=None, + ): + """Creates an endpoint + + Args: + settings (dict): see below key value pairs + 'response_type' (tuple/None): response type + 'auth' (list): a list of auth type keys + 'endpoint_path' (str): the endpoint path + 'operation_id' (str): endpoint string identifier + 'http_method' (str): POST/PUT/PATCH/GET etc + 'servers' (list): list of str servers that this endpoint is at + params_map (dict): see below key value pairs + 'all' (list): list of str endpoint parameter names + 'required' (list): list of required parameter names + 'nullable' (list): list of nullable parameter names + 'enum' (list): list of parameters with enum values + 'validation' (list): list of parameters with validations + root_map + 'validations' (dict): the dict mapping endpoint parameter tuple + paths to their validation dictionaries + 'allowed_values' (dict): the dict mapping endpoint parameter + tuple paths to their allowed_values (enum) dictionaries + 'openapi_types' (dict): param_name to openapi type + 'attribute_map' (dict): param_name to camelCase name + 'location_map' (dict): param_name to 'body', 'file', 'form', + 'header', 'path', 'query' + collection_format_map (dict): param_name to `csv` etc. + headers_map (dict): see below key value pairs + 'accept' (list): list of Accept header strings + 'content_type' (list): list of Content-Type header strings + api_client (ApiClient) api client instance + callable (function): the function which is invoked when the + Endpoint is called + """ + self.settings = settings + self.params_map = params_map + self.params_map["all"].extend( + [ + "async_req", + "_host_index", + "_preload_content", + "_request_timeout", + "_return_http_data_only", + "_check_input_type", + "_check_return_type", + ] + ) + self.params_map["nullable"].extend(["_request_timeout"]) + self.validations = root_map["validations"] + self.allowed_values = root_map["allowed_values"] + self.openapi_types = root_map["openapi_types"] + extra_types = { + "async_req": (bool,), + "_host_index": (none_type, int), + "_preload_content": (bool,), + "_request_timeout": (none_type, int, (int,), [int]), + "_return_http_data_only": (bool,), + "_check_input_type": (bool,), + "_check_return_type": (bool,), + } + self.openapi_types.update(extra_types) + self.attribute_map = root_map["attribute_map"] + self.location_map = root_map["location_map"] + self.collection_format_map = root_map["collection_format_map"] + self.headers_map = headers_map + self.api_client = api_client + self.callable = callable + + def __validate_inputs(self, kwargs): + for param in self.params_map["enum"]: + if param in kwargs: + check_allowed_values(self.allowed_values, (param,), kwargs[param]) + + for param in self.params_map["validation"]: + if param in kwargs: + check_validations( + self.validations, + (param,), + kwargs[param], + configuration=self.api_client.configuration, + ) + + if kwargs["_check_input_type"] is False: + return + + for key, value in kwargs.items(): + fixed_val = validate_and_convert_types( + value, + self.openapi_types[key], + [key], + False, + kwargs["_check_input_type"], + configuration=self.api_client.configuration, + ) + kwargs[key] = fixed_val + + def __gather_params(self, kwargs): + params = { + "body": None, + "collection_format": {}, + "file": {}, + "form": [], + "header": {}, + "path": {}, + "query": [], + } + + for param_name, param_value in kwargs.items(): + param_location = self.location_map.get(param_name) + if param_location is None: + continue + if param_location: + if param_location == "body": + params["body"] = param_value + continue + base_name = self.attribute_map[param_name] + if param_location == "form" and self.openapi_types[param_name] == ( + file_type, + ): + params["file"][param_name] = [param_value] + elif param_location == "form" and self.openapi_types[param_name] == ( + [file_type], + ): + # param_value is already a list + params["file"][param_name] = param_value + elif param_location in {"form", "query"}: + param_value_full = (base_name, param_value) + params[param_location].append(param_value_full) + if param_location not in {"form", "query"}: + params[param_location][base_name] = param_value + collection_format = self.collection_format_map.get(param_name) + if collection_format: + params["collection_format"][base_name] = collection_format + + return params + + def __call__(self, *args, **kwargs): + """This method is invoked when endpoints are called + Example: + + api_instance = AccountApi() + api_instance.accounts_account_id_get # this is an instance of the class Endpoint + api_instance.accounts_account_id_get() # this invokes api_instance.accounts_account_id_get.__call__() + which then invokes the callable functions stored in that endpoint at + api_instance.accounts_account_id_get.callable or self.callable in this class + + """ + return self.callable(self, *args, **kwargs) + + def call_with_http_info(self, **kwargs): + + try: + index = ( + self.api_client.configuration.server_operation_index.get( + self.settings["operation_id"], + self.api_client.configuration.server_index, + ) + if kwargs["_host_index"] is None + else kwargs["_host_index"] + ) + server_variables = ( + self.api_client.configuration.server_operation_variables.get( + self.settings["operation_id"], + self.api_client.configuration.server_variables, + ) + ) + _host = self.api_client.configuration.get_host_from_settings( + index, variables=server_variables, servers=self.settings["servers"] + ) + except IndexError: + if self.settings["servers"]: + raise ApiValueError( + "Invalid host index. Must be 0 <= index < %s" + % len(self.settings["servers"]) + ) + _host = None + + for key, value in kwargs.items(): + if key not in self.params_map["all"]: + raise ApiTypeError( + "Got an unexpected parameter '%s'" + " to method `%s`" % (key, self.settings["operation_id"]) + ) + # only throw this nullable ApiValueError if _check_input_type + # is False, if _check_input_type==True we catch this case + # in self.__validate_inputs + if ( + key not in self.params_map["nullable"] + and value is None + and kwargs["_check_input_type"] is False + ): + raise ApiValueError( + "Value may not be None for non-nullable parameter `%s`" + " when calling `%s`" % (key, self.settings["operation_id"]) + ) + + for key in self.params_map["required"]: + if key not in kwargs.keys(): + raise ApiValueError( + "Missing the required parameter `%s` when calling " + "`%s`" % (key, self.settings["operation_id"]) + ) + + self.__validate_inputs(kwargs) + + params = self.__gather_params(kwargs) + + accept_headers_list = self.headers_map["accept"] + if accept_headers_list: + params["header"]["Accept"] = self.api_client.select_header_accept( + accept_headers_list + ) + + content_type_headers_list = self.headers_map["content_type"] + if content_type_headers_list: + header_list = self.api_client.select_header_content_type( + content_type_headers_list + ) + params["header"]["Content-Type"] = header_list + + return self.api_client.call_api( + self.settings["endpoint_path"], + self.settings["http_method"], + params["path"], + params["query"], + params["header"], + body=params["body"], + post_params=params["form"], + files=params["file"], + response_type=self.settings["response_type"], + auth_settings=self.settings["auth"], + async_req=kwargs["async_req"], + _check_type=kwargs["_check_return_type"], + _return_http_data_only=kwargs["_return_http_data_only"], + _preload_content=kwargs["_preload_content"], + _request_timeout=kwargs["_request_timeout"], + _host=_host, + collection_formats=params["collection_format"], + ) diff --git a/cloudendure/apis/__init__.py b/cloudendure/apis/__init__.py new file mode 100644 index 000000000..4c08e8c38 --- /dev/null +++ b/cloudendure/apis/__init__.py @@ -0,0 +1,28 @@ +# flake8: noqa + +# Import all APIs into this package. +# If you have many APIs here with many many models used in each API this may +# raise a `RecursionError`. +# In order to avoid this, import only the API that you directly need like: +# +# from .api.account_api import AccountApi +# +# or import this package, but before doing it, use: +# +# import sys +# sys.setrecursionlimit(n) + +# Import APIs into API package: +from cloudendure.api.account_api import AccountApi +from cloudendure.api.actions_api import ActionsApi +from cloudendure.api.authentication_api import AuthenticationApi +from cloudendure.api.blueprint_api import BlueprintApi +from cloudendure.api.cloud_api import CloudApi +from cloudendure.api.cloud_credentials_api import CloudCredentialsApi +from cloudendure.api.default_api import DefaultApi +from cloudendure.api.licensing_api import LicensingApi +from cloudendure.api.machines_api import MachinesApi +from cloudendure.api.project_api import ProjectApi +from cloudendure.api.recovery_plans_api import RecoveryPlansApi +from cloudendure.api.replication_api import ReplicationApi +from cloudendure.api.user_api import UserApi diff --git a/cloudendure/aws.py b/cloudendure/aws.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/cloudendure/cloudendure.py b/cloudendure/cloudendure.py deleted file mode 100644 index c872c94f3..000000000 --- a/cloudendure/cloudendure.py +++ /dev/null @@ -1,1146 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -"""Define the CloudEndure main entry logic.""" -from __future__ import annotations - -import base64 -import datetime -import json -import os -import pprint -from typing import Any, Dict, List - -import boto3 -import fire -from botocore import client as boto_client -from botocore.exceptions import ClientError -from requests.models import Response - -from .api import CloudEndureAPI -from .config import CloudEndureConfig -from .constants import get_aws_regions -from .events import Event, EventHandler -from .exceptions import CloudEndureHTTPException, CloudEndureMisconfigured -from .templates import TerraformTemplate -from .utils import get_user_agent - -HOST: str = "https://console.cloudendure.com" -headers: Dict[str, str] = {"Content-Type": "application/json"} -session: Dict[str, str] = {} -AWS_REGION: str = os.environ.get("AWS_REGION", "") - - -class CloudEndure: - """Define the CloudEndure general object.""" - - def __init__( - self, project_name: str = "", dry_run: bool = False, username: str = "", password: str = "", token: str = "", - ) -> None: - """Initialize the CloudEndure object. - - This entrypoint is primarily for use with the CLI. - - """ - self.config: CloudEndureConfig = CloudEndureConfig(username=username, password=password, token=token) - self.api: CloudEndureAPI = CloudEndureAPI(self.config) - self.is_authenticated = self.api.login() - - # Determine the active project ID. - self.project_id = self.config.active_config.get("project_id", "") - - # Determine the active project name. - self.project_name: str = self.config.active_config.get("project_name", "") - if project_name and project_name != self.project_name: - self.project_name = project_name - - if not self.project_id or (project_name and project_name != self.project_name): - self.project_id: str = self.get_project_id(project_name=self.project_name) - - self.dry_run = dry_run - self.event_handler: EventHandler = EventHandler() - self.destination_account: str = self.config.active_config.get("destination_account", "") - self.destination_kms: str = self.config.active_config.get("destination_kms", "") - self.destination_role: str = self.config.active_config.get("destination_role", "") - self.subnet_id: str = self.config.active_config.get("subnet_id", "") - self.private_ip_action: str = self.config.active_config.get("private_ip_action", "") - if self.subnet_id and not self.private_ip_action: - self.private_ip_action = "CREATE_NEW" - self.security_group_id: str = self.config.active_config.get("security_group_id", "") - self.iam_role: str = self.config.active_config.get("iam_role", "") - self.target_machines: List[str] = self.config.active_config.get("machines", "").split(",") - self.target_machines = [x.upper() for x in self.target_machines] - self.target_instance_types: List[str] = self.config.active_config.get("instance_types", "").split(",") - if len(self.target_machines) == len(self.target_instance_types): - self.target_instances: Dict[str, str] = dict(zip(self.target_machines, self.target_instance_types)) - else: - print( - "WARNING: Misconfiguration of CLOUDENDURE_INSTANCE_TYPES and CLOUDENDURE_MACHINES. These should be the same length!" - ) - self.target_instances = {} - - self.lagging_machines: List[str] = [] - self.ready_machines: List[str] = [] - self.nonexistent_machines: List[str] = [] - self.launched_machines: List[str] = [] - self.migration_wave: str = self.config.active_config.get("migration_wave", "0") - self.max_lag_ttl: int = self.config.active_config.get("max_lag_ttl", 90) - - if not self.is_authenticated: - print("Failed to authenticate with CloudEndure! Please check your credentials and try again!") - - def __repr__(self) -> str: - """Provide the representation for the CloudEndure object. - - Returns: - str: The string representation of the CloudEndure object. - - """ - return f"" - - @property - def version(self) -> str: - """Display the CloudEndure module version. - - Returns: - str: The CloudEndure Python module version. - - """ - return get_user_agent() - - def _get_role_credentials(self, name: str, role: str) -> Dict[str, Any]: - _sts_client: boto_client = boto3.client("sts") - - print(f"Assuming role: {role}") - assumed_role: Dict[str, Any] = _sts_client.assume_role(RoleArn=self.destination_role, RoleSessionName=name) - return assumed_role.get("Credentials", {}) - - def get_project_id(self, project_name: str = "") -> str: - """Get the associated CloudEndure project ID by project_name. - - Args: - project_name (str): The name of the CloudEndure project. - - Exceptions: - Exception: Currently catch all encountered exceptions while traversing - the project list API call. - - Returns: - str: The CloudEndure project UUID. - - """ - if not self.is_authenticated: - return "" - - print(f"Active Project Name: {project_name}") - if self.project_name and self.project_name == project_name: - return self.project_id - - if not self.project_name and not project_name: - print("No project name provided! Please add a project_name to the configuration and re-run!") - raise CloudEndureMisconfigured() - - if not project_name: - project_name: str = self.project_name - - print("No project ID for the provided project name!\nFetching project ID...\n") - projects_result: Response = self.api.api_call("projects") - if projects_result.status_code != 200: - print("Failed to fetch the project!") - return "" - - try: - # Get Project ID - projects: List[Any] = json.loads(projects_result.text).get("items", []) - found_project: Dict[Any, Any] = next( - (item for item in projects if item.get("name", "NONE") == project_name), {}, - ) - project_id: str = found_project.get("id", "") - except Exception as e: - print(f"Exception: {str(e)}") - return "" - return project_id - - def get_cloud(self, cloud_type: str = "") -> str: - """Get the ID for the specified cloud type.""" - if not cloud_type: - cloud_type = self.config.active_config.get("cloud_type", "AWS") - - clouds_result: Response = self.api.api_call("clouds") - for cloud in json.loads(clouds_result.content)["items"]: - if cloud.get("name", "") == cloud_type: - return cloud.get("id", "") - return "" - - def create_cloud_credentials(self, access_key: str = "", secret_key: str = "") -> str: - """Create a new CloudEndure project. - - Args: - project_name (str): The name of the CloudEndure project to be created. - - Returns: - str: The newly created CloudEndure project ID. - - """ - _encoded_private_key = base64.b64encode(secret_key.encode()) - _project = { - "accountIdentifier": "", - "publicKey": access_key, - "privateKey": _encoded_private_key, - "cloudId": self.get_cloud(), - } - - cloud_cred_result: Response = self.api.api_call("cloudCredentials", method="post", data=_project) - if cloud_cred_result.status_code != 201: - print( - f"Failed to create the new cloud credentials: ({access_key}): " - f"{cloud_cred_result.status_code} {cloud_cred_result.content}" - ) - return "" - print(f"Cloud Credentials: ({access_key}) was created successfully!") - return json.loads(cloud_cred_result.content).get("id", "") - - def create_repl_config(self, region: str = "", cloud_cred_id: str = ""): - """Create a CloudEndure project replication configuration. - - Args: - project_name (str): The name of the CloudEndure project to get replication configurations for. - - Returns: - list of dict: The CloudEndure replication configuration dictionary mapping. - - """ - regions = get_aws_regions() - payload = { - # "archivingEnabled": False, - "bandwidthThrottling": 0, - # "cloudCredentials": "", - # "id": "", - # "objectStorageLocation": "", - # "proxyUrl": "", - # "region": "", - "replicationServerType": "Default", - "replicationTags": [], - # "replicatorSecurityGroupIDs": [], - # "subnetHostProject": "", - # "subnetId": "", - "useDedicatedServer": False, - "useLowCostDisks": False, - "usePrivateIp": True, - "volumeEncryptionAllowed": False, - # "volumeEncryptionKey": "" - } - - credentials_response: Response = self.api.api_call(f"cloudCredentials/{cloud_cred_id}/regions") - for _region in json.loads(credentials_response.content).get("items", []): - if _region["name"] == regions.get(region, "N/A"): - payload["region"] = _region["id"] - - print(payload) - repl_result: Response = self.api.api_call( - f"projects/{self.project_id}/replicationConfigurations", method="post", data=payload, - ) - if repl_result.status_code != 201: - print(f"Failed to create replication configuration {repl_result.status_code} {repl_result.content}") - return "" - print("Replication configuration was created successfully") - return json.loads(repl_result.content).get("id", "") - - def get_repl_configs(self) -> List[Any]: - """Get a CloudEndure project's replication configurations. - - Args: - project_name (str): The name of the CloudEndure project to get replication configurations for. - - Returns: - list of dict: The CloudEndure replication configuration dictionary mapping. - - """ - print(f"Fetching Replication Configuration - Project Name: ({self.project_name})") - repl_config_results: Response = self.api.api_call(f"projects/{self.project_id}/replicationConfigurations") - - if repl_config_results.status_code != 200: - print( - f"Failed to fetch replication configurations for ({self.project_name}): " - f"{repl_config_results.status_code} {repl_config_results.content}" - ) - print(repl_config_results.text) - return [] - - repl_configs = json.loads(repl_config_results.content).get("items", []) - print(f"Successfully fetched replication configurations for project: {self.project_name}") - return repl_configs - - def create_project(self, project_name: str) -> str: - """Create a new CloudEndure project. - - Args: - project_name (str): The name of the CloudEndure project to be created. - - Returns: - str: The newly created CloudEndure project ID. - - """ - project = { - "licensesIDs": [], - "name": project_name, - "targetCloudId": self.get_cloud(), - "type": "MIGRATION", - } - licenses_result: Response = self.api.api_call("licenses") - - for license in json.loads(licenses_result.content).get("items", []): - license_id = license.get("id", "") - if license_id: - print(license_id) - project["licensesIDs"].append(license_id) - - projects_result: Response = self.api.api_call("projects", method="post", data=project) - if projects_result.status_code != 201: - print( - f"Failed to create the new project ({self.project_name}): " - f"{projects_result.status_code} {projects_result.content}" - ) - return "" - print(f"Project: ({self.project_name}) was created successfully!") - return json.loads(projects_result.content).get("id", "") - - def update_project(self, project_data: Dict[str, Any] = None) -> bool: - """Update a CloudEndure project. - - Args: - project_name (str): The name of the CloudEndure project to be updated. - project_data (dict): The project payload to be used to update the project. - Defaults to the current project state. - - Returns: - bool: Whether or not the project has been updated. - - """ - print(f"Updating Project - Name: ({self.project_name})") - projects_result: Response = self.api.api_call(f"projects/{self.project_id}", method="patch", data=project_data) - - if projects_result.status_code != 200: - print( - f"Failed to update the project ({self.project_name}): " - f"{projects_result.status_code} {projects_result.content}" - ) - print(projects_result.text) - return False - print("Project was updated successfully") - return True - - def check(self) -> bool: - """Check the status of machines in the provided project.""" - print(f"Checking Project - Name: ({self.project_name}) - Dry Run: ({self.dry_run})") - - projects_response: Response = self.api.api_call("projects") - - if projects_response.status_code != 200: - print("Failed to fetch the project!") - raise CloudEndureHTTPException("Failed to fetch the CloudEndure Project!") - - machine_status: int = 0 - machines_response: Response = self.api.api_call(f"projects/{self.project_id}/machines") - - for _machine in self.target_machines: - machine_exist: bool = False - for machine in json.loads(machines_response.text).get("items", []): - source_props: Dict[str, Any] = machine.get("sourceProperties", {}) - ref_name: str = source_props.get("name") or source_props.get("machineCloudId", "NONE") - if ref_name.upper() == _machine: - machine_exist = True - - if "lastConsistencyDateTime" not in machine["replicationInfo"]: - print(f"{ref_name} replication into the migration account in progress!") - else: - replica: str = machine.get("replica") - if replica: - machine_status += 1 - print(f"{ref_name} has been launched in the migration account: {replica}") - else: - print(f"{ref_name} has not been launched or is preparing launch in the migration account") - - if not machine_exist: - print(f"ERROR: Machine: {_machine} does not exist!") - - if machine_status == len(self.target_machines): - print("All machines specified in CLOUDENDURE_MACHINES have been launched in the migration account") - else: - print("Some machines have not yet completed launching in the migration account") - return True - - def update_encryption_key(self, kms_id: str) -> bool: - """Update encryption keys for replication. - - Warning: This will cause re-sync if key does not match! - - Args: - kms_id (str): The AWS KMD ID to update the project to use. - project_name (str): The name of the CloudEndure project to be updated. - dry_run (bool): Whether or not this execution should be a dry run, - making no actual changes to CloudEndure for validation purposes. - - Returns: - bool: Whether or not the encryption key was updated. - - """ - print(f"Updating Encryption Key - Name: ({self.project_name}) - KMS ID: ({kms_id}) - Dry Run: ({self.dry_run})") - - machines_response: Response = self.api.api_call(f"projects/{self.project_id}/machines") - for machine in json.loads(machines_response.text).get("items", []): - source_props: Dict[str, Any] = machine.get("sourceProperties", {}) - name: str = source_props.get("name") - machine_id: str = machine.get("id") - replication_config: Dict[str, Any] = machine.get("replicationConfiguration", {}) - - if replication_config.get("volumeEncryptionKey") == kms_id: - print(f"Key matches {name}") - continue - - if self.dry_run: - print(f"DRY RUN - Not updating key for {name} - DRY RUN") - continue - - replication_config["volumeEncryptionKey"] = kms_id - endpoint: str = f"projects/{self.project_id}/machines/{machine_id}" - print(f"sending to {endpoint}") - result: Response = self.api.api_call(endpoint, method="patch", data=json.dumps(machine)) - - if result.status_code != 200: - print(f"Key update failure encountered for machine: {name} - {result.status_code}\n{result.json()}") - else: - print(f"Key updated for or machine: {name}") - - return True - - def check_licenses(self) -> Dict[str, Any]: - """Check licenses for all available instances in a given project.""" - response_dict: Dict[str, Any] = {} - print(f"Checking CloudEndure Licenses - Name: ({self.project_name})") - - now: datetime = datetime.datetime.now(datetime.timezone.utc) - expirationday: timedelta = datetime.timedelta(days=135) - expirationwarn: timedelta = datetime.timedelta(days=90) - machine_data_dict: Dict[str, Any] = {} - machines_response: Response = self.api.api_call(f"projects/{self.project_id}/machines") - for machine in json.loads(machines_response.text).get("items", []): - source_props: Dict[str, Any] = machine.get("sourceProperties", {}) - machine_id: str = machine.get("id") - machine_name: str = source_props.get("name") - license_data: Dict[str, Any] = machine.get("license", {}) - license_use: str = license_data.get("startOfUseDateTime") - license_date: datetime = datetime.datetime.strptime(license_use, "%Y-%m-%dT%H:%M:%S.%f%z") - print(f"{machine_name} agent install: {license_date}") - delta: timedelta = now - license_date - if expirationday < delta: - response_dict[machine_name] = { - "machine_id": machine_id, - "status": "expired", - "delta_days": delta.days, - } - elif expirationwarn < delta: - response_dict[machine_name] = { - "machine_id": machine_id, - "status": "warn", - "delta_days": delta.days, - } - - return response_dict - - def get_machine_sync_details(self) -> Dict[Any]: - """Checks CloudEndure Project inventory and returns register machine replication state. - """ - print(f"INFO: Retreiving sync status for all machines in Project: ({self.project_name})") - machines_response: Response = self.api.api_call(f"projects/{self.project_id}/machines") - if not machines_response.ok: - print(f"ERROR: API response did not return a 2XX status; Returned {machines_response.status_code} ...") - return {} - response_dict: Dict[str, Any] = {} - ce_project_inventory = json.loads(machines_response.text).get("items", []) - for _query_value in ce_project_inventory: - machine_id: str = _query_value["id"] - replication_info: Dict[str, Any] = _query_value.get("replicationInfo", {}) - response_dict[machine_id] = { - "machine_name": _query_value.get("sourceProperties", {}).get("name", ""), - "in_inventory": _query_value["isAgentInstalled"], - "replication_status": _query_value["replicationStatus"], - "total_storage_bytes": replication_info.get("totalStorageBytes", -1), - "replicated_storage_bytes": replication_info.get("replicatedStorageBytes", -1), - "rescanned_storage_bytes": replication_info.get("rescannedStorageBytes", 0), - "backlogged_storage_bytes": replication_info.get("backloggedStorageBytes", -1), - } - if replication_info.get("lastSeenDateTime"): - response_dict[machine_id]["last_seen_utc"] = replication_info.get("lastSeenDateTime") - if replication_info.get("lastConsistencyDateTime"): - response_dict[machine_id]["last_consistency_utc"] = replication_info.get("lastConsistencyDateTime") - # Project is still printing to console as a convention; Emitting an - # output to stdout for interactive usage - return response_dict - - def inspect_ce_project(self, check_type: str) -> Dict[str, Any]: - valid_check_types: List[str] = ["not_synced", "not_started", "not_current", "is_lagged"] - if check_type not in valid_check_types: - print( - f'ERROR: Unknown check_type of "{check_type}"; Please use a valid check_type: [ {", ".join(valid_check_types)} ] ...' - ) - return - result: Dict[str, Any] = {} - sync_report: Dict[str, Any] = self.get_machine_sync_details() - print(f"INFO: Using check '{check_type}' on Project: ({self.project_name})") - if check_type in valid_check_types: - for item in sync_report.keys(): - mcheck = self._inspector(machine=sync_report[item], check_type=check_type) - if mcheck: - result[item] = sync_report[item] - print(f"INFO: Check '{check_type}' completed; {len(result)} machines matched in Project: ({self.project_name})") - return result - - def _inspector(self, **kwargs): - # this could probably be a switch but I'll just elif this - if "machine" in kwargs.keys(): - if "not_synced" in kwargs.values(): - return self._not_synced(machine=kwargs.get("machine")) - elif "not_started" in kwargs.values(): - return self._not_started(machine=kwargs.get("machine")) - else: - return self._time_delta_context( - machine=kwargs.get("machine", {}), check_type=kwargs.get("check_type", "") - ) - - def _not_synced(self, machine) -> bool: - if ( - machine["backlogged_storage_bytes"] > 0 - or machine["rescanned_storage_bytes"] > 0 - or machine["replicated_storage_bytes"] != machine["total_storage_bytes"] - ): - return True - else: - return False - - def _not_started(self, machine) -> bool: - if machine["replication_status"] == "STARTED": - return False - else: - return True - - def _time_delta_context(self, machine: Dict[str, Any], check_type: str) -> bool: - time_contexts: Dict[str, dict] = { - "not_current": {"delta_seconds": 86400, "property": "last_seen_utc"}, - "is_lagged": {"delta_seconds": 120, "property": "last_consistency_utc"}, - } - if machine.get(time_contexts[check_type].get("property")): - now: datetime = datetime.datetime.now(datetime.timezone.utc) - last_seen: datetime = datetime.datetime.fromisoformat(machine[time_contexts[check_type].get("property")]) - last_seen_delta: datetime = now - last_seen - if int(last_seen_delta.total_seconds()) >= time_contexts[check_type].get("delta_seconds"): - return True - return False - - def update_blueprint(self) -> bool: - """Update the blueprint associated with the specified machines.""" - print(f"Updating CloudEndure Blueprints - Name: ({self.project_name}) - Dry Run: ({self.dry_run})") - - machine_data_dict: Dict[str, Any] = {} - machines_response: Response = self.api.api_call(f"projects/{self.project_id}/machines") - for machine in json.loads(machines_response.text).get("items", []): - source_props: Dict[str, Any] = machine.get("sourceProperties", {}) - machine_id: str = machine.get("id") - machine_name: str = source_props.get("name", "").upper() - if machine_name in self.target_machines: - machine_data_dict[machine_id] = machine_name - - if not machine_data_dict: - print("No Machines Found!") - return False - try: - blueprints_response = self.api.api_call(f"projects/{self.project_id}/blueprints") - for blueprint in json.loads(blueprints_response.text).get("items", []): - _machine_id: str = blueprint.get("machineId", "") - _machine_name: str = machine_data_dict.get(_machine_id, "") - if not _machine_name: - continue - - _blueprint_id: str = blueprint.get("id", "") - _endpoint: str = f"projects/{self.project_id}/blueprints/{_blueprint_id}" - # Handle disk blueprints since we don't want provisioned IOPS $$$$ - new_disks = [] - for disk in blueprint["disks"]: - new_disks.append( - {"type": self.config.active_config.get("disk_type", "SSD"), "name": disk.get("name", ""),} - ) - blueprint["disks"] = new_disks - - if self.subnet_id: - # Update launch subnets and SG IDs - blueprint["subnetIDs"] = [self.subnet_id] - if self.private_ip_action: - blueprint["privateIPAction"] = self.private_ip_action - if self.security_group_id: - blueprint["securityGroupIDs"] = [self.security_group_id] - if self.iam_role: - blueprint["iamRole"] = self.iam_role - - instance_type = self.target_instances.get(_machine_name.upper(), "") - if instance_type: - blueprint["instanceType"] = instance_type - - # Update machine tags - blueprint["tags"] = [ - {"key": "CloneStatus", "value": self.config.active_config.get("clone_status", "NOT_STARTED"),}, - {"key": "MigrationWave", "value": self.migration_wave}, - {"key": "DestinationAccount", "value": self.destination_account}, - {"key": "DestinationKMS", "value": self.destination_kms}, - {"key": "DestinationRole", "value": self.destination_role}, - ] - - blueprint["publicIPAction"] = self.config.active_config.get("public_ip", "DONT_ALLOCATE") - - print(f"Updated blueprint for {_machine_name}") - pprint.pprint(blueprint) - - if self.dry_run: - print("This is a dry run! Not updating blueprints!") - return True - result: Response = self.api.api_call(_endpoint, method="patch", data=json.dumps(blueprint)) - - if result.status_code != 200: - print( - "Blueprint update failure encountered for machine:", - f"({_machine_name}) - {result.status_code} fix blueprint settings!", - ) - print(blueprint) - else: - print("Blueprint for machine: " + _machine_name + " updated!") - except Exception as e: - print(f"Updating blueprint task failed! {e}") - return False - return True - - def launch(self) -> Dict[str, Any]: - """Launch the test target instances.""" - response_dict: Dict[str, Any] = {} - - print(f"Launching Project - Name: ({self.project_name}) - Dry Run: ({self.dry_run})") - - if self.dry_run: - print("This is a dry run! Not launching any machines!") - return response_dict - - machines_response: Response = self.api.api_call(f"projects/{self.project_id}/machines") - for _machine in self.target_machines: - for machine in json.loads(machines_response.text).get("items", []): - source_props: Dict[str, Any] = machine.get("sourceProperties", {}) - machine_data: Dict[str, Any] = {} - ce_name = source_props.get("name", "NONE") - if _machine == ce_name.upper(): - if machine.get("replica"): - print("Target machine already launched") - self.event_handler.add_event(Event.EVENT_ALREADY_LAUNCHED, machine_name=_machine) - continue - machine_data = { - "items": [{"machineId": machine["id"]}], - "launchType": "TEST", - } - if machine_data: - result: Response = self.api.api_call( - f"projects/{self.project_id}/launchMachines", method="post", data=json.dumps(machine_data), - ) - if result.status_code == 202: - response_dict["original_id"] = source_props.get("machineCloudId", "NONE") - response_dict.update(json.loads(result.text)) - print("Test Job created for machine ", _machine) - self.event_handler.add_event(Event.EVENT_SUCCESSFULLY_LAUNCHED, machine_name=_machine) - elif result.status_code == 409: - print(f"ERROR: ({_machine}) is currently in progress!") - self.event_handler.add_event(Event.EVENT_IN_PROGRESS, machine_name=_machine) - elif result.status_code == 402: - print("ERROR: Project license has expired!") - self.event_handler.add_event(Event.EVENT_EXPIRED, machine_name=_machine) - else: - print("ERROR: Launch target machine failed!") - self.event_handler.add_event(Event.EVENT_FAILED, machine_name=_machine) - else: - # print(f"Machine: ({source_props['name']}) - Not a machine we want to launch...") - self.event_handler.add_event(Event.EVENT_IGNORED, machine_name=_machine) - return response_dict - - def status(self) -> bool: - """Get the status of machines in the current wave.""" - print(f"Getting Status of Project - Name: ({self.project_name}) - Dry Run: ({self.dry_run})") - - machine_status: int = 0 - machines_response: Response = self.api.api_call(f"projects/{self.project_name}/machines") - for _machine in self.target_machines: - machine_exist: bool = False - for machine in json.loads(machines_response.text).get("items", []): - source_props: Dict[str, Any] = machine.get("sourceProperties", {}) - ref_name: str = source_props.get("name") or source_props.get("machineCloudId", "NONE") - if ref_name == source_props.get("name", "NONE"): - machine_exist = True - # Check if replication is done - if "lastConsistencyDateTime" not in machine["replicationInfo"]: - print(f"ERROR: Machine: {ref_name} replication in progress") - return False - else: - # Check the replication lag between source and CE destination. - last_consistent_dt_1: int = int( - machine.get("replicationInfo", {}).get("lastConsistencyDateTime", "")[11:13] - ) - last_consistent_dt_2: int = int( - machine.get("replicationInfo", {}).get("lastConsistencyDateTime", "")[14:16] - ) - datetime_1: int = int(datetime.datetime.utcnow().isoformat()[11:13]) - datetime_2: int = int(datetime.datetime.utcnow().isoformat()[14:16]) - result: int = (datetime_1 - last_consistent_dt_1) * 60 + (datetime_2 - last_consistent_dt_2) - if result > self.max_lag_ttl: - print( - f"{ref_name} is currently lagging greater than {self.max_lag_ttl} minutes - ({result})" - ) - return False - else: - if self.dry_run: - machine_status += 1 - else: - # Check whether or not the target machine has already been tested. - _m_life_cycle: Dict[str, Any] = machine.get("lifeCycle", {}) - if ( - "lastTestLaunchDateTime" not in _m_life_cycle - and "lastCutoverDateTime" not in _m_life_cycle - ): - machine_status += 1 - else: - print(f"{ref_name} has already been tested - you can create AMIs now!") - return False - if not machine_exist: - print(f"ERROR: Machine: {_machine} does not exist!") - self.nonexistent_machines.append(_machine) - - if machine_status == len(self.target_machines): - print("All Machines in the targeted pool are ready!") - else: - print("ERROR: some machines in the targeted pool are not ready") - return False - return True - - def execute(self) -> bool: - """Start the migration project my checking and launching the migration wave.""" - print(f"Executing Project - Name: ({self.project_name}) - Dry Run: ({self.dry_run})") - - projects_result: Response = self.api.api_call("projects") - if projects_result.status_code != 200: - print("Failed to fetch the project!") - return False - - try: - # Get Machine List - machines_response: Response = self.api.api_call(f"projects/{self.project_id}/machines") - if "sourceProperties" not in machines_response.text: - print("Failed to fetch the machines!") - return False - - machine_data_dict: Dict[str, Any] = {} - for machine in json.loads(machines_response.text).get("items", []): - source_props = machine.get("sourceProperties", {}) - if not source_props: - print("No source properties found!") - continue - - ref_name = source_props.get("name") or source_props.get("machineCloudId", "NONE") - _machine_id: str = source_props.get("id", "") - print(f"Machine name: {ref_name}, Machine ID: {_machine_id}") - machine_data_dict[machine["id"]] = ref_name - - # Check Target Machines - print("Checking Target machines...") - self.status() - - # Launch Target machines - if not self.dry_run: - print("Launching target machines...") - self.launch() - except Exception as e: - print(str(e)) - return False - - def replication(self, action: str, machine_ids: str = "") -> bool: - """Handle replication actions.""" - print(f"{action.title()} Machine Replication: ({machine_ids})") - action: str = action.lower() - _machines: List[str] = machine_ids.split(",") - - if not _machines: - _machines = self.target_machines - print(f"No machines provided. Defaulting to project machines: ({_machines})") - - replication_data: Dict[str, Any] = {"machineId": _machines} - if action not in ["pause", "stop", "start"]: - return False - - replication_results: Response = self.api.api_call( - f"projects/{self.project_id}/{action}Replication", method="post", data=replication_data, - ) - - if replication_results.status_code != 200: - print( - f"Failed to update the machine(s) replication status to: ({action}) for ({machine_ids}): " - f"{replication_results.status_code} {replication_results.content}" - ) - print(replication_results.text) - return False - print("Project was updated successfully") - return True - - def share_image(self, image_id: str, image_name: str = "CloudEndureImage") -> bool: - """Share the generated AMIs to the provided destination account.""" - print("Loading EC2 client for region: ", AWS_REGION) - _ec2_res = boto3.resource("ec2", AWS_REGION) - - # Access the image that needs to be copied - image = _ec2_res.Image(image_id) - - try: - # Share the image with the destination account - image.modify_attribute( - ImageId=image.id, - Attribute="launchPermission", - OperationType="add", - LaunchPermission={"Add": [{"UserId": self.destination_account}]}, - ) - except Exception as e: - print(e) - return False - - # We have to now share the snapshots associated with the AMI so it can be copied - devices = image.block_device_mappings - for device in devices: - if "Ebs" in device: - snapshot_id: str = device["Ebs"]["SnapshotId"] - snapshot = _ec2_res.Snapshot(snapshot_id) - try: - snapshot.modify_attribute( - Attribute="createVolumePermission", - CreateVolumePermission={"Add": [{"UserId": self.destination_account}]}, - OperationType="add", - ) - except Exception as e: - print(e) - return False - print(f"AMI ID: ({image_id}) - Shared to: ({self.destination_account})") - return True - - def create_ami(self) -> Dict[str, str]: - """Create an AMI from the specified instances. - - Args: - project_name (str): The name of the CloudEndure project. - - Returns: - bool: Whether or not the AMI creation was successful. - - """ - amis = {} - if not self.project_id: - return amis - - try: - print("Loading EC2 client for region: ", AWS_REGION) - _ec2_client: boto_client = boto3.client("ec2", AWS_REGION) - - # Create an AMI from the migrated instance - image_creation_time: str = datetime.datetime.utcnow().strftime("%Y%m%d%H%M%S") - instances: Dict[str, Any] = _ec2_client.describe_instances( - Filters=[ - {"Name": "tag:MigrationWave", "Values": [self.migration_wave]}, - {"Name": "tag:CloneStatus", "Values": ["NOT_STARTED"]}, - ] - ) - - if not instances or not instances.get("Reservations", []): - print(f"No instances or reservations found for migration wave: {self.migration_wave}") - return amis - - for reservation in instances.get("Reservations", []): - for instance in reservation.get("Instances", []): - instance_id: str = instance.get("InstanceId", "") - ec2_image: Dict[str, Any] = _ec2_client.create_image( - InstanceId=instance_id, - Name=f"{instance_id}-{image_creation_time}", - Description=f"{self.project_name} - {self.project_id} - {instance_id} - {image_creation_time}", - NoReboot=True, - ) - _filters: List[Any] = [{"Name": "resource-id", "Values": [instance_id]}] - - # Tag the newly created AMI by getting the tags of the migrated instance to copy to the AMI. - ec2_tags: Dict[str, Any] = _ec2_client.describe_tags(Filters=_filters) - - name: str = instance_id - for tag in ec2_tags["Tags"]: - if tag["Key"] == "Name": - name = tag["Value"] - - _ec2_client.create_tags( - Resources=[ec2_image["ImageId"]], Tags=[{"Key": tag["Key"], "Value": tag["Value"]}], - ) - - _ec2_client.create_tags( - Resources=[instance_id], Tags=[{"Key": "CloneStatus", "Value": "IMAGE_CREATED"}], - ) - _ec2_client.delete_tags(Resources=[ec2_image["ImageId"]], Tags=[{"Key": "CloneStatus"}]) - - amis[name] = ec2_image["ImageId"] - print(f"Instance ID: ({instance_id}) - AMI ID: ({ec2_image})") - except ClientError as e: - print(str(e)) - return amis - return amis - - def copy_image(self, image_id: str) -> str: - """Copy a shared image to an account. - - Args: - image_id (str): The AWS AMI to be copied. - - Returns: - str: The copied AWS AMI ID. - - """ - credentials = self._get_role_credentials("CopyImage", self.destination_role) - - _ec2_client: boto_client = boto3.client( - "ec2", - region_name=AWS_REGION, - aws_access_key_id=credentials["AccessKeyId"], - aws_secret_access_key=credentials["SecretAccessKey"], - aws_session_token=credentials["SessionToken"], - ) - - print(f"Copying image {image_id} with KMS: {self.destination_kms}") - new_image: Dict[str, Any] = _ec2_client.copy_image( - SourceImageId=image_id, - SourceRegion=AWS_REGION, - Name=f"copied-{image_id}", - Encrypted=True, - KmsKeyId=self.destination_kms, - ) - - return new_image.get("ImageId", "") - - def split_image(self, image_id: str) -> Dict[str, Any]: - """Split the image into a root drive only AMI and a collection of snapshots. - - Args: - image_id (str): The AWS AMI to be copied. - - Returns: - dict: The mapping of AWS EBS block devices. - - """ - print(f"Loading EC2 resource for region: {AWS_REGION} using role: {self.destination_role}") - credentials = self._get_role_credentials("SplitImage", self.destination_role) - - _ec2_res: boto_client = boto3.resource( - "ec2", - region_name=AWS_REGION, - aws_access_key_id=credentials["AccessKeyId"], - aws_secret_access_key=credentials["SecretAccessKey"], - aws_session_token=credentials["SessionToken"], - ) - - # Access the image that needs to be split - image = _ec2_res.Image(image_id) - - root_drive: Dict[str, Any] = {} - drives: Dict[str, Any] = {} - - # separate the root drive from the other drives - devices: List[Any] = image.block_device_mappings - for device in devices: - if "Ebs" in device: - if device["DeviceName"] == image.root_device_name: - print(f"Found Root! {device}") - root_drive: Dict[str, Any] = device - else: - drives[device["DeviceName"]] = device["Ebs"] - - # have to remove the encrypted flag - del root_drive["Ebs"]["Encrypted"] - - # create a new AMI with only the root - response = _ec2_res.register_image( - Architecture=image.architecture, - BlockDeviceMappings=[root_drive], - Name=f"root-{image_id}", - RootDeviceName=image.root_device_name, - VirtualizationType=image.virtualization_type, - ) - - root_ami = response.id - - for drive in drives: - print(drives[drive]) - _ec2_res.create_tags( - Resources=[root_ami], Tags=[{"Key": f"Drive-{drive}", "Value": json.dumps(drives[drive])}], - ) - - # remove the old image - image.deregister() - - return root_ami - - def gen_terraform( - self, - image_id: str, - name: str = "INSTANCENAME", - subnet_id: str = "SUBNET_ID", - private_ip: str = "PRIVATE_IP", - keypair: str = "KEYPAIR", - security_group: str = "SECURITY_GROUP", - tagging_module: str = "tagging_module", - ) -> str: - """Generate Terraform for a given split image. - - Args: - image_id (str): The split AMI ID to be referenced. - name (str): The name of the instance to be generated. - subnet_id (str): The AWS VPC Subnet ID to be referenced. - private_id (str): The internal IP address to associate with the AWS ENI. - keypair (str): The AWS EC2 keypair name to be referenced. - security_group (str): The AWS security group ID to be referenced. - - Returns: - str: The raw Terraform with volume, ENI, and EC2 instance templates. - - """ - credentials = self._get_role_credentials("GenTerraform", self.destination_role) - - _ec2_res: boto_client = boto3.resource( - "ec2", - region_name=AWS_REGION, - aws_access_key_id=credentials["AccessKeyId"], - aws_secret_access_key=credentials["SecretAccessKey"], - aws_session_token=credentials["SessionToken"], - ) - - # Access the image - image: str = _ec2_res.Image(image_id) - base_template_data = { - "image_id": image_id, - "name": name, - "keypair": keypair, - "uppercase_name": name.upper(), - "subnet_id": subnet_id, - "private_ip": private_ip, - "security_group": security_group, - "tagging_module": tagging_module, - "region": AWS_REGION, - } - template: str = ( - TerraformTemplate.INSTANCE_TEMPLATE.format(**base_template_data) - + TerraformTemplate.NETWORK_TEMPLATE.format(**base_template_data) - ) - - # If image.tags is empty, boto3 returns NoneType. - if image.tags: - for tag in image.tags: - tag_key = tag.get("Key", "") - if not tag_key.startswith("Drive-"): - continue - - drive = tag_key[6:] - if not drive.startswith("/dev/sd"): - continue - - drive_info = json.loads(tag.get("Value", "{}")) - drive_name = drive.split("/")[-1] - - drive_template_data = { - **base_template_data, - "drive": drive, - "drive_name": drive_name, - "snapshot_id": drive_info.get("SnapshotId", ""), - "volume_size": drive_info.get("VolumeSize", "2"), - "volume_type": drive_info.get("VolumeType", "gp2"), - } - - drive_template = TerraformTemplate.VOLUME_TEMPLATE.format(**drive_template_data) - template = template + drive_template - return template - - def terminate(self) -> bool: - """Terminate the launched machine(s). - - Returns: - bool: Whether cleanup was successful. - - """ - machines_response: Response = self.api.api_call(f"projects/{self.project_id}/machines") - success = True - for _machine in self.target_machines: - for machine in json.loads(machines_response.text).get("items", []): - source_props: Dict[str, Any] = machine.get("sourceProperties", {}) - ref_name: str = source_props.get("name") or source_props.get("machineCloudId", "NONE") - if _machine == source_props.get("name", "NONE") or _machine == source_props.get( - "machineCloudId", "NONE" - ): - replica: str = machine.get("replica") - if replica: - print(f"{ref_name} has a launched machine: {replica}. Terminating.") - data_dict: Dict[str, Any] = {} - data_dict["replicaIDs"] = [replica] - - delete_response: Response = self.api.api_call( - path=f"projects/{self.project_id}/replicas", method="delete", data=json.dumps(data_dict), - ) - if delete_response.status_code != 202: - print( - f"Response code: {delete_response.status_code}\n" - f"{ref_name} replica {replica} did not terminate.\n{delete_response.text}" - ) - success = False - else: - print(f"Terminated {ref_name}\n{json.loads(delete_response.text)}") - else: - print(f"{ref_name} does not have a launched machine") - success = False - - return success - - def delete_image(self, image_id: str) -> bool: - """Remove the AMI and snapshots. - - Args: - image_id (str): The AWS AMI to be deleted. - - Returns: - bool: Whether the AMI deletion was requested successfully. - - """ - print("Loading EC2 resource for region: ", AWS_REGION) - _ec2_res = boto3.resource("ec2", AWS_REGION) - - try: - # Access the image that needs to be deleted - image = _ec2_res.Image(image_id) - - # grab device mappings before deregistering - devices: List[Any] = image.block_device_mappings - image.deregister() - for device in devices: - if "Ebs" in device: - snap = _ec2_res.Snapshot(device["Ebs"].get("SnapshotId")) - snap.delete() - except Exception as e: - print(f"Failed. AMI does not exist? {str(e)}") - return False - - return True - - -def main() -> None: - """Define the main entry method for the CLI.""" - # Run CloudEndure via the pipeline object for easy CLI access. - fire.Fire(CloudEndure) - - -if __name__ == "__main__": - main() diff --git a/cloudendure/cloudendure_api/__init__.py b/cloudendure/cloudendure_api/__init__.py deleted file mode 100644 index 70fd6f116..000000000 --- a/cloudendure/cloudendure_api/__init__.py +++ /dev/null @@ -1,239 +0,0 @@ -# coding: utf-8 - -# flake8: noqa -from __future__ import absolute_import - -# import apis into sdk package -from cloudendure.cloudendure_api.api.account_api import AccountApi -from cloudendure.cloudendure_api.api.actions_api import ActionsApi -from cloudendure.cloudendure_api.api.authentication_api import AuthenticationApi -from cloudendure.cloudendure_api.api.blueprint_api import BlueprintApi -from cloudendure.cloudendure_api.api.cloud_api import CloudApi -from cloudendure.cloudendure_api.api.cloud_credentials_api import CloudCredentialsApi -from cloudendure.cloudendure_api.api.default_api import DefaultApi -from cloudendure.cloudendure_api.api.licensing_api import LicensingApi -from cloudendure.cloudendure_api.api.machines_api import MachinesApi -from cloudendure.cloudendure_api.api.project_api import ProjectApi -from cloudendure.cloudendure_api.api.recovery_plans_api import RecoveryPlansApi -from cloudendure.cloudendure_api.api.replication_api import ReplicationApi -from cloudendure.cloudendure_api.api.user_api import UserApi - -# import ApiClient -from cloudendure.cloudendure_api.api_client import ApiClient -from cloudendure.cloudendure_api.configuration import Configuration - -# import models into sdk package -from cloudendure.cloudendure_api.models.cloud_endure_account import CloudEndureAccount -from cloudendure.cloudendure_api.models.cloud_endure_account_request import ( - CloudEndureAccountRequest, -) -from cloudendure.cloudendure_api.models.cloud_endure_account_request_list import ( - CloudEndureAccountRequestList, -) -from cloudendure.cloudendure_api.models.cloud_endure_accounts_list import ( - CloudEndureAccountsList, -) -from cloudendure.cloudendure_api.models.cloud_endure_agent_next_replication_init_request import ( - CloudEndureAgentNextReplicationInitRequest, -) -from cloudendure.cloudendure_api.models.cloud_endure_all_project_features import ( - CloudEndureAllProjectFeatures, -) -from cloudendure.cloudendure_api.models.cloud_endure_audit_log import ( - CloudEndureAuditLog, -) -from cloudendure.cloudendure_api.models.cloud_endure_audit_log_changed_field import ( - CloudEndureAuditLogChangedField, -) -from cloudendure.cloudendure_api.models.cloud_endure_audit_log_entry import ( - CloudEndureAuditLogEntry, -) -from cloudendure.cloudendure_api.models.cloud_endure_bandwidth_throttling import ( - CloudEndureBandwidthThrottling, -) -from cloudendure.cloudendure_api.models.cloud_endure_blueprint import ( - CloudEndureBlueprint, -) -from cloudendure.cloudendure_api.models.cloud_endure_blueprint_list import ( - CloudEndureBlueprintList, -) -from cloudendure.cloudendure_api.models.cloud_endure_cloud import CloudEndureCloud -from cloudendure.cloudendure_api.models.cloud_endure_cloud_credentials import ( - CloudEndureCloudCredentials, -) -from cloudendure.cloudendure_api.models.cloud_endure_cloud_credentials_list import ( - CloudEndureCloudCredentialsList, -) -from cloudendure.cloudendure_api.models.cloud_endure_cloud_credentials_request import ( - CloudEndureCloudCredentialsRequest, -) -from cloudendure.cloudendure_api.models.cloud_endure_clouds_list import ( - CloudEndureCloudsList, -) -from cloudendure.cloudendure_api.models.cloud_endure_compute_location import ( - CloudEndureComputeLocation, -) -from cloudendure.cloudendure_api.models.cloud_endure_configurations import ( - CloudEndureConfigurations, -) -from cloudendure.cloudendure_api.models.cloud_endure_configurations_list import ( - CloudEndureConfigurationsList, -) -from cloudendure.cloudendure_api.models.cloud_endure_error import CloudEndureError -from cloudendure.cloudendure_api.models.cloud_endure_extended_account_info import ( - CloudEndureExtendedAccountInfo, -) -from cloudendure.cloudendure_api.models.cloud_endure_find_files_parameters import ( - CloudEndureFindFilesParameters, -) -from cloudendure.cloudendure_api.models.cloud_endure_find_files_result import ( - CloudEndureFindFilesResult, -) -from cloudendure.cloudendure_api.models.cloud_endure_find_files_result_pit import ( - CloudEndureFindFilesResultPit, -) -from cloudendure.cloudendure_api.models.cloud_endure_find_files_results import ( - CloudEndureFindFilesResults, -) -from cloudendure.cloudendure_api.models.cloud_endure_gcp_machines_finance_data import ( - CloudEndureGcpMachinesFinanceData, -) -from cloudendure.cloudendure_api.models.cloud_endure_identity_provider_redirect_response import ( - CloudEndureIdentityProviderRedirectResponse, -) -from cloudendure.cloudendure_api.models.cloud_endure_initialization_step import ( - CloudEndureInitializationStep, -) -from cloudendure.cloudendure_api.models.cloud_endure_job import CloudEndureJob -from cloudendure.cloudendure_api.models.cloud_endure_jobs_list import ( - CloudEndureJobsList, -) -from cloudendure.cloudendure_api.models.cloud_endure_key_value_list import ( - CloudEndureKeyValueList, -) -from cloudendure.cloudendure_api.models.cloud_endure_launch_machines_parameters import ( - CloudEndureLaunchMachinesParameters, -) -from cloudendure.cloudendure_api.models.cloud_endure_license import CloudEndureLicense -from cloudendure.cloudendure_api.models.cloud_endure_license_features import ( - CloudEndureLicenseFeatures, -) -from cloudendure.cloudendure_api.models.cloud_endure_license_list import ( - CloudEndureLicenseList, -) -from cloudendure.cloudendure_api.models.cloud_endure_list_users_result import ( - CloudEndureListUsersResult, -) -from cloudendure.cloudendure_api.models.cloud_endure_list_users_results import ( - CloudEndureListUsersResults, -) -from cloudendure.cloudendure_api.models.cloud_endure_logical_location import ( - CloudEndureLogicalLocation, -) -from cloudendure.cloudendure_api.models.cloud_endure_machine import CloudEndureMachine -from cloudendure.cloudendure_api.models.cloud_endure_machine_and_path_and_point_in_time import ( - CloudEndureMachineAndPathAndPointInTime, -) -from cloudendure.cloudendure_api.models.cloud_endure_machine_and_point_in_time import ( - CloudEndureMachineAndPointInTime, -) -from cloudendure.cloudendure_api.models.cloud_endure_machine_replication_configuration import ( - CloudEndureMachineReplicationConfiguration, -) -from cloudendure.cloudendure_api.models.cloud_endure_machine_snapshot_credits import ( - CloudEndureMachineSnapshotCredits, -) -from cloudendure.cloudendure_api.models.cloud_endure_machine_throttle_time_seconds import ( - CloudEndureMachineThrottleTimeSeconds, -) -from cloudendure.cloudendure_api.models.cloud_endure_machines_list import ( - CloudEndureMachinesList, -) -from cloudendure.cloudendure_api.models.cloud_endure_machines_list_invalid_i_ds_and_job import ( - CloudEndureMachinesListInvalidIDsAndJob, -) -from cloudendure.cloudendure_api.models.cloud_endure_network_interface import ( - CloudEndureNetworkInterface, -) -from cloudendure.cloudendure_api.models.cloud_endure_point_in_time import ( - CloudEndurePointInTime, -) -from cloudendure.cloudendure_api.models.cloud_endure_point_in_time_list import ( - CloudEndurePointInTimeList, -) -from cloudendure.cloudendure_api.models.cloud_endure_project import CloudEndureProject -from cloudendure.cloudendure_api.models.cloud_endure_project_storage import ( - CloudEndureProjectStorage, -) -from cloudendure.cloudendure_api.models.cloud_endure_projects_and_users import ( - CloudEndureProjectsAndUsers, -) -from cloudendure.cloudendure_api.models.cloud_endure_projects_list import ( - CloudEndureProjectsList, -) -from cloudendure.cloudendure_api.models.cloud_endure_recovery_plan import ( - CloudEndureRecoveryPlan, -) -from cloudendure.cloudendure_api.models.cloud_endure_recovery_plan_list import ( - CloudEndureRecoveryPlanList, -) -from cloudendure.cloudendure_api.models.cloud_endure_recovery_plan_step import ( - CloudEndureRecoveryPlanStep, -) -from cloudendure.cloudendure_api.models.cloud_endure_recovery_plan_steps import ( - CloudEndureRecoveryPlanSteps, -) -from cloudendure.cloudendure_api.models.cloud_endure_region import CloudEndureRegion -from cloudendure.cloudendure_api.models.cloud_endure_regions_list import ( - CloudEndureRegionsList, -) -from cloudendure.cloudendure_api.models.cloud_endure_replica import CloudEndureReplica -from cloudendure.cloudendure_api.models.cloud_endure_replication_configuration import ( - CloudEndureReplicationConfiguration, -) -from cloudendure.cloudendure_api.models.cloud_endure_replication_configuration_list import ( - CloudEndureReplicationConfigurationList, -) -from cloudendure.cloudendure_api.models.cloud_endure_replication_server_config import ( - CloudEndureReplicationServerConfig, -) -from cloudendure.cloudendure_api.models.cloud_endure_restore_files_parameters import ( - CloudEndureRestoreFilesParameters, -) -from cloudendure.cloudendure_api.models.cloud_endure_saml_settings import ( - CloudEndureSamlSettings, -) -from cloudendure.cloudendure_api.models.cloud_endure_security_group import ( - CloudEndureSecurityGroup, -) -from cloudendure.cloudendure_api.models.cloud_endure_storage_location import ( - CloudEndureStorageLocation, -) -from cloudendure.cloudendure_api.models.cloud_endure_subnet import CloudEndureSubnet -from cloudendure.cloudendure_api.models.cloud_endure_time import CloudEndureTime -from cloudendure.cloudendure_api.models.cloud_endure_updateable_scripts import ( - CloudEndureUpdateableScripts, -) -from cloudendure.cloudendure_api.models.cloud_endure_upgrade_counter_delay import ( - CloudEndureUpgradeCounterDelay, -) -from cloudendure.cloudendure_api.models.cloud_endure_usage import CloudEndureUsage -from cloudendure.cloudendure_api.models.cloud_endure_usage_list import ( - CloudEndureUsageList, -) -from cloudendure.cloudendure_api.models.cloud_endure_user import CloudEndureUser -from cloudendure.cloudendure_api.models.cloud_endure_user_report import ( - CloudEndureUserReport, -) -from cloudendure.cloudendure_api.models.cloud_endure_user_reports import ( - CloudEndureUserReports, -) -from cloudendure.cloudendure_api.models.cloud_endure_users_and_roles import ( - CloudEndureUsersAndRoles, -) -from cloudendure.cloudendure_api.models.cloud_endure_users_list import ( - CloudEndureUsersList, -) -from cloudendure.cloudendure_api.models.cloud_endure_v_center_subnet import ( - CloudEndureVCenterSubnet, -) diff --git a/cloudendure/cloudendure_api/api/__init__.py b/cloudendure/cloudendure_api/api/__init__.py deleted file mode 100644 index 0f53826ec..000000000 --- a/cloudendure/cloudendure_api/api/__init__.py +++ /dev/null @@ -1,18 +0,0 @@ -from __future__ import absolute_import - -# import apis into api package -from cloudendure.cloudendure_api.api.account_api import AccountApi -from cloudendure.cloudendure_api.api.actions_api import ActionsApi -from cloudendure.cloudendure_api.api.authentication_api import AuthenticationApi -from cloudendure.cloudendure_api.api.blueprint_api import BlueprintApi -from cloudendure.cloudendure_api.api.cloud_api import CloudApi -from cloudendure.cloudendure_api.api.cloud_credentials_api import CloudCredentialsApi -from cloudendure.cloudendure_api.api.default_api import DefaultApi -from cloudendure.cloudendure_api.api.licensing_api import LicensingApi -from cloudendure.cloudendure_api.api.machines_api import MachinesApi -from cloudendure.cloudendure_api.api.project_api import ProjectApi -from cloudendure.cloudendure_api.api.recovery_plans_api import RecoveryPlansApi -from cloudendure.cloudendure_api.api.replication_api import ReplicationApi -from cloudendure.cloudendure_api.api.user_api import UserApi - -# flake8: noqa diff --git a/cloudendure/cloudendure_api/api/account_api.py b/cloudendure/cloudendure_api/api/account_api.py deleted file mode 100644 index b307715d5..000000000 --- a/cloudendure/cloudendure_api/api/account_api.py +++ /dev/null @@ -1,136 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import re # noqa: F401 - -# python 2 and python 3 compatibility library -import six - -from cloudendure.cloudendure_api.api_client import ApiClient - - -class AccountApi: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - Ref: https://github.com/swagger-api/swagger-codegen - """ - - def __init__(self, api_client=None): - if api_client is None: - api_client = ApiClient() - self.api_client = api_client - - def accounts_account_id_get(self, account_id, **kwargs): # noqa: E501 - """Get Account information. - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.accounts_account_id_get(account_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str account_id: (required) - :return: CloudEndureAccount - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.accounts_account_id_get_with_http_info( - account_id, **kwargs - ) # noqa: E501 - else: - (data) = self.accounts_account_id_get_with_http_info( - account_id, **kwargs - ) # noqa: E501 - return data - - def accounts_account_id_get_with_http_info( - self, account_id, **kwargs - ): # noqa: E501 - """Get Account information # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.accounts_account_id_get_with_http_info(account_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str account_id: (required) - :return: CloudEndureAccount - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["account_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method accounts_account_id_get" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'account_id' is set - if "account_id" not in params or params["account_id"] is None: - raise ValueError( - "Missing the required parameter `account_id` when calling `accounts_account_id_get`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "account_id" in params: - path_params["accountId"] = params["account_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/accounts/{accountId}", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureAccount", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) diff --git a/cloudendure/cloudendure_api/api/actions_api.py b/cloudendure/cloudendure_api/api/actions_api.py deleted file mode 100644 index 60d6379c3..000000000 --- a/cloudendure/cloudendure_api/api/actions_api.py +++ /dev/null @@ -1,1470 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import re # noqa: F401 - -# python 2 and python 3 compatibility library -import six - -from cloudendure.cloudendure_api.api_client import ApiClient - - -class ActionsApi: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - Ref: https://github.com/swagger-api/swagger-codegen - """ - - def __init__(self, api_client=None): - if api_client is None: - api_client = ApiClient() - self.api_client = api_client - - def projects_project_id_find_files_post( - self, body, project_id, **kwargs - ): # noqa: E501 - """Search for files in a backup project # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_find_files_post(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureFindFilesParameters body: The query string and the machine id's to use it in (required) - :param str project_id: (required) - :return: CloudEndureFindFilesResults - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_find_files_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_find_files_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_find_files_post_with_http_info( - self, body, project_id, **kwargs - ): # noqa: E501 - """Search for files in a backup project # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_find_files_post_with_http_info(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureFindFilesParameters body: The query string and the machine id's to use it in (required) - :param str project_id: (required) - :return: CloudEndureFindFilesResults - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body", "project_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_find_files_post" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_project_id_find_files_post`" - ) # noqa: E501 - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_find_files_post`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/findFiles", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureFindFilesResults", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_jobs_get(self, project_id, **kwargs): # noqa: E501 - """List Jobs # noqa: E501 - - Returns the list of jobs in the project. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_jobs_get(project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param int offset: With which item to start (0 based). - :param int limit: A number specifying how many entries to return. - :return: CloudEndureJobsList - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_jobs_get_with_http_info( - project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_jobs_get_with_http_info( - project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_jobs_get_with_http_info( - self, project_id, **kwargs - ): # noqa: E501 - """List Jobs # noqa: E501 - - Returns the list of jobs in the project. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_jobs_get_with_http_info(project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param int offset: With which item to start (0 based). - :param int limit: A number specifying how many entries to return. - :return: CloudEndureJobsList - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["project_id", "offset", "limit"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_jobs_get" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_jobs_get`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - if "offset" in params: - query_params.append(("offset", params["offset"])) # noqa: E501 - if "limit" in params: - query_params.append(("limit", params["limit"])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/jobs", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureJobsList", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_jobs_job_id_get( - self, project_id, job_id, **kwargs - ): # noqa: E501 - """Get Job # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_jobs_job_id_get(project_id, job_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param str job_id: (required) - :return: CloudEndureJob - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_jobs_job_id_get_with_http_info( - project_id, job_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_jobs_job_id_get_with_http_info( - project_id, job_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_jobs_job_id_get_with_http_info( - self, project_id, job_id, **kwargs - ): # noqa: E501 - """Get Job # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_jobs_job_id_get_with_http_info(project_id, job_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param str job_id: (required) - :return: CloudEndureJob - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["project_id", "job_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_jobs_job_id_get" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_jobs_job_id_get`" - ) # noqa: E501 - # verify the required parameter 'job_id' is set - if "job_id" not in params or params["job_id"] is None: - raise ValueError( - "Missing the required parameter `job_id` when calling `projects_project_id_jobs_job_id_get`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - if "job_id" in params: - path_params["jobId"] = params["job_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/jobs/{jobId}", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureJob", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_launch_machines_post( - self, body, project_id, **kwargs - ): # noqa: E501 - """Launch target machines # noqa: E501 - - Launch target machines for test, recovery or cutover (by passing enum value to launchType param) # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_launch_machines_post(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureLaunchMachinesParameters body: Machines to launch (required) - :param str project_id: (required) - :return: CloudEndureJob - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_launch_machines_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_launch_machines_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_launch_machines_post_with_http_info( - self, body, project_id, **kwargs - ): # noqa: E501 - """Launch target machines # noqa: E501 - - Launch target machines for test, recovery or cutover (by passing enum value to launchType param) # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_launch_machines_post_with_http_info(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureLaunchMachinesParameters body: Machines to launch (required) - :param str project_id: (required) - :return: CloudEndureJob - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body", "project_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_launch_machines_post" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_project_id_launch_machines_post`" - ) # noqa: E501 - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_launch_machines_post`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/launchMachines", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureJob", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_launch_restore_servers_post( - self, body, project_id, **kwargs - ): # noqa: E501 - """Launch restore servers @todo # noqa: E501 - - todo # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_launch_restore_servers_post(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureLaunchMachinesParameters body: todo (required) - :param str project_id: (required) - :return: CloudEndureJob - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_launch_restore_servers_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - else: - ( - data - ) = self.projects_project_id_launch_restore_servers_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_launch_restore_servers_post_with_http_info( - self, body, project_id, **kwargs - ): # noqa: E501 - """Launch restore servers @todo # noqa: E501 - - todo # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_launch_restore_servers_post_with_http_info(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureLaunchMachinesParameters body: todo (required) - :param str project_id: (required) - :return: CloudEndureJob - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body", "project_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_launch_restore_servers_post" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_project_id_launch_restore_servers_post`" - ) # noqa: E501 - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_launch_restore_servers_post`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/launchRestoreServers", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureJob", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_move_machines_post( - self, body, project_id, **kwargs - ): # noqa: E501 - """Moves machines to another project # noqa: E501 - - TBC # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_move_machines_post(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param object body: (required) - :param str project_id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_move_machines_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_move_machines_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_move_machines_post_with_http_info( - self, body, project_id, **kwargs - ): # noqa: E501 - """Moves machines to another project # noqa: E501 - - TBC # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_move_machines_post_with_http_info(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param object body: (required) - :param str project_id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body", "project_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_move_machines_post" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_project_id_move_machines_post`" - ) # noqa: E501 - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_move_machines_post`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/moveMachines", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_pause_replication_post( - self, body, project_id, **kwargs - ): # noqa: E501 - """Pause replication # noqa: E501 - - Pause replication for given machines # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_pause_replication_post(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param object body: The machine IDs for which to pause replication. (required) - :param str project_id: (required) - :return: CloudEndureMachinesListInvalidIDsAndJob - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_pause_replication_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_pause_replication_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_pause_replication_post_with_http_info( - self, body, project_id, **kwargs - ): # noqa: E501 - """Pause replication # noqa: E501 - - Pause replication for given machines # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_pause_replication_post_with_http_info(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param object body: The machine IDs for which to pause replication. (required) - :param str project_id: (required) - :return: CloudEndureMachinesListInvalidIDsAndJob - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body", "project_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_pause_replication_post" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_project_id_pause_replication_post`" - ) # noqa: E501 - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_pause_replication_post`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/pauseReplication", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureMachinesListInvalidIDsAndJob", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_replicas_delete( - self, body, project_id, **kwargs - ): # noqa: E501 - """Perform Cleanup # noqa: E501 - - Spawns a cleanup job to remove the specified target machines from the cloud. Returns the job information. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_replicas_delete(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param object body: The list of replica IDs to delete (corresponding to the 'replica' field in the machine object. (required) - :param str project_id: (required) - :return: CloudEndureJob - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_replicas_delete_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_replicas_delete_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_replicas_delete_with_http_info( - self, body, project_id, **kwargs - ): # noqa: E501 - """Perform Cleanup # noqa: E501 - - Spawns a cleanup job to remove the specified target machines from the cloud. Returns the job information. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_replicas_delete_with_http_info(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param object body: The list of replica IDs to delete (corresponding to the 'replica' field in the machine object. (required) - :param str project_id: (required) - :return: CloudEndureJob - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body", "project_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_replicas_delete" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_project_id_replicas_delete`" - ) # noqa: E501 - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_replicas_delete`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/replicas", - "DELETE", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureJob", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_restore_files_post( - self, body, project_id, **kwargs - ): # noqa: E501 - """Restore selected files in a backup project # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_restore_files_post(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureRestoreFilesParameters body: A list of file origins, each origin includes file path, machine id, and pit id. (required) - :param str project_id: (required) - :return: CloudEndureJob - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_restore_files_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_restore_files_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_restore_files_post_with_http_info( - self, body, project_id, **kwargs - ): # noqa: E501 - """Restore selected files in a backup project # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_restore_files_post_with_http_info(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureRestoreFilesParameters body: A list of file origins, each origin includes file path, machine id, and pit id. (required) - :param str project_id: (required) - :return: CloudEndureJob - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body", "project_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_restore_files_post" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_project_id_restore_files_post`" - ) # noqa: E501 - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_restore_files_post`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/restoreFiles", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureJob", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_reverse_replication_post( - self, project_id, **kwargs - ): # noqa: E501 - """Reverse replication direction # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_reverse_replication_post(project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_reverse_replication_post_with_http_info( - project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_reverse_replication_post_with_http_info( - project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_reverse_replication_post_with_http_info( - self, project_id, **kwargs - ): # noqa: E501 - """Reverse replication direction # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_reverse_replication_post_with_http_info(project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["project_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_reverse_replication_post" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_reverse_replication_post`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/reverseReplication", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_start_replication_post( - self, body, project_id, **kwargs - ): # noqa: E501 - """Start replication # noqa: E501 - - Start replication of the specified source machines. Returns the machine for which replication has been successfully started, and the IDs for which replication could not be started. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_start_replication_post(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param object body: Specification of the machines for which replication will start. (required) - :param str project_id: (required) - :return: CloudEndureMachinesListInvalidIDsAndJob - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_start_replication_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_start_replication_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_start_replication_post_with_http_info( - self, body, project_id, **kwargs - ): # noqa: E501 - """Start replication # noqa: E501 - - Start replication of the specified source machines. Returns the machine for which replication has been successfully started, and the IDs for which replication could not be started. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_start_replication_post_with_http_info(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param object body: Specification of the machines for which replication will start. (required) - :param str project_id: (required) - :return: CloudEndureMachinesListInvalidIDsAndJob - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body", "project_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_start_replication_post" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_project_id_start_replication_post`" - ) # noqa: E501 - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_start_replication_post`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/startReplication", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureMachinesListInvalidIDsAndJob", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_stop_replication_post( - self, body, project_id, **kwargs - ): # noqa: E501 - """Stop replication # noqa: E501 - - Stop replication of the specified source machines. Returns the machine for which replication has been successfully stopped, and the IDs for which replication could not be stopped. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_stop_replication_post(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param object body: Specification of the machines for which replication will stop. (required) - :param str project_id: (required) - :return: CloudEndureMachinesListInvalidIDsAndJob - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_stop_replication_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_stop_replication_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_stop_replication_post_with_http_info( - self, body, project_id, **kwargs - ): # noqa: E501 - """Stop replication # noqa: E501 - - Stop replication of the specified source machines. Returns the machine for which replication has been successfully stopped, and the IDs for which replication could not be stopped. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_stop_replication_post_with_http_info(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param object body: Specification of the machines for which replication will stop. (required) - :param str project_id: (required) - :return: CloudEndureMachinesListInvalidIDsAndJob - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body", "project_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_stop_replication_post" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_project_id_stop_replication_post`" - ) # noqa: E501 - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_stop_replication_post`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/stopReplication", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureMachinesListInvalidIDsAndJob", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) diff --git a/cloudendure/cloudendure_api/api/authentication_api.py b/cloudendure/cloudendure_api/api/authentication_api.py deleted file mode 100644 index 093d5a647..000000000 --- a/cloudendure/cloudendure_api/api/authentication_api.py +++ /dev/null @@ -1,224 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import re # noqa: F401 - -# python 2 and python 3 compatibility library -import six - -from cloudendure.cloudendure_api.api_client import ApiClient - - -class AuthenticationApi: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - Ref: https://github.com/swagger-api/swagger-codegen - """ - - def __init__(self, api_client=None): - if api_client is None: - api_client = ApiClient() - self.api_client = api_client - - def login_post(self, body, **kwargs): # noqa: E501 - """Login # noqa: E501 - - @todo: fix re use of XSRF-TOKEN cookie + X-XSRF-TOKEN header Upon successful authentication, this method returns a session identifier cookie that can be used to authenticate subsequent API calls. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.login_post(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param object body: Login info (required) - :return: CloudEndureUser - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.login_post_with_http_info(body, **kwargs) # noqa: E501 - else: - (data) = self.login_post_with_http_info(body, **kwargs) # noqa: E501 - return data - - def login_post_with_http_info(self, body, **kwargs): # noqa: E501 - """Login # noqa: E501 - - @todo: fix re use of XSRF-TOKEN cookie + X-XSRF-TOKEN header Upon successful authentication, this method returns a session identifier cookie that can be used to authenticate subsequent API calls. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.login_post_with_http_info(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param object body: Login info (required) - :return: CloudEndureUser - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method login_post" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `login_post`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/login", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureUser", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def logout_post(self, **kwargs): # noqa: E501 - """Logout # noqa: E501 - - Invalidates the session identifier associated with this session. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.logout_post(async_req=True) - >>> result = thread.get() - - :param async_req bool - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.logout_post_with_http_info(**kwargs) # noqa: E501 - else: - (data) = self.logout_post_with_http_info(**kwargs) # noqa: E501 - return data - - def logout_post_with_http_info(self, **kwargs): # noqa: E501 - """Logout # noqa: E501 - - Invalidates the session identifier associated with this session. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.logout_post_with_http_info(async_req=True) - >>> result = thread.get() - - :param async_req bool - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = [] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method logout_post" % key - ) - params[key] = val - del params["kwargs"] - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/logout", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) diff --git a/cloudendure/cloudendure_api/api/blueprint_api.py b/cloudendure/cloudendure_api/api/blueprint_api.py deleted file mode 100644 index 004b01513..000000000 --- a/cloudendure/cloudendure_api/api/blueprint_api.py +++ /dev/null @@ -1,519 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import re # noqa: F401 - -# python 2 and python 3 compatibility library -import six - -from cloudendure.cloudendure_api.api_client import ApiClient - - -class BlueprintApi: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - Ref: https://github.com/swagger-api/swagger-codegen - """ - - def __init__(self, api_client=None): - if api_client is None: - api_client = ApiClient() - self.api_client = api_client - - def projects_project_id_blueprints_blueprint_id_get( - self, project_id, blueprint_id, **kwargs - ): # noqa: E501 - """Get Blueprint # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_blueprints_blueprint_id_get(project_id, blueprint_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param str blueprint_id: (required) - :return: CloudEndureBlueprint - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_blueprints_blueprint_id_get_with_http_info( - project_id, blueprint_id, **kwargs - ) # noqa: E501 - else: - ( - data - ) = self.projects_project_id_blueprints_blueprint_id_get_with_http_info( - project_id, blueprint_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_blueprints_blueprint_id_get_with_http_info( - self, project_id, blueprint_id, **kwargs - ): # noqa: E501 - """Get Blueprint # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_blueprints_blueprint_id_get_with_http_info(project_id, blueprint_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param str blueprint_id: (required) - :return: CloudEndureBlueprint - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["project_id", "blueprint_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_blueprints_blueprint_id_get" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_blueprints_blueprint_id_get`" - ) # noqa: E501 - # verify the required parameter 'blueprint_id' is set - if "blueprint_id" not in params or params["blueprint_id"] is None: - raise ValueError( - "Missing the required parameter `blueprint_id` when calling `projects_project_id_blueprints_blueprint_id_get`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - if "blueprint_id" in params: - path_params["blueprintId"] = params["blueprint_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/blueprints/{blueprintId}", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureBlueprint", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_blueprints_blueprint_id_patch( - self, body, project_id, blueprint_id, **kwargs - ): # noqa: E501 - """Configure Blueprint # noqa: E501 - - Configure target machine characteristics: machine and disk types, network configuration, etc. Returns the modified object. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_blueprints_blueprint_id_patch(body, project_id, blueprint_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureBlueprint body: (required) - :param str project_id: (required) - :param str blueprint_id: (required) - :return: CloudEndureBlueprint - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_blueprints_blueprint_id_patch_with_http_info( - body, project_id, blueprint_id, **kwargs - ) # noqa: E501 - else: - ( - data - ) = self.projects_project_id_blueprints_blueprint_id_patch_with_http_info( - body, project_id, blueprint_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_blueprints_blueprint_id_patch_with_http_info( - self, body, project_id, blueprint_id, **kwargs - ): # noqa: E501 - """Configure Blueprint # noqa: E501 - - Configure target machine characteristics: machine and disk types, network configuration, etc. Returns the modified object. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_blueprints_blueprint_id_patch_with_http_info(body, project_id, blueprint_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureBlueprint body: (required) - :param str project_id: (required) - :param str blueprint_id: (required) - :return: CloudEndureBlueprint - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body", "project_id", "blueprint_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_blueprints_blueprint_id_patch" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_project_id_blueprints_blueprint_id_patch`" - ) # noqa: E501 - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_blueprints_blueprint_id_patch`" - ) # noqa: E501 - # verify the required parameter 'blueprint_id' is set - if "blueprint_id" not in params or params["blueprint_id"] is None: - raise ValueError( - "Missing the required parameter `blueprint_id` when calling `projects_project_id_blueprints_blueprint_id_patch`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - if "blueprint_id" in params: - path_params["blueprintId"] = params["blueprint_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/blueprints/{blueprintId}", - "PATCH", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureBlueprint", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_blueprints_get(self, project_id, **kwargs): # noqa: E501 - """List Blueprints # noqa: E501 - - Returns the list of available blueprints in the project. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_blueprints_get(project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param int offset: With which item to start (0 based). - :param int limit: A number specifying how many entries to return. - :return: CloudEndureBlueprintList - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_blueprints_get_with_http_info( - project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_blueprints_get_with_http_info( - project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_blueprints_get_with_http_info( - self, project_id, **kwargs - ): # noqa: E501 - """List Blueprints # noqa: E501 - - Returns the list of available blueprints in the project. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_blueprints_get_with_http_info(project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param int offset: With which item to start (0 based). - :param int limit: A number specifying how many entries to return. - :return: CloudEndureBlueprintList - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["project_id", "offset", "limit"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_blueprints_get" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_blueprints_get`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - if "offset" in params: - query_params.append(("offset", params["offset"])) # noqa: E501 - if "limit" in params: - query_params.append(("limit", params["limit"])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/blueprints", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureBlueprintList", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_blueprints_post( - self, body, project_id, **kwargs - ): # noqa: E501 - """Create Blueprint # noqa: E501 - - Define the target machine characteristics: machine and disk types, network configuration, etc. There can be only one blueprint per machine per region. Returns the newly created object. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_blueprints_post(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureBlueprint body: (required) - :param str project_id: (required) - :return: CloudEndureBlueprint - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_blueprints_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_blueprints_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_blueprints_post_with_http_info( - self, body, project_id, **kwargs - ): # noqa: E501 - """Create Blueprint # noqa: E501 - - Define the target machine characteristics: machine and disk types, network configuration, etc. There can be only one blueprint per machine per region. Returns the newly created object. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_blueprints_post_with_http_info(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureBlueprint body: (required) - :param str project_id: (required) - :return: CloudEndureBlueprint - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body", "project_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_blueprints_post" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_project_id_blueprints_post`" - ) # noqa: E501 - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_blueprints_post`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/blueprints", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureBlueprint", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) diff --git a/cloudendure/cloudendure_api/api/cloud_api.py b/cloudendure/cloudendure_api/api/cloud_api.py deleted file mode 100644 index f88db24e5..000000000 --- a/cloudendure/cloudendure_api/api/cloud_api.py +++ /dev/null @@ -1,605 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import re # noqa: F401 - -# python 2 and python 3 compatibility library -import six - -from cloudendure.cloudendure_api.api_client import ApiClient - - -class CloudApi: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - Ref: https://github.com/swagger-api/swagger-codegen - """ - - def __init__(self, api_client=None): - if api_client is None: - api_client = ApiClient() - self.api_client = api_client - - def cloud_credentials_creds_id_regions_get(self, creds_id, **kwargs): # noqa: E501 - """List Regions # noqa: E501 - - Returns the list of regions these credentials provide access to. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.cloud_credentials_creds_id_regions_get(creds_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str creds_id: UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". (required) - :param int offset: With which item to start (0 based). - :param int limit: A number specifying how many entries to return. - :return: CloudEndureRegionsList - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.cloud_credentials_creds_id_regions_get_with_http_info( - creds_id, **kwargs - ) # noqa: E501 - else: - (data) = self.cloud_credentials_creds_id_regions_get_with_http_info( - creds_id, **kwargs - ) # noqa: E501 - return data - - def cloud_credentials_creds_id_regions_get_with_http_info( - self, creds_id, **kwargs - ): # noqa: E501 - """List Regions # noqa: E501 - - Returns the list of regions these credentials provide access to. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.cloud_credentials_creds_id_regions_get_with_http_info(creds_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str creds_id: UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". (required) - :param int offset: With which item to start (0 based). - :param int limit: A number specifying how many entries to return. - :return: CloudEndureRegionsList - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["creds_id", "offset", "limit"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method cloud_credentials_creds_id_regions_get" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'creds_id' is set - if "creds_id" not in params or params["creds_id"] is None: - raise ValueError( - "Missing the required parameter `creds_id` when calling `cloud_credentials_creds_id_regions_get`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "creds_id" in params: - path_params["credsId"] = params["creds_id"] # noqa: E501 - - query_params = [] - if "offset" in params: - query_params.append(("offset", params["offset"])) # noqa: E501 - if "limit" in params: - query_params.append(("limit", params["limit"])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/cloudCredentials/{credsId}/regions", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureRegionsList", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def cloud_credentials_creds_id_regions_region_id_delete( - self, creds_id, region_id, **kwargs - ): # noqa: E501 - """Delete region (VCenter) # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.cloud_credentials_creds_id_regions_region_id_delete(creds_id, region_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str creds_id: UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". (required) - :param str region_id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.cloud_credentials_creds_id_regions_region_id_delete_with_http_info( - creds_id, region_id, **kwargs - ) # noqa: E501 - else: - ( - data - ) = self.cloud_credentials_creds_id_regions_region_id_delete_with_http_info( - creds_id, region_id, **kwargs - ) # noqa: E501 - return data - - def cloud_credentials_creds_id_regions_region_id_delete_with_http_info( - self, creds_id, region_id, **kwargs - ): # noqa: E501 - """Delete region (VCenter) # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.cloud_credentials_creds_id_regions_region_id_delete_with_http_info(creds_id, region_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str creds_id: UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". (required) - :param str region_id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["creds_id", "region_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method cloud_credentials_creds_id_regions_region_id_delete" - % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'creds_id' is set - if "creds_id" not in params or params["creds_id"] is None: - raise ValueError( - "Missing the required parameter `creds_id` when calling `cloud_credentials_creds_id_regions_region_id_delete`" - ) # noqa: E501 - # verify the required parameter 'region_id' is set - if "region_id" not in params or params["region_id"] is None: - raise ValueError( - "Missing the required parameter `region_id` when calling `cloud_credentials_creds_id_regions_region_id_delete`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "creds_id" in params: - path_params["credsId"] = params["creds_id"] # noqa: E501 - if "region_id" in params: - path_params["regionId"] = params["region_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/cloudCredentials/{credsId}/regions/{regionId}", - "DELETE", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def cloud_credentials_creds_id_regions_region_id_get( - self, creds_id, region_id, **kwargs - ): # noqa: E501 - """Get Region # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.cloud_credentials_creds_id_regions_region_id_get(creds_id, region_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str creds_id: UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". (required) - :param str region_id: (required) - :return: CloudEndureRegion - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.cloud_credentials_creds_id_regions_region_id_get_with_http_info( - creds_id, region_id, **kwargs - ) # noqa: E501 - else: - ( - data - ) = self.cloud_credentials_creds_id_regions_region_id_get_with_http_info( - creds_id, region_id, **kwargs - ) # noqa: E501 - return data - - def cloud_credentials_creds_id_regions_region_id_get_with_http_info( - self, creds_id, region_id, **kwargs - ): # noqa: E501 - """Get Region # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.cloud_credentials_creds_id_regions_region_id_get_with_http_info(creds_id, region_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str creds_id: UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". (required) - :param str region_id: (required) - :return: CloudEndureRegion - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["creds_id", "region_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method cloud_credentials_creds_id_regions_region_id_get" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'creds_id' is set - if "creds_id" not in params or params["creds_id"] is None: - raise ValueError( - "Missing the required parameter `creds_id` when calling `cloud_credentials_creds_id_regions_region_id_get`" - ) # noqa: E501 - # verify the required parameter 'region_id' is set - if "region_id" not in params or params["region_id"] is None: - raise ValueError( - "Missing the required parameter `region_id` when calling `cloud_credentials_creds_id_regions_region_id_get`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "creds_id" in params: - path_params["credsId"] = params["creds_id"] # noqa: E501 - if "region_id" in params: - path_params["regionId"] = params["region_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/cloudCredentials/{credsId}/regions/{regionId}", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureRegion", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def cloud_credentials_creds_id_regions_region_id_patch( - self, body, creds_id, region_id, **kwargs - ): # noqa: E501 - """Patch region (rename) # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.cloud_credentials_creds_id_regions_region_id_patch(body, creds_id, region_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureRegion body: (required) - :param str creds_id: UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". (required) - :param str region_id: (required) - :return: CloudEndureRegion - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.cloud_credentials_creds_id_regions_region_id_patch_with_http_info( - body, creds_id, region_id, **kwargs - ) # noqa: E501 - else: - ( - data - ) = self.cloud_credentials_creds_id_regions_region_id_patch_with_http_info( - body, creds_id, region_id, **kwargs - ) # noqa: E501 - return data - - def cloud_credentials_creds_id_regions_region_id_patch_with_http_info( - self, body, creds_id, region_id, **kwargs - ): # noqa: E501 - """Patch region (rename) # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.cloud_credentials_creds_id_regions_region_id_patch_with_http_info(body, creds_id, region_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureRegion body: (required) - :param str creds_id: UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". (required) - :param str region_id: (required) - :return: CloudEndureRegion - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body", "creds_id", "region_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method cloud_credentials_creds_id_regions_region_id_patch" - % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `cloud_credentials_creds_id_regions_region_id_patch`" - ) # noqa: E501 - # verify the required parameter 'creds_id' is set - if "creds_id" not in params or params["creds_id"] is None: - raise ValueError( - "Missing the required parameter `creds_id` when calling `cloud_credentials_creds_id_regions_region_id_patch`" - ) # noqa: E501 - # verify the required parameter 'region_id' is set - if "region_id" not in params or params["region_id"] is None: - raise ValueError( - "Missing the required parameter `region_id` when calling `cloud_credentials_creds_id_regions_region_id_patch`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "creds_id" in params: - path_params["credsId"] = params["creds_id"] # noqa: E501 - if "region_id" in params: - path_params["regionId"] = params["region_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/cloudCredentials/{credsId}/regions/{regionId}", - "PATCH", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureRegion", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def clouds_get(self, **kwargs): # noqa: E501 - """List Clouds # noqa: E501 - - Returns a list of clouds that can be used with CloudEndure. The roles array determines whether this cloud can be used as source, target, or both. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.clouds_get(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param int offset: With which item to start (0 based). - :param int limit: A number specifying how many entries to return. - :return: CloudEndureCloudsList - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.clouds_get_with_http_info(**kwargs) # noqa: E501 - else: - (data) = self.clouds_get_with_http_info(**kwargs) # noqa: E501 - return data - - def clouds_get_with_http_info(self, **kwargs): # noqa: E501 - """List Clouds # noqa: E501 - - Returns a list of clouds that can be used with CloudEndure. The roles array determines whether this cloud can be used as source, target, or both. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.clouds_get_with_http_info(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param int offset: With which item to start (0 based). - :param int limit: A number specifying how many entries to return. - :return: CloudEndureCloudsList - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["offset", "limit"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method clouds_get" % key - ) - params[key] = val - del params["kwargs"] - - collection_formats = {} - - path_params = {} - - query_params = [] - if "offset" in params: - query_params.append(("offset", params["offset"])) # noqa: E501 - if "limit" in params: - query_params.append(("limit", params["limit"])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/clouds", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureCloudsList", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) diff --git a/cloudendure/cloudendure_api/api/cloud_credentials_api.py b/cloudendure/cloudendure_api/api/cloud_credentials_api.py deleted file mode 100644 index 83fb8881e..000000000 --- a/cloudendure/cloudendure_api/api/cloud_credentials_api.py +++ /dev/null @@ -1,465 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import re # noqa: F401 - -# python 2 and python 3 compatibility library -import six - -from cloudendure.cloudendure_api.api_client import ApiClient - - -class CloudCredentialsApi: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - Ref: https://github.com/swagger-api/swagger-codegen - """ - - def __init__(self, api_client=None): - if api_client is None: - api_client = ApiClient() - self.api_client = api_client - - def cloud_credentials_creds_id_get(self, creds_id, **kwargs): # noqa: E501 - """Get Credentials # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.cloud_credentials_creds_id_get(creds_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str creds_id: UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". (required) - :return: CloudEndureCloudCredentials - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.cloud_credentials_creds_id_get_with_http_info( - creds_id, **kwargs - ) # noqa: E501 - else: - (data) = self.cloud_credentials_creds_id_get_with_http_info( - creds_id, **kwargs - ) # noqa: E501 - return data - - def cloud_credentials_creds_id_get_with_http_info( - self, creds_id, **kwargs - ): # noqa: E501 - """Get Credentials # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.cloud_credentials_creds_id_get_with_http_info(creds_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str creds_id: UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". (required) - :return: CloudEndureCloudCredentials - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["creds_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method cloud_credentials_creds_id_get" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'creds_id' is set - if "creds_id" not in params or params["creds_id"] is None: - raise ValueError( - "Missing the required parameter `creds_id` when calling `cloud_credentials_creds_id_get`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "creds_id" in params: - path_params["credsId"] = params["creds_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/cloudCredentials/{credsId}", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureCloudCredentials", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def cloud_credentials_creds_id_patch(self, body, creds_id, **kwargs): # noqa: E501 - """Change Credentials # noqa: E501 - - Changes the cloud credentials. @todo:v15 If the new Cloud Credentials are to a different cloud account (or different cloud), than PATCH should fail with ??? error code and ??? error message. Old v14 behavior: If the these cloud credentials are used with the current replication, and the new credentials are to a different cloud account (or different cloud), all agents will be uninstalled and replication will stop on them. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.cloud_credentials_creds_id_patch(body, creds_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureCloudCredentialsRequest body: (required) - :param str creds_id: UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". (required) - :return: CloudEndureCloudCredentials - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.cloud_credentials_creds_id_patch_with_http_info( - body, creds_id, **kwargs - ) # noqa: E501 - else: - (data) = self.cloud_credentials_creds_id_patch_with_http_info( - body, creds_id, **kwargs - ) # noqa: E501 - return data - - def cloud_credentials_creds_id_patch_with_http_info( - self, body, creds_id, **kwargs - ): # noqa: E501 - """Change Credentials # noqa: E501 - - Changes the cloud credentials. @todo:v15 If the new Cloud Credentials are to a different cloud account (or different cloud), than PATCH should fail with ??? error code and ??? error message. Old v14 behavior: If the these cloud credentials are used with the current replication, and the new credentials are to a different cloud account (or different cloud), all agents will be uninstalled and replication will stop on them. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.cloud_credentials_creds_id_patch_with_http_info(body, creds_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureCloudCredentialsRequest body: (required) - :param str creds_id: UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". (required) - :return: CloudEndureCloudCredentials - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body", "creds_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method cloud_credentials_creds_id_patch" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `cloud_credentials_creds_id_patch`" - ) # noqa: E501 - # verify the required parameter 'creds_id' is set - if "creds_id" not in params or params["creds_id"] is None: - raise ValueError( - "Missing the required parameter `creds_id` when calling `cloud_credentials_creds_id_patch`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "creds_id" in params: - path_params["credsId"] = params["creds_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/cloudCredentials/{credsId}", - "PATCH", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureCloudCredentials", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def cloud_credentials_get(self, **kwargs): # noqa: E501 - """List Credentials # noqa: E501 - - Returns the list of cloudCredentials in the account. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.cloud_credentials_get(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param int offset: With which item to start (0 based). - :param int limit: A number specifying how many entries to return. - :return: CloudEndureCloudCredentialsList - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.cloud_credentials_get_with_http_info(**kwargs) # noqa: E501 - else: - (data) = self.cloud_credentials_get_with_http_info(**kwargs) # noqa: E501 - return data - - def cloud_credentials_get_with_http_info(self, **kwargs): # noqa: E501 - """List Credentials # noqa: E501 - - Returns the list of cloudCredentials in the account. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.cloud_credentials_get_with_http_info(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param int offset: With which item to start (0 based). - :param int limit: A number specifying how many entries to return. - :return: CloudEndureCloudCredentialsList - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["offset", "limit"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method cloud_credentials_get" % key - ) - params[key] = val - del params["kwargs"] - - collection_formats = {} - - path_params = {} - - query_params = [] - if "offset" in params: - query_params.append(("offset", params["offset"])) # noqa: E501 - if "limit" in params: - query_params.append(("limit", params["limit"])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/cloudCredentials", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureCloudCredentialsList", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def cloud_credentials_post(self, body, **kwargs): # noqa: E501 - """Create Credentials # noqa: E501 - - Provide the credentials with which to access the cloud API. Returns the newly created object. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.cloud_credentials_post(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureCloudCredentialsRequest body: (required) - :return: CloudEndureCloudCredentials - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.cloud_credentials_post_with_http_info( - body, **kwargs - ) # noqa: E501 - else: - (data) = self.cloud_credentials_post_with_http_info( - body, **kwargs - ) # noqa: E501 - return data - - def cloud_credentials_post_with_http_info(self, body, **kwargs): # noqa: E501 - """Create Credentials # noqa: E501 - - Provide the credentials with which to access the cloud API. Returns the newly created object. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.cloud_credentials_post_with_http_info(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureCloudCredentialsRequest body: (required) - :return: CloudEndureCloudCredentials - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method cloud_credentials_post" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `cloud_credentials_post`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/cloudCredentials", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureCloudCredentials", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) diff --git a/cloudendure/cloudendure_api/api/default_api.py b/cloudendure/cloudendure_api/api/default_api.py deleted file mode 100644 index 856d78c8e..000000000 --- a/cloudendure/cloudendure_api/api/default_api.py +++ /dev/null @@ -1,1195 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import re # noqa: F401 - -# python 2 and python 3 compatibility library -import six - -from cloudendure.cloudendure_api.api_client import ApiClient - - -class DefaultApi: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - Ref: https://github.com/swagger-api/swagger-codegen - """ - - def __init__(self, api_client=None): - if api_client is None: - api_client = ApiClient() - self.api_client = api_client - - def accounts_account_id_access_get( - self, account_id, username, **kwargs - ): # noqa: E501 - """get a temporary token by email # noqa: E501 - - get a temporary token by email. Available for account owner when SSO is used # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.accounts_account_id_access_get(account_id, username, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str account_id: (required) - :param str username: (required) - :return: object - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.accounts_account_id_access_get_with_http_info( - account_id, username, **kwargs - ) # noqa: E501 - else: - (data) = self.accounts_account_id_access_get_with_http_info( - account_id, username, **kwargs - ) # noqa: E501 - return data - - def accounts_account_id_access_get_with_http_info( - self, account_id, username, **kwargs - ): # noqa: E501 - """get a temporary token by email # noqa: E501 - - get a temporary token by email. Available for account owner when SSO is used # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.accounts_account_id_access_get_with_http_info(account_id, username, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str account_id: (required) - :param str username: (required) - :return: object - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["account_id", "username"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method accounts_account_id_access_get" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'account_id' is set - if "account_id" not in params or params["account_id"] is None: - raise ValueError( - "Missing the required parameter `account_id` when calling `accounts_account_id_access_get`" - ) # noqa: E501 - # verify the required parameter 'username' is set - if "username" not in params or params["username"] is None: - raise ValueError( - "Missing the required parameter `username` when calling `accounts_account_id_access_get`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "account_id" in params: - path_params["accountId"] = params["account_id"] # noqa: E501 - - query_params = [] - if "username" in params: - query_params.append(("username", params["username"])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/accounts/{accountId}/access", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="object", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def extended_account_info_get(self, **kwargs): # noqa: E501 - """Returns the extended current account information. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.extended_account_info_get(async_req=True) - >>> result = thread.get() - - :param async_req bool - :return: CloudEndureExtendedAccountInfo - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.extended_account_info_get_with_http_info(**kwargs) # noqa: E501 - else: - (data) = self.extended_account_info_get_with_http_info( - **kwargs - ) # noqa: E501 - return data - - def extended_account_info_get_with_http_info(self, **kwargs): # noqa: E501 - """Returns the extended current account information. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.extended_account_info_get_with_http_info(async_req=True) - >>> result = thread.get() - - :param async_req bool - :return: CloudEndureExtendedAccountInfo - If the method is called asynchronously, - returns the request thread. - """ - - all_params = [] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method extended_account_info_get" % key - ) - params[key] = val - del params["kwargs"] - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/extendedAccountInfo", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureExtendedAccountInfo", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_assign_users_post(self, body, **kwargs): # noqa: E501 - """todo # noqa: E501 - - todo # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_assign_users_post(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureProjectsAndUsers body: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_assign_users_post_with_http_info( - body, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_assign_users_post_with_http_info( - body, **kwargs - ) # noqa: E501 - return data - - def projects_assign_users_post_with_http_info(self, body, **kwargs): # noqa: E501 - """todo # noqa: E501 - - todo # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_assign_users_post_with_http_info(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureProjectsAndUsers body: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_assign_users_post" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_assign_users_post`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/assignUsers", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_audit_log_get(self, project_id, **kwargs): # noqa: E501 - """Get audit log # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_audit_log_get(project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param int limit: A number specifying how many entries to return. - :param datetime from_date_time: Used to limit the response to a specific date range. Must be used in conjunction with toDateTime param. - :param datetime to_date_time: Used to limit the response to a specific date range. Must be used in conjunction with fromDateTime param. - :param str format: - :return: CloudEndureAuditLog - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_audit_log_get_with_http_info( - project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_audit_log_get_with_http_info( - project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_audit_log_get_with_http_info( - self, project_id, **kwargs - ): # noqa: E501 - """Get audit log # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_audit_log_get_with_http_info(project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param int limit: A number specifying how many entries to return. - :param datetime from_date_time: Used to limit the response to a specific date range. Must be used in conjunction with toDateTime param. - :param datetime to_date_time: Used to limit the response to a specific date range. Must be used in conjunction with fromDateTime param. - :param str format: - :return: CloudEndureAuditLog - If the method is called asynchronously, - returns the request thread. - """ - - all_params = [ - "project_id", - "limit", - "from_date_time", - "to_date_time", - "format", - ] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_audit_log_get" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_audit_log_get`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - if "limit" in params: - query_params.append(("limit", params["limit"])) # noqa: E501 - if "from_date_time" in params: - query_params.append( - ("fromDateTime", params["from_date_time"]) - ) # noqa: E501 - if "to_date_time" in params: - query_params.append(("toDateTime", params["to_date_time"])) # noqa: E501 - if "format" in params: - query_params.append(("format", params["format"])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json", "text/csv"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/auditLog", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureAuditLog", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_storage_get(self, project_id, **kwargs): # noqa: E501 - """project's storage # noqa: E501 - - get project's storage usage (vCenter only) # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_storage_get(project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :return: CloudEndureProjectStorage - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_storage_get_with_http_info( - project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_storage_get_with_http_info( - project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_storage_get_with_http_info( - self, project_id, **kwargs - ): # noqa: E501 - """project's storage # noqa: E501 - - get project's storage usage (vCenter only) # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_storage_get_with_http_info(project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :return: CloudEndureProjectStorage - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["project_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_storage_get" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_storage_get`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/storage", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureProjectStorage", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_remove_users_post(self, body, **kwargs): # noqa: E501 - """todo # noqa: E501 - - todo # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_remove_users_post(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureProjectsAndUsers body: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_remove_users_post_with_http_info( - body, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_remove_users_post_with_http_info( - body, **kwargs - ) # noqa: E501 - return data - - def projects_remove_users_post_with_http_info(self, body, **kwargs): # noqa: E501 - """todo # noqa: E501 - - todo # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_remove_users_post_with_http_info(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureProjectsAndUsers body: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_remove_users_post" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_remove_users_post`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/removeUsers", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def replace_api_token_post(self, **kwargs): # noqa: E501 - """Replaces API token # noqa: E501 - - Replaces API token # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.replace_api_token_post(async_req=True) - >>> result = thread.get() - - :param async_req bool - :return: object - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.replace_api_token_post_with_http_info(**kwargs) # noqa: E501 - else: - (data) = self.replace_api_token_post_with_http_info(**kwargs) # noqa: E501 - return data - - def replace_api_token_post_with_http_info(self, **kwargs): # noqa: E501 - """Replaces API token # noqa: E501 - - Replaces API token # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.replace_api_token_post_with_http_info(async_req=True) - >>> result = thread.get() - - :param async_req bool - :return: object - If the method is called asynchronously, - returns the request thread. - """ - - all_params = [] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method replace_api_token_post" % key - ) - params[key] = val - del params["kwargs"] - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/replaceApiToken", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="object", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def set_password_post(self, body, **kwargs): # noqa: E501 - """Set password for invited user # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.set_password_post(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param object body: set password token and new password (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.set_password_post_with_http_info(body, **kwargs) # noqa: E501 - else: - (data) = self.set_password_post_with_http_info(body, **kwargs) # noqa: E501 - return data - - def set_password_post_with_http_info(self, body, **kwargs): # noqa: E501 - """Set password for invited user # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.set_password_post_with_http_info(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param object body: set password token and new password (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method set_password_post" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `set_password_post`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/setPassword", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def users_assign_roles_post(self, body, **kwargs): # noqa: E501 - """Add roles to users # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.users_assign_roles_post(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureUsersAndRoles body: (required) - :return: CloudEndureUsersList - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.users_assign_roles_post_with_http_info( - body, **kwargs - ) # noqa: E501 - else: - (data) = self.users_assign_roles_post_with_http_info( - body, **kwargs - ) # noqa: E501 - return data - - def users_assign_roles_post_with_http_info(self, body, **kwargs): # noqa: E501 - """Add roles to users # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.users_assign_roles_post_with_http_info(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureUsersAndRoles body: (required) - :return: CloudEndureUsersList - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method users_assign_roles_post" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `users_assign_roles_post`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/users/assignRoles", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureUsersList", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def users_post(self, body, **kwargs): # noqa: E501 - """Create a new User # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.users_post(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param object body: (required) - :return: CloudEndureUser - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.users_post_with_http_info(body, **kwargs) # noqa: E501 - else: - (data) = self.users_post_with_http_info(body, **kwargs) # noqa: E501 - return data - - def users_post_with_http_info(self, body, **kwargs): # noqa: E501 - """Create a new User # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.users_post_with_http_info(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param object body: (required) - :return: CloudEndureUser - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method users_post" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `users_post`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/users", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureUser", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def users_revoke_roles_post(self, body, **kwargs): # noqa: E501 - """Add roles to users # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.users_revoke_roles_post(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureUsersAndRoles body: (required) - :return: CloudEndureUsersList - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.users_revoke_roles_post_with_http_info( - body, **kwargs - ) # noqa: E501 - else: - (data) = self.users_revoke_roles_post_with_http_info( - body, **kwargs - ) # noqa: E501 - return data - - def users_revoke_roles_post_with_http_info(self, body, **kwargs): # noqa: E501 - """Add roles to users # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.users_revoke_roles_post_with_http_info(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureUsersAndRoles body: (required) - :return: CloudEndureUsersList - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method users_revoke_roles_post" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `users_revoke_roles_post`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/users/revokeRoles", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureUsersList", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) diff --git a/cloudendure/cloudendure_api/api/licensing_api.py b/cloudendure/cloudendure_api/api/licensing_api.py deleted file mode 100644 index a9bdba130..000000000 --- a/cloudendure/cloudendure_api/api/licensing_api.py +++ /dev/null @@ -1,234 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import re # noqa: F401 - -# python 2 and python 3 compatibility library -import six - -from cloudendure.cloudendure_api.api_client import ApiClient - - -class LicensingApi: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - Ref: https://github.com/swagger-api/swagger-codegen - """ - - def __init__(self, api_client=None): - if api_client is None: - api_client = ApiClient() - self.api_client = api_client - - def licenses_get(self, **kwargs): # noqa: E501 - """List Licenses # noqa: E501 - - Returns the list of licenses currently associated with this user. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.licenses_get(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param int offset: With which item to start (0 based). - :param int limit: A number specifying how many entries to return. - :return: CloudEndureLicenseList - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.licenses_get_with_http_info(**kwargs) # noqa: E501 - else: - (data) = self.licenses_get_with_http_info(**kwargs) # noqa: E501 - return data - - def licenses_get_with_http_info(self, **kwargs): # noqa: E501 - """List Licenses # noqa: E501 - - Returns the list of licenses currently associated with this user. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.licenses_get_with_http_info(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param int offset: With which item to start (0 based). - :param int limit: A number specifying how many entries to return. - :return: CloudEndureLicenseList - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["offset", "limit"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method licenses_get" % key - ) - params[key] = val - del params["kwargs"] - - collection_formats = {} - - path_params = {} - - query_params = [] - if "offset" in params: - query_params.append(("offset", params["offset"])) # noqa: E501 - if "limit" in params: - query_params.append(("limit", params["limit"])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/licenses", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureLicenseList", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def licenses_license_id_get(self, license_id, **kwargs): # noqa: E501 - """Get License # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.licenses_license_id_get(license_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str license_id: (required) - :return: CloudEndureLicense - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.licenses_license_id_get_with_http_info( - license_id, **kwargs - ) # noqa: E501 - else: - (data) = self.licenses_license_id_get_with_http_info( - license_id, **kwargs - ) # noqa: E501 - return data - - def licenses_license_id_get_with_http_info( - self, license_id, **kwargs - ): # noqa: E501 - """Get License # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.licenses_license_id_get_with_http_info(license_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str license_id: (required) - :return: CloudEndureLicense - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["license_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method licenses_license_id_get" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'license_id' is set - if "license_id" not in params or params["license_id"] is None: - raise ValueError( - "Missing the required parameter `license_id` when calling `licenses_license_id_get`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "license_id" in params: - path_params["licenseId"] = params["license_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/licenses/{licenseId}", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureLicense", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) diff --git a/cloudendure/cloudendure_api/api/machines_api.py b/cloudendure/cloudendure_api/api/machines_api.py deleted file mode 100644 index 12f3c81f5..000000000 --- a/cloudendure/cloudendure_api/api/machines_api.py +++ /dev/null @@ -1,753 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import re # noqa: F401 - -# python 2 and python 3 compatibility library -import six - -from cloudendure.cloudendure_api.api_client import ApiClient - - -class MachinesApi: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - Ref: https://github.com/swagger-api/swagger-codegen - """ - - def __init__(self, api_client=None): - if api_client is None: - api_client = ApiClient() - self.api_client = api_client - - def projects_project_id_machines_delete( - self, body, project_id, **kwargs - ): # noqa: E501 - """Uninstall agent # noqa: E501 - - Stops replication and removes the cloudendure agent from the specified machines. All cloud artifacts associated with those machines with the exception of launched target machines are deleted. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_machines_delete(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param object body: The list of machine IDs to remove from the CloudEndure service. (required) - :param str project_id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_machines_delete_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_machines_delete_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_machines_delete_with_http_info( - self, body, project_id, **kwargs - ): # noqa: E501 - """Uninstall agent # noqa: E501 - - Stops replication and removes the cloudendure agent from the specified machines. All cloud artifacts associated with those machines with the exception of launched target machines are deleted. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_machines_delete_with_http_info(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param object body: The list of machine IDs to remove from the CloudEndure service. (required) - :param str project_id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body", "project_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_machines_delete" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_project_id_machines_delete`" - ) # noqa: E501 - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_machines_delete`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/machines", - "DELETE", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_machines_get(self, project_id, **kwargs): # noqa: E501 - """List Machines # noqa: E501 - - Returns the list of all source machines in the Project (i.e. machines that have an Agent installed). # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_machines_get(project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param int offset: With which item to start (0 based). - :param int limit: A number specifying how many entries to return. - :param bool all: When set to false, returns only currently replicating machines. When set to true, returns all machines in the project regardless of replications status. machines are consuming/ have consumed licenses. Note that some license types are transferable and therefore once you remove the and set to true false, returns only currently replicating machines. When set to true, returns all machines in the project regardless of replications status. - :param str types: Use this url query param to control which machines are returned when doing GET. If you do not include the \\\"types\\\" query param, you will only get source machines - :return: CloudEndureMachinesList - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_machines_get_with_http_info( - project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_machines_get_with_http_info( - project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_machines_get_with_http_info( - self, project_id, **kwargs - ): # noqa: E501 - """List Machines # noqa: E501 - - Returns the list of all source machines in the Project (i.e. machines that have an Agent installed). # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_machines_get_with_http_info(project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param int offset: With which item to start (0 based). - :param int limit: A number specifying how many entries to return. - :param bool all: When set to false, returns only currently replicating machines. When set to true, returns all machines in the project regardless of replications status. machines are consuming/ have consumed licenses. Note that some license types are transferable and therefore once you remove the and set to true false, returns only currently replicating machines. When set to true, returns all machines in the project regardless of replications status. - :param str types: Use this url query param to control which machines are returned when doing GET. If you do not include the \\\"types\\\" query param, you will only get source machines - :return: CloudEndureMachinesList - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["project_id", "offset", "limit", "all", "types"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_machines_get" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_machines_get`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - if "offset" in params: - query_params.append(("offset", params["offset"])) # noqa: E501 - if "limit" in params: - query_params.append(("limit", params["limit"])) # noqa: E501 - if "all" in params: - query_params.append(("all", params["all"])) # noqa: E501 - if "types" in params: - query_params.append(("types", params["types"])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/machines", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureMachinesList", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_machines_machine_id_get( - self, project_id, machine_id, **kwargs - ): # noqa: E501 - """Get a specific machine. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_machines_machine_id_get(project_id, machine_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param str machine_id: (required) - :return: CloudEndureMachine - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_machines_machine_id_get_with_http_info( - project_id, machine_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_machines_machine_id_get_with_http_info( - project_id, machine_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_machines_machine_id_get_with_http_info( - self, project_id, machine_id, **kwargs - ): # noqa: E501 - """Get a specific machine. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_machines_machine_id_get_with_http_info(project_id, machine_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param str machine_id: (required) - :return: CloudEndureMachine - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["project_id", "machine_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_machines_machine_id_get" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_machines_machine_id_get`" - ) # noqa: E501 - # verify the required parameter 'machine_id' is set - if "machine_id" not in params or params["machine_id"] is None: - raise ValueError( - "Missing the required parameter `machine_id` when calling `projects_project_id_machines_machine_id_get`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - if "machine_id" in params: - path_params["machineId"] = params["machine_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/machines/{machineId}", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureMachine", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_machines_machine_id_patch( - self, body, project_id, machine_id, **kwargs - ): # noqa: E501 - """Update a machine. Accepts only Launch time updates. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_machines_machine_id_patch(body, project_id, machine_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureMachine body: (required) - :param str project_id: (required) - :param str machine_id: (required) - :return: CloudEndureMachine - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_machines_machine_id_patch_with_http_info( - body, project_id, machine_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_machines_machine_id_patch_with_http_info( - body, project_id, machine_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_machines_machine_id_patch_with_http_info( - self, body, project_id, machine_id, **kwargs - ): # noqa: E501 - """Update a machine. Accepts only Launch time updates. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_machines_machine_id_patch_with_http_info(body, project_id, machine_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureMachine body: (required) - :param str project_id: (required) - :param str machine_id: (required) - :return: CloudEndureMachine - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body", "project_id", "machine_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_machines_machine_id_patch" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_project_id_machines_machine_id_patch`" - ) # noqa: E501 - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_machines_machine_id_patch`" - ) # noqa: E501 - # verify the required parameter 'machine_id' is set - if "machine_id" not in params or params["machine_id"] is None: - raise ValueError( - "Missing the required parameter `machine_id` when calling `projects_project_id_machines_machine_id_patch`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - if "machine_id" in params: - path_params["machineId"] = params["machine_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/machines/{machineId}", - "PATCH", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureMachine", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_machines_patch( - self, body, project_id, **kwargs - ): # noqa: E501 - """Batch-update multiple machines # noqa: E501 - - todo must allow update of tags, update of replicationConfiguration; may allow update of launch times # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_machines_patch(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureMachinesList body: (required) - :param str project_id: (required) - :return: CloudEndureMachinesList - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_machines_patch_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_machines_patch_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_machines_patch_with_http_info( - self, body, project_id, **kwargs - ): # noqa: E501 - """Batch-update multiple machines # noqa: E501 - - todo must allow update of tags, update of replicationConfiguration; may allow update of launch times # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_machines_patch_with_http_info(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureMachinesList body: (required) - :param str project_id: (required) - :return: CloudEndureMachinesList - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body", "project_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_machines_patch" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_project_id_machines_patch`" - ) # noqa: E501 - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_machines_patch`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/machines", - "PATCH", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureMachinesList", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_replicas_replica_id_get( - self, project_id, replica_id, **kwargs - ): # noqa: E501 - """Get Target Machine # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_replicas_replica_id_get(project_id, replica_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param str replica_id: (required) - :return: CloudEndureReplica - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_replicas_replica_id_get_with_http_info( - project_id, replica_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_replicas_replica_id_get_with_http_info( - project_id, replica_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_replicas_replica_id_get_with_http_info( - self, project_id, replica_id, **kwargs - ): # noqa: E501 - """Get Target Machine # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_replicas_replica_id_get_with_http_info(project_id, replica_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param str replica_id: (required) - :return: CloudEndureReplica - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["project_id", "replica_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_replicas_replica_id_get" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_replicas_replica_id_get`" - ) # noqa: E501 - # verify the required parameter 'replica_id' is set - if "replica_id" not in params or params["replica_id"] is None: - raise ValueError( - "Missing the required parameter `replica_id` when calling `projects_project_id_replicas_replica_id_get`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - if "replica_id" in params: - path_params["replicaId"] = params["replica_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/replicas/{replicaId}", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureReplica", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) diff --git a/cloudendure/cloudendure_api/api/project_api.py b/cloudendure/cloudendure_api/api/project_api.py deleted file mode 100644 index e1af4b7c2..000000000 --- a/cloudendure/cloudendure_api/api/project_api.py +++ /dev/null @@ -1,672 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import re # noqa: F401 - -# python 2 and python 3 compatibility library -import six - -from cloudendure.cloudendure_api.api_client import ApiClient - - -class ProjectApi: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - Ref: https://github.com/swagger-api/swagger-codegen - """ - - def __init__(self, api_client=None): - if api_client is None: - api_client = ApiClient() - self.api_client = api_client - - def projects_get(self, **kwargs): # noqa: E501 - """List Projects # noqa: E501 - - Returns the list of projects defined in this account. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_get(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param int offset: With which item to start (0 based). - :param int limit: A number specifying how many entries to return. - :return: CloudEndureProjectsList - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_get_with_http_info(**kwargs) # noqa: E501 - else: - (data) = self.projects_get_with_http_info(**kwargs) # noqa: E501 - return data - - def projects_get_with_http_info(self, **kwargs): # noqa: E501 - """List Projects # noqa: E501 - - Returns the list of projects defined in this account. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_get_with_http_info(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param int offset: With which item to start (0 based). - :param int limit: A number specifying how many entries to return. - :return: CloudEndureProjectsList - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["offset", "limit"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_get" % key - ) - params[key] = val - del params["kwargs"] - - collection_formats = {} - - path_params = {} - - query_params = [] - if "offset" in params: - query_params.append(("offset", params["offset"])) # noqa: E501 - if "limit" in params: - query_params.append(("limit", params["limit"])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureProjectsList", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_post(self, body, **kwargs): # noqa: E501 - """Create Project # noqa: E501 - - Create project # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_post(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureProject body: (required) - :return: CloudEndureProject - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_post_with_http_info(body, **kwargs) # noqa: E501 - else: - (data) = self.projects_post_with_http_info(body, **kwargs) # noqa: E501 - return data - - def projects_post_with_http_info(self, body, **kwargs): # noqa: E501 - """Create Project # noqa: E501 - - Create project # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_post_with_http_info(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureProject body: (required) - :return: CloudEndureProject - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_post" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_post`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureProject", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_delete(self, project_id, **kwargs): # noqa: E501 - """Delete Project and all sub-resources including cloud assets other than launched target machines # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_delete(project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_delete_with_http_info( - project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_delete_with_http_info( - project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_delete_with_http_info( - self, project_id, **kwargs - ): # noqa: E501 - """Delete Project and all sub-resources including cloud assets other than launched target machines # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_delete_with_http_info(project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["project_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_delete" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_delete`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}", - "DELETE", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_get(self, project_id, **kwargs): # noqa: E501 - """Get Project # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_get(project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :return: CloudEndureProject - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_get_with_http_info( - project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_get_with_http_info( - project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_get_with_http_info( - self, project_id, **kwargs - ): # noqa: E501 - """Get Project # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_get_with_http_info(project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :return: CloudEndureProject - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["project_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_get" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_get`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureProject", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_patch(self, body, project_id, **kwargs): # noqa: E501 - """Update Project (including partial update) # noqa: E501 - - Set project properties including Data Replication source location and replicationConfiguration to use. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_patch(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureProject body: (required) - :param str project_id: (required) - :return: CloudEndureProject - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_patch_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_patch_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_patch_with_http_info( - self, body, project_id, **kwargs - ): # noqa: E501 - """Update Project (including partial update) # noqa: E501 - - Set project properties including Data Replication source location and replicationConfiguration to use. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_patch_with_http_info(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureProject body: (required) - :param str project_id: (required) - :return: CloudEndureProject - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body", "project_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_patch" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_project_id_patch`" - ) # noqa: E501 - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_patch`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}", - "PATCH", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureProject", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_tags_get(self, project_id, **kwargs): # noqa: E501 - """Gets all instance tags of all machines in the project. # noqa: E501 - - Returns all instance tags of all machines in the project. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_tags_get(project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param int offset: With which item to start (0 based). - :param int limit: A number specifying how many entries to return. - :return: object - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_tags_get_with_http_info( - project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_tags_get_with_http_info( - project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_tags_get_with_http_info( - self, project_id, **kwargs - ): # noqa: E501 - """Gets all instance tags of all machines in the project. # noqa: E501 - - Returns all instance tags of all machines in the project. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_tags_get_with_http_info(project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param int offset: With which item to start (0 based). - :param int limit: A number specifying how many entries to return. - :return: object - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["project_id", "offset", "limit"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_tags_get" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_tags_get`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - if "offset" in params: - query_params.append(("offset", params["offset"])) # noqa: E501 - if "limit" in params: - query_params.append(("limit", params["limit"])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/tags", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="object", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) diff --git a/cloudendure/cloudendure_api/api/recovery_plans_api.py b/cloudendure/cloudendure_api/api/recovery_plans_api.py deleted file mode 100644 index 55fc7d5b8..000000000 --- a/cloudendure/cloudendure_api/api/recovery_plans_api.py +++ /dev/null @@ -1,742 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import re # noqa: F401 - -# python 2 and python 3 compatibility library -import six - -from cloudendure.cloudendure_api.api_client import ApiClient - - -class RecoveryPlansApi: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - Ref: https://github.com/swagger-api/swagger-codegen - """ - - def __init__(self, api_client=None): - if api_client is None: - api_client = ApiClient() - self.api_client = api_client - - def projects_project_id_recovery_plans_get( - self, project_id, **kwargs - ): # noqa: E501 - """Gets all recovery plans for the project. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_recovery_plans_get(project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :return: CloudEndureRecoveryPlanList - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_recovery_plans_get_with_http_info( - project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_recovery_plans_get_with_http_info( - project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_recovery_plans_get_with_http_info( - self, project_id, **kwargs - ): # noqa: E501 - """Gets all recovery plans for the project. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_recovery_plans_get_with_http_info(project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :return: CloudEndureRecoveryPlanList - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["project_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_recovery_plans_get" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_recovery_plans_get`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/recoveryPlans", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureRecoveryPlanList", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_recovery_plans_post( - self, body, project_id, **kwargs - ): # noqa: E501 - """Creates a new recovery plan. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_recovery_plans_post(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureRecoveryPlan body: Recovery Plan to create (required) - :param str project_id: (required) - :return: CloudEndureRecoveryPlan - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_recovery_plans_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_recovery_plans_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_recovery_plans_post_with_http_info( - self, body, project_id, **kwargs - ): # noqa: E501 - """Creates a new recovery plan. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_recovery_plans_post_with_http_info(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureRecoveryPlan body: Recovery Plan to create (required) - :param str project_id: (required) - :return: CloudEndureRecoveryPlan - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body", "project_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_recovery_plans_post" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_project_id_recovery_plans_post`" - ) # noqa: E501 - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_recovery_plans_post`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/recoveryPlans", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureRecoveryPlan", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_recovery_plans_recovery_plan_id_delete( - self, project_id, recovery_plan_id, **kwargs - ): # noqa: E501 - """Deletes a recovery plan. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_recovery_plans_recovery_plan_id_delete(project_id, recovery_plan_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param str recovery_plan_id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_recovery_plans_recovery_plan_id_delete_with_http_info( - project_id, recovery_plan_id, **kwargs - ) # noqa: E501 - else: - ( - data - ) = self.projects_project_id_recovery_plans_recovery_plan_id_delete_with_http_info( - project_id, recovery_plan_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_recovery_plans_recovery_plan_id_delete_with_http_info( - self, project_id, recovery_plan_id, **kwargs - ): # noqa: E501 - """Deletes a recovery plan. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_recovery_plans_recovery_plan_id_delete_with_http_info(project_id, recovery_plan_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param str recovery_plan_id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["project_id", "recovery_plan_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_recovery_plans_recovery_plan_id_delete" - % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_recovery_plans_recovery_plan_id_delete`" - ) # noqa: E501 - # verify the required parameter 'recovery_plan_id' is set - if "recovery_plan_id" not in params or params["recovery_plan_id"] is None: - raise ValueError( - "Missing the required parameter `recovery_plan_id` when calling `projects_project_id_recovery_plans_recovery_plan_id_delete`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - if "recovery_plan_id" in params: - path_params["recoveryPlanId"] = params["recovery_plan_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/recoveryPlans/{recoveryPlanId}", - "DELETE", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_recovery_plans_recovery_plan_id_get( - self, project_id, recovery_plan_id, **kwargs - ): # noqa: E501 - """Gets a recovery plan. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_recovery_plans_recovery_plan_id_get(project_id, recovery_plan_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param str recovery_plan_id: (required) - :return: CloudEndureRecoveryPlan - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_recovery_plans_recovery_plan_id_get_with_http_info( - project_id, recovery_plan_id, **kwargs - ) # noqa: E501 - else: - ( - data - ) = self.projects_project_id_recovery_plans_recovery_plan_id_get_with_http_info( - project_id, recovery_plan_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_recovery_plans_recovery_plan_id_get_with_http_info( - self, project_id, recovery_plan_id, **kwargs - ): # noqa: E501 - """Gets a recovery plan. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_recovery_plans_recovery_plan_id_get_with_http_info(project_id, recovery_plan_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param str recovery_plan_id: (required) - :return: CloudEndureRecoveryPlan - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["project_id", "recovery_plan_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_recovery_plans_recovery_plan_id_get" - % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_recovery_plans_recovery_plan_id_get`" - ) # noqa: E501 - # verify the required parameter 'recovery_plan_id' is set - if "recovery_plan_id" not in params or params["recovery_plan_id"] is None: - raise ValueError( - "Missing the required parameter `recovery_plan_id` when calling `projects_project_id_recovery_plans_recovery_plan_id_get`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - if "recovery_plan_id" in params: - path_params["recoveryPlanId"] = params["recovery_plan_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/recoveryPlans/{recoveryPlanId}", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureRecoveryPlan", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_recovery_plans_recovery_plan_id_patch( - self, body, project_id, recovery_plan_id, **kwargs - ): # noqa: E501 - """Updates a new recovery plan. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_recovery_plans_recovery_plan_id_patch(body, project_id, recovery_plan_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureRecoveryPlan body: Recovery Plan to create (required) - :param str project_id: (required) - :param str recovery_plan_id: (required) - :return: CloudEndureRecoveryPlan - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_recovery_plans_recovery_plan_id_patch_with_http_info( - body, project_id, recovery_plan_id, **kwargs - ) # noqa: E501 - else: - ( - data - ) = self.projects_project_id_recovery_plans_recovery_plan_id_patch_with_http_info( - body, project_id, recovery_plan_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_recovery_plans_recovery_plan_id_patch_with_http_info( - self, body, project_id, recovery_plan_id, **kwargs - ): # noqa: E501 - """Updates a new recovery plan. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_recovery_plans_recovery_plan_id_patch_with_http_info(body, project_id, recovery_plan_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureRecoveryPlan body: Recovery Plan to create (required) - :param str project_id: (required) - :param str recovery_plan_id: (required) - :return: CloudEndureRecoveryPlan - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body", "project_id", "recovery_plan_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_recovery_plans_recovery_plan_id_patch" - % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_project_id_recovery_plans_recovery_plan_id_patch`" - ) # noqa: E501 - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_recovery_plans_recovery_plan_id_patch`" - ) # noqa: E501 - # verify the required parameter 'recovery_plan_id' is set - if "recovery_plan_id" not in params or params["recovery_plan_id"] is None: - raise ValueError( - "Missing the required parameter `recovery_plan_id` when calling `projects_project_id_recovery_plans_recovery_plan_id_patch`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - if "recovery_plan_id" in params: - path_params["recoveryPlanId"] = params["recovery_plan_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/recoveryPlans/{recoveryPlanId}", - "PATCH", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureRecoveryPlan", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_run_recovery_plan_post( - self, body, project_id, **kwargs - ): # noqa: E501 - """Launch a recovery plan. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_run_recovery_plan_post(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param object body: Recovery Plan to create (required) - :param str project_id: (required) - :return: CloudEndureJob - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_run_recovery_plan_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_run_recovery_plan_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_run_recovery_plan_post_with_http_info( - self, body, project_id, **kwargs - ): # noqa: E501 - """Launch a recovery plan. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_run_recovery_plan_post_with_http_info(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param object body: Recovery Plan to create (required) - :param str project_id: (required) - :return: CloudEndureJob - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body", "project_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_run_recovery_plan_post" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_project_id_run_recovery_plan_post`" - ) # noqa: E501 - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_run_recovery_plan_post`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/runRecoveryPlan", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureJob", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) diff --git a/cloudendure/cloudendure_api/api/replication_api.py b/cloudendure/cloudendure_api/api/replication_api.py deleted file mode 100644 index d7498383c..000000000 --- a/cloudendure/cloudendure_api/api/replication_api.py +++ /dev/null @@ -1,909 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import re # noqa: F401 - -# python 2 and python 3 compatibility library -import six - -from cloudendure.cloudendure_api.api_client import ApiClient - - -class ReplicationApi: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - Ref: https://github.com/swagger-api/swagger-codegen - """ - - def __init__(self, api_client=None): - if api_client is None: - api_client = ApiClient() - self.api_client = api_client - - def projects_project_id_machines_machine_id_bandwidth_throttling_get( - self, project_id, machine_id, **kwargs - ): # noqa: E501 - """Get value of network bandwidth throttling setting for Machine # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_machines_machine_id_bandwidth_throttling_get(project_id, machine_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param str machine_id: (required) - :return: CloudEndureBandwidthThrottling - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_machines_machine_id_bandwidth_throttling_get_with_http_info( - project_id, machine_id, **kwargs - ) # noqa: E501 - else: - ( - data - ) = self.projects_project_id_machines_machine_id_bandwidth_throttling_get_with_http_info( - project_id, machine_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_machines_machine_id_bandwidth_throttling_get_with_http_info( - self, project_id, machine_id, **kwargs - ): # noqa: E501 - """Get value of network bandwidth throttling setting for Machine # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_machines_machine_id_bandwidth_throttling_get_with_http_info(project_id, machine_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param str machine_id: (required) - :return: CloudEndureBandwidthThrottling - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["project_id", "machine_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_machines_machine_id_bandwidth_throttling_get" - % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_machines_machine_id_bandwidth_throttling_get`" - ) # noqa: E501 - # verify the required parameter 'machine_id' is set - if "machine_id" not in params or params["machine_id"] is None: - raise ValueError( - "Missing the required parameter `machine_id` when calling `projects_project_id_machines_machine_id_bandwidth_throttling_get`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - if "machine_id" in params: - path_params["machineId"] = params["machine_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/machines/{machineId}/bandwidthThrottling", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureBandwidthThrottling", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_machines_machine_id_bandwidth_throttling_patch( - self, body, project_id, machine_id, **kwargs - ): # noqa: E501 - """Set value of network bandwidth throttling setting for Machine # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_machines_machine_id_bandwidth_throttling_patch(body, project_id, machine_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureBandwidthThrottling body: (required) - :param str project_id: (required) - :param str machine_id: (required) - :return: CloudEndureBandwidthThrottling - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_machines_machine_id_bandwidth_throttling_patch_with_http_info( - body, project_id, machine_id, **kwargs - ) # noqa: E501 - else: - ( - data - ) = self.projects_project_id_machines_machine_id_bandwidth_throttling_patch_with_http_info( - body, project_id, machine_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_machines_machine_id_bandwidth_throttling_patch_with_http_info( - self, body, project_id, machine_id, **kwargs - ): # noqa: E501 - """Set value of network bandwidth throttling setting for Machine # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_machines_machine_id_bandwidth_throttling_patch_with_http_info(body, project_id, machine_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureBandwidthThrottling body: (required) - :param str project_id: (required) - :param str machine_id: (required) - :return: CloudEndureBandwidthThrottling - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body", "project_id", "machine_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_machines_machine_id_bandwidth_throttling_patch" - % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_project_id_machines_machine_id_bandwidth_throttling_patch`" - ) # noqa: E501 - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_machines_machine_id_bandwidth_throttling_patch`" - ) # noqa: E501 - # verify the required parameter 'machine_id' is set - if "machine_id" not in params or params["machine_id"] is None: - raise ValueError( - "Missing the required parameter `machine_id` when calling `projects_project_id_machines_machine_id_bandwidth_throttling_patch`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - if "machine_id" in params: - path_params["machineId"] = params["machine_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/machines/{machineId}/bandwidthThrottling", - "PATCH", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureBandwidthThrottling", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_machines_machine_id_delete( - self, project_id, machine_id, **kwargs - ): # noqa: E501 - """Uninstall agent # noqa: E501 - - Stops replication and removes the cloudendure agent from this machine. All cloud artifacts associated with those machines with the exception of launched target machine are deleted. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_machines_machine_id_delete(project_id, machine_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param str machine_id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_machines_machine_id_delete_with_http_info( - project_id, machine_id, **kwargs - ) # noqa: E501 - else: - (data) = self.projects_project_id_machines_machine_id_delete_with_http_info( - project_id, machine_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_machines_machine_id_delete_with_http_info( - self, project_id, machine_id, **kwargs - ): # noqa: E501 - """Uninstall agent # noqa: E501 - - Stops replication and removes the cloudendure agent from this machine. All cloud artifacts associated with those machines with the exception of launched target machine are deleted. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_machines_machine_id_delete_with_http_info(project_id, machine_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param str machine_id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["project_id", "machine_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_machines_machine_id_delete" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_machines_machine_id_delete`" - ) # noqa: E501 - # verify the required parameter 'machine_id' is set - if "machine_id" not in params or params["machine_id"] is None: - raise ValueError( - "Missing the required parameter `machine_id` when calling `projects_project_id_machines_machine_id_delete`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - if "machine_id" in params: - path_params["machineId"] = params["machine_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/machines/{machineId}", - "DELETE", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_machines_machine_id_pointsintime_get( - self, project_id, machine_id, **kwargs - ): # noqa: E501 - """List Available Points-in-time # noqa: E501 - - Returns the list of available recovery points for this machine. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_machines_machine_id_pointsintime_get(project_id, machine_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param str machine_id: (required) - :param int offset: With which item to start (0 based). - :param int limit: A number specifying how many entries to return. - :return: CloudEndurePointInTimeList - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_machines_machine_id_pointsintime_get_with_http_info( - project_id, machine_id, **kwargs - ) # noqa: E501 - else: - ( - data - ) = self.projects_project_id_machines_machine_id_pointsintime_get_with_http_info( - project_id, machine_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_machines_machine_id_pointsintime_get_with_http_info( - self, project_id, machine_id, **kwargs - ): # noqa: E501 - """List Available Points-in-time # noqa: E501 - - Returns the list of available recovery points for this machine. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_machines_machine_id_pointsintime_get_with_http_info(project_id, machine_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param str machine_id: (required) - :param int offset: With which item to start (0 based). - :param int limit: A number specifying how many entries to return. - :return: CloudEndurePointInTimeList - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["project_id", "machine_id", "offset", "limit"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_machines_machine_id_pointsintime_get" - % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_machines_machine_id_pointsintime_get`" - ) # noqa: E501 - # verify the required parameter 'machine_id' is set - if "machine_id" not in params or params["machine_id"] is None: - raise ValueError( - "Missing the required parameter `machine_id` when calling `projects_project_id_machines_machine_id_pointsintime_get`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - if "machine_id" in params: - path_params["machineId"] = params["machine_id"] # noqa: E501 - - query_params = [] - if "offset" in params: - query_params.append(("offset", params["offset"])) # noqa: E501 - if "limit" in params: - query_params.append(("limit", params["limit"])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/machines/{machineId}/pointsintime", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndurePointInTimeList", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_replication_configurations_get( - self, project_id, **kwargs - ): # noqa: E501 - """List Replication Configurations # noqa: E501 - - Returns the list of replication configuration objects defined in this project. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_replication_configurations_get(project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param int offset: With which item to start (0 based). - :param int limit: A number specifying how many entries to return. - :return: CloudEndureReplicationConfigurationList - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_replication_configurations_get_with_http_info( - project_id, **kwargs - ) # noqa: E501 - else: - ( - data - ) = self.projects_project_id_replication_configurations_get_with_http_info( - project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_replication_configurations_get_with_http_info( - self, project_id, **kwargs - ): # noqa: E501 - """List Replication Configurations # noqa: E501 - - Returns the list of replication configuration objects defined in this project. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_replication_configurations_get_with_http_info(project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str project_id: (required) - :param int offset: With which item to start (0 based). - :param int limit: A number specifying how many entries to return. - :return: CloudEndureReplicationConfigurationList - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["project_id", "offset", "limit"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_replication_configurations_get" - % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_replication_configurations_get`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - if "offset" in params: - query_params.append(("offset", params["offset"])) # noqa: E501 - if "limit" in params: - query_params.append(("limit", params["limit"])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/replicationConfigurations", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureReplicationConfigurationList", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_replication_configurations_post( - self, body, project_id, **kwargs - ): # noqa: E501 - """Create Replication Configuration # noqa: E501 - - Control Data Replication parameters such as target cloud credentials, Staging Area and replication network configuration. A single configuration can exist per target region. Returns the newly created object. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_replication_configurations_post(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureReplicationConfiguration body: (required) - :param str project_id: (required) - :return: CloudEndureReplicationConfiguration - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_replication_configurations_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - else: - ( - data - ) = self.projects_project_id_replication_configurations_post_with_http_info( - body, project_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_replication_configurations_post_with_http_info( - self, body, project_id, **kwargs - ): # noqa: E501 - """Create Replication Configuration # noqa: E501 - - Control Data Replication parameters such as target cloud credentials, Staging Area and replication network configuration. A single configuration can exist per target region. Returns the newly created object. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_replication_configurations_post_with_http_info(body, project_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureReplicationConfiguration body: (required) - :param str project_id: (required) - :return: CloudEndureReplicationConfiguration - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body", "project_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_replication_configurations_post" - % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_project_id_replication_configurations_post`" - ) # noqa: E501 - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_replication_configurations_post`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/replicationConfigurations", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureReplicationConfiguration", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def projects_project_id_replication_configurations_replication_configuration_id_patch( - self, body, project_id, replication_configuration_id, **kwargs - ): # noqa: E501 - """Modify Replication Configuration # noqa: E501 - - Modifying volumeEncryptionKey or modifying cloudCredentials to ones matching a different cloud account will result in replication restarting from initial sync. Returns the modified object. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_replication_configurations_replication_configuration_id_patch(body, project_id, replication_configuration_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureReplicationConfiguration body: (required) - :param str project_id: (required) - :param str replication_configuration_id: (required) - :return: CloudEndureReplicationConfiguration - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.projects_project_id_replication_configurations_replication_configuration_id_patch_with_http_info( - body, project_id, replication_configuration_id, **kwargs - ) # noqa: E501 - else: - ( - data - ) = self.projects_project_id_replication_configurations_replication_configuration_id_patch_with_http_info( - body, project_id, replication_configuration_id, **kwargs - ) # noqa: E501 - return data - - def projects_project_id_replication_configurations_replication_configuration_id_patch_with_http_info( - self, body, project_id, replication_configuration_id, **kwargs - ): # noqa: E501 - """Modify Replication Configuration # noqa: E501 - - Modifying volumeEncryptionKey or modifying cloudCredentials to ones matching a different cloud account will result in replication restarting from initial sync. Returns the modified object. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.projects_project_id_replication_configurations_replication_configuration_id_patch_with_http_info(body, project_id, replication_configuration_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureReplicationConfiguration body: (required) - :param str project_id: (required) - :param str replication_configuration_id: (required) - :return: CloudEndureReplicationConfiguration - If the method is called asynchronously, - returns the request thread. - """ - - all_params = [ - "body", - "project_id", - "replication_configuration_id", - ] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method projects_project_id_replication_configurations_replication_configuration_id_patch" - % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `projects_project_id_replication_configurations_replication_configuration_id_patch`" - ) # noqa: E501 - # verify the required parameter 'project_id' is set - if "project_id" not in params or params["project_id"] is None: - raise ValueError( - "Missing the required parameter `project_id` when calling `projects_project_id_replication_configurations_replication_configuration_id_patch`" - ) # noqa: E501 - # verify the required parameter 'replication_configuration_id' is set - if ( - "replication_configuration_id" not in params - or params["replication_configuration_id"] is None - ): - raise ValueError( - "Missing the required parameter `replication_configuration_id` when calling `projects_project_id_replication_configurations_replication_configuration_id_patch`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "project_id" in params: - path_params["projectId"] = params["project_id"] # noqa: E501 - if "replication_configuration_id" in params: - path_params["replicationConfigurationId"] = params[ - "replication_configuration_id" - ] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/projects/{projectId}/replicationConfigurations/{replicationConfigurationId}", - "PATCH", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureReplicationConfiguration", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) diff --git a/cloudendure/cloudendure_api/api/user_api.py b/cloudendure/cloudendure_api/api/user_api.py deleted file mode 100644 index 7445d1db7..000000000 --- a/cloudendure/cloudendure_api/api/user_api.py +++ /dev/null @@ -1,447 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import re # noqa: F401 - -# python 2 and python 3 compatibility library -import six - -from cloudendure.cloudendure_api.api_client import ApiClient - - -class UserApi: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - Ref: https://github.com/swagger-api/swagger-codegen - """ - - def __init__(self, api_client=None): - if api_client is None: - api_client = ApiClient() - self.api_client = api_client - - def change_password_post(self, body, **kwargs): # noqa: E501 - """Change Password # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.change_password_post(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param object body: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.change_password_post_with_http_info( - body, **kwargs - ) # noqa: E501 - else: - (data) = self.change_password_post_with_http_info( - body, **kwargs - ) # noqa: E501 - return data - - def change_password_post_with_http_info(self, body, **kwargs): # noqa: E501 - """Change Password # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.change_password_post_with_http_info(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param object body: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method change_password_post" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `change_password_post`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/changePassword", - "POST", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def me_get(self, **kwargs): # noqa: E501 - """Me # noqa: E501 - - Provides user configuration information for the currently logged in user. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.me_get(async_req=True) - >>> result = thread.get() - - :param async_req bool - :return: CloudEndureUser - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.me_get_with_http_info(**kwargs) # noqa: E501 - else: - (data) = self.me_get_with_http_info(**kwargs) # noqa: E501 - return data - - def me_get_with_http_info(self, **kwargs): # noqa: E501 - """Me # noqa: E501 - - Provides user configuration information for the currently logged in user. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.me_get_with_http_info(async_req=True) - >>> result = thread.get() - - :param async_req bool - :return: CloudEndureUser - If the method is called asynchronously, - returns the request thread. - """ - - all_params = [] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" " to method me_get" % key - ) - params[key] = val - del params["kwargs"] - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/me", - "GET", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureUser", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def users_user_id_delete(self, user_id, **kwargs): # noqa: E501 - """Delete a User # noqa: E501 - - todo # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.users_user_id_delete(user_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str user_id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.users_user_id_delete_with_http_info( - user_id, **kwargs - ) # noqa: E501 - else: - (data) = self.users_user_id_delete_with_http_info( - user_id, **kwargs - ) # noqa: E501 - return data - - def users_user_id_delete_with_http_info(self, user_id, **kwargs): # noqa: E501 - """Delete a User # noqa: E501 - - todo # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.users_user_id_delete_with_http_info(user_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str user_id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["user_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method users_user_id_delete" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'user_id' is set - if "user_id" not in params or params["user_id"] is None: - raise ValueError( - "Missing the required parameter `user_id` when calling `users_user_id_delete`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "user_id" in params: - path_params["userId"] = params["user_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/users/{userId}", - "DELETE", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) - - def users_user_id_patch(self, body, user_id, **kwargs): # noqa: E501 - """Modify user settings # noqa: E501 - - Configure which projects this user can receive e-mail notifications for. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.users_user_id_patch(body, user_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureUser body: (required) - :param str user_id: (required) - :return: CloudEndureUser - If the method is called asynchronously, - returns the request thread. - """ - kwargs["_return_http_data_only"] = True - if kwargs.get("async_req"): - return self.users_user_id_patch_with_http_info( - body, user_id, **kwargs - ) # noqa: E501 - else: - (data) = self.users_user_id_patch_with_http_info( - body, user_id, **kwargs - ) # noqa: E501 - return data - - def users_user_id_patch_with_http_info(self, body, user_id, **kwargs): # noqa: E501 - """Modify user settings # noqa: E501 - - Configure which projects this user can receive e-mail notifications for. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.users_user_id_patch_with_http_info(body, user_id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param CloudEndureUser body: (required) - :param str user_id: (required) - :return: CloudEndureUser - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ["body", "user_id"] # noqa: E501 - all_params.append("async_req") - all_params.append("_return_http_data_only") - all_params.append("_preload_content") - all_params.append("_request_timeout") - - params = locals() - for key, val in six.iteritems(params["kwargs"]): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method users_user_id_patch" % key - ) - params[key] = val - del params["kwargs"] - # verify the required parameter 'body' is set - if "body" not in params or params["body"] is None: - raise ValueError( - "Missing the required parameter `body` when calling `users_user_id_patch`" - ) # noqa: E501 - # verify the required parameter 'user_id' is set - if "user_id" not in params or params["user_id"] is None: - raise ValueError( - "Missing the required parameter `user_id` when calling `users_user_id_patch`" - ) # noqa: E501 - - collection_formats = {} - - path_params = {} - if "user_id" in params: - path_params["userId"] = params["user_id"] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if "body" in params: - body_params = params["body"] - # HTTP header `Accept` - header_params["Accept"] = self.api_client.select_header_accept( - ["application/json"] - ) # noqa: E501 - - # HTTP header `Content-Type` - header_params[ - "Content-Type" - ] = self.api_client.select_header_content_type( # noqa: E501 - ["application/json"] - ) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - "/users/{userId}", - "PATCH", - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type="CloudEndureUser", # noqa: E501 - auth_settings=auth_settings, - async_req=params.get("async_req"), - _return_http_data_only=params.get("_return_http_data_only"), - _preload_content=params.get("_preload_content", True), - _request_timeout=params.get("_request_timeout"), - collection_formats=collection_formats, - ) diff --git a/cloudendure/cloudendure_api/api_client.py b/cloudendure/cloudendure_api/api_client.py deleted file mode 100644 index 370b547a6..000000000 --- a/cloudendure/cloudendure_api/api_client.py +++ /dev/null @@ -1,706 +0,0 @@ -# -*- coding: utf-8 -*- -"""Define the CloudEndure API client module.""" -from __future__ import absolute_import - -import datetime -import json -import mimetypes -import os -import re -import tempfile -from multiprocessing.pool import ThreadPool -from typing import Any, Dict - -# python 2 and python 3 compatibility library -import six -from six.moves.urllib.parse import quote - -import cloudendure.cloudendure_api.models -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api import rest -from cloudendure.cloudendure_api.configuration import Configuration - - -class ApiClient: - """Generic API client for Swagger client library builds. - - Swagger generic API client. This client handles the client- - server communication, and is invariant across implementations. Specifics of - the methods and models for each application are generated from the Swagger - templates. - - NOTE: This class is auto generated by the swagger code generator program. - Ref: https://github.com/swagger-api/swagger-codegen - Do not edit the class manually. - - :param configuration: .Configuration object for this client - :param header_name: a header to pass when making calls to the API. - :param header_value: a header value to pass when making calls to - the API. - :param cookie: a cookie to include in the header when making calls - to the API - - """ - - PRIMITIVE_TYPES = (float, bool, bytes, str, int) - NATIVE_TYPES_MAPPING = { - "int": int, - "long": int, - "float": float, - "str": str, - "bool": bool, - "date": datetime.date, - "datetime": datetime.datetime, - "object": object, - } - - def __init__( - self, - configuration: Configuration = None, - header_name: str = "", - header_value=None, - cookie=None, - ): - if configuration is None: - configuration = Configuration() - self.configuration = configuration - - self.pool = ThreadPool() - self.rest_client = rest.RESTClientObject(configuration) - self.default_headers: Dict[str, Any] = {} - if header_name is not None: - self.default_headers[header_name] = header_value - self.cookie = cookie - # Set default User-Agent. - self.user_agent = "cloudendure/0.1.0/python" - - def __del__(self): - self.pool.close() - self.pool.join() - - @property - def user_agent(self): - """User agent for this API client.""" - return self.default_headers["User-Agent"] - - @user_agent.setter - def user_agent(self, value): - self.default_headers["User-Agent"] = value - - def set_default_header(self, header_name, header_value): - self.default_headers[header_name] = header_value - - def __call_api( - self, - resource_path, - method, - path_params=None, - query_params=None, - header_params=None, - body=None, - post_params=None, - files=None, - response_type=None, - auth_settings=None, - _return_http_data_only=None, - collection_formats=None, - _preload_content=True, - _request_timeout=None, - ): - - config: Configuration = self.configuration - - # header parameters - header_params = header_params or {} - header_params.update(self.default_headers) - if self.cookie: - header_params["Cookie"] = self.cookie - if header_params: - header_params = self.sanitize_for_serialization(header_params) - header_params = dict( - self.parameters_to_tuples(header_params, collection_formats) - ) - - # path parameters - if path_params: - path_params = self.sanitize_for_serialization(path_params) - path_params = self.parameters_to_tuples(path_params, collection_formats) - for k, v in path_params: - # specified safe chars, encode everything - resource_path = resource_path.replace( - "{%s}" % k, quote(str(v), safe=config.safe_chars_for_path_param) - ) - - # query parameters - if query_params: - query_params = self.sanitize_for_serialization(query_params) - query_params = self.parameters_to_tuples(query_params, collection_formats) - - # post parameters - if post_params or files: - post_params = self.prepare_post_parameters(post_params, files) - post_params = self.sanitize_for_serialization(post_params) - post_params = self.parameters_to_tuples(post_params, collection_formats) - - # auth setting - self.update_params_for_auth(header_params, query_params, auth_settings) - - # body - if body: - body = self.sanitize_for_serialization(body) - - # request url - url = f"{self.configuration.host}{resource_path}" - - # perform request and return response - response_data = self.request( - method, - url, - query_params=query_params, - headers=header_params, - post_params=post_params, - body=body, - _preload_content=_preload_content, - _request_timeout=_request_timeout, - ) - - self.last_response = response_data - - return_data = response_data - if _preload_content: - # deserialize response data - if response_type: - return_data = self.deserialize(response_data, response_type) - else: - return_data = None - - if _return_http_data_only: - return return_data - else: - return (return_data, response_data.status, response_data.getheaders()) - - def sanitize_for_serialization(self, obj): - """Build a JSON POST object. - - If obj is None, return None. - If obj is str, int, long, float, bool, return directly. - If obj is datetime.datetime, datetime.date - convert to string in iso8601 format. - If obj is list, sanitize each element in the list. - If obj is dict, return the dict. - If obj is swagger model, return the properties dict. - - :param obj: The data to serialize. - :return: The serialized form of data. - - """ - if obj is None: - return None - elif isinstance(obj, self.PRIMITIVE_TYPES): - return obj - elif isinstance(obj, list): - return [self.sanitize_for_serialization(sub_obj) for sub_obj in obj] - elif isinstance(obj, tuple): - return tuple(self.sanitize_for_serialization(sub_obj) for sub_obj in obj) - elif isinstance(obj, (datetime.datetime, datetime.date)): - return obj.isoformat() - - if isinstance(obj, dict): - obj_dict = obj - else: - # Convert model obj to dict except - # attributes `swagger_types`, `attribute_map` - # and attributes which value is not None. - # Convert attribute name to json key in - # model definition for request. - obj_dict = { - obj.attribute_map[attr]: getattr(obj, attr) - for attr, _ in six.iteritems(obj.swagger_types) - if getattr(obj, attr) is not None - } - - return { - key: self.sanitize_for_serialization(val) - for key, val in six.iteritems(obj_dict) - } - - def deserialize(self, response, response_type): - """Deserialize the response into an object. - - :param response: RESTResponse object to be deserialized. - :param response_type: class literal for - deserialized object, or string of class name. - - :return: deserialized object. - - """ - # handle file downloading - # save response body into a tmp file and return the instance - if response_type == "file": - return self.__deserialize_file(response) - - # fetch data from response object - try: - data = json.loads(response.data) - except ValueError: - data = response.data - - return self.__deserialize(data, response_type) - - def __deserialize(self, data, klass): - """Deserialize dict, list, str into an object. - - :param data: dict, list or str. - :param klass: class literal, or string of class name. - - :return: object. - - """ - if data is None: - return None - - if type(klass) == str: - if klass.startswith("list["): - sub_kls = re.match(r"list\[(.*)\]", klass).group(1) - return [self.__deserialize(sub_data, sub_kls) for sub_data in data] - - if klass.startswith("dict("): - sub_kls = re.match(r"dict\(([^,]*), (.*)\)", klass).group(2) - return { - k: self.__deserialize(v, sub_kls) for k, v in six.iteritems(data) - } - - # convert str to class - if klass in self.NATIVE_TYPES_MAPPING: - klass = self.NATIVE_TYPES_MAPPING[klass] - else: - klass = getattr(cloudendure.cloudendure_api.models, klass) - - if klass in self.PRIMITIVE_TYPES: - return self.__deserialize_primitive(data, klass) - elif klass == object: - return self.__deserialize_object(data) - elif klass == datetime.date: - return self.__deserialize_date(data) - elif klass == datetime.datetime: - return self.__deserialize_datatime(data) - else: - return self.__deserialize_model(data, klass) - - def call_api( - self, - resource_path, - method, - path_params=None, - query_params=None, - header_params=None, - body=None, - post_params=None, - files=None, - response_type=None, - auth_settings=None, - async_req=None, - _return_http_data_only=None, - collection_formats=None, - _preload_content=True, - _request_timeout=None, - ): - """Make the HTTP request (synchronous) and returns deserialized data. - - To make an async request, set the async_req parameter. - - :param resource_path: Path to method endpoint. - :param method: Method to call. - :param path_params: Path parameters in the url. - :param query_params: Query parameters in the url. - :param header_params: Header parameters to be - placed in the request header. - :param body: Request body. - :param post_params dict: Request post form parameters, - for `application/x-www-form-urlencoded`, `multipart/form-data`. - :param auth_settings list: Auth Settings names for the request. - :param response: Response data type. - :param files dict: key -> filename, value -> filepath, - for `multipart/form-data`. - :param async_req bool: execute request asynchronously - :param _return_http_data_only: response data without head status code and headers - :param collection_formats: dict of collection formats for path, query, - header, and post parameters. - :param _preload_content: if False, the urllib3.HTTPResponse object will be returned without - reading/decoding response data. Default is True. - :param _request_timeout: timeout setting for this request. If one number provided, it will - be total request timeout. It can also be a pair (tuple) of (connection, read) timeouts. - :return: - If async_req parameter is True, - the request will be called asynchronously. - The method will return the request thread. - If parameter async_req is False or missing, - then the method will return the response directly. - - """ - if not async_req: - return self.__call_api( - resource_path, - method, - path_params, - query_params, - header_params, - body, - post_params, - files, - response_type, - auth_settings, - _return_http_data_only, - collection_formats, - _preload_content, - _request_timeout, - ) - else: - thread = self.pool.apply_async( - self.__call_api, - ( - resource_path, - method, - path_params, - query_params, - header_params, - body, - post_params, - files, - response_type, - auth_settings, - _return_http_data_only, - collection_formats, - _preload_content, - _request_timeout, - ), - ) - return thread - - def request( - self, - method, - url, - query_params=None, - headers=None, - post_params=None, - body=None, - _preload_content=True, - _request_timeout=None, - ): - """Makes the HTTP request using RESTClient.""" - if method == "GET": - return self.rest_client.GET( - url, - query_params=query_params, - _preload_content=_preload_content, - _request_timeout=_request_timeout, - headers=headers, - ) - elif method == "HEAD": - return self.rest_client.HEAD( - url, - query_params=query_params, - _preload_content=_preload_content, - _request_timeout=_request_timeout, - headers=headers, - ) - elif method == "OPTIONS": - return self.rest_client.OPTIONS( - url, - query_params=query_params, - headers=headers, - post_params=post_params, - _preload_content=_preload_content, - _request_timeout=_request_timeout, - body=body, - ) - elif method == "POST": - return self.rest_client.POST( - url, - query_params=query_params, - headers=headers, - post_params=post_params, - _preload_content=_preload_content, - _request_timeout=_request_timeout, - body=body, - ) - elif method == "PUT": - return self.rest_client.PUT( - url, - query_params=query_params, - headers=headers, - post_params=post_params, - _preload_content=_preload_content, - _request_timeout=_request_timeout, - body=body, - ) - elif method == "PATCH": - return self.rest_client.PATCH( - url, - query_params=query_params, - headers=headers, - post_params=post_params, - _preload_content=_preload_content, - _request_timeout=_request_timeout, - body=body, - ) - elif method == "DELETE": - return self.rest_client.DELETE( - url, - query_params=query_params, - headers=headers, - _preload_content=_preload_content, - _request_timeout=_request_timeout, - body=body, - ) - else: - raise ValueError( - "http method must be `GET`, `HEAD`, `OPTIONS`, `POST`, `PATCH`, `PUT` or `DELETE`." - ) - - def parameters_to_tuples(self, params, collection_formats): - """Get parameters as list of tuples, formatting collections. - - :param params: Parameters as dict or list of two-tuples - :param dict collection_formats: Parameter collection formats - :return: Parameters as list of tuples, collections formatted - - """ - new_params = [] - if collection_formats is None: - collection_formats = {} - for k, v in ( - six.iteritems(params) if isinstance(params, dict) else params - ): # noqa: E501 - if k in collection_formats: - collection_format = collection_formats[k] - if collection_format == "multi": - new_params.extend((k, value) for value in v) - else: - if collection_format == "ssv": - delimiter = " " - elif collection_format == "tsv": - delimiter = "\t" - elif collection_format == "pipes": - delimiter = "|" - else: # csv is the default - delimiter = "," - new_params.append((k, delimiter.join(str(value) for value in v))) - else: - new_params.append((k, v)) - return new_params - - def prepare_post_parameters(self, post_params=None, files=None): - """Build the form parameters. - - :param post_params: Normal form parameters. - :param files: File parameters. - :return: Form parameters with files. - - """ - params = [] - - if post_params: - params = post_params - - if files: - for k, v in six.iteritems(files): - if not v: - continue - file_names = v if type(v) is list else [v] - for n in file_names: - with open(n, "rb") as f: - filename = os.path.basename(f.name) - filedata = f.read() - mimetype = ( - mimetypes.guess_type(filename)[0] - or "application/octet-stream" - ) - params.append(tuple([k, tuple([filename, filedata, mimetype])])) - - return params - - def select_header_accept(self, accepts): - """Return the `Accept` based on an array of accepts provided. - - :param accepts: List of headers. - :return: Accept (e.g. application/json). - - """ - if not accepts: - return - - accepts = [x.lower() for x in accepts] - - if "application/json" in accepts: - return "application/json" - else: - return ", ".join(accepts) - - def select_header_content_type(self, content_types): - """Return the `Content-Type` based on an array of content_types provided. - - :param content_types: List of content-types. - :return: Content-Type (e.g. application/json). - - """ - if not content_types: - return "application/json" - - content_types = [x.lower() for x in content_types] - - if "application/json" in content_types or "*/*" in content_types: - return "application/json" - return content_types[0] - - def update_params_for_auth(self, headers, queries, auth_settings): - """Update the header and query params based on authentication setting. - - :param headers: Header parameters dict to be updated. - :param queries: Query parameters tuple list to be updated. - :param auth_settings: Authentication setting identifiers list. - - """ - if not auth_settings: - return - - for auth in auth_settings: - auth_setting = self.configuration.auth_settings().get(auth) - if auth_setting: - if not auth_setting["value"]: - continue - elif auth_setting["in"] == "header": - headers[auth_setting["key"]] = auth_setting["value"] - elif auth_setting["in"] == "query": - queries.append((auth_setting["key"], auth_setting["value"])) - else: - raise ValueError( - "Authentication token must be in `query` or `header`" - ) - - def __deserialize_file(self, response): - """Deserialize the body to a file. - - Saves response body into a file in a temporary folder, - using the filename from the `Content-Disposition` header if provided. - - :param response: RESTResponse. - :return: file path. - """ - fd, path = tempfile.mkstemp(dir=self.configuration.temp_folder_path) - os.close(fd) - os.remove(path) - - content_disposition = response.getheader("Content-Disposition") - if content_disposition: - filename = re.search( - r'filename=[\'"]?([^\'"\s]+)[\'"]?', content_disposition - ).group(1) - path = os.path.join(os.path.dirname(path), filename) - - with open(path, "wb") as f: - f.write(response.data) - - return path - - def __deserialize_primitive(self, data, klass): - """Deserializes string to primitive type. - - :param data: str. - :param klass: class literal. - - :return: int, long, float, str, bool. - """ - try: - return klass(data) - except UnicodeEncodeError: - return six.text_type(data) - except TypeError: - return data - - def __deserialize_object(self, value): - """Return a original value. - - :return: object. - """ - return value - - def __deserialize_date(self, string): - """Deserializes string to date. - - :param string: str. - :return: date. - """ - try: - from dateutil.parser import parse - - return parse(string).date() - except ImportError: - return string - except ValueError: - raise rest.ApiException( - status=0, reason=f"Failed to parse `{string}` as date object" - ) - - def __deserialize_datatime(self, string): - """Deserializes string to datetime. - - The string should be in iso8601 datetime format. - - :param string: str. - :return: datetime. - """ - try: - from dateutil.parser import parse - - return parse(string) - except ImportError: - return string - except ValueError: - raise rest.ApiException( - status=0, reason=(f"Failed to parse `{string}` as datetime object") - ) - - def __hasattr(self, object, name): - return name in object.__class__.__dict__ - - def __deserialize_model(self, data, klass): - """Deserializes list or dict to model. - - :param data: dict, list. - :param klass: class literal. - :return: model object. - """ - - if not klass.swagger_types and not self.__hasattr( - klass, "get_real_child_model" - ): - return data - - kwargs = {} - if klass.swagger_types is not None: - for attr, attr_type in six.iteritems(klass.swagger_types): - if ( - data is not None - and klass.attribute_map[attr] in data - and isinstance(data, (list, dict)) - ): - value = data[klass.attribute_map[attr]] - kwargs[attr] = self.__deserialize(value, attr_type) - - instance = klass(**kwargs) - - if ( - isinstance(instance, dict) - and klass.swagger_types is not None - and isinstance(data, dict) - ): - for key, value in data.items(): - if key not in klass.swagger_types: - instance[key] = value - if self.__hasattr(instance, "get_real_child_model"): - klass_name = instance.get_real_child_model(data) - if klass_name: - instance = self.__deserialize(data, klass_name) - return instance diff --git a/cloudendure/cloudendure_api/configuration.py b/cloudendure/cloudendure_api/configuration.py deleted file mode 100644 index 45a89a824..000000000 --- a/cloudendure/cloudendure_api/configuration.py +++ /dev/null @@ -1,366 +0,0 @@ -# -*- coding: utf-8 -*- -"""Define the CloudEndure API configuration.""" -from __future__ import absolute_import, print_function - -import copy -import logging -import multiprocessing -import os -import sys -from pathlib import Path -from typing import Any, Dict - -import requests -import six -import urllib3 -import yaml -from six.moves import http_client as httplib - - -class TypeWithDefault(type): - def __init__(cls, name, bases, dct): - super(TypeWithDefault, cls).__init__(name, bases, dct) - cls._default = None - - def __call__(cls): - if cls._default is None: - cls._default = type.__call__(cls) - return copy.copy(cls._default) - - def set_default(cls, default): - cls._default = copy.copy(default) - - -class Configuration(six.with_metaclass(TypeWithDefault, object)): - """NOTE: This class is auto generated by the swagger code generator program. - - Ref: https://github.com/swagger-api/swagger-codegen - Do not edit the class manually. - """ - - def __init__(self): - """Constructor""" - self.active_config = {} - - # Default Base url - _config_path = os.environ.get("CLOUDENDURE_CONFIG_PATH", "~/.cloudendure.yaml") - if _config_path.startswith("~"): - self.config_path = os.path.expanduser(_config_path) - _config = Path(self.config_path) - if not _config.exists(): - print( - "No CloudEndure YAML configuration found! Creating it at: (%s)", - self.config_path, - ) - self.write_yaml_config( - config={ - "host": "https://console.cloudendure.com", - "api_version": "latest", - "auth_ttl": "3600", - "username": "", - "password": "", - "token": "", - } - ) - self.update_config() - - self.host = "https://console.cloudendure.com/api/latest" - # Temp file folder for downloading files - self.temp_folder_path = None - - # Authentication Settings - # dict to store API key(s) - self.api_key = {"X-XSRF-TOKEN": ""} - # dict to store API prefix (e.g. Bearer) - self.api_key_prefix = {} - # Logging Settings - self.logger = {} - self.logger["package_logger"] = logging.getLogger("cloudendure_api") - self.logger["urllib3_logger"] = logging.getLogger("urllib3") - # Log format - self.logger_format = "%(asctime)s %(levelname)s %(message)s" - # Log stream handler - self.logger_stream_handler = None - # Log file handler - self.logger_file_handler = None - # Debug file location - self.logger_file = None - # Debug switch - self.debug = False - - # SSL/TLS verification - # Set this to false to skip verifying SSL certificate when calling API - # from https server. - self.verify_ssl = True - # Set this to customize the certificate file to verify the peer. - self.ssl_ca_cert = None - # client certificate file - self.cert_file = None - # client key file - self.key_file = None - # Set this to True/False to enable/disable SSL hostname verification. - self.assert_hostname = None - - # urllib3 connection pool's maximum number of connections saved - # per pool. urllib3 uses 1 connection as default value, but this is - # not the best value when you are making a lot of possibly parallel - # requests to the same host, which is often the case here. - # cpu_count * 5 is used as default value to increase performance. - self.connection_pool_maxsize = multiprocessing.cpu_count() * 5 - - # Proxy URL - self.proxy = None - # Safe chars for path_param - self.safe_chars_for_path_param = "" - - @property - def logger_file(self): - """Define the logger file getter. - - If the logger_file is None, then add stream handler and remove file - handler. Otherwise, add file handler and remove stream handler. - - :param value: The logger_file path. - :type: str - - """ - return self.__logger_file - - @logger_file.setter - def logger_file(self, value): - """Define the logger file setter. - - If the logger_file is None, then add stream handler and remove file - handler. Otherwise, add file handler and remove stream handler. - - :param value: The logger_file path. - :type: str - - """ - self.__logger_file = value - if self.__logger_file: - # If set logging file, - # then add file handler and remove stream handler. - self.logger_file_handler = logging.FileHandler(self.__logger_file) - self.logger_file_handler.setFormatter(self.logger_formatter) - for _, logger in six.iteritems(self.logger): - logger.addHandler(self.logger_file_handler) - if self.logger_stream_handler: - logger.removeHandler(self.logger_stream_handler) - else: - # If not set logging file, - # then add stream handler and remove file handler. - self.logger_stream_handler = logging.StreamHandler() - self.logger_stream_handler.setFormatter(self.logger_formatter) - for _, logger in six.iteritems(self.logger): - logger.addHandler(self.logger_stream_handler) - if self.logger_file_handler: - logger.removeHandler(self.logger_file_handler) - - @property - def debug(self): - """Get the Debug status - - :param value: The debug status, True or False. - :type: bool - - """ - return self.__debug - - @debug.setter - def debug(self, value): - """Set the Debug status. - - :param value: The debug status, True or False. - :type: bool - - """ - self.__debug = value - if self.__debug: - # if debug status is True, turn on debug logging - for _, logger in six.iteritems(self.logger): - logger.setLevel(logging.DEBUG) - # turn on httplib debug - httplib.HTTPConnection.debuglevel = 1 - else: - # if debug status is False, turn off debug logging, - # setting log level to default `logging.WARNING` - for _, logger in six.iteritems(self.logger): - logger.setLevel(logging.WARNING) - # turn off httplib debug - httplib.HTTPConnection.debuglevel = 0 - - @property - def logger_format(self): - """Define the logger format getter. - - The logger_formatter will be updated when sets logger_format. - - :param value: The format string. - :type: str - """ - return self.__logger_format - - @logger_format.setter - def logger_format(self, value): - """Define the logger format setter. - - The logger_formatter will be updated when sets logger_format. - - :param value: The format string. - :type: str - - """ - self.__logger_format = value - self.logger_formatter = logging.Formatter(self.__logger_format) - - def get_api_key_with_prefix(self, identifier: str) -> str: - """Get the API key (with prefix if set). - - :param identifier: The identifier of apiKey. - :return: The token for api key authentication. - - """ - if self.api_key.get(identifier) and self.api_key_prefix.get(identifier): - return f"{self.api_key_prefix[identifier]} {self.api_key[identifier]}" # noqa: E501 - if self.api_key.get(identifier): - return self.api_key[identifier] - return "" - - def get_basic_auth_token(self): - """Get HTTP basic authentication header (string). - - :return: The token for basic HTTP authentication. - - """ - return urllib3.util.make_headers( - basic_auth=f'{self.active_config.get("username", "")}:{self.active_config.get("password", "")}' - ).get("authorization") - - def auth_settings(self) -> Dict[str, Any]: - """Get the Auth Settings dict for api client. - - :return: The Auth Settings information dict. - - """ - return { - "api_key": { - "type": "api_key", - "in": "header", - "key": "X-XSRF-TOKEN", - "value": self.get_api_key_with_prefix("X-XSRF-TOKEN"), - } - } - - def to_debug_report(self) -> str: - """Get the essential information for debugging. - - :return: The report for debugging. - - """ - return ( - "Python SDK Debug Report:\n" - f"OS: {sys.platform}\n" - f"Python Version: {sys.version}\n" - "Version of the API: 5\n" - "SDK Package Version: 0.1.0" - ) - - def read_yaml_config(self): - """Read the CloudEndure YAML configuration file.""" - with open(self.config_path, "r") as yaml_stream: - try: - config = yaml.safe_load(yaml_stream) - except yaml.YAMLError as e: - config = {} - print(e) - return config - - def write_yaml_config(self, config): - """Write to the CloudEndure YAML configuration file.""" - with open(self.config_path, "w") as yaml_file: - try: - yaml.dump(config, yaml_file, default_flow_style=False) - return True - except Exception as e: - print( - f"Exception encountered while writing the CloudEndure YAML configuration file - ({e})" - ) - return False - - def update_yaml_config(self, kwargs): - _config = self.read_yaml_config() - _config.update(kwargs) - self.write_yaml_config(_config) - self.update_config() - - def get_env_vars(self, prefix="cloudendure"): - """Get all environment variables starting with CLOUDENDURE_.""" - prefix = prefix.strip("_") - env_vars = { - x[0].lower().lstrip(prefix.lower()).strip("_"): x[1] - for x in os.environ.items() - if x[0].lower().startswith(prefix.lower()) - } - print(env_vars) - return env_vars - - def refresh_auth(self, username="", password=""): - """Refresh the authentication token with the CloudEndure API. - - Args: - username (str): The CloudEndure username to be used. - Defaults to the environment specific default. - password (str): The CloudEndure password to be used. - Defaults to the environment specific default. - - Attributes: - endpoint (str): The CloudEndure API endpoint to be used. - _username (str): The CloudEndure API username. - _password (str): The CloudEndure API password. - _auth (dict): The CloudEndure API username/password dictionary map. - response (requests.Response): The CloudEndure API login request response object. - _xsrf_token (str): The XSRF token to be used for subsequent API requests. - - """ - endpoint: str = "login" - _username: str = self.active_config.get("username", "") or username - _password: str = self.active_config.get("password", "") or password - _auth: Dict[str, str] = {"username": _username, "password": _password} - - # Attempt to login to the CloudEndure API via a POST request. - response: requests.Response = requests.post( - f"{self.host}/{endpoint}", json=_auth - ) - print("response: ", response, response.status_code) - - # Check whether or not the request was successful. - if response.status_code not in [200, 307]: - raise Exception() - - print("response: ", response, response.cookies) - _xsrf_token: str = str(response.cookies["XSRF-TOKEN"]) - - # Strip the XSRF token of wrapping double-quotes from the cookie. - if _xsrf_token.startswith('"') and _xsrf_token.endswith('"'): - _xsrf_token: str = _xsrf_token[1:-1] - - # Set the XSRF token data on the CloudEndureAPI object. - return _xsrf_token - - def update_config(self): - self.yaml_config_contents = self.read_yaml_config() - self.env_config = self.get_env_vars() - self.active_config = {**self.yaml_config_contents, **self.env_config} - - def update_token(self, token): - self.update_yaml_config({"token": token}) - - def get_var(self, var): - """Get the specified environment or config variable.""" - env_var = os.environ.get(var.upper(), "") - - if not env_var: - env_var = self.yaml_config_contents.get(var.lower(), "") - - return env_var diff --git a/cloudendure/cloudendure_api/models/__init__.py b/cloudendure/cloudendure_api/models/__init__.py deleted file mode 100644 index 28b9ad400..000000000 --- a/cloudendure/cloudendure_api/models/__init__.py +++ /dev/null @@ -1,230 +0,0 @@ -# coding: utf-8 - -# flake8: noqa -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -# import models into model package -from cloudendure.cloudendure_api.models.cloud_endure_account import CloudEndureAccount -from cloudendure.cloudendure_api.models.cloud_endure_account_request import ( - CloudEndureAccountRequest, -) -from cloudendure.cloudendure_api.models.cloud_endure_account_request_list import ( - CloudEndureAccountRequestList, -) -from cloudendure.cloudendure_api.models.cloud_endure_accounts_list import ( - CloudEndureAccountsList, -) -from cloudendure.cloudendure_api.models.cloud_endure_agent_next_replication_init_request import ( - CloudEndureAgentNextReplicationInitRequest, -) -from cloudendure.cloudendure_api.models.cloud_endure_all_project_features import ( - CloudEndureAllProjectFeatures, -) -from cloudendure.cloudendure_api.models.cloud_endure_audit_log import ( - CloudEndureAuditLog, -) -from cloudendure.cloudendure_api.models.cloud_endure_audit_log_changed_field import ( - CloudEndureAuditLogChangedField, -) -from cloudendure.cloudendure_api.models.cloud_endure_audit_log_entry import ( - CloudEndureAuditLogEntry, -) -from cloudendure.cloudendure_api.models.cloud_endure_bandwidth_throttling import ( - CloudEndureBandwidthThrottling, -) -from cloudendure.cloudendure_api.models.cloud_endure_blueprint import ( - CloudEndureBlueprint, -) -from cloudendure.cloudendure_api.models.cloud_endure_blueprint_list import ( - CloudEndureBlueprintList, -) -from cloudendure.cloudendure_api.models.cloud_endure_cloud import CloudEndureCloud -from cloudendure.cloudendure_api.models.cloud_endure_cloud_credentials import ( - CloudEndureCloudCredentials, -) -from cloudendure.cloudendure_api.models.cloud_endure_cloud_credentials_list import ( - CloudEndureCloudCredentialsList, -) -from cloudendure.cloudendure_api.models.cloud_endure_cloud_credentials_request import ( - CloudEndureCloudCredentialsRequest, -) -from cloudendure.cloudendure_api.models.cloud_endure_clouds_list import ( - CloudEndureCloudsList, -) -from cloudendure.cloudendure_api.models.cloud_endure_compute_location import ( - CloudEndureComputeLocation, -) -from cloudendure.cloudendure_api.models.cloud_endure_configurations import ( - CloudEndureConfigurations, -) -from cloudendure.cloudendure_api.models.cloud_endure_configurations_list import ( - CloudEndureConfigurationsList, -) -from cloudendure.cloudendure_api.models.cloud_endure_error import CloudEndureError -from cloudendure.cloudendure_api.models.cloud_endure_extended_account_info import ( - CloudEndureExtendedAccountInfo, -) -from cloudendure.cloudendure_api.models.cloud_endure_find_files_parameters import ( - CloudEndureFindFilesParameters, -) -from cloudendure.cloudendure_api.models.cloud_endure_find_files_result import ( - CloudEndureFindFilesResult, -) -from cloudendure.cloudendure_api.models.cloud_endure_find_files_result_pit import ( - CloudEndureFindFilesResultPit, -) -from cloudendure.cloudendure_api.models.cloud_endure_find_files_results import ( - CloudEndureFindFilesResults, -) -from cloudendure.cloudendure_api.models.cloud_endure_gcp_machines_finance_data import ( - CloudEndureGcpMachinesFinanceData, -) -from cloudendure.cloudendure_api.models.cloud_endure_identity_provider_redirect_response import ( - CloudEndureIdentityProviderRedirectResponse, -) -from cloudendure.cloudendure_api.models.cloud_endure_initialization_step import ( - CloudEndureInitializationStep, -) -from cloudendure.cloudendure_api.models.cloud_endure_job import CloudEndureJob -from cloudendure.cloudendure_api.models.cloud_endure_jobs_list import ( - CloudEndureJobsList, -) -from cloudendure.cloudendure_api.models.cloud_endure_key_value_list import ( - CloudEndureKeyValueList, -) -from cloudendure.cloudendure_api.models.cloud_endure_launch_machines_parameters import ( - CloudEndureLaunchMachinesParameters, -) -from cloudendure.cloudendure_api.models.cloud_endure_license import CloudEndureLicense -from cloudendure.cloudendure_api.models.cloud_endure_license_features import ( - CloudEndureLicenseFeatures, -) -from cloudendure.cloudendure_api.models.cloud_endure_license_list import ( - CloudEndureLicenseList, -) -from cloudendure.cloudendure_api.models.cloud_endure_list_users_result import ( - CloudEndureListUsersResult, -) -from cloudendure.cloudendure_api.models.cloud_endure_list_users_results import ( - CloudEndureListUsersResults, -) -from cloudendure.cloudendure_api.models.cloud_endure_logical_location import ( - CloudEndureLogicalLocation, -) -from cloudendure.cloudendure_api.models.cloud_endure_machine import CloudEndureMachine -from cloudendure.cloudendure_api.models.cloud_endure_machine_and_path_and_point_in_time import ( - CloudEndureMachineAndPathAndPointInTime, -) -from cloudendure.cloudendure_api.models.cloud_endure_machine_and_point_in_time import ( - CloudEndureMachineAndPointInTime, -) -from cloudendure.cloudendure_api.models.cloud_endure_machine_replication_configuration import ( - CloudEndureMachineReplicationConfiguration, -) -from cloudendure.cloudendure_api.models.cloud_endure_machine_snapshot_credits import ( - CloudEndureMachineSnapshotCredits, -) -from cloudendure.cloudendure_api.models.cloud_endure_machine_throttle_time_seconds import ( - CloudEndureMachineThrottleTimeSeconds, -) -from cloudendure.cloudendure_api.models.cloud_endure_machines_list import ( - CloudEndureMachinesList, -) -from cloudendure.cloudendure_api.models.cloud_endure_machines_list_invalid_i_ds_and_job import ( - CloudEndureMachinesListInvalidIDsAndJob, -) -from cloudendure.cloudendure_api.models.cloud_endure_network_interface import ( - CloudEndureNetworkInterface, -) -from cloudendure.cloudendure_api.models.cloud_endure_point_in_time import ( - CloudEndurePointInTime, -) -from cloudendure.cloudendure_api.models.cloud_endure_point_in_time_list import ( - CloudEndurePointInTimeList, -) -from cloudendure.cloudendure_api.models.cloud_endure_project import CloudEndureProject -from cloudendure.cloudendure_api.models.cloud_endure_project_storage import ( - CloudEndureProjectStorage, -) -from cloudendure.cloudendure_api.models.cloud_endure_projects_and_users import ( - CloudEndureProjectsAndUsers, -) -from cloudendure.cloudendure_api.models.cloud_endure_projects_list import ( - CloudEndureProjectsList, -) -from cloudendure.cloudendure_api.models.cloud_endure_recovery_plan import ( - CloudEndureRecoveryPlan, -) -from cloudendure.cloudendure_api.models.cloud_endure_recovery_plan_list import ( - CloudEndureRecoveryPlanList, -) -from cloudendure.cloudendure_api.models.cloud_endure_recovery_plan_step import ( - CloudEndureRecoveryPlanStep, -) -from cloudendure.cloudendure_api.models.cloud_endure_recovery_plan_steps import ( - CloudEndureRecoveryPlanSteps, -) -from cloudendure.cloudendure_api.models.cloud_endure_region import CloudEndureRegion -from cloudendure.cloudendure_api.models.cloud_endure_regions_list import ( - CloudEndureRegionsList, -) -from cloudendure.cloudendure_api.models.cloud_endure_replica import CloudEndureReplica -from cloudendure.cloudendure_api.models.cloud_endure_replication_configuration import ( - CloudEndureReplicationConfiguration, -) -from cloudendure.cloudendure_api.models.cloud_endure_replication_configuration_list import ( - CloudEndureReplicationConfigurationList, -) -from cloudendure.cloudendure_api.models.cloud_endure_replication_server_config import ( - CloudEndureReplicationServerConfig, -) -from cloudendure.cloudendure_api.models.cloud_endure_restore_files_parameters import ( - CloudEndureRestoreFilesParameters, -) -from cloudendure.cloudendure_api.models.cloud_endure_saml_settings import ( - CloudEndureSamlSettings, -) -from cloudendure.cloudendure_api.models.cloud_endure_security_group import ( - CloudEndureSecurityGroup, -) -from cloudendure.cloudendure_api.models.cloud_endure_storage_location import ( - CloudEndureStorageLocation, -) -from cloudendure.cloudendure_api.models.cloud_endure_subnet import CloudEndureSubnet -from cloudendure.cloudendure_api.models.cloud_endure_time import CloudEndureTime -from cloudendure.cloudendure_api.models.cloud_endure_updateable_scripts import ( - CloudEndureUpdateableScripts, -) -from cloudendure.cloudendure_api.models.cloud_endure_upgrade_counter_delay import ( - CloudEndureUpgradeCounterDelay, -) -from cloudendure.cloudendure_api.models.cloud_endure_usage import CloudEndureUsage -from cloudendure.cloudendure_api.models.cloud_endure_usage_list import ( - CloudEndureUsageList, -) -from cloudendure.cloudendure_api.models.cloud_endure_user import CloudEndureUser -from cloudendure.cloudendure_api.models.cloud_endure_user_report import ( - CloudEndureUserReport, -) -from cloudendure.cloudendure_api.models.cloud_endure_user_reports import ( - CloudEndureUserReports, -) -from cloudendure.cloudendure_api.models.cloud_endure_users_and_roles import ( - CloudEndureUsersAndRoles, -) -from cloudendure.cloudendure_api.models.cloud_endure_users_list import ( - CloudEndureUsersList, -) -from cloudendure.cloudendure_api.models.cloud_endure_v_center_subnet import ( - CloudEndureVCenterSubnet, -) diff --git a/cloudendure/cloudendure_api/models/cloud_endure_account.py b/cloudendure/cloudendure_api/models/cloud_endure_account.py deleted file mode 100644 index 270e165b2..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_account.py +++ /dev/null @@ -1,512 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_saml_settings import ( - CloudEndureSamlSettings, -) # noqa: F401,E501 - - -class CloudEndureAccount: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "invite_token_expiry_minutes": "int", - "allow_archiving_default_value": "bool", - "per_account_user_pool": "bool", - "is_gcp_self_service": "bool", - "is_dr_trial": "bool", - "is_arm_self_service": "bool", - "is_aws_self_service": "bool", - "saml_settings": "CloudEndureSamlSettings", - "is_right_sizing_enabled": "bool", - "default_license_type": "str", - "max_projects_allowed": "int", - "ce_admin_properties": "object", - "owner_id": "str", - "is_med_one": "bool", - "id": "str", - } - - attribute_map = { - "invite_token_expiry_minutes": "inviteTokenExpiryMinutes", - "allow_archiving_default_value": "allowArchivingDefaultValue", - "per_account_user_pool": "perAccountUserPool", - "is_gcp_self_service": "isGcpSelfService", - "is_dr_trial": "isDrTrial", - "is_arm_self_service": "isArmSelfService", - "is_aws_self_service": "isAwsSelfService", - "saml_settings": "samlSettings", - "is_right_sizing_enabled": "isRightSizingEnabled", - "default_license_type": "defaultLicenseType", - "max_projects_allowed": "maxProjectsAllowed", - "ce_admin_properties": "ceAdminProperties", - "owner_id": "ownerId", - "is_med_one": "isMedOne", - "id": "id", - } - - def __init__( - self, - invite_token_expiry_minutes=None, - allow_archiving_default_value=None, - per_account_user_pool=None, - is_gcp_self_service=None, - is_dr_trial=None, - is_arm_self_service=None, - is_aws_self_service=None, - saml_settings=None, - is_right_sizing_enabled=None, - default_license_type=None, - max_projects_allowed=None, - ce_admin_properties=None, - owner_id=None, - is_med_one=None, - id=None, - ): # noqa: E501 - """CloudEndureAccount - a model defined in Swagger""" # noqa: E501 - self._invite_token_expiry_minutes = None - self._allow_archiving_default_value = None - self._per_account_user_pool = None - self._is_gcp_self_service = None - self._is_dr_trial = None - self._is_arm_self_service = None - self._is_aws_self_service = None - self._saml_settings = None - self._is_right_sizing_enabled = None - self._default_license_type = None - self._max_projects_allowed = None - self._ce_admin_properties = None - self._owner_id = None - self._is_med_one = None - self._id = None - self.discriminator = None - if invite_token_expiry_minutes is not None: - self.invite_token_expiry_minutes = invite_token_expiry_minutes - if allow_archiving_default_value is not None: - self.allow_archiving_default_value = allow_archiving_default_value - if per_account_user_pool is not None: - self.per_account_user_pool = per_account_user_pool - if is_gcp_self_service is not None: - self.is_gcp_self_service = is_gcp_self_service - if is_dr_trial is not None: - self.is_dr_trial = is_dr_trial - if is_arm_self_service is not None: - self.is_arm_self_service = is_arm_self_service - if is_aws_self_service is not None: - self.is_aws_self_service = is_aws_self_service - if saml_settings is not None: - self.saml_settings = saml_settings - if is_right_sizing_enabled is not None: - self.is_right_sizing_enabled = is_right_sizing_enabled - if default_license_type is not None: - self.default_license_type = default_license_type - if max_projects_allowed is not None: - self.max_projects_allowed = max_projects_allowed - if ce_admin_properties is not None: - self.ce_admin_properties = ce_admin_properties - if owner_id is not None: - self.owner_id = owner_id - if is_med_one is not None: - self.is_med_one = is_med_one - if id is not None: - self.id = id - - @property - def invite_token_expiry_minutes(self): - """Gets the invite_token_expiry_minutes of this CloudEndureAccount. # noqa: E501 - - - :return: The invite_token_expiry_minutes of this CloudEndureAccount. # noqa: E501 - :rtype: int - """ - return self._invite_token_expiry_minutes - - @invite_token_expiry_minutes.setter - def invite_token_expiry_minutes(self, invite_token_expiry_minutes): - """Sets the invite_token_expiry_minutes of this CloudEndureAccount. - - - :param invite_token_expiry_minutes: The invite_token_expiry_minutes of this CloudEndureAccount. # noqa: E501 - :type: int - """ - - self._invite_token_expiry_minutes = invite_token_expiry_minutes - - @property - def allow_archiving_default_value(self): - """Gets the allow_archiving_default_value of this CloudEndureAccount. # noqa: E501 - - - :return: The allow_archiving_default_value of this CloudEndureAccount. # noqa: E501 - :rtype: bool - """ - return self._allow_archiving_default_value - - @allow_archiving_default_value.setter - def allow_archiving_default_value(self, allow_archiving_default_value): - """Sets the allow_archiving_default_value of this CloudEndureAccount. - - - :param allow_archiving_default_value: The allow_archiving_default_value of this CloudEndureAccount. # noqa: E501 - :type: bool - """ - - self._allow_archiving_default_value = allow_archiving_default_value - - @property - def per_account_user_pool(self): - """Gets the per_account_user_pool of this CloudEndureAccount. # noqa: E501 - - - :return: The per_account_user_pool of this CloudEndureAccount. # noqa: E501 - :rtype: bool - """ - return self._per_account_user_pool - - @per_account_user_pool.setter - def per_account_user_pool(self, per_account_user_pool): - """Sets the per_account_user_pool of this CloudEndureAccount. - - - :param per_account_user_pool: The per_account_user_pool of this CloudEndureAccount. # noqa: E501 - :type: bool - """ - - self._per_account_user_pool = per_account_user_pool - - @property - def is_gcp_self_service(self): - """Gets the is_gcp_self_service of this CloudEndureAccount. # noqa: E501 - - - :return: The is_gcp_self_service of this CloudEndureAccount. # noqa: E501 - :rtype: bool - """ - return self._is_gcp_self_service - - @is_gcp_self_service.setter - def is_gcp_self_service(self, is_gcp_self_service): - """Sets the is_gcp_self_service of this CloudEndureAccount. - - - :param is_gcp_self_service: The is_gcp_self_service of this CloudEndureAccount. # noqa: E501 - :type: bool - """ - - self._is_gcp_self_service = is_gcp_self_service - - @property - def is_dr_trial(self): - """Gets the is_dr_trial of this CloudEndureAccount. # noqa: E501 - - - :return: The is_dr_trial of this CloudEndureAccount. # noqa: E501 - :rtype: bool - """ - return self._is_dr_trial - - @is_dr_trial.setter - def is_dr_trial(self, is_dr_trial): - """Sets the is_dr_trial of this CloudEndureAccount. - - - :param is_dr_trial: The is_dr_trial of this CloudEndureAccount. # noqa: E501 - :type: bool - """ - - self._is_dr_trial = is_dr_trial - - @property - def is_arm_self_service(self): - """Gets the is_arm_self_service of this CloudEndureAccount. # noqa: E501 - - - :return: The is_arm_self_service of this CloudEndureAccount. # noqa: E501 - :rtype: bool - """ - return self._is_arm_self_service - - @is_arm_self_service.setter - def is_arm_self_service(self, is_arm_self_service): - """Sets the is_arm_self_service of this CloudEndureAccount. - - - :param is_arm_self_service: The is_arm_self_service of this CloudEndureAccount. # noqa: E501 - :type: bool - """ - - self._is_arm_self_service = is_arm_self_service - - @property - def is_aws_self_service(self): - """Gets the is_aws_self_service of this CloudEndureAccount. # noqa: E501 - - - :return: The is_aws_self_service of this CloudEndureAccount. # noqa: E501 - :rtype: bool - """ - return self._is_aws_self_service - - @is_aws_self_service.setter - def is_aws_self_service(self, is_aws_self_service): - """Sets the is_aws_self_service of this CloudEndureAccount. - - - :param is_aws_self_service: The is_aws_self_service of this CloudEndureAccount. # noqa: E501 - :type: bool - """ - - self._is_aws_self_service = is_aws_self_service - - @property - def saml_settings(self): - """Gets the saml_settings of this CloudEndureAccount. # noqa: E501 - - - :return: The saml_settings of this CloudEndureAccount. # noqa: E501 - :rtype: CloudEndureSamlSettings - """ - return self._saml_settings - - @saml_settings.setter - def saml_settings(self, saml_settings): - """Sets the saml_settings of this CloudEndureAccount. - - - :param saml_settings: The saml_settings of this CloudEndureAccount. # noqa: E501 - :type: CloudEndureSamlSettings - """ - - self._saml_settings = saml_settings - - @property - def is_right_sizing_enabled(self): - """Gets the is_right_sizing_enabled of this CloudEndureAccount. # noqa: E501 - - - :return: The is_right_sizing_enabled of this CloudEndureAccount. # noqa: E501 - :rtype: bool - """ - return self._is_right_sizing_enabled - - @is_right_sizing_enabled.setter - def is_right_sizing_enabled(self, is_right_sizing_enabled): - """Sets the is_right_sizing_enabled of this CloudEndureAccount. - - - :param is_right_sizing_enabled: The is_right_sizing_enabled of this CloudEndureAccount. # noqa: E501 - :type: bool - """ - - self._is_right_sizing_enabled = is_right_sizing_enabled - - @property - def default_license_type(self): - """Gets the default_license_type of this CloudEndureAccount. # noqa: E501 - - - :return: The default_license_type of this CloudEndureAccount. # noqa: E501 - :rtype: str - """ - return self._default_license_type - - @default_license_type.setter - def default_license_type(self, default_license_type): - """Sets the default_license_type of this CloudEndureAccount. - - - :param default_license_type: The default_license_type of this CloudEndureAccount. # noqa: E501 - :type: str - """ - allowed_values = ["MIGRATION", "DR", "DR_TRIAL", "BACKUP"] # noqa: E501 - if default_license_type not in allowed_values: - raise ValueError( - "Invalid value for `default_license_type` ({0}), must be one of {1}".format( # noqa: E501 - default_license_type, allowed_values - ) - ) - - self._default_license_type = default_license_type - - @property - def max_projects_allowed(self): - """Gets the max_projects_allowed of this CloudEndureAccount. # noqa: E501 - - - :return: The max_projects_allowed of this CloudEndureAccount. # noqa: E501 - :rtype: int - """ - return self._max_projects_allowed - - @max_projects_allowed.setter - def max_projects_allowed(self, max_projects_allowed): - """Sets the max_projects_allowed of this CloudEndureAccount. - - - :param max_projects_allowed: The max_projects_allowed of this CloudEndureAccount. # noqa: E501 - :type: int - """ - - self._max_projects_allowed = max_projects_allowed - - @property - def ce_admin_properties(self): - """Gets the ce_admin_properties of this CloudEndureAccount. # noqa: E501 - - For internal use. # noqa: E501 - - :return: The ce_admin_properties of this CloudEndureAccount. # noqa: E501 - :rtype: object - """ - return self._ce_admin_properties - - @ce_admin_properties.setter - def ce_admin_properties(self, ce_admin_properties): - """Sets the ce_admin_properties of this CloudEndureAccount. - - For internal use. # noqa: E501 - - :param ce_admin_properties: The ce_admin_properties of this CloudEndureAccount. # noqa: E501 - :type: object - """ - - self._ce_admin_properties = ce_admin_properties - - @property - def owner_id(self): - """Gets the owner_id of this CloudEndureAccount. # noqa: E501 - - Account Owner (a User) # noqa: E501 - - :return: The owner_id of this CloudEndureAccount. # noqa: E501 - :rtype: str - """ - return self._owner_id - - @owner_id.setter - def owner_id(self, owner_id): - """Sets the owner_id of this CloudEndureAccount. - - Account Owner (a User) # noqa: E501 - - :param owner_id: The owner_id of this CloudEndureAccount. # noqa: E501 - :type: str - """ - - self._owner_id = owner_id - - @property - def is_med_one(self): - """Gets the is_med_one of this CloudEndureAccount. # noqa: E501 - - - :return: The is_med_one of this CloudEndureAccount. # noqa: E501 - :rtype: bool - """ - return self._is_med_one - - @is_med_one.setter - def is_med_one(self, is_med_one): - """Sets the is_med_one of this CloudEndureAccount. - - - :param is_med_one: The is_med_one of this CloudEndureAccount. # noqa: E501 - :type: bool - """ - - self._is_med_one = is_med_one - - @property - def id(self): - """Gets the id of this CloudEndureAccount. # noqa: E501 - - UUID of the account # noqa: E501 - - :return: The id of this CloudEndureAccount. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this CloudEndureAccount. - - UUID of the account # noqa: E501 - - :param id: The id of this CloudEndureAccount. # noqa: E501 - :type: str - """ - - self._id = id - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureAccount, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureAccount): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_account_request.py b/cloudendure/cloudendure_api/models/cloud_endure_account_request.py deleted file mode 100644 index b90938972..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_account_request.py +++ /dev/null @@ -1,232 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureAccountRequest: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "id": "str", - "request_type": "str", - "email": "str", - "request_link": "str", - "registration_token": "str", - } - - attribute_map = { - "id": "id", - "request_type": "request_type", - "email": "email", - "request_link": "request_link", - "registration_token": "registration_token", - } - - def __init__( - self, - id=None, - request_type=None, - email=None, - request_link=None, - registration_token=None, - ): # noqa: E501 - """CloudEndureAccountRequest - a model defined in Swagger""" # noqa: E501 - self._id = None - self._request_type = None - self._email = None - self._request_link = None - self._registration_token = None - self.discriminator = None - if id is not None: - self.id = id - if request_type is not None: - self.request_type = request_type - if email is not None: - self.email = email - if request_link is not None: - self.request_link = request_link - if registration_token is not None: - self.registration_token = registration_token - - @property - def id(self): - """Gets the id of this CloudEndureAccountRequest. # noqa: E501 - - - :return: The id of this CloudEndureAccountRequest. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this CloudEndureAccountRequest. - - - :param id: The id of this CloudEndureAccountRequest. # noqa: E501 - :type: str - """ - - self._id = id - - @property - def request_type(self): - """Gets the request_type of this CloudEndureAccountRequest. # noqa: E501 - - - :return: The request_type of this CloudEndureAccountRequest. # noqa: E501 - :rtype: str - """ - return self._request_type - - @request_type.setter - def request_type(self, request_type): - """Sets the request_type of this CloudEndureAccountRequest. - - - :param request_type: The request_type of this CloudEndureAccountRequest. # noqa: E501 - :type: str - """ - allowed_values = ["REGISTER", "RESET_PASSWORD"] # noqa: E501 - if request_type not in allowed_values: - raise ValueError( - "Invalid value for `request_type` ({0}), must be one of {1}".format( # noqa: E501 - request_type, allowed_values - ) - ) - - self._request_type = request_type - - @property - def email(self): - """Gets the email of this CloudEndureAccountRequest. # noqa: E501 - - - :return: The email of this CloudEndureAccountRequest. # noqa: E501 - :rtype: str - """ - return self._email - - @email.setter - def email(self, email): - """Sets the email of this CloudEndureAccountRequest. - - - :param email: The email of this CloudEndureAccountRequest. # noqa: E501 - :type: str - """ - - self._email = email - - @property - def request_link(self): - """Gets the request_link of this CloudEndureAccountRequest. # noqa: E501 - - - :return: The request_link of this CloudEndureAccountRequest. # noqa: E501 - :rtype: str - """ - return self._request_link - - @request_link.setter - def request_link(self, request_link): - """Sets the request_link of this CloudEndureAccountRequest. - - - :param request_link: The request_link of this CloudEndureAccountRequest. # noqa: E501 - :type: str - """ - - self._request_link = request_link - - @property - def registration_token(self): - """Gets the registration_token of this CloudEndureAccountRequest. # noqa: E501 - - - :return: The registration_token of this CloudEndureAccountRequest. # noqa: E501 - :rtype: str - """ - return self._registration_token - - @registration_token.setter - def registration_token(self, registration_token): - """Sets the registration_token of this CloudEndureAccountRequest. - - - :param registration_token: The registration_token of this CloudEndureAccountRequest. # noqa: E501 - :type: str - """ - - self._registration_token = registration_token - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureAccountRequest, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureAccountRequest): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_account_request_list.py b/cloudendure/cloudendure_api/models/cloud_endure_account_request_list.py deleted file mode 100644 index 470646fb0..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_account_request_list.py +++ /dev/null @@ -1,103 +0,0 @@ -# coding: utf-8 -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_account_request import ( - CloudEndureAccountRequest, -) # noqa: F401,E501 - - -class CloudEndureAccountRequestList: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"items": "list[CloudEndureAccountRequest]"} - - attribute_map = {"items": "items"} - - def __init__(self, items=None): # noqa: E501 - """CloudEndureAccountRequestList - a model defined in Swagger.""" # noqa: E501 - self._items = None - self.discriminator = None - if items is not None: - self.items = items - - @property - def items(self): - """Gets the items of this CloudEndureAccountRequestList. # noqa: E501 - - - :return: The items of this CloudEndureAccountRequestList. # noqa: E501 - :rtype: list[CloudEndureAccountRequest] - """ - return self._items - - @items.setter - def items(self, items): - """Set the items of this CloudEndureAccountRequestList. - - - :param items: The items of this CloudEndureAccountRequestList. # noqa: E501 - :type: list[CloudEndureAccountRequest] - """ - - self._items = items - - def to_dict(self): - """Return the model properties as a dict.""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureAccountRequestList, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureAccountRequestList): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_accounts_list.py b/cloudendure/cloudendure_api/models/cloud_endure_accounts_list.py deleted file mode 100644 index 29280f953..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_accounts_list.py +++ /dev/null @@ -1,114 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_account import ( - CloudEndureAccount, -) # noqa: F401,E501 - - -class CloudEndureAccountsList: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"items": "list[CloudEndureAccount]"} - - attribute_map = {"items": "items"} - - def __init__(self, items=None): # noqa: E501 - """CloudEndureAccountsList - a model defined in Swagger""" # noqa: E501 - self._items = None - self.discriminator = None - if items is not None: - self.items = items - - @property - def items(self): - """Gets the items of this CloudEndureAccountsList. # noqa: E501 - - - :return: The items of this CloudEndureAccountsList. # noqa: E501 - :rtype: list[CloudEndureAccount] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureAccountsList. - - - :param items: The items of this CloudEndureAccountsList. # noqa: E501 - :type: list[CloudEndureAccount] - """ - - self._items = items - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureAccountsList, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureAccountsList): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_agent_next_replication_init_request.py b/cloudendure/cloudendure_api/models/cloud_endure_agent_next_replication_init_request.py deleted file mode 100644 index d68c0d720..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_agent_next_replication_init_request.py +++ /dev/null @@ -1,110 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureAgentNextReplicationInitRequest: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"duration_from_now": "str"} - - attribute_map = {"duration_from_now": "durationFromNow"} - - def __init__(self, duration_from_now=None): # noqa: E501 - """CloudEndureAgentNextReplicationInitRequest - a model defined in Swagger""" # noqa: E501 - self._duration_from_now = None - self.discriminator = None - if duration_from_now is not None: - self.duration_from_now = duration_from_now - - @property - def duration_from_now(self): - """Gets the duration_from_now of this CloudEndureAgentNextReplicationInitRequest. # noqa: E501 - - - :return: The duration_from_now of this CloudEndureAgentNextReplicationInitRequest. # noqa: E501 - :rtype: str - """ - return self._duration_from_now - - @duration_from_now.setter - def duration_from_now(self, duration_from_now): - """Sets the duration_from_now of this CloudEndureAgentNextReplicationInitRequest. - - - :param duration_from_now: The duration_from_now of this CloudEndureAgentNextReplicationInitRequest. # noqa: E501 - :type: str - """ - - self._duration_from_now = duration_from_now - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureAgentNextReplicationInitRequest, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureAgentNextReplicationInitRequest): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_all_project_features.py b/cloudendure/cloudendure_api/models/cloud_endure_all_project_features.py deleted file mode 100644 index 4c1c809cb..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_all_project_features.py +++ /dev/null @@ -1,968 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureAllProjectFeatures: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "google": "bool", - "is_demo": "bool", - "windows_converters": "bool", - "force_reversed_handshake_direction": "bool", - "no_converters": "bool", - "vio": "bool", - "no_cloud": "bool", - "consistent_snapshot_creation_interval_min": "int", - "no_public_ips": "bool", - "daily_pit_number": "int", - "mtu_size": "int", - "allow_byol_on_dedicated_instance": "bool", - "max_converter_volumes": "int", - "azurearm": "bool", - "vcenter": "bool", - "subnet_filter": "str", - "no_snapshot_considered_lag_milliseconds": "int", - "no_converters_windows": "bool", - "disable_replica_creation": "bool", - "aws": "bool", - "max_replicator_volumes": "int", - "allow_recovery_plans": "bool", - "snapshot_creation_interval_min": "int", - "snapshot_on_demand_timeout": "int", - "allow_archiving": "bool", - "custom_replicator_instance_type": "str", - "disable_snapshot_on_demand": "bool", - "disable_install": "bool", - "hdd": "bool", - "snapshot_creation_interval_max": "int", - "ce_admin_properties": "object", - "azure": "bool", - } - - attribute_map = { - "google": "google", - "is_demo": "is_demo", - "windows_converters": "windows_converters", - "force_reversed_handshake_direction": "force_reversed_handshake_direction", - "no_converters": "no_converters", - "vio": "vio", - "no_cloud": "no_cloud", - "consistent_snapshot_creation_interval_min": "consistent_snapshot_creation_interval_min", - "no_public_ips": "no_public_ips", - "daily_pit_number": "daily_pit_number", - "mtu_size": "mtu_size", - "allow_byol_on_dedicated_instance": "allow_byol_on_dedicated_instance", - "max_converter_volumes": "max_converter_volumes", - "azurearm": "azurearm", - "vcenter": "vcenter", - "subnet_filter": "subnet_filter", - "no_snapshot_considered_lag_milliseconds": "no_snapshot_considered_lag_milliseconds", - "no_converters_windows": "no_converters_windows", - "disable_replica_creation": "disable_replica_creation", - "aws": "aws", - "max_replicator_volumes": "max_replicator_volumes", - "allow_recovery_plans": "allow_recovery_plans", - "snapshot_creation_interval_min": "snapshot_creation_interval_min", - "snapshot_on_demand_timeout": "snapshot_on_demand_timeout", - "allow_archiving": "allow_archiving", - "custom_replicator_instance_type": "custom_replicator_instance_type", - "disable_snapshot_on_demand": "disable_snapshot_on_demand", - "disable_install": "disable_install", - "hdd": "hdd", - "snapshot_creation_interval_max": "snapshot_creation_interval_max", - "ce_admin_properties": "ceAdminProperties", - "azure": "azure", - } - - def __init__( - self, - google=None, - is_demo=None, - windows_converters=None, - force_reversed_handshake_direction=None, - no_converters=None, - vio=None, - no_cloud=None, - consistent_snapshot_creation_interval_min=None, - no_public_ips=None, - daily_pit_number=None, - mtu_size=None, - allow_byol_on_dedicated_instance=None, - max_converter_volumes=None, - azurearm=None, - vcenter=None, - subnet_filter=None, - no_snapshot_considered_lag_milliseconds=None, - no_converters_windows=None, - disable_replica_creation=None, - aws=None, - max_replicator_volumes=None, - allow_recovery_plans=None, - snapshot_creation_interval_min=None, - snapshot_on_demand_timeout=None, - allow_archiving=None, - custom_replicator_instance_type=None, - disable_snapshot_on_demand=None, - disable_install=None, - hdd=None, - snapshot_creation_interval_max=None, - ce_admin_properties=None, - azure=None, - ): # noqa: E501 - """CloudEndureAllProjectFeatures - a model defined in Swagger""" # noqa: E501 - self._google = None - self._is_demo = None - self._windows_converters = None - self._force_reversed_handshake_direction = None - self._no_converters = None - self._vio = None - self._no_cloud = None - self._consistent_snapshot_creation_interval_min = None - self._no_public_ips = None - self._daily_pit_number = None - self._mtu_size = None - self._allow_byol_on_dedicated_instance = None - self._max_converter_volumes = None - self._azurearm = None - self._vcenter = None - self._subnet_filter = None - self._no_snapshot_considered_lag_milliseconds = None - self._no_converters_windows = None - self._disable_replica_creation = None - self._aws = None - self._max_replicator_volumes = None - self._allow_recovery_plans = None - self._snapshot_creation_interval_min = None - self._snapshot_on_demand_timeout = None - self._allow_archiving = None - self._custom_replicator_instance_type = None - self._disable_snapshot_on_demand = None - self._disable_install = None - self._hdd = None - self._snapshot_creation_interval_max = None - self._ce_admin_properties = None - self._azure = None - self.discriminator = None - if google is not None: - self.google = google - if is_demo is not None: - self.is_demo = is_demo - if windows_converters is not None: - self.windows_converters = windows_converters - if force_reversed_handshake_direction is not None: - self.force_reversed_handshake_direction = force_reversed_handshake_direction - if no_converters is not None: - self.no_converters = no_converters - if vio is not None: - self.vio = vio - if no_cloud is not None: - self.no_cloud = no_cloud - if consistent_snapshot_creation_interval_min is not None: - self.consistent_snapshot_creation_interval_min = ( - consistent_snapshot_creation_interval_min - ) - if no_public_ips is not None: - self.no_public_ips = no_public_ips - if daily_pit_number is not None: - self.daily_pit_number = daily_pit_number - if mtu_size is not None: - self.mtu_size = mtu_size - if allow_byol_on_dedicated_instance is not None: - self.allow_byol_on_dedicated_instance = allow_byol_on_dedicated_instance - if max_converter_volumes is not None: - self.max_converter_volumes = max_converter_volumes - if azurearm is not None: - self.azurearm = azurearm - if vcenter is not None: - self.vcenter = vcenter - if subnet_filter is not None: - self.subnet_filter = subnet_filter - if no_snapshot_considered_lag_milliseconds is not None: - self.no_snapshot_considered_lag_milliseconds = ( - no_snapshot_considered_lag_milliseconds - ) - if no_converters_windows is not None: - self.no_converters_windows = no_converters_windows - if disable_replica_creation is not None: - self.disable_replica_creation = disable_replica_creation - if aws is not None: - self.aws = aws - if max_replicator_volumes is not None: - self.max_replicator_volumes = max_replicator_volumes - if allow_recovery_plans is not None: - self.allow_recovery_plans = allow_recovery_plans - if snapshot_creation_interval_min is not None: - self.snapshot_creation_interval_min = snapshot_creation_interval_min - if snapshot_on_demand_timeout is not None: - self.snapshot_on_demand_timeout = snapshot_on_demand_timeout - if allow_archiving is not None: - self.allow_archiving = allow_archiving - if custom_replicator_instance_type is not None: - self.custom_replicator_instance_type = custom_replicator_instance_type - if disable_snapshot_on_demand is not None: - self.disable_snapshot_on_demand = disable_snapshot_on_demand - if disable_install is not None: - self.disable_install = disable_install - if hdd is not None: - self.hdd = hdd - if snapshot_creation_interval_max is not None: - self.snapshot_creation_interval_max = snapshot_creation_interval_max - if ce_admin_properties is not None: - self.ce_admin_properties = ce_admin_properties - if azure is not None: - self.azure = azure - - @property - def google(self): - """Gets the google of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The google of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: bool - """ - return self._google - - @google.setter - def google(self, google): - """Sets the google of this CloudEndureAllProjectFeatures. - - - :param google: The google of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: bool - """ - - self._google = google - - @property - def is_demo(self): - """Gets the is_demo of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The is_demo of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: bool - """ - return self._is_demo - - @is_demo.setter - def is_demo(self, is_demo): - """Sets the is_demo of this CloudEndureAllProjectFeatures. - - - :param is_demo: The is_demo of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: bool - """ - - self._is_demo = is_demo - - @property - def windows_converters(self): - """Gets the windows_converters of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The windows_converters of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: bool - """ - return self._windows_converters - - @windows_converters.setter - def windows_converters(self, windows_converters): - """Sets the windows_converters of this CloudEndureAllProjectFeatures. - - - :param windows_converters: The windows_converters of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: bool - """ - - self._windows_converters = windows_converters - - @property - def force_reversed_handshake_direction(self): - """Gets the force_reversed_handshake_direction of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The force_reversed_handshake_direction of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: bool - """ - return self._force_reversed_handshake_direction - - @force_reversed_handshake_direction.setter - def force_reversed_handshake_direction(self, force_reversed_handshake_direction): - """Sets the force_reversed_handshake_direction of this CloudEndureAllProjectFeatures. - - - :param force_reversed_handshake_direction: The force_reversed_handshake_direction of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: bool - """ - - self._force_reversed_handshake_direction = force_reversed_handshake_direction - - @property - def no_converters(self): - """Gets the no_converters of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The no_converters of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: bool - """ - return self._no_converters - - @no_converters.setter - def no_converters(self, no_converters): - """Sets the no_converters of this CloudEndureAllProjectFeatures. - - - :param no_converters: The no_converters of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: bool - """ - - self._no_converters = no_converters - - @property - def vio(self): - """Gets the vio of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The vio of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: bool - """ - return self._vio - - @vio.setter - def vio(self, vio): - """Sets the vio of this CloudEndureAllProjectFeatures. - - - :param vio: The vio of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: bool - """ - - self._vio = vio - - @property - def no_cloud(self): - """Gets the no_cloud of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The no_cloud of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: bool - """ - return self._no_cloud - - @no_cloud.setter - def no_cloud(self, no_cloud): - """Sets the no_cloud of this CloudEndureAllProjectFeatures. - - - :param no_cloud: The no_cloud of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: bool - """ - - self._no_cloud = no_cloud - - @property - def consistent_snapshot_creation_interval_min(self): - """Gets the consistent_snapshot_creation_interval_min of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The consistent_snapshot_creation_interval_min of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: int - """ - return self._consistent_snapshot_creation_interval_min - - @consistent_snapshot_creation_interval_min.setter - def consistent_snapshot_creation_interval_min( - self, consistent_snapshot_creation_interval_min - ): - """Sets the consistent_snapshot_creation_interval_min of this CloudEndureAllProjectFeatures. - - - :param consistent_snapshot_creation_interval_min: The consistent_snapshot_creation_interval_min of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: int - """ - - self._consistent_snapshot_creation_interval_min = ( - consistent_snapshot_creation_interval_min - ) - - @property - def no_public_ips(self): - """Gets the no_public_ips of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The no_public_ips of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: bool - """ - return self._no_public_ips - - @no_public_ips.setter - def no_public_ips(self, no_public_ips): - """Sets the no_public_ips of this CloudEndureAllProjectFeatures. - - - :param no_public_ips: The no_public_ips of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: bool - """ - - self._no_public_ips = no_public_ips - - @property - def daily_pit_number(self): - """Gets the daily_pit_number of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The daily_pit_number of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: int - """ - return self._daily_pit_number - - @daily_pit_number.setter - def daily_pit_number(self, daily_pit_number): - """Sets the daily_pit_number of this CloudEndureAllProjectFeatures. - - - :param daily_pit_number: The daily_pit_number of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: int - """ - - self._daily_pit_number = daily_pit_number - - @property - def mtu_size(self): - """Gets the mtu_size of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The mtu_size of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: int - """ - return self._mtu_size - - @mtu_size.setter - def mtu_size(self, mtu_size): - """Sets the mtu_size of this CloudEndureAllProjectFeatures. - - - :param mtu_size: The mtu_size of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: int - """ - - self._mtu_size = mtu_size - - @property - def allow_byol_on_dedicated_instance(self): - """Gets the allow_byol_on_dedicated_instance of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The allow_byol_on_dedicated_instance of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: bool - """ - return self._allow_byol_on_dedicated_instance - - @allow_byol_on_dedicated_instance.setter - def allow_byol_on_dedicated_instance(self, allow_byol_on_dedicated_instance): - """Sets the allow_byol_on_dedicated_instance of this CloudEndureAllProjectFeatures. - - - :param allow_byol_on_dedicated_instance: The allow_byol_on_dedicated_instance of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: bool - """ - - self._allow_byol_on_dedicated_instance = allow_byol_on_dedicated_instance - - @property - def max_converter_volumes(self): - """Gets the max_converter_volumes of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The max_converter_volumes of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: int - """ - return self._max_converter_volumes - - @max_converter_volumes.setter - def max_converter_volumes(self, max_converter_volumes): - """Sets the max_converter_volumes of this CloudEndureAllProjectFeatures. - - - :param max_converter_volumes: The max_converter_volumes of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: int - """ - - self._max_converter_volumes = max_converter_volumes - - @property - def azurearm(self): - """Gets the azurearm of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The azurearm of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: bool - """ - return self._azurearm - - @azurearm.setter - def azurearm(self, azurearm): - """Sets the azurearm of this CloudEndureAllProjectFeatures. - - - :param azurearm: The azurearm of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: bool - """ - - self._azurearm = azurearm - - @property - def vcenter(self): - """Gets the vcenter of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The vcenter of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: bool - """ - return self._vcenter - - @vcenter.setter - def vcenter(self, vcenter): - """Sets the vcenter of this CloudEndureAllProjectFeatures. - - - :param vcenter: The vcenter of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: bool - """ - - self._vcenter = vcenter - - @property - def subnet_filter(self): - """Gets the subnet_filter of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The subnet_filter of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: str - """ - return self._subnet_filter - - @subnet_filter.setter - def subnet_filter(self, subnet_filter): - """Sets the subnet_filter of this CloudEndureAllProjectFeatures. - - - :param subnet_filter: The subnet_filter of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: str - """ - - self._subnet_filter = subnet_filter - - @property - def no_snapshot_considered_lag_milliseconds(self): - """Gets the no_snapshot_considered_lag_milliseconds of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The no_snapshot_considered_lag_milliseconds of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: int - """ - return self._no_snapshot_considered_lag_milliseconds - - @no_snapshot_considered_lag_milliseconds.setter - def no_snapshot_considered_lag_milliseconds( - self, no_snapshot_considered_lag_milliseconds - ): - """Sets the no_snapshot_considered_lag_milliseconds of this CloudEndureAllProjectFeatures. - - - :param no_snapshot_considered_lag_milliseconds: The no_snapshot_considered_lag_milliseconds of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: int - """ - - self._no_snapshot_considered_lag_milliseconds = ( - no_snapshot_considered_lag_milliseconds - ) - - @property - def no_converters_windows(self): - """Gets the no_converters_windows of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The no_converters_windows of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: bool - """ - return self._no_converters_windows - - @no_converters_windows.setter - def no_converters_windows(self, no_converters_windows): - """Sets the no_converters_windows of this CloudEndureAllProjectFeatures. - - - :param no_converters_windows: The no_converters_windows of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: bool - """ - - self._no_converters_windows = no_converters_windows - - @property - def disable_replica_creation(self): - """Gets the disable_replica_creation of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The disable_replica_creation of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: bool - """ - return self._disable_replica_creation - - @disable_replica_creation.setter - def disable_replica_creation(self, disable_replica_creation): - """Sets the disable_replica_creation of this CloudEndureAllProjectFeatures. - - - :param disable_replica_creation: The disable_replica_creation of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: bool - """ - - self._disable_replica_creation = disable_replica_creation - - @property - def aws(self): - """Gets the aws of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The aws of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: bool - """ - return self._aws - - @aws.setter - def aws(self, aws): - """Sets the aws of this CloudEndureAllProjectFeatures. - - - :param aws: The aws of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: bool - """ - - self._aws = aws - - @property - def max_replicator_volumes(self): - """Gets the max_replicator_volumes of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The max_replicator_volumes of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: int - """ - return self._max_replicator_volumes - - @max_replicator_volumes.setter - def max_replicator_volumes(self, max_replicator_volumes): - """Sets the max_replicator_volumes of this CloudEndureAllProjectFeatures. - - - :param max_replicator_volumes: The max_replicator_volumes of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: int - """ - - self._max_replicator_volumes = max_replicator_volumes - - @property - def allow_recovery_plans(self): - """Gets the allow_recovery_plans of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The allow_recovery_plans of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: bool - """ - return self._allow_recovery_plans - - @allow_recovery_plans.setter - def allow_recovery_plans(self, allow_recovery_plans): - """Sets the allow_recovery_plans of this CloudEndureAllProjectFeatures. - - - :param allow_recovery_plans: The allow_recovery_plans of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: bool - """ - - self._allow_recovery_plans = allow_recovery_plans - - @property - def snapshot_creation_interval_min(self): - """Gets the snapshot_creation_interval_min of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The snapshot_creation_interval_min of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: int - """ - return self._snapshot_creation_interval_min - - @snapshot_creation_interval_min.setter - def snapshot_creation_interval_min(self, snapshot_creation_interval_min): - """Sets the snapshot_creation_interval_min of this CloudEndureAllProjectFeatures. - - - :param snapshot_creation_interval_min: The snapshot_creation_interval_min of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: int - """ - - self._snapshot_creation_interval_min = snapshot_creation_interval_min - - @property - def snapshot_on_demand_timeout(self): - """Gets the snapshot_on_demand_timeout of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The snapshot_on_demand_timeout of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: int - """ - return self._snapshot_on_demand_timeout - - @snapshot_on_demand_timeout.setter - def snapshot_on_demand_timeout(self, snapshot_on_demand_timeout): - """Sets the snapshot_on_demand_timeout of this CloudEndureAllProjectFeatures. - - - :param snapshot_on_demand_timeout: The snapshot_on_demand_timeout of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: int - """ - - self._snapshot_on_demand_timeout = snapshot_on_demand_timeout - - @property - def allow_archiving(self): - """Gets the allow_archiving of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The allow_archiving of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: bool - """ - return self._allow_archiving - - @allow_archiving.setter - def allow_archiving(self, allow_archiving): - """Sets the allow_archiving of this CloudEndureAllProjectFeatures. - - - :param allow_archiving: The allow_archiving of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: bool - """ - - self._allow_archiving = allow_archiving - - @property - def custom_replicator_instance_type(self): - """Gets the custom_replicator_instance_type of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The custom_replicator_instance_type of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: str - """ - return self._custom_replicator_instance_type - - @custom_replicator_instance_type.setter - def custom_replicator_instance_type(self, custom_replicator_instance_type): - """Sets the custom_replicator_instance_type of this CloudEndureAllProjectFeatures. - - - :param custom_replicator_instance_type: The custom_replicator_instance_type of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: str - """ - - self._custom_replicator_instance_type = custom_replicator_instance_type - - @property - def disable_snapshot_on_demand(self): - """Gets the disable_snapshot_on_demand of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The disable_snapshot_on_demand of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: bool - """ - return self._disable_snapshot_on_demand - - @disable_snapshot_on_demand.setter - def disable_snapshot_on_demand(self, disable_snapshot_on_demand): - """Sets the disable_snapshot_on_demand of this CloudEndureAllProjectFeatures. - - - :param disable_snapshot_on_demand: The disable_snapshot_on_demand of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: bool - """ - - self._disable_snapshot_on_demand = disable_snapshot_on_demand - - @property - def disable_install(self): - """Gets the disable_install of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The disable_install of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: bool - """ - return self._disable_install - - @disable_install.setter - def disable_install(self, disable_install): - """Sets the disable_install of this CloudEndureAllProjectFeatures. - - - :param disable_install: The disable_install of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: bool - """ - - self._disable_install = disable_install - - @property - def hdd(self): - """Gets the hdd of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The hdd of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: bool - """ - return self._hdd - - @hdd.setter - def hdd(self, hdd): - """Sets the hdd of this CloudEndureAllProjectFeatures. - - - :param hdd: The hdd of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: bool - """ - - self._hdd = hdd - - @property - def snapshot_creation_interval_max(self): - """Gets the snapshot_creation_interval_max of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The snapshot_creation_interval_max of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: int - """ - return self._snapshot_creation_interval_max - - @snapshot_creation_interval_max.setter - def snapshot_creation_interval_max(self, snapshot_creation_interval_max): - """Sets the snapshot_creation_interval_max of this CloudEndureAllProjectFeatures. - - - :param snapshot_creation_interval_max: The snapshot_creation_interval_max of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: int - """ - - self._snapshot_creation_interval_max = snapshot_creation_interval_max - - @property - def ce_admin_properties(self): - """Gets the ce_admin_properties of this CloudEndureAllProjectFeatures. # noqa: E501 - - For internal use. # noqa: E501 - - :return: The ce_admin_properties of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: object - """ - return self._ce_admin_properties - - @ce_admin_properties.setter - def ce_admin_properties(self, ce_admin_properties): - """Sets the ce_admin_properties of this CloudEndureAllProjectFeatures. - - For internal use. # noqa: E501 - - :param ce_admin_properties: The ce_admin_properties of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: object - """ - - self._ce_admin_properties = ce_admin_properties - - @property - def azure(self): - """Gets the azure of this CloudEndureAllProjectFeatures. # noqa: E501 - - - :return: The azure of this CloudEndureAllProjectFeatures. # noqa: E501 - :rtype: bool - """ - return self._azure - - @azure.setter - def azure(self, azure): - """Sets the azure of this CloudEndureAllProjectFeatures. - - - :param azure: The azure of this CloudEndureAllProjectFeatures. # noqa: E501 - :type: bool - """ - - self._azure = azure - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureAllProjectFeatures, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureAllProjectFeatures): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_audit_log.py b/cloudendure/cloudendure_api/models/cloud_endure_audit_log.py deleted file mode 100644 index 134333b86..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_audit_log.py +++ /dev/null @@ -1,143 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_audit_log_entry import ( - CloudEndureAuditLogEntry, -) # noqa: F401,E501 - - -class CloudEndureAuditLog: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "items": "list[CloudEndureAuditLogEntry]", - "has_more_results": "bool", - } - - attribute_map = {"items": "items", "has_more_results": "hasMoreResults"} - - def __init__(self, items=None, has_more_results=None): # noqa: E501 - """CloudEndureAuditLog - a model defined in Swagger""" # noqa: E501 - self._items = None - self._has_more_results = None - self.discriminator = None - if items is not None: - self.items = items - if has_more_results is not None: - self.has_more_results = has_more_results - - @property - def items(self): - """Gets the items of this CloudEndureAuditLog. # noqa: E501 - - - :return: The items of this CloudEndureAuditLog. # noqa: E501 - :rtype: list[CloudEndureAuditLogEntry] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureAuditLog. - - - :param items: The items of this CloudEndureAuditLog. # noqa: E501 - :type: list[CloudEndureAuditLogEntry] - """ - - self._items = items - - @property - def has_more_results(self): - """Gets the has_more_results of this CloudEndureAuditLog. # noqa: E501 - - AuditLog API will only return max 1500 entries so this is a way to know if there are more. # noqa: E501 - - :return: The has_more_results of this CloudEndureAuditLog. # noqa: E501 - :rtype: bool - """ - return self._has_more_results - - @has_more_results.setter - def has_more_results(self, has_more_results): - """Sets the has_more_results of this CloudEndureAuditLog. - - AuditLog API will only return max 1500 entries so this is a way to know if there are more. # noqa: E501 - - :param has_more_results: The has_more_results of this CloudEndureAuditLog. # noqa: E501 - :type: bool - """ - - self._has_more_results = has_more_results - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureAuditLog, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureAuditLog): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_audit_log_changed_field.py b/cloudendure/cloudendure_api/models/cloud_endure_audit_log_changed_field.py deleted file mode 100644 index 0dc9d98bf..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_audit_log_changed_field.py +++ /dev/null @@ -1,162 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureAuditLogChangedField: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"field_name": "str", "new_value": "str", "old_value": "str"} - - attribute_map = { - "field_name": "fieldName", - "new_value": "newValue", - "old_value": "oldValue", - } - - def __init__(self, field_name=None, new_value=None, old_value=None): # noqa: E501 - """CloudEndureAuditLogChangedField - a model defined in Swagger""" # noqa: E501 - self._field_name = None - self._new_value = None - self._old_value = None - self.discriminator = None - if field_name is not None: - self.field_name = field_name - if new_value is not None: - self.new_value = new_value - if old_value is not None: - self.old_value = old_value - - @property - def field_name(self): - """Gets the field_name of this CloudEndureAuditLogChangedField. # noqa: E501 - - - :return: The field_name of this CloudEndureAuditLogChangedField. # noqa: E501 - :rtype: str - """ - return self._field_name - - @field_name.setter - def field_name(self, field_name): - """Sets the field_name of this CloudEndureAuditLogChangedField. - - - :param field_name: The field_name of this CloudEndureAuditLogChangedField. # noqa: E501 - :type: str - """ - - self._field_name = field_name - - @property - def new_value(self): - """Gets the new_value of this CloudEndureAuditLogChangedField. # noqa: E501 - - - :return: The new_value of this CloudEndureAuditLogChangedField. # noqa: E501 - :rtype: str - """ - return self._new_value - - @new_value.setter - def new_value(self, new_value): - """Sets the new_value of this CloudEndureAuditLogChangedField. - - - :param new_value: The new_value of this CloudEndureAuditLogChangedField. # noqa: E501 - :type: str - """ - - self._new_value = new_value - - @property - def old_value(self): - """Gets the old_value of this CloudEndureAuditLogChangedField. # noqa: E501 - - - :return: The old_value of this CloudEndureAuditLogChangedField. # noqa: E501 - :rtype: str - """ - return self._old_value - - @old_value.setter - def old_value(self, old_value): - """Sets the old_value of this CloudEndureAuditLogChangedField. - - - :param old_value: The old_value of this CloudEndureAuditLogChangedField. # noqa: E501 - :type: str - """ - - self._old_value = old_value - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureAuditLogChangedField, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureAuditLogChangedField): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_audit_log_entry.py b/cloudendure/cloudendure_api/models/cloud_endure_audit_log_entry.py deleted file mode 100644 index 12ad5af6f..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_audit_log_entry.py +++ /dev/null @@ -1,297 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_audit_log_changed_field import ( # noqa: F401,E501 - CloudEndureAuditLogChangedField, -) - - -class CloudEndureAuditLogEntry: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "username": "str", - "event_name": "str", - "participating_machines": "list[object]", - "description": "str", - "changed_fields": "list[CloudEndureAuditLogChangedField]", - "timestamp": "datetime", - "job_id": "str", - } - - attribute_map = { - "username": "username", - "event_name": "eventName", - "participating_machines": "participatingMachines", - "description": "description", - "changed_fields": "changedFields", - "timestamp": "timestamp", - "job_id": "jobId", - } - - def __init__( - self, - username=None, - event_name=None, - participating_machines=None, - description=None, - changed_fields=None, - timestamp=None, - job_id=None, - ): # noqa: E501 - """CloudEndureAuditLogEntry - a model defined in Swagger""" # noqa: E501 - self._username = None - self._event_name = None - self._participating_machines = None - self._description = None - self._changed_fields = None - self._timestamp = None - self._job_id = None - self.discriminator = None - if username is not None: - self.username = username - if event_name is not None: - self.event_name = event_name - if participating_machines is not None: - self.participating_machines = participating_machines - if description is not None: - self.description = description - if changed_fields is not None: - self.changed_fields = changed_fields - if timestamp is not None: - self.timestamp = timestamp - if job_id is not None: - self.job_id = job_id - - @property - def username(self): - """Gets the username of this CloudEndureAuditLogEntry. # noqa: E501 - - username (typically an email) of user who initiated action (in UI or via API) which resulted in this audit log entry being added. # noqa: E501 - - :return: The username of this CloudEndureAuditLogEntry. # noqa: E501 - :rtype: str - """ - return self._username - - @username.setter - def username(self, username): - """Sets the username of this CloudEndureAuditLogEntry. - - username (typically an email) of user who initiated action (in UI or via API) which resulted in this audit log entry being added. # noqa: E501 - - :param username: The username of this CloudEndureAuditLogEntry. # noqa: E501 - :type: str - """ - - self._username = username - - @property - def event_name(self): - """Gets the event_name of this CloudEndureAuditLogEntry. # noqa: E501 - - Unique event name. One of: - replicationConfigurationChanged - blueprintChanged - ... @todo: complete # noqa: E501 - - :return: The event_name of this CloudEndureAuditLogEntry. # noqa: E501 - :rtype: str - """ - return self._event_name - - @event_name.setter - def event_name(self, event_name): - """Sets the event_name of this CloudEndureAuditLogEntry. - - Unique event name. One of: - replicationConfigurationChanged - blueprintChanged - ... @todo: complete # noqa: E501 - - :param event_name: The event_name of this CloudEndureAuditLogEntry. # noqa: E501 - :type: str - """ - - self._event_name = event_name - - @property - def participating_machines(self): - """Gets the participating_machines of this CloudEndureAuditLogEntry. # noqa: E501 - - List of machine-identifiers objects. Only present if Audit Log entry relates to one or more machines. # noqa: E501 - - :return: The participating_machines of this CloudEndureAuditLogEntry. # noqa: E501 - :rtype: list[object] - """ - return self._participating_machines - - @participating_machines.setter - def participating_machines(self, participating_machines): - """Sets the participating_machines of this CloudEndureAuditLogEntry. - - List of machine-identifiers objects. Only present if Audit Log entry relates to one or more machines. # noqa: E501 - - :param participating_machines: The participating_machines of this CloudEndureAuditLogEntry. # noqa: E501 - :type: list[object] - """ - - self._participating_machines = participating_machines - - @property - def description(self): - """Gets the description of this CloudEndureAuditLogEntry. # noqa: E501 - - Long-form human-readable description of Audit Log entry. # noqa: E501 - - :return: The description of this CloudEndureAuditLogEntry. # noqa: E501 - :rtype: str - """ - return self._description - - @description.setter - def description(self, description): - """Sets the description of this CloudEndureAuditLogEntry. - - Long-form human-readable description of Audit Log entry. # noqa: E501 - - :param description: The description of this CloudEndureAuditLogEntry. # noqa: E501 - :type: str - """ - - self._description = description - - @property - def changed_fields(self): - """Gets the changed_fields of this CloudEndureAuditLogEntry. # noqa: E501 - - Map of fields that have been changed and their old an new values. Only present when eventName is replicationConfigurationChanged or blueprintChanged # noqa: E501 - - :return: The changed_fields of this CloudEndureAuditLogEntry. # noqa: E501 - :rtype: list[CloudEndureAuditLogChangedField] - """ - return self._changed_fields - - @changed_fields.setter - def changed_fields(self, changed_fields): - """Sets the changed_fields of this CloudEndureAuditLogEntry. - - Map of fields that have been changed and their old an new values. Only present when eventName is replicationConfigurationChanged or blueprintChanged # noqa: E501 - - :param changed_fields: The changed_fields of this CloudEndureAuditLogEntry. # noqa: E501 - :type: list[CloudEndureAuditLogChangedField] - """ - - self._changed_fields = changed_fields - - @property - def timestamp(self): - """Gets the timestamp of this CloudEndureAuditLogEntry. # noqa: E501 - - RFC 3339 compliant date-time string of when Audit Log entry was created/ event described by audit log entry happened. # noqa: E501 - - :return: The timestamp of this CloudEndureAuditLogEntry. # noqa: E501 - :rtype: datetime - """ - return self._timestamp - - @timestamp.setter - def timestamp(self, timestamp): - """Sets the timestamp of this CloudEndureAuditLogEntry. - - RFC 3339 compliant date-time string of when Audit Log entry was created/ event described by audit log entry happened. # noqa: E501 - - :param timestamp: The timestamp of this CloudEndureAuditLogEntry. # noqa: E501 - :type: datetime - """ - - self._timestamp = timestamp - - @property - def job_id(self): - """Gets the job_id of this CloudEndureAuditLogEntry. # noqa: E501 - - ID of Job due to which this log entry was created (only included if log entry is result of a Job) # noqa: E501 - - :return: The job_id of this CloudEndureAuditLogEntry. # noqa: E501 - :rtype: str - """ - return self._job_id - - @job_id.setter - def job_id(self, job_id): - """Sets the job_id of this CloudEndureAuditLogEntry. - - ID of Job due to which this log entry was created (only included if log entry is result of a Job) # noqa: E501 - - :param job_id: The job_id of this CloudEndureAuditLogEntry. # noqa: E501 - :type: str - """ - - self._job_id = job_id - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureAuditLogEntry, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureAuditLogEntry): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_bandwidth_throttling.py b/cloudendure/cloudendure_api/models/cloud_endure_bandwidth_throttling.py deleted file mode 100644 index 32441cac7..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_bandwidth_throttling.py +++ /dev/null @@ -1,112 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureBandwidthThrottling: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"bandwidth_throttling": "int"} - - attribute_map = {"bandwidth_throttling": "bandwidthThrottling"} - - def __init__(self, bandwidth_throttling=None): # noqa: E501 - """CloudEndureBandwidthThrottling - a model defined in Swagger""" # noqa: E501 - self._bandwidth_throttling = None - self.discriminator = None - if bandwidth_throttling is not None: - self.bandwidth_throttling = bandwidth_throttling - - @property - def bandwidth_throttling(self): - """Gets the bandwidth_throttling of this CloudEndureBandwidthThrottling. # noqa: E501 - - Mbps to use for Data Replication (zero means no throttling). # noqa: E501 - - :return: The bandwidth_throttling of this CloudEndureBandwidthThrottling. # noqa: E501 - :rtype: int - """ - return self._bandwidth_throttling - - @bandwidth_throttling.setter - def bandwidth_throttling(self, bandwidth_throttling): - """Sets the bandwidth_throttling of this CloudEndureBandwidthThrottling. - - Mbps to use for Data Replication (zero means no throttling). # noqa: E501 - - :param bandwidth_throttling: The bandwidth_throttling of this CloudEndureBandwidthThrottling. # noqa: E501 - :type: int - """ - - self._bandwidth_throttling = bandwidth_throttling - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureBandwidthThrottling, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureBandwidthThrottling): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_blueprint.py b/cloudendure/cloudendure_api/models/cloud_endure_blueprint.py deleted file mode 100644 index b237886c2..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_blueprint.py +++ /dev/null @@ -1,1072 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureBlueprint: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "iam_role": "str", - "scsi_adapter_type": "str", - "public_ip_action": "str", - "machine_name": "str", - "cpus": "int", - "security_group_i_ds": "list[str]", - "run_after_launch": "bool", - "recommended_private_ip": "str", - "network_interface": "str", - "id": "str", - "mb_ram": "int", - "instance_type": "str", - "subnet_i_ds": "list[str]", - "cores_per_cpu": "int", - "recommended_instance_type": "str", - "static_ip": "str", - "tags": "list[object]", - "security_group_action": "str", - "private_i_ps": "list[str]", - "tenancy": "str", - "compute_location_id": "str", - "subnets_host_project": "str", - "logical_location_id": "str", - "network_adapter_type": "str", - "byol_on_dedicated_instance": "bool", - "placement_group": "str", - "machine_id": "str", - "region": "str", - "disks": "list[object]", - "private_ip_action": "str", - "static_ip_action": "str", - "dedicated_host_identifier": "str", - "use_shared_ram": "bool", - } - - attribute_map = { - "iam_role": "iamRole", - "scsi_adapter_type": "scsiAdapterType", - "public_ip_action": "publicIPAction", - "machine_name": "machineName", - "cpus": "cpus", - "security_group_i_ds": "securityGroupIDs", - "run_after_launch": "runAfterLaunch", - "recommended_private_ip": "recommendedPrivateIP", - "network_interface": "networkInterface", - "id": "id", - "mb_ram": "mbRam", - "instance_type": "instanceType", - "subnet_i_ds": "subnetIDs", - "cores_per_cpu": "coresPerCpu", - "recommended_instance_type": "recommendedInstanceType", - "static_ip": "staticIp", - "tags": "tags", - "security_group_action": "securityGroupAction", - "private_i_ps": "privateIPs", - "tenancy": "tenancy", - "compute_location_id": "computeLocationId", - "subnets_host_project": "subnetsHostProject", - "logical_location_id": "logicalLocationId", - "network_adapter_type": "networkAdapterType", - "byol_on_dedicated_instance": "byolOnDedicatedInstance", - "placement_group": "placementGroup", - "machine_id": "machineId", - "region": "region", - "disks": "disks", - "private_ip_action": "privateIPAction", - "static_ip_action": "staticIpAction", - "dedicated_host_identifier": "dedicatedHostIdentifier", - "use_shared_ram": "useSharedRam", - } - - def __init__( - self, - iam_role=None, - scsi_adapter_type=None, - public_ip_action=None, - machine_name=None, - cpus=None, - security_group_i_ds=None, - run_after_launch=None, - recommended_private_ip=None, - network_interface=None, - id=None, - mb_ram=None, - instance_type=None, - subnet_i_ds=None, - cores_per_cpu=None, - recommended_instance_type=None, - static_ip=None, - tags=None, - security_group_action=None, - private_i_ps=None, - tenancy=None, - compute_location_id=None, - subnets_host_project=None, - logical_location_id=None, - network_adapter_type=None, - byol_on_dedicated_instance=None, - placement_group=None, - machine_id=None, - region=None, - disks=None, - private_ip_action=None, - static_ip_action=None, - dedicated_host_identifier=None, - use_shared_ram=None, - ): # noqa: E501 - """CloudEndureBlueprint - a model defined in Swagger""" # noqa: E501 - self._iam_role = None - self._scsi_adapter_type = None - self._public_ip_action = None - self._machine_name = None - self._cpus = None - self._security_group_i_ds = None - self._run_after_launch = None - self._recommended_private_ip = None - self._network_interface = None - self._id = None - self._mb_ram = None - self._instance_type = None - self._subnet_i_ds = None - self._cores_per_cpu = None - self._recommended_instance_type = None - self._static_ip = None - self._tags = None - self._security_group_action = None - self._private_i_ps = None - self._tenancy = None - self._compute_location_id = None - self._subnets_host_project = None - self._logical_location_id = None - self._network_adapter_type = None - self._byol_on_dedicated_instance = None - self._placement_group = None - self._machine_id = None - self._region = None - self._disks = None - self._private_ip_action = None - self._static_ip_action = None - self._dedicated_host_identifier = None - self._use_shared_ram = None - self.discriminator = None - if iam_role is not None: - self.iam_role = iam_role - if scsi_adapter_type is not None: - self.scsi_adapter_type = scsi_adapter_type - if public_ip_action is not None: - self.public_ip_action = public_ip_action - if machine_name is not None: - self.machine_name = machine_name - if cpus is not None: - self.cpus = cpus - if security_group_i_ds is not None: - self.security_group_i_ds = security_group_i_ds - if run_after_launch is not None: - self.run_after_launch = run_after_launch - if recommended_private_ip is not None: - self.recommended_private_ip = recommended_private_ip - if network_interface is not None: - self.network_interface = network_interface - if id is not None: - self.id = id - if mb_ram is not None: - self.mb_ram = mb_ram - if instance_type is not None: - self.instance_type = instance_type - if subnet_i_ds is not None: - self.subnet_i_ds = subnet_i_ds - if cores_per_cpu is not None: - self.cores_per_cpu = cores_per_cpu - if recommended_instance_type is not None: - self.recommended_instance_type = recommended_instance_type - if static_ip is not None: - self.static_ip = static_ip - if tags is not None: - self.tags = tags - if security_group_action is not None: - self.security_group_action = security_group_action - if private_i_ps is not None: - self.private_i_ps = private_i_ps - if tenancy is not None: - self.tenancy = tenancy - if compute_location_id is not None: - self.compute_location_id = compute_location_id - if subnets_host_project is not None: - self.subnets_host_project = subnets_host_project - if logical_location_id is not None: - self.logical_location_id = logical_location_id - if network_adapter_type is not None: - self.network_adapter_type = network_adapter_type - if byol_on_dedicated_instance is not None: - self.byol_on_dedicated_instance = byol_on_dedicated_instance - if placement_group is not None: - self.placement_group = placement_group - if machine_id is not None: - self.machine_id = machine_id - if region is not None: - self.region = region - if disks is not None: - self.disks = disks - if private_ip_action is not None: - self.private_ip_action = private_ip_action - if static_ip_action is not None: - self.static_ip_action = static_ip_action - if dedicated_host_identifier is not None: - self.dedicated_host_identifier = dedicated_host_identifier - if use_shared_ram is not None: - self.use_shared_ram = use_shared_ram - - @property - def iam_role(self): - """Gets the iam_role of this CloudEndureBlueprint. # noqa: E501 - - AWS only. Possible values can be fetched from the Region object. # noqa: E501 - - :return: The iam_role of this CloudEndureBlueprint. # noqa: E501 - :rtype: str - """ - return self._iam_role - - @iam_role.setter - def iam_role(self, iam_role): - """Sets the iam_role of this CloudEndureBlueprint. - - AWS only. Possible values can be fetched from the Region object. # noqa: E501 - - :param iam_role: The iam_role of this CloudEndureBlueprint. # noqa: E501 - :type: str - """ - - self._iam_role = iam_role - - @property - def scsi_adapter_type(self): - """Gets the scsi_adapter_type of this CloudEndureBlueprint. # noqa: E501 - - Currently relevant for vCenter cloud only. Possible values can be fetched from the Region object. # noqa: E501 - - :return: The scsi_adapter_type of this CloudEndureBlueprint. # noqa: E501 - :rtype: str - """ - return self._scsi_adapter_type - - @scsi_adapter_type.setter - def scsi_adapter_type(self, scsi_adapter_type): - """Sets the scsi_adapter_type of this CloudEndureBlueprint. - - Currently relevant for vCenter cloud only. Possible values can be fetched from the Region object. # noqa: E501 - - :param scsi_adapter_type: The scsi_adapter_type of this CloudEndureBlueprint. # noqa: E501 - :type: str - """ - - self._scsi_adapter_type = scsi_adapter_type - - @property - def public_ip_action(self): - """Gets the public_ip_action of this CloudEndureBlueprint. # noqa: E501 - - Whether to allocate an ephemeral public IP, or not. AS_SUBNET causes CloudEndure to copy this property from the source machine. # noqa: E501 - - :return: The public_ip_action of this CloudEndureBlueprint. # noqa: E501 - :rtype: str - """ - return self._public_ip_action - - @public_ip_action.setter - def public_ip_action(self, public_ip_action): - """Sets the public_ip_action of this CloudEndureBlueprint. - - Whether to allocate an ephemeral public IP, or not. AS_SUBNET causes CloudEndure to copy this property from the source machine. # noqa: E501 - - :param public_ip_action: The public_ip_action of this CloudEndureBlueprint. # noqa: E501 - :type: str - """ - allowed_values = ["ALLOCATE", "DONT_ALLOCATE", "AS_SUBNET"] # noqa: E501 - if public_ip_action not in allowed_values: - raise ValueError( - "Invalid value for `public_ip_action` ({0}), must be one of {1}".format( # noqa: E501 - public_ip_action, allowed_values - ) - ) - - self._public_ip_action = public_ip_action - - @property - def machine_name(self): - """Gets the machine_name of this CloudEndureBlueprint. # noqa: E501 - - - :return: The machine_name of this CloudEndureBlueprint. # noqa: E501 - :rtype: str - """ - return self._machine_name - - @machine_name.setter - def machine_name(self, machine_name): - """Sets the machine_name of this CloudEndureBlueprint. - - - :param machine_name: The machine_name of this CloudEndureBlueprint. # noqa: E501 - :type: str - """ - - self._machine_name = machine_name - - @property - def cpus(self): - """Gets the cpus of this CloudEndureBlueprint. # noqa: E501 - - Number of CPUs per per Target machine; Currently relevant for vCenter cloud only; Max value can be fetched from the maxCpusPerMachine property of the Region object. # noqa: E501 - - :return: The cpus of this CloudEndureBlueprint. # noqa: E501 - :rtype: int - """ - return self._cpus - - @cpus.setter - def cpus(self, cpus): - """Sets the cpus of this CloudEndureBlueprint. - - Number of CPUs per per Target machine; Currently relevant for vCenter cloud only; Max value can be fetched from the maxCpusPerMachine property of the Region object. # noqa: E501 - - :param cpus: The cpus of this CloudEndureBlueprint. # noqa: E501 - :type: int - """ - - self._cpus = cpus - - @property - def security_group_i_ds(self): - """Gets the security_group_i_ds of this CloudEndureBlueprint. # noqa: E501 - - AWS only. The security groups that will be applied to the target machine. Possible values can be fetched from the Region object. # noqa: E501 - - :return: The security_group_i_ds of this CloudEndureBlueprint. # noqa: E501 - :rtype: list[str] - """ - return self._security_group_i_ds - - @security_group_i_ds.setter - def security_group_i_ds(self, security_group_i_ds): - """Sets the security_group_i_ds of this CloudEndureBlueprint. - - AWS only. The security groups that will be applied to the target machine. Possible values can be fetched from the Region object. # noqa: E501 - - :param security_group_i_ds: The security_group_i_ds of this CloudEndureBlueprint. # noqa: E501 - :type: list[str] - """ - - self._security_group_i_ds = security_group_i_ds - - @property - def run_after_launch(self): - """Gets the run_after_launch of this CloudEndureBlueprint. # noqa: E501 - - AWS only. Whether to power on the launched target machine after launch. True by default. # noqa: E501 - - :return: The run_after_launch of this CloudEndureBlueprint. # noqa: E501 - :rtype: bool - """ - return self._run_after_launch - - @run_after_launch.setter - def run_after_launch(self, run_after_launch): - """Sets the run_after_launch of this CloudEndureBlueprint. - - AWS only. Whether to power on the launched target machine after launch. True by default. # noqa: E501 - - :param run_after_launch: The run_after_launch of this CloudEndureBlueprint. # noqa: E501 - :type: bool - """ - - self._run_after_launch = run_after_launch - - @property - def recommended_private_ip(self): - """Gets the recommended_private_ip of this CloudEndureBlueprint. # noqa: E501 - - The private IP address recommended for use with this machine. # noqa: E501 - - :return: The recommended_private_ip of this CloudEndureBlueprint. # noqa: E501 - :rtype: str - """ - return self._recommended_private_ip - - @recommended_private_ip.setter - def recommended_private_ip(self, recommended_private_ip): - """Sets the recommended_private_ip of this CloudEndureBlueprint. - - The private IP address recommended for use with this machine. # noqa: E501 - - :param recommended_private_ip: The recommended_private_ip of this CloudEndureBlueprint. # noqa: E501 - :type: str - """ - - self._recommended_private_ip = recommended_private_ip - - @property - def network_interface(self): - """Gets the network_interface of this CloudEndureBlueprint. # noqa: E501 - - - :return: The network_interface of this CloudEndureBlueprint. # noqa: E501 - :rtype: str - """ - return self._network_interface - - @network_interface.setter - def network_interface(self, network_interface): - """Sets the network_interface of this CloudEndureBlueprint. - - - :param network_interface: The network_interface of this CloudEndureBlueprint. # noqa: E501 - :type: str - """ - - self._network_interface = network_interface - - @property - def id(self): - """Gets the id of this CloudEndureBlueprint. # noqa: E501 - - - :return: The id of this CloudEndureBlueprint. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this CloudEndureBlueprint. - - - :param id: The id of this CloudEndureBlueprint. # noqa: E501 - :type: str - """ - - self._id = id - - @property - def mb_ram(self): - """Gets the mb_ram of this CloudEndureBlueprint. # noqa: E501 - - MB RAM per Target machine; Currently relevant for vCenter cloud only; Max value can be fetched from the maxMbRamPerMachine property of the Region object. # noqa: E501 - - :return: The mb_ram of this CloudEndureBlueprint. # noqa: E501 - :rtype: int - """ - return self._mb_ram - - @mb_ram.setter - def mb_ram(self, mb_ram): - """Sets the mb_ram of this CloudEndureBlueprint. - - MB RAM per Target machine; Currently relevant for vCenter cloud only; Max value can be fetched from the maxMbRamPerMachine property of the Region object. # noqa: E501 - - :param mb_ram: The mb_ram of this CloudEndureBlueprint. # noqa: E501 - :type: int - """ - - self._mb_ram = mb_ram - - @property - def instance_type(self): - """Gets the instance_type of this CloudEndureBlueprint. # noqa: E501 - - Possible values can be fetched from the Region object, plus special values \"COPY_ORIGIN\" or \"CUSTOM\" # noqa: E501 - - :return: The instance_type of this CloudEndureBlueprint. # noqa: E501 - :rtype: str - """ - return self._instance_type - - @instance_type.setter - def instance_type(self, instance_type): - """Sets the instance_type of this CloudEndureBlueprint. - - Possible values can be fetched from the Region object, plus special values \"COPY_ORIGIN\" or \"CUSTOM\" # noqa: E501 - - :param instance_type: The instance_type of this CloudEndureBlueprint. # noqa: E501 - :type: str - """ - - self._instance_type = instance_type - - @property - def subnet_i_ds(self): - """Gets the subnet_i_ds of this CloudEndureBlueprint. # noqa: E501 - - AWS only. Configures a subnets in which the instance network interface will take part. Possible values can be fetched from the Region object. # noqa: E501 - - :return: The subnet_i_ds of this CloudEndureBlueprint. # noqa: E501 - :rtype: list[str] - """ - return self._subnet_i_ds - - @subnet_i_ds.setter - def subnet_i_ds(self, subnet_i_ds): - """Sets the subnet_i_ds of this CloudEndureBlueprint. - - AWS only. Configures a subnets in which the instance network interface will take part. Possible values can be fetched from the Region object. # noqa: E501 - - :param subnet_i_ds: The subnet_i_ds of this CloudEndureBlueprint. # noqa: E501 - :type: list[str] - """ - - self._subnet_i_ds = subnet_i_ds - - @property - def cores_per_cpu(self): - """Gets the cores_per_cpu of this CloudEndureBlueprint. # noqa: E501 - - Number of CPU cores per CPU in Target machine; Currently relevant for vCenter cloud only. # noqa: E501 - - :return: The cores_per_cpu of this CloudEndureBlueprint. # noqa: E501 - :rtype: int - """ - return self._cores_per_cpu - - @cores_per_cpu.setter - def cores_per_cpu(self, cores_per_cpu): - """Sets the cores_per_cpu of this CloudEndureBlueprint. - - Number of CPU cores per CPU in Target machine; Currently relevant for vCenter cloud only. # noqa: E501 - - :param cores_per_cpu: The cores_per_cpu of this CloudEndureBlueprint. # noqa: E501 - :type: int - """ - - self._cores_per_cpu = cores_per_cpu - - @property - def recommended_instance_type(self): - """Gets the recommended_instance_type of this CloudEndureBlueprint. # noqa: E501 - - When instance rightsizing is enabled, the instance type suitable for the source machine's HW # noqa: E501 - - :return: The recommended_instance_type of this CloudEndureBlueprint. # noqa: E501 - :rtype: str - """ - return self._recommended_instance_type - - @recommended_instance_type.setter - def recommended_instance_type(self, recommended_instance_type): - """Sets the recommended_instance_type of this CloudEndureBlueprint. - - When instance rightsizing is enabled, the instance type suitable for the source machine's HW # noqa: E501 - - :param recommended_instance_type: The recommended_instance_type of this CloudEndureBlueprint. # noqa: E501 - :type: str - """ - - self._recommended_instance_type = recommended_instance_type - - @property - def static_ip(self): - """Gets the static_ip of this CloudEndureBlueprint. # noqa: E501 - - Possible values can be fetched from the Region object. # noqa: E501 - - :return: The static_ip of this CloudEndureBlueprint. # noqa: E501 - :rtype: str - """ - return self._static_ip - - @static_ip.setter - def static_ip(self, static_ip): - """Sets the static_ip of this CloudEndureBlueprint. - - Possible values can be fetched from the Region object. # noqa: E501 - - :param static_ip: The static_ip of this CloudEndureBlueprint. # noqa: E501 - :type: str - """ - - self._static_ip = static_ip - - @property - def tags(self): - """Gets the tags of this CloudEndureBlueprint. # noqa: E501 - - AWS only. Tags that will be applied to the target machine. # noqa: E501 - - :return: The tags of this CloudEndureBlueprint. # noqa: E501 - :rtype: list[object] - """ - return self._tags - - @tags.setter - def tags(self, tags): - """Sets the tags of this CloudEndureBlueprint. - - AWS only. Tags that will be applied to the target machine. # noqa: E501 - - :param tags: The tags of this CloudEndureBlueprint. # noqa: E501 - :type: list[object] - """ - - self._tags = tags - - @property - def security_group_action(self): - """Gets the security_group_action of this CloudEndureBlueprint. # noqa: E501 - - How to assign a security group to the target machine. # noqa: E501 - - :return: The security_group_action of this CloudEndureBlueprint. # noqa: E501 - :rtype: str - """ - return self._security_group_action - - @security_group_action.setter - def security_group_action(self, security_group_action): - """Sets the security_group_action of this CloudEndureBlueprint. - - How to assign a security group to the target machine. # noqa: E501 - - :param security_group_action: The security_group_action of this CloudEndureBlueprint. # noqa: E501 - :type: str - """ - allowed_values = ["FROM_POLICY"] # noqa: E501 - if security_group_action not in allowed_values: - raise ValueError( - "Invalid value for `security_group_action` ({0}), must be one of {1}".format( # noqa: E501 - security_group_action, allowed_values - ) - ) - - self._security_group_action = security_group_action - - @property - def private_i_ps(self): - """Gets the private_i_ps of this CloudEndureBlueprint. # noqa: E501 - - - :return: The private_i_ps of this CloudEndureBlueprint. # noqa: E501 - :rtype: list[str] - """ - return self._private_i_ps - - @private_i_ps.setter - def private_i_ps(self, private_i_ps): - """Sets the private_i_ps of this CloudEndureBlueprint. - - - :param private_i_ps: The private_i_ps of this CloudEndureBlueprint. # noqa: E501 - :type: list[str] - """ - - self._private_i_ps = private_i_ps - - @property - def tenancy(self): - """Gets the tenancy of this CloudEndureBlueprint. # noqa: E501 - - - :return: The tenancy of this CloudEndureBlueprint. # noqa: E501 - :rtype: str - """ - return self._tenancy - - @tenancy.setter - def tenancy(self, tenancy): - """Sets the tenancy of this CloudEndureBlueprint. - - - :param tenancy: The tenancy of this CloudEndureBlueprint. # noqa: E501 - :type: str - """ - allowed_values = ["SHARED", "DEDICATED", "HOST"] # noqa: E501 - if tenancy not in allowed_values: - raise ValueError( - "Invalid value for `tenancy` ({0}), must be one of {1}".format( # noqa: E501 - tenancy, allowed_values - ) - ) - - self._tenancy = tenancy - - @property - def compute_location_id(self): - """Gets the compute_location_id of this CloudEndureBlueprint. # noqa: E501 - - todo # noqa: E501 - - :return: The compute_location_id of this CloudEndureBlueprint. # noqa: E501 - :rtype: str - """ - return self._compute_location_id - - @compute_location_id.setter - def compute_location_id(self, compute_location_id): - """Sets the compute_location_id of this CloudEndureBlueprint. - - todo # noqa: E501 - - :param compute_location_id: The compute_location_id of this CloudEndureBlueprint. # noqa: E501 - :type: str - """ - - self._compute_location_id = compute_location_id - - @property - def subnets_host_project(self): - """Gets the subnets_host_project of this CloudEndureBlueprint. # noqa: E501 - - GCP only. Host project for cross project network subnet. # noqa: E501 - - :return: The subnets_host_project of this CloudEndureBlueprint. # noqa: E501 - :rtype: str - """ - return self._subnets_host_project - - @subnets_host_project.setter - def subnets_host_project(self, subnets_host_project): - """Sets the subnets_host_project of this CloudEndureBlueprint. - - GCP only. Host project for cross project network subnet. # noqa: E501 - - :param subnets_host_project: The subnets_host_project of this CloudEndureBlueprint. # noqa: E501 - :type: str - """ - - self._subnets_host_project = subnets_host_project - - @property - def logical_location_id(self): - """Gets the logical_location_id of this CloudEndureBlueprint. # noqa: E501 - - vcenter = vmFolder; relates to $ref LogicalLocation # noqa: E501 - - :return: The logical_location_id of this CloudEndureBlueprint. # noqa: E501 - :rtype: str - """ - return self._logical_location_id - - @logical_location_id.setter - def logical_location_id(self, logical_location_id): - """Sets the logical_location_id of this CloudEndureBlueprint. - - vcenter = vmFolder; relates to $ref LogicalLocation # noqa: E501 - - :param logical_location_id: The logical_location_id of this CloudEndureBlueprint. # noqa: E501 - :type: str - """ - - self._logical_location_id = logical_location_id - - @property - def network_adapter_type(self): - """Gets the network_adapter_type of this CloudEndureBlueprint. # noqa: E501 - - Currently relevant for vCenter cloud only. Possible values can be fetched from the Region object. # noqa: E501 - - :return: The network_adapter_type of this CloudEndureBlueprint. # noqa: E501 - :rtype: str - """ - return self._network_adapter_type - - @network_adapter_type.setter - def network_adapter_type(self, network_adapter_type): - """Sets the network_adapter_type of this CloudEndureBlueprint. - - Currently relevant for vCenter cloud only. Possible values can be fetched from the Region object. # noqa: E501 - - :param network_adapter_type: The network_adapter_type of this CloudEndureBlueprint. # noqa: E501 - :type: str - """ - - self._network_adapter_type = network_adapter_type - - @property - def byol_on_dedicated_instance(self): - """Gets the byol_on_dedicated_instance of this CloudEndureBlueprint. # noqa: E501 - - specifies whether to use byol windows license if dedicated instance tenancy is selected. # noqa: E501 - - :return: The byol_on_dedicated_instance of this CloudEndureBlueprint. # noqa: E501 - :rtype: bool - """ - return self._byol_on_dedicated_instance - - @byol_on_dedicated_instance.setter - def byol_on_dedicated_instance(self, byol_on_dedicated_instance): - """Sets the byol_on_dedicated_instance of this CloudEndureBlueprint. - - specifies whether to use byol windows license if dedicated instance tenancy is selected. # noqa: E501 - - :param byol_on_dedicated_instance: The byol_on_dedicated_instance of this CloudEndureBlueprint. # noqa: E501 - :type: bool - """ - - self._byol_on_dedicated_instance = byol_on_dedicated_instance - - @property - def placement_group(self): - """Gets the placement_group of this CloudEndureBlueprint. # noqa: E501 - - AWS only. Possible values can be fetched from the Region object. # noqa: E501 - - :return: The placement_group of this CloudEndureBlueprint. # noqa: E501 - :rtype: str - """ - return self._placement_group - - @placement_group.setter - def placement_group(self, placement_group): - """Sets the placement_group of this CloudEndureBlueprint. - - AWS only. Possible values can be fetched from the Region object. # noqa: E501 - - :param placement_group: The placement_group of this CloudEndureBlueprint. # noqa: E501 - :type: str - """ - - self._placement_group = placement_group - - @property - def machine_id(self): - """Gets the machine_id of this CloudEndureBlueprint. # noqa: E501 - - - :return: The machine_id of this CloudEndureBlueprint. # noqa: E501 - :rtype: str - """ - return self._machine_id - - @machine_id.setter - def machine_id(self, machine_id): - """Sets the machine_id of this CloudEndureBlueprint. - - - :param machine_id: The machine_id of this CloudEndureBlueprint. # noqa: E501 - :type: str - """ - - self._machine_id = machine_id - - @property - def region(self): - """Gets the region of this CloudEndureBlueprint. # noqa: E501 - - - :return: The region of this CloudEndureBlueprint. # noqa: E501 - :rtype: str - """ - return self._region - - @region.setter - def region(self, region): - """Sets the region of this CloudEndureBlueprint. - - - :param region: The region of this CloudEndureBlueprint. # noqa: E501 - :type: str - """ - - self._region = region - - @property - def disks(self): - """Gets the disks of this CloudEndureBlueprint. # noqa: E501 - - AWS only. Target machine disk properties. # noqa: E501 - - :return: The disks of this CloudEndureBlueprint. # noqa: E501 - :rtype: list[object] - """ - return self._disks - - @disks.setter - def disks(self, disks): - """Sets the disks of this CloudEndureBlueprint. - - AWS only. Target machine disk properties. # noqa: E501 - - :param disks: The disks of this CloudEndureBlueprint. # noqa: E501 - :type: list[object] - """ - - self._disks = disks - - @property - def private_ip_action(self): - """Gets the private_ip_action of this CloudEndureBlueprint. # noqa: E501 - - - :return: The private_ip_action of this CloudEndureBlueprint. # noqa: E501 - :rtype: str - """ - return self._private_ip_action - - @private_ip_action.setter - def private_ip_action(self, private_ip_action): - """Sets the private_ip_action of this CloudEndureBlueprint. - - - :param private_ip_action: The private_ip_action of this CloudEndureBlueprint. # noqa: E501 - :type: str - """ - allowed_values = [ - "CREATE_NEW", - "COPY_ORIGIN", - "CUSTOM_IP", - "USE_NETWORK_INTERFACE", - ] # noqa: E501 - if private_ip_action not in allowed_values: - raise ValueError( - "Invalid value for `private_ip_action` ({0}), must be one of {1}".format( # noqa: E501 - private_ip_action, allowed_values - ) - ) - - self._private_ip_action = private_ip_action - - @property - def static_ip_action(self): - """Gets the static_ip_action of this CloudEndureBlueprint. # noqa: E501 - - - :return: The static_ip_action of this CloudEndureBlueprint. # noqa: E501 - :rtype: str - """ - return self._static_ip_action - - @static_ip_action.setter - def static_ip_action(self, static_ip_action): - """Sets the static_ip_action of this CloudEndureBlueprint. - - - :param static_ip_action: The static_ip_action of this CloudEndureBlueprint. # noqa: E501 - :type: str - """ - allowed_values = [ - "EXISTING", - "DONT_CREATE", - "CREATE_NEW", - "IF_IN_ORIGIN", - ] # noqa: E501 - if static_ip_action not in allowed_values: - raise ValueError( - "Invalid value for `static_ip_action` ({0}), must be one of {1}".format( # noqa: E501 - static_ip_action, allowed_values - ) - ) - - self._static_ip_action = static_ip_action - - @property - def dedicated_host_identifier(self): - """Gets the dedicated_host_identifier of this CloudEndureBlueprint. # noqa: E501 - - - :return: The dedicated_host_identifier of this CloudEndureBlueprint. # noqa: E501 - :rtype: str - """ - return self._dedicated_host_identifier - - @dedicated_host_identifier.setter - def dedicated_host_identifier(self, dedicated_host_identifier): - """Sets the dedicated_host_identifier of this CloudEndureBlueprint. - - - :param dedicated_host_identifier: The dedicated_host_identifier of this CloudEndureBlueprint. # noqa: E501 - :type: str - """ - - self._dedicated_host_identifier = dedicated_host_identifier - - @property - def use_shared_ram(self): - """Gets the use_shared_ram of this CloudEndureBlueprint. # noqa: E501 - - todo # noqa: E501 - - :return: The use_shared_ram of this CloudEndureBlueprint. # noqa: E501 - :rtype: bool - """ - return self._use_shared_ram - - @use_shared_ram.setter - def use_shared_ram(self, use_shared_ram): - """Sets the use_shared_ram of this CloudEndureBlueprint. - - todo # noqa: E501 - - :param use_shared_ram: The use_shared_ram of this CloudEndureBlueprint. # noqa: E501 - :type: bool - """ - - self._use_shared_ram = use_shared_ram - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureBlueprint, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureBlueprint): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_blueprint_list.py b/cloudendure/cloudendure_api/models/cloud_endure_blueprint_list.py deleted file mode 100644 index 033c171f5..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_blueprint_list.py +++ /dev/null @@ -1,114 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_blueprint import ( - CloudEndureBlueprint, -) # noqa: F401,E501 - - -class CloudEndureBlueprintList: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"items": "list[CloudEndureBlueprint]"} - - attribute_map = {"items": "items"} - - def __init__(self, items=None): # noqa: E501 - """CloudEndureBlueprintList - a model defined in Swagger""" # noqa: E501 - self._items = None - self.discriminator = None - if items is not None: - self.items = items - - @property - def items(self): - """Gets the items of this CloudEndureBlueprintList. # noqa: E501 - - - :return: The items of this CloudEndureBlueprintList. # noqa: E501 - :rtype: list[CloudEndureBlueprint] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureBlueprintList. - - - :param items: The items of this CloudEndureBlueprintList. # noqa: E501 - :type: list[CloudEndureBlueprint] - """ - - self._items = items - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureBlueprintList, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureBlueprintList): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_cloud.py b/cloudendure/cloudendure_api/models/cloud_endure_cloud.py deleted file mode 100644 index f1f140764..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_cloud.py +++ /dev/null @@ -1,181 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureCloud: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"id": "str", "roles": "list[str]", "name": "str"} - - attribute_map = {"id": "id", "roles": "roles", "name": "name"} - - def __init__(self, id=None, roles=None, name=None): # noqa: E501 - """CloudEndureCloud - a model defined in Swagger""" # noqa: E501 - self._id = None - self._roles = None - self._name = None - self.discriminator = None - if id is not None: - self.id = id - if roles is not None: - self.roles = roles - if name is not None: - self.name = name - - @property - def id(self): - """Gets the id of this CloudEndureCloud. # noqa: E501 - - - :return: The id of this CloudEndureCloud. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this CloudEndureCloud. - - - :param id: The id of this CloudEndureCloud. # noqa: E501 - :type: str - """ - - self._id = id - - @property - def roles(self): - """Gets the roles of this CloudEndureCloud. # noqa: E501 - - - :return: The roles of this CloudEndureCloud. # noqa: E501 - :rtype: list[str] - """ - return self._roles - - @roles.setter - def roles(self, roles): - """Sets the roles of this CloudEndureCloud. - - - :param roles: The roles of this CloudEndureCloud. # noqa: E501 - :type: list[str] - """ - allowed_values = ["SOURCE", "TARGET", "BACKUP_TARGET", "FAILBACK"] # noqa: E501 - if not set(roles).issubset(set(allowed_values)): - raise ValueError( - "Invalid values for `roles` [{0}], must be a subset of [{1}]".format( # noqa: E501 - ", ".join(map(str, set(roles) - set(allowed_values))), # noqa: E501 - ", ".join(map(str, allowed_values)), - ) - ) - - self._roles = roles - - @property - def name(self): - """Gets the name of this CloudEndureCloud. # noqa: E501 - - - :return: The name of this CloudEndureCloud. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this CloudEndureCloud. - - - :param name: The name of this CloudEndureCloud. # noqa: E501 - :type: str - """ - allowed_values = [ - "AWS", - "GCP", - "AZURE", - "AZURE_ARM", - "VCENTER", - "GENERIC", - "VIO_BEZEQ", - ] # noqa: E501 - if name not in allowed_values: - raise ValueError( - "Invalid value for `name` ({0}), must be one of {1}".format( # noqa: E501 - name, allowed_values - ) - ) - - self._name = name - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureCloud, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureCloud): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_cloud_credentials.py b/cloudendure/cloudendure_api/models/cloud_endure_cloud_credentials.py deleted file mode 100644 index b8f2d0c72..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_cloud_credentials.py +++ /dev/null @@ -1,226 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureCloudCredentials: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "id": "str", - "public_key": "str", - "account_identifier": "str", - "cloud": "str", - "name": "str", - } - - attribute_map = { - "id": "id", - "public_key": "publicKey", - "account_identifier": "accountIdentifier", - "cloud": "cloud", - "name": "name", - } - - def __init__( - self, id=None, public_key=None, account_identifier=None, cloud=None, name=None - ): # noqa: E501 - """CloudEndureCloudCredentials - a model defined in Swagger""" # noqa: E501 - self._id = None - self._public_key = None - self._account_identifier = None - self._cloud = None - self._name = None - self.discriminator = None - if id is not None: - self.id = id - if public_key is not None: - self.public_key = public_key - if account_identifier is not None: - self.account_identifier = account_identifier - if cloud is not None: - self.cloud = cloud - if name is not None: - self.name = name - - @property - def id(self): - """Gets the id of this CloudEndureCloudCredentials. # noqa: E501 - - - :return: The id of this CloudEndureCloudCredentials. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this CloudEndureCloudCredentials. - - - :param id: The id of this CloudEndureCloudCredentials. # noqa: E501 - :type: str - """ - - self._id = id - - @property - def public_key(self): - """Gets the public_key of this CloudEndureCloudCredentials. # noqa: E501 - - The public part of the Cloud credentials. For AWS - access key ID; for GCP - user email; for Azure - SHA1 digestion of the certificate file. # noqa: E501 - - :return: The public_key of this CloudEndureCloudCredentials. # noqa: E501 - :rtype: str - """ - return self._public_key - - @public_key.setter - def public_key(self, public_key): - """Sets the public_key of this CloudEndureCloudCredentials. - - The public part of the Cloud credentials. For AWS - access key ID; for GCP - user email; for Azure - SHA1 digestion of the certificate file. # noqa: E501 - - :param public_key: The public_key of this CloudEndureCloudCredentials. # noqa: E501 - :type: str - """ - - self._public_key = public_key - - @property - def account_identifier(self): - """Gets the account_identifier of this CloudEndureCloudCredentials. # noqa: E501 - - An ID provided by the cloud for the user account. # noqa: E501 - - :return: The account_identifier of this CloudEndureCloudCredentials. # noqa: E501 - :rtype: str - """ - return self._account_identifier - - @account_identifier.setter - def account_identifier(self, account_identifier): - """Sets the account_identifier of this CloudEndureCloudCredentials. - - An ID provided by the cloud for the user account. # noqa: E501 - - :param account_identifier: The account_identifier of this CloudEndureCloudCredentials. # noqa: E501 - :type: str - """ - - self._account_identifier = account_identifier - - @property - def cloud(self): - """Gets the cloud of this CloudEndureCloudCredentials. # noqa: E501 - - - :return: The cloud of this CloudEndureCloudCredentials. # noqa: E501 - :rtype: str - """ - return self._cloud - - @cloud.setter - def cloud(self, cloud): - """Sets the cloud of this CloudEndureCloudCredentials. - - - :param cloud: The cloud of this CloudEndureCloudCredentials. # noqa: E501 - :type: str - """ - - self._cloud = cloud - - @property - def name(self): - """Gets the name of this CloudEndureCloudCredentials. # noqa: E501 - - An optional (can be empty), user provided, descriptive name. # noqa: E501 - - :return: The name of this CloudEndureCloudCredentials. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this CloudEndureCloudCredentials. - - An optional (can be empty), user provided, descriptive name. # noqa: E501 - - :param name: The name of this CloudEndureCloudCredentials. # noqa: E501 - :type: str - """ - - self._name = name - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureCloudCredentials, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureCloudCredentials): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_cloud_credentials_list.py b/cloudendure/cloudendure_api/models/cloud_endure_cloud_credentials_list.py deleted file mode 100644 index 4ed6dfbe6..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_cloud_credentials_list.py +++ /dev/null @@ -1,114 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_cloud_credentials import ( # noqa: F401,E501 - CloudEndureCloudCredentials, -) - - -class CloudEndureCloudCredentialsList: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"items": "list[CloudEndureCloudCredentials]"} - - attribute_map = {"items": "items"} - - def __init__(self, items=None): # noqa: E501 - """CloudEndureCloudCredentialsList - a model defined in Swagger""" # noqa: E501 - self._items = None - self.discriminator = None - if items is not None: - self.items = items - - @property - def items(self): - """Gets the items of this CloudEndureCloudCredentialsList. # noqa: E501 - - - :return: The items of this CloudEndureCloudCredentialsList. # noqa: E501 - :rtype: list[CloudEndureCloudCredentials] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureCloudCredentialsList. - - - :param items: The items of this CloudEndureCloudCredentialsList. # noqa: E501 - :type: list[CloudEndureCloudCredentials] - """ - - self._items = items - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureCloudCredentialsList, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureCloudCredentialsList): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_cloud_credentials_request.py b/cloudendure/cloudendure_api/models/cloud_endure_cloud_credentials_request.py deleted file mode 100644 index e6f738ca2..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_cloud_credentials_request.py +++ /dev/null @@ -1,263 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureCloudCredentialsRequest: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "public_key": "str", - "name": "str", - "cloud_id": "str", - "private_key": "str", - "account_identifier": "str", - "id": "str", - } - - attribute_map = { - "public_key": "publicKey", - "name": "name", - "cloud_id": "cloudId", - "private_key": "privateKey", - "account_identifier": "accountIdentifier", - "id": "id", - } - - def __init__( - self, - public_key=None, - name=None, - cloud_id=None, - private_key=None, - account_identifier=None, - id=None, - ): # noqa: E501 - """CloudEndureCloudCredentialsRequest - a model defined in Swagger""" # noqa: E501 - self._public_key = None - self._name = None - self._cloud_id = None - self._private_key = None - self._account_identifier = None - self._id = None - self.discriminator = None - if public_key is not None: - self.public_key = public_key - if name is not None: - self.name = name - self.cloud_id = cloud_id - if private_key is not None: - self.private_key = private_key - if account_identifier is not None: - self.account_identifier = account_identifier - if id is not None: - self.id = id - - @property - def public_key(self): - """Gets the public_key of this CloudEndureCloudCredentialsRequest. # noqa: E501 - - The public part of the Cloud credentials. For AWS - The access key ID, For GCP and Azure - N/A. # noqa: E501 - - :return: The public_key of this CloudEndureCloudCredentialsRequest. # noqa: E501 - :rtype: str - """ - return self._public_key - - @public_key.setter - def public_key(self, public_key): - """Sets the public_key of this CloudEndureCloudCredentialsRequest. - - The public part of the Cloud credentials. For AWS - The access key ID, For GCP and Azure - N/A. # noqa: E501 - - :param public_key: The public_key of this CloudEndureCloudCredentialsRequest. # noqa: E501 - :type: str - """ - - self._public_key = public_key - - @property - def name(self): - """Gets the name of this CloudEndureCloudCredentialsRequest. # noqa: E501 - - An optional (can be empty), user provided, descriptive name. # noqa: E501 - - :return: The name of this CloudEndureCloudCredentialsRequest. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this CloudEndureCloudCredentialsRequest. - - An optional (can be empty), user provided, descriptive name. # noqa: E501 - - :param name: The name of this CloudEndureCloudCredentialsRequest. # noqa: E501 - :type: str - """ - - self._name = name - - @property - def cloud_id(self): - """Gets the cloud_id of this CloudEndureCloudCredentialsRequest. # noqa: E501 - - - :return: The cloud_id of this CloudEndureCloudCredentialsRequest. # noqa: E501 - :rtype: str - """ - return self._cloud_id - - @cloud_id.setter - def cloud_id(self, cloud_id): - """Sets the cloud_id of this CloudEndureCloudCredentialsRequest. - - - :param cloud_id: The cloud_id of this CloudEndureCloudCredentialsRequest. # noqa: E501 - :type: str - """ - if cloud_id is None: - raise ValueError( - "Invalid value for `cloud_id`, must not be `None`" - ) # noqa: E501 - - self._cloud_id = cloud_id - - @property - def private_key(self): - """Gets the private_key of this CloudEndureCloudCredentialsRequest. # noqa: E501 - - Cloud credentials secret. For AWS - The secret access key, For GCP - The private key in JSON format, For Azure - The certificate file. # noqa: E501 - - :return: The private_key of this CloudEndureCloudCredentialsRequest. # noqa: E501 - :rtype: str - """ - return self._private_key - - @private_key.setter - def private_key(self, private_key): - """Sets the private_key of this CloudEndureCloudCredentialsRequest. - - Cloud credentials secret. For AWS - The secret access key, For GCP - The private key in JSON format, For Azure - The certificate file. # noqa: E501 - - :param private_key: The private_key of this CloudEndureCloudCredentialsRequest. # noqa: E501 - :type: str - """ - - self._private_key = private_key - - @property - def account_identifier(self): - """Gets the account_identifier of this CloudEndureCloudCredentialsRequest. # noqa: E501 - - Cloud account identifier. For AWS - N/A, For GCP - The project ID, For Azure - The subscription ID. # noqa: E501 - - :return: The account_identifier of this CloudEndureCloudCredentialsRequest. # noqa: E501 - :rtype: str - """ - return self._account_identifier - - @account_identifier.setter - def account_identifier(self, account_identifier): - """Sets the account_identifier of this CloudEndureCloudCredentialsRequest. - - Cloud account identifier. For AWS - N/A, For GCP - The project ID, For Azure - The subscription ID. # noqa: E501 - - :param account_identifier: The account_identifier of this CloudEndureCloudCredentialsRequest. # noqa: E501 - :type: str - """ - - self._account_identifier = account_identifier - - @property - def id(self): - """Gets the id of this CloudEndureCloudCredentialsRequest. # noqa: E501 - - - :return: The id of this CloudEndureCloudCredentialsRequest. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this CloudEndureCloudCredentialsRequest. - - - :param id: The id of this CloudEndureCloudCredentialsRequest. # noqa: E501 - :type: str - """ - - self._id = id - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureCloudCredentialsRequest, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureCloudCredentialsRequest): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_clouds_list.py b/cloudendure/cloudendure_api/models/cloud_endure_clouds_list.py deleted file mode 100644 index 6de1ff3dc..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_clouds_list.py +++ /dev/null @@ -1,114 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_cloud import ( - CloudEndureCloud, -) # noqa: F401,E501 - - -class CloudEndureCloudsList: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"items": "list[CloudEndureCloud]"} - - attribute_map = {"items": "items"} - - def __init__(self, items=None): # noqa: E501 - """CloudEndureCloudsList - a model defined in Swagger""" # noqa: E501 - self._items = None - self.discriminator = None - if items is not None: - self.items = items - - @property - def items(self): - """Gets the items of this CloudEndureCloudsList. # noqa: E501 - - - :return: The items of this CloudEndureCloudsList. # noqa: E501 - :rtype: list[CloudEndureCloud] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureCloudsList. - - - :param items: The items of this CloudEndureCloudsList. # noqa: E501 - :type: list[CloudEndureCloud] - """ - - self._items = items - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureCloudsList, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureCloudsList): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_compute_location.py b/cloudendure/cloudendure_api/models/cloud_endure_compute_location.py deleted file mode 100644 index 97ffa8701..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_compute_location.py +++ /dev/null @@ -1,168 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureComputeLocation: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "is_encryption_supported": "bool", - "location_id": "str", - "name": "str", - } - - attribute_map = { - "is_encryption_supported": "isEncryptionSupported", - "location_id": "locationId", - "name": "name", - } - - def __init__( - self, is_encryption_supported=None, location_id=None, name=None - ): # noqa: E501 - """CloudEndureComputeLocation - a model defined in Swagger""" # noqa: E501 - self._is_encryption_supported = None - self._location_id = None - self._name = None - self.discriminator = None - if is_encryption_supported is not None: - self.is_encryption_supported = is_encryption_supported - if location_id is not None: - self.location_id = location_id - if name is not None: - self.name = name - - @property - def is_encryption_supported(self): - """Gets the is_encryption_supported of this CloudEndureComputeLocation. # noqa: E501 - - - :return: The is_encryption_supported of this CloudEndureComputeLocation. # noqa: E501 - :rtype: bool - """ - return self._is_encryption_supported - - @is_encryption_supported.setter - def is_encryption_supported(self, is_encryption_supported): - """Sets the is_encryption_supported of this CloudEndureComputeLocation. - - - :param is_encryption_supported: The is_encryption_supported of this CloudEndureComputeLocation. # noqa: E501 - :type: bool - """ - - self._is_encryption_supported = is_encryption_supported - - @property - def location_id(self): - """Gets the location_id of this CloudEndureComputeLocation. # noqa: E501 - - - :return: The location_id of this CloudEndureComputeLocation. # noqa: E501 - :rtype: str - """ - return self._location_id - - @location_id.setter - def location_id(self, location_id): - """Sets the location_id of this CloudEndureComputeLocation. - - - :param location_id: The location_id of this CloudEndureComputeLocation. # noqa: E501 - :type: str - """ - - self._location_id = location_id - - @property - def name(self): - """Gets the name of this CloudEndureComputeLocation. # noqa: E501 - - - :return: The name of this CloudEndureComputeLocation. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this CloudEndureComputeLocation. - - - :param name: The name of this CloudEndureComputeLocation. # noqa: E501 - :type: str - """ - - self._name = name - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureComputeLocation, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureComputeLocation): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_configurations.py b/cloudendure/cloudendure_api/models/cloud_endure_configurations.py deleted file mode 100644 index d4fb00885..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_configurations.py +++ /dev/null @@ -1,134 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureConfigurations: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"name": "str", "value": "str"} - - attribute_map = {"name": "name", "value": "value"} - - def __init__(self, name=None, value=None): # noqa: E501 - """CloudEndureConfigurations - a model defined in Swagger""" # noqa: E501 - self._name = None - self._value = None - self.discriminator = None - if name is not None: - self.name = name - if value is not None: - self.value = value - - @property - def name(self): - """Gets the name of this CloudEndureConfigurations. # noqa: E501 - - - :return: The name of this CloudEndureConfigurations. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this CloudEndureConfigurations. - - - :param name: The name of this CloudEndureConfigurations. # noqa: E501 - :type: str - """ - - self._name = name - - @property - def value(self): - """Gets the value of this CloudEndureConfigurations. # noqa: E501 - - - :return: The value of this CloudEndureConfigurations. # noqa: E501 - :rtype: str - """ - return self._value - - @value.setter - def value(self, value): - """Sets the value of this CloudEndureConfigurations. - - - :param value: The value of this CloudEndureConfigurations. # noqa: E501 - :type: str - """ - - self._value = value - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureConfigurations, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureConfigurations): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_configurations_list.py b/cloudendure/cloudendure_api/models/cloud_endure_configurations_list.py deleted file mode 100644 index c9ef784b2..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_configurations_list.py +++ /dev/null @@ -1,114 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_configurations import ( - CloudEndureConfigurations, -) # noqa: F401,E501 - - -class CloudEndureConfigurationsList: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"items": "list[CloudEndureConfigurations]"} - - attribute_map = {"items": "items"} - - def __init__(self, items=None): # noqa: E501 - """CloudEndureConfigurationsList - a model defined in Swagger""" # noqa: E501 - self._items = None - self.discriminator = None - if items is not None: - self.items = items - - @property - def items(self): - """Gets the items of this CloudEndureConfigurationsList. # noqa: E501 - - - :return: The items of this CloudEndureConfigurationsList. # noqa: E501 - :rtype: list[CloudEndureConfigurations] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureConfigurationsList. - - - :param items: The items of this CloudEndureConfigurationsList. # noqa: E501 - :type: list[CloudEndureConfigurations] - """ - - self._items = items - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureConfigurationsList, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureConfigurationsList): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_error.py b/cloudendure/cloudendure_api/models/cloud_endure_error.py deleted file mode 100644 index 7df93607c..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_error.py +++ /dev/null @@ -1,134 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureError: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"message": "str", "code": "str"} - - attribute_map = {"message": "message", "code": "code"} - - def __init__(self, message=None, code=None): # noqa: E501 - """CloudEndureError - a model defined in Swagger""" # noqa: E501 - self._message = None - self._code = None - self.discriminator = None - if message is not None: - self.message = message - if code is not None: - self.code = code - - @property - def message(self): - """Gets the message of this CloudEndureError. # noqa: E501 - - - :return: The message of this CloudEndureError. # noqa: E501 - :rtype: str - """ - return self._message - - @message.setter - def message(self, message): - """Sets the message of this CloudEndureError. - - - :param message: The message of this CloudEndureError. # noqa: E501 - :type: str - """ - - self._message = message - - @property - def code(self): - """Gets the code of this CloudEndureError. # noqa: E501 - - - :return: The code of this CloudEndureError. # noqa: E501 - :rtype: str - """ - return self._code - - @code.setter - def code(self, code): - """Sets the code of this CloudEndureError. - - - :param code: The code of this CloudEndureError. # noqa: E501 - :type: str - """ - - self._code = code - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureError, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureError): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_extended_account_info.py b/cloudendure/cloudendure_api/models/cloud_endure_extended_account_info.py deleted file mode 100644 index 150a6c97b..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_extended_account_info.py +++ /dev/null @@ -1,328 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_account import ( - CloudEndureAccount, -) # noqa: F401,E501 -from cloudendure.cloudendure_api.models.cloud_endure_clouds_list import ( - CloudEndureCloudsList, -) # noqa: F401,E501 -from cloudendure.cloudendure_api.models.cloud_endure_projects_list import ( - CloudEndureProjectsList, -) # noqa: F401,E501 -from cloudendure.cloudendure_api.models.cloud_endure_region import ( - CloudEndureRegion, -) # noqa: F401,E501 -from cloudendure.cloudendure_api.models.cloud_endure_replication_configuration_list import ( # noqa: F401,E501 - CloudEndureReplicationConfigurationList, -) -from cloudendure.cloudendure_api.models.cloud_endure_time import ( - CloudEndureTime, -) # noqa: F401,E501 -from cloudendure.cloudendure_api.models.cloud_endure_user import ( - CloudEndureUser, -) # noqa: F401,E501 - - -class CloudEndureExtendedAccountInfo: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "account": "CloudEndureAccount", - "clouds": "CloudEndureCloudsList", - "generic_region": "CloudEndureRegion", - "date_time": "CloudEndureTime", - "user": "CloudEndureUser", - "projects": "CloudEndureProjectsList", - "is_newly_registered": "bool", - "replication_configurations": "CloudEndureReplicationConfigurationList", - } - - attribute_map = { - "account": "account", - "clouds": "clouds", - "generic_region": "genericRegion", - "date_time": "dateTime", - "user": "user", - "projects": "projects", - "is_newly_registered": "isNewlyRegistered", - "replication_configurations": "replicationConfigurations", - } - - def __init__( - self, - account=None, - clouds=None, - generic_region=None, - date_time=None, - user=None, - projects=None, - is_newly_registered=None, - replication_configurations=None, - ): # noqa: E501 - """CloudEndureExtendedAccountInfo - a model defined in Swagger""" # noqa: E501 - self._account = None - self._clouds = None - self._generic_region = None - self._date_time = None - self._user = None - self._projects = None - self._is_newly_registered = None - self._replication_configurations = None - self.discriminator = None - if account is not None: - self.account = account - if clouds is not None: - self.clouds = clouds - if generic_region is not None: - self.generic_region = generic_region - if date_time is not None: - self.date_time = date_time - if user is not None: - self.user = user - if projects is not None: - self.projects = projects - if is_newly_registered is not None: - self.is_newly_registered = is_newly_registered - if replication_configurations is not None: - self.replication_configurations = replication_configurations - - @property - def account(self): - """Gets the account of this CloudEndureExtendedAccountInfo. # noqa: E501 - - - :return: The account of this CloudEndureExtendedAccountInfo. # noqa: E501 - :rtype: CloudEndureAccount - """ - return self._account - - @account.setter - def account(self, account): - """Sets the account of this CloudEndureExtendedAccountInfo. - - - :param account: The account of this CloudEndureExtendedAccountInfo. # noqa: E501 - :type: CloudEndureAccount - """ - - self._account = account - - @property - def clouds(self): - """Gets the clouds of this CloudEndureExtendedAccountInfo. # noqa: E501 - - - :return: The clouds of this CloudEndureExtendedAccountInfo. # noqa: E501 - :rtype: CloudEndureCloudsList - """ - return self._clouds - - @clouds.setter - def clouds(self, clouds): - """Sets the clouds of this CloudEndureExtendedAccountInfo. - - - :param clouds: The clouds of this CloudEndureExtendedAccountInfo. # noqa: E501 - :type: CloudEndureCloudsList - """ - - self._clouds = clouds - - @property - def generic_region(self): - """Gets the generic_region of this CloudEndureExtendedAccountInfo. # noqa: E501 - - - :return: The generic_region of this CloudEndureExtendedAccountInfo. # noqa: E501 - :rtype: CloudEndureRegion - """ - return self._generic_region - - @generic_region.setter - def generic_region(self, generic_region): - """Sets the generic_region of this CloudEndureExtendedAccountInfo. - - - :param generic_region: The generic_region of this CloudEndureExtendedAccountInfo. # noqa: E501 - :type: CloudEndureRegion - """ - - self._generic_region = generic_region - - @property - def date_time(self): - """Gets the date_time of this CloudEndureExtendedAccountInfo. # noqa: E501 - - - :return: The date_time of this CloudEndureExtendedAccountInfo. # noqa: E501 - :rtype: CloudEndureTime - """ - return self._date_time - - @date_time.setter - def date_time(self, date_time): - """Sets the date_time of this CloudEndureExtendedAccountInfo. - - - :param date_time: The date_time of this CloudEndureExtendedAccountInfo. # noqa: E501 - :type: CloudEndureTime - """ - - self._date_time = date_time - - @property - def user(self): - """Gets the user of this CloudEndureExtendedAccountInfo. # noqa: E501 - - - :return: The user of this CloudEndureExtendedAccountInfo. # noqa: E501 - :rtype: CloudEndureUser - """ - return self._user - - @user.setter - def user(self, user): - """Sets the user of this CloudEndureExtendedAccountInfo. - - - :param user: The user of this CloudEndureExtendedAccountInfo. # noqa: E501 - :type: CloudEndureUser - """ - - self._user = user - - @property - def projects(self): - """Gets the projects of this CloudEndureExtendedAccountInfo. # noqa: E501 - - - :return: The projects of this CloudEndureExtendedAccountInfo. # noqa: E501 - :rtype: CloudEndureProjectsList - """ - return self._projects - - @projects.setter - def projects(self, projects): - """Sets the projects of this CloudEndureExtendedAccountInfo. - - - :param projects: The projects of this CloudEndureExtendedAccountInfo. # noqa: E501 - :type: CloudEndureProjectsList - """ - - self._projects = projects - - @property - def is_newly_registered(self): - """Gets the is_newly_registered of this CloudEndureExtendedAccountInfo. # noqa: E501 - - - :return: The is_newly_registered of this CloudEndureExtendedAccountInfo. # noqa: E501 - :rtype: bool - """ - return self._is_newly_registered - - @is_newly_registered.setter - def is_newly_registered(self, is_newly_registered): - """Sets the is_newly_registered of this CloudEndureExtendedAccountInfo. - - - :param is_newly_registered: The is_newly_registered of this CloudEndureExtendedAccountInfo. # noqa: E501 - :type: bool - """ - - self._is_newly_registered = is_newly_registered - - @property - def replication_configurations(self): - """Gets the replication_configurations of this CloudEndureExtendedAccountInfo. # noqa: E501 - - - :return: The replication_configurations of this CloudEndureExtendedAccountInfo. # noqa: E501 - :rtype: CloudEndureReplicationConfigurationList - """ - return self._replication_configurations - - @replication_configurations.setter - def replication_configurations(self, replication_configurations): - """Sets the replication_configurations of this CloudEndureExtendedAccountInfo. - - - :param replication_configurations: The replication_configurations of this CloudEndureExtendedAccountInfo. # noqa: E501 - :type: CloudEndureReplicationConfigurationList - """ - - self._replication_configurations = replication_configurations - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureExtendedAccountInfo, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureExtendedAccountInfo): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_find_files_parameters.py b/cloudendure/cloudendure_api/models/cloud_endure_find_files_parameters.py deleted file mode 100644 index 5db32d27c..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_find_files_parameters.py +++ /dev/null @@ -1,137 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureFindFilesParameters: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"query": "str", "machine_i_ds": "list[str]"} - - attribute_map = {"query": "query", "machine_i_ds": "machineIDs"} - - def __init__(self, query=None, machine_i_ds=None): # noqa: E501 - """CloudEndureFindFilesParameters - a model defined in Swagger""" # noqa: E501 - self._query = None - self._machine_i_ds = None - self.discriminator = None - self.query = query - if machine_i_ds is not None: - self.machine_i_ds = machine_i_ds - - @property - def query(self): - """Gets the query of this CloudEndureFindFilesParameters. # noqa: E501 - - - :return: The query of this CloudEndureFindFilesParameters. # noqa: E501 - :rtype: str - """ - return self._query - - @query.setter - def query(self, query): - """Sets the query of this CloudEndureFindFilesParameters. - - - :param query: The query of this CloudEndureFindFilesParameters. # noqa: E501 - :type: str - """ - if query is None: - raise ValueError( - "Invalid value for `query`, must not be `None`" - ) # noqa: E501 - - self._query = query - - @property - def machine_i_ds(self): - """Gets the machine_i_ds of this CloudEndureFindFilesParameters. # noqa: E501 - - - :return: The machine_i_ds of this CloudEndureFindFilesParameters. # noqa: E501 - :rtype: list[str] - """ - return self._machine_i_ds - - @machine_i_ds.setter - def machine_i_ds(self, machine_i_ds): - """Sets the machine_i_ds of this CloudEndureFindFilesParameters. - - - :param machine_i_ds: The machine_i_ds of this CloudEndureFindFilesParameters. # noqa: E501 - :type: list[str] - """ - - self._machine_i_ds = machine_i_ds - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureFindFilesParameters, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureFindFilesParameters): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_find_files_result.py b/cloudendure/cloudendure_api/models/cloud_endure_find_files_result.py deleted file mode 100644 index 14319a9df..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_find_files_result.py +++ /dev/null @@ -1,174 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureFindFilesResult: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "machine_id": "str", - "points_in_time": "object", - "file_path": "str", - } - - attribute_map = { - "machine_id": "machineId", - "points_in_time": "pointsInTime", - "file_path": "filePath", - } - - def __init__( - self, machine_id=None, points_in_time=None, file_path=None - ): # noqa: E501 - """CloudEndureFindFilesResult - a model defined in Swagger""" # noqa: E501 - self._machine_id = None - self._points_in_time = None - self._file_path = None - self.discriminator = None - self.machine_id = machine_id - if points_in_time is not None: - self.points_in_time = points_in_time - self.file_path = file_path - - @property - def machine_id(self): - """Gets the machine_id of this CloudEndureFindFilesResult. # noqa: E501 - - - :return: The machine_id of this CloudEndureFindFilesResult. # noqa: E501 - :rtype: str - """ - return self._machine_id - - @machine_id.setter - def machine_id(self, machine_id): - """Sets the machine_id of this CloudEndureFindFilesResult. - - - :param machine_id: The machine_id of this CloudEndureFindFilesResult. # noqa: E501 - :type: str - """ - if machine_id is None: - raise ValueError( - "Invalid value for `machine_id`, must not be `None`" - ) # noqa: E501 - - self._machine_id = machine_id - - @property - def points_in_time(self): - """Gets the points_in_time of this CloudEndureFindFilesResult. # noqa: E501 - - - :return: The points_in_time of this CloudEndureFindFilesResult. # noqa: E501 - :rtype: object - """ - return self._points_in_time - - @points_in_time.setter - def points_in_time(self, points_in_time): - """Sets the points_in_time of this CloudEndureFindFilesResult. - - - :param points_in_time: The points_in_time of this CloudEndureFindFilesResult. # noqa: E501 - :type: object - """ - - self._points_in_time = points_in_time - - @property - def file_path(self): - """Gets the file_path of this CloudEndureFindFilesResult. # noqa: E501 - - - :return: The file_path of this CloudEndureFindFilesResult. # noqa: E501 - :rtype: str - """ - return self._file_path - - @file_path.setter - def file_path(self, file_path): - """Sets the file_path of this CloudEndureFindFilesResult. - - - :param file_path: The file_path of this CloudEndureFindFilesResult. # noqa: E501 - :type: str - """ - if file_path is None: - raise ValueError( - "Invalid value for `file_path`, must not be `None`" - ) # noqa: E501 - - self._file_path = file_path - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureFindFilesResult, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureFindFilesResult): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_find_files_result_pit.py b/cloudendure/cloudendure_api/models/cloud_endure_find_files_result_pit.py deleted file mode 100644 index 7ffc46c8f..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_find_files_result_pit.py +++ /dev/null @@ -1,138 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureFindFilesResultPit: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"id": "str", "date_time": "datetime"} - - attribute_map = {"id": "id", "date_time": "dateTime"} - - def __init__(self, id=None, date_time=None): # noqa: E501 - """CloudEndureFindFilesResultPit - a model defined in Swagger""" # noqa: E501 - self._id = None - self._date_time = None - self.discriminator = None - self.id = id - self.date_time = date_time - - @property - def id(self): - """Gets the id of this CloudEndureFindFilesResultPit. # noqa: E501 - - - :return: The id of this CloudEndureFindFilesResultPit. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this CloudEndureFindFilesResultPit. - - - :param id: The id of this CloudEndureFindFilesResultPit. # noqa: E501 - :type: str - """ - if id is None: - raise ValueError("Invalid value for `id`, must not be `None`") # noqa: E501 - - self._id = id - - @property - def date_time(self): - """Gets the date_time of this CloudEndureFindFilesResultPit. # noqa: E501 - - - :return: The date_time of this CloudEndureFindFilesResultPit. # noqa: E501 - :rtype: datetime - """ - return self._date_time - - @date_time.setter - def date_time(self, date_time): - """Sets the date_time of this CloudEndureFindFilesResultPit. - - - :param date_time: The date_time of this CloudEndureFindFilesResultPit. # noqa: E501 - :type: datetime - """ - if date_time is None: - raise ValueError( - "Invalid value for `date_time`, must not be `None`" - ) # noqa: E501 - - self._date_time = date_time - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureFindFilesResultPit, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureFindFilesResultPit): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_find_files_results.py b/cloudendure/cloudendure_api/models/cloud_endure_find_files_results.py deleted file mode 100644 index cc81aaaa5..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_find_files_results.py +++ /dev/null @@ -1,204 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_find_files_result import ( # noqa: F401,E501 - CloudEndureFindFilesResult, -) - - -class CloudEndureFindFilesResults: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "count": "int", - "query": "str", - "items": "list[CloudEndureFindFilesResult]", - "invalid_machine_i_ds": "list[str]", - } - - attribute_map = { - "count": "count", - "query": "query", - "items": "items", - "invalid_machine_i_ds": "invalidMachineIDs", - } - - def __init__( - self, count=None, query=None, items=None, invalid_machine_i_ds=None - ): # noqa: E501 - """CloudEndureFindFilesResults - a model defined in Swagger""" # noqa: E501 - self._count = None - self._query = None - self._items = None - self._invalid_machine_i_ds = None - self.discriminator = None - self.count = count - self.query = query - if items is not None: - self.items = items - if invalid_machine_i_ds is not None: - self.invalid_machine_i_ds = invalid_machine_i_ds - - @property - def count(self): - """Gets the count of this CloudEndureFindFilesResults. # noqa: E501 - - - :return: The count of this CloudEndureFindFilesResults. # noqa: E501 - :rtype: int - """ - return self._count - - @count.setter - def count(self, count): - """Sets the count of this CloudEndureFindFilesResults. - - - :param count: The count of this CloudEndureFindFilesResults. # noqa: E501 - :type: int - """ - if count is None: - raise ValueError( - "Invalid value for `count`, must not be `None`" - ) # noqa: E501 - - self._count = count - - @property - def query(self): - """Gets the query of this CloudEndureFindFilesResults. # noqa: E501 - - - :return: The query of this CloudEndureFindFilesResults. # noqa: E501 - :rtype: str - """ - return self._query - - @query.setter - def query(self, query): - """Sets the query of this CloudEndureFindFilesResults. - - - :param query: The query of this CloudEndureFindFilesResults. # noqa: E501 - :type: str - """ - if query is None: - raise ValueError( - "Invalid value for `query`, must not be `None`" - ) # noqa: E501 - - self._query = query - - @property - def items(self): - """Gets the items of this CloudEndureFindFilesResults. # noqa: E501 - - - :return: The items of this CloudEndureFindFilesResults. # noqa: E501 - :rtype: list[CloudEndureFindFilesResult] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureFindFilesResults. - - - :param items: The items of this CloudEndureFindFilesResults. # noqa: E501 - :type: list[CloudEndureFindFilesResult] - """ - - self._items = items - - @property - def invalid_machine_i_ds(self): - """Gets the invalid_machine_i_ds of this CloudEndureFindFilesResults. # noqa: E501 - - - :return: The invalid_machine_i_ds of this CloudEndureFindFilesResults. # noqa: E501 - :rtype: list[str] - """ - return self._invalid_machine_i_ds - - @invalid_machine_i_ds.setter - def invalid_machine_i_ds(self, invalid_machine_i_ds): - """Sets the invalid_machine_i_ds of this CloudEndureFindFilesResults. - - - :param invalid_machine_i_ds: The invalid_machine_i_ds of this CloudEndureFindFilesResults. # noqa: E501 - :type: list[str] - """ - - self._invalid_machine_i_ds = invalid_machine_i_ds - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureFindFilesResults, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureFindFilesResults): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_gcp_machines_finance_data.py b/cloudendure/cloudendure_api/models/cloud_endure_gcp_machines_finance_data.py deleted file mode 100644 index 3be51e81b..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_gcp_machines_finance_data.py +++ /dev/null @@ -1,306 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureGcpMachinesFinanceData: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "gcp_project_name": "str", - "machine_name": "str", - "number_of_cores": "int", - "creation_time": "datetime", - "is_preemptible": "bool", - "has_gpu": "bool", - "machine_id": "str", - "ce_project_name": "str", - } - - attribute_map = { - "gcp_project_name": "gcp_project_name", - "machine_name": "machine_name", - "number_of_cores": "number_of_cores", - "creation_time": "creation_time", - "is_preemptible": "is_preemptible", - "has_gpu": "has_gpu", - "machine_id": "machine_id", - "ce_project_name": "ce_project_name", - } - - def __init__( - self, - gcp_project_name=None, - machine_name=None, - number_of_cores=None, - creation_time=None, - is_preemptible=None, - has_gpu=None, - machine_id=None, - ce_project_name=None, - ): # noqa: E501 - """CloudEndureGcpMachinesFinanceData - a model defined in Swagger""" # noqa: E501 - self._gcp_project_name = None - self._machine_name = None - self._number_of_cores = None - self._creation_time = None - self._is_preemptible = None - self._has_gpu = None - self._machine_id = None - self._ce_project_name = None - self.discriminator = None - if gcp_project_name is not None: - self.gcp_project_name = gcp_project_name - if machine_name is not None: - self.machine_name = machine_name - if number_of_cores is not None: - self.number_of_cores = number_of_cores - if creation_time is not None: - self.creation_time = creation_time - if is_preemptible is not None: - self.is_preemptible = is_preemptible - if has_gpu is not None: - self.has_gpu = has_gpu - if machine_id is not None: - self.machine_id = machine_id - if ce_project_name is not None: - self.ce_project_name = ce_project_name - - @property - def gcp_project_name(self): - """Gets the gcp_project_name of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - - - :return: The gcp_project_name of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - :rtype: str - """ - return self._gcp_project_name - - @gcp_project_name.setter - def gcp_project_name(self, gcp_project_name): - """Sets the gcp_project_name of this CloudEndureGcpMachinesFinanceData. - - - :param gcp_project_name: The gcp_project_name of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - :type: str - """ - - self._gcp_project_name = gcp_project_name - - @property - def machine_name(self): - """Gets the machine_name of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - - - :return: The machine_name of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - :rtype: str - """ - return self._machine_name - - @machine_name.setter - def machine_name(self, machine_name): - """Sets the machine_name of this CloudEndureGcpMachinesFinanceData. - - - :param machine_name: The machine_name of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - :type: str - """ - - self._machine_name = machine_name - - @property - def number_of_cores(self): - """Gets the number_of_cores of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - - - :return: The number_of_cores of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - :rtype: int - """ - return self._number_of_cores - - @number_of_cores.setter - def number_of_cores(self, number_of_cores): - """Sets the number_of_cores of this CloudEndureGcpMachinesFinanceData. - - - :param number_of_cores: The number_of_cores of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - :type: int - """ - - self._number_of_cores = number_of_cores - - @property - def creation_time(self): - """Gets the creation_time of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - - - :return: The creation_time of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - :rtype: datetime - """ - return self._creation_time - - @creation_time.setter - def creation_time(self, creation_time): - """Sets the creation_time of this CloudEndureGcpMachinesFinanceData. - - - :param creation_time: The creation_time of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - :type: datetime - """ - - self._creation_time = creation_time - - @property - def is_preemptible(self): - """Gets the is_preemptible of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - - - :return: The is_preemptible of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - :rtype: bool - """ - return self._is_preemptible - - @is_preemptible.setter - def is_preemptible(self, is_preemptible): - """Sets the is_preemptible of this CloudEndureGcpMachinesFinanceData. - - - :param is_preemptible: The is_preemptible of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - :type: bool - """ - - self._is_preemptible = is_preemptible - - @property - def has_gpu(self): - """Gets the has_gpu of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - - - :return: The has_gpu of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - :rtype: bool - """ - return self._has_gpu - - @has_gpu.setter - def has_gpu(self, has_gpu): - """Sets the has_gpu of this CloudEndureGcpMachinesFinanceData. - - - :param has_gpu: The has_gpu of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - :type: bool - """ - - self._has_gpu = has_gpu - - @property - def machine_id(self): - """Gets the machine_id of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - - - :return: The machine_id of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - :rtype: str - """ - return self._machine_id - - @machine_id.setter - def machine_id(self, machine_id): - """Sets the machine_id of this CloudEndureGcpMachinesFinanceData. - - - :param machine_id: The machine_id of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - :type: str - """ - - self._machine_id = machine_id - - @property - def ce_project_name(self): - """Gets the ce_project_name of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - - - :return: The ce_project_name of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - :rtype: str - """ - return self._ce_project_name - - @ce_project_name.setter - def ce_project_name(self, ce_project_name): - """Sets the ce_project_name of this CloudEndureGcpMachinesFinanceData. - - - :param ce_project_name: The ce_project_name of this CloudEndureGcpMachinesFinanceData. # noqa: E501 - :type: str - """ - - self._ce_project_name = ce_project_name - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureGcpMachinesFinanceData, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureGcpMachinesFinanceData): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_identity_provider_redirect_response.py b/cloudendure/cloudendure_api/models/cloud_endure_identity_provider_redirect_response.py deleted file mode 100644 index 392bf3188..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_identity_provider_redirect_response.py +++ /dev/null @@ -1,110 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureIdentityProviderRedirectResponse: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"saml_redirect": "str"} - - attribute_map = {"saml_redirect": "samlRedirect"} - - def __init__(self, saml_redirect=None): # noqa: E501 - """CloudEndureIdentityProviderRedirectResponse - a model defined in Swagger""" # noqa: E501 - self._saml_redirect = None - self.discriminator = None - if saml_redirect is not None: - self.saml_redirect = saml_redirect - - @property - def saml_redirect(self): - """Gets the saml_redirect of this CloudEndureIdentityProviderRedirectResponse. # noqa: E501 - - - :return: The saml_redirect of this CloudEndureIdentityProviderRedirectResponse. # noqa: E501 - :rtype: str - """ - return self._saml_redirect - - @saml_redirect.setter - def saml_redirect(self, saml_redirect): - """Sets the saml_redirect of this CloudEndureIdentityProviderRedirectResponse. - - - :param saml_redirect: The saml_redirect of this CloudEndureIdentityProviderRedirectResponse. # noqa: E501 - :type: str - """ - - self._saml_redirect = saml_redirect - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureIdentityProviderRedirectResponse, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureIdentityProviderRedirectResponse): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_initialization_step.py b/cloudendure/cloudendure_api/models/cloud_endure_initialization_step.py deleted file mode 100644 index fa717d07a..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_initialization_step.py +++ /dev/null @@ -1,190 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureInitializationStep: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"status": "str", "message": "str", "name": "str"} - - attribute_map = {"status": "status", "message": "message", "name": "name"} - - def __init__(self, status=None, message=None, name=None): # noqa: E501 - """CloudEndureInitializationStep - a model defined in Swagger""" # noqa: E501 - self._status = None - self._message = None - self._name = None - self.discriminator = None - if status is not None: - self.status = status - if message is not None: - self.message = message - if name is not None: - self.name = name - - @property - def status(self): - """Gets the status of this CloudEndureInitializationStep. # noqa: E501 - - - :return: The status of this CloudEndureInitializationStep. # noqa: E501 - :rtype: str - """ - return self._status - - @status.setter - def status(self, status): - """Sets the status of this CloudEndureInitializationStep. - - - :param status: The status of this CloudEndureInitializationStep. # noqa: E501 - :type: str - """ - allowed_values = [ - "NOT_STARTED", - "STARTED", - "SUCCEEDED", - "FAILED", - "SKIPPED", - ] # noqa: E501 - if status not in allowed_values: - raise ValueError( - "Invalid value for `status` ({0}), must be one of {1}".format( # noqa: E501 - status, allowed_values - ) - ) - - self._status = status - - @property - def message(self): - """Gets the message of this CloudEndureInitializationStep. # noqa: E501 - - - :return: The message of this CloudEndureInitializationStep. # noqa: E501 - :rtype: str - """ - return self._message - - @message.setter - def message(self, message): - """Sets the message of this CloudEndureInitializationStep. - - - :param message: The message of this CloudEndureInitializationStep. # noqa: E501 - :type: str - """ - - self._message = message - - @property - def name(self): - """Gets the name of this CloudEndureInitializationStep. # noqa: E501 - - - :return: The name of this CloudEndureInitializationStep. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this CloudEndureInitializationStep. - - - :param name: The name of this CloudEndureInitializationStep. # noqa: E501 - :type: str - """ - allowed_values = [ - "WAITING_TO_INITIATE_REPLICATION", - "CREATING_FIREWALL_RULES", - "CREATING_REPLICATION_SERVER", - "BOOTING_REPLICATION_SERVER", - "RESOLVING_MANAGEMENT_SERVER_ADDRESS", - "AUTHENTICATING_WITH_MANAGEMENT_SERVER", - "DOWNLOADING_REPLICATION_SOFTWARE", - "CREATING_REPLICATION_DISKS", - "ATTACHING_REPLICATION_DISKS", - "PAIRING_REPLICATION_SERVER_WITH_AGENT", - "ESTABLISHING_AGENT_REPLICATOR_COMMUNICATION", - ] # noqa: E501 - if name not in allowed_values: - raise ValueError( - "Invalid value for `name` ({0}), must be one of {1}".format( # noqa: E501 - name, allowed_values - ) - ) - - self._name = name - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureInitializationStep, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureInitializationStep): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_job.py b/cloudendure/cloudendure_api/models/cloud_endure_job.py deleted file mode 100644 index e5d2fe337..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_job.py +++ /dev/null @@ -1,336 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureJob: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "status": "str", - "participating_machines": "list[str]", - "log": "list[object]", - "type": "str", - "end_date_time": "datetime", - "creation_date_time": "datetime", - "id": "str", - "initiated_by": "str", - } - - attribute_map = { - "status": "status", - "participating_machines": "participatingMachines", - "log": "log", - "type": "type", - "end_date_time": "endDateTime", - "creation_date_time": "creationDateTime", - "id": "id", - "initiated_by": "initiatedBy", - } - - def __init__( - self, - status=None, - participating_machines=None, - log=None, - type=None, - end_date_time=None, - creation_date_time=None, - id=None, - initiated_by=None, - ): # noqa: E501 - """CloudEndureJob - a model defined in Swagger""" # noqa: E501 - self._status = None - self._participating_machines = None - self._log = None - self._type = None - self._end_date_time = None - self._creation_date_time = None - self._id = None - self._initiated_by = None - self.discriminator = None - if status is not None: - self.status = status - if participating_machines is not None: - self.participating_machines = participating_machines - if log is not None: - self.log = log - if type is not None: - self.type = type - if end_date_time is not None: - self.end_date_time = end_date_time - if creation_date_time is not None: - self.creation_date_time = creation_date_time - if id is not None: - self.id = id - if initiated_by is not None: - self.initiated_by = initiated_by - - @property - def status(self): - """Gets the status of this CloudEndureJob. # noqa: E501 - - - :return: The status of this CloudEndureJob. # noqa: E501 - :rtype: str - """ - return self._status - - @status.setter - def status(self, status): - """Sets the status of this CloudEndureJob. - - - :param status: The status of this CloudEndureJob. # noqa: E501 - :type: str - """ - allowed_values = ["PENDING", "STARTED", "COMPLETED", "FAILED"] # noqa: E501 - if status not in allowed_values: - raise ValueError( - "Invalid value for `status` ({0}), must be one of {1}".format( # noqa: E501 - status, allowed_values - ) - ) - - self._status = status - - @property - def participating_machines(self): - """Gets the participating_machines of this CloudEndureJob. # noqa: E501 - - - :return: The participating_machines of this CloudEndureJob. # noqa: E501 - :rtype: list[str] - """ - return self._participating_machines - - @participating_machines.setter - def participating_machines(self, participating_machines): - """Sets the participating_machines of this CloudEndureJob. - - - :param participating_machines: The participating_machines of this CloudEndureJob. # noqa: E501 - :type: list[str] - """ - - self._participating_machines = participating_machines - - @property - def log(self): - """Gets the log of this CloudEndureJob. # noqa: E501 - - - :return: The log of this CloudEndureJob. # noqa: E501 - :rtype: list[object] - """ - return self._log - - @log.setter - def log(self, log): - """Sets the log of this CloudEndureJob. - - - :param log: The log of this CloudEndureJob. # noqa: E501 - :type: list[object] - """ - - self._log = log - - @property - def type(self): - """Gets the type of this CloudEndureJob. # noqa: E501 - - todo explian that cleanup is also for restore servers # noqa: E501 - - :return: The type of this CloudEndureJob. # noqa: E501 - :rtype: str - """ - return self._type - - @type.setter - def type(self, type): - """Sets the type of this CloudEndureJob. - - todo explian that cleanup is also for restore servers # noqa: E501 - - :param type: The type of this CloudEndureJob. # noqa: E501 - :type: str - """ - allowed_values = [ - "CLEANUP", - "CUTOVER_LAUNCH", - "RECOVERY_LAUNCH", - "RESTORE_LAUNCH", - "TEST_LAUNCH", - "CONSOLIDATE_VMDKS", - "FILE_RESTORE", - "RECOVERY_PLAN_RECOVERY", - "RECOVERY_PLAN_TEST", - "RECOVERY_PLAN_CUTOVER", - "RECOVERY_PLAN_CLEANUP", - ] # noqa: E501 - if type not in allowed_values: - raise ValueError( - "Invalid value for `type` ({0}), must be one of {1}".format( # noqa: E501 - type, allowed_values - ) - ) - - self._type = type - - @property - def end_date_time(self): - """Gets the end_date_time of this CloudEndureJob. # noqa: E501 - - - :return: The end_date_time of this CloudEndureJob. # noqa: E501 - :rtype: datetime - """ - return self._end_date_time - - @end_date_time.setter - def end_date_time(self, end_date_time): - """Sets the end_date_time of this CloudEndureJob. - - - :param end_date_time: The end_date_time of this CloudEndureJob. # noqa: E501 - :type: datetime - """ - - self._end_date_time = end_date_time - - @property - def creation_date_time(self): - """Gets the creation_date_time of this CloudEndureJob. # noqa: E501 - - - :return: The creation_date_time of this CloudEndureJob. # noqa: E501 - :rtype: datetime - """ - return self._creation_date_time - - @creation_date_time.setter - def creation_date_time(self, creation_date_time): - """Sets the creation_date_time of this CloudEndureJob. - - - :param creation_date_time: The creation_date_time of this CloudEndureJob. # noqa: E501 - :type: datetime - """ - - self._creation_date_time = creation_date_time - - @property - def id(self): - """Gets the id of this CloudEndureJob. # noqa: E501 - - - :return: The id of this CloudEndureJob. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this CloudEndureJob. - - - :param id: The id of this CloudEndureJob. # noqa: E501 - :type: str - """ - - self._id = id - - @property - def initiated_by(self): - """Gets the initiated_by of this CloudEndureJob. # noqa: E501 - - username of user who initiated the job # noqa: E501 - - :return: The initiated_by of this CloudEndureJob. # noqa: E501 - :rtype: str - """ - return self._initiated_by - - @initiated_by.setter - def initiated_by(self, initiated_by): - """Sets the initiated_by of this CloudEndureJob. - - username of user who initiated the job # noqa: E501 - - :param initiated_by: The initiated_by of this CloudEndureJob. # noqa: E501 - :type: str - """ - - self._initiated_by = initiated_by - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureJob, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureJob): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_jobs_list.py b/cloudendure/cloudendure_api/models/cloud_endure_jobs_list.py deleted file mode 100644 index 8e21dd17a..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_jobs_list.py +++ /dev/null @@ -1,114 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_job import ( - CloudEndureJob, -) # noqa: F401,E501 - - -class CloudEndureJobsList: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"items": "list[CloudEndureJob]"} - - attribute_map = {"items": "items"} - - def __init__(self, items=None): # noqa: E501 - """CloudEndureJobsList - a model defined in Swagger""" # noqa: E501 - self._items = None - self.discriminator = None - if items is not None: - self.items = items - - @property - def items(self): - """Gets the items of this CloudEndureJobsList. # noqa: E501 - - - :return: The items of this CloudEndureJobsList. # noqa: E501 - :rtype: list[CloudEndureJob] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureJobsList. - - - :param items: The items of this CloudEndureJobsList. # noqa: E501 - :type: list[CloudEndureJob] - """ - - self._items = items - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureJobsList, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureJobsList): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_key_value_list.py b/cloudendure/cloudendure_api/models/cloud_endure_key_value_list.py deleted file mode 100644 index ffa024c73..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_key_value_list.py +++ /dev/null @@ -1,110 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureKeyValueList: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"items": "list[object]"} - - attribute_map = {"items": "items"} - - def __init__(self, items=None): # noqa: E501 - """CloudEndureKeyValueList - a model defined in Swagger""" # noqa: E501 - self._items = None - self.discriminator = None - if items is not None: - self.items = items - - @property - def items(self): - """Gets the items of this CloudEndureKeyValueList. # noqa: E501 - - - :return: The items of this CloudEndureKeyValueList. # noqa: E501 - :rtype: list[object] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureKeyValueList. - - - :param items: The items of this CloudEndureKeyValueList. # noqa: E501 - :type: list[object] - """ - - self._items = items - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureKeyValueList, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureKeyValueList): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_launch_machines_parameters.py b/cloudendure/cloudendure_api/models/cloud_endure_launch_machines_parameters.py deleted file mode 100644 index 79c50b8eb..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_launch_machines_parameters.py +++ /dev/null @@ -1,180 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_machine_and_point_in_time import ( # noqa: F401,E501 - CloudEndureMachineAndPointInTime, -) - - -class CloudEndureLaunchMachinesParameters: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "items": "list[CloudEndureMachineAndPointInTime]", - "launch_type": "str", - "debug_scripts": "object", - } - - attribute_map = { - "items": "items", - "launch_type": "launchType", - "debug_scripts": "debugScripts", - } - - def __init__(self, items=None, launch_type=None, debug_scripts=None): # noqa: E501 - """CloudEndureLaunchMachinesParameters - a model defined in Swagger""" # noqa: E501 - self._items = None - self._launch_type = None - self._debug_scripts = None - self.discriminator = None - if items is not None: - self.items = items - self.launch_type = launch_type - if debug_scripts is not None: - self.debug_scripts = debug_scripts - - @property - def items(self): - """Gets the items of this CloudEndureLaunchMachinesParameters. # noqa: E501 - - - :return: The items of this CloudEndureLaunchMachinesParameters. # noqa: E501 - :rtype: list[CloudEndureMachineAndPointInTime] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureLaunchMachinesParameters. - - - :param items: The items of this CloudEndureLaunchMachinesParameters. # noqa: E501 - :type: list[CloudEndureMachineAndPointInTime] - """ - - self._items = items - - @property - def launch_type(self): - """Gets the launch_type of this CloudEndureLaunchMachinesParameters. # noqa: E501 - - - :return: The launch_type of this CloudEndureLaunchMachinesParameters. # noqa: E501 - :rtype: str - """ - return self._launch_type - - @launch_type.setter - def launch_type(self, launch_type): - """Sets the launch_type of this CloudEndureLaunchMachinesParameters. - - - :param launch_type: The launch_type of this CloudEndureLaunchMachinesParameters. # noqa: E501 - :type: str - """ - if launch_type is None: - raise ValueError( - "Invalid value for `launch_type`, must not be `None`" - ) # noqa: E501 - allowed_values = ["TEST", "RECOVERY", "CUTOVER", "DEBUG"] # noqa: E501 - if launch_type not in allowed_values: - raise ValueError( - "Invalid value for `launch_type` ({0}), must be one of {1}".format( # noqa: E501 - launch_type, allowed_values - ) - ) - - self._launch_type = launch_type - - @property - def debug_scripts(self): - """Gets the debug_scripts of this CloudEndureLaunchMachinesParameters. # noqa: E501 - - - :return: The debug_scripts of this CloudEndureLaunchMachinesParameters. # noqa: E501 - :rtype: object - """ - return self._debug_scripts - - @debug_scripts.setter - def debug_scripts(self, debug_scripts): - """Sets the debug_scripts of this CloudEndureLaunchMachinesParameters. - - - :param debug_scripts: The debug_scripts of this CloudEndureLaunchMachinesParameters. # noqa: E501 - :type: object - """ - - self._debug_scripts = debug_scripts - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureLaunchMachinesParameters, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureLaunchMachinesParameters): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_license.py b/cloudendure/cloudendure_api/models/cloud_endure_license.py deleted file mode 100644 index 9d540d603..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_license.py +++ /dev/null @@ -1,327 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_license_features import ( # noqa: F401,E501 - CloudEndureLicenseFeatures, -) - - -class CloudEndureLicense: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "count": "int", - "duration_from_start_of_use": "str", - "used": "int", - "features": "CloudEndureLicenseFeatures", - "expiration_date_time": "datetime", - "ce_admin_properties": "object", - "type": "str", - "id": "str", - } - - attribute_map = { - "count": "count", - "duration_from_start_of_use": "durationFromStartOfUse", - "used": "used", - "features": "features", - "expiration_date_time": "expirationDateTime", - "ce_admin_properties": "ceAdminProperties", - "type": "type", - "id": "id", - } - - def __init__( - self, - count=None, - duration_from_start_of_use=None, - used=None, - features=None, - expiration_date_time=None, - ce_admin_properties=None, - type=None, - id=None, - ): # noqa: E501 - """CloudEndureLicense - a model defined in Swagger""" # noqa: E501 - self._count = None - self._duration_from_start_of_use = None - self._used = None - self._features = None - self._expiration_date_time = None - self._ce_admin_properties = None - self._type = None - self._id = None - self.discriminator = None - if count is not None: - self.count = count - if duration_from_start_of_use is not None: - self.duration_from_start_of_use = duration_from_start_of_use - if used is not None: - self.used = used - if features is not None: - self.features = features - if expiration_date_time is not None: - self.expiration_date_time = expiration_date_time - if ce_admin_properties is not None: - self.ce_admin_properties = ce_admin_properties - if type is not None: - self.type = type - if id is not None: - self.id = id - - @property - def count(self): - """Gets the count of this CloudEndureLicense. # noqa: E501 - - The total number of licenses. # noqa: E501 - - :return: The count of this CloudEndureLicense. # noqa: E501 - :rtype: int - """ - return self._count - - @count.setter - def count(self, count): - """Sets the count of this CloudEndureLicense. - - The total number of licenses. # noqa: E501 - - :param count: The count of this CloudEndureLicense. # noqa: E501 - :type: int - """ - - self._count = count - - @property - def duration_from_start_of_use(self): - """Gets the duration_from_start_of_use of this CloudEndureLicense. # noqa: E501 - - Validity period for a a single license from the time of agent installation. # noqa: E501 - - :return: The duration_from_start_of_use of this CloudEndureLicense. # noqa: E501 - :rtype: str - """ - return self._duration_from_start_of_use - - @duration_from_start_of_use.setter - def duration_from_start_of_use(self, duration_from_start_of_use): - """Sets the duration_from_start_of_use of this CloudEndureLicense. - - Validity period for a a single license from the time of agent installation. # noqa: E501 - - :param duration_from_start_of_use: The duration_from_start_of_use of this CloudEndureLicense. # noqa: E501 - :type: str - """ - - self._duration_from_start_of_use = duration_from_start_of_use - - @property - def used(self): - """Gets the used of this CloudEndureLicense. # noqa: E501 - - How many licenses have already been consumed. # noqa: E501 - - :return: The used of this CloudEndureLicense. # noqa: E501 - :rtype: int - """ - return self._used - - @used.setter - def used(self, used): - """Sets the used of this CloudEndureLicense. - - How many licenses have already been consumed. # noqa: E501 - - :param used: The used of this CloudEndureLicense. # noqa: E501 - :type: int - """ - - self._used = used - - @property - def features(self): - """Gets the features of this CloudEndureLicense. # noqa: E501 - - - :return: The features of this CloudEndureLicense. # noqa: E501 - :rtype: CloudEndureLicenseFeatures - """ - return self._features - - @features.setter - def features(self, features): - """Sets the features of this CloudEndureLicense. - - - :param features: The features of this CloudEndureLicense. # noqa: E501 - :type: CloudEndureLicenseFeatures - """ - - self._features = features - - @property - def expiration_date_time(self): - """Gets the expiration_date_time of this CloudEndureLicense. # noqa: E501 - - - :return: The expiration_date_time of this CloudEndureLicense. # noqa: E501 - :rtype: datetime - """ - return self._expiration_date_time - - @expiration_date_time.setter - def expiration_date_time(self, expiration_date_time): - """Sets the expiration_date_time of this CloudEndureLicense. - - - :param expiration_date_time: The expiration_date_time of this CloudEndureLicense. # noqa: E501 - :type: datetime - """ - - self._expiration_date_time = expiration_date_time - - @property - def ce_admin_properties(self): - """Gets the ce_admin_properties of this CloudEndureLicense. # noqa: E501 - - For internal use. # noqa: E501 - - :return: The ce_admin_properties of this CloudEndureLicense. # noqa: E501 - :rtype: object - """ - return self._ce_admin_properties - - @ce_admin_properties.setter - def ce_admin_properties(self, ce_admin_properties): - """Sets the ce_admin_properties of this CloudEndureLicense. - - For internal use. # noqa: E501 - - :param ce_admin_properties: The ce_admin_properties of this CloudEndureLicense. # noqa: E501 - :type: object - """ - - self._ce_admin_properties = ce_admin_properties - - @property - def type(self): - """Gets the type of this CloudEndureLicense. # noqa: E501 - - License type. DR licenses can be moved from one machine to another. Migration licenses are consumed upon installation. # noqa: E501 - - :return: The type of this CloudEndureLicense. # noqa: E501 - :rtype: str - """ - return self._type - - @type.setter - def type(self, type): - """Sets the type of this CloudEndureLicense. - - License type. DR licenses can be moved from one machine to another. Migration licenses are consumed upon installation. # noqa: E501 - - :param type: The type of this CloudEndureLicense. # noqa: E501 - :type: str - """ - allowed_values = ["MIGRATION", "DR", "BACKUP", "DR_TRIAL"] # noqa: E501 - if type not in allowed_values: - raise ValueError( - "Invalid value for `type` ({0}), must be one of {1}".format( # noqa: E501 - type, allowed_values - ) - ) - - self._type = type - - @property - def id(self): - """Gets the id of this CloudEndureLicense. # noqa: E501 - - - :return: The id of this CloudEndureLicense. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this CloudEndureLicense. - - - :param id: The id of this CloudEndureLicense. # noqa: E501 - :type: str - """ - - self._id = id - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureLicense, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureLicense): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_license_features.py b/cloudendure/cloudendure_api/models/cloud_endure_license_features.py deleted file mode 100644 index 2bf20169b..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_license_features.py +++ /dev/null @@ -1,134 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureLicenseFeatures: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"pit": "bool", "dr_tier2": "bool"} - - attribute_map = {"pit": "pit", "dr_tier2": "drTier2"} - - def __init__(self, pit=None, dr_tier2=None): # noqa: E501 - """CloudEndureLicenseFeatures - a model defined in Swagger""" # noqa: E501 - self._pit = None - self._dr_tier2 = None - self.discriminator = None - if pit is not None: - self.pit = pit - if dr_tier2 is not None: - self.dr_tier2 = dr_tier2 - - @property - def pit(self): - """Gets the pit of this CloudEndureLicenseFeatures. # noqa: E501 - - - :return: The pit of this CloudEndureLicenseFeatures. # noqa: E501 - :rtype: bool - """ - return self._pit - - @pit.setter - def pit(self, pit): - """Sets the pit of this CloudEndureLicenseFeatures. - - - :param pit: The pit of this CloudEndureLicenseFeatures. # noqa: E501 - :type: bool - """ - - self._pit = pit - - @property - def dr_tier2(self): - """Gets the dr_tier2 of this CloudEndureLicenseFeatures. # noqa: E501 - - - :return: The dr_tier2 of this CloudEndureLicenseFeatures. # noqa: E501 - :rtype: bool - """ - return self._dr_tier2 - - @dr_tier2.setter - def dr_tier2(self, dr_tier2): - """Sets the dr_tier2 of this CloudEndureLicenseFeatures. - - - :param dr_tier2: The dr_tier2 of this CloudEndureLicenseFeatures. # noqa: E501 - :type: bool - """ - - self._dr_tier2 = dr_tier2 - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureLicenseFeatures, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureLicenseFeatures): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_license_list.py b/cloudendure/cloudendure_api/models/cloud_endure_license_list.py deleted file mode 100644 index 67c312554..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_license_list.py +++ /dev/null @@ -1,114 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_license import ( - CloudEndureLicense, -) # noqa: F401,E501 - - -class CloudEndureLicenseList: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"items": "list[CloudEndureLicense]"} - - attribute_map = {"items": "items"} - - def __init__(self, items=None): # noqa: E501 - """CloudEndureLicenseList - a model defined in Swagger""" # noqa: E501 - self._items = None - self.discriminator = None - if items is not None: - self.items = items - - @property - def items(self): - """Gets the items of this CloudEndureLicenseList. # noqa: E501 - - - :return: The items of this CloudEndureLicenseList. # noqa: E501 - :rtype: list[CloudEndureLicense] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureLicenseList. - - - :param items: The items of this CloudEndureLicenseList. # noqa: E501 - :type: list[CloudEndureLicense] - """ - - self._items = items - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureLicenseList, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureLicenseList): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_list_users_result.py b/cloudendure/cloudendure_api/models/cloud_endure_list_users_result.py deleted file mode 100644 index e0acffce5..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_list_users_result.py +++ /dev/null @@ -1,225 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureListUsersResult: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "username": "str", - "is_account_owner": "bool", - "state": "str", - "version": "str", - "account_uuid": "str", - } - - attribute_map = { - "username": "username", - "is_account_owner": "is_account_owner", - "state": "state", - "version": "version", - "account_uuid": "account_uuid", - } - - def __init__( - self, - username=None, - is_account_owner=None, - state=None, - version=None, - account_uuid=None, - ): # noqa: E501 - """CloudEndureListUsersResult - a model defined in Swagger""" # noqa: E501 - self._username = None - self._is_account_owner = None - self._state = None - self._version = None - self._account_uuid = None - self.discriminator = None - if username is not None: - self.username = username - if is_account_owner is not None: - self.is_account_owner = is_account_owner - if state is not None: - self.state = state - if version is not None: - self.version = version - if account_uuid is not None: - self.account_uuid = account_uuid - - @property - def username(self): - """Gets the username of this CloudEndureListUsersResult. # noqa: E501 - - - :return: The username of this CloudEndureListUsersResult. # noqa: E501 - :rtype: str - """ - return self._username - - @username.setter - def username(self, username): - """Sets the username of this CloudEndureListUsersResult. - - - :param username: The username of this CloudEndureListUsersResult. # noqa: E501 - :type: str - """ - - self._username = username - - @property - def is_account_owner(self): - """Gets the is_account_owner of this CloudEndureListUsersResult. # noqa: E501 - - - :return: The is_account_owner of this CloudEndureListUsersResult. # noqa: E501 - :rtype: bool - """ - return self._is_account_owner - - @is_account_owner.setter - def is_account_owner(self, is_account_owner): - """Sets the is_account_owner of this CloudEndureListUsersResult. - - - :param is_account_owner: The is_account_owner of this CloudEndureListUsersResult. # noqa: E501 - :type: bool - """ - - self._is_account_owner = is_account_owner - - @property - def state(self): - """Gets the state of this CloudEndureListUsersResult. # noqa: E501 - - - :return: The state of this CloudEndureListUsersResult. # noqa: E501 - :rtype: str - """ - return self._state - - @state.setter - def state(self, state): - """Sets the state of this CloudEndureListUsersResult. - - - :param state: The state of this CloudEndureListUsersResult. # noqa: E501 - :type: str - """ - - self._state = state - - @property - def version(self): - """Gets the version of this CloudEndureListUsersResult. # noqa: E501 - - - :return: The version of this CloudEndureListUsersResult. # noqa: E501 - :rtype: str - """ - return self._version - - @version.setter - def version(self, version): - """Sets the version of this CloudEndureListUsersResult. - - - :param version: The version of this CloudEndureListUsersResult. # noqa: E501 - :type: str - """ - - self._version = version - - @property - def account_uuid(self): - """Gets the account_uuid of this CloudEndureListUsersResult. # noqa: E501 - - - :return: The account_uuid of this CloudEndureListUsersResult. # noqa: E501 - :rtype: str - """ - return self._account_uuid - - @account_uuid.setter - def account_uuid(self, account_uuid): - """Sets the account_uuid of this CloudEndureListUsersResult. - - - :param account_uuid: The account_uuid of this CloudEndureListUsersResult. # noqa: E501 - :type: str - """ - - self._account_uuid = account_uuid - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureListUsersResult, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureListUsersResult): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_list_users_results.py b/cloudendure/cloudendure_api/models/cloud_endure_list_users_results.py deleted file mode 100644 index 12e22f044..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_list_users_results.py +++ /dev/null @@ -1,114 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_list_users_result import ( # noqa: F401,E501 - CloudEndureListUsersResult, -) - - -class CloudEndureListUsersResults: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"items": "list[CloudEndureListUsersResult]"} - - attribute_map = {"items": "items"} - - def __init__(self, items=None): # noqa: E501 - """CloudEndureListUsersResults - a model defined in Swagger""" # noqa: E501 - self._items = None - self.discriminator = None - if items is not None: - self.items = items - - @property - def items(self): - """Gets the items of this CloudEndureListUsersResults. # noqa: E501 - - - :return: The items of this CloudEndureListUsersResults. # noqa: E501 - :rtype: list[CloudEndureListUsersResult] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureListUsersResults. - - - :param items: The items of this CloudEndureListUsersResults. # noqa: E501 - :type: list[CloudEndureListUsersResult] - """ - - self._items = items - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureListUsersResults, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureListUsersResults): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_logical_location.py b/cloudendure/cloudendure_api/models/cloud_endure_logical_location.py deleted file mode 100644 index 373684ddb..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_logical_location.py +++ /dev/null @@ -1,134 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureLogicalLocation: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"location_id": "str", "name": "str"} - - attribute_map = {"location_id": "locationId", "name": "name"} - - def __init__(self, location_id=None, name=None): # noqa: E501 - """CloudEndureLogicalLocation - a model defined in Swagger""" # noqa: E501 - self._location_id = None - self._name = None - self.discriminator = None - if location_id is not None: - self.location_id = location_id - if name is not None: - self.name = name - - @property - def location_id(self): - """Gets the location_id of this CloudEndureLogicalLocation. # noqa: E501 - - - :return: The location_id of this CloudEndureLogicalLocation. # noqa: E501 - :rtype: str - """ - return self._location_id - - @location_id.setter - def location_id(self, location_id): - """Sets the location_id of this CloudEndureLogicalLocation. - - - :param location_id: The location_id of this CloudEndureLogicalLocation. # noqa: E501 - :type: str - """ - - self._location_id = location_id - - @property - def name(self): - """Gets the name of this CloudEndureLogicalLocation. # noqa: E501 - - - :return: The name of this CloudEndureLogicalLocation. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this CloudEndureLogicalLocation. - - - :param name: The name of this CloudEndureLogicalLocation. # noqa: E501 - :type: str - """ - - self._name = name - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureLogicalLocation, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureLogicalLocation): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_machine.py b/cloudendure/cloudendure_api/models/cloud_endure_machine.py deleted file mode 100644 index 097da220f..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_machine.py +++ /dev/null @@ -1,444 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_machine_replication_configuration import ( # noqa: F401,E501 - CloudEndureMachineReplicationConfiguration, -) -from cloudendure.cloudendure_api.models.cloud_endure_point_in_time import ( - CloudEndurePointInTime, -) # noqa: F401,E501 - - -class CloudEndureMachine: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "source_properties": "object", - "replication_info": "object", - "license": "object", - "tags": "list[str]", - "restore_servers": "list[str]", - "from_point_in_time": "CloudEndurePointInTime", - "replication_status": "str", - "replica": "str", - "id": "str", - "replication_configuration": "CloudEndureMachineReplicationConfiguration", - "life_cycle": "object", - "is_agent_installed": "bool", - } - - attribute_map = { - "source_properties": "sourceProperties", - "replication_info": "replicationInfo", - "license": "license", - "tags": "tags", - "restore_servers": "restoreServers", - "from_point_in_time": "fromPointInTime", - "replication_status": "replicationStatus", - "replica": "replica", - "id": "id", - "replication_configuration": "replicationConfiguration", - "life_cycle": "lifeCycle", - "is_agent_installed": "isAgentInstalled", - } - - def __init__( - self, - source_properties=None, - replication_info=None, - license=None, - tags=None, - restore_servers=None, - from_point_in_time=None, - replication_status=None, - replica=None, - id=None, - replication_configuration=None, - life_cycle=None, - is_agent_installed=None, - ): # noqa: E501 - """CloudEndureMachine - a model defined in Swagger""" # noqa: E501 - self._source_properties = None - self._replication_info = None - self._license = None - self._tags = None - self._restore_servers = None - self._from_point_in_time = None - self._replication_status = None - self._replica = None - self._id = None - self._replication_configuration = None - self._life_cycle = None - self._is_agent_installed = None - self.discriminator = None - if source_properties is not None: - self.source_properties = source_properties - if replication_info is not None: - self.replication_info = replication_info - if license is not None: - self.license = license - if tags is not None: - self.tags = tags - if restore_servers is not None: - self.restore_servers = restore_servers - if from_point_in_time is not None: - self.from_point_in_time = from_point_in_time - if replication_status is not None: - self.replication_status = replication_status - if replica is not None: - self.replica = replica - if id is not None: - self.id = id - if replication_configuration is not None: - self.replication_configuration = replication_configuration - if life_cycle is not None: - self.life_cycle = life_cycle - if is_agent_installed is not None: - self.is_agent_installed = is_agent_installed - - @property - def source_properties(self): - """Gets the source_properties of this CloudEndureMachine. # noqa: E501 - - Source machine properties. # noqa: E501 - - :return: The source_properties of this CloudEndureMachine. # noqa: E501 - :rtype: object - """ - return self._source_properties - - @source_properties.setter - def source_properties(self, source_properties): - """Sets the source_properties of this CloudEndureMachine. - - Source machine properties. # noqa: E501 - - :param source_properties: The source_properties of this CloudEndureMachine. # noqa: E501 - :type: object - """ - - self._source_properties = source_properties - - @property - def replication_info(self): - """Gets the replication_info of this CloudEndureMachine. # noqa: E501 - - Detailed information on the state of replication. # noqa: E501 - - :return: The replication_info of this CloudEndureMachine. # noqa: E501 - :rtype: object - """ - return self._replication_info - - @replication_info.setter - def replication_info(self, replication_info): - """Sets the replication_info of this CloudEndureMachine. - - Detailed information on the state of replication. # noqa: E501 - - :param replication_info: The replication_info of this CloudEndureMachine. # noqa: E501 - :type: object - """ - - self._replication_info = replication_info - - @property - def license(self): - """Gets the license of this CloudEndureMachine. # noqa: E501 - - Detailed machine license consumption information. # noqa: E501 - - :return: The license of this CloudEndureMachine. # noqa: E501 - :rtype: object - """ - return self._license - - @license.setter - def license(self, license): - """Sets the license of this CloudEndureMachine. - - Detailed machine license consumption information. # noqa: E501 - - :param license: The license of this CloudEndureMachine. # noqa: E501 - :type: object - """ - - self._license = license - - @property - def tags(self): - """Gets the tags of this CloudEndureMachine. # noqa: E501 - - - :return: The tags of this CloudEndureMachine. # noqa: E501 - :rtype: list[str] - """ - return self._tags - - @tags.setter - def tags(self, tags): - """Sets the tags of this CloudEndureMachine. - - - :param tags: The tags of this CloudEndureMachine. # noqa: E501 - :type: list[str] - """ - - self._tags = tags - - @property - def restore_servers(self): - """Gets the restore_servers of this CloudEndureMachine. # noqa: E501 - - todo restoreServer ids # noqa: E501 - - :return: The restore_servers of this CloudEndureMachine. # noqa: E501 - :rtype: list[str] - """ - return self._restore_servers - - @restore_servers.setter - def restore_servers(self, restore_servers): - """Sets the restore_servers of this CloudEndureMachine. - - todo restoreServer ids # noqa: E501 - - :param restore_servers: The restore_servers of this CloudEndureMachine. # noqa: E501 - :type: list[str] - """ - - self._restore_servers = restore_servers - - @property - def from_point_in_time(self): - """Gets the from_point_in_time of this CloudEndureMachine. # noqa: E501 - - - :return: The from_point_in_time of this CloudEndureMachine. # noqa: E501 - :rtype: CloudEndurePointInTime - """ - return self._from_point_in_time - - @from_point_in_time.setter - def from_point_in_time(self, from_point_in_time): - """Sets the from_point_in_time of this CloudEndureMachine. - - - :param from_point_in_time: The from_point_in_time of this CloudEndureMachine. # noqa: E501 - :type: CloudEndurePointInTime - """ - - self._from_point_in_time = from_point_in_time - - @property - def replication_status(self): - """Gets the replication_status of this CloudEndureMachine. # noqa: E501 - - Is replication started, paused or stopped # noqa: E501 - - :return: The replication_status of this CloudEndureMachine. # noqa: E501 - :rtype: str - """ - return self._replication_status - - @replication_status.setter - def replication_status(self, replication_status): - """Sets the replication_status of this CloudEndureMachine. - - Is replication started, paused or stopped # noqa: E501 - - :param replication_status: The replication_status of this CloudEndureMachine. # noqa: E501 - :type: str - """ - allowed_values = ["STOPPED", "PAUSED", "STARTED"] # noqa: E501 - if replication_status not in allowed_values: - raise ValueError( - "Invalid value for `replication_status` ({0}), must be one of {1}".format( # noqa: E501 - replication_status, allowed_values - ) - ) - - self._replication_status = replication_status - - @property - def replica(self): - """Gets the replica of this CloudEndureMachine. # noqa: E501 - - The ID of the target machine that has been previously launched, if such exists. # noqa: E501 - - :return: The replica of this CloudEndureMachine. # noqa: E501 - :rtype: str - """ - return self._replica - - @replica.setter - def replica(self, replica): - """Sets the replica of this CloudEndureMachine. - - The ID of the target machine that has been previously launched, if such exists. # noqa: E501 - - :param replica: The replica of this CloudEndureMachine. # noqa: E501 - :type: str - """ - - self._replica = replica - - @property - def id(self): - """Gets the id of this CloudEndureMachine. # noqa: E501 - - - :return: The id of this CloudEndureMachine. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this CloudEndureMachine. - - - :param id: The id of this CloudEndureMachine. # noqa: E501 - :type: str - """ - - self._id = id - - @property - def replication_configuration(self): - """Gets the replication_configuration of this CloudEndureMachine. # noqa: E501 - - - :return: The replication_configuration of this CloudEndureMachine. # noqa: E501 - :rtype: CloudEndureMachineReplicationConfiguration - """ - return self._replication_configuration - - @replication_configuration.setter - def replication_configuration(self, replication_configuration): - """Sets the replication_configuration of this CloudEndureMachine. - - - :param replication_configuration: The replication_configuration of this CloudEndureMachine. # noqa: E501 - :type: CloudEndureMachineReplicationConfiguration - """ - - self._replication_configuration = replication_configuration - - @property - def life_cycle(self): - """Gets the life_cycle of this CloudEndureMachine. # noqa: E501 - - Detailed machine lifecycle information. # noqa: E501 - - :return: The life_cycle of this CloudEndureMachine. # noqa: E501 - :rtype: object - """ - return self._life_cycle - - @life_cycle.setter - def life_cycle(self, life_cycle): - """Sets the life_cycle of this CloudEndureMachine. - - Detailed machine lifecycle information. # noqa: E501 - - :param life_cycle: The life_cycle of this CloudEndureMachine. # noqa: E501 - :type: object - """ - - self._life_cycle = life_cycle - - @property - def is_agent_installed(self): - """Gets the is_agent_installed of this CloudEndureMachine. # noqa: E501 - - Whether a CloudEndure agent is currently installed on this machine. # noqa: E501 - - :return: The is_agent_installed of this CloudEndureMachine. # noqa: E501 - :rtype: bool - """ - return self._is_agent_installed - - @is_agent_installed.setter - def is_agent_installed(self, is_agent_installed): - """Sets the is_agent_installed of this CloudEndureMachine. - - Whether a CloudEndure agent is currently installed on this machine. # noqa: E501 - - :param is_agent_installed: The is_agent_installed of this CloudEndureMachine. # noqa: E501 - :type: bool - """ - - self._is_agent_installed = is_agent_installed - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureMachine, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureMachine): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_machine_and_path_and_point_in_time.py b/cloudendure/cloudendure_api/models/cloud_endure_machine_and_path_and_point_in_time.py deleted file mode 100644 index a500af92c..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_machine_and_path_and_point_in_time.py +++ /dev/null @@ -1,170 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureMachineAndPathAndPointInTime: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"machine_id": "str", "point_in_time_id": "str", "file_path": "str"} - - attribute_map = { - "machine_id": "machineId", - "point_in_time_id": "pointInTimeId", - "file_path": "filePath", - } - - def __init__( - self, machine_id=None, point_in_time_id=None, file_path=None - ): # noqa: E501 - """CloudEndureMachineAndPathAndPointInTime - a model defined in Swagger""" # noqa: E501 - self._machine_id = None - self._point_in_time_id = None - self._file_path = None - self.discriminator = None - self.machine_id = machine_id - if point_in_time_id is not None: - self.point_in_time_id = point_in_time_id - self.file_path = file_path - - @property - def machine_id(self): - """Gets the machine_id of this CloudEndureMachineAndPathAndPointInTime. # noqa: E501 - - - :return: The machine_id of this CloudEndureMachineAndPathAndPointInTime. # noqa: E501 - :rtype: str - """ - return self._machine_id - - @machine_id.setter - def machine_id(self, machine_id): - """Sets the machine_id of this CloudEndureMachineAndPathAndPointInTime. - - - :param machine_id: The machine_id of this CloudEndureMachineAndPathAndPointInTime. # noqa: E501 - :type: str - """ - if machine_id is None: - raise ValueError( - "Invalid value for `machine_id`, must not be `None`" - ) # noqa: E501 - - self._machine_id = machine_id - - @property - def point_in_time_id(self): - """Gets the point_in_time_id of this CloudEndureMachineAndPathAndPointInTime. # noqa: E501 - - - :return: The point_in_time_id of this CloudEndureMachineAndPathAndPointInTime. # noqa: E501 - :rtype: str - """ - return self._point_in_time_id - - @point_in_time_id.setter - def point_in_time_id(self, point_in_time_id): - """Sets the point_in_time_id of this CloudEndureMachineAndPathAndPointInTime. - - - :param point_in_time_id: The point_in_time_id of this CloudEndureMachineAndPathAndPointInTime. # noqa: E501 - :type: str - """ - - self._point_in_time_id = point_in_time_id - - @property - def file_path(self): - """Gets the file_path of this CloudEndureMachineAndPathAndPointInTime. # noqa: E501 - - - :return: The file_path of this CloudEndureMachineAndPathAndPointInTime. # noqa: E501 - :rtype: str - """ - return self._file_path - - @file_path.setter - def file_path(self, file_path): - """Sets the file_path of this CloudEndureMachineAndPathAndPointInTime. - - - :param file_path: The file_path of this CloudEndureMachineAndPathAndPointInTime. # noqa: E501 - :type: str - """ - if file_path is None: - raise ValueError( - "Invalid value for `file_path`, must not be `None`" - ) # noqa: E501 - - self._file_path = file_path - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureMachineAndPathAndPointInTime, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureMachineAndPathAndPointInTime): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_machine_and_point_in_time.py b/cloudendure/cloudendure_api/models/cloud_endure_machine_and_point_in_time.py deleted file mode 100644 index bd299570e..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_machine_and_point_in_time.py +++ /dev/null @@ -1,141 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureMachineAndPointInTime: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"machine_id": "str", "point_in_time_id": "str"} - - attribute_map = {"machine_id": "machineId", "point_in_time_id": "pointInTimeId"} - - def __init__(self, machine_id=None, point_in_time_id=None): # noqa: E501 - """CloudEndureMachineAndPointInTime - a model defined in Swagger""" # noqa: E501 - self._machine_id = None - self._point_in_time_id = None - self.discriminator = None - self.machine_id = machine_id - if point_in_time_id is not None: - self.point_in_time_id = point_in_time_id - - @property - def machine_id(self): - """Gets the machine_id of this CloudEndureMachineAndPointInTime. # noqa: E501 - - A source machine to launch a target machine for. # noqa: E501 - - :return: The machine_id of this CloudEndureMachineAndPointInTime. # noqa: E501 - :rtype: str - """ - return self._machine_id - - @machine_id.setter - def machine_id(self, machine_id): - """Sets the machine_id of this CloudEndureMachineAndPointInTime. - - A source machine to launch a target machine for. # noqa: E501 - - :param machine_id: The machine_id of this CloudEndureMachineAndPointInTime. # noqa: E501 - :type: str - """ - if machine_id is None: - raise ValueError( - "Invalid value for `machine_id`, must not be `None`" - ) # noqa: E501 - - self._machine_id = machine_id - - @property - def point_in_time_id(self): - """Gets the point_in_time_id of this CloudEndureMachineAndPointInTime. # noqa: E501 - - The ID of the pointInTime to launch a target machine from. If omitted, CloudEndure will use the latest pointInTime. # noqa: E501 - - :return: The point_in_time_id of this CloudEndureMachineAndPointInTime. # noqa: E501 - :rtype: str - """ - return self._point_in_time_id - - @point_in_time_id.setter - def point_in_time_id(self, point_in_time_id): - """Sets the point_in_time_id of this CloudEndureMachineAndPointInTime. - - The ID of the pointInTime to launch a target machine from. If omitted, CloudEndure will use the latest pointInTime. # noqa: E501 - - :param point_in_time_id: The point_in_time_id of this CloudEndureMachineAndPointInTime. # noqa: E501 - :type: str - """ - - self._point_in_time_id = point_in_time_id - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureMachineAndPointInTime, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureMachineAndPointInTime): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_machine_replication_configuration.py b/cloudendure/cloudendure_api/models/cloud_endure_machine_replication_configuration.py deleted file mode 100644 index b945b2603..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_machine_replication_configuration.py +++ /dev/null @@ -1,577 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureMachineReplicationConfiguration: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "volume_encryption_key": "str", - "replication_tags": "list[object]", - "subnet_host_project": "str", - "replication_server_type": "str", - "compute_location_id": "str", - "subnet_id": "str", - "logical_location_id": "str", - "bandwidth_throttling": "int", - "storage_location_id": "str", - "use_dedicated_server": "bool", - "zone": "str", - "replicator_security_group_i_ds": "list[str]", - "use_private_ip": "bool", - "proxy_url": "str", - "volume_encryption_allowed": "bool", - "archiving_enabled": "bool", - "object_storage_location": "str", - } - - attribute_map = { - "volume_encryption_key": "volumeEncryptionKey", - "replication_tags": "replicationTags", - "subnet_host_project": "subnetHostProject", - "replication_server_type": "replicationServerType", - "compute_location_id": "computeLocationId", - "subnet_id": "subnetId", - "logical_location_id": "logicalLocationId", - "bandwidth_throttling": "bandwidthThrottling", - "storage_location_id": "storageLocationId", - "use_dedicated_server": "useDedicatedServer", - "zone": "zone", - "replicator_security_group_i_ds": "replicatorSecurityGroupIDs", - "use_private_ip": "usePrivateIp", - "proxy_url": "proxyUrl", - "volume_encryption_allowed": "volumeEncryptionAllowed", - "archiving_enabled": "archivingEnabled", - "object_storage_location": "objectStorageLocation", - } - - def __init__( - self, - volume_encryption_key=None, - replication_tags=None, - subnet_host_project=None, - replication_server_type=None, - compute_location_id=None, - subnet_id=None, - logical_location_id=None, - bandwidth_throttling=None, - storage_location_id=None, - use_dedicated_server=None, - zone=None, - replicator_security_group_i_ds=None, - use_private_ip=None, - proxy_url=None, - volume_encryption_allowed=None, - archiving_enabled=None, - object_storage_location=None, - ): # noqa: E501 - """CloudEndureMachineReplicationConfiguration - a model defined in Swagger""" # noqa: E501 - self._volume_encryption_key = None - self._replication_tags = None - self._subnet_host_project = None - self._replication_server_type = None - self._compute_location_id = None - self._subnet_id = None - self._logical_location_id = None - self._bandwidth_throttling = None - self._storage_location_id = None - self._use_dedicated_server = None - self._zone = None - self._replicator_security_group_i_ds = None - self._use_private_ip = None - self._proxy_url = None - self._volume_encryption_allowed = None - self._archiving_enabled = None - self._object_storage_location = None - self.discriminator = None - if volume_encryption_key is not None: - self.volume_encryption_key = volume_encryption_key - if replication_tags is not None: - self.replication_tags = replication_tags - if subnet_host_project is not None: - self.subnet_host_project = subnet_host_project - if replication_server_type is not None: - self.replication_server_type = replication_server_type - if compute_location_id is not None: - self.compute_location_id = compute_location_id - if subnet_id is not None: - self.subnet_id = subnet_id - if logical_location_id is not None: - self.logical_location_id = logical_location_id - if bandwidth_throttling is not None: - self.bandwidth_throttling = bandwidth_throttling - if storage_location_id is not None: - self.storage_location_id = storage_location_id - if use_dedicated_server is not None: - self.use_dedicated_server = use_dedicated_server - if zone is not None: - self.zone = zone - if replicator_security_group_i_ds is not None: - self.replicator_security_group_i_ds = replicator_security_group_i_ds - if use_private_ip is not None: - self.use_private_ip = use_private_ip - if proxy_url is not None: - self.proxy_url = proxy_url - if volume_encryption_allowed is not None: - self.volume_encryption_allowed = volume_encryption_allowed - if archiving_enabled is not None: - self.archiving_enabled = archiving_enabled - if object_storage_location is not None: - self.object_storage_location = object_storage_location - - @property - def volume_encryption_key(self): - """Gets the volume_encryption_key of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - - AWS only. ARN to private key for Volume Encryption. Possible values can be fetched from the Region object. # noqa: E501 - - :return: The volume_encryption_key of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :rtype: str - """ - return self._volume_encryption_key - - @volume_encryption_key.setter - def volume_encryption_key(self, volume_encryption_key): - """Sets the volume_encryption_key of this CloudEndureMachineReplicationConfiguration. - - AWS only. ARN to private key for Volume Encryption. Possible values can be fetched from the Region object. # noqa: E501 - - :param volume_encryption_key: The volume_encryption_key of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :type: str - """ - - self._volume_encryption_key = volume_encryption_key - - @property - def replication_tags(self): - """Gets the replication_tags of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - - AWS only. Tags that will be applied to every cloud resource created in the CloudEndure Staging Area. # noqa: E501 - - :return: The replication_tags of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :rtype: list[object] - """ - return self._replication_tags - - @replication_tags.setter - def replication_tags(self, replication_tags): - """Sets the replication_tags of this CloudEndureMachineReplicationConfiguration. - - AWS only. Tags that will be applied to every cloud resource created in the CloudEndure Staging Area. # noqa: E501 - - :param replication_tags: The replication_tags of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :type: list[object] - """ - - self._replication_tags = replication_tags - - @property - def subnet_host_project(self): - """Gets the subnet_host_project of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - - GCP only. Host project of cross project network subnet. # noqa: E501 - - :return: The subnet_host_project of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :rtype: str - """ - return self._subnet_host_project - - @subnet_host_project.setter - def subnet_host_project(self, subnet_host_project): - """Sets the subnet_host_project of this CloudEndureMachineReplicationConfiguration. - - GCP only. Host project of cross project network subnet. # noqa: E501 - - :param subnet_host_project: The subnet_host_project of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :type: str - """ - - self._subnet_host_project = subnet_host_project - - @property - def replication_server_type(self): - """Gets the replication_server_type of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - - - :return: The replication_server_type of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :rtype: str - """ - return self._replication_server_type - - @replication_server_type.setter - def replication_server_type(self, replication_server_type): - """Sets the replication_server_type of this CloudEndureMachineReplicationConfiguration. - - - :param replication_server_type: The replication_server_type of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :type: str - """ - - self._replication_server_type = replication_server_type - - @property - def compute_location_id(self): - """Gets the compute_location_id of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - - todo vcenter only # noqa: E501 - - :return: The compute_location_id of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :rtype: str - """ - return self._compute_location_id - - @compute_location_id.setter - def compute_location_id(self, compute_location_id): - """Sets the compute_location_id of this CloudEndureMachineReplicationConfiguration. - - todo vcenter only # noqa: E501 - - :param compute_location_id: The compute_location_id of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :type: str - """ - - self._compute_location_id = compute_location_id - - @property - def subnet_id(self): - """Gets the subnet_id of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - - Subnet where replication servers will be created. Possible values can be fetched from the Region object. # noqa: E501 - - :return: The subnet_id of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :rtype: str - """ - return self._subnet_id - - @subnet_id.setter - def subnet_id(self, subnet_id): - """Sets the subnet_id of this CloudEndureMachineReplicationConfiguration. - - Subnet where replication servers will be created. Possible values can be fetched from the Region object. # noqa: E501 - - :param subnet_id: The subnet_id of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :type: str - """ - - self._subnet_id = subnet_id - - @property - def logical_location_id(self): - """Gets the logical_location_id of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - - vcenter = vmFolder # noqa: E501 - - :return: The logical_location_id of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :rtype: str - """ - return self._logical_location_id - - @logical_location_id.setter - def logical_location_id(self, logical_location_id): - """Sets the logical_location_id of this CloudEndureMachineReplicationConfiguration. - - vcenter = vmFolder # noqa: E501 - - :param logical_location_id: The logical_location_id of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :type: str - """ - - self._logical_location_id = logical_location_id - - @property - def bandwidth_throttling(self): - """Gets the bandwidth_throttling of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - - Mbps to use for Data Replication (zero means no throttling). # noqa: E501 - - :return: The bandwidth_throttling of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :rtype: int - """ - return self._bandwidth_throttling - - @bandwidth_throttling.setter - def bandwidth_throttling(self, bandwidth_throttling): - """Sets the bandwidth_throttling of this CloudEndureMachineReplicationConfiguration. - - Mbps to use for Data Replication (zero means no throttling). # noqa: E501 - - :param bandwidth_throttling: The bandwidth_throttling of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :type: int - """ - - self._bandwidth_throttling = bandwidth_throttling - - @property - def storage_location_id(self): - """Gets the storage_location_id of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - - @todo backend creates cloudendure bla bla storage account upon need (empty string). # noqa: E501 - - :return: The storage_location_id of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :rtype: str - """ - return self._storage_location_id - - @storage_location_id.setter - def storage_location_id(self, storage_location_id): - """Sets the storage_location_id of this CloudEndureMachineReplicationConfiguration. - - @todo backend creates cloudendure bla bla storage account upon need (empty string). # noqa: E501 - - :param storage_location_id: The storage_location_id of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :type: str - """ - - self._storage_location_id = storage_location_id - - @property - def use_dedicated_server(self): - """Gets the use_dedicated_server of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - - - :return: The use_dedicated_server of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :rtype: bool - """ - return self._use_dedicated_server - - @use_dedicated_server.setter - def use_dedicated_server(self, use_dedicated_server): - """Sets the use_dedicated_server of this CloudEndureMachineReplicationConfiguration. - - - :param use_dedicated_server: The use_dedicated_server of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :type: bool - """ - - self._use_dedicated_server = use_dedicated_server - - @property - def zone(self): - """Gets the zone of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - - Relevant for GCP and Azure ARM. The Zone to replicate into. # noqa: E501 - - :return: The zone of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :rtype: str - """ - return self._zone - - @zone.setter - def zone(self, zone): - """Sets the zone of this CloudEndureMachineReplicationConfiguration. - - Relevant for GCP and Azure ARM. The Zone to replicate into. # noqa: E501 - - :param zone: The zone of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :type: str - """ - - self._zone = zone - - @property - def replicator_security_group_i_ds(self): - """Gets the replicator_security_group_i_ds of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - - AWS only. The security groups that will be applied to the replication servers. Possible values can be fetched from the Region object. # noqa: E501 - - :return: The replicator_security_group_i_ds of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :rtype: list[str] - """ - return self._replicator_security_group_i_ds - - @replicator_security_group_i_ds.setter - def replicator_security_group_i_ds(self, replicator_security_group_i_ds): - """Sets the replicator_security_group_i_ds of this CloudEndureMachineReplicationConfiguration. - - AWS only. The security groups that will be applied to the replication servers. Possible values can be fetched from the Region object. # noqa: E501 - - :param replicator_security_group_i_ds: The replicator_security_group_i_ds of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :type: list[str] - """ - - self._replicator_security_group_i_ds = replicator_security_group_i_ds - - @property - def use_private_ip(self): - """Gets the use_private_ip of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - - Should the CloudEndure agent access the replication server using its private IP address. # noqa: E501 - - :return: The use_private_ip of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :rtype: bool - """ - return self._use_private_ip - - @use_private_ip.setter - def use_private_ip(self, use_private_ip): - """Sets the use_private_ip of this CloudEndureMachineReplicationConfiguration. - - Should the CloudEndure agent access the replication server using its private IP address. # noqa: E501 - - :param use_private_ip: The use_private_ip of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :type: bool - """ - - self._use_private_ip = use_private_ip - - @property - def proxy_url(self): - """Gets the proxy_url of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - - The full URI for a proxy (schema, username, password, domain, port) if required for the CloudEndure agent. # noqa: E501 - - :return: The proxy_url of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :rtype: str - """ - return self._proxy_url - - @proxy_url.setter - def proxy_url(self, proxy_url): - """Sets the proxy_url of this CloudEndureMachineReplicationConfiguration. - - The full URI for a proxy (schema, username, password, domain, port) if required for the CloudEndure agent. # noqa: E501 - - :param proxy_url: The proxy_url of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :type: str - """ - - self._proxy_url = proxy_url - - @property - def volume_encryption_allowed(self): - """Gets the volume_encryption_allowed of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - - todo AWS only... not relevant for Backup Projects because EBS is not used # noqa: E501 - - :return: The volume_encryption_allowed of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :rtype: bool - """ - return self._volume_encryption_allowed - - @volume_encryption_allowed.setter - def volume_encryption_allowed(self, volume_encryption_allowed): - """Sets the volume_encryption_allowed of this CloudEndureMachineReplicationConfiguration. - - todo AWS only... not relevant for Backup Projects because EBS is not used # noqa: E501 - - :param volume_encryption_allowed: The volume_encryption_allowed of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :type: bool - """ - - self._volume_encryption_allowed = volume_encryption_allowed - - @property - def archiving_enabled(self): - """Gets the archiving_enabled of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - - - :return: The archiving_enabled of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :rtype: bool - """ - return self._archiving_enabled - - @archiving_enabled.setter - def archiving_enabled(self, archiving_enabled): - """Sets the archiving_enabled of this CloudEndureMachineReplicationConfiguration. - - - :param archiving_enabled: The archiving_enabled of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :type: bool - """ - - self._archiving_enabled = archiving_enabled - - @property - def object_storage_location(self): - """Gets the object_storage_location of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - - bucket in aws # noqa: E501 - - :return: The object_storage_location of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :rtype: str - """ - return self._object_storage_location - - @object_storage_location.setter - def object_storage_location(self, object_storage_location): - """Sets the object_storage_location of this CloudEndureMachineReplicationConfiguration. - - bucket in aws # noqa: E501 - - :param object_storage_location: The object_storage_location of this CloudEndureMachineReplicationConfiguration. # noqa: E501 - :type: str - """ - - self._object_storage_location = object_storage_location - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureMachineReplicationConfiguration, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureMachineReplicationConfiguration): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_machine_snapshot_credits.py b/cloudendure/cloudendure_api/models/cloud_endure_machine_snapshot_credits.py deleted file mode 100644 index f634eeeba..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_machine_snapshot_credits.py +++ /dev/null @@ -1,112 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureMachineSnapshotCredits: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"credits": "int"} - - attribute_map = {"credits": "credits"} - - def __init__(self, credits=None): # noqa: E501 - """CloudEndureMachineSnapshotCredits - a model defined in Swagger""" # noqa: E501 - self._credits = None - self.discriminator = None - if credits is not None: - self.credits = credits - - @property - def credits(self): - """Gets the credits of this CloudEndureMachineSnapshotCredits. # noqa: E501 - - Mbps to use for Data Replication (zero means no throttling). # noqa: E501 - - :return: The credits of this CloudEndureMachineSnapshotCredits. # noqa: E501 - :rtype: int - """ - return self._credits - - @credits.setter - def credits(self, credits): - """Sets the credits of this CloudEndureMachineSnapshotCredits. - - Mbps to use for Data Replication (zero means no throttling). # noqa: E501 - - :param credits: The credits of this CloudEndureMachineSnapshotCredits. # noqa: E501 - :type: int - """ - - self._credits = credits - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureMachineSnapshotCredits, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureMachineSnapshotCredits): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_machine_throttle_time_seconds.py b/cloudendure/cloudendure_api/models/cloud_endure_machine_throttle_time_seconds.py deleted file mode 100644 index 3e49e4c0e..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_machine_throttle_time_seconds.py +++ /dev/null @@ -1,112 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureMachineThrottleTimeSeconds: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"credits": "int"} - - attribute_map = {"credits": "credits"} - - def __init__(self, credits=None): # noqa: E501 - """CloudEndureMachineThrottleTimeSeconds - a model defined in Swagger""" # noqa: E501 - self._credits = None - self.discriminator = None - if credits is not None: - self.credits = credits - - @property - def credits(self): - """Gets the credits of this CloudEndureMachineThrottleTimeSeconds. # noqa: E501 - - time to throttle the machine in seconds # noqa: E501 - - :return: The credits of this CloudEndureMachineThrottleTimeSeconds. # noqa: E501 - :rtype: int - """ - return self._credits - - @credits.setter - def credits(self, credits): - """Sets the credits of this CloudEndureMachineThrottleTimeSeconds. - - time to throttle the machine in seconds # noqa: E501 - - :param credits: The credits of this CloudEndureMachineThrottleTimeSeconds. # noqa: E501 - :type: int - """ - - self._credits = credits - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureMachineThrottleTimeSeconds, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureMachineThrottleTimeSeconds): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_machines_list.py b/cloudendure/cloudendure_api/models/cloud_endure_machines_list.py deleted file mode 100644 index 9d4ab1352..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_machines_list.py +++ /dev/null @@ -1,114 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_machine import ( - CloudEndureMachine, -) # noqa: F401,E501 - - -class CloudEndureMachinesList: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"items": "list[CloudEndureMachine]"} - - attribute_map = {"items": "items"} - - def __init__(self, items=None): # noqa: E501 - """CloudEndureMachinesList - a model defined in Swagger""" # noqa: E501 - self._items = None - self.discriminator = None - if items is not None: - self.items = items - - @property - def items(self): - """Gets the items of this CloudEndureMachinesList. # noqa: E501 - - - :return: The items of this CloudEndureMachinesList. # noqa: E501 - :rtype: list[CloudEndureMachine] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureMachinesList. - - - :param items: The items of this CloudEndureMachinesList. # noqa: E501 - :type: list[CloudEndureMachine] - """ - - self._items = items - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureMachinesList, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureMachinesList): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_machines_list_invalid_i_ds_and_job.py b/cloudendure/cloudendure_api/models/cloud_endure_machines_list_invalid_i_ds_and_job.py deleted file mode 100644 index 37ea684e5..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_machines_list_invalid_i_ds_and_job.py +++ /dev/null @@ -1,175 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_job import ( - CloudEndureJob, -) # noqa: F401,E501 -from cloudendure.cloudendure_api.models.cloud_endure_machine import ( - CloudEndureMachine, -) # noqa: F401,E501 - - -class CloudEndureMachinesListInvalidIDsAndJob: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "items": "list[CloudEndureMachine]", - "job": "CloudEndureJob", - "invalid_machine_i_ds": "list[str]", - } - - attribute_map = { - "items": "items", - "job": "job", - "invalid_machine_i_ds": "invalidMachineIDs", - } - - def __init__(self, items=None, job=None, invalid_machine_i_ds=None): # noqa: E501 - """CloudEndureMachinesListInvalidIDsAndJob - a model defined in Swagger""" # noqa: E501 - self._items = None - self._job = None - self._invalid_machine_i_ds = None - self.discriminator = None - if items is not None: - self.items = items - if job is not None: - self.job = job - if invalid_machine_i_ds is not None: - self.invalid_machine_i_ds = invalid_machine_i_ds - - @property - def items(self): - """Gets the items of this CloudEndureMachinesListInvalidIDsAndJob. # noqa: E501 - - - :return: The items of this CloudEndureMachinesListInvalidIDsAndJob. # noqa: E501 - :rtype: list[CloudEndureMachine] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureMachinesListInvalidIDsAndJob. - - - :param items: The items of this CloudEndureMachinesListInvalidIDsAndJob. # noqa: E501 - :type: list[CloudEndureMachine] - """ - - self._items = items - - @property - def job(self): - """Gets the job of this CloudEndureMachinesListInvalidIDsAndJob. # noqa: E501 - - - :return: The job of this CloudEndureMachinesListInvalidIDsAndJob. # noqa: E501 - :rtype: CloudEndureJob - """ - return self._job - - @job.setter - def job(self, job): - """Sets the job of this CloudEndureMachinesListInvalidIDsAndJob. - - - :param job: The job of this CloudEndureMachinesListInvalidIDsAndJob. # noqa: E501 - :type: CloudEndureJob - """ - - self._job = job - - @property - def invalid_machine_i_ds(self): - """Gets the invalid_machine_i_ds of this CloudEndureMachinesListInvalidIDsAndJob. # noqa: E501 - - The IDs of the machines for which the operation failed. # noqa: E501 - - :return: The invalid_machine_i_ds of this CloudEndureMachinesListInvalidIDsAndJob. # noqa: E501 - :rtype: list[str] - """ - return self._invalid_machine_i_ds - - @invalid_machine_i_ds.setter - def invalid_machine_i_ds(self, invalid_machine_i_ds): - """Sets the invalid_machine_i_ds of this CloudEndureMachinesListInvalidIDsAndJob. - - The IDs of the machines for which the operation failed. # noqa: E501 - - :param invalid_machine_i_ds: The invalid_machine_i_ds of this CloudEndureMachinesListInvalidIDsAndJob. # noqa: E501 - :type: list[str] - """ - - self._invalid_machine_i_ds = invalid_machine_i_ds - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureMachinesListInvalidIDsAndJob, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureMachinesListInvalidIDsAndJob): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_network_interface.py b/cloudendure/cloudendure_api/models/cloud_endure_network_interface.py deleted file mode 100644 index 4e95835d4..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_network_interface.py +++ /dev/null @@ -1,158 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureNetworkInterface: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"subnet_id": "str", "name": "str", "private_ip": "str"} - - attribute_map = {"subnet_id": "subnetId", "name": "name", "private_ip": "privateIp"} - - def __init__(self, subnet_id=None, name=None, private_ip=None): # noqa: E501 - """CloudEndureNetworkInterface - a model defined in Swagger""" # noqa: E501 - self._subnet_id = None - self._name = None - self._private_ip = None - self.discriminator = None - if subnet_id is not None: - self.subnet_id = subnet_id - if name is not None: - self.name = name - if private_ip is not None: - self.private_ip = private_ip - - @property - def subnet_id(self): - """Gets the subnet_id of this CloudEndureNetworkInterface. # noqa: E501 - - - :return: The subnet_id of this CloudEndureNetworkInterface. # noqa: E501 - :rtype: str - """ - return self._subnet_id - - @subnet_id.setter - def subnet_id(self, subnet_id): - """Sets the subnet_id of this CloudEndureNetworkInterface. - - - :param subnet_id: The subnet_id of this CloudEndureNetworkInterface. # noqa: E501 - :type: str - """ - - self._subnet_id = subnet_id - - @property - def name(self): - """Gets the name of this CloudEndureNetworkInterface. # noqa: E501 - - - :return: The name of this CloudEndureNetworkInterface. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this CloudEndureNetworkInterface. - - - :param name: The name of this CloudEndureNetworkInterface. # noqa: E501 - :type: str - """ - - self._name = name - - @property - def private_ip(self): - """Gets the private_ip of this CloudEndureNetworkInterface. # noqa: E501 - - - :return: The private_ip of this CloudEndureNetworkInterface. # noqa: E501 - :rtype: str - """ - return self._private_ip - - @private_ip.setter - def private_ip(self, private_ip): - """Sets the private_ip of this CloudEndureNetworkInterface. - - - :param private_ip: The private_ip of this CloudEndureNetworkInterface. # noqa: E501 - :type: str - """ - - self._private_ip = private_ip - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureNetworkInterface, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureNetworkInterface): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_point_in_time.py b/cloudendure/cloudendure_api/models/cloud_endure_point_in_time.py deleted file mode 100644 index 5316e0398..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_point_in_time.py +++ /dev/null @@ -1,136 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndurePointInTime: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"id": "str", "date_time": "datetime"} - - attribute_map = {"id": "id", "date_time": "dateTime"} - - def __init__(self, id=None, date_time=None): # noqa: E501 - """CloudEndurePointInTime - a model defined in Swagger""" # noqa: E501 - self._id = None - self._date_time = None - self.discriminator = None - if id is not None: - self.id = id - if date_time is not None: - self.date_time = date_time - - @property - def id(self): - """Gets the id of this CloudEndurePointInTime. # noqa: E501 - - - :return: The id of this CloudEndurePointInTime. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this CloudEndurePointInTime. - - - :param id: The id of this CloudEndurePointInTime. # noqa: E501 - :type: str - """ - - self._id = id - - @property - def date_time(self): - """Gets the date_time of this CloudEndurePointInTime. # noqa: E501 - - Timestamp for this Recovery Point. A NULL value signifies there is no later point available. # noqa: E501 - - :return: The date_time of this CloudEndurePointInTime. # noqa: E501 - :rtype: datetime - """ - return self._date_time - - @date_time.setter - def date_time(self, date_time): - """Sets the date_time of this CloudEndurePointInTime. - - Timestamp for this Recovery Point. A NULL value signifies there is no later point available. # noqa: E501 - - :param date_time: The date_time of this CloudEndurePointInTime. # noqa: E501 - :type: datetime - """ - - self._date_time = date_time - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndurePointInTime, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndurePointInTime): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_point_in_time_list.py b/cloudendure/cloudendure_api/models/cloud_endure_point_in_time_list.py deleted file mode 100644 index 969eeff33..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_point_in_time_list.py +++ /dev/null @@ -1,114 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_point_in_time import ( - CloudEndurePointInTime, -) # noqa: F401,E501 - - -class CloudEndurePointInTimeList: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"items": "list[CloudEndurePointInTime]"} - - attribute_map = {"items": "items"} - - def __init__(self, items=None): # noqa: E501 - """CloudEndurePointInTimeList - a model defined in Swagger""" # noqa: E501 - self._items = None - self.discriminator = None - if items is not None: - self.items = items - - @property - def items(self): - """Gets the items of this CloudEndurePointInTimeList. # noqa: E501 - - - :return: The items of this CloudEndurePointInTimeList. # noqa: E501 - :rtype: list[CloudEndurePointInTime] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndurePointInTimeList. - - - :param items: The items of this CloudEndurePointInTimeList. # noqa: E501 - :type: list[CloudEndurePointInTime] - """ - - self._items = items - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndurePointInTimeList, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndurePointInTimeList): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_project.py b/cloudendure/cloudendure_api/models/cloud_endure_project.py deleted file mode 100644 index 410fe1157..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_project.py +++ /dev/null @@ -1,513 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureProject: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "target_cloud_id": "str", - "agent_installation_token": "str", - "name": "str", - "users_i_ds": "list[str]", - "type": "str", - "replication_reversed": "bool", - "source_cloud_credentials_id": "str", - "cloud_credentials_i_ds": "list[str]", - "source_region": "str", - "licenses_i_ds": "list[str]", - "ce_admin_properties": "object", - "replication_configuration": "str", - "source_cloud_id": "str", - "id": "str", - "features": "object", - } - - attribute_map = { - "target_cloud_id": "targetCloudId", - "agent_installation_token": "agentInstallationToken", - "name": "name", - "users_i_ds": "usersIDs", - "type": "type", - "replication_reversed": "replicationReversed", - "source_cloud_credentials_id": "sourceCloudCredentialsId", - "cloud_credentials_i_ds": "cloudCredentialsIDs", - "source_region": "sourceRegion", - "licenses_i_ds": "licensesIDs", - "ce_admin_properties": "ceAdminProperties", - "replication_configuration": "replicationConfiguration", - "source_cloud_id": "sourceCloudId", - "id": "id", - "features": "features", - } - - def __init__( - self, - target_cloud_id=None, - agent_installation_token=None, - name=None, - users_i_ds=None, - type=None, - replication_reversed=None, - source_cloud_credentials_id=None, - cloud_credentials_i_ds=None, - source_region=None, - licenses_i_ds=None, - ce_admin_properties=None, - replication_configuration=None, - source_cloud_id=None, - id=None, - features=None, - ): # noqa: E501 - """CloudEndureProject - a model defined in Swagger""" # noqa: E501 - self._target_cloud_id = None - self._agent_installation_token = None - self._name = None - self._users_i_ds = None - self._type = None - self._replication_reversed = None - self._source_cloud_credentials_id = None - self._cloud_credentials_i_ds = None - self._source_region = None - self._licenses_i_ds = None - self._ce_admin_properties = None - self._replication_configuration = None - self._source_cloud_id = None - self._id = None - self._features = None - self.discriminator = None - if target_cloud_id is not None: - self.target_cloud_id = target_cloud_id - if agent_installation_token is not None: - self.agent_installation_token = agent_installation_token - if name is not None: - self.name = name - if users_i_ds is not None: - self.users_i_ds = users_i_ds - if type is not None: - self.type = type - if replication_reversed is not None: - self.replication_reversed = replication_reversed - if source_cloud_credentials_id is not None: - self.source_cloud_credentials_id = source_cloud_credentials_id - if cloud_credentials_i_ds is not None: - self.cloud_credentials_i_ds = cloud_credentials_i_ds - if source_region is not None: - self.source_region = source_region - if licenses_i_ds is not None: - self.licenses_i_ds = licenses_i_ds - if ce_admin_properties is not None: - self.ce_admin_properties = ce_admin_properties - if replication_configuration is not None: - self.replication_configuration = replication_configuration - if source_cloud_id is not None: - self.source_cloud_id = source_cloud_id - if id is not None: - self.id = id - if features is not None: - self.features = features - - @property - def target_cloud_id(self): - """Gets the target_cloud_id of this CloudEndureProject. # noqa: E501 - - - :return: The target_cloud_id of this CloudEndureProject. # noqa: E501 - :rtype: str - """ - return self._target_cloud_id - - @target_cloud_id.setter - def target_cloud_id(self, target_cloud_id): - """Sets the target_cloud_id of this CloudEndureProject. - - - :param target_cloud_id: The target_cloud_id of this CloudEndureProject. # noqa: E501 - :type: str - """ - - self._target_cloud_id = target_cloud_id - - @property - def agent_installation_token(self): - """Gets the agent_installation_token of this CloudEndureProject. # noqa: E501 - - - :return: The agent_installation_token of this CloudEndureProject. # noqa: E501 - :rtype: str - """ - return self._agent_installation_token - - @agent_installation_token.setter - def agent_installation_token(self, agent_installation_token): - """Sets the agent_installation_token of this CloudEndureProject. - - - :param agent_installation_token: The agent_installation_token of this CloudEndureProject. # noqa: E501 - :type: str - """ - - self._agent_installation_token = agent_installation_token - - @property - def name(self): - """Gets the name of this CloudEndureProject. # noqa: E501 - - :return: The name of this CloudEndureProject. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this CloudEndureProject. - - - :param name: The name of this CloudEndureProject. # noqa: E501 - :type: str - """ - - self._name = name - - @property - def users_i_ds(self): - """Gets the users_i_ds of this CloudEndureProject. # noqa: E501 - - todo empty array unless AO or ce admin # noqa: E501 - - :return: The users_i_ds of this CloudEndureProject. # noqa: E501 - :rtype: list[str] - """ - return self._users_i_ds - - @users_i_ds.setter - def users_i_ds(self, users_i_ds): - """Sets the users_i_ds of this CloudEndureProject. - - todo empty array unless AO or ce admin # noqa: E501 - - :param users_i_ds: The users_i_ds of this CloudEndureProject. # noqa: E501 - :type: list[str] - """ - - self._users_i_ds = users_i_ds - - @property - def type(self): - """Gets the type of this CloudEndureProject. # noqa: E501 - - - :return: The type of this CloudEndureProject. # noqa: E501 - :rtype: str - """ - return self._type - - @type.setter - def type(self, type): - """Sets the type of this CloudEndureProject. - - - :param type: The type of this CloudEndureProject. # noqa: E501 - :type: str - """ - allowed_values = ["MIGRATION", "DR", "BACKUP"] # noqa: E501 - if type not in allowed_values: - raise ValueError( - "Invalid value for `type` ({0}), must be one of {1}".format( # noqa: E501 - type, allowed_values - ) - ) - - self._type = type - - @property - def replication_reversed(self): - """Gets the replication_reversed of this CloudEndureProject. # noqa: E501 - - - :return: The replication_reversed of this CloudEndureProject. # noqa: E501 - :rtype: bool - """ - return self._replication_reversed - - @replication_reversed.setter - def replication_reversed(self, replication_reversed): - """Sets the replication_reversed of this CloudEndureProject. - - - :param replication_reversed: The replication_reversed of this CloudEndureProject. # noqa: E501 - :type: bool - """ - - self._replication_reversed = replication_reversed - - @property - def source_cloud_credentials_id(self): - """Gets the source_cloud_credentials_id of this CloudEndureProject. # noqa: E501 - - - :return: The source_cloud_credentials_id of this CloudEndureProject. # noqa: E501 - :rtype: str - """ - return self._source_cloud_credentials_id - - @source_cloud_credentials_id.setter - def source_cloud_credentials_id(self, source_cloud_credentials_id): - """Sets the source_cloud_credentials_id of this CloudEndureProject. - - - :param source_cloud_credentials_id: The source_cloud_credentials_id of this CloudEndureProject. # noqa: E501 - :type: str - """ - - self._source_cloud_credentials_id = source_cloud_credentials_id - - @property - def cloud_credentials_i_ds(self): - """Gets the cloud_credentials_i_ds of this CloudEndureProject. # noqa: E501 - - The IDs of the cloud credentials to use (array of one). # noqa: E501 - - :return: The cloud_credentials_i_ds of this CloudEndureProject. # noqa: E501 - :rtype: list[str] - """ - return self._cloud_credentials_i_ds - - @cloud_credentials_i_ds.setter - def cloud_credentials_i_ds(self, cloud_credentials_i_ds): - """Sets the cloud_credentials_i_ds of this CloudEndureProject. - - The IDs of the cloud credentials to use (array of one). # noqa: E501 - - :param cloud_credentials_i_ds: The cloud_credentials_i_ds of this CloudEndureProject. # noqa: E501 - :type: list[str] - """ - - self._cloud_credentials_i_ds = cloud_credentials_i_ds - - @property - def source_region(self): - """Gets the source_region of this CloudEndureProject. # noqa: E501 - - The ID of the region to use as source. # noqa: E501 - - :return: The source_region of this CloudEndureProject. # noqa: E501 - :rtype: str - """ - return self._source_region - - @source_region.setter - def source_region(self, source_region): - """Sets the source_region of this CloudEndureProject. - - The ID of the region to use as source. # noqa: E501 - - :param source_region: The source_region of this CloudEndureProject. # noqa: E501 - :type: str - """ - - self._source_region = source_region - - @property - def licenses_i_ds(self): - """Gets the licenses_i_ds of this CloudEndureProject. # noqa: E501 - - The IDs of the licenses associated with this project (array of one). # noqa: E501 - - :return: The licenses_i_ds of this CloudEndureProject. # noqa: E501 - :rtype: list[str] - """ - return self._licenses_i_ds - - @licenses_i_ds.setter - def licenses_i_ds(self, licenses_i_ds): - """Sets the licenses_i_ds of this CloudEndureProject. - - The IDs of the licenses associated with this project (array of one). # noqa: E501 - - :param licenses_i_ds: The licenses_i_ds of this CloudEndureProject. # noqa: E501 - :type: list[str] - """ - - self._licenses_i_ds = licenses_i_ds - - @property - def ce_admin_properties(self): - """Gets the ce_admin_properties of this CloudEndureProject. # noqa: E501 - - For internal use. # noqa: E501 - - :return: The ce_admin_properties of this CloudEndureProject. # noqa: E501 - :rtype: object - """ - return self._ce_admin_properties - - @ce_admin_properties.setter - def ce_admin_properties(self, ce_admin_properties): - """Sets the ce_admin_properties of this CloudEndureProject. - - For internal use. # noqa: E501 - - :param ce_admin_properties: The ce_admin_properties of this CloudEndureProject. # noqa: E501 - :type: object - """ - - self._ce_admin_properties = ce_admin_properties - - @property - def replication_configuration(self): - """Gets the replication_configuration of this CloudEndureProject. # noqa: E501 - - The ID of the replication configuration object to use (corresponding to the ones available in /projects/{projectId}/replicationConfigurations). # noqa: E501 - - :return: The replication_configuration of this CloudEndureProject. # noqa: E501 - :rtype: str - """ - return self._replication_configuration - - @replication_configuration.setter - def replication_configuration(self, replication_configuration): - """Sets the replication_configuration of this CloudEndureProject. - - The ID of the replication configuration object to use (corresponding to the ones available in /projects/{projectId}/replicationConfigurations). # noqa: E501 - - :param replication_configuration: The replication_configuration of this CloudEndureProject. # noqa: E501 - :type: str - """ - - self._replication_configuration = replication_configuration - - @property - def source_cloud_id(self): - """Gets the source_cloud_id of this CloudEndureProject. # noqa: E501 - - - :return: The source_cloud_id of this CloudEndureProject. # noqa: E501 - :rtype: str - """ - return self._source_cloud_id - - @source_cloud_id.setter - def source_cloud_id(self, source_cloud_id): - """Sets the source_cloud_id of this CloudEndureProject. - - - :param source_cloud_id: The source_cloud_id of this CloudEndureProject. # noqa: E501 - :type: str - """ - - self._source_cloud_id = source_cloud_id - - @property - def id(self): - """Gets the id of this CloudEndureProject. # noqa: E501 - - - :return: The id of this CloudEndureProject. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this CloudEndureProject. - - - :param id: The id of this CloudEndureProject. # noqa: E501 - :type: str - """ - - self._id = id - - @property - def features(self): - """Gets the features of this CloudEndureProject. # noqa: E501 - - - :return: The features of this CloudEndureProject. # noqa: E501 - :rtype: object - """ - return self._features - - @features.setter - def features(self, features): - """Sets the features of this CloudEndureProject. - - - :param features: The features of this CloudEndureProject. # noqa: E501 - :type: object - """ - - self._features = features - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureProject, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureProject): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_project_storage.py b/cloudendure/cloudendure_api/models/cloud_endure_project_storage.py deleted file mode 100644 index c81d92457..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_project_storage.py +++ /dev/null @@ -1,225 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureProjectStorage: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "project_id": "str", - "points_in_time_total_bytes": "int", - "running_machines_total_bytes": "int", - "working_storage": "object", - "calculation_date_time": "datetime", - } - - attribute_map = { - "project_id": "projectId", - "points_in_time_total_bytes": "pointsInTimeTotalBytes", - "running_machines_total_bytes": "runningMachinesTotalBytes", - "working_storage": "workingStorage", - "calculation_date_time": "calculationDateTime", - } - - def __init__( - self, - project_id=None, - points_in_time_total_bytes=None, - running_machines_total_bytes=None, - working_storage=None, - calculation_date_time=None, - ): # noqa: E501 - """CloudEndureProjectStorage - a model defined in Swagger""" # noqa: E501 - self._project_id = None - self._points_in_time_total_bytes = None - self._running_machines_total_bytes = None - self._working_storage = None - self._calculation_date_time = None - self.discriminator = None - if project_id is not None: - self.project_id = project_id - if points_in_time_total_bytes is not None: - self.points_in_time_total_bytes = points_in_time_total_bytes - if running_machines_total_bytes is not None: - self.running_machines_total_bytes = running_machines_total_bytes - if working_storage is not None: - self.working_storage = working_storage - if calculation_date_time is not None: - self.calculation_date_time = calculation_date_time - - @property - def project_id(self): - """Gets the project_id of this CloudEndureProjectStorage. # noqa: E501 - - - :return: The project_id of this CloudEndureProjectStorage. # noqa: E501 - :rtype: str - """ - return self._project_id - - @project_id.setter - def project_id(self, project_id): - """Sets the project_id of this CloudEndureProjectStorage. - - - :param project_id: The project_id of this CloudEndureProjectStorage. # noqa: E501 - :type: str - """ - - self._project_id = project_id - - @property - def points_in_time_total_bytes(self): - """Gets the points_in_time_total_bytes of this CloudEndureProjectStorage. # noqa: E501 - - - :return: The points_in_time_total_bytes of this CloudEndureProjectStorage. # noqa: E501 - :rtype: int - """ - return self._points_in_time_total_bytes - - @points_in_time_total_bytes.setter - def points_in_time_total_bytes(self, points_in_time_total_bytes): - """Sets the points_in_time_total_bytes of this CloudEndureProjectStorage. - - - :param points_in_time_total_bytes: The points_in_time_total_bytes of this CloudEndureProjectStorage. # noqa: E501 - :type: int - """ - - self._points_in_time_total_bytes = points_in_time_total_bytes - - @property - def running_machines_total_bytes(self): - """Gets the running_machines_total_bytes of this CloudEndureProjectStorage. # noqa: E501 - - - :return: The running_machines_total_bytes of this CloudEndureProjectStorage. # noqa: E501 - :rtype: int - """ - return self._running_machines_total_bytes - - @running_machines_total_bytes.setter - def running_machines_total_bytes(self, running_machines_total_bytes): - """Sets the running_machines_total_bytes of this CloudEndureProjectStorage. - - - :param running_machines_total_bytes: The running_machines_total_bytes of this CloudEndureProjectStorage. # noqa: E501 - :type: int - """ - - self._running_machines_total_bytes = running_machines_total_bytes - - @property - def working_storage(self): - """Gets the working_storage of this CloudEndureProjectStorage. # noqa: E501 - - - :return: The working_storage of this CloudEndureProjectStorage. # noqa: E501 - :rtype: object - """ - return self._working_storage - - @working_storage.setter - def working_storage(self, working_storage): - """Sets the working_storage of this CloudEndureProjectStorage. - - - :param working_storage: The working_storage of this CloudEndureProjectStorage. # noqa: E501 - :type: object - """ - - self._working_storage = working_storage - - @property - def calculation_date_time(self): - """Gets the calculation_date_time of this CloudEndureProjectStorage. # noqa: E501 - - - :return: The calculation_date_time of this CloudEndureProjectStorage. # noqa: E501 - :rtype: datetime - """ - return self._calculation_date_time - - @calculation_date_time.setter - def calculation_date_time(self, calculation_date_time): - """Sets the calculation_date_time of this CloudEndureProjectStorage. - - - :param calculation_date_time: The calculation_date_time of this CloudEndureProjectStorage. # noqa: E501 - :type: datetime - """ - - self._calculation_date_time = calculation_date_time - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureProjectStorage, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureProjectStorage): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_projects_and_users.py b/cloudendure/cloudendure_api/models/cloud_endure_projects_and_users.py deleted file mode 100644 index 6f00d8092..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_projects_and_users.py +++ /dev/null @@ -1,110 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureProjectsAndUsers: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"items": "list[object]"} - - attribute_map = {"items": "items"} - - def __init__(self, items=None): # noqa: E501 - """CloudEndureProjectsAndUsers - a model defined in Swagger""" # noqa: E501 - self._items = None - self.discriminator = None - if items is not None: - self.items = items - - @property - def items(self): - """Gets the items of this CloudEndureProjectsAndUsers. # noqa: E501 - - - :return: The items of this CloudEndureProjectsAndUsers. # noqa: E501 - :rtype: list[object] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureProjectsAndUsers. - - - :param items: The items of this CloudEndureProjectsAndUsers. # noqa: E501 - :type: list[object] - """ - - self._items = items - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureProjectsAndUsers, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureProjectsAndUsers): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_projects_list.py b/cloudendure/cloudendure_api/models/cloud_endure_projects_list.py deleted file mode 100644 index 0faa843b3..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_projects_list.py +++ /dev/null @@ -1,114 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_project import ( - CloudEndureProject, -) # noqa: F401,E501 - - -class CloudEndureProjectsList: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"items": "list[CloudEndureProject]"} - - attribute_map = {"items": "items"} - - def __init__(self, items=None): # noqa: E501 - """CloudEndureProjectsList - a model defined in Swagger""" # noqa: E501 - self._items = None - self.discriminator = None - if items is not None: - self.items = items - - @property - def items(self): - """Gets the items of this CloudEndureProjectsList. # noqa: E501 - - - :return: The items of this CloudEndureProjectsList. # noqa: E501 - :rtype: list[CloudEndureProject] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureProjectsList. - - - :param items: The items of this CloudEndureProjectsList. # noqa: E501 - :type: list[CloudEndureProject] - """ - - self._items = items - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureProjectsList, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureProjectsList): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_recovery_plan.py b/cloudendure/cloudendure_api/models/cloud_endure_recovery_plan.py deleted file mode 100644 index 1a897654b..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_recovery_plan.py +++ /dev/null @@ -1,166 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_recovery_plan_steps import ( # noqa: F401,E501 - CloudEndureRecoveryPlanSteps, -) - - -class CloudEndureRecoveryPlan: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "steps": "CloudEndureRecoveryPlanSteps", - "id": "str", - "name": "str", - } - - attribute_map = {"steps": "steps", "id": "id", "name": "name"} - - def __init__(self, steps=None, id=None, name=None): # noqa: E501 - """CloudEndureRecoveryPlan - a model defined in Swagger""" # noqa: E501 - self._steps = None - self._id = None - self._name = None - self.discriminator = None - if steps is not None: - self.steps = steps - if id is not None: - self.id = id - if name is not None: - self.name = name - - @property - def steps(self): - """Gets the steps of this CloudEndureRecoveryPlan. # noqa: E501 - - - :return: The steps of this CloudEndureRecoveryPlan. # noqa: E501 - :rtype: CloudEndureRecoveryPlanSteps - """ - return self._steps - - @steps.setter - def steps(self, steps): - """Sets the steps of this CloudEndureRecoveryPlan. - - - :param steps: The steps of this CloudEndureRecoveryPlan. # noqa: E501 - :type: CloudEndureRecoveryPlanSteps - """ - - self._steps = steps - - @property - def id(self): - """Gets the id of this CloudEndureRecoveryPlan. # noqa: E501 - - - :return: The id of this CloudEndureRecoveryPlan. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this CloudEndureRecoveryPlan. - - - :param id: The id of this CloudEndureRecoveryPlan. # noqa: E501 - :type: str - """ - - self._id = id - - @property - def name(self): - """Gets the name of this CloudEndureRecoveryPlan. # noqa: E501 - - - :return: The name of this CloudEndureRecoveryPlan. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this CloudEndureRecoveryPlan. - - - :param name: The name of this CloudEndureRecoveryPlan. # noqa: E501 - :type: str - """ - - self._name = name - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureRecoveryPlan, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureRecoveryPlan): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_recovery_plan_list.py b/cloudendure/cloudendure_api/models/cloud_endure_recovery_plan_list.py deleted file mode 100644 index 0e8601127..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_recovery_plan_list.py +++ /dev/null @@ -1,114 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_recovery_plan import ( - CloudEndureRecoveryPlan, -) # noqa: F401,E501 - - -class CloudEndureRecoveryPlanList: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"items": "list[CloudEndureRecoveryPlan]"} - - attribute_map = {"items": "items"} - - def __init__(self, items=None): # noqa: E501 - """CloudEndureRecoveryPlanList - a model defined in Swagger""" # noqa: E501 - self._items = None - self.discriminator = None - if items is not None: - self.items = items - - @property - def items(self): - """Gets the items of this CloudEndureRecoveryPlanList. # noqa: E501 - - - :return: The items of this CloudEndureRecoveryPlanList. # noqa: E501 - :rtype: list[CloudEndureRecoveryPlan] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureRecoveryPlanList. - - - :param items: The items of this CloudEndureRecoveryPlanList. # noqa: E501 - :type: list[CloudEndureRecoveryPlan] - """ - - self._items = items - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureRecoveryPlanList, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureRecoveryPlanList): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_recovery_plan_step.py b/cloudendure/cloudendure_api/models/cloud_endure_recovery_plan_step.py deleted file mode 100644 index aff3e8cc9..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_recovery_plan_step.py +++ /dev/null @@ -1,162 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureRecoveryPlanStep: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"machine_i_ds": "list[str]", "wait_before": "str", "name": "str"} - - attribute_map = { - "machine_i_ds": "machineIDs", - "wait_before": "waitBefore", - "name": "name", - } - - def __init__(self, machine_i_ds=None, wait_before=None, name=None): # noqa: E501 - """CloudEndureRecoveryPlanStep - a model defined in Swagger""" # noqa: E501 - self._machine_i_ds = None - self._wait_before = None - self._name = None - self.discriminator = None - if machine_i_ds is not None: - self.machine_i_ds = machine_i_ds - if wait_before is not None: - self.wait_before = wait_before - if name is not None: - self.name = name - - @property - def machine_i_ds(self): - """Gets the machine_i_ds of this CloudEndureRecoveryPlanStep. # noqa: E501 - - - :return: The machine_i_ds of this CloudEndureRecoveryPlanStep. # noqa: E501 - :rtype: list[str] - """ - return self._machine_i_ds - - @machine_i_ds.setter - def machine_i_ds(self, machine_i_ds): - """Sets the machine_i_ds of this CloudEndureRecoveryPlanStep. - - - :param machine_i_ds: The machine_i_ds of this CloudEndureRecoveryPlanStep. # noqa: E501 - :type: list[str] - """ - - self._machine_i_ds = machine_i_ds - - @property - def wait_before(self): - """Gets the wait_before of this CloudEndureRecoveryPlanStep. # noqa: E501 - - - :return: The wait_before of this CloudEndureRecoveryPlanStep. # noqa: E501 - :rtype: str - """ - return self._wait_before - - @wait_before.setter - def wait_before(self, wait_before): - """Sets the wait_before of this CloudEndureRecoveryPlanStep. - - - :param wait_before: The wait_before of this CloudEndureRecoveryPlanStep. # noqa: E501 - :type: str - """ - - self._wait_before = wait_before - - @property - def name(self): - """Gets the name of this CloudEndureRecoveryPlanStep. # noqa: E501 - - - :return: The name of this CloudEndureRecoveryPlanStep. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this CloudEndureRecoveryPlanStep. - - - :param name: The name of this CloudEndureRecoveryPlanStep. # noqa: E501 - :type: str - """ - - self._name = name - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureRecoveryPlanStep, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureRecoveryPlanStep): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_recovery_plan_steps.py b/cloudendure/cloudendure_api/models/cloud_endure_recovery_plan_steps.py deleted file mode 100644 index b1d5eb5b1..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_recovery_plan_steps.py +++ /dev/null @@ -1,114 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_recovery_plan_step import ( # noqa: F401,E501 - CloudEndureRecoveryPlanStep, -) - - -class CloudEndureRecoveryPlanSteps: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"items": "list[CloudEndureRecoveryPlanStep]"} - - attribute_map = {"items": "items"} - - def __init__(self, items=None): # noqa: E501 - """CloudEndureRecoveryPlanSteps - a model defined in Swagger""" # noqa: E501 - self._items = None - self.discriminator = None - if items is not None: - self.items = items - - @property - def items(self): - """Gets the items of this CloudEndureRecoveryPlanSteps. # noqa: E501 - - - :return: The items of this CloudEndureRecoveryPlanSteps. # noqa: E501 - :rtype: list[CloudEndureRecoveryPlanStep] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureRecoveryPlanSteps. - - - :param items: The items of this CloudEndureRecoveryPlanSteps. # noqa: E501 - :type: list[CloudEndureRecoveryPlanStep] - """ - - self._items = items - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureRecoveryPlanSteps, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureRecoveryPlanSteps): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_region.py b/cloudendure/cloudendure_api/models/cloud_endure_region.py deleted file mode 100644 index 31e3ceab0..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_region.py +++ /dev/null @@ -1,690 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_compute_location import ( # noqa: F401,E501 - CloudEndureComputeLocation, -) -from cloudendure.cloudendure_api.models.cloud_endure_logical_location import ( # noqa: F401,E501 - CloudEndureLogicalLocation, -) -from cloudendure.cloudendure_api.models.cloud_endure_network_interface import ( # noqa: F401,E501 - CloudEndureNetworkInterface, -) -from cloudendure.cloudendure_api.models.cloud_endure_security_group import ( - CloudEndureSecurityGroup, -) # noqa: F401,E501 -from cloudendure.cloudendure_api.models.cloud_endure_storage_location import ( # noqa: F401,E501 - CloudEndureStorageLocation, -) -from cloudendure.cloudendure_api.models.cloud_endure_subnet import ( - CloudEndureSubnet, -) # noqa: F401,E501 - - -class CloudEndureRegion: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "subnets": "list[CloudEndureSubnet]", - "placement_groups": "list[str]", - "scsi_adapter_types": "list[str]", - "instance_types": "list[str]", - "zones": "list[str]", - "volume_encryption_keys": "list[str]", - "cloud": "str", - "security_groups": "list[CloudEndureSecurityGroup]", - "logical_locations": "list[CloudEndureLogicalLocation]", - "static_ips": "list[str]", - "max_cpus_per_machine": "int", - "network_interfaces": "list[CloudEndureNetworkInterface]", - "compute_locations": "list[CloudEndureComputeLocation]", - "name": "str", - "storage_locations": "list[CloudEndureStorageLocation]", - "iam_roles": "list[str]", - "id": "str", - "max_cores_per_machine_cpu": "int", - "dedicated_hosts": "list[str]", - "network_adapter_types": "list[str]", - "max_mb_ram_per_machine": "int", - } - - attribute_map = { - "subnets": "subnets", - "placement_groups": "placementGroups", - "scsi_adapter_types": "scsiAdapterTypes", - "instance_types": "instanceTypes", - "zones": "zones", - "volume_encryption_keys": "volumeEncryptionKeys", - "cloud": "cloud", - "security_groups": "securityGroups", - "logical_locations": "logicalLocations", - "static_ips": "staticIps", - "max_cpus_per_machine": "maxCpusPerMachine", - "network_interfaces": "networkInterfaces", - "compute_locations": "computeLocations", - "name": "name", - "storage_locations": "storageLocations", - "iam_roles": "iamRoles", - "id": "id", - "max_cores_per_machine_cpu": "maxCoresPerMachineCpu", - "dedicated_hosts": "dedicatedHosts", - "network_adapter_types": "networkAdapterTypes", - "max_mb_ram_per_machine": "maxMbRamPerMachine", - } - - def __init__( - self, - subnets=None, - placement_groups=None, - scsi_adapter_types=None, - instance_types=None, - zones=None, - volume_encryption_keys=None, - cloud=None, - security_groups=None, - logical_locations=None, - static_ips=None, - max_cpus_per_machine=None, - network_interfaces=None, - compute_locations=None, - name=None, - storage_locations=None, - iam_roles=None, - id=None, - max_cores_per_machine_cpu=None, - dedicated_hosts=None, - network_adapter_types=None, - max_mb_ram_per_machine=None, - ): # noqa: E501 - """CloudEndureRegion - a model defined in Swagger""" # noqa: E501 - self._subnets = None - self._placement_groups = None - self._scsi_adapter_types = None - self._instance_types = None - self._zones = None - self._volume_encryption_keys = None - self._cloud = None - self._security_groups = None - self._logical_locations = None - self._static_ips = None - self._max_cpus_per_machine = None - self._network_interfaces = None - self._compute_locations = None - self._name = None - self._storage_locations = None - self._iam_roles = None - self._id = None - self._max_cores_per_machine_cpu = None - self._dedicated_hosts = None - self._network_adapter_types = None - self._max_mb_ram_per_machine = None - self.discriminator = None - if subnets is not None: - self.subnets = subnets - if placement_groups is not None: - self.placement_groups = placement_groups - if scsi_adapter_types is not None: - self.scsi_adapter_types = scsi_adapter_types - if instance_types is not None: - self.instance_types = instance_types - if zones is not None: - self.zones = zones - if volume_encryption_keys is not None: - self.volume_encryption_keys = volume_encryption_keys - if cloud is not None: - self.cloud = cloud - if security_groups is not None: - self.security_groups = security_groups - if logical_locations is not None: - self.logical_locations = logical_locations - if static_ips is not None: - self.static_ips = static_ips - if max_cpus_per_machine is not None: - self.max_cpus_per_machine = max_cpus_per_machine - if network_interfaces is not None: - self.network_interfaces = network_interfaces - if compute_locations is not None: - self.compute_locations = compute_locations - if name is not None: - self.name = name - if storage_locations is not None: - self.storage_locations = storage_locations - if iam_roles is not None: - self.iam_roles = iam_roles - if id is not None: - self.id = id - if max_cores_per_machine_cpu is not None: - self.max_cores_per_machine_cpu = max_cores_per_machine_cpu - if dedicated_hosts is not None: - self.dedicated_hosts = dedicated_hosts - if network_adapter_types is not None: - self.network_adapter_types = network_adapter_types - if max_mb_ram_per_machine is not None: - self.max_mb_ram_per_machine = max_mb_ram_per_machine - - @property - def subnets(self): - """Gets the subnets of this CloudEndureRegion. # noqa: E501 - - - :return: The subnets of this CloudEndureRegion. # noqa: E501 - :rtype: list[CloudEndureSubnet] - """ - return self._subnets - - @subnets.setter - def subnets(self, subnets): - """Sets the subnets of this CloudEndureRegion. - - - :param subnets: The subnets of this CloudEndureRegion. # noqa: E501 - :type: list[CloudEndureSubnet] - """ - - self._subnets = subnets - - @property - def placement_groups(self): - """Gets the placement_groups of this CloudEndureRegion. # noqa: E501 - - - :return: The placement_groups of this CloudEndureRegion. # noqa: E501 - :rtype: list[str] - """ - return self._placement_groups - - @placement_groups.setter - def placement_groups(self, placement_groups): - """Sets the placement_groups of this CloudEndureRegion. - - - :param placement_groups: The placement_groups of this CloudEndureRegion. # noqa: E501 - :type: list[str] - """ - - self._placement_groups = placement_groups - - @property - def scsi_adapter_types(self): - """Gets the scsi_adapter_types of this CloudEndureRegion. # noqa: E501 - - todo # noqa: E501 - - :return: The scsi_adapter_types of this CloudEndureRegion. # noqa: E501 - :rtype: list[str] - """ - return self._scsi_adapter_types - - @scsi_adapter_types.setter - def scsi_adapter_types(self, scsi_adapter_types): - """Sets the scsi_adapter_types of this CloudEndureRegion. - - todo # noqa: E501 - - :param scsi_adapter_types: The scsi_adapter_types of this CloudEndureRegion. # noqa: E501 - :type: list[str] - """ - - self._scsi_adapter_types = scsi_adapter_types - - @property - def instance_types(self): - """Gets the instance_types of this CloudEndureRegion. # noqa: E501 - - - :return: The instance_types of this CloudEndureRegion. # noqa: E501 - :rtype: list[str] - """ - return self._instance_types - - @instance_types.setter - def instance_types(self, instance_types): - """Sets the instance_types of this CloudEndureRegion. - - - :param instance_types: The instance_types of this CloudEndureRegion. # noqa: E501 - :type: list[str] - """ - - self._instance_types = instance_types - - @property - def zones(self): - """Gets the zones of this CloudEndureRegion. # noqa: E501 - - - :return: The zones of this CloudEndureRegion. # noqa: E501 - :rtype: list[str] - """ - return self._zones - - @zones.setter - def zones(self, zones): - """Sets the zones of this CloudEndureRegion. - - - :param zones: The zones of this CloudEndureRegion. # noqa: E501 - :type: list[str] - """ - - self._zones = zones - - @property - def volume_encryption_keys(self): - """Gets the volume_encryption_keys of this CloudEndureRegion. # noqa: E501 - - - :return: The volume_encryption_keys of this CloudEndureRegion. # noqa: E501 - :rtype: list[str] - """ - return self._volume_encryption_keys - - @volume_encryption_keys.setter - def volume_encryption_keys(self, volume_encryption_keys): - """Sets the volume_encryption_keys of this CloudEndureRegion. - - - :param volume_encryption_keys: The volume_encryption_keys of this CloudEndureRegion. # noqa: E501 - :type: list[str] - """ - - self._volume_encryption_keys = volume_encryption_keys - - @property - def cloud(self): - """Gets the cloud of this CloudEndureRegion. # noqa: E501 - - - :return: The cloud of this CloudEndureRegion. # noqa: E501 - :rtype: str - """ - return self._cloud - - @cloud.setter - def cloud(self, cloud): - """Sets the cloud of this CloudEndureRegion. - - - :param cloud: The cloud of this CloudEndureRegion. # noqa: E501 - :type: str - """ - - self._cloud = cloud - - @property - def security_groups(self): - """Gets the security_groups of this CloudEndureRegion. # noqa: E501 - - - :return: The security_groups of this CloudEndureRegion. # noqa: E501 - :rtype: list[CloudEndureSecurityGroup] - """ - return self._security_groups - - @security_groups.setter - def security_groups(self, security_groups): - """Sets the security_groups of this CloudEndureRegion. - - - :param security_groups: The security_groups of this CloudEndureRegion. # noqa: E501 - :type: list[CloudEndureSecurityGroup] - """ - - self._security_groups = security_groups - - @property - def logical_locations(self): - """Gets the logical_locations of this CloudEndureRegion. # noqa: E501 - - - :return: The logical_locations of this CloudEndureRegion. # noqa: E501 - :rtype: list[CloudEndureLogicalLocation] - """ - return self._logical_locations - - @logical_locations.setter - def logical_locations(self, logical_locations): - """Sets the logical_locations of this CloudEndureRegion. - - - :param logical_locations: The logical_locations of this CloudEndureRegion. # noqa: E501 - :type: list[CloudEndureLogicalLocation] - """ - - self._logical_locations = logical_locations - - @property - def static_ips(self): - """Gets the static_ips of this CloudEndureRegion. # noqa: E501 - - - :return: The static_ips of this CloudEndureRegion. # noqa: E501 - :rtype: list[str] - """ - return self._static_ips - - @static_ips.setter - def static_ips(self, static_ips): - """Sets the static_ips of this CloudEndureRegion. - - - :param static_ips: The static_ips of this CloudEndureRegion. # noqa: E501 - :type: list[str] - """ - - self._static_ips = static_ips - - @property - def max_cpus_per_machine(self): - """Gets the max_cpus_per_machine of this CloudEndureRegion. # noqa: E501 - - Maximum CPUs per per Target machine (currently relevant for vCenter cloud only) # noqa: E501 - - :return: The max_cpus_per_machine of this CloudEndureRegion. # noqa: E501 - :rtype: int - """ - return self._max_cpus_per_machine - - @max_cpus_per_machine.setter - def max_cpus_per_machine(self, max_cpus_per_machine): - """Sets the max_cpus_per_machine of this CloudEndureRegion. - - Maximum CPUs per per Target machine (currently relevant for vCenter cloud only) # noqa: E501 - - :param max_cpus_per_machine: The max_cpus_per_machine of this CloudEndureRegion. # noqa: E501 - :type: int - """ - - self._max_cpus_per_machine = max_cpus_per_machine - - @property - def network_interfaces(self): - """Gets the network_interfaces of this CloudEndureRegion. # noqa: E501 - - - :return: The network_interfaces of this CloudEndureRegion. # noqa: E501 - :rtype: list[CloudEndureNetworkInterface] - """ - return self._network_interfaces - - @network_interfaces.setter - def network_interfaces(self, network_interfaces): - """Sets the network_interfaces of this CloudEndureRegion. - - - :param network_interfaces: The network_interfaces of this CloudEndureRegion. # noqa: E501 - :type: list[CloudEndureNetworkInterface] - """ - - self._network_interfaces = network_interfaces - - @property - def compute_locations(self): - """Gets the compute_locations of this CloudEndureRegion. # noqa: E501 - - Compute location (e.g. vCenter Host) # noqa: E501 - - :return: The compute_locations of this CloudEndureRegion. # noqa: E501 - :rtype: list[CloudEndureComputeLocation] - """ - return self._compute_locations - - @compute_locations.setter - def compute_locations(self, compute_locations): - """Sets the compute_locations of this CloudEndureRegion. - - Compute location (e.g. vCenter Host) # noqa: E501 - - :param compute_locations: The compute_locations of this CloudEndureRegion. # noqa: E501 - :type: list[CloudEndureComputeLocation] - """ - - self._compute_locations = compute_locations - - @property - def name(self): - """Gets the name of this CloudEndureRegion. # noqa: E501 - - - :return: The name of this CloudEndureRegion. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this CloudEndureRegion. - - - :param name: The name of this CloudEndureRegion. # noqa: E501 - :type: str - """ - - self._name = name - - @property - def storage_locations(self): - """Gets the storage_locations of this CloudEndureRegion. # noqa: E501 - - Storage location (e.g. Azure Storage Account, vCenter Data Store) # noqa: E501 - - :return: The storage_locations of this CloudEndureRegion. # noqa: E501 - :rtype: list[CloudEndureStorageLocation] - """ - return self._storage_locations - - @storage_locations.setter - def storage_locations(self, storage_locations): - """Sets the storage_locations of this CloudEndureRegion. - - Storage location (e.g. Azure Storage Account, vCenter Data Store) # noqa: E501 - - :param storage_locations: The storage_locations of this CloudEndureRegion. # noqa: E501 - :type: list[CloudEndureStorageLocation] - """ - - self._storage_locations = storage_locations - - @property - def iam_roles(self): - """Gets the iam_roles of this CloudEndureRegion. # noqa: E501 - - - :return: The iam_roles of this CloudEndureRegion. # noqa: E501 - :rtype: list[str] - """ - return self._iam_roles - - @iam_roles.setter - def iam_roles(self, iam_roles): - """Sets the iam_roles of this CloudEndureRegion. - - - :param iam_roles: The iam_roles of this CloudEndureRegion. # noqa: E501 - :type: list[str] - """ - - self._iam_roles = iam_roles - - @property - def id(self): - """Gets the id of this CloudEndureRegion. # noqa: E501 - - - :return: The id of this CloudEndureRegion. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this CloudEndureRegion. - - - :param id: The id of this CloudEndureRegion. # noqa: E501 - :type: str - """ - - self._id = id - - @property - def max_cores_per_machine_cpu(self): - """Gets the max_cores_per_machine_cpu of this CloudEndureRegion. # noqa: E501 - - Maximum CPU cores per CPU in Target machines (currently relevant for vCenter cloud only) # noqa: E501 - - :return: The max_cores_per_machine_cpu of this CloudEndureRegion. # noqa: E501 - :rtype: int - """ - return self._max_cores_per_machine_cpu - - @max_cores_per_machine_cpu.setter - def max_cores_per_machine_cpu(self, max_cores_per_machine_cpu): - """Sets the max_cores_per_machine_cpu of this CloudEndureRegion. - - Maximum CPU cores per CPU in Target machines (currently relevant for vCenter cloud only) # noqa: E501 - - :param max_cores_per_machine_cpu: The max_cores_per_machine_cpu of this CloudEndureRegion. # noqa: E501 - :type: int - """ - - self._max_cores_per_machine_cpu = max_cores_per_machine_cpu - - @property - def dedicated_hosts(self): - """Gets the dedicated_hosts of this CloudEndureRegion. # noqa: E501 - - - :return: The dedicated_hosts of this CloudEndureRegion. # noqa: E501 - :rtype: list[str] - """ - return self._dedicated_hosts - - @dedicated_hosts.setter - def dedicated_hosts(self, dedicated_hosts): - """Sets the dedicated_hosts of this CloudEndureRegion. - - - :param dedicated_hosts: The dedicated_hosts of this CloudEndureRegion. # noqa: E501 - :type: list[str] - """ - - self._dedicated_hosts = dedicated_hosts - - @property - def network_adapter_types(self): - """Gets the network_adapter_types of this CloudEndureRegion. # noqa: E501 - - todo # noqa: E501 - - :return: The network_adapter_types of this CloudEndureRegion. # noqa: E501 - :rtype: list[str] - """ - return self._network_adapter_types - - @network_adapter_types.setter - def network_adapter_types(self, network_adapter_types): - """Sets the network_adapter_types of this CloudEndureRegion. - - todo # noqa: E501 - - :param network_adapter_types: The network_adapter_types of this CloudEndureRegion. # noqa: E501 - :type: list[str] - """ - - self._network_adapter_types = network_adapter_types - - @property - def max_mb_ram_per_machine(self): - """Gets the max_mb_ram_per_machine of this CloudEndureRegion. # noqa: E501 - - Maximum MB RAM per Target machine (currently relevant for vCenter cloud only) # noqa: E501 - - :return: The max_mb_ram_per_machine of this CloudEndureRegion. # noqa: E501 - :rtype: int - """ - return self._max_mb_ram_per_machine - - @max_mb_ram_per_machine.setter - def max_mb_ram_per_machine(self, max_mb_ram_per_machine): - """Sets the max_mb_ram_per_machine of this CloudEndureRegion. - - Maximum MB RAM per Target machine (currently relevant for vCenter cloud only) # noqa: E501 - - :param max_mb_ram_per_machine: The max_mb_ram_per_machine of this CloudEndureRegion. # noqa: E501 - :type: int - """ - - self._max_mb_ram_per_machine = max_mb_ram_per_machine - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureRegion, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureRegion): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_regions_list.py b/cloudendure/cloudendure_api/models/cloud_endure_regions_list.py deleted file mode 100644 index 8ddaa362e..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_regions_list.py +++ /dev/null @@ -1,114 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_region import ( - CloudEndureRegion, -) # noqa: F401,E501 - - -class CloudEndureRegionsList: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"items": "list[CloudEndureRegion]"} - - attribute_map = {"items": "items"} - - def __init__(self, items=None): # noqa: E501 - """CloudEndureRegionsList - a model defined in Swagger""" # noqa: E501 - self._items = None - self.discriminator = None - if items is not None: - self.items = items - - @property - def items(self): - """Gets the items of this CloudEndureRegionsList. # noqa: E501 - - - :return: The items of this CloudEndureRegionsList. # noqa: E501 - :rtype: list[CloudEndureRegion] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureRegionsList. - - - :param items: The items of this CloudEndureRegionsList. # noqa: E501 - :type: list[CloudEndureRegion] - """ - - self._items = items - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureRegionsList, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureRegionsList): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_replica.py b/cloudendure/cloudendure_api/models/cloud_endure_replica.py deleted file mode 100644 index 98f520e33..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_replica.py +++ /dev/null @@ -1,349 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureReplica: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "machine": "str", - "cloud_endure_creation_date_time": "datetime", - "name": "str", - "point_in_time": "str", - "machine_cloud_state": "str", - "public_ips": "list[str]", - "region_id": "str", - "id": "str", - "machine_cloud_id": "str", - } - - attribute_map = { - "machine": "machine", - "cloud_endure_creation_date_time": "cloudEndureCreationDateTime", - "name": "name", - "point_in_time": "pointInTime", - "machine_cloud_state": "machineCloudState", - "public_ips": "publicIps", - "region_id": "regionId", - "id": "id", - "machine_cloud_id": "machineCloudId", - } - - def __init__( - self, - machine=None, - cloud_endure_creation_date_time=None, - name=None, - point_in_time=None, - machine_cloud_state=None, - public_ips=None, - region_id=None, - id=None, - machine_cloud_id=None, - ): # noqa: E501 - """CloudEndureReplica - a model defined in Swagger""" # noqa: E501 - self._machine = None - self._cloud_endure_creation_date_time = None - self._name = None - self._point_in_time = None - self._machine_cloud_state = None - self._public_ips = None - self._region_id = None - self._id = None - self._machine_cloud_id = None - self.discriminator = None - if machine is not None: - self.machine = machine - if cloud_endure_creation_date_time is not None: - self.cloud_endure_creation_date_time = cloud_endure_creation_date_time - if name is not None: - self.name = name - if point_in_time is not None: - self.point_in_time = point_in_time - if machine_cloud_state is not None: - self.machine_cloud_state = machine_cloud_state - if public_ips is not None: - self.public_ips = public_ips - if region_id is not None: - self.region_id = region_id - if id is not None: - self.id = id - if machine_cloud_id is not None: - self.machine_cloud_id = machine_cloud_id - - @property - def machine(self): - """Gets the machine of this CloudEndureReplica. # noqa: E501 - - The ID of the source machine for this target machine. # noqa: E501 - - :return: The machine of this CloudEndureReplica. # noqa: E501 - :rtype: str - """ - return self._machine - - @machine.setter - def machine(self, machine): - """Sets the machine of this CloudEndureReplica. - - The ID of the source machine for this target machine. # noqa: E501 - - :param machine: The machine of this CloudEndureReplica. # noqa: E501 - :type: str - """ - - self._machine = machine - - @property - def cloud_endure_creation_date_time(self): - """Gets the cloud_endure_creation_date_time of this CloudEndureReplica. # noqa: E501 - - Timestamp for launching this target machine. # noqa: E501 - - :return: The cloud_endure_creation_date_time of this CloudEndureReplica. # noqa: E501 - :rtype: datetime - """ - return self._cloud_endure_creation_date_time - - @cloud_endure_creation_date_time.setter - def cloud_endure_creation_date_time(self, cloud_endure_creation_date_time): - """Sets the cloud_endure_creation_date_time of this CloudEndureReplica. - - Timestamp for launching this target machine. # noqa: E501 - - :param cloud_endure_creation_date_time: The cloud_endure_creation_date_time of this CloudEndureReplica. # noqa: E501 - :type: datetime - """ - - self._cloud_endure_creation_date_time = cloud_endure_creation_date_time - - @property - def name(self): - """Gets the name of this CloudEndureReplica. # noqa: E501 - - Target machine name in the target environment. # noqa: E501 - - :return: The name of this CloudEndureReplica. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this CloudEndureReplica. - - Target machine name in the target environment. # noqa: E501 - - :param name: The name of this CloudEndureReplica. # noqa: E501 - :type: str - """ - - self._name = name - - @property - def point_in_time(self): - """Gets the point_in_time of this CloudEndureReplica. # noqa: E501 - - The ID of the pointInTime object from which this target machine was created. # noqa: E501 - - :return: The point_in_time of this CloudEndureReplica. # noqa: E501 - :rtype: str - """ - return self._point_in_time - - @point_in_time.setter - def point_in_time(self, point_in_time): - """Sets the point_in_time of this CloudEndureReplica. - - The ID of the pointInTime object from which this target machine was created. # noqa: E501 - - :param point_in_time: The point_in_time of this CloudEndureReplica. # noqa: E501 - :type: str - """ - - self._point_in_time = point_in_time - - @property - def machine_cloud_state(self): - """Gets the machine_cloud_state of this CloudEndureReplica. # noqa: E501 - - Target machine state in the target environment. # noqa: E501 - - :return: The machine_cloud_state of this CloudEndureReplica. # noqa: E501 - :rtype: str - """ - return self._machine_cloud_state - - @machine_cloud_state.setter - def machine_cloud_state(self, machine_cloud_state): - """Sets the machine_cloud_state of this CloudEndureReplica. - - Target machine state in the target environment. # noqa: E501 - - :param machine_cloud_state: The machine_cloud_state of this CloudEndureReplica. # noqa: E501 - :type: str - """ - - self._machine_cloud_state = machine_cloud_state - - @property - def public_ips(self): - """Gets the public_ips of this CloudEndureReplica. # noqa: E501 - - Static (non-ephemral) public IPs. On some clouds this also includes ephemeral IPs. # noqa: E501 - - :return: The public_ips of this CloudEndureReplica. # noqa: E501 - :rtype: list[str] - """ - return self._public_ips - - @public_ips.setter - def public_ips(self, public_ips): - """Sets the public_ips of this CloudEndureReplica. - - Static (non-ephemral) public IPs. On some clouds this also includes ephemeral IPs. # noqa: E501 - - :param public_ips: The public_ips of this CloudEndureReplica. # noqa: E501 - :type: list[str] - """ - - self._public_ips = public_ips - - @property - def region_id(self): - """Gets the region_id of this CloudEndureReplica. # noqa: E501 - - The ID of the region where this target machine has been launched. # noqa: E501 - - :return: The region_id of this CloudEndureReplica. # noqa: E501 - :rtype: str - """ - return self._region_id - - @region_id.setter - def region_id(self, region_id): - """Sets the region_id of this CloudEndureReplica. - - The ID of the region where this target machine has been launched. # noqa: E501 - - :param region_id: The region_id of this CloudEndureReplica. # noqa: E501 - :type: str - """ - - self._region_id = region_id - - @property - def id(self): - """Gets the id of this CloudEndureReplica. # noqa: E501 - - - :return: The id of this CloudEndureReplica. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this CloudEndureReplica. - - - :param id: The id of this CloudEndureReplica. # noqa: E501 - :type: str - """ - - self._id = id - - @property - def machine_cloud_id(self): - """Gets the machine_cloud_id of this CloudEndureReplica. # noqa: E501 - - Target machine ID in the target environment. # noqa: E501 - - :return: The machine_cloud_id of this CloudEndureReplica. # noqa: E501 - :rtype: str - """ - return self._machine_cloud_id - - @machine_cloud_id.setter - def machine_cloud_id(self, machine_cloud_id): - """Sets the machine_cloud_id of this CloudEndureReplica. - - Target machine ID in the target environment. # noqa: E501 - - :param machine_cloud_id: The machine_cloud_id of this CloudEndureReplica. # noqa: E501 - :type: str - """ - - self._machine_cloud_id = machine_cloud_id - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureReplica, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureReplica): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_replication_configuration.py b/cloudendure/cloudendure_api/models/cloud_endure_replication_configuration.py deleted file mode 100644 index 233e5481e..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_replication_configuration.py +++ /dev/null @@ -1,660 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureReplicationConfiguration: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "volume_encryption_key": "str", - "replication_tags": "list[object]", - "subnet_host_project": "str", - "replication_server_type": "str", - "compute_location_id": "str", - "cloud_credentials": "str", - "subnet_id": "str", - "logical_location_id": "str", - "bandwidth_throttling": "int", - "storage_location_id": "str", - "use_dedicated_server": "bool", - "zone": "str", - "replicator_security_group_i_ds": "list[str]", - "use_private_ip": "bool", - "region": "str", - "id": "str", - "proxy_url": "str", - "volume_encryption_allowed": "bool", - "archiving_enabled": "bool", - "object_storage_location": "str", - } - - attribute_map = { - "volume_encryption_key": "volumeEncryptionKey", - "replication_tags": "replicationTags", - "subnet_host_project": "subnetHostProject", - "replication_server_type": "replicationServerType", - "compute_location_id": "computeLocationId", - "cloud_credentials": "cloudCredentials", - "subnet_id": "subnetId", - "logical_location_id": "logicalLocationId", - "bandwidth_throttling": "bandwidthThrottling", - "storage_location_id": "storageLocationId", - "use_dedicated_server": "useDedicatedServer", - "zone": "zone", - "replicator_security_group_i_ds": "replicatorSecurityGroupIDs", - "use_private_ip": "usePrivateIp", - "region": "region", - "id": "id", - "proxy_url": "proxyUrl", - "volume_encryption_allowed": "volumeEncryptionAllowed", - "archiving_enabled": "archivingEnabled", - "object_storage_location": "objectStorageLocation", - } - - def __init__( - self, - volume_encryption_key=None, - replication_tags=None, - subnet_host_project=None, - replication_server_type=None, - compute_location_id=None, - cloud_credentials=None, - subnet_id=None, - logical_location_id=None, - bandwidth_throttling=None, - storage_location_id=None, - use_dedicated_server=None, - zone=None, - replicator_security_group_i_ds=None, - use_private_ip=None, - region=None, - id=None, - proxy_url=None, - volume_encryption_allowed=None, - archiving_enabled=None, - object_storage_location=None, - ): # noqa: E501 - """CloudEndureReplicationConfiguration - a model defined in Swagger""" # noqa: E501 - self._volume_encryption_key = None - self._replication_tags = None - self._subnet_host_project = None - self._replication_server_type = None - self._compute_location_id = None - self._cloud_credentials = None - self._subnet_id = None - self._logical_location_id = None - self._bandwidth_throttling = None - self._storage_location_id = None - self._use_dedicated_server = None - self._zone = None - self._replicator_security_group_i_ds = None - self._use_private_ip = None - self._region = None - self._id = None - self._proxy_url = None - self._volume_encryption_allowed = None - self._archiving_enabled = None - self._object_storage_location = None - self.discriminator = None - if volume_encryption_key is not None: - self.volume_encryption_key = volume_encryption_key - if replication_tags is not None: - self.replication_tags = replication_tags - if subnet_host_project is not None: - self.subnet_host_project = subnet_host_project - if replication_server_type is not None: - self.replication_server_type = replication_server_type - if compute_location_id is not None: - self.compute_location_id = compute_location_id - if cloud_credentials is not None: - self.cloud_credentials = cloud_credentials - if subnet_id is not None: - self.subnet_id = subnet_id - if logical_location_id is not None: - self.logical_location_id = logical_location_id - if bandwidth_throttling is not None: - self.bandwidth_throttling = bandwidth_throttling - if storage_location_id is not None: - self.storage_location_id = storage_location_id - if use_dedicated_server is not None: - self.use_dedicated_server = use_dedicated_server - if zone is not None: - self.zone = zone - if replicator_security_group_i_ds is not None: - self.replicator_security_group_i_ds = replicator_security_group_i_ds - if use_private_ip is not None: - self.use_private_ip = use_private_ip - if region is not None: - self.region = region - if id is not None: - self.id = id - if proxy_url is not None: - self.proxy_url = proxy_url - if volume_encryption_allowed is not None: - self.volume_encryption_allowed = volume_encryption_allowed - if archiving_enabled is not None: - self.archiving_enabled = archiving_enabled - if object_storage_location is not None: - self.object_storage_location = object_storage_location - - @property - def volume_encryption_key(self): - """Gets the volume_encryption_key of this CloudEndureReplicationConfiguration. # noqa: E501 - - AWS only. ARN to private key for Volume Encryption. Possible values can be fetched from the Region object. # noqa: E501 - - :return: The volume_encryption_key of this CloudEndureReplicationConfiguration. # noqa: E501 - :rtype: str - """ - return self._volume_encryption_key - - @volume_encryption_key.setter - def volume_encryption_key(self, volume_encryption_key): - """Sets the volume_encryption_key of this CloudEndureReplicationConfiguration. - - AWS only. ARN to private key for Volume Encryption. Possible values can be fetched from the Region object. # noqa: E501 - - :param volume_encryption_key: The volume_encryption_key of this CloudEndureReplicationConfiguration. # noqa: E501 - :type: str - """ - - self._volume_encryption_key = volume_encryption_key - - @property - def replication_tags(self): - """Gets the replication_tags of this CloudEndureReplicationConfiguration. # noqa: E501 - - AWS only. Tags that will be applied to every cloud resource created in the CloudEndure Staging Area. # noqa: E501 - - :return: The replication_tags of this CloudEndureReplicationConfiguration. # noqa: E501 - :rtype: list[object] - """ - return self._replication_tags - - @replication_tags.setter - def replication_tags(self, replication_tags): - """Sets the replication_tags of this CloudEndureReplicationConfiguration. - - AWS only. Tags that will be applied to every cloud resource created in the CloudEndure Staging Area. # noqa: E501 - - :param replication_tags: The replication_tags of this CloudEndureReplicationConfiguration. # noqa: E501 - :type: list[object] - """ - - self._replication_tags = replication_tags - - @property - def subnet_host_project(self): - """Gets the subnet_host_project of this CloudEndureReplicationConfiguration. # noqa: E501 - - GCP only. Host project of cross project network subnet. # noqa: E501 - - :return: The subnet_host_project of this CloudEndureReplicationConfiguration. # noqa: E501 - :rtype: str - """ - return self._subnet_host_project - - @subnet_host_project.setter - def subnet_host_project(self, subnet_host_project): - """Sets the subnet_host_project of this CloudEndureReplicationConfiguration. - - GCP only. Host project of cross project network subnet. # noqa: E501 - - :param subnet_host_project: The subnet_host_project of this CloudEndureReplicationConfiguration. # noqa: E501 - :type: str - """ - - self._subnet_host_project = subnet_host_project - - @property - def replication_server_type(self): - """Gets the replication_server_type of this CloudEndureReplicationConfiguration. # noqa: E501 - - - :return: The replication_server_type of this CloudEndureReplicationConfiguration. # noqa: E501 - :rtype: str - """ - return self._replication_server_type - - @replication_server_type.setter - def replication_server_type(self, replication_server_type): - """Sets the replication_server_type of this CloudEndureReplicationConfiguration. - - - :param replication_server_type: The replication_server_type of this CloudEndureReplicationConfiguration. # noqa: E501 - :type: str - """ - - self._replication_server_type = replication_server_type - - @property - def compute_location_id(self): - """Gets the compute_location_id of this CloudEndureReplicationConfiguration. # noqa: E501 - - todo vcenter only # noqa: E501 - - :return: The compute_location_id of this CloudEndureReplicationConfiguration. # noqa: E501 - :rtype: str - """ - return self._compute_location_id - - @compute_location_id.setter - def compute_location_id(self, compute_location_id): - """Sets the compute_location_id of this CloudEndureReplicationConfiguration. - - todo vcenter only # noqa: E501 - - :param compute_location_id: The compute_location_id of this CloudEndureReplicationConfiguration. # noqa: E501 - :type: str - """ - - self._compute_location_id = compute_location_id - - @property - def cloud_credentials(self): - """Gets the cloud_credentials of this CloudEndureReplicationConfiguration. # noqa: E501 - - The ID for the cloudCredentials object containing the credentials to be used for accessing the target cloud. # noqa: E501 - - :return: The cloud_credentials of this CloudEndureReplicationConfiguration. # noqa: E501 - :rtype: str - """ - return self._cloud_credentials - - @cloud_credentials.setter - def cloud_credentials(self, cloud_credentials): - """Sets the cloud_credentials of this CloudEndureReplicationConfiguration. - - The ID for the cloudCredentials object containing the credentials to be used for accessing the target cloud. # noqa: E501 - - :param cloud_credentials: The cloud_credentials of this CloudEndureReplicationConfiguration. # noqa: E501 - :type: str - """ - - self._cloud_credentials = cloud_credentials - - @property - def subnet_id(self): - """Gets the subnet_id of this CloudEndureReplicationConfiguration. # noqa: E501 - - Subnet where replication servers will be created. Possible values can be fetched from the Region object. # noqa: E501 - - :return: The subnet_id of this CloudEndureReplicationConfiguration. # noqa: E501 - :rtype: str - """ - return self._subnet_id - - @subnet_id.setter - def subnet_id(self, subnet_id): - """Sets the subnet_id of this CloudEndureReplicationConfiguration. - - Subnet where replication servers will be created. Possible values can be fetched from the Region object. # noqa: E501 - - :param subnet_id: The subnet_id of this CloudEndureReplicationConfiguration. # noqa: E501 - :type: str - """ - - self._subnet_id = subnet_id - - @property - def logical_location_id(self): - """Gets the logical_location_id of this CloudEndureReplicationConfiguration. # noqa: E501 - - vcenter = vmFolder # noqa: E501 - - :return: The logical_location_id of this CloudEndureReplicationConfiguration. # noqa: E501 - :rtype: str - """ - return self._logical_location_id - - @logical_location_id.setter - def logical_location_id(self, logical_location_id): - """Sets the logical_location_id of this CloudEndureReplicationConfiguration. - - vcenter = vmFolder # noqa: E501 - - :param logical_location_id: The logical_location_id of this CloudEndureReplicationConfiguration. # noqa: E501 - :type: str - """ - - self._logical_location_id = logical_location_id - - @property - def bandwidth_throttling(self): - """Gets the bandwidth_throttling of this CloudEndureReplicationConfiguration. # noqa: E501 - - Mbps to use for Data Replication (zero means no throttling). # noqa: E501 - - :return: The bandwidth_throttling of this CloudEndureReplicationConfiguration. # noqa: E501 - :rtype: int - """ - return self._bandwidth_throttling - - @bandwidth_throttling.setter - def bandwidth_throttling(self, bandwidth_throttling): - """Sets the bandwidth_throttling of this CloudEndureReplicationConfiguration. - - Mbps to use for Data Replication (zero means no throttling). # noqa: E501 - - :param bandwidth_throttling: The bandwidth_throttling of this CloudEndureReplicationConfiguration. # noqa: E501 - :type: int - """ - - self._bandwidth_throttling = bandwidth_throttling - - @property - def storage_location_id(self): - """Gets the storage_location_id of this CloudEndureReplicationConfiguration. # noqa: E501 - - @todo backend creates cloudendure bla bla storage account upon need (empty string). # noqa: E501 - - :return: The storage_location_id of this CloudEndureReplicationConfiguration. # noqa: E501 - :rtype: str - """ - return self._storage_location_id - - @storage_location_id.setter - def storage_location_id(self, storage_location_id): - """Sets the storage_location_id of this CloudEndureReplicationConfiguration. - - @todo backend creates cloudendure bla bla storage account upon need (empty string). # noqa: E501 - - :param storage_location_id: The storage_location_id of this CloudEndureReplicationConfiguration. # noqa: E501 - :type: str - """ - - self._storage_location_id = storage_location_id - - @property - def use_dedicated_server(self): - """Gets the use_dedicated_server of this CloudEndureReplicationConfiguration. # noqa: E501 - - - :return: The use_dedicated_server of this CloudEndureReplicationConfiguration. # noqa: E501 - :rtype: bool - """ - return self._use_dedicated_server - - @use_dedicated_server.setter - def use_dedicated_server(self, use_dedicated_server): - """Sets the use_dedicated_server of this CloudEndureReplicationConfiguration. - - - :param use_dedicated_server: The use_dedicated_server of this CloudEndureReplicationConfiguration. # noqa: E501 - :type: bool - """ - - self._use_dedicated_server = use_dedicated_server - - @property - def zone(self): - """Gets the zone of this CloudEndureReplicationConfiguration. # noqa: E501 - - Relevant for GCP and Azure ARM. The Zone to replicate into. # noqa: E501 - - :return: The zone of this CloudEndureReplicationConfiguration. # noqa: E501 - :rtype: str - """ - return self._zone - - @zone.setter - def zone(self, zone): - """Sets the zone of this CloudEndureReplicationConfiguration. - - Relevant for GCP and Azure ARM. The Zone to replicate into. # noqa: E501 - - :param zone: The zone of this CloudEndureReplicationConfiguration. # noqa: E501 - :type: str - """ - - self._zone = zone - - @property - def replicator_security_group_i_ds(self): - """Gets the replicator_security_group_i_ds of this CloudEndureReplicationConfiguration. # noqa: E501 - - AWS only. The security groups that will be applied to the replication servers. Possible values can be fetched from the Region object. # noqa: E501 - - :return: The replicator_security_group_i_ds of this CloudEndureReplicationConfiguration. # noqa: E501 - :rtype: list[str] - """ - return self._replicator_security_group_i_ds - - @replicator_security_group_i_ds.setter - def replicator_security_group_i_ds(self, replicator_security_group_i_ds): - """Sets the replicator_security_group_i_ds of this CloudEndureReplicationConfiguration. - - AWS only. The security groups that will be applied to the replication servers. Possible values can be fetched from the Region object. # noqa: E501 - - :param replicator_security_group_i_ds: The replicator_security_group_i_ds of this CloudEndureReplicationConfiguration. # noqa: E501 - :type: list[str] - """ - - self._replicator_security_group_i_ds = replicator_security_group_i_ds - - @property - def use_private_ip(self): - """Gets the use_private_ip of this CloudEndureReplicationConfiguration. # noqa: E501 - - Should the CloudEndure agent access the replication server using its private IP address. # noqa: E501 - - :return: The use_private_ip of this CloudEndureReplicationConfiguration. # noqa: E501 - :rtype: bool - """ - return self._use_private_ip - - @use_private_ip.setter - def use_private_ip(self, use_private_ip): - """Sets the use_private_ip of this CloudEndureReplicationConfiguration. - - Should the CloudEndure agent access the replication server using its private IP address. # noqa: E501 - - :param use_private_ip: The use_private_ip of this CloudEndureReplicationConfiguration. # noqa: E501 - :type: bool - """ - - self._use_private_ip = use_private_ip - - @property - def region(self): - """Gets the region of this CloudEndureReplicationConfiguration. # noqa: E501 - - - :return: The region of this CloudEndureReplicationConfiguration. # noqa: E501 - :rtype: str - """ - return self._region - - @region.setter - def region(self, region): - """Sets the region of this CloudEndureReplicationConfiguration. - - - :param region: The region of this CloudEndureReplicationConfiguration. # noqa: E501 - :type: str - """ - - self._region = region - - @property - def id(self): - """Gets the id of this CloudEndureReplicationConfiguration. # noqa: E501 - - - :return: The id of this CloudEndureReplicationConfiguration. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this CloudEndureReplicationConfiguration. - - - :param id: The id of this CloudEndureReplicationConfiguration. # noqa: E501 - :type: str - """ - - self._id = id - - @property - def proxy_url(self): - """Gets the proxy_url of this CloudEndureReplicationConfiguration. # noqa: E501 - - The full URI for a proxy (schema, username, password, domain, port) if required for the CloudEndure agent. # noqa: E501 - - :return: The proxy_url of this CloudEndureReplicationConfiguration. # noqa: E501 - :rtype: str - """ - return self._proxy_url - - @proxy_url.setter - def proxy_url(self, proxy_url): - """Sets the proxy_url of this CloudEndureReplicationConfiguration. - - The full URI for a proxy (schema, username, password, domain, port) if required for the CloudEndure agent. # noqa: E501 - - :param proxy_url: The proxy_url of this CloudEndureReplicationConfiguration. # noqa: E501 - :type: str - """ - - self._proxy_url = proxy_url - - @property - def volume_encryption_allowed(self): - """Gets the volume_encryption_allowed of this CloudEndureReplicationConfiguration. # noqa: E501 - - todo # noqa: E501 - - :return: The volume_encryption_allowed of this CloudEndureReplicationConfiguration. # noqa: E501 - :rtype: bool - """ - return self._volume_encryption_allowed - - @volume_encryption_allowed.setter - def volume_encryption_allowed(self, volume_encryption_allowed): - """Sets the volume_encryption_allowed of this CloudEndureReplicationConfiguration. - - todo # noqa: E501 - - :param volume_encryption_allowed: The volume_encryption_allowed of this CloudEndureReplicationConfiguration. # noqa: E501 - :type: bool - """ - - self._volume_encryption_allowed = volume_encryption_allowed - - @property - def archiving_enabled(self): - """Gets the archiving_enabled of this CloudEndureReplicationConfiguration. # noqa: E501 - - - :return: The archiving_enabled of this CloudEndureReplicationConfiguration. # noqa: E501 - :rtype: bool - """ - return self._archiving_enabled - - @archiving_enabled.setter - def archiving_enabled(self, archiving_enabled): - """Sets the archiving_enabled of this CloudEndureReplicationConfiguration. - - - :param archiving_enabled: The archiving_enabled of this CloudEndureReplicationConfiguration. # noqa: E501 - :type: bool - """ - - self._archiving_enabled = archiving_enabled - - @property - def object_storage_location(self): - """Gets the object_storage_location of this CloudEndureReplicationConfiguration. # noqa: E501 - - bucket in aws # noqa: E501 - - :return: The object_storage_location of this CloudEndureReplicationConfiguration. # noqa: E501 - :rtype: str - """ - return self._object_storage_location - - @object_storage_location.setter - def object_storage_location(self, object_storage_location): - """Sets the object_storage_location of this CloudEndureReplicationConfiguration. - - bucket in aws # noqa: E501 - - :param object_storage_location: The object_storage_location of this CloudEndureReplicationConfiguration. # noqa: E501 - :type: str - """ - - self._object_storage_location = object_storage_location - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureReplicationConfiguration, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureReplicationConfiguration): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_replication_configuration_list.py b/cloudendure/cloudendure_api/models/cloud_endure_replication_configuration_list.py deleted file mode 100644 index 8b1d72bf0..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_replication_configuration_list.py +++ /dev/null @@ -1,114 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_replication_configuration import ( # noqa: F401,E501 - CloudEndureReplicationConfiguration, -) - - -class CloudEndureReplicationConfigurationList: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"items": "list[CloudEndureReplicationConfiguration]"} - - attribute_map = {"items": "items"} - - def __init__(self, items=None): # noqa: E501 - """CloudEndureReplicationConfigurationList - a model defined in Swagger""" # noqa: E501 - self._items = None - self.discriminator = None - if items is not None: - self.items = items - - @property - def items(self): - """Gets the items of this CloudEndureReplicationConfigurationList. # noqa: E501 - - - :return: The items of this CloudEndureReplicationConfigurationList. # noqa: E501 - :rtype: list[CloudEndureReplicationConfiguration] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureReplicationConfigurationList. - - - :param items: The items of this CloudEndureReplicationConfigurationList. # noqa: E501 - :type: list[CloudEndureReplicationConfiguration] - """ - - self._items = items - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureReplicationConfigurationList, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureReplicationConfigurationList): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_replication_server_config.py b/cloudendure/cloudendure_api/models/cloud_endure_replication_server_config.py deleted file mode 100644 index 94ab05f06..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_replication_server_config.py +++ /dev/null @@ -1,110 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureReplicationServerConfig: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"volumes": "list[object]"} - - attribute_map = {"volumes": "volumes"} - - def __init__(self, volumes=None): # noqa: E501 - """CloudEndureReplicationServerConfig - a model defined in Swagger""" # noqa: E501 - self._volumes = None - self.discriminator = None - if volumes is not None: - self.volumes = volumes - - @property - def volumes(self): - """Gets the volumes of this CloudEndureReplicationServerConfig. # noqa: E501 - - - :return: The volumes of this CloudEndureReplicationServerConfig. # noqa: E501 - :rtype: list[object] - """ - return self._volumes - - @volumes.setter - def volumes(self, volumes): - """Sets the volumes of this CloudEndureReplicationServerConfig. - - - :param volumes: The volumes of this CloudEndureReplicationServerConfig. # noqa: E501 - :type: list[object] - """ - - self._volumes = volumes - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureReplicationServerConfig, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureReplicationServerConfig): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_restore_files_parameters.py b/cloudendure/cloudendure_api/models/cloud_endure_restore_files_parameters.py deleted file mode 100644 index cc5c900fe..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_restore_files_parameters.py +++ /dev/null @@ -1,114 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_machine_and_path_and_point_in_time import ( # noqa: F401,E501 - CloudEndureMachineAndPathAndPointInTime, -) - - -class CloudEndureRestoreFilesParameters: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"items": "list[CloudEndureMachineAndPathAndPointInTime]"} - - attribute_map = {"items": "items"} - - def __init__(self, items=None): # noqa: E501 - """CloudEndureRestoreFilesParameters - a model defined in Swagger""" # noqa: E501 - self._items = None - self.discriminator = None - if items is not None: - self.items = items - - @property - def items(self): - """Gets the items of this CloudEndureRestoreFilesParameters. # noqa: E501 - - - :return: The items of this CloudEndureRestoreFilesParameters. # noqa: E501 - :rtype: list[CloudEndureMachineAndPathAndPointInTime] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureRestoreFilesParameters. - - - :param items: The items of this CloudEndureRestoreFilesParameters. # noqa: E501 - :type: list[CloudEndureMachineAndPathAndPointInTime] - """ - - self._items = items - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureRestoreFilesParameters, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureRestoreFilesParameters): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_saml_settings.py b/cloudendure/cloudendure_api/models/cloud_endure_saml_settings.py deleted file mode 100644 index 7a3893676..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_saml_settings.py +++ /dev/null @@ -1,171 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureSamlSettings: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "identity_provider_certificate": "str", - "identity_provider_url": "str", - "identity_provider_id": "str", - } - - attribute_map = { - "identity_provider_certificate": "identityProviderCertificate", - "identity_provider_url": "identityProviderUrl", - "identity_provider_id": "identityProviderID", - } - - def __init__( - self, - identity_provider_certificate=None, - identity_provider_url=None, - identity_provider_id=None, - ): # noqa: E501 - """CloudEndureSamlSettings - a model defined in Swagger""" # noqa: E501 - self._identity_provider_certificate = None - self._identity_provider_url = None - self._identity_provider_id = None - self.discriminator = None - if identity_provider_certificate is not None: - self.identity_provider_certificate = identity_provider_certificate - if identity_provider_url is not None: - self.identity_provider_url = identity_provider_url - if identity_provider_id is not None: - self.identity_provider_id = identity_provider_id - - @property - def identity_provider_certificate(self): - """Gets the identity_provider_certificate of this CloudEndureSamlSettings. # noqa: E501 - - - :return: The identity_provider_certificate of this CloudEndureSamlSettings. # noqa: E501 - :rtype: str - """ - return self._identity_provider_certificate - - @identity_provider_certificate.setter - def identity_provider_certificate(self, identity_provider_certificate): - """Sets the identity_provider_certificate of this CloudEndureSamlSettings. - - - :param identity_provider_certificate: The identity_provider_certificate of this CloudEndureSamlSettings. # noqa: E501 - :type: str - """ - - self._identity_provider_certificate = identity_provider_certificate - - @property - def identity_provider_url(self): - """Gets the identity_provider_url of this CloudEndureSamlSettings. # noqa: E501 - - - :return: The identity_provider_url of this CloudEndureSamlSettings. # noqa: E501 - :rtype: str - """ - return self._identity_provider_url - - @identity_provider_url.setter - def identity_provider_url(self, identity_provider_url): - """Sets the identity_provider_url of this CloudEndureSamlSettings. - - - :param identity_provider_url: The identity_provider_url of this CloudEndureSamlSettings. # noqa: E501 - :type: str - """ - - self._identity_provider_url = identity_provider_url - - @property - def identity_provider_id(self): - """Gets the identity_provider_id of this CloudEndureSamlSettings. # noqa: E501 - - - :return: The identity_provider_id of this CloudEndureSamlSettings. # noqa: E501 - :rtype: str - """ - return self._identity_provider_id - - @identity_provider_id.setter - def identity_provider_id(self, identity_provider_id): - """Sets the identity_provider_id of this CloudEndureSamlSettings. - - - :param identity_provider_id: The identity_provider_id of this CloudEndureSamlSettings. # noqa: E501 - :type: str - """ - - self._identity_provider_id = identity_provider_id - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureSamlSettings, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureSamlSettings): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_security_group.py b/cloudendure/cloudendure_api/models/cloud_endure_security_group.py deleted file mode 100644 index e8549df37..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_security_group.py +++ /dev/null @@ -1,164 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureSecurityGroup: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"network_id": "str", "security_group_id": "str", "name": "str"} - - attribute_map = { - "network_id": "networkId", - "security_group_id": "securityGroupId", - "name": "name", - } - - def __init__( - self, network_id=None, security_group_id=None, name=None - ): # noqa: E501 - """CloudEndureSecurityGroup - a model defined in Swagger""" # noqa: E501 - self._network_id = None - self._security_group_id = None - self._name = None - self.discriminator = None - if network_id is not None: - self.network_id = network_id - if security_group_id is not None: - self.security_group_id = security_group_id - if name is not None: - self.name = name - - @property - def network_id(self): - """Gets the network_id of this CloudEndureSecurityGroup. # noqa: E501 - - - :return: The network_id of this CloudEndureSecurityGroup. # noqa: E501 - :rtype: str - """ - return self._network_id - - @network_id.setter - def network_id(self, network_id): - """Sets the network_id of this CloudEndureSecurityGroup. - - - :param network_id: The network_id of this CloudEndureSecurityGroup. # noqa: E501 - :type: str - """ - - self._network_id = network_id - - @property - def security_group_id(self): - """Gets the security_group_id of this CloudEndureSecurityGroup. # noqa: E501 - - - :return: The security_group_id of this CloudEndureSecurityGroup. # noqa: E501 - :rtype: str - """ - return self._security_group_id - - @security_group_id.setter - def security_group_id(self, security_group_id): - """Sets the security_group_id of this CloudEndureSecurityGroup. - - - :param security_group_id: The security_group_id of this CloudEndureSecurityGroup. # noqa: E501 - :type: str - """ - - self._security_group_id = security_group_id - - @property - def name(self): - """Gets the name of this CloudEndureSecurityGroup. # noqa: E501 - - - :return: The name of this CloudEndureSecurityGroup. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this CloudEndureSecurityGroup. - - - :param name: The name of this CloudEndureSecurityGroup. # noqa: E501 - :type: str - """ - - self._name = name - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureSecurityGroup, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureSecurityGroup): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_storage_location.py b/cloudendure/cloudendure_api/models/cloud_endure_storage_location.py deleted file mode 100644 index 79e012d7b..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_storage_location.py +++ /dev/null @@ -1,134 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureStorageLocation: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"location_id": "str", "name": "str"} - - attribute_map = {"location_id": "locationId", "name": "name"} - - def __init__(self, location_id=None, name=None): # noqa: E501 - """CloudEndureStorageLocation - a model defined in Swagger""" # noqa: E501 - self._location_id = None - self._name = None - self.discriminator = None - if location_id is not None: - self.location_id = location_id - if name is not None: - self.name = name - - @property - def location_id(self): - """Gets the location_id of this CloudEndureStorageLocation. # noqa: E501 - - - :return: The location_id of this CloudEndureStorageLocation. # noqa: E501 - :rtype: str - """ - return self._location_id - - @location_id.setter - def location_id(self, location_id): - """Sets the location_id of this CloudEndureStorageLocation. - - - :param location_id: The location_id of this CloudEndureStorageLocation. # noqa: E501 - :type: str - """ - - self._location_id = location_id - - @property - def name(self): - """Gets the name of this CloudEndureStorageLocation. # noqa: E501 - - - :return: The name of this CloudEndureStorageLocation. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this CloudEndureStorageLocation. - - - :param name: The name of this CloudEndureStorageLocation. # noqa: E501 - :type: str - """ - - self._name = name - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureStorageLocation, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureStorageLocation): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_subnet.py b/cloudendure/cloudendure_api/models/cloud_endure_subnet.py deleted file mode 100644 index 204013057..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_subnet.py +++ /dev/null @@ -1,158 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureSubnet: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"subnet_id": "str", "network_id": "str", "name": "str"} - - attribute_map = {"subnet_id": "subnetId", "network_id": "networkId", "name": "name"} - - def __init__(self, subnet_id=None, network_id=None, name=None): # noqa: E501 - """CloudEndureSubnet - a model defined in Swagger""" # noqa: E501 - self._subnet_id = None - self._network_id = None - self._name = None - self.discriminator = None - if subnet_id is not None: - self.subnet_id = subnet_id - if network_id is not None: - self.network_id = network_id - if name is not None: - self.name = name - - @property - def subnet_id(self): - """Gets the subnet_id of this CloudEndureSubnet. # noqa: E501 - - - :return: The subnet_id of this CloudEndureSubnet. # noqa: E501 - :rtype: str - """ - return self._subnet_id - - @subnet_id.setter - def subnet_id(self, subnet_id): - """Sets the subnet_id of this CloudEndureSubnet. - - - :param subnet_id: The subnet_id of this CloudEndureSubnet. # noqa: E501 - :type: str - """ - - self._subnet_id = subnet_id - - @property - def network_id(self): - """Gets the network_id of this CloudEndureSubnet. # noqa: E501 - - - :return: The network_id of this CloudEndureSubnet. # noqa: E501 - :rtype: str - """ - return self._network_id - - @network_id.setter - def network_id(self, network_id): - """Sets the network_id of this CloudEndureSubnet. - - - :param network_id: The network_id of this CloudEndureSubnet. # noqa: E501 - :type: str - """ - - self._network_id = network_id - - @property - def name(self): - """Gets the name of this CloudEndureSubnet. # noqa: E501 - - - :return: The name of this CloudEndureSubnet. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this CloudEndureSubnet. - - - :param name: The name of this CloudEndureSubnet. # noqa: E501 - :type: str - """ - - self._name = name - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureSubnet, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureSubnet): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_time.py b/cloudendure/cloudendure_api/models/cloud_endure_time.py deleted file mode 100644 index 854cf9700..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_time.py +++ /dev/null @@ -1,110 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureTime: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"date_time": "datetime"} - - attribute_map = {"date_time": "dateTime"} - - def __init__(self, date_time=None): # noqa: E501 - """CloudEndureTime - a model defined in Swagger""" # noqa: E501 - self._date_time = None - self.discriminator = None - if date_time is not None: - self.date_time = date_time - - @property - def date_time(self): - """Gets the date_time of this CloudEndureTime. # noqa: E501 - - - :return: The date_time of this CloudEndureTime. # noqa: E501 - :rtype: datetime - """ - return self._date_time - - @date_time.setter - def date_time(self, date_time): - """Sets the date_time of this CloudEndureTime. - - - :param date_time: The date_time of this CloudEndureTime. # noqa: E501 - :type: datetime - """ - - self._date_time = date_time - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureTime, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureTime): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_updateable_scripts.py b/cloudendure/cloudendure_api/models/cloud_endure_updateable_scripts.py deleted file mode 100644 index 19572f0b5..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_updateable_scripts.py +++ /dev/null @@ -1,134 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureUpdateableScripts: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"result": "object", "error": "str"} - - attribute_map = {"result": "result", "error": "error"} - - def __init__(self, result=None, error=None): # noqa: E501 - """CloudEndureUpdateableScripts - a model defined in Swagger""" # noqa: E501 - self._result = None - self._error = None - self.discriminator = None - if result is not None: - self.result = result - if error is not None: - self.error = error - - @property - def result(self): - """Gets the result of this CloudEndureUpdateableScripts. # noqa: E501 - - - :return: The result of this CloudEndureUpdateableScripts. # noqa: E501 - :rtype: object - """ - return self._result - - @result.setter - def result(self, result): - """Sets the result of this CloudEndureUpdateableScripts. - - - :param result: The result of this CloudEndureUpdateableScripts. # noqa: E501 - :type: object - """ - - self._result = result - - @property - def error(self): - """Gets the error of this CloudEndureUpdateableScripts. # noqa: E501 - - - :return: The error of this CloudEndureUpdateableScripts. # noqa: E501 - :rtype: str - """ - return self._error - - @error.setter - def error(self, error): - """Sets the error of this CloudEndureUpdateableScripts. - - - :param error: The error of this CloudEndureUpdateableScripts. # noqa: E501 - :type: str - """ - - self._error = error - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureUpdateableScripts, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureUpdateableScripts): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_upgrade_counter_delay.py b/cloudendure/cloudendure_api/models/cloud_endure_upgrade_counter_delay.py deleted file mode 100644 index 3ae44b48d..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_upgrade_counter_delay.py +++ /dev/null @@ -1,110 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureUpgradeCounterDelay: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"sleep": "int"} - - attribute_map = {"sleep": "sleep"} - - def __init__(self, sleep=None): # noqa: E501 - """CloudEndureUpgradeCounterDelay - a model defined in Swagger""" # noqa: E501 - self._sleep = None - self.discriminator = None - if sleep is not None: - self.sleep = sleep - - @property - def sleep(self): - """Gets the sleep of this CloudEndureUpgradeCounterDelay. # noqa: E501 - - - :return: The sleep of this CloudEndureUpgradeCounterDelay. # noqa: E501 - :rtype: int - """ - return self._sleep - - @sleep.setter - def sleep(self, sleep): - """Sets the sleep of this CloudEndureUpgradeCounterDelay. - - - :param sleep: The sleep of this CloudEndureUpgradeCounterDelay. # noqa: E501 - :type: int - """ - - self._sleep = sleep - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureUpgradeCounterDelay, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureUpgradeCounterDelay): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_usage.py b/cloudendure/cloudendure_api/models/cloud_endure_usage.py deleted file mode 100644 index 059766892..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_usage.py +++ /dev/null @@ -1,198 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureUsage: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "start_of_use_date_time": "datetime", - "cloud_id": "str", - "name": "str", - "machine_id": "str", - } - - attribute_map = { - "start_of_use_date_time": "startOfUseDateTime", - "cloud_id": "cloudId", - "name": "name", - "machine_id": "machineId", - } - - def __init__( - self, start_of_use_date_time=None, cloud_id=None, name=None, machine_id=None - ): # noqa: E501 - """CloudEndureUsage - a model defined in Swagger""" # noqa: E501 - self._start_of_use_date_time = None - self._cloud_id = None - self._name = None - self._machine_id = None - self.discriminator = None - if start_of_use_date_time is not None: - self.start_of_use_date_time = start_of_use_date_time - if cloud_id is not None: - self.cloud_id = cloud_id - if name is not None: - self.name = name - if machine_id is not None: - self.machine_id = machine_id - - @property - def start_of_use_date_time(self): - """Gets the start_of_use_date_time of this CloudEndureUsage. # noqa: E501 - - - :return: The start_of_use_date_time of this CloudEndureUsage. # noqa: E501 - :rtype: datetime - """ - return self._start_of_use_date_time - - @start_of_use_date_time.setter - def start_of_use_date_time(self, start_of_use_date_time): - """Sets the start_of_use_date_time of this CloudEndureUsage. - - - :param start_of_use_date_time: The start_of_use_date_time of this CloudEndureUsage. # noqa: E501 - :type: datetime - """ - - self._start_of_use_date_time = start_of_use_date_time - - @property - def cloud_id(self): - """Gets the cloud_id of this CloudEndureUsage. # noqa: E501 - - The ID in the cloud # noqa: E501 - - :return: The cloud_id of this CloudEndureUsage. # noqa: E501 - :rtype: str - """ - return self._cloud_id - - @cloud_id.setter - def cloud_id(self, cloud_id): - """Sets the cloud_id of this CloudEndureUsage. - - The ID in the cloud # noqa: E501 - - :param cloud_id: The cloud_id of this CloudEndureUsage. # noqa: E501 - :type: str - """ - - self._cloud_id = cloud_id - - @property - def name(self): - """Gets the name of this CloudEndureUsage. # noqa: E501 - - The name of the machine. # noqa: E501 - - :return: The name of this CloudEndureUsage. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this CloudEndureUsage. - - The name of the machine. # noqa: E501 - - :param name: The name of this CloudEndureUsage. # noqa: E501 - :type: str - """ - - self._name = name - - @property - def machine_id(self): - """Gets the machine_id of this CloudEndureUsage. # noqa: E501 - - - :return: The machine_id of this CloudEndureUsage. # noqa: E501 - :rtype: str - """ - return self._machine_id - - @machine_id.setter - def machine_id(self, machine_id): - """Sets the machine_id of this CloudEndureUsage. - - - :param machine_id: The machine_id of this CloudEndureUsage. # noqa: E501 - :type: str - """ - - self._machine_id = machine_id - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureUsage, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureUsage): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_usage_list.py b/cloudendure/cloudendure_api/models/cloud_endure_usage_list.py deleted file mode 100644 index 2143eebc5..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_usage_list.py +++ /dev/null @@ -1,114 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_usage import ( - CloudEndureUsage, -) # noqa: F401,E501 - - -class CloudEndureUsageList: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"items": "list[CloudEndureUsage]"} - - attribute_map = {"items": "items"} - - def __init__(self, items=None): # noqa: E501 - """CloudEndureUsageList - a model defined in Swagger""" # noqa: E501 - self._items = None - self.discriminator = None - if items is not None: - self.items = items - - @property - def items(self): - """Gets the items of this CloudEndureUsageList. # noqa: E501 - - - :return: The items of this CloudEndureUsageList. # noqa: E501 - :rtype: list[CloudEndureUsage] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureUsageList. - - - :param items: The items of this CloudEndureUsageList. # noqa: E501 - :type: list[CloudEndureUsage] - """ - - self._items = items - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureUsageList, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureUsageList): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_user.py b/cloudendure/cloudendure_api/models/cloud_endure_user.py deleted file mode 100644 index 5265a72fc..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_user.py +++ /dev/null @@ -1,382 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureUser: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "username": "str", - "status": "str", - "account": "str", - "roles": "list[str]", - "settings": "object", - "api_token": "str", - "has_password": "bool", - "terms_accepted": "bool", - "id": "str", - "self_link": "str", - } - - attribute_map = { - "username": "username", - "status": "status", - "account": "account", - "roles": "roles", - "settings": "settings", - "api_token": "apiToken", - "has_password": "hasPassword", - "terms_accepted": "termsAccepted", - "id": "id", - "self_link": "selfLink", - } - - def __init__( - self, - username=None, - status=None, - account=None, - roles=None, - settings=None, - api_token=None, - has_password=None, - terms_accepted=None, - id=None, - self_link=None, - ): # noqa: E501 - """CloudEndureUser - a model defined in Swagger""" # noqa: E501 - self._username = None - self._status = None - self._account = None - self._roles = None - self._settings = None - self._api_token = None - self._has_password = None - self._terms_accepted = None - self._id = None - self._self_link = None - self.discriminator = None - if username is not None: - self.username = username - if status is not None: - self.status = status - if account is not None: - self.account = account - if roles is not None: - self.roles = roles - if settings is not None: - self.settings = settings - if api_token is not None: - self.api_token = api_token - if has_password is not None: - self.has_password = has_password - if terms_accepted is not None: - self.terms_accepted = terms_accepted - if id is not None: - self.id = id - if self_link is not None: - self.self_link = self_link - - @property - def username(self): - """Gets the username of this CloudEndureUser. # noqa: E501 - - - :return: The username of this CloudEndureUser. # noqa: E501 - :rtype: str - """ - return self._username - - @username.setter - def username(self, username): - """Sets the username of this CloudEndureUser. - - - :param username: The username of this CloudEndureUser. # noqa: E501 - :type: str - """ - - self._username = username - - @property - def status(self): - """Gets the status of this CloudEndureUser. # noqa: E501 - - - :return: The status of this CloudEndureUser. # noqa: E501 - :rtype: str - """ - return self._status - - @status.setter - def status(self, status): - """Sets the status of this CloudEndureUser. - - - :param status: The status of this CloudEndureUser. # noqa: E501 - :type: str - """ - allowed_values = ["PENDING", "CONFIRMED", "DELETED"] # noqa: E501 - if status not in allowed_values: - raise ValueError( - "Invalid value for `status` ({0}), must be one of {1}".format( # noqa: E501 - status, allowed_values - ) - ) - - self._status = status - - @property - def account(self): - """Gets the account of this CloudEndureUser. # noqa: E501 - - - :return: The account of this CloudEndureUser. # noqa: E501 - :rtype: str - """ - return self._account - - @account.setter - def account(self, account): - """Sets the account of this CloudEndureUser. - - - :param account: The account of this CloudEndureUser. # noqa: E501 - :type: str - """ - - self._account = account - - @property - def roles(self): - """Gets the roles of this CloudEndureUser. # noqa: E501 - - - :return: The roles of this CloudEndureUser. # noqa: E501 - :rtype: list[str] - """ - return self._roles - - @roles.setter - def roles(self, roles): - """Sets the roles of this CloudEndureUser. - - - :param roles: The roles of this CloudEndureUser. # noqa: E501 - :type: list[str] - """ - allowed_values = [ - "USER", - "ACCOUNT_ADMIN", - "ACCOUNT_OWNER", - "GLOBAL_READONLY", - ] # noqa: E501 - if not set(roles).issubset(set(allowed_values)): - raise ValueError( - "Invalid values for `roles` [{0}], must be a subset of [{1}]".format( # noqa: E501 - ", ".join(map(str, set(roles) - set(allowed_values))), # noqa: E501 - ", ".join(map(str, allowed_values)), - ) - ) - - self._roles = roles - - @property - def settings(self): - """Gets the settings of this CloudEndureUser. # noqa: E501 - - - :return: The settings of this CloudEndureUser. # noqa: E501 - :rtype: object - """ - return self._settings - - @settings.setter - def settings(self, settings): - """Sets the settings of this CloudEndureUser. - - - :param settings: The settings of this CloudEndureUser. # noqa: E501 - :type: object - """ - - self._settings = settings - - @property - def api_token(self): - """Gets the api_token of this CloudEndureUser. # noqa: E501 - - - :return: The api_token of this CloudEndureUser. # noqa: E501 - :rtype: str - """ - return self._api_token - - @api_token.setter - def api_token(self, api_token): - """Sets the api_token of this CloudEndureUser. - - - :param api_token: The api_token of this CloudEndureUser. # noqa: E501 - :type: str - """ - - self._api_token = api_token - - @property - def has_password(self): - """Gets the has_password of this CloudEndureUser. # noqa: E501 - - - :return: The has_password of this CloudEndureUser. # noqa: E501 - :rtype: bool - """ - return self._has_password - - @has_password.setter - def has_password(self, has_password): - """Sets the has_password of this CloudEndureUser. - - - :param has_password: The has_password of this CloudEndureUser. # noqa: E501 - :type: bool - """ - - self._has_password = has_password - - @property - def terms_accepted(self): - """Gets the terms_accepted of this CloudEndureUser. # noqa: E501 - - todo one-way; cannot be set at time of POST # noqa: E501 - - :return: The terms_accepted of this CloudEndureUser. # noqa: E501 - :rtype: bool - """ - return self._terms_accepted - - @terms_accepted.setter - def terms_accepted(self, terms_accepted): - """Sets the terms_accepted of this CloudEndureUser. - - todo one-way; cannot be set at time of POST # noqa: E501 - - :param terms_accepted: The terms_accepted of this CloudEndureUser. # noqa: E501 - :type: bool - """ - - self._terms_accepted = terms_accepted - - @property - def id(self): - """Gets the id of this CloudEndureUser. # noqa: E501 - - - :return: The id of this CloudEndureUser. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this CloudEndureUser. - - - :param id: The id of this CloudEndureUser. # noqa: E501 - :type: str - """ - - self._id = id - - @property - def self_link(self): - """Gets the self_link of this CloudEndureUser. # noqa: E501 - - - :return: The self_link of this CloudEndureUser. # noqa: E501 - :rtype: str - """ - return self._self_link - - @self_link.setter - def self_link(self, self_link): - """Sets the self_link of this CloudEndureUser. - - - :param self_link: The self_link of this CloudEndureUser. # noqa: E501 - :type: str - """ - - self._self_link = self_link - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureUser, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureUser): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_user_report.py b/cloudendure/cloudendure_api/models/cloud_endure_user_report.py deleted file mode 100644 index e13099bcc..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_user_report.py +++ /dev/null @@ -1,360 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureUserReport: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - "n_protected_machines": "int", - "project_name": "str", - "is_activated": "bool", - "n_license_usages": "int", - "gcp_machines_finance_data": "object", - "total_tested_or_cutover": "int", - "owner_name": "str", - "n_lagging_machines": "int", - "n_active_target_machines": "int", - "n_test_machines": "int", - } - - attribute_map = { - "n_protected_machines": "n_protected_machines", - "project_name": "project_name", - "is_activated": "is_activated", - "n_license_usages": "n_license_usages", - "gcp_machines_finance_data": "gcp_machines_finance_data", - "total_tested_or_cutover": "total_tested_or_cutover", - "owner_name": "owner_name", - "n_lagging_machines": "n_lagging_machines", - "n_active_target_machines": "n_active_target_machines", - "n_test_machines": "n_test_machines", - } - - def __init__( - self, - n_protected_machines=None, - project_name=None, - is_activated=None, - n_license_usages=None, - gcp_machines_finance_data=None, - total_tested_or_cutover=None, - owner_name=None, - n_lagging_machines=None, - n_active_target_machines=None, - n_test_machines=None, - ): # noqa: E501 - """CloudEndureUserReport - a model defined in Swagger""" # noqa: E501 - self._n_protected_machines = None - self._project_name = None - self._is_activated = None - self._n_license_usages = None - self._gcp_machines_finance_data = None - self._total_tested_or_cutover = None - self._owner_name = None - self._n_lagging_machines = None - self._n_active_target_machines = None - self._n_test_machines = None - self.discriminator = None - if n_protected_machines is not None: - self.n_protected_machines = n_protected_machines - if project_name is not None: - self.project_name = project_name - if is_activated is not None: - self.is_activated = is_activated - if n_license_usages is not None: - self.n_license_usages = n_license_usages - if gcp_machines_finance_data is not None: - self.gcp_machines_finance_data = gcp_machines_finance_data - if total_tested_or_cutover is not None: - self.total_tested_or_cutover = total_tested_or_cutover - if owner_name is not None: - self.owner_name = owner_name - if n_lagging_machines is not None: - self.n_lagging_machines = n_lagging_machines - if n_active_target_machines is not None: - self.n_active_target_machines = n_active_target_machines - if n_test_machines is not None: - self.n_test_machines = n_test_machines - - @property - def n_protected_machines(self): - """Gets the n_protected_machines of this CloudEndureUserReport. # noqa: E501 - - - :return: The n_protected_machines of this CloudEndureUserReport. # noqa: E501 - :rtype: int - """ - return self._n_protected_machines - - @n_protected_machines.setter - def n_protected_machines(self, n_protected_machines): - """Sets the n_protected_machines of this CloudEndureUserReport. - - - :param n_protected_machines: The n_protected_machines of this CloudEndureUserReport. # noqa: E501 - :type: int - """ - - self._n_protected_machines = n_protected_machines - - @property - def project_name(self): - """Gets the project_name of this CloudEndureUserReport. # noqa: E501 - - - :return: The project_name of this CloudEndureUserReport. # noqa: E501 - :rtype: str - """ - return self._project_name - - @project_name.setter - def project_name(self, project_name): - """Sets the project_name of this CloudEndureUserReport. - - - :param project_name: The project_name of this CloudEndureUserReport. # noqa: E501 - :type: str - """ - - self._project_name = project_name - - @property - def is_activated(self): - """Gets the is_activated of this CloudEndureUserReport. # noqa: E501 - - - :return: The is_activated of this CloudEndureUserReport. # noqa: E501 - :rtype: bool - """ - return self._is_activated - - @is_activated.setter - def is_activated(self, is_activated): - """Sets the is_activated of this CloudEndureUserReport. - - - :param is_activated: The is_activated of this CloudEndureUserReport. # noqa: E501 - :type: bool - """ - - self._is_activated = is_activated - - @property - def n_license_usages(self): - """Gets the n_license_usages of this CloudEndureUserReport. # noqa: E501 - - - :return: The n_license_usages of this CloudEndureUserReport. # noqa: E501 - :rtype: int - """ - return self._n_license_usages - - @n_license_usages.setter - def n_license_usages(self, n_license_usages): - """Sets the n_license_usages of this CloudEndureUserReport. - - - :param n_license_usages: The n_license_usages of this CloudEndureUserReport. # noqa: E501 - :type: int - """ - - self._n_license_usages = n_license_usages - - @property - def gcp_machines_finance_data(self): - """Gets the gcp_machines_finance_data of this CloudEndureUserReport. # noqa: E501 - - - :return: The gcp_machines_finance_data of this CloudEndureUserReport. # noqa: E501 - :rtype: object - """ - return self._gcp_machines_finance_data - - @gcp_machines_finance_data.setter - def gcp_machines_finance_data(self, gcp_machines_finance_data): - """Sets the gcp_machines_finance_data of this CloudEndureUserReport. - - - :param gcp_machines_finance_data: The gcp_machines_finance_data of this CloudEndureUserReport. # noqa: E501 - :type: object - """ - - self._gcp_machines_finance_data = gcp_machines_finance_data - - @property - def total_tested_or_cutover(self): - """Gets the total_tested_or_cutover of this CloudEndureUserReport. # noqa: E501 - - - :return: The total_tested_or_cutover of this CloudEndureUserReport. # noqa: E501 - :rtype: int - """ - return self._total_tested_or_cutover - - @total_tested_or_cutover.setter - def total_tested_or_cutover(self, total_tested_or_cutover): - """Sets the total_tested_or_cutover of this CloudEndureUserReport. - - - :param total_tested_or_cutover: The total_tested_or_cutover of this CloudEndureUserReport. # noqa: E501 - :type: int - """ - - self._total_tested_or_cutover = total_tested_or_cutover - - @property - def owner_name(self): - """Gets the owner_name of this CloudEndureUserReport. # noqa: E501 - - - :return: The owner_name of this CloudEndureUserReport. # noqa: E501 - :rtype: str - """ - return self._owner_name - - @owner_name.setter - def owner_name(self, owner_name): - """Sets the owner_name of this CloudEndureUserReport. - - - :param owner_name: The owner_name of this CloudEndureUserReport. # noqa: E501 - :type: str - """ - - self._owner_name = owner_name - - @property - def n_lagging_machines(self): - """Gets the n_lagging_machines of this CloudEndureUserReport. # noqa: E501 - - - :return: The n_lagging_machines of this CloudEndureUserReport. # noqa: E501 - :rtype: int - """ - return self._n_lagging_machines - - @n_lagging_machines.setter - def n_lagging_machines(self, n_lagging_machines): - """Sets the n_lagging_machines of this CloudEndureUserReport. - - - :param n_lagging_machines: The n_lagging_machines of this CloudEndureUserReport. # noqa: E501 - :type: int - """ - - self._n_lagging_machines = n_lagging_machines - - @property - def n_active_target_machines(self): - """Gets the n_active_target_machines of this CloudEndureUserReport. # noqa: E501 - - - :return: The n_active_target_machines of this CloudEndureUserReport. # noqa: E501 - :rtype: int - """ - return self._n_active_target_machines - - @n_active_target_machines.setter - def n_active_target_machines(self, n_active_target_machines): - """Sets the n_active_target_machines of this CloudEndureUserReport. - - - :param n_active_target_machines: The n_active_target_machines of this CloudEndureUserReport. # noqa: E501 - :type: int - """ - - self._n_active_target_machines = n_active_target_machines - - @property - def n_test_machines(self): - """Gets the n_test_machines of this CloudEndureUserReport. # noqa: E501 - - - :return: The n_test_machines of this CloudEndureUserReport. # noqa: E501 - :rtype: int - """ - return self._n_test_machines - - @n_test_machines.setter - def n_test_machines(self, n_test_machines): - """Sets the n_test_machines of this CloudEndureUserReport. - - - :param n_test_machines: The n_test_machines of this CloudEndureUserReport. # noqa: E501 - :type: int - """ - - self._n_test_machines = n_test_machines - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureUserReport, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureUserReport): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_user_reports.py b/cloudendure/cloudendure_api/models/cloud_endure_user_reports.py deleted file mode 100644 index 988a37460..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_user_reports.py +++ /dev/null @@ -1,114 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_user_report import ( - CloudEndureUserReport, -) # noqa: F401,E501 - - -class CloudEndureUserReports: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"items": "list[CloudEndureUserReport]"} - - attribute_map = {"items": "items"} - - def __init__(self, items=None): # noqa: E501 - """CloudEndureUserReports - a model defined in Swagger""" # noqa: E501 - self._items = None - self.discriminator = None - if items is not None: - self.items = items - - @property - def items(self): - """Gets the items of this CloudEndureUserReports. # noqa: E501 - - - :return: The items of this CloudEndureUserReports. # noqa: E501 - :rtype: list[CloudEndureUserReport] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureUserReports. - - - :param items: The items of this CloudEndureUserReports. # noqa: E501 - :type: list[CloudEndureUserReport] - """ - - self._items = items - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureUserReports, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureUserReports): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_users_and_roles.py b/cloudendure/cloudendure_api/models/cloud_endure_users_and_roles.py deleted file mode 100644 index 78eeca5e0..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_users_and_roles.py +++ /dev/null @@ -1,110 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureUsersAndRoles: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"items": "list[object]"} - - attribute_map = {"items": "items"} - - def __init__(self, items=None): # noqa: E501 - """CloudEndureUsersAndRoles - a model defined in Swagger""" # noqa: E501 - self._items = None - self.discriminator = None - if items is not None: - self.items = items - - @property - def items(self): - """Gets the items of this CloudEndureUsersAndRoles. # noqa: E501 - - - :return: The items of this CloudEndureUsersAndRoles. # noqa: E501 - :rtype: list[object] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureUsersAndRoles. - - - :param items: The items of this CloudEndureUsersAndRoles. # noqa: E501 - :type: list[object] - """ - - self._items = items - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureUsersAndRoles, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureUsersAndRoles): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_users_list.py b/cloudendure/cloudendure_api/models/cloud_endure_users_list.py deleted file mode 100644 index d3b24cf07..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_users_list.py +++ /dev/null @@ -1,114 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -from cloudendure.cloudendure_api.models.cloud_endure_user import ( - CloudEndureUser, -) # noqa: F401,E501 - - -class CloudEndureUsersList: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"items": "list[CloudEndureUser]"} - - attribute_map = {"items": "items"} - - def __init__(self, items=None): # noqa: E501 - """CloudEndureUsersList - a model defined in Swagger""" # noqa: E501 - self._items = None - self.discriminator = None - if items is not None: - self.items = items - - @property - def items(self): - """Gets the items of this CloudEndureUsersList. # noqa: E501 - - - :return: The items of this CloudEndureUsersList. # noqa: E501 - :rtype: list[CloudEndureUser] - """ - return self._items - - @items.setter - def items(self, items): - """Sets the items of this CloudEndureUsersList. - - - :param items: The items of this CloudEndureUsersList. # noqa: E501 - :type: list[CloudEndureUser] - """ - - self._items = items - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureUsersList, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureUsersList): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/models/cloud_endure_v_center_subnet.py b/cloudendure/cloudendure_api/models/cloud_endure_v_center_subnet.py deleted file mode 100644 index e6a8e88e7..000000000 --- a/cloudendure/cloudendure_api/models/cloud_endure_v_center_subnet.py +++ /dev/null @@ -1,134 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - - -class CloudEndureVCenterSubnet: - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = {"netmask": "str", "ip_address": "str"} - - attribute_map = {"netmask": "netmask", "ip_address": "ipAddress"} - - def __init__(self, netmask=None, ip_address=None): # noqa: E501 - """CloudEndureVCenterSubnet - a model defined in Swagger""" # noqa: E501 - self._netmask = None - self._ip_address = None - self.discriminator = None - if netmask is not None: - self.netmask = netmask - if ip_address is not None: - self.ip_address = ip_address - - @property - def netmask(self): - """Gets the netmask of this CloudEndureVCenterSubnet. # noqa: E501 - - - :return: The netmask of this CloudEndureVCenterSubnet. # noqa: E501 - :rtype: str - """ - return self._netmask - - @netmask.setter - def netmask(self, netmask): - """Sets the netmask of this CloudEndureVCenterSubnet. - - - :param netmask: The netmask of this CloudEndureVCenterSubnet. # noqa: E501 - :type: str - """ - - self._netmask = netmask - - @property - def ip_address(self): - """Gets the ip_address of this CloudEndureVCenterSubnet. # noqa: E501 - - - :return: The ip_address of this CloudEndureVCenterSubnet. # noqa: E501 - :rtype: str - """ - return self._ip_address - - @ip_address.setter - def ip_address(self, ip_address): - """Sets the ip_address of this CloudEndureVCenterSubnet. - - - :param ip_address: The ip_address of this CloudEndureVCenterSubnet. # noqa: E501 - :type: str - """ - - self._ip_address = ip_address - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list( - map(lambda x: x.to_dict() if hasattr(x, "to_dict") else x, value) - ) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict( - map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") - else item, - value.items(), - ) - ) - else: - result[attr] = value - if issubclass(CloudEndureVCenterSubnet, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, CloudEndureVCenterSubnet): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/cloudendure/cloudendure_api/test/test_authentication_api.py b/cloudendure/cloudendure_api/test/test_authentication_api.py deleted file mode 100644 index e2b6153cd..000000000 --- a/cloudendure/cloudendure_api/test/test_authentication_api.py +++ /dev/null @@ -1,37 +0,0 @@ -# coding: utf-8 -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException - -from ..api.authentication_api import AuthenticationApi # noqa: E501 - - -class TestAuthenticationApi(unittest.TestCase): - """AuthenticationApi unit test stubs""" - - def setUp(self): - self.api = AuthenticationApi() # noqa: E501 - - def tearDown(self): - pass - - def test_login_post(self): - """Test case for login_post - - Login # noqa: E501 - """ - pass - - def test_logout_post(self): - """Test case for logout_post - - Logout # noqa: E501 - """ - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_agent_next_replication_init_request.py b/cloudendure/cloudendure_api/test/test_cloud_endure_agent_next_replication_init_request.py deleted file mode 100644 index 45e8fcf24..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_agent_next_replication_init_request.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_agent_next_replication_init_request import ( # noqa: E501 - CloudEndureAgentNextReplicationInitRequest, -) - - -class TestCloudEndureAgentNextReplicationInitRequest(unittest.TestCase): - """CloudEndureAgentNextReplicationInitRequest unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureAgentNextReplicationInitRequest(self): - """Test CloudEndureAgentNextReplicationInitRequest""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_agent_next_replication_init_request.CloudEndureAgentNextReplicationInitRequest() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_all_project_features.py b/cloudendure/cloudendure_api/test/test_cloud_endure_all_project_features.py deleted file mode 100644 index b7e97c093..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_all_project_features.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_all_project_features import ( - CloudEndureAllProjectFeatures, -) # noqa: E501 - - -class TestCloudEndureAllProjectFeatures(unittest.TestCase): - """CloudEndureAllProjectFeatures unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureAllProjectFeatures(self): - """Test CloudEndureAllProjectFeatures""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_all_project_features.CloudEndureAllProjectFeatures() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_audit_log_changed_field.py b/cloudendure/cloudendure_api/test/test_cloud_endure_audit_log_changed_field.py deleted file mode 100644 index 5f09453d7..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_audit_log_changed_field.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_audit_log_changed_field import ( - CloudEndureAuditLogChangedField, -) # noqa: E501 - - -class TestCloudEndureAuditLogChangedField(unittest.TestCase): - """CloudEndureAuditLogChangedField unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureAuditLogChangedField(self): - """Test CloudEndureAuditLogChangedField""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_audit_log_changed_field.CloudEndureAuditLogChangedField() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_audit_log_entry.py b/cloudendure/cloudendure_api/test/test_cloud_endure_audit_log_entry.py deleted file mode 100644 index 02485c391..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_audit_log_entry.py +++ /dev/null @@ -1,39 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_audit_log_entry import CloudEndureAuditLogEntry # noqa: E501 - - -class TestCloudEndureAuditLogEntry(unittest.TestCase): - """CloudEndureAuditLogEntry unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureAuditLogEntry(self): - """Test CloudEndureAuditLogEntry""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_audit_log_entry.CloudEndureAuditLogEntry() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_bandwidth_throttling.py b/cloudendure/cloudendure_api/test/test_cloud_endure_bandwidth_throttling.py deleted file mode 100644 index ac084e3c9..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_bandwidth_throttling.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_bandwidth_throttling import ( - CloudEndureBandwidthThrottling, -) # noqa: E501 - - -class TestCloudEndureBandwidthThrottling(unittest.TestCase): - """CloudEndureBandwidthThrottling unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureBandwidthThrottling(self): - """Test CloudEndureBandwidthThrottling""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_bandwidth_throttling.CloudEndureBandwidthThrottling() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_blueprint_list.py b/cloudendure/cloudendure_api/test/test_cloud_endure_blueprint_list.py deleted file mode 100644 index 75f83cf1d..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_blueprint_list.py +++ /dev/null @@ -1,39 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_blueprint_list import CloudEndureBlueprintList # noqa: E501 - - -class TestCloudEndureBlueprintList(unittest.TestCase): - """CloudEndureBlueprintList unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureBlueprintList(self): - """Test CloudEndureBlueprintList""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_blueprint_list.CloudEndureBlueprintList() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_cloud_credentials.py b/cloudendure/cloudendure_api/test/test_cloud_endure_cloud_credentials.py deleted file mode 100644 index 287b50593..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_cloud_credentials.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_cloud_credentials import ( - CloudEndureCloudCredentials, -) # noqa: E501 - - -class TestCloudEndureCloudCredentials(unittest.TestCase): - """CloudEndureCloudCredentials unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureCloudCredentials(self): - """Test CloudEndureCloudCredentials""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_cloud_credentials.CloudEndureCloudCredentials() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_cloud_credentials_list.py b/cloudendure/cloudendure_api/test/test_cloud_endure_cloud_credentials_list.py deleted file mode 100644 index 32b6fe7f0..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_cloud_credentials_list.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_cloud_credentials_list import ( - CloudEndureCloudCredentialsList, -) # noqa: E501 - - -class TestCloudEndureCloudCredentialsList(unittest.TestCase): - """CloudEndureCloudCredentialsList unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureCloudCredentialsList(self): - """Test CloudEndureCloudCredentialsList""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_cloud_credentials_list.CloudEndureCloudCredentialsList() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_cloud_credentials_request.py b/cloudendure/cloudendure_api/test/test_cloud_endure_cloud_credentials_request.py deleted file mode 100644 index c5f670462..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_cloud_credentials_request.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_cloud_credentials_request import ( - CloudEndureCloudCredentialsRequest, -) # noqa: E501 - - -class TestCloudEndureCloudCredentialsRequest(unittest.TestCase): - """CloudEndureCloudCredentialsRequest unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureCloudCredentialsRequest(self): - """Test CloudEndureCloudCredentialsRequest""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_cloud_credentials_request.CloudEndureCloudCredentialsRequest() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_clouds_list.py b/cloudendure/cloudendure_api/test/test_cloud_endure_clouds_list.py deleted file mode 100644 index e4cb6158d..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_clouds_list.py +++ /dev/null @@ -1,39 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_clouds_list import CloudEndureCloudsList # noqa: E501 - - -class TestCloudEndureCloudsList(unittest.TestCase): - """CloudEndureCloudsList unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureCloudsList(self): - """Test CloudEndureCloudsList""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_clouds_list.CloudEndureCloudsList() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_compute_location.py b/cloudendure/cloudendure_api/test/test_cloud_endure_compute_location.py deleted file mode 100644 index 42e0937cd..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_compute_location.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_compute_location import ( - CloudEndureComputeLocation, -) # noqa: E501 - - -class TestCloudEndureComputeLocation(unittest.TestCase): - """CloudEndureComputeLocation unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureComputeLocation(self): - """Test CloudEndureComputeLocation""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_compute_location.CloudEndureComputeLocation() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_configurations.py b/cloudendure/cloudendure_api/test/test_cloud_endure_configurations.py deleted file mode 100644 index a92ea619f..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_configurations.py +++ /dev/null @@ -1,39 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_configurations import CloudEndureConfigurations # noqa: E501 - - -class TestCloudEndureConfigurations(unittest.TestCase): - """CloudEndureConfigurations unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureConfigurations(self): - """Test CloudEndureConfigurations""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_configurations.CloudEndureConfigurations() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_configurations_list.py b/cloudendure/cloudendure_api/test/test_cloud_endure_configurations_list.py deleted file mode 100644 index af80029ee..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_configurations_list.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_configurations_list import ( - CloudEndureConfigurationsList, -) # noqa: E501 - - -class TestCloudEndureConfigurationsList(unittest.TestCase): - """CloudEndureConfigurationsList unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureConfigurationsList(self): - """Test CloudEndureConfigurationsList""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_configurations_list.CloudEndureConfigurationsList() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_extended_account_info.py b/cloudendure/cloudendure_api/test/test_cloud_endure_extended_account_info.py deleted file mode 100644 index a1ee9193a..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_extended_account_info.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_extended_account_info import ( - CloudEndureExtendedAccountInfo, -) # noqa: E501 - - -class TestCloudEndureExtendedAccountInfo(unittest.TestCase): - """CloudEndureExtendedAccountInfo unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureExtendedAccountInfo(self): - """Test CloudEndureExtendedAccountInfo""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_extended_account_info.CloudEndureExtendedAccountInfo() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_find_files_parameters.py b/cloudendure/cloudendure_api/test/test_cloud_endure_find_files_parameters.py deleted file mode 100644 index 39133d9c4..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_find_files_parameters.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_find_files_parameters import ( - CloudEndureFindFilesParameters, -) # noqa: E501 - - -class TestCloudEndureFindFilesParameters(unittest.TestCase): - """CloudEndureFindFilesParameters unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureFindFilesParameters(self): - """Test CloudEndureFindFilesParameters""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_find_files_parameters.CloudEndureFindFilesParameters() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_find_files_result.py b/cloudendure/cloudendure_api/test/test_cloud_endure_find_files_result.py deleted file mode 100644 index 9d65b1d47..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_find_files_result.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_find_files_result import ( - CloudEndureFindFilesResult, -) # noqa: E501 - - -class TestCloudEndureFindFilesResult(unittest.TestCase): - """CloudEndureFindFilesResult unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureFindFilesResult(self): - """Test CloudEndureFindFilesResult""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_find_files_result.CloudEndureFindFilesResult() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_find_files_result_pit.py b/cloudendure/cloudendure_api/test/test_cloud_endure_find_files_result_pit.py deleted file mode 100644 index 81c3ba11f..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_find_files_result_pit.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_find_files_result_pit import ( - CloudEndureFindFilesResultPit, -) # noqa: E501 - - -class TestCloudEndureFindFilesResultPit(unittest.TestCase): - """CloudEndureFindFilesResultPit unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureFindFilesResultPit(self): - """Test CloudEndureFindFilesResultPit""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_find_files_result_pit.CloudEndureFindFilesResultPit() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_find_files_results.py b/cloudendure/cloudendure_api/test/test_cloud_endure_find_files_results.py deleted file mode 100644 index 3a63fe515..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_find_files_results.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_find_files_results import ( - CloudEndureFindFilesResults, -) # noqa: E501 - - -class TestCloudEndureFindFilesResults(unittest.TestCase): - """CloudEndureFindFilesResults unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureFindFilesResults(self): - """Test CloudEndureFindFilesResults""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_find_files_results.CloudEndureFindFilesResults() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_identity_provider_redirect_response.py b/cloudendure/cloudendure_api/test/test_cloud_endure_identity_provider_redirect_response.py deleted file mode 100644 index 4be5bcf3c..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_identity_provider_redirect_response.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_identity_provider_redirect_response import ( # noqa: E501 - CloudEndureIdentityProviderRedirectResponse, -) - - -class TestCloudEndureIdentityProviderRedirectResponse(unittest.TestCase): - """CloudEndureIdentityProviderRedirectResponse unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureIdentityProviderRedirectResponse(self): - """Test CloudEndureIdentityProviderRedirectResponse""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_identity_provider_redirect_response.CloudEndureIdentityProviderRedirectResponse() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_initialization_step.py b/cloudendure/cloudendure_api/test/test_cloud_endure_initialization_step.py deleted file mode 100644 index b2de81c41..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_initialization_step.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_initialization_step import ( - CloudEndureInitializationStep, -) # noqa: E501 - - -class TestCloudEndureInitializationStep(unittest.TestCase): - """CloudEndureInitializationStep unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureInitializationStep(self): - """Test CloudEndureInitializationStep""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_initialization_step.CloudEndureInitializationStep() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_jobs_list.py b/cloudendure/cloudendure_api/test/test_cloud_endure_jobs_list.py deleted file mode 100644 index b48a927ad..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_jobs_list.py +++ /dev/null @@ -1,39 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_jobs_list import CloudEndureJobsList # noqa: E501 - - -class TestCloudEndureJobsList(unittest.TestCase): - """CloudEndureJobsList unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureJobsList(self): - """Test CloudEndureJobsList""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_jobs_list.CloudEndureJobsList() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_key_value_list.py b/cloudendure/cloudendure_api/test/test_cloud_endure_key_value_list.py deleted file mode 100644 index ffe2ec47f..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_key_value_list.py +++ /dev/null @@ -1,39 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_key_value_list import CloudEndureKeyValueList # noqa: E501 - - -class TestCloudEndureKeyValueList(unittest.TestCase): - """CloudEndureKeyValueList unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureKeyValueList(self): - """Test CloudEndureKeyValueList""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_key_value_list.CloudEndureKeyValueList() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_launch_machines_parameters.py b/cloudendure/cloudendure_api/test/test_cloud_endure_launch_machines_parameters.py deleted file mode 100644 index c26d1c8ee..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_launch_machines_parameters.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_launch_machines_parameters import ( - CloudEndureLaunchMachinesParameters, -) # noqa: E501 - - -class TestCloudEndureLaunchMachinesParameters(unittest.TestCase): - """CloudEndureLaunchMachinesParameters unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureLaunchMachinesParameters(self): - """Test CloudEndureLaunchMachinesParameters""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_launch_machines_parameters.CloudEndureLaunchMachinesParameters() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_license_features.py b/cloudendure/cloudendure_api/test/test_cloud_endure_license_features.py deleted file mode 100644 index a85ece95b..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_license_features.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_license_features import ( - CloudEndureLicenseFeatures, -) # noqa: E501 - - -class TestCloudEndureLicenseFeatures(unittest.TestCase): - """CloudEndureLicenseFeatures unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureLicenseFeatures(self): - """Test CloudEndureLicenseFeatures""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_license_features.CloudEndureLicenseFeatures() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_license_list.py b/cloudendure/cloudendure_api/test/test_cloud_endure_license_list.py deleted file mode 100644 index 90a50c8c5..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_license_list.py +++ /dev/null @@ -1,39 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_license_list import CloudEndureLicenseList # noqa: E501 - - -class TestCloudEndureLicenseList(unittest.TestCase): - """CloudEndureLicenseList unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureLicenseList(self): - """Test CloudEndureLicenseList""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_license_list.CloudEndureLicenseList() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_list_users_result.py b/cloudendure/cloudendure_api/test/test_cloud_endure_list_users_result.py deleted file mode 100644 index b1b6f68ab..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_list_users_result.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_list_users_result import ( - CloudEndureListUsersResult, -) # noqa: E501 - - -class TestCloudEndureListUsersResult(unittest.TestCase): - """CloudEndureListUsersResult unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureListUsersResult(self): - """Test CloudEndureListUsersResult""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_list_users_result.CloudEndureListUsersResult() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_list_users_results.py b/cloudendure/cloudendure_api/test/test_cloud_endure_list_users_results.py deleted file mode 100644 index 6fc08c354..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_list_users_results.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_list_users_results import ( - CloudEndureListUsersResults, -) # noqa: E501 - - -class TestCloudEndureListUsersResults(unittest.TestCase): - """CloudEndureListUsersResults unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureListUsersResults(self): - """Test CloudEndureListUsersResults""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_list_users_results.CloudEndureListUsersResults() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_logical_location.py b/cloudendure/cloudendure_api/test/test_cloud_endure_logical_location.py deleted file mode 100644 index 37eed14c9..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_logical_location.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_logical_location import ( - CloudEndureLogicalLocation, -) # noqa: E501 - - -class TestCloudEndureLogicalLocation(unittest.TestCase): - """CloudEndureLogicalLocation unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureLogicalLocation(self): - """Test CloudEndureLogicalLocation""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_logical_location.CloudEndureLogicalLocation() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_machine_and_path_and_point_in_time.py b/cloudendure/cloudendure_api/test/test_cloud_endure_machine_and_path_and_point_in_time.py deleted file mode 100644 index f182e15da..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_machine_and_path_and_point_in_time.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_machine_and_path_and_point_in_time import ( - CloudEndureMachineAndPathAndPointInTime, -) # noqa: E501 - - -class TestCloudEndureMachineAndPathAndPointInTime(unittest.TestCase): - """CloudEndureMachineAndPathAndPointInTime unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureMachineAndPathAndPointInTime(self): - """Test CloudEndureMachineAndPathAndPointInTime""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_machine_and_path_and_point_in_time.CloudEndureMachineAndPathAndPointInTime() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_machine_and_point_in_time.py b/cloudendure/cloudendure_api/test/test_cloud_endure_machine_and_point_in_time.py deleted file mode 100644 index 2c346de92..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_machine_and_point_in_time.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_machine_and_point_in_time import ( - CloudEndureMachineAndPointInTime, -) # noqa: E501 - - -class TestCloudEndureMachineAndPointInTime(unittest.TestCase): - """CloudEndureMachineAndPointInTime unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureMachineAndPointInTime(self): - """Test CloudEndureMachineAndPointInTime""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_machine_and_point_in_time.CloudEndureMachineAndPointInTime() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_machine_replication_configuration.py b/cloudendure/cloudendure_api/test/test_cloud_endure_machine_replication_configuration.py deleted file mode 100644 index c21ddf4fe..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_machine_replication_configuration.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_machine_replication_configuration import ( # noqa: E501 - CloudEndureMachineReplicationConfiguration, -) - - -class TestCloudEndureMachineReplicationConfiguration(unittest.TestCase): - """CloudEndureMachineReplicationConfiguration unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureMachineReplicationConfiguration(self): - """Test CloudEndureMachineReplicationConfiguration""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_machine_replication_configuration.CloudEndureMachineReplicationConfiguration() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_machine_snapshot_credits.py b/cloudendure/cloudendure_api/test/test_cloud_endure_machine_snapshot_credits.py deleted file mode 100644 index 0654b1f6c..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_machine_snapshot_credits.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_machine_snapshot_credits import ( - CloudEndureMachineSnapshotCredits, -) # noqa: E501 - - -class TestCloudEndureMachineSnapshotCredits(unittest.TestCase): - """CloudEndureMachineSnapshotCredits unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureMachineSnapshotCredits(self): - """Test CloudEndureMachineSnapshotCredits""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_machine_snapshot_credits.CloudEndureMachineSnapshotCredits() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_machine_throttle_time_seconds.py b/cloudendure/cloudendure_api/test/test_cloud_endure_machine_throttle_time_seconds.py deleted file mode 100644 index aec23f8c5..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_machine_throttle_time_seconds.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_machine_throttle_time_seconds import ( - CloudEndureMachineThrottleTimeSeconds, -) # noqa: E501 - - -class TestCloudEndureMachineThrottleTimeSeconds(unittest.TestCase): - """CloudEndureMachineThrottleTimeSeconds unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureMachineThrottleTimeSeconds(self): - """Test CloudEndureMachineThrottleTimeSeconds""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_machine_throttle_time_seconds.CloudEndureMachineThrottleTimeSeconds() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_machines_list.py b/cloudendure/cloudendure_api/test/test_cloud_endure_machines_list.py deleted file mode 100644 index 1b9d679d0..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_machines_list.py +++ /dev/null @@ -1,39 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_machines_list import CloudEndureMachinesList # noqa: E501 - - -class TestCloudEndureMachinesList(unittest.TestCase): - """CloudEndureMachinesList unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureMachinesList(self): - """Test CloudEndureMachinesList""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_machines_list.CloudEndureMachinesList() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_machines_list_invalid_i_ds_and_job.py b/cloudendure/cloudendure_api/test/test_cloud_endure_machines_list_invalid_i_ds_and_job.py deleted file mode 100644 index 7c157a9a0..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_machines_list_invalid_i_ds_and_job.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_machines_list_invalid_i_ds_and_job import ( - CloudEndureMachinesListInvalidIDsAndJob, -) # noqa: E501 - - -class TestCloudEndureMachinesListInvalidIDsAndJob(unittest.TestCase): - """CloudEndureMachinesListInvalidIDsAndJob unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureMachinesListInvalidIDsAndJob(self): - """Test CloudEndureMachinesListInvalidIDsAndJob""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_machines_list_invalid_i_ds_and_job.CloudEndureMachinesListInvalidIDsAndJob() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_network_interface.py b/cloudendure/cloudendure_api/test/test_cloud_endure_network_interface.py deleted file mode 100644 index 4d540f1ba..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_network_interface.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_network_interface import ( - CloudEndureNetworkInterface, -) # noqa: E501 - - -class TestCloudEndureNetworkInterface(unittest.TestCase): - """CloudEndureNetworkInterface unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureNetworkInterface(self): - """Test CloudEndureNetworkInterface""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_network_interface.CloudEndureNetworkInterface() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_point_in_time.py b/cloudendure/cloudendure_api/test/test_cloud_endure_point_in_time.py deleted file mode 100644 index f13978c2d..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_point_in_time.py +++ /dev/null @@ -1,39 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_point_in_time import CloudEndurePointInTime # noqa: E501 - - -class TestCloudEndurePointInTime(unittest.TestCase): - """CloudEndurePointInTime unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndurePointInTime(self): - """Test CloudEndurePointInTime""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_point_in_time.CloudEndurePointInTime() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_point_in_time_list.py b/cloudendure/cloudendure_api/test/test_cloud_endure_point_in_time_list.py deleted file mode 100644 index 06f6a9c2e..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_point_in_time_list.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_point_in_time_list import ( - CloudEndurePointInTimeList, -) # noqa: E501 - - -class TestCloudEndurePointInTimeList(unittest.TestCase): - """CloudEndurePointInTimeList unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndurePointInTimeList(self): - """Test CloudEndurePointInTimeList""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_point_in_time_list.CloudEndurePointInTimeList() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_project.py b/cloudendure/cloudendure_api/test/test_cloud_endure_project.py deleted file mode 100644 index ee483adf5..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_project.py +++ /dev/null @@ -1,39 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_project import CloudEndureProject # noqa: E501 - - -class TestCloudEndureProject(unittest.TestCase): - """CloudEndureProject unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureProject(self): - """Test CloudEndureProject""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_project.CloudEndureProject() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_project_storage.py b/cloudendure/cloudendure_api/test/test_cloud_endure_project_storage.py deleted file mode 100644 index 63bdfe41f..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_project_storage.py +++ /dev/null @@ -1,39 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_project_storage import CloudEndureProjectStorage # noqa: E501 - - -class TestCloudEndureProjectStorage(unittest.TestCase): - """CloudEndureProjectStorage unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureProjectStorage(self): - """Test CloudEndureProjectStorage""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_project_storage.CloudEndureProjectStorage() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_projects_and_users.py b/cloudendure/cloudendure_api/test/test_cloud_endure_projects_and_users.py deleted file mode 100644 index 64648828e..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_projects_and_users.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_projects_and_users import ( - CloudEndureProjectsAndUsers, -) # noqa: E501 - - -class TestCloudEndureProjectsAndUsers(unittest.TestCase): - """CloudEndureProjectsAndUsers unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureProjectsAndUsers(self): - """Test CloudEndureProjectsAndUsers""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_projects_and_users.CloudEndureProjectsAndUsers() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_projects_list.py b/cloudendure/cloudendure_api/test/test_cloud_endure_projects_list.py deleted file mode 100644 index 1a863373d..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_projects_list.py +++ /dev/null @@ -1,39 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_projects_list import CloudEndureProjectsList # noqa: E501 - - -class TestCloudEndureProjectsList(unittest.TestCase): - """CloudEndureProjectsList unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureProjectsList(self): - """Test CloudEndureProjectsList""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_projects_list.CloudEndureProjectsList() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_recovery_plan.py b/cloudendure/cloudendure_api/test/test_cloud_endure_recovery_plan.py deleted file mode 100644 index 1728bc29d..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_recovery_plan.py +++ /dev/null @@ -1,39 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_recovery_plan import CloudEndureRecoveryPlan # noqa: E501 - - -class TestCloudEndureRecoveryPlan(unittest.TestCase): - """CloudEndureRecoveryPlan unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureRecoveryPlan(self): - """Test CloudEndureRecoveryPlan""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_recovery_plan.CloudEndureRecoveryPlan() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_recovery_plan_list.py b/cloudendure/cloudendure_api/test/test_cloud_endure_recovery_plan_list.py deleted file mode 100644 index 250447f56..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_recovery_plan_list.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_recovery_plan_list import ( - CloudEndureRecoveryPlanList, -) # noqa: E501 - - -class TestCloudEndureRecoveryPlanList(unittest.TestCase): - """CloudEndureRecoveryPlanList unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureRecoveryPlanList(self): - """Test CloudEndureRecoveryPlanList""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_recovery_plan_list.CloudEndureRecoveryPlanList() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_recovery_plan_step.py b/cloudendure/cloudendure_api/test/test_cloud_endure_recovery_plan_step.py deleted file mode 100644 index b29ce530e..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_recovery_plan_step.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_recovery_plan_step import ( - CloudEndureRecoveryPlanStep, -) # noqa: E501 - - -class TestCloudEndureRecoveryPlanStep(unittest.TestCase): - """CloudEndureRecoveryPlanStep unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureRecoveryPlanStep(self): - """Test CloudEndureRecoveryPlanStep""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_recovery_plan_step.CloudEndureRecoveryPlanStep() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_recovery_plan_steps.py b/cloudendure/cloudendure_api/test/test_cloud_endure_recovery_plan_steps.py deleted file mode 100644 index bf9b1255c..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_recovery_plan_steps.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_recovery_plan_steps import ( - CloudEndureRecoveryPlanSteps, -) # noqa: E501 - - -class TestCloudEndureRecoveryPlanSteps(unittest.TestCase): - """CloudEndureRecoveryPlanSteps unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureRecoveryPlanSteps(self): - """Test CloudEndureRecoveryPlanSteps""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_recovery_plan_steps.CloudEndureRecoveryPlanSteps() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_regions_list.py b/cloudendure/cloudendure_api/test/test_cloud_endure_regions_list.py deleted file mode 100644 index 60c07427e..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_regions_list.py +++ /dev/null @@ -1,39 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_regions_list import CloudEndureRegionsList # noqa: E501 - - -class TestCloudEndureRegionsList(unittest.TestCase): - """CloudEndureRegionsList unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureRegionsList(self): - """Test CloudEndureRegionsList""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_regions_list.CloudEndureRegionsList() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_replica.py b/cloudendure/cloudendure_api/test/test_cloud_endure_replica.py deleted file mode 100644 index 4c35b127d..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_replica.py +++ /dev/null @@ -1,39 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_replica import CloudEndureReplica # noqa: E501 - - -class TestCloudEndureReplica(unittest.TestCase): - """CloudEndureReplica unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureReplica(self): - """Test CloudEndureReplica""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_replica.CloudEndureReplica() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_replication_configuration.py b/cloudendure/cloudendure_api/test/test_cloud_endure_replication_configuration.py deleted file mode 100644 index 58084d46f..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_replication_configuration.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_replication_configuration import ( - CloudEndureReplicationConfiguration, -) # noqa: E501 - - -class TestCloudEndureReplicationConfiguration(unittest.TestCase): - """CloudEndureReplicationConfiguration unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureReplicationConfiguration(self): - """Test CloudEndureReplicationConfiguration""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_replication_configuration.CloudEndureReplicationConfiguration() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_replication_configuration_list.py b/cloudendure/cloudendure_api/test/test_cloud_endure_replication_configuration_list.py deleted file mode 100644 index e7268e2d2..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_replication_configuration_list.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_replication_configuration_list import ( - CloudEndureReplicationConfigurationList, -) # noqa: E501 - - -class TestCloudEndureReplicationConfigurationList(unittest.TestCase): - """CloudEndureReplicationConfigurationList unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureReplicationConfigurationList(self): - """Test CloudEndureReplicationConfigurationList""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_replication_configuration_list.CloudEndureReplicationConfigurationList() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_replication_server_config.py b/cloudendure/cloudendure_api/test/test_cloud_endure_replication_server_config.py deleted file mode 100644 index 85666a197..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_replication_server_config.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_replication_server_config import ( - CloudEndureReplicationServerConfig, -) # noqa: E501 - - -class TestCloudEndureReplicationServerConfig(unittest.TestCase): - """CloudEndureReplicationServerConfig unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureReplicationServerConfig(self): - """Test CloudEndureReplicationServerConfig""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_replication_server_config.CloudEndureReplicationServerConfig() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_restore_files_parameters.py b/cloudendure/cloudendure_api/test/test_cloud_endure_restore_files_parameters.py deleted file mode 100644 index 2b04ae35c..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_restore_files_parameters.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_restore_files_parameters import ( - CloudEndureRestoreFilesParameters, -) # noqa: E501 - - -class TestCloudEndureRestoreFilesParameters(unittest.TestCase): - """CloudEndureRestoreFilesParameters unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureRestoreFilesParameters(self): - """Test CloudEndureRestoreFilesParameters""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_restore_files_parameters.CloudEndureRestoreFilesParameters() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_saml_settings.py b/cloudendure/cloudendure_api/test/test_cloud_endure_saml_settings.py deleted file mode 100644 index cecf6d093..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_saml_settings.py +++ /dev/null @@ -1,39 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_saml_settings import CloudEndureSamlSettings # noqa: E501 - - -class TestCloudEndureSamlSettings(unittest.TestCase): - """CloudEndureSamlSettings unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureSamlSettings(self): - """Test CloudEndureSamlSettings""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_saml_settings.CloudEndureSamlSettings() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_security_group.py b/cloudendure/cloudendure_api/test/test_cloud_endure_security_group.py deleted file mode 100644 index d55014b69..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_security_group.py +++ /dev/null @@ -1,39 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_security_group import CloudEndureSecurityGroup # noqa: E501 - - -class TestCloudEndureSecurityGroup(unittest.TestCase): - """CloudEndureSecurityGroup unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureSecurityGroup(self): - """Test CloudEndureSecurityGroup""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_security_group.CloudEndureSecurityGroup() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_storage_location.py b/cloudendure/cloudendure_api/test/test_cloud_endure_storage_location.py deleted file mode 100644 index 1179b8c12..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_storage_location.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_storage_location import ( - CloudEndureStorageLocation, -) # noqa: E501 - - -class TestCloudEndureStorageLocation(unittest.TestCase): - """CloudEndureStorageLocation unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureStorageLocation(self): - """Test CloudEndureStorageLocation""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_storage_location.CloudEndureStorageLocation() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_updateable_scripts.py b/cloudendure/cloudendure_api/test/test_cloud_endure_updateable_scripts.py deleted file mode 100644 index 2613146d5..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_updateable_scripts.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_updateable_scripts import ( - CloudEndureUpdateableScripts, -) # noqa: E501 - - -class TestCloudEndureUpdateableScripts(unittest.TestCase): - """CloudEndureUpdateableScripts unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureUpdateableScripts(self): - """Test CloudEndureUpdateableScripts""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_updateable_scripts.CloudEndureUpdateableScripts() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_upgrade_counter_delay.py b/cloudendure/cloudendure_api/test/test_cloud_endure_upgrade_counter_delay.py deleted file mode 100644 index 32a8366e5..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_upgrade_counter_delay.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_upgrade_counter_delay import ( - CloudEndureUpgradeCounterDelay, -) # noqa: E501 - - -class TestCloudEndureUpgradeCounterDelay(unittest.TestCase): - """CloudEndureUpgradeCounterDelay unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureUpgradeCounterDelay(self): - """Test CloudEndureUpgradeCounterDelay""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_upgrade_counter_delay.CloudEndureUpgradeCounterDelay() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_user_report.py b/cloudendure/cloudendure_api/test/test_cloud_endure_user_report.py deleted file mode 100644 index 9265ffe54..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_user_report.py +++ /dev/null @@ -1,39 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_user_report import CloudEndureUserReport # noqa: E501 - - -class TestCloudEndureUserReport(unittest.TestCase): - """CloudEndureUserReport unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureUserReport(self): - """Test CloudEndureUserReport""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_user_report.CloudEndureUserReport() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_user_reports.py b/cloudendure/cloudendure_api/test/test_cloud_endure_user_reports.py deleted file mode 100644 index 7f1efb7e7..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_user_reports.py +++ /dev/null @@ -1,39 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_user_reports import CloudEndureUserReports # noqa: E501 - - -class TestCloudEndureUserReports(unittest.TestCase): - """CloudEndureUserReports unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureUserReports(self): - """Test CloudEndureUserReports""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_user_reports.CloudEndureUserReports() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_users_and_roles.py b/cloudendure/cloudendure_api/test/test_cloud_endure_users_and_roles.py deleted file mode 100644 index fa8e4e8a0..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_users_and_roles.py +++ /dev/null @@ -1,39 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_users_and_roles import CloudEndureUsersAndRoles # noqa: E501 - - -class TestCloudEndureUsersAndRoles(unittest.TestCase): - """CloudEndureUsersAndRoles unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureUsersAndRoles(self): - """Test CloudEndureUsersAndRoles""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_users_and_roles.CloudEndureUsersAndRoles() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_users_list.py b/cloudendure/cloudendure_api/test/test_cloud_endure_users_list.py deleted file mode 100644 index 0d07187b1..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_users_list.py +++ /dev/null @@ -1,39 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_users_list import CloudEndureUsersList # noqa: E501 - - -class TestCloudEndureUsersList(unittest.TestCase): - """CloudEndureUsersList unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureUsersList(self): - """Test CloudEndureUsersList""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_users_list.CloudEndureUsersList() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/cloudendure_api/test/test_cloud_endure_v_center_subnet.py b/cloudendure/cloudendure_api/test/test_cloud_endure_v_center_subnet.py deleted file mode 100644 index 113c573a3..000000000 --- a/cloudendure/cloudendure_api/test/test_cloud_endure_v_center_subnet.py +++ /dev/null @@ -1,39 +0,0 @@ -# coding: utf-8 - -""" - CloudEndure API documentation - - © 2017 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 - - OpenAPI spec version: 5 - Contact: https://bit.ly/2T54hSc - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import unittest - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from models.cloud_endure_v_center_subnet import CloudEndureVCenterSubnet # noqa: E501 - - -class TestCloudEndureVCenterSubnet(unittest.TestCase): - """CloudEndureVCenterSubnet unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testCloudEndureVCenterSubnet(self): - """Test CloudEndureVCenterSubnet""" - # FIXME: construct object with mandatory attributes with example values - # model = cloudendure_api.models.cloud_endure_v_center_subnet.CloudEndureVCenterSubnet() # noqa: E501 - pass - - -if __name__ == "__main__": - unittest.main() diff --git a/cloudendure/config.py b/cloudendure/config.py deleted file mode 100644 index 2547d3940..000000000 --- a/cloudendure/config.py +++ /dev/null @@ -1,160 +0,0 @@ -# -*- coding: utf-8 -*- -"""Define the CloudEndure Config related logic.""" -from __future__ import annotations - -import logging -import os -from pathlib import Path, PosixPath -from typing import Any, Dict, List - -import yaml - -logger: logging.Logger = logging.getLogger(__name__) -LOG_LEVEL: str = os.environ.get("CLOUDENDURE_LOG_LEVEL", "INFO") -logger.setLevel(getattr(logging, LOG_LEVEL)) - - -class CloudEndureConfig: - """Define the CloudEndure Config object.""" - - BASE_CONFIG = { - "host": "https://console.cloudendure.com", - "api_version": "latest", - "auth_ttl": "3600", - "username": "", - "password": "", - "token": "", - "user_api_token": "", - "session_cookie": "", - "project_name": "", - "project_id": "", - "max_lag_ttl": "90", - "machines": "", - "migration_wave": "0", - "clone_status": "NOT_STARTED", - "destination_account": "", - "destination_kms": "", - "destination_role": "", - "subnet_id": "", - "security_group_id": "", - "private_ip_action": "", - "disk_type": "SSD", - "public_ip": "DONT_ALLOCATE", - "instance_types": "", - } - - def __init__(self, username: str = "", password: str = "", token: str = "", *args, **kwargs) -> None: - """Initialize the Environment.""" - logger.info("Initializing the CloudEndure Configuration") - _config_path: str = os.environ.get("CLOUDENDURE_CONFIG_PATH", "~/.cloudendure.yaml") - if _config_path.startswith("~"): - self.config_path = os.path.expanduser(_config_path) - else: - self.config_path = _config_path - - # Handle CloudEndure CLI input credentials. - self.cli = {"username": username, "password": password, "user_api_token": token} - - _config: PosixPath = Path(self.config_path) - if not _config.exists(): - print(f"No CloudEndure YAML configuration found! Creating it at: ({self.config_path})") - self.write_yaml_config(config=self.BASE_CONFIG) - self.update_config() - - def __str__(self) -> str: - """Define the string representation of the CloudEndure API object.""" - return "" - - def merge_config_dicts(self, values: List[Any]) -> Dict[str, str]: - """Merge a list of configuration dictionaries.""" - data: Dict[str, str] = self.BASE_CONFIG - for value in values: - data.update({k: v for k, v in value.items() if v}) - return data - - def read_yaml_config(self) -> Dict[str, Any]: - """Read the CloudEndure YAML configuration file.""" - logger.info("Loading the CloudEndure YAML configuration file") - with open(self.config_path, "r") as yaml_stream: - try: - config: Dict[str, Any] = yaml.safe_load(yaml_stream) - except yaml.YAMLError as e: - logger.error("YAMLError during read_yaml_config: %s", str(e)) - config = {} - return config - - def write_yaml_config(self, config: Dict[str, Any]) -> bool: - """Write to the CloudEndure YAML configuration file.""" - logger.info("Writing to the CloudEndure YAML configuration file") - with open(self.config_path, "w") as yaml_file: - try: - yaml.dump(config, yaml_file, default_flow_style=False) - logger.info("CloudEndure YAML configuration saved!") - return True - except Exception as e: - logger.error( - "Exception encountered while writing the CloudEndure YAML configuration file - (%s)", e, - ) - return False - - def update_yaml_config(self, kwargs: Dict[str, Any]) -> bool: - """Update the YAML configuration file.""" - logger.info("Writing updated configuration file") - _config: Dict[str, Any] = self.read_yaml_config() - _config.update(kwargs) - try: - self.write_yaml_config(_config) - self.update_config() - except Exception as e: - logger.error(e) - return False - return True - - def get_env_vars(self, prefix: str = "cloudendure") -> Dict[str, any]: - """Get all environment variables starting with CLOUDENDURE_.""" - prefix: str = prefix.strip("_") - logger.info("Loading all environment variables starting with (%s)", prefix) - env_vars: Dict[str, Any] = { - x[0].lower().lstrip(prefix.lower()).strip("_"): x[1] - for x in os.environ.items() - if x[0].lower().startswith(prefix.lower()) - } - return env_vars - - def update_config(self) -> None: - """Update the configuration.""" - self.yaml_config_contents: Dict[str, Any] = self.read_yaml_config() - self.env_config = self.get_env_vars() - self.active_config = self.merge_config_dicts([self.yaml_config_contents, self.env_config, self.cli]) - - def update_token(self, token: str) -> bool: - """Update the CloudEndure token. - - Returns: - bool: Whether or not the operation was successful. - - """ - try: - self.update_yaml_config({"token": token}) - except Exception as e: - logger.error(e) - return False - return True - - def get_var(self, var: str) -> str: - """Get the specified environment or config variable. - - Returns: - str: The variable to be used for the provided configuration env var. - - """ - logger.info("Looking up variable: (%s)", var) - env_var: str = os.environ.get(var.upper(), "") - - if env_var: - logger.info("Found Environment Variable - (%s): (%s)", var, env_var) - else: - env_var = self.yaml_config_contents.get(var.lower(), "") - - logger.info("Return variable value: (%s)", env_var) - return env_var diff --git a/cloudendure/configuration.py b/cloudendure/configuration.py new file mode 100644 index 000000000..dffcea332 --- /dev/null +++ b/cloudendure/configuration.py @@ -0,0 +1,462 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import copy +import logging +import multiprocessing +import sys +from http import client as http_client + +import urllib3 + +from cloudendure.exceptions import ApiValueError + +JSON_SCHEMA_VALIDATION_KEYWORDS = { + "multipleOf", + "maximum", + "exclusiveMaximum", + "minimum", + "exclusiveMinimum", + "maxLength", + "minLength", + "pattern", + "maxItems", + "minItems", +} + + +class Configuration(object): + """NOTE: This class is auto generated by OpenAPI Generator + + Ref: https://openapi-generator.tech + Do not edit the class manually. + + :param host: Base url + :param api_key: Dict to store API key(s). + Each entry in the dict specifies an API key. + The dict key is the name of the security scheme in the OAS specification. + The dict value is the API key secret. + :param api_key_prefix: Dict to store API prefix (e.g. Bearer) + The dict key is the name of the security scheme in the OAS specification. + The dict value is an API key prefix when generating the auth data. + :param username: Username for HTTP basic authentication + :param password: Password for HTTP basic authentication + :param discard_unknown_keys: Boolean value indicating whether to discard + unknown properties. A server may send a response that includes additional + properties that are not known by the client in the following scenarios: + 1. The OpenAPI document is incomplete, i.e. it does not match the server + implementation. + 2. The client was generated using an older version of the OpenAPI document + and the server has been upgraded since then. + If a schema in the OpenAPI document defines the additionalProperties attribute, + then all undeclared properties received by the server are injected into the + additional properties map. In that case, there are undeclared properties, and + nothing to discard. + :param disabled_client_side_validations (string): Comma-separated list of + JSON schema validation keywords to disable JSON schema structural validation + rules. The following keywords may be specified: multipleOf, maximum, + exclusiveMaximum, minimum, exclusiveMinimum, maxLength, minLength, pattern, + maxItems, minItems. + By default, the validation is performed for data generated locally by the client + and data received from the server, independent of any validation performed by + the server side. If the input data does not satisfy the JSON schema validation + rules specified in the OpenAPI document, an exception is raised. + If disabled_client_side_validations is set, structural validation is + disabled. This can be useful to troubleshoot data validation problem, such as + when the OpenAPI document validation rules do not match the actual API data + received by the server. + :param server_index: Index to servers configuration. + :param server_variables: Mapping with string values to replace variables in + templated server configuration. The validation of enums is performed for + variables with defined enum values before. + :param server_operation_index: Mapping from operation ID to an index to server + configuration. + :param server_operation_variables: Mapping from operation ID to a mapping with + string values to replace variables in templated server configuration. + The validation of enums is performed for variables with defined enum values before. + :param ssl_ca_cert: str - the path to a file of concatenated CA certificates + in PEM format + + """ + + _default = None + + def __init__( + self, + host=None, + api_key=None, + api_key_prefix=None, + access_token=None, + username=None, + password=None, + discard_unknown_keys=False, + disabled_client_side_validations="", + server_index=None, + server_variables=None, + server_operation_index=None, + server_operation_variables=None, + ssl_ca_cert=None, + ): + """Constructor""" + self._base_path = ( + "https://console.cloudendure.com/api/latest" if host is None else host + ) + """Default Base url + """ + self.server_index = 0 if server_index is None and host is None else server_index + self.server_operation_index = server_operation_index or {} + """Default server index + """ + self.server_variables = server_variables or {} + self.server_operation_variables = server_operation_variables or {} + """Default server variables + """ + self.temp_folder_path = None + """Temp file folder for downloading files + """ + # Authentication Settings + self.access_token = access_token + self.api_key = {} + if api_key: + self.api_key = api_key + """dict to store API key(s) + """ + self.api_key_prefix = {} + if api_key_prefix: + self.api_key_prefix = api_key_prefix + """dict to store API prefix (e.g. Bearer) + """ + self.refresh_api_key_hook = None + """function hook to refresh API key if expired + """ + self.username = username + """Username for HTTP basic authentication + """ + self.password = password + """Password for HTTP basic authentication + """ + self.discard_unknown_keys = discard_unknown_keys + self.disabled_client_side_validations = disabled_client_side_validations + self.logger = {} + """Logging Settings + """ + self.logger["package_logger"] = logging.getLogger("cloudendure") + self.logger["urllib3_logger"] = logging.getLogger("urllib3") + self.logger_format = "%(asctime)s %(levelname)s %(message)s" + """Log format + """ + self.logger_stream_handler = None + """Log stream handler + """ + self.logger_file_handler = None + """Log file handler + """ + self.logger_file = None + """Debug file location + """ + self.debug = False + """Debug switch + """ + + self.verify_ssl = True + """SSL/TLS verification + Set this to false to skip verifying SSL certificate when calling API + from https server. + """ + self.ssl_ca_cert = ssl_ca_cert + """Set this to customize the certificate file to verify the peer. + """ + self.cert_file = None + """client certificate file + """ + self.key_file = None + """client key file + """ + self.assert_hostname = None + """Set this to True/False to enable/disable SSL hostname verification. + """ + + self.connection_pool_maxsize = multiprocessing.cpu_count() * 5 + """urllib3 connection pool's maximum number of connections saved + per pool. urllib3 uses 1 connection as default value, but this is + not the best value when you are making a lot of possibly parallel + requests to the same host, which is often the case here. + cpu_count * 5 is used as default value to increase performance. + """ + + self.proxy = None + """Proxy URL + """ + self.proxy_headers = None + """Proxy headers + """ + self.safe_chars_for_path_param = "" + """Safe chars for path_param + """ + self.retries = None + """Adding retries to override urllib3 default value 3 + """ + # Enable client side validation + self.client_side_validation = True + + # Options to pass down to the underlying urllib3 socket + self.socket_options = None + + def __deepcopy__(self, memo): + cls = self.__class__ + result = cls.__new__(cls) + memo[id(self)] = result + for k, v in self.__dict__.items(): + if k not in ("logger", "logger_file_handler"): + setattr(result, k, copy.deepcopy(v, memo)) + # shallow copy of loggers + result.logger = copy.copy(self.logger) + # use setters to configure loggers + result.logger_file = self.logger_file + result.debug = self.debug + return result + + def __setattr__(self, name, value): + object.__setattr__(self, name, value) + if name == "disabled_client_side_validations": + s = set(filter(None, value.split(","))) + for v in s: + if v not in JSON_SCHEMA_VALIDATION_KEYWORDS: + raise ApiValueError("Invalid keyword: '{0}''".format(v)) + self._disabled_client_side_validations = s + + @classmethod + def set_default(cls, default): + """Set default instance of configuration. + + It stores default configuration, which can be + returned by get_default_copy method. + + :param default: object of Configuration + """ + cls._default = copy.deepcopy(default) + + @classmethod + def get_default_copy(cls): + """Return new instance of configuration. + + This method returns newly created, based on default constructor, + object of Configuration class or returns a copy of default + configuration passed by the set_default method. + + :return: The configuration object. + """ + if cls._default is not None: + return copy.deepcopy(cls._default) + return Configuration() + + @property + def logger_file(self): + """The logger file. + + If the logger_file is None, then add stream handler and remove file + handler. Otherwise, add file handler and remove stream handler. + + :param value: The logger_file path. + :type: str + """ + return self.__logger_file + + @logger_file.setter + def logger_file(self, value): + """The logger file. + + If the logger_file is None, then add stream handler and remove file + handler. Otherwise, add file handler and remove stream handler. + + :param value: The logger_file path. + :type: str + """ + self.__logger_file = value + if self.__logger_file: + # If set logging file, + # then add file handler and remove stream handler. + self.logger_file_handler = logging.FileHandler(self.__logger_file) + self.logger_file_handler.setFormatter(self.logger_formatter) + for _, logger in self.logger.items(): + logger.addHandler(self.logger_file_handler) + + @property + def debug(self): + """Debug status + + :param value: The debug status, True or False. + :type: bool + """ + return self.__debug + + @debug.setter + def debug(self, value): + """Debug status + + :param value: The debug status, True or False. + :type: bool + """ + self.__debug = value + if self.__debug: + # if debug status is True, turn on debug logging + for _, logger in self.logger.items(): + logger.setLevel(logging.DEBUG) + # turn on http_client debug + http_client.HTTPConnection.debuglevel = 1 + else: + # if debug status is False, turn off debug logging, + # setting log level to default `logging.WARNING` + for _, logger in self.logger.items(): + logger.setLevel(logging.WARNING) + # turn off http_client debug + http_client.HTTPConnection.debuglevel = 0 + + @property + def logger_format(self): + """The logger format. + + The logger_formatter will be updated when sets logger_format. + + :param value: The format string. + :type: str + """ + return self.__logger_format + + @logger_format.setter + def logger_format(self, value): + """The logger format. + + The logger_formatter will be updated when sets logger_format. + + :param value: The format string. + :type: str + """ + self.__logger_format = value + self.logger_formatter = logging.Formatter(self.__logger_format) + + def get_api_key_with_prefix(self, identifier, alias=None): + """Gets API key (with prefix if set). + + :param identifier: The identifier of apiKey. + :param alias: The alternative identifier of apiKey. + :return: The token for api key authentication. + """ + if self.refresh_api_key_hook is not None: + self.refresh_api_key_hook(self) + key = self.api_key.get( + identifier, self.api_key.get(alias) if alias is not None else None + ) + if key: + prefix = self.api_key_prefix.get(identifier) + if prefix: + return "%s %s" % (prefix, key) + else: + return key + + def get_basic_auth_token(self): + """Gets HTTP basic authentication header (string). + + :return: The token for basic HTTP authentication. + """ + username = "" + if self.username is not None: + username = self.username + password = "" + if self.password is not None: + password = self.password + return urllib3.util.make_headers(basic_auth=username + ":" + password).get( + "authorization" + ) + + def auth_settings(self): + """Gets Auth Settings dict for api client. + + :return: The Auth Settings information dict. + """ + auth = {} + return auth + + def to_debug_report(self): + """Gets the essential information for debugging. + + :return: The report for debugging. + """ + return ( + "Python SDK Debug Report:\n" + "OS: {env}\n" + "Python Version: {pyversion}\n" + "Version of the API: 5\n" + "SDK Package Version: 1.0.0".format(env=sys.platform, pyversion=sys.version) + ) + + def get_host_settings(self): + """Gets an array of host settings + + :return: An array of host settings + """ + return [ + { + "url": "https://console.cloudendure.com/api/latest", + "description": "No description provided", + } + ] + + def get_host_from_settings(self, index, variables=None, servers=None): + """Gets host URL based on the index and variables + :param index: array index of the host settings + :param variables: hash of variable and the corresponding value + :param servers: an array of host settings or None + :return: URL based on host settings + """ + if index is None: + return self._base_path + + variables = {} if variables is None else variables + servers = self.get_host_settings() if servers is None else servers + + try: + server = servers[index] + except IndexError: + raise ValueError( + "Invalid index {0} when selecting the host settings. " + "Must be less than {1}".format(index, len(servers)) + ) + + url = server["url"] + + # go through variables and replace placeholders + for variable_name, variable in server.get("variables", {}).items(): + used_value = variables.get(variable_name, variable["default_value"]) + + if "enum_values" in variable and used_value not in variable["enum_values"]: + raise ValueError( + "The variable `{0}` in the host URL has invalid value " + "{1}. Must be {2}.".format( + variable_name, variables[variable_name], variable["enum_values"] + ) + ) + + url = url.replace("{" + variable_name + "}", used_value) + + return url + + @property + def host(self): + """Return generated host.""" + return self.get_host_from_settings( + self.server_index, variables=self.server_variables + ) + + @host.setter + def host(self, value): + """Fix base path.""" + self._base_path = value + self.server_index = None diff --git a/cloudendure/constants.py b/cloudendure/constants.py deleted file mode 100644 index 3a1bc86f8..000000000 --- a/cloudendure/constants.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- -"""Define the CloudEndure reusable variables.""" - -from typing import Dict - - -def get_aws_regions() -> Dict[str, str]: - """Return a hardcoded dictionary of AWS regions. - - Returns: - dict: A mapping of AWS regions. - - """ - return { - "US East (Ohio)": "us-east-2", - "US East (N. Virginia)": "us-east-1", - "US West (N. California)": "us-west-1", - "US West (Oregon)": "us-west-2", - "Asia Pacific (Hong Kong)": "ap-east-1", - "Asia Pacific (Mumbai)": "ap-south-1", - "Asia Pacific (Osaka-Local)": "ap-northeast-3", - "Asia Pacific (Seoul)": "ap-northeast-2", - "Asia Pacific (Singapore)": "ap-southeast-1", - "Asia Pacific (Sydney)": "ap-southeast-2", - "Asia Pacific (Tokyo)": "ap-northeast-1", - "Canada (Central)": "ca-central-1", - "China (Beijing)": "cn-north-1", - "China (Ningxia)": "cn-northwest-1", - "EU (Frankfurt)": "eu-central-1", - "EU (Ireland)": "eu-west-1", - "EU (London)": "eu-west-2", - "EU (Paris)": "eu-west-3", - "EU (Stockholm)": "eu-north-1", - "Middle East (Bahrain)": "me-south-1", - "South America (Sao Paulo)": "sa-east-1", - "AWS GovCloud (US-East)": "us-gov-east-1", - "AWS GovCloud (US-West)": "us-gov-west-1", - } diff --git a/cloudendure/events.py b/cloudendure/events.py deleted file mode 100644 index 101f5fda2..000000000 --- a/cloudendure/events.py +++ /dev/null @@ -1,95 +0,0 @@ -# -*- coding: utf-8 -*- -"""Define the CloudEndure events.""" -from __future__ import annotations - -import os -from datetime import datetime -from typing import Any, Dict, List, Tuple - -from cloudendure.exceptions import CloudEndureInvalidEvent - -EXIT_ON_WARNING: bool = bool(os.environ.get("CLOUDENDURE_EXIT_ON_WARNING", "0")) - - -class EventHandler: - """Define the handling of CloudEndure Event objects.""" - - def __init__(self, events: List[Any] = None) -> None: - """Initialize the event handler.""" - self.events: List[Any] = events or [] - - def add_event(self, event_type: Tuple[str, str], machine_name, **kwargs) -> bool: - """Add an event.""" - self.events.append(Event(event_type, machine_name, **kwargs)) - - -class Event: - """Define the structure of a CloudEndure Event. - - Usage: - from cloudendure.event import Event - some_event = Event(Event.EVENT_EXPIRED, somevar="some") - - """ - - EVENT_STRUCTURE: Dict[str, str] = { - "machine_name": "", - "event_type": "", - "event_abbreviation": "", - "timestamp": "", - } - - # Errorred Event Types - EVENT_EXPIRED: Tuple[str, str] = ("EXPIRED", "EE") - EVENT_FAILED: Tuple[str, str] = ("FAILED", "EF") - - ERRORRED_EVENT_TYPES: List[Tuple[str, str]] = [EVENT_EXPIRED, EVENT_FAILED] - - # Successful Event Types - EVENT_SUCCESSFULLY_LAUNCHED: Tuple[str, str] = ("SUCCESSFULLY_LAUNCHED", "SL") - - SUCCESSFUL_EVENT_TYPES: List[Tuple[str, str]] = [EVENT_SUCCESSFULLY_LAUNCHED] - - # Warned Event Types - EVENT_IGNORED: Tuple[str, str] = ("IGNORED", "EI") - EVENT_IN_PROGRESS: Tuple[str, str] = ("IN_PROGRESS", "IP") - EVENT_ALREADY_LAUNCHED: Tuple[str, str] = ("ALREADY_LAUNCHED", "AL") - - WARNED_EVENT_TYPES: List[Tuple[str, str]] = [ - EVENT_IGNORED, - EVENT_IN_PROGRESS, - EVENT_ALREADY_LAUNCHED, - ] - - EVENT_TYPES: List[Tuple[str, str]] = ERRORRED_EVENT_TYPES + SUCCESSFUL_EVENT_TYPES + WARNED_EVENT_TYPES - - def __init__(self, event_type, machine_name: str = "NA", **kwargs) -> None: - """Initialize the Event.""" - if event_type not in self.EVENT_TYPES: - raise CloudEndureInvalidEvent(f"Event Type: {event_type} is unrecognized!") - - self.machine_name: str = machine_name.upper() - self.event_type: Tuple[str, str] = event_type - - exit_code: int = ( - 0 - if ( - self.event_type not in self.ERRORRED_EVENT_TYPES - or self.event_type not in self.WARNED_EVENT_TYPES - and EXIT_ON_WARNING - ) - else 1 - ) - - self.event_dict: Dict[str, Any] = { - "event_type_tuple": self.event_type, - "event_type": self.event_type[0], - "event_abbreviation": self.event_type[1], - "machine_name": self.machine_name, - "timestamp": datetime.now().timestamp(), - "exit_code": exit_code, - } - - for k, v in kwargs.items(): - setattr(self, k, v) - self.event_dict[k] = v diff --git a/cloudendure/exceptions.py b/cloudendure/exceptions.py index 288bd384f..f6ae4d7cf 100644 --- a/cloudendure/exceptions.py +++ b/cloudendure/exceptions.py @@ -1,61 +1,150 @@ -# -*- coding: utf-8 -*- -"""Define the CloudEndure exceptions.""" -from __future__ import annotations - - -class CloudEndureException(Exception): - """Define the structure of a CloudEndure exception.""" - - pass - - -class CloudEndureHTTPException(CloudEndureException): - """Define the CloudEndure exception for unauthorized content.""" - - pass - - -class CloudEndureUnauthorized(CloudEndureHTTPException): - """The CloudEndure HTTP exception (401) was encountered for the request due to an unauthenticated request.""" - - pass - - -class CloudEndureForbidden(CloudEndureHTTPException): - """The CloudEndure HTTP exception (403) was encountered because the current user is not allowed access.""" - - pass - - -class CloudEndureNotFound(CloudEndureHTTPException): - """The CloudEndure HTTP exception (404) was encountered for the request due to the object not being found.""" - - pass - - -class CloudEndureMethodNotAllowed(CloudEndureHTTPException): - """The CloudEndure HTTP exception (405) raised when using a method that is not supported. - - For example: (POST instead of GET). - - """ - - pass - - -class CloudEndureUnprocessableEntity(CloudEndureHTTPException): - """The CloudEndure HTTP exception (422) was encountered due to invalid input.""" - - pass - - -class CloudEndureInvalidEvent(CloudEndureException): - """The CloudEndure exception for invalid Event types.""" - - pass - - -class CloudEndureMisconfigured(CloudEndureException): - """The CloudEndure exception indicating the CLI/Module hasn't been configured properly.""" - - pass +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +class OpenApiException(Exception): + """The base exception class for all OpenAPIExceptions""" + + +class ApiTypeError(OpenApiException, TypeError): + def __init__(self, msg, path_to_item=None, valid_classes=None, key_type=None): + """Raises an exception for TypeErrors + + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (list): a list of keys an indices to get to the + current_item + None if unset + valid_classes (tuple): the primitive classes that current item + should be an instance of + None if unset + key_type (bool): False if our value is a value in a dict + True if it is a key in a dict + False if our item is an item in a list + None if unset + """ + self.path_to_item = path_to_item + self.valid_classes = valid_classes + self.key_type = key_type + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiTypeError, self).__init__(full_msg) + + +class ApiValueError(OpenApiException, ValueError): + def __init__(self, msg, path_to_item=None): + """ + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (list) the path to the exception in the + received_data dict. None if unset + """ + + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiValueError, self).__init__(full_msg) + + +class ApiAttributeError(OpenApiException, AttributeError): + def __init__(self, msg, path_to_item=None): + """ + Raised when an attribute reference or assignment fails. + + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (None/list) the path to the exception in the + received_data dict + """ + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiAttributeError, self).__init__(full_msg) + + +class ApiKeyError(OpenApiException, KeyError): + def __init__(self, msg, path_to_item=None): + """ + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (None/list) the path to the exception in the + received_data dict + """ + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiKeyError, self).__init__(full_msg) + + +class ApiException(OpenApiException): + def __init__(self, status=None, reason=None, http_resp=None): + if http_resp: + self.status = http_resp.status + self.reason = http_resp.reason + self.body = http_resp.data + self.headers = http_resp.getheaders() + else: + self.status = status + self.reason = reason + self.body = None + self.headers = None + + def __str__(self): + """Custom error messages for exception""" + error_message = "({0})\n" "Reason: {1}\n".format(self.status, self.reason) + if self.headers: + error_message += "HTTP response headers: {0}\n".format(self.headers) + + if self.body: + error_message += "HTTP response body: {0}\n".format(self.body) + + return error_message + + +class NotFoundException(ApiException): + def __init__(self, status=None, reason=None, http_resp=None): + super(NotFoundException, self).__init__(status, reason, http_resp) + + +class UnauthorizedException(ApiException): + def __init__(self, status=None, reason=None, http_resp=None): + super(UnauthorizedException, self).__init__(status, reason, http_resp) + + +class ForbiddenException(ApiException): + def __init__(self, status=None, reason=None, http_resp=None): + super(ForbiddenException, self).__init__(status, reason, http_resp) + + +class ServiceException(ApiException): + def __init__(self, status=None, reason=None, http_resp=None): + super(ServiceException, self).__init__(status, reason, http_resp) + + +def render_path(path_to_item): + """Returns a string representation of a path""" + result = "" + for pth in path_to_item: + if isinstance(pth, int): + result += "[{0}]".format(pth) + else: + result += "['{0}']".format(pth) + return result diff --git a/cloudendure/model/__init__.py b/cloudendure/model/__init__.py new file mode 100644 index 000000000..cfe32b784 --- /dev/null +++ b/cloudendure/model/__init__.py @@ -0,0 +1,5 @@ +# we can not import model classes here because that would create a circular +# reference which would not work in python2 +# do not import all models into this module because that uses a lot of memory and stack frames +# if you need the ability to import all models from one package, import them with +# from {{packageName}.models import ModelA, ModelB diff --git a/cloudendure/model/account.py b/cloudendure/model/account.py new file mode 100644 index 000000000..1fccf0c67 --- /dev/null +++ b/cloudendure/model/account.py @@ -0,0 +1,232 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.account_ce_admin_properties import AccountCeAdminProperties + from cloudendure.model.saml_settings import SamlSettings + + globals()["AccountCeAdminProperties"] = AccountCeAdminProperties + globals()["SamlSettings"] = SamlSettings + + +class Account(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ("default_license_type",): { + "MIGRATION": "MIGRATION", + "DR": "DR", + "DR_TRIAL": "DR_TRIAL", + "BACKUP": "BACKUP", + }, + } + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "target_credentials_api": (bool,), # noqa: E501 + "allow_archiving_default_value": (bool,), # noqa: E501 + "per_account_user_pool": (bool,), # noqa: E501 + "default_license_type": (str,), # noqa: E501 + "is_med_one": (bool,), # noqa: E501 + "id": (str,), # noqa: E501 + "invite_token_expiry_minutes": (int,), # noqa: E501 + "is_gcp_self_service": (bool,), # noqa: E501 + "is_dr_trial": (bool,), # noqa: E501 + "is_arm_self_service": (bool,), # noqa: E501 + "is_aws_self_service": (bool,), # noqa: E501 + "saml_settings": (SamlSettings,), # noqa: E501 + "is_right_sizing_enabled": (bool,), # noqa: E501 + "max_projects_allowed": (int,), # noqa: E501 + "ce_admin_properties": (AccountCeAdminProperties,), # noqa: E501 + "owner_id": (str,), # noqa: E501 + "creation_datetime": (datetime,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "target_credentials_api": "targetCredentialsApi", # noqa: E501 + "allow_archiving_default_value": "allowArchivingDefaultValue", # noqa: E501 + "per_account_user_pool": "perAccountUserPool", # noqa: E501 + "default_license_type": "defaultLicenseType", # noqa: E501 + "is_med_one": "isMedOne", # noqa: E501 + "id": "id", # noqa: E501 + "invite_token_expiry_minutes": "inviteTokenExpiryMinutes", # noqa: E501 + "is_gcp_self_service": "isGcpSelfService", # noqa: E501 + "is_dr_trial": "isDrTrial", # noqa: E501 + "is_arm_self_service": "isArmSelfService", # noqa: E501 + "is_aws_self_service": "isAwsSelfService", # noqa: E501 + "saml_settings": "samlSettings", # noqa: E501 + "is_right_sizing_enabled": "isRightSizingEnabled", # noqa: E501 + "max_projects_allowed": "maxProjectsAllowed", # noqa: E501 + "ce_admin_properties": "ceAdminProperties", # noqa: E501 + "owner_id": "ownerId", # noqa: E501 + "creation_datetime": "creationDatetime", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Account - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + target_credentials_api (bool): used to enable targetCloudCredentials. This API should be replaced soon.. [optional] # noqa: E501 + allow_archiving_default_value (bool): [optional] # noqa: E501 + per_account_user_pool (bool): [optional] # noqa: E501 + default_license_type (str): [optional] # noqa: E501 + is_med_one (bool): [optional] # noqa: E501 + id (str): UUID of the account. [optional] # noqa: E501 + invite_token_expiry_minutes (int): [optional] # noqa: E501 + is_gcp_self_service (bool): [optional] # noqa: E501 + is_dr_trial (bool): [optional] # noqa: E501 + is_arm_self_service (bool): [optional] # noqa: E501 + is_aws_self_service (bool): [optional] # noqa: E501 + saml_settings (SamlSettings): [optional] # noqa: E501 + is_right_sizing_enabled (bool): [optional] # noqa: E501 + max_projects_allowed (int): [optional] # noqa: E501 + ce_admin_properties (AccountCeAdminProperties): [optional] # noqa: E501 + owner_id (str): Account Owner (a User). [optional] # noqa: E501 + creation_datetime (datetime): Date and time in which account was created. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/account_ce_admin_properties.py b/cloudendure/model/account_ce_admin_properties.py new file mode 100644 index 000000000..2c8db643b --- /dev/null +++ b/cloudendure/model/account_ce_admin_properties.py @@ -0,0 +1,189 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class AccountCeAdminProperties(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ("state",): { + "ACTIVE": "ACTIVE", + "NOT_ACTIVE": "NOT_ACTIVE", + "UPGRADING": "UPGRADING", + }, + } + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "state": (str,), # noqa: E501 + "version": (str,), # noqa: E501 + "account_owner_username": (str,), # noqa: E501 + "apis_per_minute": (int,), # noqa: E501 + "comments": (str,), # noqa: E501 + "history": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "state": "state", # noqa: E501 + "version": "version", # noqa: E501 + "account_owner_username": "accountOwnerUsername", # noqa: E501 + "apis_per_minute": "apisPerMinute", # noqa: E501 + "comments": "comments", # noqa: E501 + "history": "history", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """AccountCeAdminProperties - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + state (str): [optional] # noqa: E501 + version (str): [optional] # noqa: E501 + account_owner_username (str): [optional] # noqa: E501 + apis_per_minute (int): [optional] # noqa: E501 + comments (str): [optional] # noqa: E501 + history (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/account_link.py b/cloudendure/model/account_link.py new file mode 100644 index 000000000..0914e9b3e --- /dev/null +++ b/cloudendure/model/account_link.py @@ -0,0 +1,177 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class AccountLink(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "request_type": (str,), # noqa: E501 + "email": (str,), # noqa: E501 + "request_link": (str,), # noqa: E501 + "account_uuid": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "request_type": "request_type", # noqa: E501 + "email": "email", # noqa: E501 + "request_link": "request_link", # noqa: E501 + "account_uuid": "account_uuid", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """AccountLink - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + request_type (str): [optional] # noqa: E501 + email (str): [optional] # noqa: E501 + request_link (str): [optional] # noqa: E501 + account_uuid (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/account_link_list.py b/cloudendure/model/account_link_list.py new file mode 100644 index 000000000..08442d0dd --- /dev/null +++ b/cloudendure/model/account_link_list.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.account_link import AccountLink + + globals()["AccountLink"] = AccountLink + + +class AccountLinkList(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([AccountLink],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """AccountLinkList - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([AccountLink]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/account_request.py b/cloudendure/model/account_request.py new file mode 100644 index 000000000..19ab9803c --- /dev/null +++ b/cloudendure/model/account_request.py @@ -0,0 +1,197 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class AccountRequest(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ("flow",): { + "MIGRATION_REGISTER": "MIGRATION_REGISTER", + }, + ("request_type",): { + "REGISTER": "REGISTER", + "RESET_PASSWORD": "RESET_PASSWORD", + }, + } + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "request_link": (str,), # noqa: E501 + "validation_token": (str,), # noqa: E501 + "flow": (str,), # noqa: E501 + "email": (str,), # noqa: E501 + "request_type": (str,), # noqa: E501 + "registration_token": (str,), # noqa: E501 + "password": (str,), # noqa: E501 + "id": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "request_link": "request_link", # noqa: E501 + "validation_token": "validation_token", # noqa: E501 + "flow": "flow", # noqa: E501 + "email": "email", # noqa: E501 + "request_type": "request_type", # noqa: E501 + "registration_token": "registration_token", # noqa: E501 + "password": "password", # noqa: E501 + "id": "id", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """AccountRequest - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + request_link (str): [optional] # noqa: E501 + validation_token (str): [optional] # noqa: E501 + flow (str): [optional] if omitted the server will use the default value of "MIGRATION_REGISTER" # noqa: E501 + email (str): [optional] # noqa: E501 + request_type (str): [optional] # noqa: E501 + registration_token (str): [optional] # noqa: E501 + password (str): [optional] # noqa: E501 + id (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/account_request_list.py b/cloudendure/model/account_request_list.py new file mode 100644 index 000000000..172ab1532 --- /dev/null +++ b/cloudendure/model/account_request_list.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.account_request import AccountRequest + + globals()["AccountRequest"] = AccountRequest + + +class AccountRequestList(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([AccountRequest],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """AccountRequestList - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([AccountRequest]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/accounts_list.py b/cloudendure/model/accounts_list.py new file mode 100644 index 000000000..d3a7184d7 --- /dev/null +++ b/cloudendure/model/accounts_list.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.account import Account + + globals()["Account"] = Account + + +class AccountsList(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([Account],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """AccountsList - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([Account]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/agent_next_replication_init_request.py b/cloudendure/model/agent_next_replication_init_request.py new file mode 100644 index 000000000..b77e7bdff --- /dev/null +++ b/cloudendure/model/agent_next_replication_init_request.py @@ -0,0 +1,168 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class AgentNextReplicationInitRequest(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "duration_from_now": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "duration_from_now": "durationFromNow", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """AgentNextReplicationInitRequest - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + duration_from_now (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/all_project_features.py b/cloudendure/model/all_project_features.py new file mode 100644 index 000000000..46ab53e70 --- /dev/null +++ b/cloudendure/model/all_project_features.py @@ -0,0 +1,295 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.project_ce_admin_properties import ProjectCeAdminProperties + + globals()["ProjectCeAdminProperties"] = ProjectCeAdminProperties + + +class AllProjectFeatures(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "google": (bool,), # noqa: E501 + "no_public_ips": (bool,), # noqa: E501 + "enable_ubuntu18_converter": (bool,), # noqa: E501 + "windows_converters": (bool,), # noqa: E501 + "force_reversed_handshake_direction": (bool,), # noqa: E501 + "no_converters": (bool,), # noqa: E501 + "vio": (bool,), # noqa: E501 + "aws_pending_snapshots_for_consistent_snapshot": (int,), # noqa: E501 + "no_cloud": (bool,), # noqa: E501 + "consistent_snapshot_creation_interval_min": (int,), # noqa: E501 + "is_demo": (bool,), # noqa: E501 + "mtu_size": (int,), # noqa: E501 + "allow_byol_on_dedicated_instance": (bool,), # noqa: E501 + "force_no_rescan_after_reboot": (bool,), # noqa: E501 + "max_converter_volumes": (int,), # noqa: E501 + "azurearm": (bool,), # noqa: E501 + "vcenter": (bool,), # noqa: E501 + "allowed_az_ids": (str,), # noqa: E501 + "subnet_filter": (str,), # noqa: E501 + "disable_target_region_cleanup_protection": (bool,), # noqa: E501 + "no_snapshot_considered_lag_milliseconds": (int,), # noqa: E501 + "aws_pending_snapshots_for_disconnection": (int,), # noqa: E501 + "no_converters_windows": (bool,), # noqa: E501 + "disable_replica_creation": (bool,), # noqa: E501 + "aws_pending_snapshots_for_consistency_lost": (int,), # noqa: E501 + "aws": (bool,), # noqa: E501 + "aws_pending_snapshots_for_inconsistent_snapshot": (int,), # noqa: E501 + "max_replicator_volumes": (int,), # noqa: E501 + "allow_recovery_plans": (bool,), # noqa: E501 + "snapshot_creation_interval_min": (int,), # noqa: E501 + "snapshot_on_demand_timeout": (int,), # noqa: E501 + "allow_archiving": (bool,), # noqa: E501 + "allow_no_rescan_after_reboot": (bool,), # noqa: E501 + "custom_replicator_instance_type": (str,), # noqa: E501 + "disable_snapshot_on_demand": (bool,), # noqa: E501 + "disable_install": (bool,), # noqa: E501 + "hdd": (bool,), # noqa: E501 + "snapshot_creation_interval_max": (int,), # noqa: E501 + "ce_admin_properties": (ProjectCeAdminProperties,), # noqa: E501 + "azure": (bool,), # noqa: E501 + "aws_pending_snapshots_for_user_initiated": (int,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "google": "google", # noqa: E501 + "no_public_ips": "no_public_ips", # noqa: E501 + "enable_ubuntu18_converter": "enable_ubuntu18_converter", # noqa: E501 + "windows_converters": "windows_converters", # noqa: E501 + "force_reversed_handshake_direction": "force_reversed_handshake_direction", # noqa: E501 + "no_converters": "no_converters", # noqa: E501 + "vio": "vio", # noqa: E501 + "aws_pending_snapshots_for_consistent_snapshot": "aws_pending_snapshots_for_consistent_snapshot", # noqa: E501 + "no_cloud": "no_cloud", # noqa: E501 + "consistent_snapshot_creation_interval_min": "consistent_snapshot_creation_interval_min", # noqa: E501 + "is_demo": "is_demo", # noqa: E501 + "mtu_size": "mtu_size", # noqa: E501 + "allow_byol_on_dedicated_instance": "allow_byol_on_dedicated_instance", # noqa: E501 + "force_no_rescan_after_reboot": "force_no_rescan_after_reboot", # noqa: E501 + "max_converter_volumes": "max_converter_volumes", # noqa: E501 + "azurearm": "azurearm", # noqa: E501 + "vcenter": "vcenter", # noqa: E501 + "allowed_az_ids": "allowed_az_ids", # noqa: E501 + "subnet_filter": "subnet_filter", # noqa: E501 + "disable_target_region_cleanup_protection": "disable_target_region_cleanup_protection", # noqa: E501 + "no_snapshot_considered_lag_milliseconds": "no_snapshot_considered_lag_milliseconds", # noqa: E501 + "aws_pending_snapshots_for_disconnection": "aws_pending_snapshots_for_disconnection", # noqa: E501 + "no_converters_windows": "no_converters_windows", # noqa: E501 + "disable_replica_creation": "disable_replica_creation", # noqa: E501 + "aws_pending_snapshots_for_consistency_lost": "aws_pending_snapshots_for_consistency_lost", # noqa: E501 + "aws": "aws", # noqa: E501 + "aws_pending_snapshots_for_inconsistent_snapshot": "aws_pending_snapshots_for_inconsistent_snapshot", # noqa: E501 + "max_replicator_volumes": "max_replicator_volumes", # noqa: E501 + "allow_recovery_plans": "allow_recovery_plans", # noqa: E501 + "snapshot_creation_interval_min": "snapshot_creation_interval_min", # noqa: E501 + "snapshot_on_demand_timeout": "snapshot_on_demand_timeout", # noqa: E501 + "allow_archiving": "allow_archiving", # noqa: E501 + "allow_no_rescan_after_reboot": "allow_no_rescan_after_reboot", # noqa: E501 + "custom_replicator_instance_type": "custom_replicator_instance_type", # noqa: E501 + "disable_snapshot_on_demand": "disable_snapshot_on_demand", # noqa: E501 + "disable_install": "disable_install", # noqa: E501 + "hdd": "hdd", # noqa: E501 + "snapshot_creation_interval_max": "snapshot_creation_interval_max", # noqa: E501 + "ce_admin_properties": "ceAdminProperties", # noqa: E501 + "azure": "azure", # noqa: E501 + "aws_pending_snapshots_for_user_initiated": "aws_pending_snapshots_for_user_initiated", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """AllProjectFeatures - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + google (bool): [optional] # noqa: E501 + no_public_ips (bool): [optional] # noqa: E501 + enable_ubuntu18_converter (bool): [optional] # noqa: E501 + windows_converters (bool): [optional] # noqa: E501 + force_reversed_handshake_direction (bool): [optional] # noqa: E501 + no_converters (bool): [optional] # noqa: E501 + vio (bool): [optional] # noqa: E501 + aws_pending_snapshots_for_consistent_snapshot (int): [optional] # noqa: E501 + no_cloud (bool): [optional] # noqa: E501 + consistent_snapshot_creation_interval_min (int): [optional] # noqa: E501 + is_demo (bool): [optional] # noqa: E501 + mtu_size (int): [optional] # noqa: E501 + allow_byol_on_dedicated_instance (bool): [optional] # noqa: E501 + force_no_rescan_after_reboot (bool): [optional] # noqa: E501 + max_converter_volumes (int): [optional] # noqa: E501 + azurearm (bool): [optional] # noqa: E501 + vcenter (bool): [optional] # noqa: E501 + allowed_az_ids (str): [optional] # noqa: E501 + subnet_filter (str): [optional] # noqa: E501 + disable_target_region_cleanup_protection (bool): [optional] # noqa: E501 + no_snapshot_considered_lag_milliseconds (int): [optional] # noqa: E501 + aws_pending_snapshots_for_disconnection (int): [optional] # noqa: E501 + no_converters_windows (bool): [optional] # noqa: E501 + disable_replica_creation (bool): [optional] # noqa: E501 + aws_pending_snapshots_for_consistency_lost (int): [optional] # noqa: E501 + aws (bool): [optional] # noqa: E501 + aws_pending_snapshots_for_inconsistent_snapshot (int): [optional] # noqa: E501 + max_replicator_volumes (int): [optional] # noqa: E501 + allow_recovery_plans (bool): [optional] # noqa: E501 + snapshot_creation_interval_min (int): [optional] # noqa: E501 + snapshot_on_demand_timeout (int): [optional] # noqa: E501 + allow_archiving (bool): [optional] # noqa: E501 + allow_no_rescan_after_reboot (bool): [optional] # noqa: E501 + custom_replicator_instance_type (str): [optional] # noqa: E501 + disable_snapshot_on_demand (bool): [optional] # noqa: E501 + disable_install (bool): [optional] # noqa: E501 + hdd (bool): [optional] # noqa: E501 + snapshot_creation_interval_max (int): [optional] # noqa: E501 + ce_admin_properties (ProjectCeAdminProperties): [optional] # noqa: E501 + azure (bool): [optional] # noqa: E501 + aws_pending_snapshots_for_user_initiated (int): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/audit_log.py b/cloudendure/model/audit_log.py new file mode 100644 index 000000000..94c4463d8 --- /dev/null +++ b/cloudendure/model/audit_log.py @@ -0,0 +1,178 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.audit_log_entry import AuditLogEntry + + globals()["AuditLogEntry"] = AuditLogEntry + + +class AuditLog(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([AuditLogEntry],), # noqa: E501 + "has_more_results": (bool,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + "has_more_results": "hasMoreResults", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """AuditLog - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([AuditLogEntry]): [optional] # noqa: E501 + has_more_results (bool): AuditLog API will only return max 1500 entries so this is a way to know if there are more. . [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/audit_log_changed_field.py b/cloudendure/model/audit_log_changed_field.py new file mode 100644 index 000000000..26f87438c --- /dev/null +++ b/cloudendure/model/audit_log_changed_field.py @@ -0,0 +1,174 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class AuditLogChangedField(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "field_name": (str,), # noqa: E501 + "new_value": (str,), # noqa: E501 + "old_value": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "field_name": "fieldName", # noqa: E501 + "new_value": "newValue", # noqa: E501 + "old_value": "oldValue", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """AuditLogChangedField - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + field_name (str): [optional] # noqa: E501 + new_value (str): [optional] # noqa: E501 + old_value (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/audit_log_entry.py b/cloudendure/model/audit_log_entry.py new file mode 100644 index 000000000..472b0ee58 --- /dev/null +++ b/cloudendure/model/audit_log_entry.py @@ -0,0 +1,199 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.audit_log_changed_field import AuditLogChangedField + from cloudendure.model.audit_log_entry_participating_machines import ( + AuditLogEntryParticipatingMachines, + ) + + globals()["AuditLogChangedField"] = AuditLogChangedField + globals()["AuditLogEntryParticipatingMachines"] = AuditLogEntryParticipatingMachines + + +class AuditLogEntry(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "username": (str,), # noqa: E501 + "event_name": (str,), # noqa: E501 + "participating_machines": ( + [AuditLogEntryParticipatingMachines], + ), # noqa: E501 + "description": (str,), # noqa: E501 + "changed_fields": ([AuditLogChangedField],), # noqa: E501 + "timestamp": (datetime,), # noqa: E501 + "job_id": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "username": "username", # noqa: E501 + "event_name": "eventName", # noqa: E501 + "participating_machines": "participatingMachines", # noqa: E501 + "description": "description", # noqa: E501 + "changed_fields": "changedFields", # noqa: E501 + "timestamp": "timestamp", # noqa: E501 + "job_id": "jobId", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """AuditLogEntry - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + username (str): username (typically an email) of user who initiated action (in UI or via API) which resulted in this audit log entry being added. . [optional] # noqa: E501 + event_name (str): Unique event name. One of: - replicationConfigurationChanged - blueprintChanged . [optional] # noqa: E501 + participating_machines ([AuditLogEntryParticipatingMachines]): List of machine-identifiers objects. Only present if Audit Log entry relates to one or more machines. . [optional] # noqa: E501 + description (str): Long-form human-readable description of Audit Log entry.. [optional] # noqa: E501 + changed_fields ([AuditLogChangedField]): Map of fields that have been changed and their old an new values. Only present when eventName is replicationConfigurationChanged or blueprintChanged . [optional] # noqa: E501 + timestamp (datetime): RFC 3339 compliant date-time string of when Audit Log entry was created/ event described by audit log entry happened. . [optional] # noqa: E501 + job_id (str): ID of Job due to which this log entry was created (only included if log entry is result of a Job). [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/audit_log_entry_participating_machines.py b/cloudendure/model/audit_log_entry_participating_machines.py new file mode 100644 index 000000000..18661f32e --- /dev/null +++ b/cloudendure/model/audit_log_entry_participating_machines.py @@ -0,0 +1,174 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class AuditLogEntryParticipatingMachines(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "machine_cloud_endure_id": (str,), # noqa: E501 + "machine_cloud_name": (str,), # noqa: E501 + "machine_cloud_id": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "machine_cloud_endure_id": "machineCloudEndureId", # noqa: E501 + "machine_cloud_name": "machineCloudName", # noqa: E501 + "machine_cloud_id": "machineCloudId", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """AuditLogEntryParticipatingMachines - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + machine_cloud_endure_id (str): [optional] # noqa: E501 + machine_cloud_name (str): Only present when machine has been given a name in the cloud in which it exists.. [optional] # noqa: E501 + machine_cloud_id (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/bandwidth_throttling.py b/cloudendure/model/bandwidth_throttling.py new file mode 100644 index 000000000..0a595b338 --- /dev/null +++ b/cloudendure/model/bandwidth_throttling.py @@ -0,0 +1,168 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class BandwidthThrottling(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "bandwidth_throttling": (int,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "bandwidth_throttling": "bandwidthThrottling", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """BandwidthThrottling - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + bandwidth_throttling (int): Mbps to use for Data Replication (zero means no throttling).. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/blueprint.py b/cloudendure/model/blueprint.py new file mode 100644 index 000000000..f95f220ce --- /dev/null +++ b/cloudendure/model/blueprint.py @@ -0,0 +1,309 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.blueprint_disks import BlueprintDisks + from cloudendure.model.replication_configuration_replication_tags import ( + ReplicationConfigurationReplicationTags, + ) + + globals()["BlueprintDisks"] = BlueprintDisks + globals()[ + "ReplicationConfigurationReplicationTags" + ] = ReplicationConfigurationReplicationTags + + +class Blueprint(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ("public_ip_action",): { + "ALLOCATE": "ALLOCATE", + "DONT_ALLOCATE": "DONT_ALLOCATE", + "AS_SUBNET": "AS_SUBNET", + }, + ("security_group_action",): { + "FROM_POLICY": "FROM_POLICY", + }, + ("tenancy",): { + "SHARED": "SHARED", + "DEDICATED": "DEDICATED", + "HOST": "HOST", + }, + ("private_ip_action",): { + "CREATE_NEW": "CREATE_NEW", + "COPY_ORIGIN": "COPY_ORIGIN", + "CUSTOM_IP": "CUSTOM_IP", + "USE_NETWORK_INTERFACE": "USE_NETWORK_INTERFACE", + }, + ("static_ip_action",): { + "EXISTING": "EXISTING", + "DONT_CREATE": "DONT_CREATE", + "CREATE_NEW": "CREATE_NEW", + "IF_IN_ORIGIN": "IF_IN_ORIGIN", + }, + } + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "iam_role": (str,), # noqa: E501 + "scsi_adapter_type": (str,), # noqa: E501 + "public_ip_action": (str,), # noqa: E501 + "machine_name": (str,), # noqa: E501 + "cpus": (int,), # noqa: E501 + "security_group_ids": ([str],), # noqa: E501 + "run_after_launch": (bool,), # noqa: E501 + "recommended_private_ip": (str,), # noqa: E501 + "instance_type": (str,), # noqa: E501 + "mb_ram": (int,), # noqa: E501 + "network_interface": (str,), # noqa: E501 + "subnet_ids": ([str],), # noqa: E501 + "cores_per_cpu": (int,), # noqa: E501 + "recommended_instance_type": (str,), # noqa: E501 + "force_uefi": (bool,), # noqa: E501 + "static_ip": (str,), # noqa: E501 + "launch_on_instance_id": (str,), # noqa: E501 + "tags": ([ReplicationConfigurationReplicationTags],), # noqa: E501 + "security_group_action": (str,), # noqa: E501 + "private_ips": ([str],), # noqa: E501 + "tenancy": (str,), # noqa: E501 + "compute_location_id": (str,), # noqa: E501 + "subnets_host_project": (str,), # noqa: E501 + "logical_location_id": (str,), # noqa: E501 + "network_adapter_type": (str,), # noqa: E501 + "byol_on_dedicated_instance": (bool,), # noqa: E501 + "placement_group": (str,), # noqa: E501 + "machine_id": (str,), # noqa: E501 + "region": (str,), # noqa: E501 + "disks": ([BlueprintDisks],), # noqa: E501 + "private_ip_action": (str,), # noqa: E501 + "static_ip_action": (str,), # noqa: E501 + "id": (str,), # noqa: E501 + "dedicated_host_identifier": (str,), # noqa: E501 + "use_shared_ram": (bool,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "iam_role": "iamRole", # noqa: E501 + "scsi_adapter_type": "scsiAdapterType", # noqa: E501 + "public_ip_action": "publicIPAction", # noqa: E501 + "machine_name": "machineName", # noqa: E501 + "cpus": "cpus", # noqa: E501 + "security_group_ids": "securityGroupIDs", # noqa: E501 + "run_after_launch": "runAfterLaunch", # noqa: E501 + "recommended_private_ip": "recommendedPrivateIP", # noqa: E501 + "instance_type": "instanceType", # noqa: E501 + "mb_ram": "mbRam", # noqa: E501 + "network_interface": "networkInterface", # noqa: E501 + "subnet_ids": "subnetIDs", # noqa: E501 + "cores_per_cpu": "coresPerCpu", # noqa: E501 + "recommended_instance_type": "recommendedInstanceType", # noqa: E501 + "force_uefi": "forceUEFI", # noqa: E501 + "static_ip": "staticIp", # noqa: E501 + "launch_on_instance_id": "launchOnInstanceId", # noqa: E501 + "tags": "tags", # noqa: E501 + "security_group_action": "securityGroupAction", # noqa: E501 + "private_ips": "privateIPs", # noqa: E501 + "tenancy": "tenancy", # noqa: E501 + "compute_location_id": "computeLocationId", # noqa: E501 + "subnets_host_project": "subnetsHostProject", # noqa: E501 + "logical_location_id": "logicalLocationId", # noqa: E501 + "network_adapter_type": "networkAdapterType", # noqa: E501 + "byol_on_dedicated_instance": "byolOnDedicatedInstance", # noqa: E501 + "placement_group": "placementGroup", # noqa: E501 + "machine_id": "machineId", # noqa: E501 + "region": "region", # noqa: E501 + "disks": "disks", # noqa: E501 + "private_ip_action": "privateIPAction", # noqa: E501 + "static_ip_action": "staticIpAction", # noqa: E501 + "id": "id", # noqa: E501 + "dedicated_host_identifier": "dedicatedHostIdentifier", # noqa: E501 + "use_shared_ram": "useSharedRam", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Blueprint - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + iam_role (str): AWS only. Possible values can be fetched from the Region object.. [optional] # noqa: E501 + scsi_adapter_type (str): Currently relevant for vCenter cloud only. Possible values can be fetched from the Region object.. [optional] # noqa: E501 + public_ip_action (str): Whether to allocate an ephemeral public IP, or not. AS_SUBNET causes CloudEndure to copy this property from the source machine.. [optional] # noqa: E501 + machine_name (str): [optional] # noqa: E501 + cpus (int): Number of CPUs per per Target machine; Currently relevant for vCenter cloud only; Max value can be fetched from the maxCpusPerMachine property of the Region object. . [optional] # noqa: E501 + security_group_ids ([str]): AWS only. The security groups that will be applied to the target machine. Possible values can be fetched from the Region object.. [optional] # noqa: E501 + run_after_launch (bool): AWS only. Whether to power on the launched target machine after launch. True by default.. [optional] # noqa: E501 + recommended_private_ip (str): The private IP address recommended for use with this machine.. [optional] # noqa: E501 + instance_type (str): Possible values can be fetched from the Region object, plus special values \"COPY_ORIGIN\" or \"CUSTOM\". [optional] # noqa: E501 + mb_ram (int): MB RAM per Target machine; Currently relevant for vCenter cloud only; Max value can be fetched from the maxMbRamPerMachine property of the Region object. . [optional] # noqa: E501 + network_interface (str): [optional] # noqa: E501 + subnet_ids ([str]): AWS only. Configures a subnets in which the instance network interface will take part. Possible values can be fetched from the Region object.. [optional] # noqa: E501 + cores_per_cpu (int): Number of CPU cores per CPU in Target machine; Currently relevant for vCenter cloud only.. [optional] # noqa: E501 + recommended_instance_type (str): When instance rightsizing is enabled, the instance type suitable for the source machine's HW. [optional] # noqa: E501 + force_uefi (bool): [optional] # noqa: E501 + static_ip (str): Possible values can be fetched from the Region object.. [optional] # noqa: E501 + launch_on_instance_id (str): instance id for target machine managed by AMS.. [optional] # noqa: E501 + tags ([ReplicationConfigurationReplicationTags]): AWS only. Tags that will be applied to the target machine.. [optional] # noqa: E501 + security_group_action (str): How to assign a security group to the target machine.. [optional] if omitted the server will use the default value of "FROM_POLICY" # noqa: E501 + private_ips ([str]): [optional] # noqa: E501 + tenancy (str): [optional] # noqa: E501 + compute_location_id (str): [optional] # noqa: E501 + subnets_host_project (str): GCP only. Host project for cross project network subnet.. [optional] # noqa: E501 + logical_location_id (str): vcenter = vmFolder; relates to $ref LogicalLocation. [optional] # noqa: E501 + network_adapter_type (str): Currently relevant for vCenter cloud only. Possible values can be fetched from the Region object.. [optional] # noqa: E501 + byol_on_dedicated_instance (bool): specifies whether to use byol windows license if dedicated instance tenancy is selected.. [optional] # noqa: E501 + placement_group (str): AWS only. Possible values can be fetched from the Region object.. [optional] # noqa: E501 + machine_id (str): [optional] # noqa: E501 + region (str): [optional] # noqa: E501 + disks ([BlueprintDisks]): AWS only. Target machine disk properties.. [optional] # noqa: E501 + private_ip_action (str): [optional] # noqa: E501 + static_ip_action (str): [optional] # noqa: E501 + id (str): [optional] # noqa: E501 + dedicated_host_identifier (str): [optional] # noqa: E501 + use_shared_ram (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/blueprint_disks.py b/cloudendure/model/blueprint_disks.py new file mode 100644 index 000000000..c4a4475df --- /dev/null +++ b/cloudendure/model/blueprint_disks.py @@ -0,0 +1,195 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class BlueprintDisks(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ("type",): { + "COPY_ORIGIN": "COPY_ORIGIN", + "STANDARD": "STANDARD", + "SSD": "SSD", + "PROVISIONED_SSD": "PROVISIONED_SSD", + "ST1": "ST1", + "SC1": "SC1", + "PROVISIONED_IO2": "PROVISIONED_IO2", + "GP3": "GP3", + }, + } + + validations = { + ("iops",): { + "inclusive_minimum": 0, + }, + ("throughput",): { + "inclusive_minimum": 0, + }, + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "type": (str,), # noqa: E501 + "iops": (int,), # noqa: E501 + "throughput": (int,), # noqa: E501 + "name": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "type": "type", # noqa: E501 + "iops": "iops", # noqa: E501 + "throughput": "throughput", # noqa: E501 + "name": "name", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """BlueprintDisks - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + type (str): The type of disk to allocate in the target machine. COPY_ORIGIN will use the source setting.. [optional] # noqa: E501 + iops (int): [optional] # noqa: E501 + throughput (int): [optional] # noqa: E501 + name (str): Disk name as appears in the source machine object.. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/blueprint_list.py b/cloudendure/model/blueprint_list.py new file mode 100644 index 000000000..ba0d62928 --- /dev/null +++ b/cloudendure/model/blueprint_list.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.blueprint import Blueprint + + globals()["Blueprint"] = Blueprint + + +class BlueprintList(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([Blueprint],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """BlueprintList - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([Blueprint]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/cloud.py b/cloudendure/model/cloud.py new file mode 100644 index 000000000..ce5297779 --- /dev/null +++ b/cloudendure/model/cloud.py @@ -0,0 +1,190 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class Cloud(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ("roles",): { + "SOURCE": "SOURCE", + "TARGET": "TARGET", + "BACKUP_TARGET": "BACKUP_TARGET", + "FAILBACK": "FAILBACK", + }, + ("name",): { + "AWS": "AWS", + "GCP": "GCP", + "AZURE": "AZURE", + "AZURE_ARM": "AZURE_ARM", + "VCENTER": "VCENTER", + "GENERIC": "GENERIC", + "VIO_BEZEQ": "VIO_BEZEQ", + }, + } + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "id": (str,), # noqa: E501 + "roles": ([str],), # noqa: E501 + "name": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "id": "id", # noqa: E501 + "roles": "roles", # noqa: E501 + "name": "name", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Cloud - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + id (str): [optional] # noqa: E501 + roles ([str]): [optional] # noqa: E501 + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/cloud_credentials.py b/cloudendure/model/cloud_credentials.py new file mode 100644 index 000000000..c7b34bf11 --- /dev/null +++ b/cloudendure/model/cloud_credentials.py @@ -0,0 +1,180 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class CloudCredentials(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "id": (str,), # noqa: E501 + "public_key": (str,), # noqa: E501 + "account_identifier": (str,), # noqa: E501 + "cloud": (str,), # noqa: E501 + "name": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "id": "id", # noqa: E501 + "public_key": "publicKey", # noqa: E501 + "account_identifier": "accountIdentifier", # noqa: E501 + "cloud": "cloud", # noqa: E501 + "name": "name", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """CloudCredentials - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + id (str): [optional] # noqa: E501 + public_key (str): The public part of the Cloud credentials. For AWS - access key ID; for GCP - user email; for Azure - SHA1 digestion of the certificate file. . [optional] # noqa: E501 + account_identifier (str): An ID provided by the cloud for the user account.. [optional] # noqa: E501 + cloud (str): [optional] # noqa: E501 + name (str): An optional (can be empty), user provided, descriptive name.. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/cloud_credentials_list.py b/cloudendure/model/cloud_credentials_list.py new file mode 100644 index 000000000..c5af41bc9 --- /dev/null +++ b/cloudendure/model/cloud_credentials_list.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.cloud_credentials import CloudCredentials + + globals()["CloudCredentials"] = CloudCredentials + + +class CloudCredentialsList(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([CloudCredentials],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """CloudCredentialsList - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([CloudCredentials]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/cloud_credentials_request.py b/cloudendure/model/cloud_credentials_request.py new file mode 100644 index 000000000..7419e5432 --- /dev/null +++ b/cloudendure/model/cloud_credentials_request.py @@ -0,0 +1,192 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class CloudCredentialsRequest(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = { + ("private_key",): { + "regex": { + "pattern": r"^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$", # noqa: E501 + }, + }, + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "cloud_id": (str,), # noqa: E501 + "public_key": (str,), # noqa: E501 + "name": (str,), # noqa: E501 + "private_key": (str,), # noqa: E501 + "account_identifier": (str,), # noqa: E501 + "id": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "cloud_id": "cloudId", # noqa: E501 + "public_key": "publicKey", # noqa: E501 + "name": "name", # noqa: E501 + "private_key": "privateKey", # noqa: E501 + "account_identifier": "accountIdentifier", # noqa: E501 + "id": "id", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, cloud_id, *args, **kwargs): # noqa: E501 + """CloudCredentialsRequest - a model defined in OpenAPI + + Args: + cloud_id (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + public_key (str): The public part of the Cloud credentials. For AWS - The access key ID, For GCP and Azure - N/A.. [optional] # noqa: E501 + name (str): An optional (can be empty), user provided, descriptive name.. [optional] # noqa: E501 + private_key (str): Cloud credentials secret, Base64-encoded. For AWS - The secret access key, For GCP - The private key in JSON format, For Azure - The certificate file.. [optional] # noqa: E501 + account_identifier (str): Cloud account identifier. For AWS - N/A, For GCP - The project ID, For Azure - The subscription ID.. [optional] # noqa: E501 + id (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.cloud_id = cloud_id + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/clouds_list.py b/cloudendure/model/clouds_list.py new file mode 100644 index 000000000..958ea33bc --- /dev/null +++ b/cloudendure/model/clouds_list.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.cloud import Cloud + + globals()["Cloud"] = Cloud + + +class CloudsList(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([Cloud],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """CloudsList - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([Cloud]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/compute_location.py b/cloudendure/model/compute_location.py new file mode 100644 index 000000000..fc0c80f73 --- /dev/null +++ b/cloudendure/model/compute_location.py @@ -0,0 +1,174 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class ComputeLocation(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "is_encryption_supported": (bool,), # noqa: E501 + "location_id": (str,), # noqa: E501 + "name": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "is_encryption_supported": "isEncryptionSupported", # noqa: E501 + "location_id": "locationId", # noqa: E501 + "name": "name", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ComputeLocation - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + is_encryption_supported (bool): [optional] # noqa: E501 + location_id (str): [optional] # noqa: E501 + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/configurations.py b/cloudendure/model/configurations.py new file mode 100644 index 000000000..e9744de1d --- /dev/null +++ b/cloudendure/model/configurations.py @@ -0,0 +1,171 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class Configurations(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "name": (str,), # noqa: E501 + "value": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "name": "name", # noqa: E501 + "value": "value", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Configurations - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + value (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/configurations_list.py b/cloudendure/model/configurations_list.py new file mode 100644 index 000000000..a45f49b3d --- /dev/null +++ b/cloudendure/model/configurations_list.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.configurations import Configurations + + globals()["Configurations"] = Configurations + + +class ConfigurationsList(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([Configurations],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ConfigurationsList - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([Configurations]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/cslp_item.py b/cloudendure/model/cslp_item.py new file mode 100644 index 000000000..b010ad055 --- /dev/null +++ b/cloudendure/model/cslp_item.py @@ -0,0 +1,186 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class CSLPItem(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "live_patch_comment": (str,), # noqa: E501 + "ce_versions": ([str],), # noqa: E501 + "live_patch_type": (str,), # noqa: E501 + "script_text": (str,), # noqa: E501 + "sha256sum_orig": (str,), # noqa: E501 + "script_name": (str,), # noqa: E501 + "sha256sum": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "live_patch_comment": "live_patch_comment", # noqa: E501 + "ce_versions": "ce_versions", # noqa: E501 + "live_patch_type": "live_patch_type", # noqa: E501 + "script_text": "script_text", # noqa: E501 + "sha256sum_orig": "sha256sum_orig", # noqa: E501 + "script_name": "script_name", # noqa: E501 + "sha256sum": "sha256sum", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """CSLPItem - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + live_patch_comment (str): script live patch reason - like 'git comment'. [optional] # noqa: E501 + ce_versions ([str]): all management versions for this specific script content. [optional] # noqa: E501 + live_patch_type (str): type of the live patch in DB. [optional] # noqa: E501 + script_text (str): multi-line script text. [optional] # noqa: E501 + sha256sum_orig (str): SHA-256 of the not runnable script with 'constants.CE_DOMAIN_KEY' placeholder (empty CE DNS as stored in git source control). [optional] # noqa: E501 + script_name (str): name relative to conversion_scripts sub-folder, eg. \"windows/postboot/setup_win_replica.bat\". [optional] # noqa: E501 + sha256sum (str): SHA-256 of the runnable script with actual CE DNS replacing 'constants.CE_DOMAIN_KEY'. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/cslp_request.py b/cloudendure/model/cslp_request.py new file mode 100644 index 000000000..36057d613 --- /dev/null +++ b/cloudendure/model/cslp_request.py @@ -0,0 +1,187 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.cslp_item import CSLPItem + + globals()["CSLPItem"] = CSLPItem + + +class CSLPRequest(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "script_names": ([str],), # noqa: E501 + "live_patch_comment": (str,), # noqa: E501 + "operation": (str,), # noqa: E501 + "ce_version": (str,), # noqa: E501 + "script_items": ([CSLPItem],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "script_names": "script_names", # noqa: E501 + "live_patch_comment": "live_patch_comment", # noqa: E501 + "operation": "operation", # noqa: E501 + "ce_version": "ce_version", # noqa: E501 + "script_items": "script_items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """CSLPRequest - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + script_names ([str]): list of names relative to conversion_scripts sub-folder as a query filter parameter. [optional] # noqa: E501 + live_patch_comment (str): script live patch reason - like 'git comment'. [optional] # noqa: E501 + operation (str): one of hard-coded labels in the CSLPOperation enum. [optional] # noqa: E501 + ce_version (str): management version query filter parameter. [optional] # noqa: E501 + script_items ([CSLPItem]): list of input script items (tbd). [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/cslp_result.py b/cloudendure/model/cslp_result.py new file mode 100644 index 000000000..86cd79ca5 --- /dev/null +++ b/cloudendure/model/cslp_result.py @@ -0,0 +1,187 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.cslp_item import CSLPItem + + globals()["CSLPItem"] = CSLPItem + + +class CSLPResult(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ("error_level",): { + "INFO": "INFO", + "WARNING": "WARNING", + "ERROR": "ERROR", + }, + } + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "error_level": (str,), # noqa: E501 + "script_items": ([CSLPItem],), # noqa: E501 + "user_message": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "error_level": "error_level", # noqa: E501 + "script_items": "script_items", # noqa: E501 + "user_message": "user_message", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """CSLPResult - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + error_level (str): basic status of the operation execution. [optional] # noqa: E501 + script_items ([CSLPItem]): list of items returned by the retrieve/get_scripts_from_file_system actions. [optional] # noqa: E501 + user_message (str): message describing operation execution status. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/disk_config.py b/cloudendure/model/disk_config.py new file mode 100644 index 000000000..4d7f8d14b --- /dev/null +++ b/cloudendure/model/disk_config.py @@ -0,0 +1,202 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class DiskConfig(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ("type",): { + "DEFAULT": "DEFAULT", + "GP2": "GP2", + "IO1": "IO1", + "ST1": "ST1", + "SC1": "SC1", + "STANDARD": "STANDARD", + "IO2": "IO2", + "GP3": "GP3", + }, + } + + validations = { + ("iops",): { + "inclusive_minimum": 0, + }, + ("throughput",): { + "inclusive_minimum": 0, + }, + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "type": (str,), # noqa: E501 + "name": (str,), # noqa: E501 + "actual_type": (str,), # noqa: E501 + "iops": (int,), # noqa: E501 + "throughput": (int,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "type": "type", # noqa: E501 + "name": "name", # noqa: E501 + "actual_type": "actualType", # noqa: E501 + "iops": "iops", # noqa: E501 + "throughput": "throughput", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, type, name, *args, **kwargs): # noqa: E501 + """DiskConfig - a model defined in OpenAPI + + Args: + type (str): The type of disk to allocate in the target machine. COPY_ORIGIN will use the source setting. + name (str): Disk name as appears in the source machine object. + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + actual_type (str): The actual disk type in case of type is DEFAULT. [optional] # noqa: E501 + iops (int): [optional] # noqa: E501 + throughput (int): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.type = type + self.name = name + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/dynamic_configuration.py b/cloudendure/model/dynamic_configuration.py new file mode 100644 index 000000000..524f558f3 --- /dev/null +++ b/cloudendure/model/dynamic_configuration.py @@ -0,0 +1,168 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class DynamicConfiguration(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "throttling_bytes_per_second": (int,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "throttling_bytes_per_second": "throttlingBytesPerSecond", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """DynamicConfiguration - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + throttling_bytes_per_second (int): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/error.py b/cloudendure/model/error.py new file mode 100644 index 000000000..96b68eccf --- /dev/null +++ b/cloudendure/model/error.py @@ -0,0 +1,171 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class Error(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "message": (str,), # noqa: E501 + "code": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "message": "message", # noqa: E501 + "code": "code", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Error - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + message (str): [optional] # noqa: E501 + code (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/extended_account_info.py b/cloudendure/model/extended_account_info.py new file mode 100644 index 000000000..b32ec7086 --- /dev/null +++ b/cloudendure/model/extended_account_info.py @@ -0,0 +1,213 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.account import Account + from cloudendure.model.clouds_list import CloudsList + from cloudendure.model.projects_list import ProjectsList + from cloudendure.model.region import Region + from cloudendure.model.replication_configuration_list import ( + ReplicationConfigurationList, + ) + from cloudendure.model.time import Time + from cloudendure.model.user import User + + globals()["Account"] = Account + globals()["CloudsList"] = CloudsList + globals()["ProjectsList"] = ProjectsList + globals()["Region"] = Region + globals()["ReplicationConfigurationList"] = ReplicationConfigurationList + globals()["Time"] = Time + globals()["User"] = User + + +class ExtendedAccountInfo(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "account": (Account,), # noqa: E501 + "clouds": (CloudsList,), # noqa: E501 + "generic_region": (Region,), # noqa: E501 + "date_time": (Time,), # noqa: E501 + "is_newly_registered": (bool,), # noqa: E501 + "user": (User,), # noqa: E501 + "projects": (ProjectsList,), # noqa: E501 + "is_uefi_enabled": (bool,), # noqa: E501 + "replication_configurations": (ReplicationConfigurationList,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "account": "account", # noqa: E501 + "clouds": "clouds", # noqa: E501 + "generic_region": "genericRegion", # noqa: E501 + "date_time": "dateTime", # noqa: E501 + "is_newly_registered": "isNewlyRegistered", # noqa: E501 + "user": "user", # noqa: E501 + "projects": "projects", # noqa: E501 + "is_uefi_enabled": "isUefiEnabled", # noqa: E501 + "replication_configurations": "replicationConfigurations", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ExtendedAccountInfo - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + account (Account): [optional] # noqa: E501 + clouds (CloudsList): [optional] # noqa: E501 + generic_region (Region): [optional] # noqa: E501 + date_time (Time): [optional] # noqa: E501 + is_newly_registered (bool): [optional] # noqa: E501 + user (User): [optional] # noqa: E501 + projects (ProjectsList): [optional] # noqa: E501 + is_uefi_enabled (bool): [optional] # noqa: E501 + replication_configurations (ReplicationConfigurationList): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/gcp_machines_finance_data.py b/cloudendure/model/gcp_machines_finance_data.py new file mode 100644 index 000000000..a327e86bd --- /dev/null +++ b/cloudendure/model/gcp_machines_finance_data.py @@ -0,0 +1,189 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class GcpMachinesFinanceData(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "gcp_project_name": (str,), # noqa: E501 + "machine_name": (str,), # noqa: E501 + "number_of_cores": (int,), # noqa: E501 + "creation_time": (datetime,), # noqa: E501 + "is_preemptible": (bool,), # noqa: E501 + "has_gpu": (bool,), # noqa: E501 + "machine_id": (str,), # noqa: E501 + "ce_project_name": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "gcp_project_name": "gcp_project_name", # noqa: E501 + "machine_name": "machine_name", # noqa: E501 + "number_of_cores": "number_of_cores", # noqa: E501 + "creation_time": "creation_time", # noqa: E501 + "is_preemptible": "is_preemptible", # noqa: E501 + "has_gpu": "has_gpu", # noqa: E501 + "machine_id": "machine_id", # noqa: E501 + "ce_project_name": "ce_project_name", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """GcpMachinesFinanceData - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + gcp_project_name (str): [optional] # noqa: E501 + machine_name (str): [optional] # noqa: E501 + number_of_cores (int): [optional] # noqa: E501 + creation_time (datetime): [optional] # noqa: E501 + is_preemptible (bool): [optional] # noqa: E501 + has_gpu (bool): [optional] # noqa: E501 + machine_id (str): [optional] # noqa: E501 + ce_project_name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/identity_provider_redirect_response.py b/cloudendure/model/identity_provider_redirect_response.py new file mode 100644 index 000000000..6e0e4076f --- /dev/null +++ b/cloudendure/model/identity_provider_redirect_response.py @@ -0,0 +1,168 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class IdentityProviderRedirectResponse(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "saml_redirect": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "saml_redirect": "samlRedirect", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """IdentityProviderRedirectResponse - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + saml_redirect (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/initialization_step.py b/cloudendure/model/initialization_step.py new file mode 100644 index 000000000..99ecd96ca --- /dev/null +++ b/cloudendure/model/initialization_step.py @@ -0,0 +1,207 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class InitializationStep(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ("status",): { + "NOT_STARTED": "NOT_STARTED", + "STARTED": "STARTED", + "SUCCEEDED": "SUCCEEDED", + "FAILED": "FAILED", + "SKIPPED": "SKIPPED", + }, + ("name",): { + "WAITING_TO_INITIATE_REPLICATION": "WAITING_TO_INITIATE_REPLICATION", + "CREATING_FIREWALL_RULES": "CREATING_FIREWALL_RULES", + "CREATING_REPLICATION_SERVER": "CREATING_REPLICATION_SERVER", + "BOOTING_REPLICATION_SERVER": "BOOTING_REPLICATION_SERVER", + "RESOLVING_MANAGEMENT_SERVER_ADDRESS": "RESOLVING_MANAGEMENT_SERVER_ADDRESS", + "AUTHENTICATING_WITH_MANAGEMENT_SERVER": "AUTHENTICATING_WITH_MANAGEMENT_SERVER", + "DOWNLOADING_REPLICATION_SOFTWARE": "DOWNLOADING_REPLICATION_SOFTWARE", + "CREATING_REPLICATION_DISKS": "CREATING_REPLICATION_DISKS", + "ATTACHING_REPLICATION_DISKS": "ATTACHING_REPLICATION_DISKS", + "PAIRING_REPLICATION_SERVER_WITH_AGENT": "PAIRING_REPLICATION_SERVER_WITH_AGENT", + "ESTABLISHING_AGENT_REPLICATOR_COMMUNICATION": "ESTABLISHING_AGENT_REPLICATOR_COMMUNICATION", + "INITIATE_FAILBACK_REPLICATION": "INITIATE_FAILBACK_REPLICATION", + "AUTHENTICATE_FAILBACK_CLIENT": "AUTHENTICATE_FAILBACK_CLIENT", + "DETERMINE_THE_SOURCE_INSTANCE": "DETERMINE_THE_SOURCE_INSTANCE", + "COMPLETE_VOLUME_MAPPING": "COMPLETE_VOLUME_MAPPING", + "DOWNLOADING_REPLICATION_SOFTWARE_TO_FAILBACK_CLIENT": "DOWNLOADING_REPLICATION_SOFTWARE_TO_FAILBACK_CLIENT", + "CONFIGURE_REPLICATION_SOFTWARE": "CONFIGURE_REPLICATION_SOFTWARE", + "ESTABLISH_SOURCE_INSTANCE_AND_MANAGEMENT_COMMUNICATION": "ESTABLISH_SOURCE_INSTANCE_AND_MANAGEMENT_COMMUNICATION", + "PAIR_AGENT_WITH_REPLICATION_SOFTWARE": "PAIR_AGENT_WITH_REPLICATION_SOFTWARE", + "ESTABLISHING_AGENT_REPLICATOR_SOFTWARE_COMMUNICATION": "ESTABLISHING_AGENT_REPLICATOR_SOFTWARE_COMMUNICATION", + }, + } + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "status": (str,), # noqa: E501 + "message": (str,), # noqa: E501 + "update_date_time": (datetime,), # noqa: E501 + "name": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "status": "status", # noqa: E501 + "message": "message", # noqa: E501 + "update_date_time": "updateDateTime", # noqa: E501 + "name": "name", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """InitializationStep - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + status (str): [optional] # noqa: E501 + message (str): [optional] # noqa: E501 + update_date_time (datetime): [optional] # noqa: E501 + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/inline_object.py b/cloudendure/model/inline_object.py new file mode 100644 index 000000000..2750b1c3c --- /dev/null +++ b/cloudendure/model/inline_object.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class InlineObject(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "new_password": (str,), # noqa: E501 + "old_password": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "new_password": "newPassword", # noqa: E501 + "old_password": "oldPassword", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, new_password, old_password, *args, **kwargs): # noqa: E501 + """InlineObject - a model defined in OpenAPI + + Args: + new_password (str): + old_password (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.new_password = new_password + self.old_password = old_password + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/inline_object1.py b/cloudendure/model/inline_object1.py new file mode 100644 index 000000000..023a0e6c5 --- /dev/null +++ b/cloudendure/model/inline_object1.py @@ -0,0 +1,186 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class InlineObject1(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "username": (str,), # noqa: E501 + "login_token": (str,), # noqa: E501 + "user_api_token": (str,), # noqa: E501 + "agent_installation_token": (str,), # noqa: E501 + "password": (str,), # noqa: E501 + "account_identifier": (str,), # noqa: E501 + "google_oauth_code": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "username": "username", # noqa: E501 + "login_token": "loginToken", # noqa: E501 + "user_api_token": "userApiToken", # noqa: E501 + "agent_installation_token": "agentInstallationToken", # noqa: E501 + "password": "password", # noqa: E501 + "account_identifier": "accountIdentifier", # noqa: E501 + "google_oauth_code": "googleOauthCode", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """InlineObject1 - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + username (str): [optional] # noqa: E501 + login_token (str): [optional] # noqa: E501 + user_api_token (str): [optional] # noqa: E501 + agent_installation_token (str): [optional] # noqa: E501 + password (str): [optional] # noqa: E501 + account_identifier (str): [optional] # noqa: E501 + google_oauth_code (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/inline_object10.py b/cloudendure/model/inline_object10.py new file mode 100644 index 000000000..6fb9e5d3d --- /dev/null +++ b/cloudendure/model/inline_object10.py @@ -0,0 +1,185 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class InlineObject10(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ("execution_mode",): { + "TEST": "TEST", + "RECOVERY": "RECOVERY", + "CUTOVER": "CUTOVER", + "CLEANUP": "CLEANUP", + }, + } + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "recovery_plan_id": (str,), # noqa: E501 + "execution_mode": (str,), # noqa: E501 + "point_in_time_id": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "recovery_plan_id": "recoveryPlanID", # noqa: E501 + "execution_mode": "executionMode", # noqa: E501 + "point_in_time_id": "pointInTimeID", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, recovery_plan_id, execution_mode, *args, **kwargs): # noqa: E501 + """InlineObject10 - a model defined in OpenAPI + + Args: + recovery_plan_id (str): + execution_mode (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + point_in_time_id (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.recovery_plan_id = recovery_plan_id + self.execution_mode = execution_mode + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/inline_object2.py b/cloudendure/model/inline_object2.py new file mode 100644 index 000000000..fe8df3a4a --- /dev/null +++ b/cloudendure/model/inline_object2.py @@ -0,0 +1,171 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class InlineObject2(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "token": (str,), # noqa: E501 + "new_password": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "token": "token", # noqa: E501 + "new_password": "newPassword", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """InlineObject2 - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + token (str): [optional] # noqa: E501 + new_password (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/inline_object3.py b/cloudendure/model/inline_object3.py new file mode 100644 index 000000000..8344a279c --- /dev/null +++ b/cloudendure/model/inline_object3.py @@ -0,0 +1,168 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class InlineObject3(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "machine_ids": ([str],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "machine_ids": "machineIDs", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """InlineObject3 - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + machine_ids ([str]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/inline_object4.py b/cloudendure/model/inline_object4.py new file mode 100644 index 000000000..2443f9243 --- /dev/null +++ b/cloudendure/model/inline_object4.py @@ -0,0 +1,171 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class InlineObject4(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "machine_ids": ([str],), # noqa: E501 + "destination_project_id": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "machine_ids": "machineIDs", # noqa: E501 + "destination_project_id": "destinationProjectId", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """InlineObject4 - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + machine_ids ([str]): [optional] # noqa: E501 + destination_project_id (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/inline_object5.py b/cloudendure/model/inline_object5.py new file mode 100644 index 000000000..532ebd8af --- /dev/null +++ b/cloudendure/model/inline_object5.py @@ -0,0 +1,168 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class InlineObject5(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "replica_ids": ([str],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "replica_ids": "replicaIDs", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """InlineObject5 - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + replica_ids ([str]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/inline_object6.py b/cloudendure/model/inline_object6.py new file mode 100644 index 000000000..ac50b2cc7 --- /dev/null +++ b/cloudendure/model/inline_object6.py @@ -0,0 +1,171 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class InlineObject6(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "username": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "username": "username", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, username, *args, **kwargs): # noqa: E501 + """InlineObject6 - a model defined in OpenAPI + + Args: + username (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.username = username + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/inline_object7.py b/cloudendure/model/inline_object7.py new file mode 100644 index 000000000..4e4b064c5 --- /dev/null +++ b/cloudendure/model/inline_object7.py @@ -0,0 +1,171 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class InlineObject7(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "machine_ids": ([str],), # noqa: E501 + "move_vmdks": (bool,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "machine_ids": "machineIDs", # noqa: E501 + "move_vmdks": "moveVmdks", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """InlineObject7 - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + machine_ids ([str]): [optional] # noqa: E501 + move_vmdks (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/inline_object8.py b/cloudendure/model/inline_object8.py new file mode 100644 index 000000000..c78d23ada --- /dev/null +++ b/cloudendure/model/inline_object8.py @@ -0,0 +1,168 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class InlineObject8(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "machine_ids": ([str],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "machine_ids": "machineIDs", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """InlineObject8 - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + machine_ids ([str]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/inline_object9.py b/cloudendure/model/inline_object9.py new file mode 100644 index 000000000..134fa1fc5 --- /dev/null +++ b/cloudendure/model/inline_object9.py @@ -0,0 +1,168 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class InlineObject9(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "machine_ids": ([str],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "machine_ids": "machineIDs", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """InlineObject9 - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + machine_ids ([str]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/inline_response200.py b/cloudendure/model/inline_response200.py new file mode 100644 index 000000000..6c56c77f9 --- /dev/null +++ b/cloudendure/model/inline_response200.py @@ -0,0 +1,168 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class InlineResponse200(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "items": ([str],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """InlineResponse200 - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([str]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/inline_response2001.py b/cloudendure/model/inline_response2001.py new file mode 100644 index 000000000..699605401 --- /dev/null +++ b/cloudendure/model/inline_response2001.py @@ -0,0 +1,168 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class InlineResponse2001(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "api_token": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "api_token": "apiToken", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """InlineResponse2001 - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + api_token (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/inline_response2002.py b/cloudendure/model/inline_response2002.py new file mode 100644 index 000000000..0d9a73b8f --- /dev/null +++ b/cloudendure/model/inline_response2002.py @@ -0,0 +1,168 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class InlineResponse2002(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "message": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "message": "message", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """InlineResponse2002 - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + message (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/job.py b/cloudendure/model/job.py new file mode 100644 index 000000000..84bc65bbb --- /dev/null +++ b/cloudendure/model/job.py @@ -0,0 +1,220 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.job_log import JobLog + from cloudendure.model.job_target_machine import JobTargetMachine + + globals()["JobLog"] = JobLog + globals()["JobTargetMachine"] = JobTargetMachine + + +class Job(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ("status",): { + "PENDING": "PENDING", + "STARTED": "STARTED", + "COMPLETED": "COMPLETED", + "FAILED": "FAILED", + }, + ("type",): { + "CLEANUP": "CLEANUP", + "CUTOVER_LAUNCH": "CUTOVER_LAUNCH", + "RECOVERY_LAUNCH": "RECOVERY_LAUNCH", + "RESTORE_LAUNCH": "RESTORE_LAUNCH", + "TEST_LAUNCH": "TEST_LAUNCH", + "CONSOLIDATE_VMDKS": "CONSOLIDATE_VMDKS", + "RECOVERY_PLAN_RECOVERY": "RECOVERY_PLAN_RECOVERY", + "RECOVERY_PLAN_TEST": "RECOVERY_PLAN_TEST", + "RECOVERY_PLAN_CUTOVER": "RECOVERY_PLAN_CUTOVER", + "RECOVERY_PLAN_CLEANUP": "RECOVERY_PLAN_CLEANUP", + }, + } + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "status": (str,), # noqa: E501 + "participating_machines": ([str],), # noqa: E501 + "log": ([JobLog],), # noqa: E501 + "type": (str,), # noqa: E501 + "end_date_time": (datetime,), # noqa: E501 + "target_machines": ([JobTargetMachine],), # noqa: E501 + "creation_date_time": (datetime,), # noqa: E501 + "id": (str,), # noqa: E501 + "initiated_by": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "status": "status", # noqa: E501 + "participating_machines": "participatingMachines", # noqa: E501 + "log": "log", # noqa: E501 + "type": "type", # noqa: E501 + "end_date_time": "endDateTime", # noqa: E501 + "target_machines": "targetMachines", # noqa: E501 + "creation_date_time": "creationDateTime", # noqa: E501 + "id": "id", # noqa: E501 + "initiated_by": "initiatedBy", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Job - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + status (str): [optional] # noqa: E501 + participating_machines ([str]): [optional] # noqa: E501 + log ([JobLog]): [optional] # noqa: E501 + type (str): [optional] # noqa: E501 + end_date_time (datetime): [optional] # noqa: E501 + target_machines ([JobTargetMachine]): [optional] # noqa: E501 + creation_date_time (datetime): [optional] # noqa: E501 + id (str): [optional] # noqa: E501 + initiated_by (str): username of user who initiated the job. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/job_log.py b/cloudendure/model/job_log.py new file mode 100644 index 000000000..488d57416 --- /dev/null +++ b/cloudendure/model/job_log.py @@ -0,0 +1,171 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class JobLog(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "message": (str,), # noqa: E501 + "log_date_time": (datetime,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "message": "message", # noqa: E501 + "log_date_time": "logDateTime", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """JobLog - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + message (str): [optional] # noqa: E501 + log_date_time (datetime): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/job_target_machine.py b/cloudendure/model/job_target_machine.py new file mode 100644 index 000000000..27b90d646 --- /dev/null +++ b/cloudendure/model/job_target_machine.py @@ -0,0 +1,180 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class JobTargetMachine(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "target_status_change_timestamp": (datetime,), # noqa: E501 + "target_status": (str,), # noqa: E501 + "target_instance_id": (str,), # noqa: E501 + "snapshot_time": (datetime,), # noqa: E501 + "source_machine_id": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "target_status_change_timestamp": "target_status_change_timestamp", # noqa: E501 + "target_status": "target_status", # noqa: E501 + "target_instance_id": "target_instance_id", # noqa: E501 + "snapshot_time": "snapshot_time", # noqa: E501 + "source_machine_id": "source_machine_id", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """JobTargetMachine - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + target_status_change_timestamp (datetime): [optional] # noqa: E501 + target_status (str): Cloud healthcheck string. [optional] # noqa: E501 + target_instance_id (str): Target machine ID in the target environment.. [optional] # noqa: E501 + snapshot_time (datetime): [optional] # noqa: E501 + source_machine_id (str): The ID of the source machine for this target machine.. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/jobs_list.py b/cloudendure/model/jobs_list.py new file mode 100644 index 000000000..a30086db1 --- /dev/null +++ b/cloudendure/model/jobs_list.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.job import Job + + globals()["Job"] = Job + + +class JobsList(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([Job],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """JobsList - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([Job]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/key_value_list.py b/cloudendure/model/key_value_list.py new file mode 100644 index 000000000..a4a223d6b --- /dev/null +++ b/cloudendure/model/key_value_list.py @@ -0,0 +1,179 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.replication_configuration_replication_tags import ( + ReplicationConfigurationReplicationTags, + ) + + globals()[ + "ReplicationConfigurationReplicationTags" + ] = ReplicationConfigurationReplicationTags + + +class KeyValueList(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([ReplicationConfigurationReplicationTags],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """KeyValueList - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([ReplicationConfigurationReplicationTags]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/launch_machines_parameters.py b/cloudendure/model/launch_machines_parameters.py new file mode 100644 index 000000000..637646247 --- /dev/null +++ b/cloudendure/model/launch_machines_parameters.py @@ -0,0 +1,197 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.launch_machines_parameters_debug_scripts import ( + LaunchMachinesParametersDebugScripts, + ) + from cloudendure.model.machine_and_point_in_time import MachineAndPointInTime + + globals()[ + "LaunchMachinesParametersDebugScripts" + ] = LaunchMachinesParametersDebugScripts + globals()["MachineAndPointInTime"] = MachineAndPointInTime + + +class LaunchMachinesParameters(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ("launch_type",): { + "TEST": "TEST", + "RECOVERY": "RECOVERY", + "CUTOVER": "CUTOVER", + "DEBUG": "DEBUG", + }, + } + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "launch_type": (str,), # noqa: E501 + "items": ([MachineAndPointInTime],), # noqa: E501 + "debug_scripts": (LaunchMachinesParametersDebugScripts,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "launch_type": "launchType", # noqa: E501 + "items": "items", # noqa: E501 + "debug_scripts": "debugScripts", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, launch_type, *args, **kwargs): # noqa: E501 + """LaunchMachinesParameters - a model defined in OpenAPI + + Args: + launch_type (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([MachineAndPointInTime]): [optional] # noqa: E501 + debug_scripts (LaunchMachinesParametersDebugScripts): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.launch_type = launch_type + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/launch_machines_parameters_debug_scripts.py b/cloudendure/model/launch_machines_parameters_debug_scripts.py new file mode 100644 index 000000000..7ba9475c0 --- /dev/null +++ b/cloudendure/model/launch_machines_parameters_debug_scripts.py @@ -0,0 +1,171 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class LaunchMachinesParametersDebugScripts(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "postboot": ([str],), # noqa: E501 + "preboot": ([str],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "postboot": "postboot", # noqa: E501 + "preboot": "preboot", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """LaunchMachinesParametersDebugScripts - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + postboot ([str]): [optional] # noqa: E501 + preboot ([str]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/license.py b/cloudendure/model/license.py new file mode 100644 index 000000000..0cef3178f --- /dev/null +++ b/cloudendure/model/license.py @@ -0,0 +1,212 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.license_ce_admin_properties import LicenseCeAdminProperties + from cloudendure.model.license_features import LicenseFeatures + + globals()["LicenseCeAdminProperties"] = LicenseCeAdminProperties + globals()["LicenseFeatures"] = LicenseFeatures + + +class License(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ("type",): { + "MIGRATION": "MIGRATION", + "DR": "DR", + "BACKUP": "BACKUP", + "DR_TRIAL": "DR_TRIAL", + }, + } + + validations = { + ("count",): { + "inclusive_minimum": 0, + }, + ("used",): { + "inclusive_minimum": 0, + }, + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "count": (int,), # noqa: E501 + "duration_from_start_of_use": (str,), # noqa: E501 + "used": (int,), # noqa: E501 + "features": (LicenseFeatures,), # noqa: E501 + "expiration_date_time": (datetime,), # noqa: E501 + "ce_admin_properties": (LicenseCeAdminProperties,), # noqa: E501 + "type": (str,), # noqa: E501 + "id": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "count": "count", # noqa: E501 + "duration_from_start_of_use": "durationFromStartOfUse", # noqa: E501 + "used": "used", # noqa: E501 + "features": "features", # noqa: E501 + "expiration_date_time": "expirationDateTime", # noqa: E501 + "ce_admin_properties": "ceAdminProperties", # noqa: E501 + "type": "type", # noqa: E501 + "id": "id", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """License - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + count (int): The total number of licenses.. [optional] # noqa: E501 + duration_from_start_of_use (str): Validity period for a a single license from the time of agent installation.. [optional] # noqa: E501 + used (int): How many licenses have already been consumed.. [optional] # noqa: E501 + features (LicenseFeatures): [optional] # noqa: E501 + expiration_date_time (datetime): [optional] # noqa: E501 + ce_admin_properties (LicenseCeAdminProperties): [optional] # noqa: E501 + type (str): License type. DR licenses can be moved from one machine to another. Migration licenses are consumed upon installation.. [optional] # noqa: E501 + id (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/license_ce_admin_properties.py b/cloudendure/model/license_ce_admin_properties.py new file mode 100644 index 000000000..b5da54324 --- /dev/null +++ b/cloudendure/model/license_ce_admin_properties.py @@ -0,0 +1,177 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class LicenseCeAdminProperties(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "project_ids": ([str],), # noqa: E501 + "account_ids": ([str],), # noqa: E501 + "comments": (str,), # noqa: E501 + "history": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "project_ids": "projectIDs", # noqa: E501 + "account_ids": "accountIDs", # noqa: E501 + "comments": "comments", # noqa: E501 + "history": "history", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """LicenseCeAdminProperties - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + project_ids ([str]): [optional] # noqa: E501 + account_ids ([str]): [optional] # noqa: E501 + comments (str): [optional] # noqa: E501 + history (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/license_features.py b/cloudendure/model/license_features.py new file mode 100644 index 000000000..8b477e837 --- /dev/null +++ b/cloudendure/model/license_features.py @@ -0,0 +1,171 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class LicenseFeatures(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "pit": (bool,), # noqa: E501 + "dr_tier2": (bool,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "pit": "pit", # noqa: E501 + "dr_tier2": "drTier2", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """LicenseFeatures - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + pit (bool): [optional] # noqa: E501 + dr_tier2 (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/license_list.py b/cloudendure/model/license_list.py new file mode 100644 index 000000000..81faa9486 --- /dev/null +++ b/cloudendure/model/license_list.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.license import License + + globals()["License"] = License + + +class LicenseList(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([License],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """LicenseList - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([License]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/list_users_result.py b/cloudendure/model/list_users_result.py new file mode 100644 index 000000000..01e9d5b6b --- /dev/null +++ b/cloudendure/model/list_users_result.py @@ -0,0 +1,180 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class ListUsersResult(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "username": (str,), # noqa: E501 + "is_account_owner": (bool,), # noqa: E501 + "state": (str,), # noqa: E501 + "version": (str,), # noqa: E501 + "account_uuid": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "username": "username", # noqa: E501 + "is_account_owner": "is_account_owner", # noqa: E501 + "state": "state", # noqa: E501 + "version": "version", # noqa: E501 + "account_uuid": "account_uuid", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ListUsersResult - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + username (str): [optional] # noqa: E501 + is_account_owner (bool): [optional] # noqa: E501 + state (str): [optional] # noqa: E501 + version (str): [optional] # noqa: E501 + account_uuid (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/list_users_results.py b/cloudendure/model/list_users_results.py new file mode 100644 index 000000000..aa80eda79 --- /dev/null +++ b/cloudendure/model/list_users_results.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.list_users_result import ListUsersResult + + globals()["ListUsersResult"] = ListUsersResult + + +class ListUsersResults(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([ListUsersResult],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ListUsersResults - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([ListUsersResult]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/logical_location.py b/cloudendure/model/logical_location.py new file mode 100644 index 000000000..ee20d975f --- /dev/null +++ b/cloudendure/model/logical_location.py @@ -0,0 +1,171 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class LogicalLocation(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "location_id": (str,), # noqa: E501 + "name": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "location_id": "locationId", # noqa: E501 + "name": "name", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """LogicalLocation - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + location_id (str): [optional] # noqa: E501 + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/machine.py b/cloudendure/model/machine.py new file mode 100644 index 000000000..08372729c --- /dev/null +++ b/cloudendure/model/machine.py @@ -0,0 +1,231 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.machine_license import MachineLicense + from cloudendure.model.machine_life_cycle import MachineLifeCycle + from cloudendure.model.machine_replication_configuration import ( + MachineReplicationConfiguration, + ) + from cloudendure.model.machine_replication_info import MachineReplicationInfo + from cloudendure.model.machine_source_properties import MachineSourceProperties + from cloudendure.model.point_in_time import PointInTime + + globals()["MachineLicense"] = MachineLicense + globals()["MachineLifeCycle"] = MachineLifeCycle + globals()["MachineReplicationConfiguration"] = MachineReplicationConfiguration + globals()["MachineReplicationInfo"] = MachineReplicationInfo + globals()["MachineSourceProperties"] = MachineSourceProperties + globals()["PointInTime"] = PointInTime + + +class Machine(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ("replication_status",): { + "STOPPED": "STOPPED", + "PAUSED": "PAUSED", + "STARTED": "STARTED", + }, + } + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "original_source_cloud_id": (str,), # noqa: E501 + "source_properties": (MachineSourceProperties,), # noqa: E501 + "replication_info": (MachineReplicationInfo,), # noqa: E501 + "license": (MachineLicense,), # noqa: E501 + "tags": ([str],), # noqa: E501 + "restore_servers": ([str],), # noqa: E501 + "from_point_in_time": (PointInTime,), # noqa: E501 + "replication_status": (str,), # noqa: E501 + "replica": (str,), # noqa: E501 + "id": (str,), # noqa: E501 + "replication_configuration": ( + MachineReplicationConfiguration, + ), # noqa: E501 + "life_cycle": (MachineLifeCycle,), # noqa: E501 + "is_agent_installed": (bool,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "original_source_cloud_id": "original_source_cloud_id", # noqa: E501 + "source_properties": "sourceProperties", # noqa: E501 + "replication_info": "replicationInfo", # noqa: E501 + "license": "license", # noqa: E501 + "tags": "tags", # noqa: E501 + "restore_servers": "restoreServers", # noqa: E501 + "from_point_in_time": "fromPointInTime", # noqa: E501 + "replication_status": "replicationStatus", # noqa: E501 + "replica": "replica", # noqa: E501 + "id": "id", # noqa: E501 + "replication_configuration": "replicationConfiguration", # noqa: E501 + "life_cycle": "lifeCycle", # noqa: E501 + "is_agent_installed": "isAgentInstalled", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Machine - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + original_source_cloud_id (str): The cloud id of the source machine from which a machine was originally replicated from.. [optional] # noqa: E501 + source_properties (MachineSourceProperties): [optional] # noqa: E501 + replication_info (MachineReplicationInfo): [optional] # noqa: E501 + license (MachineLicense): [optional] # noqa: E501 + tags ([str]): [optional] # noqa: E501 + restore_servers ([str]): RestoreServer IDs . [optional] # noqa: E501 + from_point_in_time (PointInTime): [optional] # noqa: E501 + replication_status (str): Is replication started, paused or stopped. [optional] # noqa: E501 + replica (str): The ID of the target machine that has been previously launched, if such exists.. [optional] # noqa: E501 + id (str): [optional] # noqa: E501 + replication_configuration (MachineReplicationConfiguration): [optional] # noqa: E501 + life_cycle (MachineLifeCycle): [optional] # noqa: E501 + is_agent_installed (bool): Whether a CloudEndure agent is currently installed on this machine.. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/machine_and_path_and_point_in_time.py b/cloudendure/model/machine_and_path_and_point_in_time.py new file mode 100644 index 000000000..f7f10987b --- /dev/null +++ b/cloudendure/model/machine_and_path_and_point_in_time.py @@ -0,0 +1,178 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class MachineAndPathAndPointInTime(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "machine_id": (str,), # noqa: E501 + "file_path": (str,), # noqa: E501 + "point_in_time_id": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "machine_id": "machineId", # noqa: E501 + "file_path": "filePath", # noqa: E501 + "point_in_time_id": "pointInTimeId", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, machine_id, file_path, *args, **kwargs): # noqa: E501 + """MachineAndPathAndPointInTime - a model defined in OpenAPI + + Args: + machine_id (str): + file_path (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + point_in_time_id (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.machine_id = machine_id + self.file_path = file_path + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/machine_and_point_in_time.py b/cloudendure/model/machine_and_point_in_time.py new file mode 100644 index 000000000..5a0a064ab --- /dev/null +++ b/cloudendure/model/machine_and_point_in_time.py @@ -0,0 +1,174 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class MachineAndPointInTime(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "machine_id": (str,), # noqa: E501 + "point_in_time_id": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "machine_id": "machineId", # noqa: E501 + "point_in_time_id": "pointInTimeId", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, machine_id, *args, **kwargs): # noqa: E501 + """MachineAndPointInTime - a model defined in OpenAPI + + Args: + machine_id (str): A source machine to launch a target machine for. + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + point_in_time_id (str): The ID of the pointInTime to launch a target machine from. If omitted, CloudEndure will use the latest pointInTime.. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.machine_id = machine_id + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/machine_license.py b/cloudendure/model/machine_license.py new file mode 100644 index 000000000..893d87316 --- /dev/null +++ b/cloudendure/model/machine_license.py @@ -0,0 +1,171 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class MachineLicense(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "start_of_use_date_time": (datetime,), # noqa: E501 + "license_id": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "start_of_use_date_time": "startOfUseDateTime", # noqa: E501 + "license_id": "licenseId", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """MachineLicense - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + start_of_use_date_time (datetime): Timestamp for when a license was consumed.. [optional] # noqa: E501 + license_id (str): ID for the License object consumed by this machine.. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/machine_life_cycle.py b/cloudendure/model/machine_life_cycle.py new file mode 100644 index 000000000..29cfff9f9 --- /dev/null +++ b/cloudendure/model/machine_life_cycle.py @@ -0,0 +1,195 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class MachineLifeCycle(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "last_test_launch_date_time": (datetime,), # noqa: E501 + "last_recovery_job_id": (str,), # noqa: E501 + "last_recovery_launch_date_time": (datetime,), # noqa: E501 + "last_target_health_checks_passed_date_time": (datetime,), # noqa: E501 + "connection_established_date_time": (datetime,), # noqa: E501 + "agent_installation_date_time": (datetime,), # noqa: E501 + "last_target_health_checks_passed_job_id": (str,), # noqa: E501 + "last_cutover_job_id": (str,), # noqa: E501 + "last_test_launch_job_id": (str,), # noqa: E501 + "last_cutover_date_time": (datetime,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "last_test_launch_date_time": "lastTestLaunchDateTime", # noqa: E501 + "last_recovery_job_id": "lastRecoveryJobId", # noqa: E501 + "last_recovery_launch_date_time": "lastRecoveryLaunchDateTime", # noqa: E501 + "last_target_health_checks_passed_date_time": "lastTargetHealthChecksPassedDateTime", # noqa: E501 + "connection_established_date_time": "connectionEstablishedDateTime", # noqa: E501 + "agent_installation_date_time": "agentInstallationDateTime", # noqa: E501 + "last_target_health_checks_passed_job_id": "lastTargetHealthChecksPassedJobId", # noqa: E501 + "last_cutover_job_id": "lastCutoverJobId", # noqa: E501 + "last_test_launch_job_id": "lastTestLaunchJobId", # noqa: E501 + "last_cutover_date_time": "lastCutoverDateTime", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """MachineLifeCycle - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + last_test_launch_date_time (datetime): [optional] # noqa: E501 + last_recovery_job_id (str): [optional] # noqa: E501 + last_recovery_launch_date_time (datetime): [optional] # noqa: E501 + last_target_health_checks_passed_date_time (datetime): [optional] # noqa: E501 + connection_established_date_time (datetime): Timestamp of the initial CloudEndure agent access to the CloudEndure Service Manager event.. [optional] # noqa: E501 + agent_installation_date_time (datetime): Timestamp of the initial CloudEndure agent installation event.. [optional] # noqa: E501 + last_target_health_checks_passed_job_id (str): [optional] # noqa: E501 + last_cutover_job_id (str): [optional] # noqa: E501 + last_test_launch_job_id (str): [optional] # noqa: E501 + last_cutover_date_time (datetime): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/machine_replication_configuration.py b/cloudendure/model/machine_replication_configuration.py new file mode 100644 index 000000000..2027fa248 --- /dev/null +++ b/cloudendure/model/machine_replication_configuration.py @@ -0,0 +1,277 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.disk_config import DiskConfig + from cloudendure.model.replication_configuration_replication_tags import ( + ReplicationConfigurationReplicationTags, + ) + + globals()["DiskConfig"] = DiskConfig + globals()[ + "ReplicationConfigurationReplicationTags" + ] = ReplicationConfigurationReplicationTags + + +class MachineReplicationConfiguration(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "volume_encryption_key": (str,), # noqa: E501 + "replication_tags": ( + [ReplicationConfigurationReplicationTags], + ), # noqa: E501 + "disable_public_ip": (bool,), # noqa: E501 + "cost_optimized_burst_balance_delta_threshold": (int,), # noqa: E501 + "subnet_host_project": (str,), # noqa: E501 + "no_rescan": (bool,), # noqa: E501 + "replication_software_download_source": (str,), # noqa: E501 + "cost_optimized_sc1_volumes_throughput_window_size_minutes": ( + int, + ), # noqa: E501 + "replication_server_type": (str,), # noqa: E501 + "cost_optimized_burst_balance_window_size_minutes": (int,), # noqa: E501 + "use_low_cost_disks": (bool,), # noqa: E501 + "compute_location_id": (str,), # noqa: E501 + "subnet_id": (str,), # noqa: E501 + "logical_location_id": (str,), # noqa: E501 + "cost_optimized_default_volumes_throughput_window_size_minutes": ( + int, + ), # noqa: E501 + "bandwidth_throttling": (int,), # noqa: E501 + "cost_optimized_burst_balance_threshold": (int,), # noqa: E501 + "use_dedicated_server": (bool,), # noqa: E501 + "zone": (str,), # noqa: E501 + "replicator_security_group_ids": ([str],), # noqa: E501 + "use_private_ip": (bool,), # noqa: E501 + "auto_disk_detection": (bool,), # noqa: E501 + "failback_client_id": (str,), # noqa: E501 + "proxy_url": (str,), # noqa: E501 + "volume_encryption_allowed": (bool,), # noqa: E501 + "object_storage_location": (str,), # noqa: E501 + "archiving_enabled": (bool,), # noqa: E501 + "converter_type": (str,), # noqa: E501 + "storage_location_id": (str,), # noqa: E501 + "use_cost_optimized_disk_type": (bool,), # noqa: E501 + "staging_disks": ([DiskConfig],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "volume_encryption_key": "volumeEncryptionKey", # noqa: E501 + "replication_tags": "replicationTags", # noqa: E501 + "disable_public_ip": "disablePublicIp", # noqa: E501 + "cost_optimized_burst_balance_delta_threshold": "costOptimizedBurstBalanceDeltaThreshold", # noqa: E501 + "subnet_host_project": "subnetHostProject", # noqa: E501 + "no_rescan": "noRescan", # noqa: E501 + "replication_software_download_source": "replicationSoftwareDownloadSource", # noqa: E501 + "cost_optimized_sc1_volumes_throughput_window_size_minutes": "costOptimizedSc1VolumesThroughputWindowSizeMinutes", # noqa: E501 + "replication_server_type": "replicationServerType", # noqa: E501 + "cost_optimized_burst_balance_window_size_minutes": "costOptimizedBurstBalanceWindowSizeMinutes", # noqa: E501 + "use_low_cost_disks": "useLowCostDisks", # noqa: E501 + "compute_location_id": "computeLocationId", # noqa: E501 + "subnet_id": "subnetId", # noqa: E501 + "logical_location_id": "logicalLocationId", # noqa: E501 + "cost_optimized_default_volumes_throughput_window_size_minutes": "costOptimizedDefaultVolumesThroughputWindowSizeMinutes", # noqa: E501 + "bandwidth_throttling": "bandwidthThrottling", # noqa: E501 + "cost_optimized_burst_balance_threshold": "costOptimizedBurstBalanceThreshold", # noqa: E501 + "use_dedicated_server": "useDedicatedServer", # noqa: E501 + "zone": "zone", # noqa: E501 + "replicator_security_group_ids": "replicatorSecurityGroupIDs", # noqa: E501 + "use_private_ip": "usePrivateIp", # noqa: E501 + "auto_disk_detection": "autoDiskDetection", # noqa: E501 + "failback_client_id": "failbackClientId", # noqa: E501 + "proxy_url": "proxyUrl", # noqa: E501 + "volume_encryption_allowed": "volumeEncryptionAllowed", # noqa: E501 + "object_storage_location": "objectStorageLocation", # noqa: E501 + "archiving_enabled": "archivingEnabled", # noqa: E501 + "converter_type": "converterType", # noqa: E501 + "storage_location_id": "storageLocationId", # noqa: E501 + "use_cost_optimized_disk_type": "useCostOptimizedDiskType", # noqa: E501 + "staging_disks": "stagingDisks", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """MachineReplicationConfiguration - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + volume_encryption_key (str): AWS only. ARN to private key for Volume Encryption. Possible values can be fetched from the Region object. . [optional] # noqa: E501 + replication_tags ([ReplicationConfigurationReplicationTags]): AWS only. Tags that will be applied to every cloud resource created in the CloudEndure Staging Area.. [optional] # noqa: E501 + disable_public_ip (bool): When private IP is used, do not allocate public IP for replication server. [optional] # noqa: E501 + cost_optimized_burst_balance_delta_threshold (int): when using cost optimized disk type, threshold of delta between measurments to move to default. [optional] # noqa: E501 + subnet_host_project (str): GCP only. Host project of cross project network subnet.. [optional] # noqa: E501 + no_rescan (bool): [optional] # noqa: E501 + replication_software_download_source (str): [optional] # noqa: E501 + cost_optimized_sc1_volumes_throughput_window_size_minutes (int): when using cost optimized disk type, size of window for sc1 volumes througput measurments. [optional] # noqa: E501 + replication_server_type (str): [optional] # noqa: E501 + cost_optimized_burst_balance_window_size_minutes (int): when using cost optimized disk type, size of window for burst balance measurments. [optional] # noqa: E501 + use_low_cost_disks (bool): use low cost disks for replication whenever possible. [optional] # noqa: E501 + compute_location_id (str): [optional] # noqa: E501 + subnet_id (str): Subnet where replication servers will be created. Possible values can be fetched from the Region object.. [optional] # noqa: E501 + logical_location_id (str): vcenter = vmFolder. [optional] # noqa: E501 + cost_optimized_default_volumes_throughput_window_size_minutes (int): when using cost optimized disk type, size of window for default volumes througput measurments. [optional] # noqa: E501 + bandwidth_throttling (int): Mbps to use for Data Replication (zero means no throttling).. [optional] # noqa: E501 + cost_optimized_burst_balance_threshold (int): when using cost optimized disk type, threshold of burst balance under which to move to default. [optional] # noqa: E501 + use_dedicated_server (bool): [optional] # noqa: E501 + zone (str): Relevant for GCP and Azure ARM. The Zone to replicate into.. [optional] # noqa: E501 + replicator_security_group_ids ([str]): AWS only. The security groups that will be applied to the replication servers. Possible values can be fetched from the Region object.. [optional] # noqa: E501 + use_private_ip (bool): Should the CloudEndure agent access the replication server using its private IP address.. [optional] # noqa: E501 + auto_disk_detection (bool): [optional] # noqa: E501 + failback_client_id (str): [optional] # noqa: E501 + proxy_url (str): The full URI for a proxy (schema, username, password, domain, port) if required for the CloudEndure agent.. [optional] # noqa: E501 + volume_encryption_allowed (bool): [optional] # noqa: E501 + object_storage_location (str): bucket in aws . [optional] # noqa: E501 + archiving_enabled (bool): [optional] # noqa: E501 + converter_type (str): [optional] # noqa: E501 + storage_location_id (str): [optional] # noqa: E501 + use_cost_optimized_disk_type (bool): use cost optimized disk type for replication. [optional] # noqa: E501 + staging_disks ([DiskConfig]): Replicator disk properties.. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/machine_replication_info.py b/cloudendure/model/machine_replication_info.py new file mode 100644 index 000000000..7251e7cd2 --- /dev/null +++ b/cloudendure/model/machine_replication_info.py @@ -0,0 +1,208 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.machine_replication_info_initiation_states import ( + MachineReplicationInfoInitiationStates, + ) + + globals()[ + "MachineReplicationInfoInitiationStates" + ] = MachineReplicationInfoInitiationStates + + +class MachineReplicationInfo(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "rescanned_storage_bytes": (int,), # noqa: E501 + "backlogged_storage_bytes": (int,), # noqa: E501 + "failback_client_last_seen_date_time": (datetime,), # noqa: E501 + "last_consistency_date_time": (datetime,), # noqa: E501 + "next_consistency_estimated_date_time": (datetime,), # noqa: E501 + "total_storage_bytes": (int,), # noqa: E501 + "initiation_states": ( + MachineReplicationInfoInitiationStates, + ), # noqa: E501 + "replicated_storage_bytes": (int,), # noqa: E501 + "last_seen_date_time": (datetime,), # noqa: E501 + "last_scan_start_date_time": (datetime,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "rescanned_storage_bytes": "rescannedStorageBytes", # noqa: E501 + "backlogged_storage_bytes": "backloggedStorageBytes", # noqa: E501 + "failback_client_last_seen_date_time": "failbackClientLastSeenDateTime", # noqa: E501 + "last_consistency_date_time": "lastConsistencyDateTime", # noqa: E501 + "next_consistency_estimated_date_time": "nextConsistencyEstimatedDateTime", # noqa: E501 + "total_storage_bytes": "totalStorageBytes", # noqa: E501 + "initiation_states": "initiationStates", # noqa: E501 + "replicated_storage_bytes": "replicatedStorageBytes", # noqa: E501 + "last_seen_date_time": "lastSeenDateTime", # noqa: E501 + "last_scan_start_date_time": "lastScanStartDateTime", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """MachineReplicationInfo - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + rescanned_storage_bytes (int): Amount of data rescanned (in Bytes).. [optional] # noqa: E501 + backlogged_storage_bytes (int): Amount of data requiring sync (in Bytes), that has not yet been sent.. [optional] # noqa: E501 + failback_client_last_seen_date_time (datetime): [optional] # noqa: E501 + last_consistency_date_time (datetime): Timestamp of last disk replication consistency event.. [optional] # noqa: E501 + next_consistency_estimated_date_time (datetime): Timestamp of estimate for the next disk replication consistency event.. [optional] # noqa: E501 + total_storage_bytes (int): Total storage being replicated (in Bytes).. [optional] # noqa: E501 + initiation_states (MachineReplicationInfoInitiationStates): [optional] # noqa: E501 + replicated_storage_bytes (int): Amount of data already synced (in Bytes).. [optional] # noqa: E501 + last_seen_date_time (datetime): [optional] # noqa: E501 + last_scan_start_date_time (datetime): Timestamp of last time a volume scan has started.. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/machine_replication_info_initiation_states.py b/cloudendure/model/machine_replication_info_initiation_states.py new file mode 100644 index 000000000..a7b1a027c --- /dev/null +++ b/cloudendure/model/machine_replication_info_initiation_states.py @@ -0,0 +1,182 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.machine_replication_info_initiation_states_items import ( + MachineReplicationInfoInitiationStatesItems, + ) + + globals()[ + "MachineReplicationInfoInitiationStatesItems" + ] = MachineReplicationInfoInitiationStatesItems + + +class MachineReplicationInfoInitiationStates(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([MachineReplicationInfoInitiationStatesItems],), # noqa: E501 + "estimated_next_attempt_date_time": (datetime,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + "estimated_next_attempt_date_time": "estimatedNextAttemptDateTime", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """MachineReplicationInfoInitiationStates - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([MachineReplicationInfoInitiationStatesItems]): A collection of replication initiation attempts in chronological order.. [optional] # noqa: E501 + estimated_next_attempt_date_time (datetime): In case replication is not currently active - An estimate on when its initiation will next be attempted.. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/machine_replication_info_initiation_states_items.py b/cloudendure/model/machine_replication_info_initiation_states_items.py new file mode 100644 index 000000000..e74019bdb --- /dev/null +++ b/cloudendure/model/machine_replication_info_initiation_states_items.py @@ -0,0 +1,178 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.initialization_step import InitializationStep + + globals()["InitializationStep"] = InitializationStep + + +class MachineReplicationInfoInitiationStatesItems(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "steps": ([InitializationStep],), # noqa: E501 + "start_date_time": (datetime,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "steps": "steps", # noqa: E501 + "start_date_time": "startDateTime", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """MachineReplicationInfoInitiationStatesItems - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + steps ([InitializationStep]): A collection of initiation steps in sequential order.. [optional] # noqa: E501 + start_date_time (datetime): The time stamp when this attempt commenced.. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/machine_snapshot_credits.py b/cloudendure/model/machine_snapshot_credits.py new file mode 100644 index 000000000..5150320f4 --- /dev/null +++ b/cloudendure/model/machine_snapshot_credits.py @@ -0,0 +1,168 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class MachineSnapshotCredits(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "credits": (int,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "credits": "credits", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """MachineSnapshotCredits - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + credits (int): Mbps to use for Data Replication (zero means no throttling).. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/machine_source_properties.py b/cloudendure/model/machine_source_properties.py new file mode 100644 index 000000000..cead9707a --- /dev/null +++ b/cloudendure/model/machine_source_properties.py @@ -0,0 +1,222 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.machine_source_properties_cpu import ( + MachineSourcePropertiesCpu, + ) + from cloudendure.model.machine_source_properties_disks import ( + MachineSourcePropertiesDisks, + ) + from cloudendure.model.machine_source_properties_installed_applications import ( + MachineSourcePropertiesInstalledApplications, + ) + from cloudendure.model.machine_source_properties_running_services import ( + MachineSourcePropertiesRunningServices, + ) + + globals()["MachineSourcePropertiesCpu"] = MachineSourcePropertiesCpu + globals()["MachineSourcePropertiesDisks"] = MachineSourcePropertiesDisks + globals()[ + "MachineSourcePropertiesInstalledApplications" + ] = MachineSourcePropertiesInstalledApplications + globals()[ + "MachineSourcePropertiesRunningServices" + ] = MachineSourcePropertiesRunningServices + + +class MachineSourceProperties(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "name": (str,), # noqa: E501 + "installed_applications": ( + MachineSourcePropertiesInstalledApplications, + ), # noqa: E501 + "disks": ([MachineSourcePropertiesDisks],), # noqa: E501 + "machine_cloud_state": (str,), # noqa: E501 + "public_ips": ([str],), # noqa: E501 + "memory": (int,), # noqa: E501 + "os": (str,), # noqa: E501 + "cpu": ([MachineSourcePropertiesCpu],), # noqa: E501 + "running_services": (MachineSourcePropertiesRunningServices,), # noqa: E501 + "machine_cloud_id": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "name": "name", # noqa: E501 + "installed_applications": "installedApplications", # noqa: E501 + "disks": "disks", # noqa: E501 + "machine_cloud_state": "machineCloudState", # noqa: E501 + "public_ips": "publicIps", # noqa: E501 + "memory": "memory", # noqa: E501 + "os": "os", # noqa: E501 + "cpu": "cpu", # noqa: E501 + "running_services": "runningServices", # noqa: E501 + "machine_cloud_id": "machineCloudId", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """MachineSourceProperties - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): Machine name in the source environment.. [optional] # noqa: E501 + installed_applications (MachineSourcePropertiesInstalledApplications): [optional] # noqa: E501 + disks ([MachineSourcePropertiesDisks]): Identified disks.. [optional] # noqa: E501 + machine_cloud_state (str): Machine current state in the source environment.. [optional] # noqa: E501 + public_ips ([str]): Static (non-ephemral) public IPs. On some clouds this also includes ephemeral IPs.. [optional] # noqa: E501 + memory (int): Available RAM (in Bytes).. [optional] # noqa: E501 + os (str): Running Operating System.. [optional] # noqa: E501 + cpu ([MachineSourcePropertiesCpu]): Identified CPUs.. [optional] # noqa: E501 + running_services (MachineSourcePropertiesRunningServices): [optional] # noqa: E501 + machine_cloud_id (str): Machine ID in the source environment.. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/machine_source_properties_cpu.py b/cloudendure/model/machine_source_properties_cpu.py new file mode 100644 index 000000000..55584fb93 --- /dev/null +++ b/cloudendure/model/machine_source_properties_cpu.py @@ -0,0 +1,171 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class MachineSourcePropertiesCpu(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "cores": (int,), # noqa: E501 + "model_name": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "cores": "cores", # noqa: E501 + "model_name": "modelName", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """MachineSourcePropertiesCpu - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + cores (int): Number of cores.. [optional] # noqa: E501 + model_name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/machine_source_properties_disks.py b/cloudendure/model/machine_source_properties_disks.py new file mode 100644 index 000000000..e4ae19374 --- /dev/null +++ b/cloudendure/model/machine_source_properties_disks.py @@ -0,0 +1,178 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class MachineSourcePropertiesDisks(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "is_protected": (bool,), # noqa: E501 + "name": (str,), # noqa: E501 + "size": (int,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "is_protected": "isProtected", # noqa: E501 + "name": "name", # noqa: E501 + "size": "size", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, is_protected, name, *args, **kwargs): # noqa: E501 + """MachineSourcePropertiesDisks - a model defined in OpenAPI + + Args: + is_protected (bool): Is this disk currently being replicated by CloudEndure. + name (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + size (int): Disk size (in Bytes).. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.is_protected = is_protected + self.name = name + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/machine_source_properties_installed_applications.py b/cloudendure/model/machine_source_properties_installed_applications.py new file mode 100644 index 000000000..1c9f38047 --- /dev/null +++ b/cloudendure/model/machine_source_properties_installed_applications.py @@ -0,0 +1,184 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.machine_source_properties_installed_applications_items import ( + MachineSourcePropertiesInstalledApplicationsItems, + ) + + globals()[ + "MachineSourcePropertiesInstalledApplicationsItems" + ] = MachineSourcePropertiesInstalledApplicationsItems + + +class MachineSourcePropertiesInstalledApplications(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ( + [MachineSourcePropertiesInstalledApplicationsItems], + ), # noqa: E501 + "last_updated_date_time": (datetime,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + "last_updated_date_time": "lastUpdatedDateTime", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """MachineSourcePropertiesInstalledApplications - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([MachineSourcePropertiesInstalledApplicationsItems]): [optional] # noqa: E501 + last_updated_date_time (datetime): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/machine_source_properties_installed_applications_items.py b/cloudendure/model/machine_source_properties_installed_applications_items.py new file mode 100644 index 000000000..03627fe91 --- /dev/null +++ b/cloudendure/model/machine_source_properties_installed_applications_items.py @@ -0,0 +1,168 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class MachineSourcePropertiesInstalledApplicationsItems(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "application_name": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "application_name": "applicationName", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """MachineSourcePropertiesInstalledApplicationsItems - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + application_name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/machine_source_properties_running_services.py b/cloudendure/model/machine_source_properties_running_services.py new file mode 100644 index 000000000..0f7972b8e --- /dev/null +++ b/cloudendure/model/machine_source_properties_running_services.py @@ -0,0 +1,182 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.machine_source_properties_running_services_items import ( + MachineSourcePropertiesRunningServicesItems, + ) + + globals()[ + "MachineSourcePropertiesRunningServicesItems" + ] = MachineSourcePropertiesRunningServicesItems + + +class MachineSourcePropertiesRunningServices(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([MachineSourcePropertiesRunningServicesItems],), # noqa: E501 + "last_updated_date_time": (datetime,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + "last_updated_date_time": "lastUpdatedDateTime", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """MachineSourcePropertiesRunningServices - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([MachineSourcePropertiesRunningServicesItems]): [optional] # noqa: E501 + last_updated_date_time (datetime): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/machine_source_properties_running_services_items.py b/cloudendure/model/machine_source_properties_running_services_items.py new file mode 100644 index 000000000..177e127e5 --- /dev/null +++ b/cloudendure/model/machine_source_properties_running_services_items.py @@ -0,0 +1,168 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class MachineSourcePropertiesRunningServicesItems(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "service_name": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "service_name": "serviceName", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """MachineSourcePropertiesRunningServicesItems - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + service_name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/machine_throttle_time_seconds.py b/cloudendure/model/machine_throttle_time_seconds.py new file mode 100644 index 000000000..674bbde13 --- /dev/null +++ b/cloudendure/model/machine_throttle_time_seconds.py @@ -0,0 +1,168 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class MachineThrottleTimeSeconds(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "credits": (int,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "credits": "credits", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """MachineThrottleTimeSeconds - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + credits (int): time to throttle the machine in seconds. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/machines_list.py b/cloudendure/model/machines_list.py new file mode 100644 index 000000000..862dcf764 --- /dev/null +++ b/cloudendure/model/machines_list.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.machine import Machine + + globals()["Machine"] = Machine + + +class MachinesList(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([Machine],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """MachinesList - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([Machine]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/machines_list_invalid_ids_and_job.py b/cloudendure/model/machines_list_invalid_ids_and_job.py new file mode 100644 index 000000000..12252d59e --- /dev/null +++ b/cloudendure/model/machines_list_invalid_ids_and_job.py @@ -0,0 +1,183 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.job import Job + from cloudendure.model.machine import Machine + + globals()["Job"] = Job + globals()["Machine"] = Machine + + +class MachinesListInvalidIDsAndJob(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([Machine],), # noqa: E501 + "job": (Job,), # noqa: E501 + "invalid_machine_ids": ([str],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + "job": "job", # noqa: E501 + "invalid_machine_ids": "invalidMachineIDs", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """MachinesListInvalidIDsAndJob - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([Machine]): [optional] # noqa: E501 + job (Job): [optional] # noqa: E501 + invalid_machine_ids ([str]): The IDs of the machines for which the operation failed.. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/network_interface.py b/cloudendure/model/network_interface.py new file mode 100644 index 000000000..0653a663c --- /dev/null +++ b/cloudendure/model/network_interface.py @@ -0,0 +1,174 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class NetworkInterface(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "subnet_id": (str,), # noqa: E501 + "name": (str,), # noqa: E501 + "private_ip": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "subnet_id": "subnetId", # noqa: E501 + "name": "name", # noqa: E501 + "private_ip": "privateIp", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """NetworkInterface - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + subnet_id (str): [optional] # noqa: E501 + name (str): [optional] # noqa: E501 + private_ip (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/outpost.py b/cloudendure/model/outpost.py new file mode 100644 index 000000000..dd449e8fa --- /dev/null +++ b/cloudendure/model/outpost.py @@ -0,0 +1,174 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class Outpost(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "outpost_arn": (str,), # noqa: E501 + "instance_types": ([str],), # noqa: E501 + "error": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "outpost_arn": "outpostArn", # noqa: E501 + "instance_types": "instanceTypes", # noqa: E501 + "error": "error", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Outpost - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + outpost_arn (str): [optional] # noqa: E501 + instance_types ([str]): [optional] # noqa: E501 + error (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/point_in_time.py b/cloudendure/model/point_in_time.py new file mode 100644 index 000000000..bdc66c3da --- /dev/null +++ b/cloudendure/model/point_in_time.py @@ -0,0 +1,171 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class PointInTime(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "id": (str,), # noqa: E501 + "date_time": (datetime,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "id": "id", # noqa: E501 + "date_time": "dateTime", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """PointInTime - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + id (str): [optional] # noqa: E501 + date_time (datetime): Timestamp for this Recovery Point. A NULL value signifies there is no later point available.. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/point_in_time_list.py b/cloudendure/model/point_in_time_list.py new file mode 100644 index 000000000..0c0fee227 --- /dev/null +++ b/cloudendure/model/point_in_time_list.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.point_in_time import PointInTime + + globals()["PointInTime"] = PointInTime + + +class PointInTimeList(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([PointInTime],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """PointInTimeList - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([PointInTime]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/populate_job_names.py b/cloudendure/model/populate_job_names.py new file mode 100644 index 000000000..9632bb381 --- /dev/null +++ b/cloudendure/model/populate_job_names.py @@ -0,0 +1,168 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class PopulateJobNames(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "job_names": ([str],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "job_names": "jobNames", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """PopulateJobNames - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + job_names ([str]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/populate_job_params.py b/cloudendure/model/populate_job_params.py new file mode 100644 index 000000000..ea4fc6caa --- /dev/null +++ b/cloudendure/model/populate_job_params.py @@ -0,0 +1,174 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class PopulateJobParams(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "job_name": (str,), # noqa: E501 + "immediate": (bool,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "job_name": "jobName", # noqa: E501 + "immediate": "immediate", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, job_name, *args, **kwargs): # noqa: E501 + """PopulateJobParams - a model defined in OpenAPI + + Args: + job_name (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + immediate (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.job_name = job_name + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/project.py b/cloudendure/model/project.py new file mode 100644 index 000000000..ff40df72f --- /dev/null +++ b/cloudendure/model/project.py @@ -0,0 +1,228 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.project_ce_admin_properties import ProjectCeAdminProperties + from cloudendure.model.project_features import ProjectFeatures + + globals()["ProjectCeAdminProperties"] = ProjectCeAdminProperties + globals()["ProjectFeatures"] = ProjectFeatures + + +class Project(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ("type",): { + "MIGRATION": "MIGRATION", + "DR": "DR", + "BACKUP": "BACKUP", + }, + } + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "replication_configuration": (str,), # noqa: E501 + "features": (ProjectFeatures,), # noqa: E501 + "replication_reversed": (bool,), # noqa: E501 + "cloud_credentials_ids": ([str],), # noqa: E501 + "source_region": (str,), # noqa: E501 + "id": (str,), # noqa: E501 + "target_cloud_id": (str,), # noqa: E501 + "agent_installation_token": (str,), # noqa: E501 + "name": (str,), # noqa: E501 + "users_ids": ([str],), # noqa: E501 + "type": (str,), # noqa: E501 + "source_cloud_credentials_id": (str,), # noqa: E501 + "target_cloud_credentials_id": (str,), # noqa: E501 + "licenses_ids": ([str],), # noqa: E501 + "ce_admin_properties": (ProjectCeAdminProperties,), # noqa: E501 + "source_cloud_id": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "replication_configuration": "replicationConfiguration", # noqa: E501 + "features": "features", # noqa: E501 + "replication_reversed": "replicationReversed", # noqa: E501 + "cloud_credentials_ids": "cloudCredentialsIDs", # noqa: E501 + "source_region": "sourceRegion", # noqa: E501 + "id": "id", # noqa: E501 + "target_cloud_id": "targetCloudId", # noqa: E501 + "agent_installation_token": "agentInstallationToken", # noqa: E501 + "name": "name", # noqa: E501 + "users_ids": "usersIDs", # noqa: E501 + "type": "type", # noqa: E501 + "source_cloud_credentials_id": "sourceCloudCredentialsId", # noqa: E501 + "target_cloud_credentials_id": "targetCloudCredentialsId", # noqa: E501 + "licenses_ids": "licensesIDs", # noqa: E501 + "ce_admin_properties": "ceAdminProperties", # noqa: E501 + "source_cloud_id": "sourceCloudId", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Project - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + replication_configuration (str): The ID of the replication configuration object to use (corresponding to the ones available in /projects/{projectId}/replicationConfigurations).. [optional] # noqa: E501 + features (ProjectFeatures): [optional] # noqa: E501 + replication_reversed (bool): [optional] # noqa: E501 + cloud_credentials_ids ([str]): The IDs of the cloud credentials to use (array of one).. [optional] # noqa: E501 + source_region (str): The ID of the region to use as source.. [optional] # noqa: E501 + id (str): [optional] # noqa: E501 + target_cloud_id (str): [optional] # noqa: E501 + agent_installation_token (str): [optional] # noqa: E501 + name (str): [optional] # noqa: E501 + users_ids ([str]): [optional] # noqa: E501 + type (str): [optional] # noqa: E501 + source_cloud_credentials_id (str): [optional] # noqa: E501 + target_cloud_credentials_id (str): [optional] # noqa: E501 + licenses_ids ([str]): The IDs of the licenses associated with this project (array of one).. [optional] # noqa: E501 + ce_admin_properties (ProjectCeAdminProperties): [optional] # noqa: E501 + source_cloud_id (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/project_ce_admin_properties.py b/cloudendure/model/project_ce_admin_properties.py new file mode 100644 index 000000000..5e52f06eb --- /dev/null +++ b/cloudendure/model/project_ce_admin_properties.py @@ -0,0 +1,171 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class ProjectCeAdminProperties(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "comments": (str,), # noqa: E501 + "history": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "comments": "comments", # noqa: E501 + "history": "history", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ProjectCeAdminProperties - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + comments (str): [optional] # noqa: E501 + history (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/project_features.py b/cloudendure/model/project_features.py new file mode 100644 index 000000000..c4b3827f0 --- /dev/null +++ b/cloudendure/model/project_features.py @@ -0,0 +1,192 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class ProjectFeatures(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "aws_extended_hdd_types": (bool,), # noqa: E501 + "allow_recovery_plans": (bool,), # noqa: E501 + "force_no_rescan_after_reboot": (bool,), # noqa: E501 + "allow_no_rescan_after_reboot": (bool,), # noqa: E501 + "allow_archiving": (bool,), # noqa: E501 + "is_demo": (bool,), # noqa: E501 + "dr_tier2": (bool,), # noqa: E501 + "allow_byol_on_dedicated_instance": (bool,), # noqa: E501 + "pit": (bool,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "aws_extended_hdd_types": "awsExtendedHddTypes", # noqa: E501 + "allow_recovery_plans": "allowRecoveryPlans", # noqa: E501 + "force_no_rescan_after_reboot": "forceNoRescanAfterReboot", # noqa: E501 + "allow_no_rescan_after_reboot": "allowNoRescanAfterReboot", # noqa: E501 + "allow_archiving": "allowArchiving", # noqa: E501 + "is_demo": "isDemo", # noqa: E501 + "dr_tier2": "drTier2", # noqa: E501 + "allow_byol_on_dedicated_instance": "allowByolOnDedicatedInstance", # noqa: E501 + "pit": "pit", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ProjectFeatures - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + aws_extended_hdd_types (bool): Whether the hard disk ST1 and SC1 types are supported.. [optional] # noqa: E501 + allow_recovery_plans (bool): Whether the Recovery Plans are enabled.. [optional] # noqa: E501 + force_no_rescan_after_reboot (bool): makes installing the new driver on project machines the default behavior.. [optional] # noqa: E501 + allow_no_rescan_after_reboot (bool): allows installing the new driver on project machines.. [optional] # noqa: E501 + allow_archiving (bool): Enables machine archiving for backup. [optional] # noqa: E501 + is_demo (bool): Enables clicking the target private IP (for demo). [optional] # noqa: E501 + dr_tier2 (bool): Whether the account is in DR level. [optional] # noqa: E501 + allow_byol_on_dedicated_instance (bool): specifies whether to allow byol windows license in the UI if dedicated instance tenancy is selected.. [optional] # noqa: E501 + pit (bool): Whether the account can use PIT when creating replicas.. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/project_storage.py b/cloudendure/model/project_storage.py new file mode 100644 index 000000000..28c442034 --- /dev/null +++ b/cloudendure/model/project_storage.py @@ -0,0 +1,189 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.project_storage_working_storage import ( + ProjectStorageWorkingStorage, + ) + + globals()["ProjectStorageWorkingStorage"] = ProjectStorageWorkingStorage + + +class ProjectStorage(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "project_id": (str,), # noqa: E501 + "points_in_time_total_bytes": (int,), # noqa: E501 + "running_machines_total_bytes": (int,), # noqa: E501 + "working_storage": (ProjectStorageWorkingStorage,), # noqa: E501 + "calculation_date_time": (datetime,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "project_id": "projectId", # noqa: E501 + "points_in_time_total_bytes": "pointsInTimeTotalBytes", # noqa: E501 + "running_machines_total_bytes": "runningMachinesTotalBytes", # noqa: E501 + "working_storage": "workingStorage", # noqa: E501 + "calculation_date_time": "calculationDateTime", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ProjectStorage - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + project_id (str): [optional] # noqa: E501 + points_in_time_total_bytes (int): [optional] # noqa: E501 + running_machines_total_bytes (int): [optional] # noqa: E501 + working_storage (ProjectStorageWorkingStorage): [optional] # noqa: E501 + calculation_date_time (datetime): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/project_storage_working_storage.py b/cloudendure/model/project_storage_working_storage.py new file mode 100644 index 000000000..accc4a3a2 --- /dev/null +++ b/cloudendure/model/project_storage_working_storage.py @@ -0,0 +1,171 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class ProjectStorageWorkingStorage(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "disks_total_bytes": (int,), # noqa: E501 + "snapshots_total_bytes": (int,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "disks_total_bytes": "disksTotalBytes", # noqa: E501 + "snapshots_total_bytes": "snapshotsTotalBytes", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ProjectStorageWorkingStorage - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + disks_total_bytes (int): [optional] # noqa: E501 + snapshots_total_bytes (int): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/projects_and_users.py b/cloudendure/model/projects_and_users.py new file mode 100644 index 000000000..7bf430453 --- /dev/null +++ b/cloudendure/model/projects_and_users.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.projects_and_users_items import ProjectsAndUsersItems + + globals()["ProjectsAndUsersItems"] = ProjectsAndUsersItems + + +class ProjectsAndUsers(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([ProjectsAndUsersItems],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ProjectsAndUsers - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([ProjectsAndUsersItems]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/projects_and_users_items.py b/cloudendure/model/projects_and_users_items.py new file mode 100644 index 000000000..1c87b0935 --- /dev/null +++ b/cloudendure/model/projects_and_users_items.py @@ -0,0 +1,171 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class ProjectsAndUsersItems(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "project_id": (str,), # noqa: E501 + "user_ids": ([str],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "project_id": "projectId", # noqa: E501 + "user_ids": "userIDs", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ProjectsAndUsersItems - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + project_id (str): [optional] # noqa: E501 + user_ids ([str]): . [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/projects_list.py b/cloudendure/model/projects_list.py new file mode 100644 index 000000000..7ed9aa99c --- /dev/null +++ b/cloudendure/model/projects_list.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.project import Project + + globals()["Project"] = Project + + +class ProjectsList(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([Project],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ProjectsList - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([Project]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/recovery_plan.py b/cloudendure/model/recovery_plan.py new file mode 100644 index 000000000..80327df4b --- /dev/null +++ b/cloudendure/model/recovery_plan.py @@ -0,0 +1,181 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.recovery_plan_steps import RecoveryPlanSteps + + globals()["RecoveryPlanSteps"] = RecoveryPlanSteps + + +class RecoveryPlan(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "steps": (RecoveryPlanSteps,), # noqa: E501 + "id": (str,), # noqa: E501 + "name": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "steps": "steps", # noqa: E501 + "id": "id", # noqa: E501 + "name": "name", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """RecoveryPlan - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + steps (RecoveryPlanSteps): [optional] # noqa: E501 + id (str): [optional] # noqa: E501 + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/recovery_plan_list.py b/cloudendure/model/recovery_plan_list.py new file mode 100644 index 000000000..d5dd89ec2 --- /dev/null +++ b/cloudendure/model/recovery_plan_list.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.recovery_plan import RecoveryPlan + + globals()["RecoveryPlan"] = RecoveryPlan + + +class RecoveryPlanList(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([RecoveryPlan],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """RecoveryPlanList - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([RecoveryPlan]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/recovery_plan_step.py b/cloudendure/model/recovery_plan_step.py new file mode 100644 index 000000000..940f130b0 --- /dev/null +++ b/cloudendure/model/recovery_plan_step.py @@ -0,0 +1,174 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class RecoveryPlanStep(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "machine_ids": ([str],), # noqa: E501 + "wait_before": (str,), # noqa: E501 + "name": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "machine_ids": "machineIDs", # noqa: E501 + "wait_before": "waitBefore", # noqa: E501 + "name": "name", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """RecoveryPlanStep - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + machine_ids ([str]): [optional] # noqa: E501 + wait_before (str): [optional] # noqa: E501 + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/recovery_plan_steps.py b/cloudendure/model/recovery_plan_steps.py new file mode 100644 index 000000000..ff4a4f107 --- /dev/null +++ b/cloudendure/model/recovery_plan_steps.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.recovery_plan_step import RecoveryPlanStep + + globals()["RecoveryPlanStep"] = RecoveryPlanStep + + +class RecoveryPlanSteps(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([RecoveryPlanStep],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """RecoveryPlanSteps - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([RecoveryPlanStep]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/region.py b/cloudendure/model/region.py new file mode 100644 index 000000000..ee7313b2d --- /dev/null +++ b/cloudendure/model/region.py @@ -0,0 +1,250 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.compute_location import ComputeLocation + from cloudendure.model.logical_location import LogicalLocation + from cloudendure.model.network_interface import NetworkInterface + from cloudendure.model.outpost import Outpost + from cloudendure.model.security_group import SecurityGroup + from cloudendure.model.storage_location import StorageLocation + from cloudendure.model.subnet import Subnet + + globals()["ComputeLocation"] = ComputeLocation + globals()["LogicalLocation"] = LogicalLocation + globals()["NetworkInterface"] = NetworkInterface + globals()["Outpost"] = Outpost + globals()["SecurityGroup"] = SecurityGroup + globals()["StorageLocation"] = StorageLocation + globals()["Subnet"] = Subnet + + +class Region(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "subnets": ([Subnet],), # noqa: E501 + "scsi_adapter_types": ([str],), # noqa: E501 + "outposts": ([Outpost],), # noqa: E501 + "placement_groups": ([str],), # noqa: E501 + "instance_types": ([str],), # noqa: E501 + "logical_locations": ([LogicalLocation],), # noqa: E501 + "zones": ([str],), # noqa: E501 + "volume_encryption_keys": ([str, dict, none_type],), # noqa: E501 + "cloud": (str,), # noqa: E501 + "security_groups": ([SecurityGroup],), # noqa: E501 + "id": (str,), # noqa: E501 + "max_cpus_per_machine": (int,), # noqa: E501 + "network_interfaces": ([NetworkInterface],), # noqa: E501 + "compute_locations": ([ComputeLocation],), # noqa: E501 + "name": (str,), # noqa: E501 + "storage_locations": ([StorageLocation],), # noqa: E501 + "iam_roles": ([str],), # noqa: E501 + "static_ips": ([str],), # noqa: E501 + "max_cores_per_machine_cpu": (int,), # noqa: E501 + "dedicated_hosts": ([str],), # noqa: E501 + "network_adapter_types": ([str],), # noqa: E501 + "max_mb_ram_per_machine": (int,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "subnets": "subnets", # noqa: E501 + "scsi_adapter_types": "scsiAdapterTypes", # noqa: E501 + "outposts": "outposts", # noqa: E501 + "placement_groups": "placementGroups", # noqa: E501 + "instance_types": "instanceTypes", # noqa: E501 + "logical_locations": "logicalLocations", # noqa: E501 + "zones": "zones", # noqa: E501 + "volume_encryption_keys": "volumeEncryptionKeys", # noqa: E501 + "cloud": "cloud", # noqa: E501 + "security_groups": "securityGroups", # noqa: E501 + "id": "id", # noqa: E501 + "max_cpus_per_machine": "maxCpusPerMachine", # noqa: E501 + "network_interfaces": "networkInterfaces", # noqa: E501 + "compute_locations": "computeLocations", # noqa: E501 + "name": "name", # noqa: E501 + "storage_locations": "storageLocations", # noqa: E501 + "iam_roles": "iamRoles", # noqa: E501 + "static_ips": "staticIps", # noqa: E501 + "max_cores_per_machine_cpu": "maxCoresPerMachineCpu", # noqa: E501 + "dedicated_hosts": "dedicatedHosts", # noqa: E501 + "network_adapter_types": "networkAdapterTypes", # noqa: E501 + "max_mb_ram_per_machine": "maxMbRamPerMachine", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Region - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + subnets ([Subnet]): [optional] # noqa: E501 + scsi_adapter_types ([str]): [optional] # noqa: E501 + outposts ([Outpost]): [optional] # noqa: E501 + placement_groups ([str]): [optional] # noqa: E501 + instance_types ([str]): [optional] # noqa: E501 + logical_locations ([LogicalLocation]): [optional] # noqa: E501 + zones ([str]): [optional] # noqa: E501 + volume_encryption_keys ([str,dict,none_type]): [optional] # noqa: E501 + cloud (str): [optional] # noqa: E501 + security_groups ([SecurityGroup]): [optional] # noqa: E501 + id (str): [optional] # noqa: E501 + max_cpus_per_machine (int): Maximum CPUs per per Target machine (currently relevant for vCenter cloud only). [optional] # noqa: E501 + network_interfaces ([NetworkInterface]): [optional] # noqa: E501 + compute_locations ([ComputeLocation]): Compute location (e.g. vCenter Host). [optional] # noqa: E501 + name (str): [optional] # noqa: E501 + storage_locations ([StorageLocation]): Storage location (e.g. Azure Storage Account, vCenter Data Store). [optional] # noqa: E501 + iam_roles ([str]): [optional] # noqa: E501 + static_ips ([str]): [optional] # noqa: E501 + max_cores_per_machine_cpu (int): Maximum CPU cores per CPU in Target machines (currently relevant for vCenter cloud only). [optional] # noqa: E501 + dedicated_hosts ([str]): [optional] # noqa: E501 + network_adapter_types ([str]): [optional] # noqa: E501 + max_mb_ram_per_machine (int): Maximum MB RAM per Target machine (currently relevant for vCenter cloud only). [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/regions_list.py b/cloudendure/model/regions_list.py new file mode 100644 index 000000000..23612dfb1 --- /dev/null +++ b/cloudendure/model/regions_list.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.region import Region + + globals()["Region"] = Region + + +class RegionsList(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([Region],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """RegionsList - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([Region]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/replica.py b/cloudendure/model/replica.py new file mode 100644 index 000000000..0dbce5dc8 --- /dev/null +++ b/cloudendure/model/replica.py @@ -0,0 +1,198 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class Replica(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "machine": (str,), # noqa: E501 + "cloud_endure_creation_date_time": (datetime,), # noqa: E501 + "name": (str,), # noqa: E501 + "point_in_time": (str,), # noqa: E501 + "job_id": (str,), # noqa: E501 + "machine_cloud_state": (str,), # noqa: E501 + "public_ips": ([str],), # noqa: E501 + "machine_cloud_health_checks": (str,), # noqa: E501 + "region_id": (str,), # noqa: E501 + "id": (str,), # noqa: E501 + "machine_cloud_id": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "machine": "machine", # noqa: E501 + "cloud_endure_creation_date_time": "cloudEndureCreationDateTime", # noqa: E501 + "name": "name", # noqa: E501 + "point_in_time": "pointInTime", # noqa: E501 + "job_id": "jobId", # noqa: E501 + "machine_cloud_state": "machineCloudState", # noqa: E501 + "public_ips": "publicIps", # noqa: E501 + "machine_cloud_health_checks": "machineCloudHealthChecks", # noqa: E501 + "region_id": "regionId", # noqa: E501 + "id": "id", # noqa: E501 + "machine_cloud_id": "machineCloudId", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Replica - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + machine (str): The ID of the source machine for this target machine.. [optional] # noqa: E501 + cloud_endure_creation_date_time (datetime): Timestamp for launching this target machine.. [optional] # noqa: E501 + name (str): Target machine name in the target environment.. [optional] # noqa: E501 + point_in_time (str): The ID of the pointInTime object from which this target machine was created.. [optional] # noqa: E501 + job_id (str): [optional] # noqa: E501 + machine_cloud_state (str): Target machine state in the target environment.. [optional] # noqa: E501 + public_ips ([str]): Static (non-ephemral) public IPs. On some clouds this also includes ephemeral IPs.. [optional] # noqa: E501 + machine_cloud_health_checks (str): Cloud healthcheck string. [optional] # noqa: E501 + region_id (str): The ID of the region where this target machine has been launched.. [optional] # noqa: E501 + id (str): [optional] # noqa: E501 + machine_cloud_id (str): Target machine ID in the target environment.. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/replication_configuration.py b/cloudendure/model/replication_configuration.py new file mode 100644 index 000000000..67b7aefce --- /dev/null +++ b/cloudendure/model/replication_configuration.py @@ -0,0 +1,275 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.replication_configuration_replication_tags import ( + ReplicationConfigurationReplicationTags, + ) + + globals()[ + "ReplicationConfigurationReplicationTags" + ] = ReplicationConfigurationReplicationTags + + +class ReplicationConfiguration(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "volume_encryption_key": (str,), # noqa: E501 + "replication_tags": ( + [ReplicationConfigurationReplicationTags], + ), # noqa: E501 + "disable_public_ip": (bool,), # noqa: E501 + "subnet_host_project": (str,), # noqa: E501 + "cost_optimized_burst_balance_delta_threshold": (int,), # noqa: E501 + "replication_software_download_source": (str,), # noqa: E501 + "cost_optimized_sc1_volumes_throughput_window_size_minutes": ( + int, + ), # noqa: E501 + "replication_server_type": (str,), # noqa: E501 + "cost_optimized_burst_balance_window_size_minutes": (int,), # noqa: E501 + "use_low_cost_disks": (bool,), # noqa: E501 + "compute_location_id": (str,), # noqa: E501 + "cloud_credentials": (str,), # noqa: E501 + "subnet_id": (str,), # noqa: E501 + "logical_location_id": (str,), # noqa: E501 + "cost_optimized_default_volumes_throughput_window_size_minutes": ( + int, + ), # noqa: E501 + "bandwidth_throttling": (int,), # noqa: E501 + "cost_optimized_burst_balance_threshold": (int,), # noqa: E501 + "use_dedicated_server": (bool,), # noqa: E501 + "daily_pit_number": (int,), # noqa: E501 + "zone": (str,), # noqa: E501 + "replicator_security_group_ids": ([str],), # noqa: E501 + "use_private_ip": (bool,), # noqa: E501 + "region": (str,), # noqa: E501 + "id": (str,), # noqa: E501 + "proxy_url": (str,), # noqa: E501 + "volume_encryption_allowed": (bool,), # noqa: E501 + "object_storage_location": (str,), # noqa: E501 + "archiving_enabled": (bool,), # noqa: E501 + "converter_type": (str,), # noqa: E501 + "storage_location_id": (str,), # noqa: E501 + "use_cost_optimized_disk_type": (bool,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "volume_encryption_key": "volumeEncryptionKey", # noqa: E501 + "replication_tags": "replicationTags", # noqa: E501 + "disable_public_ip": "disablePublicIp", # noqa: E501 + "subnet_host_project": "subnetHostProject", # noqa: E501 + "cost_optimized_burst_balance_delta_threshold": "costOptimizedBurstBalanceDeltaThreshold", # noqa: E501 + "replication_software_download_source": "replicationSoftwareDownloadSource", # noqa: E501 + "cost_optimized_sc1_volumes_throughput_window_size_minutes": "costOptimizedSc1VolumesThroughputWindowSizeMinutes", # noqa: E501 + "replication_server_type": "replicationServerType", # noqa: E501 + "cost_optimized_burst_balance_window_size_minutes": "costOptimizedBurstBalanceWindowSizeMinutes", # noqa: E501 + "use_low_cost_disks": "useLowCostDisks", # noqa: E501 + "compute_location_id": "computeLocationId", # noqa: E501 + "cloud_credentials": "cloudCredentials", # noqa: E501 + "subnet_id": "subnetId", # noqa: E501 + "logical_location_id": "logicalLocationId", # noqa: E501 + "cost_optimized_default_volumes_throughput_window_size_minutes": "costOptimizedDefaultVolumesThroughputWindowSizeMinutes", # noqa: E501 + "bandwidth_throttling": "bandwidthThrottling", # noqa: E501 + "cost_optimized_burst_balance_threshold": "costOptimizedBurstBalanceThreshold", # noqa: E501 + "use_dedicated_server": "useDedicatedServer", # noqa: E501 + "daily_pit_number": "dailyPitNumber", # noqa: E501 + "zone": "zone", # noqa: E501 + "replicator_security_group_ids": "replicatorSecurityGroupIDs", # noqa: E501 + "use_private_ip": "usePrivateIp", # noqa: E501 + "region": "region", # noqa: E501 + "id": "id", # noqa: E501 + "proxy_url": "proxyUrl", # noqa: E501 + "volume_encryption_allowed": "volumeEncryptionAllowed", # noqa: E501 + "object_storage_location": "objectStorageLocation", # noqa: E501 + "archiving_enabled": "archivingEnabled", # noqa: E501 + "converter_type": "converterType", # noqa: E501 + "storage_location_id": "storageLocationId", # noqa: E501 + "use_cost_optimized_disk_type": "useCostOptimizedDiskType", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ReplicationConfiguration - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + volume_encryption_key (str): AWS only. ARN to private key for Volume Encryption. Possible values can be fetched from the Region object.. [optional] # noqa: E501 + replication_tags ([ReplicationConfigurationReplicationTags]): AWS only. Tags that will be applied to every cloud resource created in the CloudEndure Staging Area.. [optional] # noqa: E501 + disable_public_ip (bool): When private IP is used, do not allocate public IP for replication server. [optional] # noqa: E501 + subnet_host_project (str): GCP only. Host project of cross project network subnet.. [optional] # noqa: E501 + cost_optimized_burst_balance_delta_threshold (int): when using cost optimized disk type, threshold of delta between measurments to move to default. [optional] # noqa: E501 + replication_software_download_source (str): [optional] # noqa: E501 + cost_optimized_sc1_volumes_throughput_window_size_minutes (int): when using cost optimized disk type, size of window for sc1 volumes througput measurments. [optional] # noqa: E501 + replication_server_type (str): [optional] # noqa: E501 + cost_optimized_burst_balance_window_size_minutes (int): when using cost optimized disk type, size of window for burst balance measurments. [optional] # noqa: E501 + use_low_cost_disks (bool): use low cost disks for replication whenever possible. [optional] # noqa: E501 + compute_location_id (str): [optional] # noqa: E501 + cloud_credentials (str): The ID for the cloudCredentials object containing the credentials to be used for accessing the target cloud.. [optional] # noqa: E501 + subnet_id (str): Subnet where replication servers will be created. Possible values can be fetched from the Region object.. [optional] # noqa: E501 + logical_location_id (str): vcenter = vmFolder. [optional] # noqa: E501 + cost_optimized_default_volumes_throughput_window_size_minutes (int): when using cost optimized disk type, size of window for default volumes througput measurments. [optional] # noqa: E501 + bandwidth_throttling (int): Mbps to use for Data Replication (zero means no throttling).. [optional] # noqa: E501 + cost_optimized_burst_balance_threshold (int): when using cost optimized disk type, threshold of burst balance under which to move to default. [optional] # noqa: E501 + use_dedicated_server (bool): [optional] # noqa: E501 + daily_pit_number (int): Number of days to Keep PIT snapshots. [optional] # noqa: E501 + zone (str): Relevant for GCP and Azure ARM. The Zone to replicate into.. [optional] # noqa: E501 + replicator_security_group_ids ([str]): AWS only. The security groups that will be applied to the replication servers. Possible values can be fetched from the Region object.. [optional] # noqa: E501 + use_private_ip (bool): Should the CloudEndure agent access the replication server using its private IP address.. [optional] # noqa: E501 + region (str): [optional] # noqa: E501 + id (str): [optional] # noqa: E501 + proxy_url (str): The full URI for a proxy (schema, username, password, domain, port) if required for the CloudEndure agent.. [optional] # noqa: E501 + volume_encryption_allowed (bool): [optional] # noqa: E501 + object_storage_location (str): bucket in aws . [optional] # noqa: E501 + archiving_enabled (bool): [optional] # noqa: E501 + converter_type (str): [optional] # noqa: E501 + storage_location_id (str): [optional] # noqa: E501 + use_cost_optimized_disk_type (bool): use cost optimized disk type for replication. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/replication_configuration_list.py b/cloudendure/model/replication_configuration_list.py new file mode 100644 index 000000000..52d8101eb --- /dev/null +++ b/cloudendure/model/replication_configuration_list.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.replication_configuration import ReplicationConfiguration + + globals()["ReplicationConfiguration"] = ReplicationConfiguration + + +class ReplicationConfigurationList(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([ReplicationConfiguration],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ReplicationConfigurationList - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([ReplicationConfiguration]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/replication_configuration_replication_tags.py b/cloudendure/model/replication_configuration_replication_tags.py new file mode 100644 index 000000000..8cef1e7b3 --- /dev/null +++ b/cloudendure/model/replication_configuration_replication_tags.py @@ -0,0 +1,171 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class ReplicationConfigurationReplicationTags(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "key": (str,), # noqa: E501 + "value": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "key": "key", # noqa: E501 + "value": "value", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ReplicationConfigurationReplicationTags - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + key (str): [optional] # noqa: E501 + value (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/saml_settings.py b/cloudendure/model/saml_settings.py new file mode 100644 index 000000000..4c264a8f2 --- /dev/null +++ b/cloudendure/model/saml_settings.py @@ -0,0 +1,174 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class SamlSettings(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "identity_provider_certificate": (str,), # noqa: E501 + "identity_provider_url": (str,), # noqa: E501 + "identity_provider_id": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "identity_provider_certificate": "identityProviderCertificate", # noqa: E501 + "identity_provider_url": "identityProviderUrl", # noqa: E501 + "identity_provider_id": "identityProviderID", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """SamlSettings - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + identity_provider_certificate (str): [optional] # noqa: E501 + identity_provider_url (str): [optional] # noqa: E501 + identity_provider_id (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/security_group.py b/cloudendure/model/security_group.py new file mode 100644 index 000000000..5edfbfee8 --- /dev/null +++ b/cloudendure/model/security_group.py @@ -0,0 +1,174 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class SecurityGroup(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "network_id": (str,), # noqa: E501 + "security_group_id": (str,), # noqa: E501 + "name": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "network_id": "networkId", # noqa: E501 + "security_group_id": "securityGroupId", # noqa: E501 + "name": "name", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """SecurityGroup - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + network_id (str): [optional] # noqa: E501 + security_group_id (str): [optional] # noqa: E501 + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/storage_location.py b/cloudendure/model/storage_location.py new file mode 100644 index 000000000..15692f2a5 --- /dev/null +++ b/cloudendure/model/storage_location.py @@ -0,0 +1,171 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class StorageLocation(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "location_id": (str,), # noqa: E501 + "name": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "location_id": "locationId", # noqa: E501 + "name": "name", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """StorageLocation - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + location_id (str): [optional] # noqa: E501 + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/subnet.py b/cloudendure/model/subnet.py new file mode 100644 index 000000000..f7cc563f2 --- /dev/null +++ b/cloudendure/model/subnet.py @@ -0,0 +1,177 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class Subnet(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "subnet_id": (str,), # noqa: E501 + "network_id": (str,), # noqa: E501 + "name": (str,), # noqa: E501 + "outpost_arn": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "subnet_id": "subnetId", # noqa: E501 + "network_id": "networkId", # noqa: E501 + "name": "name", # noqa: E501 + "outpost_arn": "outpostArn", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Subnet - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + subnet_id (str): [optional] # noqa: E501 + network_id (str): [optional] # noqa: E501 + name (str): [optional] # noqa: E501 + outpost_arn (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/time.py b/cloudendure/model/time.py new file mode 100644 index 000000000..b2d031956 --- /dev/null +++ b/cloudendure/model/time.py @@ -0,0 +1,168 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class Time(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "date_time": (datetime,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "date_time": "dateTime", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Time - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + date_time (datetime): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/updateable_scripts.py b/cloudendure/model/updateable_scripts.py new file mode 100644 index 000000000..ce24716f4 --- /dev/null +++ b/cloudendure/model/updateable_scripts.py @@ -0,0 +1,178 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.updateable_scripts_result import UpdateableScriptsResult + + globals()["UpdateableScriptsResult"] = UpdateableScriptsResult + + +class UpdateableScripts(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "result": (UpdateableScriptsResult,), # noqa: E501 + "error": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "result": "result", # noqa: E501 + "error": "error", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """UpdateableScripts - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + result (UpdateableScriptsResult): [optional] # noqa: E501 + error (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/updateable_scripts_result.py b/cloudendure/model/updateable_scripts_result.py new file mode 100644 index 000000000..2676b2f79 --- /dev/null +++ b/cloudendure/model/updateable_scripts_result.py @@ -0,0 +1,223 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.updateable_scripts_result_on_premise_volumes import ( + UpdateableScriptsResultOnPremiseVolumes, + ) + + globals()[ + "UpdateableScriptsResultOnPremiseVolumes" + ] = UpdateableScriptsResultOnPremiseVolumes + + +class UpdateableScriptsResult(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "migration": (str,), # noqa: E501 + "custom_preboot_timeout": (int,), # noqa: E501 + "mount_points": ([str],), # noqa: E501 + "postboot_auto_copy_datetime": (str,), # noqa: E501 + "lvm_vgs": ([str],), # noqa: E501 + "preboot_environment": ({str: (str,)},), # noqa: E501 + "postboot": ([str],), # noqa: E501 + "converter_ami": (str,), # noqa: E501 + "postboot_uninstall_disable": (bool,), # noqa: E501 + "volume_id": (str,), # noqa: E501 + "preboot_auto_copy_datetime": (str,), # noqa: E501 + "partitions": ([int],), # noqa: E501 + "preboot": ([str],), # noqa: E501 + "on_premise_root_device": (str,), # noqa: E501 + "on_premise_volumes": ( + [UpdateableScriptsResultOnPremiseVolumes], + ), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "migration": "migration", # noqa: E501 + "custom_preboot_timeout": "custom_preboot_timeout", # noqa: E501 + "mount_points": "mount_points", # noqa: E501 + "postboot_auto_copy_datetime": "postboot_auto_copy_datetime", # noqa: E501 + "lvm_vgs": "lvm_vgs", # noqa: E501 + "preboot_environment": "preboot_environment", # noqa: E501 + "postboot": "postboot", # noqa: E501 + "converter_ami": "converter_ami", # noqa: E501 + "postboot_uninstall_disable": "postboot_uninstall_disable", # noqa: E501 + "volume_id": "volume_id", # noqa: E501 + "preboot_auto_copy_datetime": "preboot_auto_copy_datetime", # noqa: E501 + "partitions": "partitions", # noqa: E501 + "preboot": "preboot", # noqa: E501 + "on_premise_root_device": "on_premise_root_device", # noqa: E501 + "on_premise_volumes": "on_premise_volumes", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """UpdateableScriptsResult - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + migration (str): [optional] # noqa: E501 + custom_preboot_timeout (int): [optional] # noqa: E501 + mount_points ([str]): [optional] # noqa: E501 + postboot_auto_copy_datetime (str): [optional] # noqa: E501 + lvm_vgs ([str]): [optional] # noqa: E501 + preboot_environment ({str: (str,)}): [optional] # noqa: E501 + postboot ([str]): [optional] # noqa: E501 + converter_ami (str): [optional] # noqa: E501 + postboot_uninstall_disable (bool): [optional] # noqa: E501 + volume_id (str): [optional] # noqa: E501 + preboot_auto_copy_datetime (str): [optional] # noqa: E501 + partitions ([int]): [optional] # noqa: E501 + preboot ([str]): [optional] # noqa: E501 + on_premise_root_device (str): [optional] # noqa: E501 + on_premise_volumes ([UpdateableScriptsResultOnPremiseVolumes]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/updateable_scripts_result_on_premise_volumes.py b/cloudendure/model/updateable_scripts_result_on_premise_volumes.py new file mode 100644 index 000000000..e0e5d42fb --- /dev/null +++ b/cloudendure/model/updateable_scripts_result_on_premise_volumes.py @@ -0,0 +1,174 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class UpdateableScriptsResultOnPremiseVolumes(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "device": (str,), # noqa: E501 + "vol_id": (str,), # noqa: E501 + "size": (int,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "device": "device", # noqa: E501 + "vol_id": "vol_id", # noqa: E501 + "size": "size", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """UpdateableScriptsResultOnPremiseVolumes - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + device (str): [optional] # noqa: E501 + vol_id (str): [optional] # noqa: E501 + size (int): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/upgrade_counter_delay.py b/cloudendure/model/upgrade_counter_delay.py new file mode 100644 index 000000000..d43c4332c --- /dev/null +++ b/cloudendure/model/upgrade_counter_delay.py @@ -0,0 +1,168 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class UpgradeCounterDelay(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "sleep": (int,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "sleep": "sleep", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """UpgradeCounterDelay - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + sleep (int): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/usage.py b/cloudendure/model/usage.py new file mode 100644 index 000000000..eb3f99fee --- /dev/null +++ b/cloudendure/model/usage.py @@ -0,0 +1,177 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class Usage(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "start_of_use_date_time": (datetime,), # noqa: E501 + "cloud_id": (str,), # noqa: E501 + "name": (str,), # noqa: E501 + "machine_id": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "start_of_use_date_time": "startOfUseDateTime", # noqa: E501 + "cloud_id": "cloudId", # noqa: E501 + "name": "name", # noqa: E501 + "machine_id": "machineId", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Usage - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + start_of_use_date_time (datetime): [optional] # noqa: E501 + cloud_id (str): The ID in the cloud. [optional] # noqa: E501 + name (str): The name of the machine.. [optional] # noqa: E501 + machine_id (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/usage_list.py b/cloudendure/model/usage_list.py new file mode 100644 index 000000000..21a449bb5 --- /dev/null +++ b/cloudendure/model/usage_list.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.usage import Usage + + globals()["Usage"] = Usage + + +class UsageList(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([Usage],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """UsageList - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([Usage]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/user.py b/cloudendure/model/user.py new file mode 100644 index 000000000..7afb4fa72 --- /dev/null +++ b/cloudendure/model/user.py @@ -0,0 +1,215 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.user_settings import UserSettings + + globals()["UserSettings"] = UserSettings + + +class User(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ("status",): { + "PENDING": "PENDING", + "CONFIRMED": "CONFIRMED", + "DELETED": "DELETED", + }, + ("roles",): { + "USER": "USER", + "ACCOUNT_ADMIN": "ACCOUNT_ADMIN", + "ACCOUNT_OWNER": "ACCOUNT_OWNER", + "GLOBAL_READONLY": "GLOBAL_READONLY", + "MANAGER": "MANAGER", + }, + } + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "username": (str,), # noqa: E501 + "status": (str,), # noqa: E501 + "account": (str,), # noqa: E501 + "roles": ([str],), # noqa: E501 + "settings": (UserSettings,), # noqa: E501 + "api_token": (str,), # noqa: E501 + "has_password": (bool,), # noqa: E501 + "terms_accepted": (bool,), # noqa: E501 + "id": (str,), # noqa: E501 + "self_link": (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "username": "username", # noqa: E501 + "status": "status", # noqa: E501 + "account": "account", # noqa: E501 + "roles": "roles", # noqa: E501 + "settings": "settings", # noqa: E501 + "api_token": "apiToken", # noqa: E501 + "has_password": "hasPassword", # noqa: E501 + "terms_accepted": "termsAccepted", # noqa: E501 + "id": "id", # noqa: E501 + "self_link": "selfLink", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """User - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + username (str): [optional] # noqa: E501 + status (str): [optional] # noqa: E501 + account (str): [optional] # noqa: E501 + roles ([str]): [optional] # noqa: E501 + settings (UserSettings): [optional] # noqa: E501 + api_token (str): [optional] # noqa: E501 + has_password (bool): [optional] # noqa: E501 + terms_accepted (bool): one-way; cannot be set at time of POST. [optional] # noqa: E501 + id (str): [optional] # noqa: E501 + self_link (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/user_report.py b/cloudendure/model/user_report.py new file mode 100644 index 000000000..29b8fff74 --- /dev/null +++ b/cloudendure/model/user_report.py @@ -0,0 +1,206 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.user_report_gcp_machines_finance_data import ( + UserReportGcpMachinesFinanceData, + ) + + globals()["UserReportGcpMachinesFinanceData"] = UserReportGcpMachinesFinanceData + + +class UserReport(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "n_protected_machines": (int,), # noqa: E501 + "project_name": (str,), # noqa: E501 + "is_activated": (bool,), # noqa: E501 + "n_license_usages": (int,), # noqa: E501 + "gcp_machines_finance_data": ( + UserReportGcpMachinesFinanceData, + ), # noqa: E501 + "total_tested_or_cutover": (int,), # noqa: E501 + "owner_name": (str,), # noqa: E501 + "n_lagging_machines": (int,), # noqa: E501 + "n_active_target_machines": (int,), # noqa: E501 + "n_test_machines": (int,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "n_protected_machines": "n_protected_machines", # noqa: E501 + "project_name": "project_name", # noqa: E501 + "is_activated": "is_activated", # noqa: E501 + "n_license_usages": "n_license_usages", # noqa: E501 + "gcp_machines_finance_data": "gcp_machines_finance_data", # noqa: E501 + "total_tested_or_cutover": "total_tested_or_cutover", # noqa: E501 + "owner_name": "owner_name", # noqa: E501 + "n_lagging_machines": "n_lagging_machines", # noqa: E501 + "n_active_target_machines": "n_active_target_machines", # noqa: E501 + "n_test_machines": "n_test_machines", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """UserReport - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + n_protected_machines (int): [optional] # noqa: E501 + project_name (str): [optional] # noqa: E501 + is_activated (bool): [optional] # noqa: E501 + n_license_usages (int): [optional] # noqa: E501 + gcp_machines_finance_data (UserReportGcpMachinesFinanceData): [optional] # noqa: E501 + total_tested_or_cutover (int): [optional] # noqa: E501 + owner_name (str): [optional] # noqa: E501 + n_lagging_machines (int): [optional] # noqa: E501 + n_active_target_machines (int): [optional] # noqa: E501 + n_test_machines (int): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/user_report_gcp_machines_finance_data.py b/cloudendure/model/user_report_gcp_machines_finance_data.py new file mode 100644 index 000000000..17e4b91ba --- /dev/null +++ b/cloudendure/model/user_report_gcp_machines_finance_data.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.gcp_machines_finance_data import GcpMachinesFinanceData + + globals()["GcpMachinesFinanceData"] = GcpMachinesFinanceData + + +class UserReportGcpMachinesFinanceData(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([GcpMachinesFinanceData],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """UserReportGcpMachinesFinanceData - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([GcpMachinesFinanceData]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/user_reports.py b/cloudendure/model/user_reports.py new file mode 100644 index 000000000..8b76fa8de --- /dev/null +++ b/cloudendure/model/user_reports.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.user_report import UserReport + + globals()["UserReport"] = UserReport + + +class UserReports(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([UserReport],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """UserReports - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([UserReport]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/user_settings.py b/cloudendure/model/user_settings.py new file mode 100644 index 000000000..c13389da1 --- /dev/null +++ b/cloudendure/model/user_settings.py @@ -0,0 +1,177 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.user_settings_send_notifications import ( + UserSettingsSendNotifications, + ) + + globals()["UserSettingsSendNotifications"] = UserSettingsSendNotifications + + +class UserSettings(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "send_notifications": (UserSettingsSendNotifications,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "send_notifications": "sendNotifications", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """UserSettings - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + send_notifications (UserSettingsSendNotifications): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/user_settings_send_notifications.py b/cloudendure/model/user_settings_send_notifications.py new file mode 100644 index 000000000..bcc6c6184 --- /dev/null +++ b/cloudendure/model/user_settings_send_notifications.py @@ -0,0 +1,171 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class UserSettingsSendNotifications(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "project_ids": ([str],), # noqa: E501 + "project_ids_untested_migrations": ([str],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "project_ids": "projectIDs", # noqa: E501 + "project_ids_untested_migrations": "projectIDsUntestedMigrations", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """UserSettingsSendNotifications - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + project_ids ([str]): [optional] # noqa: E501 + project_ids_untested_migrations ([str]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/users_and_roles.py b/cloudendure/model/users_and_roles.py new file mode 100644 index 000000000..b4a7e58ff --- /dev/null +++ b/cloudendure/model/users_and_roles.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.users_and_roles_items import UsersAndRolesItems + + globals()["UsersAndRolesItems"] = UsersAndRolesItems + + +class UsersAndRoles(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([UsersAndRolesItems],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """UsersAndRoles - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([UsersAndRolesItems]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/users_and_roles_items.py b/cloudendure/model/users_and_roles_items.py new file mode 100644 index 000000000..3847c0e4c --- /dev/null +++ b/cloudendure/model/users_and_roles_items.py @@ -0,0 +1,178 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class UsersAndRolesItems(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ("roles",): { + "USER": "USER", + "ACCOUNT_ADMIN": "ACCOUNT_ADMIN", + "GLOBAL_READONLY": "GLOBAL_READONLY", + "MANAGER": "MANAGER", + }, + } + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + "user_id": (str,), # noqa: E501 + "roles": ([str],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "user_id": "userId", # noqa: E501 + "roles": "roles", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """UsersAndRolesItems - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + user_id (str): [optional] # noqa: E501 + roles ([str]): The list of roles you want to add to the User (when used with the assignRoles API) or the list of roles you want to remove from the User (when used with the revokeRoles API). All Users have the \"User\" role which cannot be removed. The following cases will be silently ignored: trying to remove the \"User\" role, passing an empty string as a role and using an empty array. . [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model/users_list.py b/cloudendure/model/users_list.py new file mode 100644 index 000000000..c983843c0 --- /dev/null +++ b/cloudendure/model/users_list.py @@ -0,0 +1,175 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from cloudendure.model_utils import ( + ApiTypeError, + ModelComposed, # noqa: F401 + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +def lazy_import(): + from cloudendure.model.user import User + + globals()["User"] = User + + +class UsersList(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = {} + + validations = {} + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + "items": ([User],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + attribute_map = { + "items": "items", # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_visited_composed_classes", + ] + ) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """UsersList - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + items ([User]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + _visited_composed_classes = kwargs.pop("_visited_composed_classes", ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if ( + var_name not in self.attribute_map + and self._configuration is not None + and self._configuration.discard_unknown_keys + and self.additional_properties_type is None + ): + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/cloudendure/model_utils.py b/cloudendure/model_utils.py new file mode 100644 index 000000000..342efdabf --- /dev/null +++ b/cloudendure/model_utils.py @@ -0,0 +1,1924 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +import inspect +import io +import os +import pprint +import re +import tempfile +from datetime import date, datetime # noqa: F401 + +from dateutil.parser import parse + +from cloudendure.exceptions import ( + ApiAttributeError, + ApiKeyError, + ApiTypeError, + ApiValueError, +) + +none_type = type(None) +file_type = io.IOBase + + +class cached_property(object): + # this caches the result of the function call for fn with no inputs + # use this as a decorator on fuction methods that you want converted + # into cached properties + result_key = "_results" + + def __init__(self, fn): + self._fn = fn + + def __get__(self, instance, cls=None): + if self.result_key in vars(self): + return vars(self)[self.result_key] + else: + result = self._fn() + setattr(self, self.result_key, result) + return result + + +PRIMITIVE_TYPES = (list, float, int, bool, datetime, date, str, file_type) + + +def allows_single_value_input(cls): + """ + This function returns True if the input composed schema model or any + descendant model allows a value only input + This is true for cases where oneOf contains items like: + oneOf: + - float + - NumberWithValidation + - StringEnum + - ArrayModel + - null + TODO: lru_cache this + """ + if issubclass(cls, ModelSimple) or cls in PRIMITIVE_TYPES: + return True + elif issubclass(cls, ModelComposed): + if not cls._composed_schemas["oneOf"]: + return False + return any(allows_single_value_input(c) for c in cls._composed_schemas["oneOf"]) + return False + + +def composed_model_input_classes(cls): + """ + This function returns a list of the possible models that can be accepted as + inputs. + TODO: lru_cache this + """ + if issubclass(cls, ModelSimple) or cls in PRIMITIVE_TYPES: + return [cls] + elif issubclass(cls, ModelNormal): + if cls.discriminator is None: + return [cls] + else: + return get_discriminated_classes(cls) + elif issubclass(cls, ModelComposed): + if not cls._composed_schemas["oneOf"]: + return [] + if cls.discriminator is None: + input_classes = [] + for c in cls._composed_schemas["oneOf"]: + input_classes.extend(composed_model_input_classes(c)) + return input_classes + else: + return get_discriminated_classes(cls) + return [] + + +class OpenApiModel(object): + """The base class for all OpenAPIModels""" + + def set_attribute(self, name, value): + # this is only used to set properties on self + + path_to_item = [] + if self._path_to_item: + path_to_item.extend(self._path_to_item) + path_to_item.append(name) + + if name in self.openapi_types: + required_types_mixed = self.openapi_types[name] + elif self.additional_properties_type is None: + raise ApiAttributeError( + "{0} has no attribute '{1}'".format(type(self).__name__, name), + path_to_item, + ) + elif self.additional_properties_type is not None: + required_types_mixed = self.additional_properties_type + + if get_simple_class(name) != str: + error_msg = type_error_message( + var_name=name, var_value=name, valid_classes=(str,), key_type=True + ) + raise ApiTypeError( + error_msg, + path_to_item=path_to_item, + valid_classes=(str,), + key_type=True, + ) + + if self._check_type: + value = validate_and_convert_types( + value, + required_types_mixed, + path_to_item, + self._spec_property_naming, + self._check_type, + configuration=self._configuration, + ) + if (name,) in self.allowed_values: + check_allowed_values(self.allowed_values, (name,), value) + if (name,) in self.validations: + check_validations(self.validations, (name,), value, self._configuration) + self.__dict__["_data_store"][name] = value + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other + + def __setattr__(self, attr, value): + """set the value of an attribute using dot notation: `instance.attr = val`""" + self[attr] = value + + def __getattr__(self, attr): + """get the value of an attribute using dot notation: `instance.attr`""" + return self.__getitem__(attr) + + def __new__(cls, *args, **kwargs): + # this function uses the discriminator to + # pick a new schema/class to instantiate because a discriminator + # propertyName value was passed in + + if len(args) == 1: + arg = args[0] + if arg is None and is_type_nullable(cls): + # The input data is the 'null' value and the type is nullable. + return None + + if issubclass(cls, ModelComposed) and allows_single_value_input(cls): + model_kwargs = {} + oneof_instance = get_oneof_instance( + cls, model_kwargs, kwargs, model_arg=arg + ) + return oneof_instance + + visited_composed_classes = kwargs.get("_visited_composed_classes", ()) + if cls.discriminator is None or cls in visited_composed_classes: + # Use case 1: this openapi schema (cls) does not have a discriminator + # Use case 2: we have already visited this class before and are sure that we + # want to instantiate it this time. We have visited this class deserializing + # a payload with a discriminator. During that process we traveled through + # this class but did not make an instance of it. Now we are making an + # instance of a composed class which contains cls in it, so this time make an instance of cls. + # + # Here's an example of use case 2: If Animal has a discriminator + # petType and we pass in "Dog", and the class Dog + # allOf includes Animal, we move through Animal + # once using the discriminator, and pick Dog. + # Then in the composed schema dog Dog, we will make an instance of the + # Animal class (because Dal has allOf: Animal) but this time we won't travel + # through Animal's discriminator because we passed in + # _visited_composed_classes = (Animal,) + + return super(OpenApiModel, cls).__new__(cls) + + # Get the name and value of the discriminator property. + # The discriminator name is obtained from the discriminator meta-data + # and the discriminator value is obtained from the input data. + discr_propertyname_py = list(cls.discriminator.keys())[0] + discr_propertyname_js = cls.attribute_map[discr_propertyname_py] + if discr_propertyname_js in kwargs: + discr_value = kwargs[discr_propertyname_js] + elif discr_propertyname_py in kwargs: + discr_value = kwargs[discr_propertyname_py] + else: + # The input data does not contain the discriminator property. + path_to_item = kwargs.get("_path_to_item", ()) + raise ApiValueError( + "Cannot deserialize input data due to missing discriminator. " + "The discriminator property '%s' is missing at path: %s" + % (discr_propertyname_js, path_to_item) + ) + + # Implementation note: the last argument to get_discriminator_class + # is a list of visited classes. get_discriminator_class may recursively + # call itself and update the list of visited classes, and the initial + # value must be an empty list. Hence not using 'visited_composed_classes' + new_cls = get_discriminator_class(cls, discr_propertyname_py, discr_value, []) + if new_cls is None: + path_to_item = kwargs.get("_path_to_item", ()) + disc_prop_value = kwargs.get( + discr_propertyname_js, kwargs.get(discr_propertyname_py) + ) + raise ApiValueError( + "Cannot deserialize input data due to invalid discriminator " + "value. The OpenAPI document has no mapping for discriminator " + "property '%s'='%s' at path: %s" + % (discr_propertyname_js, disc_prop_value, path_to_item) + ) + + if new_cls in visited_composed_classes: + # if we are making an instance of a composed schema Descendent + # which allOf includes Ancestor, then Ancestor contains + # a discriminator that includes Descendent. + # So if we make an instance of Descendent, we have to make an + # instance of Ancestor to hold the allOf properties. + # This code detects that use case and makes the instance of Ancestor + # For example: + # When making an instance of Dog, _visited_composed_classes = (Dog,) + # then we make an instance of Animal to include in dog._composed_instances + # so when we are here, cls is Animal + # cls.discriminator != None + # cls not in _visited_composed_classes + # new_cls = Dog + # but we know we know that we already have Dog + # because it is in visited_composed_classes + # so make Animal here + return super(OpenApiModel, cls).__new__(cls) + + # Build a list containing all oneOf and anyOf descendants. + oneof_anyof_classes = None + if cls._composed_schemas is not None: + oneof_anyof_classes = cls._composed_schemas.get( + "oneOf", () + ) + cls._composed_schemas.get("anyOf", ()) + oneof_anyof_child = new_cls in oneof_anyof_classes + kwargs["_visited_composed_classes"] = visited_composed_classes + (cls,) + + if cls._composed_schemas.get("allOf") and oneof_anyof_child: + # Validate that we can make self because when we make the + # new_cls it will not include the allOf validations in self + self_inst = super(OpenApiModel, cls).__new__(cls) + self_inst.__init__(*args, **kwargs) + + new_inst = new_cls.__new__(new_cls, *args, **kwargs) + new_inst.__init__(*args, **kwargs) + return new_inst + + +class ModelSimple(OpenApiModel): + """the parent class of models whose type != object in their + swagger/openapi""" + + def __setitem__(self, name, value): + """set the value of an attribute using square-bracket notation: `instance[attr] = val`""" + if name in self.required_properties: + self.__dict__[name] = value + return + + self.set_attribute(name, value) + + def get(self, name, default=None): + """returns the value of an attribute or some default value if the attribute was not set""" + if name in self.required_properties: + return self.__dict__[name] + + return self.__dict__["_data_store"].get(name, default) + + def __getitem__(self, name): + """get the value of an attribute using square-bracket notation: `instance[attr]`""" + if name in self: + return self.get(name) + + raise ApiAttributeError( + "{0} has no attribute '{1}'".format(type(self).__name__, name), + [e for e in [self._path_to_item, name] if e], + ) + + def __contains__(self, name): + """used by `in` operator to check if an attrbute value was set in an instance: `'attr' in instance`""" + if name in self.required_properties: + return name in self.__dict__ + + return name in self.__dict__["_data_store"] + + def to_str(self): + """Returns the string representation of the model""" + return str(self.value) + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, self.__class__): + return False + + this_val = self._data_store["value"] + that_val = other._data_store["value"] + types = set() + types.add(this_val.__class__) + types.add(that_val.__class__) + vals_equal = this_val == that_val + return vals_equal + + +class ModelNormal(OpenApiModel): + """the parent class of models whose type == object in their + swagger/openapi""" + + def __setitem__(self, name, value): + """set the value of an attribute using square-bracket notation: `instance[attr] = val`""" + if name in self.required_properties: + self.__dict__[name] = value + return + + self.set_attribute(name, value) + + def get(self, name, default=None): + """returns the value of an attribute or some default value if the attribute was not set""" + if name in self.required_properties: + return self.__dict__[name] + + return self.__dict__["_data_store"].get(name, default) + + def __getitem__(self, name): + """get the value of an attribute using square-bracket notation: `instance[attr]`""" + if name in self: + return self.get(name) + + raise ApiAttributeError( + "{0} has no attribute '{1}'".format(type(self).__name__, name), + [e for e in [self._path_to_item, name] if e], + ) + + def __contains__(self, name): + """used by `in` operator to check if an attrbute value was set in an instance: `'attr' in instance`""" + if name in self.required_properties: + return name in self.__dict__ + + return name in self.__dict__["_data_store"] + + def to_dict(self): + """Returns the model properties as a dict""" + return model_to_dict(self, serialize=False) + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, self.__class__): + return False + + if not set(self._data_store.keys()) == set(other._data_store.keys()): + return False + for _var_name, this_val in self._data_store.items(): + that_val = other._data_store[_var_name] + types = set() + types.add(this_val.__class__) + types.add(that_val.__class__) + vals_equal = this_val == that_val + if not vals_equal: + return False + return True + + +class ModelComposed(OpenApiModel): + """the parent class of models whose type == object in their + swagger/openapi and have oneOf/allOf/anyOf + + When one sets a property we use var_name_to_model_instances to store the value in + the correct class instances + run any type checking + validation code. + When one gets a property we use var_name_to_model_instances to get the value + from the correct class instances. + This allows multiple composed schemas to contain the same property with additive + constraints on the value. + + _composed_schemas (dict) stores the anyOf/allOf/oneOf classes + key (str): allOf/oneOf/anyOf + value (list): the classes in the XOf definition. + Note: none_type can be included when the openapi document version >= 3.1.0 + _composed_instances (list): stores a list of instances of the composed schemas + defined in _composed_schemas. When properties are accessed in the self instance, + they are returned from the self._data_store or the data stores in the instances + in self._composed_schemas + _var_name_to_model_instances (dict): maps between a variable name on self and + the composed instances (self included) which contain that data + key (str): property name + value (list): list of class instances, self or instances in _composed_instances + which contain the value that the key is referring to. + """ + + def __setitem__(self, name, value): + """set the value of an attribute using square-bracket notation: `instance[attr] = val`""" + if name in self.required_properties: + self.__dict__[name] = value + return + + # set the attribute on the correct instance + model_instances = self._var_name_to_model_instances.get( + name, self._additional_properties_model_instances + ) + if model_instances: + for model_instance in model_instances: + if model_instance == self: + self.set_attribute(name, value) + else: + setattr(model_instance, name, value) + if name not in self._var_name_to_model_instances: + # we assigned an additional property + self.__dict__["_var_name_to_model_instances"][name] = model_instance + return None + + raise ApiAttributeError( + "{0} has no attribute '{1}'".format(type(self).__name__, name), + [e for e in [self._path_to_item, name] if e], + ) + + __unset_attribute_value__ = object() + + def get(self, name, default=None): + """returns the value of an attribute or some default value if the attribute was not set""" + if name in self.required_properties: + return self.__dict__[name] + + # get the attribute from the correct instance + model_instances = self._var_name_to_model_instances.get( + name, self._additional_properties_model_instances + ) + values = [] + # A composed model stores child (oneof/anyOf/allOf) models under + # self._var_name_to_model_instances. A named property can exist in + # multiple child models. If the property is present in more than one + # child model, the value must be the same across all the child models. + if model_instances: + for model_instance in model_instances: + if name in model_instance._data_store: + v = model_instance._data_store[name] + if v not in values: + values.append(v) + len_values = len(values) + if len_values == 0: + return default + elif len_values == 1: + return values[0] + elif len_values > 1: + raise ApiValueError( + "Values stored for property {0} in {1} differ when looking " + "at self and self's composed instances. All values must be " + "the same".format(name, type(self).__name__), + [e for e in [self._path_to_item, name] if e], + ) + + def __getitem__(self, name): + """get the value of an attribute using square-bracket notation: `instance[attr]`""" + value = self.get(name, self.__unset_attribute_value__) + if value is self.__unset_attribute_value__: + raise ApiAttributeError( + "{0} has no attribute '{1}'".format(type(self).__name__, name), + [e for e in [self._path_to_item, name] if e], + ) + return value + + def __contains__(self, name): + """used by `in` operator to check if an attrbute value was set in an instance: `'attr' in instance`""" + + if name in self.required_properties: + return name in self.__dict__ + + model_instances = self._var_name_to_model_instances.get( + name, self._additional_properties_model_instances + ) + + if model_instances: + for model_instance in model_instances: + if name in model_instance._data_store: + return True + + return False + + def to_dict(self): + """Returns the model properties as a dict""" + return model_to_dict(self, serialize=False) + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, self.__class__): + return False + + if not set(self._data_store.keys()) == set(other._data_store.keys()): + return False + for _var_name, this_val in self._data_store.items(): + that_val = other._data_store[_var_name] + types = set() + types.add(this_val.__class__) + types.add(that_val.__class__) + vals_equal = this_val == that_val + if not vals_equal: + return False + return True + + +COERCION_INDEX_BY_TYPE = { + ModelComposed: 0, + ModelNormal: 1, + ModelSimple: 2, + none_type: 3, # The type of 'None'. + list: 4, + dict: 5, + float: 6, + int: 7, + bool: 8, + datetime: 9, + date: 10, + str: 11, + file_type: 12, # 'file_type' is an alias for the built-in 'file' or 'io.IOBase' type. +} + +# these are used to limit what type conversions we try to do +# when we have a valid type already and we want to try converting +# to another type +UPCONVERSION_TYPE_PAIRS = ( + (str, datetime), + (str, date), + ( + int, + float, + ), # A float may be serialized as an integer, e.g. '3' is a valid serialized float. + (list, ModelComposed), + (dict, ModelComposed), + (str, ModelComposed), + (int, ModelComposed), + (float, ModelComposed), + (list, ModelComposed), + (list, ModelNormal), + (dict, ModelNormal), + (str, ModelSimple), + (int, ModelSimple), + (float, ModelSimple), + (list, ModelSimple), +) + +COERCIBLE_TYPE_PAIRS = { + False: ( # client instantiation of a model with client data + # (dict, ModelComposed), + # (list, ModelComposed), + # (dict, ModelNormal), + # (list, ModelNormal), + # (str, ModelSimple), + # (int, ModelSimple), + # (float, ModelSimple), + # (list, ModelSimple), + # (str, int), + # (str, float), + # (str, datetime), + # (str, date), + # (int, str), + # (float, str), + ), + True: ( # server -> client data + (dict, ModelComposed), + (list, ModelComposed), + (dict, ModelNormal), + (list, ModelNormal), + (str, ModelSimple), + (int, ModelSimple), + (float, ModelSimple), + (list, ModelSimple), + # (str, int), + # (str, float), + (str, datetime), + (str, date), + # (int, str), + # (float, str), + (str, file_type), + ), +} + + +def get_simple_class(input_value): + """Returns an input_value's simple class that we will use for type checking + Python2: + float and int will return int, where int is the python3 int backport + str and unicode will return str, where str is the python3 str backport + Note: float and int ARE both instances of int backport + Note: str_py2 and unicode_py2 are NOT both instances of str backport + + Args: + input_value (class/class_instance): the item for which we will return + the simple class + """ + if isinstance(input_value, type): + # input_value is a class + return input_value + elif isinstance(input_value, tuple): + return tuple + elif isinstance(input_value, list): + return list + elif isinstance(input_value, dict): + return dict + elif isinstance(input_value, none_type): + return none_type + elif isinstance(input_value, file_type): + return file_type + elif isinstance(input_value, bool): + # this must be higher than the int check because + # isinstance(True, int) == True + return bool + elif isinstance(input_value, int): + return int + elif isinstance(input_value, datetime): + # this must be higher than the date check because + # isinstance(datetime_instance, date) == True + return datetime + elif isinstance(input_value, date): + return date + elif isinstance(input_value, str): + return str + return type(input_value) + + +def check_allowed_values(allowed_values, input_variable_path, input_values): + """Raises an exception if the input_values are not allowed + + Args: + allowed_values (dict): the allowed_values dict + input_variable_path (tuple): the path to the input variable + input_values (list/str/int/float/date/datetime): the values that we + are checking to see if they are in allowed_values + """ + these_allowed_values = list(allowed_values[input_variable_path].values()) + if isinstance(input_values, list) and not set(input_values).issubset( + set(these_allowed_values) + ): + invalid_values = ( + ", ".join(map(str, set(input_values) - set(these_allowed_values))), + ) + raise ApiValueError( + "Invalid values for `%s` [%s], must be a subset of [%s]" + % ( + input_variable_path[0], + invalid_values, + ", ".join(map(str, these_allowed_values)), + ) + ) + elif isinstance(input_values, dict) and not set(input_values.keys()).issubset( + set(these_allowed_values) + ): + invalid_values = ", ".join( + map(str, set(input_values.keys()) - set(these_allowed_values)) + ) + raise ApiValueError( + "Invalid keys in `%s` [%s], must be a subset of [%s]" + % ( + input_variable_path[0], + invalid_values, + ", ".join(map(str, these_allowed_values)), + ) + ) + elif ( + not isinstance(input_values, (list, dict)) + and input_values not in these_allowed_values + ): + raise ApiValueError( + "Invalid value for `%s` (%s), must be one of %s" + % (input_variable_path[0], input_values, these_allowed_values) + ) + + +def is_json_validation_enabled(schema_keyword, configuration=None): + """Returns true if JSON schema validation is enabled for the specified + validation keyword. This can be used to skip JSON schema structural validation + as requested in the configuration. + + Args: + schema_keyword (string): the name of a JSON schema validation keyword. + configuration (Configuration): the configuration class. + """ + + return ( + configuration is None + or not hasattr(configuration, "_disabled_client_side_validations") + or schema_keyword not in configuration._disabled_client_side_validations + ) + + +def check_validations( + validations, input_variable_path, input_values, configuration=None +): + """Raises an exception if the input_values are invalid + + Args: + validations (dict): the validation dictionary. + input_variable_path (tuple): the path to the input variable. + input_values (list/str/int/float/date/datetime): the values that we + are checking. + configuration (Configuration): the configuration class. + """ + + if input_values is None: + return + + current_validations = validations[input_variable_path] + if ( + is_json_validation_enabled("multipleOf", configuration) + and "multiple_of" in current_validations + and isinstance(input_values, (int, float)) + and not (float(input_values) / current_validations["multiple_of"]).is_integer() + ): + # Note 'multipleOf' will be as good as the floating point arithmetic. + raise ApiValueError( + "Invalid value for `%s`, value must be a multiple of " + "`%s`" % (input_variable_path[0], current_validations["multiple_of"]) + ) + + if ( + is_json_validation_enabled("maxLength", configuration) + and "max_length" in current_validations + and len(input_values) > current_validations["max_length"] + ): + raise ApiValueError( + "Invalid value for `%s`, length must be less than or equal to " + "`%s`" % (input_variable_path[0], current_validations["max_length"]) + ) + + if ( + is_json_validation_enabled("minLength", configuration) + and "min_length" in current_validations + and len(input_values) < current_validations["min_length"] + ): + raise ApiValueError( + "Invalid value for `%s`, length must be greater than or equal to " + "`%s`" % (input_variable_path[0], current_validations["min_length"]) + ) + + if ( + is_json_validation_enabled("maxItems", configuration) + and "max_items" in current_validations + and len(input_values) > current_validations["max_items"] + ): + raise ApiValueError( + "Invalid value for `%s`, number of items must be less than or " + "equal to `%s`" % (input_variable_path[0], current_validations["max_items"]) + ) + + if ( + is_json_validation_enabled("minItems", configuration) + and "min_items" in current_validations + and len(input_values) < current_validations["min_items"] + ): + raise ValueError( + "Invalid value for `%s`, number of items must be greater than or " + "equal to `%s`" % (input_variable_path[0], current_validations["min_items"]) + ) + + items = ( + "exclusive_maximum", + "inclusive_maximum", + "exclusive_minimum", + "inclusive_minimum", + ) + if any(item in current_validations for item in items): + if isinstance(input_values, list): + max_val = max(input_values) + min_val = min(input_values) + elif isinstance(input_values, dict): + max_val = max(input_values.values()) + min_val = min(input_values.values()) + else: + max_val = input_values + min_val = input_values + + if ( + is_json_validation_enabled("exclusiveMaximum", configuration) + and "exclusive_maximum" in current_validations + and max_val >= current_validations["exclusive_maximum"] + ): + raise ApiValueError( + "Invalid value for `%s`, must be a value less than `%s`" + % (input_variable_path[0], current_validations["exclusive_maximum"]) + ) + + if ( + is_json_validation_enabled("maximum", configuration) + and "inclusive_maximum" in current_validations + and max_val > current_validations["inclusive_maximum"] + ): + raise ApiValueError( + "Invalid value for `%s`, must be a value less than or equal to " + "`%s`" % (input_variable_path[0], current_validations["inclusive_maximum"]) + ) + + if ( + is_json_validation_enabled("exclusiveMinimum", configuration) + and "exclusive_minimum" in current_validations + and min_val <= current_validations["exclusive_minimum"] + ): + raise ApiValueError( + "Invalid value for `%s`, must be a value greater than `%s`" + % (input_variable_path[0], current_validations["exclusive_maximum"]) + ) + + if ( + is_json_validation_enabled("minimum", configuration) + and "inclusive_minimum" in current_validations + and min_val < current_validations["inclusive_minimum"] + ): + raise ApiValueError( + "Invalid value for `%s`, must be a value greater than or equal " + "to `%s`" + % (input_variable_path[0], current_validations["inclusive_minimum"]) + ) + flags = current_validations.get("regex", {}).get("flags", 0) + if ( + is_json_validation_enabled("pattern", configuration) + and "regex" in current_validations + and not re.search( + current_validations["regex"]["pattern"], input_values, flags=flags + ) + ): + err_msg = r"Invalid value for `%s`, must match regular expression `%s`" % ( + input_variable_path[0], + current_validations["regex"]["pattern"], + ) + if flags != 0: + # Don't print the regex flags if the flags are not + # specified in the OAS document. + err_msg = r"%s with flags=`%s`" % (err_msg, flags) + raise ApiValueError(err_msg) + + +def order_response_types(required_types): + """Returns the required types sorted in coercion order + + Args: + required_types (list/tuple): collection of classes or instance of + list or dict with class information inside it. + + Returns: + (list): coercion order sorted collection of classes or instance + of list or dict with class information inside it. + """ + + def index_getter(class_or_instance): + if isinstance(class_or_instance, list): + return COERCION_INDEX_BY_TYPE[list] + elif isinstance(class_or_instance, dict): + return COERCION_INDEX_BY_TYPE[dict] + elif inspect.isclass(class_or_instance) and issubclass( + class_or_instance, ModelComposed + ): + return COERCION_INDEX_BY_TYPE[ModelComposed] + elif inspect.isclass(class_or_instance) and issubclass( + class_or_instance, ModelNormal + ): + return COERCION_INDEX_BY_TYPE[ModelNormal] + elif inspect.isclass(class_or_instance) and issubclass( + class_or_instance, ModelSimple + ): + return COERCION_INDEX_BY_TYPE[ModelSimple] + elif class_or_instance in COERCION_INDEX_BY_TYPE: + return COERCION_INDEX_BY_TYPE[class_or_instance] + raise ApiValueError("Unsupported type: %s" % class_or_instance) + + sorted_types = sorted( + required_types, key=lambda class_or_instance: index_getter(class_or_instance) + ) + return sorted_types + + +def remove_uncoercible( + required_types_classes, current_item, spec_property_naming, must_convert=True +): + """Only keeps the type conversions that are possible + + Args: + required_types_classes (tuple): tuple of classes that are required + these should be ordered by COERCION_INDEX_BY_TYPE + spec_property_naming (bool): True if the variable names in the input + data are serialized names as specified in the OpenAPI document. + False if the variables names in the input data are python + variable names in PEP-8 snake case. + current_item (any): the current item (input data) to be converted + + Keyword Args: + must_convert (bool): if True the item to convert is of the wrong + type and we want a big list of coercibles + if False, we want a limited list of coercibles + + Returns: + (list): the remaining coercible required types, classes only + """ + current_type_simple = get_simple_class(current_item) + + results_classes = [] + for required_type_class in required_types_classes: + # convert our models to OpenApiModel + required_type_class_simplified = required_type_class + if isinstance(required_type_class_simplified, type): + if issubclass(required_type_class_simplified, ModelComposed): + required_type_class_simplified = ModelComposed + elif issubclass(required_type_class_simplified, ModelNormal): + required_type_class_simplified = ModelNormal + elif issubclass(required_type_class_simplified, ModelSimple): + required_type_class_simplified = ModelSimple + + if required_type_class_simplified == current_type_simple: + # don't consider converting to one's own class + continue + + class_pair = (current_type_simple, required_type_class_simplified) + if must_convert and class_pair in COERCIBLE_TYPE_PAIRS[spec_property_naming]: + results_classes.append(required_type_class) + elif class_pair in UPCONVERSION_TYPE_PAIRS: + results_classes.append(required_type_class) + return results_classes + + +def get_discriminated_classes(cls): + """ + Returns all the classes that a discriminator converts to + TODO: lru_cache this + """ + possible_classes = [] + key = list(cls.discriminator.keys())[0] + if is_type_nullable(cls): + possible_classes.append(cls) + for discr_cls in cls.discriminator[key].values(): + if hasattr(discr_cls, "discriminator") and discr_cls.discriminator is not None: + possible_classes.extend(get_discriminated_classes(discr_cls)) + else: + possible_classes.append(discr_cls) + return possible_classes + + +def get_possible_classes(cls, from_server_context): + # TODO: lru_cache this + possible_classes = [cls] + if from_server_context: + return possible_classes + if hasattr(cls, "discriminator") and cls.discriminator is not None: + possible_classes = [] + possible_classes.extend(get_discriminated_classes(cls)) + elif issubclass(cls, ModelComposed): + possible_classes.extend(composed_model_input_classes(cls)) + return possible_classes + + +def get_required_type_classes(required_types_mixed, spec_property_naming): + """Converts the tuple required_types into a tuple and a dict described + below + + Args: + required_types_mixed (tuple/list): will contain either classes or + instance of list or dict + spec_property_naming (bool): if True these values came from the + server, and we use the data types in our endpoints. + If False, we are client side and we need to include + oneOf and discriminator classes inside the data types in our endpoints + + Returns: + (valid_classes, dict_valid_class_to_child_types_mixed): + valid_classes (tuple): the valid classes that the current item + should be + dict_valid_class_to_child_types_mixed (dict): + valid_class (class): this is the key + child_types_mixed (list/dict/tuple): describes the valid child + types + """ + valid_classes = [] + child_req_types_by_current_type = {} + for required_type in required_types_mixed: + if isinstance(required_type, list): + valid_classes.append(list) + child_req_types_by_current_type[list] = required_type + elif isinstance(required_type, tuple): + valid_classes.append(tuple) + child_req_types_by_current_type[tuple] = required_type + elif isinstance(required_type, dict): + valid_classes.append(dict) + child_req_types_by_current_type[dict] = required_type[str] + else: + valid_classes.extend( + get_possible_classes(required_type, spec_property_naming) + ) + return tuple(valid_classes), child_req_types_by_current_type + + +def change_keys_js_to_python(input_dict, model_class): + """ + Converts from javascript_key keys in the input_dict to python_keys in + the output dict using the mapping in model_class. + If the input_dict contains a key which does not declared in the model_class, + the key is added to the output dict as is. The assumption is the model_class + may have undeclared properties (additionalProperties attribute in the OAS + document). + """ + + if getattr(model_class, "attribute_map", None) is None: + return input_dict + output_dict = {} + reversed_attr_map = {value: key for key, value in model_class.attribute_map.items()} + for javascript_key, value in input_dict.items(): + python_key = reversed_attr_map.get(javascript_key) + if python_key is None: + # if the key is unknown, it is in error or it is an + # additionalProperties variable + python_key = javascript_key + output_dict[python_key] = value + return output_dict + + +def get_type_error(var_value, path_to_item, valid_classes, key_type=False): + error_msg = type_error_message( + var_name=path_to_item[-1], + var_value=var_value, + valid_classes=valid_classes, + key_type=key_type, + ) + return ApiTypeError( + error_msg, + path_to_item=path_to_item, + valid_classes=valid_classes, + key_type=key_type, + ) + + +def deserialize_primitive(data, klass, path_to_item): + """Deserializes string to primitive type. + + :param data: str/int/float + :param klass: str/class the class to convert to + + :return: int, float, str, bool, date, datetime + """ + additional_message = "" + try: + if klass in {datetime, date}: + additional_message = ( + "If you need your parameter to have a fallback " + "string value, please set its type as `type: {}` in your " + "spec. That allows the value to be any type. " + ) + if klass == datetime: + if len(data) < 8: + raise ValueError("This is not a datetime") + # The string should be in iso8601 datetime format. + parsed_datetime = parse(data) + date_only = ( + parsed_datetime.hour == 0 + and parsed_datetime.minute == 0 + and parsed_datetime.second == 0 + and parsed_datetime.tzinfo is None + and 8 <= len(data) <= 10 + ) + if date_only: + raise ValueError("This is a date, not a datetime") + return parsed_datetime + elif klass == date: + if len(data) < 8: + raise ValueError("This is not a date") + return parse(data).date() + else: + converted_value = klass(data) + if isinstance(data, str) and klass == float: + if str(converted_value) != data: + # '7' -> 7.0 -> '7.0' != '7' + raise ValueError("This is not a float") + return converted_value + except (OverflowError, ValueError) as ex: + # parse can raise OverflowError + raise ApiValueError( + "{0}Failed to parse {1} as {2}".format( + additional_message, repr(data), klass.__name__ + ), + path_to_item=path_to_item, + ) from ex + + +def get_discriminator_class(model_class, discr_name, discr_value, cls_visited): + """Returns the child class specified by the discriminator. + + Args: + model_class (OpenApiModel): the model class. + discr_name (string): the name of the discriminator property. + discr_value (any): the discriminator value. + cls_visited (list): list of model classes that have been visited. + Used to determine the discriminator class without + visiting circular references indefinitely. + + Returns: + used_model_class (class/None): the chosen child class that will be used + to deserialize the data, for example dog.Dog. + If a class is not found, None is returned. + """ + + if model_class in cls_visited: + # The class has already been visited and no suitable class was found. + return None + cls_visited.append(model_class) + used_model_class = None + if discr_name in model_class.discriminator: + class_name_to_discr_class = model_class.discriminator[discr_name] + used_model_class = class_name_to_discr_class.get(discr_value) + if used_model_class is None: + # We didn't find a discriminated class in class_name_to_discr_class. + # So look in the ancestor or descendant discriminators + # The discriminator mapping may exist in a descendant (anyOf, oneOf) + # or ancestor (allOf). + # Ancestor example: in the GrandparentAnimal -> ParentPet -> ChildCat + # hierarchy, the discriminator mappings may be defined at any level + # in the hierarchy. + # Descendant example: mammal -> whale/zebra/Pig -> BasquePig/DanishPig + # if we try to make BasquePig from mammal, we need to travel through + # the oneOf descendant discriminators to find BasquePig + descendant_classes = model_class._composed_schemas.get( + "oneOf", () + ) + model_class._composed_schemas.get("anyOf", ()) + ancestor_classes = model_class._composed_schemas.get("allOf", ()) + possible_classes = descendant_classes + ancestor_classes + for cls in possible_classes: + # Check if the schema has inherited discriminators. + if hasattr(cls, "discriminator") and cls.discriminator is not None: + used_model_class = get_discriminator_class( + cls, discr_name, discr_value, cls_visited + ) + if used_model_class is not None: + return used_model_class + return used_model_class + + +def deserialize_model( + model_data, + model_class, + path_to_item, + check_type, + configuration, + spec_property_naming, +): + """Deserializes model_data to model instance. + + Args: + model_data (int/str/float/bool/none_type/list/dict): data to instantiate the model + model_class (OpenApiModel): the model class + path_to_item (list): path to the model in the received data + check_type (bool): whether to check the data tupe for the values in + the model + configuration (Configuration): the instance to use to convert files + spec_property_naming (bool): True if the variable names in the input + data are serialized names as specified in the OpenAPI document. + False if the variables names in the input data are python + variable names in PEP-8 snake case. + + Returns: + model instance + + Raise: + ApiTypeError + ApiValueError + ApiKeyError + """ + + kw_args = dict( + _check_type=check_type, + _path_to_item=path_to_item, + _configuration=configuration, + _spec_property_naming=spec_property_naming, + ) + + if issubclass(model_class, ModelSimple): + return model_class(model_data, **kw_args) + elif isinstance(model_data, list): + return model_class(*model_data, **kw_args) + if isinstance(model_data, dict): + kw_args.update(model_data) + return model_class(**kw_args) + elif isinstance(model_data, PRIMITIVE_TYPES): + return model_class(model_data, **kw_args) + + +def deserialize_file(response_data, configuration, content_disposition=None): + """Deserializes body to file + + Saves response body into a file in a temporary folder, + using the filename from the `Content-Disposition` header if provided. + + Args: + param response_data (str): the file data to write + configuration (Configuration): the instance to use to convert files + + Keyword Args: + content_disposition (str): the value of the Content-Disposition + header + + Returns: + (file_type): the deserialized file which is open + The user is responsible for closing and reading the file + """ + fd, path = tempfile.mkstemp(dir=configuration.temp_folder_path) + os.close(fd) + os.remove(path) + + if content_disposition: + filename = re.search( + r'filename=[\'"]?([^\'"\s]+)[\'"]?', content_disposition + ).group(1) + path = os.path.join(os.path.dirname(path), filename) + + with open(path, "wb") as f: + if isinstance(response_data, str): + # change str to bytes so we can write it + response_data = response_data.encode("utf-8") + f.write(response_data) + + f = open(path, "rb") + return f + + +def attempt_convert_item( + input_value, + valid_classes, + path_to_item, + configuration, + spec_property_naming, + key_type=False, + must_convert=False, + check_type=True, +): + """ + Args: + input_value (any): the data to convert + valid_classes (any): the classes that are valid + path_to_item (list): the path to the item to convert + configuration (Configuration): the instance to use to convert files + spec_property_naming (bool): True if the variable names in the input + data are serialized names as specified in the OpenAPI document. + False if the variables names in the input data are python + variable names in PEP-8 snake case. + key_type (bool): if True we need to convert a key type (not supported) + must_convert (bool): if True we must convert + check_type (bool): if True we check the type or the returned data in + ModelComposed/ModelNormal/ModelSimple instances + + Returns: + instance (any) the fixed item + + Raises: + ApiTypeError + ApiValueError + ApiKeyError + """ + valid_classes_ordered = order_response_types(valid_classes) + valid_classes_coercible = remove_uncoercible( + valid_classes_ordered, input_value, spec_property_naming + ) + if not valid_classes_coercible or key_type: + # we do not handle keytype errors, json will take care + # of this for us + if configuration is None or not configuration.discard_unknown_keys: + raise get_type_error( + input_value, path_to_item, valid_classes, key_type=key_type + ) + for valid_class in valid_classes_coercible: + try: + if issubclass(valid_class, OpenApiModel): + return deserialize_model( + input_value, + valid_class, + path_to_item, + check_type, + configuration, + spec_property_naming, + ) + elif valid_class == file_type: + return deserialize_file(input_value, configuration) + return deserialize_primitive(input_value, valid_class, path_to_item) + except (ApiTypeError, ApiValueError, ApiKeyError) as conversion_exc: + if must_convert: + raise conversion_exc + # if we have conversion errors when must_convert == False + # we ignore the exception and move on to the next class + continue + # we were unable to convert, must_convert == False + return input_value + + +def is_type_nullable(input_type): + """ + Returns true if None is an allowed value for the specified input_type. + + A type is nullable if at least one of the following conditions is true: + 1. The OAS 'nullable' attribute has been specified, + 1. The type is the 'null' type, + 1. The type is a anyOf/oneOf composed schema, and a child schema is + the 'null' type. + Args: + input_type (type): the class of the input_value that we are + checking + Returns: + bool + """ + if input_type is none_type: + return True + if issubclass(input_type, OpenApiModel) and input_type._nullable: + return True + if issubclass(input_type, ModelComposed): + # If oneOf/anyOf, check if the 'null' type is one of the allowed types. + for t in input_type._composed_schemas.get("oneOf", ()): + if is_type_nullable(t): + return True + for t in input_type._composed_schemas.get("anyOf", ()): + if is_type_nullable(t): + return True + return False + + +def is_valid_type(input_class_simple, valid_classes): + """ + Args: + input_class_simple (class): the class of the input_value that we are + checking + valid_classes (tuple): the valid classes that the current item + should be + Returns: + bool + """ + valid_type = input_class_simple in valid_classes + if not valid_type and ( + issubclass(input_class_simple, OpenApiModel) or input_class_simple is none_type + ): + for valid_class in valid_classes: + if input_class_simple is none_type and is_type_nullable(valid_class): + # Schema is oneOf/anyOf and the 'null' type is one of the allowed types. + return True + if not ( + issubclass(valid_class, OpenApiModel) and valid_class.discriminator + ): + continue + discr_propertyname_py = list(valid_class.discriminator.keys())[0] + discriminator_classes = valid_class.discriminator[ + discr_propertyname_py + ].values() + valid_type = is_valid_type(input_class_simple, discriminator_classes) + if valid_type: + return True + return valid_type + + +def validate_and_convert_types( + input_value, + required_types_mixed, + path_to_item, + spec_property_naming, + _check_type, + configuration=None, +): + """Raises a TypeError is there is a problem, otherwise returns value + + Args: + input_value (any): the data to validate/convert + required_types_mixed (list/dict/tuple): A list of + valid classes, or a list tuples of valid classes, or a dict where + the value is a tuple of value classes + path_to_item: (list) the path to the data being validated + this stores a list of keys or indices to get to the data being + validated + spec_property_naming (bool): True if the variable names in the input + data are serialized names as specified in the OpenAPI document. + False if the variables names in the input data are python + variable names in PEP-8 snake case. + _check_type: (boolean) if true, type will be checked and conversion + will be attempted. + configuration: (Configuration): the configuration class to use + when converting file_type items. + If passed, conversion will be attempted when possible + If not passed, no conversions will be attempted and + exceptions will be raised + + Returns: + the correctly typed value + + Raises: + ApiTypeError + """ + results = get_required_type_classes(required_types_mixed, spec_property_naming) + valid_classes, child_req_types_by_current_type = results + + input_class_simple = get_simple_class(input_value) + valid_type = is_valid_type(input_class_simple, valid_classes) + if not valid_type: + if configuration: + # if input_value is not valid_type try to convert it + converted_instance = attempt_convert_item( + input_value, + valid_classes, + path_to_item, + configuration, + spec_property_naming, + key_type=False, + must_convert=True, + check_type=_check_type, + ) + return converted_instance + else: + raise get_type_error( + input_value, path_to_item, valid_classes, key_type=False + ) + + # input_value's type is in valid_classes + if len(valid_classes) > 1 and configuration: + # there are valid classes which are not the current class + valid_classes_coercible = remove_uncoercible( + valid_classes, input_value, spec_property_naming, must_convert=False + ) + if valid_classes_coercible: + converted_instance = attempt_convert_item( + input_value, + valid_classes_coercible, + path_to_item, + configuration, + spec_property_naming, + key_type=False, + must_convert=False, + check_type=_check_type, + ) + return converted_instance + + if child_req_types_by_current_type == {}: + # all types are of the required types and there are no more inner + # variables left to look at + return input_value + inner_required_types = child_req_types_by_current_type.get(type(input_value)) + if inner_required_types is None: + # for this type, there are not more inner variables left to look at + return input_value + if isinstance(input_value, list): + if input_value == []: + # allow an empty list + return input_value + for index, inner_value in enumerate(input_value): + inner_path = list(path_to_item) + inner_path.append(index) + input_value[index] = validate_and_convert_types( + inner_value, + inner_required_types, + inner_path, + spec_property_naming, + _check_type, + configuration=configuration, + ) + elif isinstance(input_value, dict): + if input_value == {}: + # allow an empty dict + return input_value + for inner_key, inner_val in input_value.items(): + inner_path = list(path_to_item) + inner_path.append(inner_key) + if get_simple_class(inner_key) != str: + raise get_type_error( + inner_key, inner_path, valid_classes, key_type=True + ) + input_value[inner_key] = validate_and_convert_types( + inner_val, + inner_required_types, + inner_path, + spec_property_naming, + _check_type, + configuration=configuration, + ) + return input_value + + +def model_to_dict(model_instance, serialize=True): + """Returns the model properties as a dict + + Args: + model_instance (one of your model instances): the model instance that + will be converted to a dict. + + Keyword Args: + serialize (bool): if True, the keys in the dict will be values from + attribute_map + """ + result = {} + + model_instances = [model_instance] + if model_instance._composed_schemas: + model_instances.extend(model_instance._composed_instances) + for model_instance in model_instances: + for attr, value in model_instance._data_store.items(): + if serialize: + # we use get here because additional property key names do not + # exist in attribute_map + attr = model_instance.attribute_map.get(attr, attr) + if isinstance(value, list): + if not value or isinstance(value[0], PRIMITIVE_TYPES): + # empty list or primitive types + result[attr] = value + elif isinstance(value[0], ModelSimple): + result[attr] = [x.value for x in value] + else: + result[attr] = [ + model_to_dict(x, serialize=serialize) for x in value + ] + elif isinstance(value, dict): + result[attr] = dict( + map( + lambda item: ( + item[0], + model_to_dict(item[1], serialize=serialize), + ) + if hasattr(item[1], "_data_store") + else item, + value.items(), + ) + ) + elif isinstance(value, ModelSimple): + result[attr] = value.value + elif hasattr(value, "_data_store"): + result[attr] = model_to_dict(value, serialize=serialize) + else: + result[attr] = value + + return result + + +def type_error_message( + var_value=None, var_name=None, valid_classes=None, key_type=None +): + """ + Keyword Args: + var_value (any): the variable which has the type_error + var_name (str): the name of the variable which has the typ error + valid_classes (tuple): the accepted classes for current_item's + value + key_type (bool): False if our value is a value in a dict + True if it is a key in a dict + False if our item is an item in a list + """ + key_or_value = "value" + if key_type: + key_or_value = "key" + valid_classes_phrase = get_valid_classes_phrase(valid_classes) + msg = ( + "Invalid type for variable '{0}'. Required {1} type {2} and " + "passed type was {3}".format( + var_name, + key_or_value, + valid_classes_phrase, + type(var_value).__name__, + ) + ) + return msg + + +def get_valid_classes_phrase(input_classes): + """Returns a string phrase describing what types are allowed""" + all_classes = list(input_classes) + all_classes = sorted(all_classes, key=lambda cls: cls.__name__) + all_class_names = [cls.__name__ for cls in all_classes] + if len(all_class_names) == 1: + return "is {0}".format(all_class_names[0]) + return "is one of [{0}]".format(", ".join(all_class_names)) + + +def convert_js_args_to_python_args(fn): + from functools import wraps + + @wraps(fn) + def wrapped_init(self, *args, **kwargs): + spec_property_naming = kwargs.get("_spec_property_naming", False) + if spec_property_naming: + kwargs = change_keys_js_to_python(kwargs, self.__class__) + return fn(self, *args, **kwargs) + + return wrapped_init + + +def get_allof_instances(self, model_args, constant_args): + """ + Args: + self: the class we are handling + model_args (dict): var_name to var_value + used to make instances + constant_args (dict): var_name to var_value + used to make instances + + Returns + composed_instances (list) + """ + composed_instances = [] + for allof_class in self._composed_schemas["allOf"]: + + # no need to handle changing js keys to python because + # for composed schemas, allof parameters are included in the + # composed schema and were changed to python keys in __new__ + # extract a dict of only required keys from fixed_model_args + kwargs = {} + var_names = set(allof_class.openapi_types.keys()) + for var_name in var_names: + if var_name in model_args: + kwargs[var_name] = model_args[var_name] + + # and use it to make the instance + kwargs.update(constant_args) + try: + allof_instance = allof_class(**kwargs) + composed_instances.append(allof_instance) + except Exception as ex: + raise ApiValueError( + "Invalid inputs given to generate an instance of '%s'. The " + "input data was invalid for the allOf schema '%s' in the composed " + "schema '%s'. Error=%s" + % ( + allof_class.__name__, + allof_class.__name__, + self.__class__.__name__, + str(ex), + ) + ) from ex + return composed_instances + + +def get_oneof_instance(cls, model_kwargs, constant_kwargs, model_arg=None): + """ + Find the oneOf schema that matches the input data (e.g. payload). + If exactly one schema matches the input data, an instance of that schema + is returned. + If zero or more than one schema match the input data, an exception is raised. + In OAS 3.x, the payload MUST, by validation, match exactly one of the + schemas described by oneOf. + + Args: + cls: the class we are handling + model_kwargs (dict): var_name to var_value + The input data, e.g. the payload that must match a oneOf schema + in the OpenAPI document. + constant_kwargs (dict): var_name to var_value + args that every model requires, including configuration, server + and path to item. + + Kwargs: + model_arg: (int, float, bool, str, date, datetime, ModelSimple, None): + the value to assign to a primitive class or ModelSimple class + Notes: + - this is only passed in when oneOf includes types which are not object + - None is used to suppress handling of model_arg, nullable models are handled in __new__ + + Returns + oneof_instance (instance) + """ + if len(cls._composed_schemas["oneOf"]) == 0: + return None + + oneof_instances = [] + # Iterate over each oneOf schema and determine if the input data + # matches the oneOf schemas. + for oneof_class in cls._composed_schemas["oneOf"]: + # The composed oneOf schema allows the 'null' type and the input data + # is the null value. This is a OAS >= 3.1 feature. + if oneof_class is none_type: + # skip none_types because we are deserializing dict data. + # none_type deserialization is handled in the __new__ method + continue + + single_value_input = allows_single_value_input(oneof_class) + + if not single_value_input: + # transform js keys from input data to python keys in fixed_model_args + fixed_model_args = change_keys_js_to_python(model_kwargs, oneof_class) + + # Extract a dict with the properties that are declared in the oneOf schema. + # Undeclared properties (e.g. properties that are allowed because of the + # additionalProperties attribute in the OAS document) are not added to + # the dict. + kwargs = {} + var_names = set(oneof_class.openapi_types.keys()) + for var_name in var_names: + if var_name in fixed_model_args: + kwargs[var_name] = fixed_model_args[var_name] + + # do not try to make a model with no input args + if len(kwargs) == 0: + continue + + # and use it to make the instance + kwargs.update(constant_kwargs) + + try: + if not single_value_input: + oneof_instance = oneof_class(**kwargs) + else: + if issubclass(oneof_class, ModelSimple): + oneof_instance = oneof_class(model_arg, **constant_kwargs) + elif oneof_class in PRIMITIVE_TYPES: + oneof_instance = validate_and_convert_types( + model_arg, + (oneof_class,), + constant_kwargs["_path_to_item"], + constant_kwargs["_spec_property_naming"], + constant_kwargs["_check_type"], + configuration=constant_kwargs["_configuration"], + ) + oneof_instances.append(oneof_instance) + except Exception: + pass + if len(oneof_instances) == 0: + raise ApiValueError( + "Invalid inputs given to generate an instance of %s. None " + "of the oneOf schemas matched the input data." % cls.__name__ + ) + elif len(oneof_instances) > 1: + raise ApiValueError( + "Invalid inputs given to generate an instance of %s. Multiple " + "oneOf schemas matched the inputs, but a max of one is allowed." + % cls.__name__ + ) + return oneof_instances[0] + + +def get_anyof_instances(self, model_args, constant_args): + """ + Args: + self: the class we are handling + model_args (dict): var_name to var_value + The input data, e.g. the payload that must match at least one + anyOf child schema in the OpenAPI document. + constant_args (dict): var_name to var_value + args that every model requires, including configuration, server + and path to item. + + Returns + anyof_instances (list) + """ + anyof_instances = [] + if len(self._composed_schemas["anyOf"]) == 0: + return anyof_instances + + for anyof_class in self._composed_schemas["anyOf"]: + # The composed oneOf schema allows the 'null' type and the input data + # is the null value. This is a OAS >= 3.1 feature. + if anyof_class is none_type: + # skip none_types because we are deserializing dict data. + # none_type deserialization is handled in the __new__ method + continue + + # transform js keys to python keys in fixed_model_args + fixed_model_args = change_keys_js_to_python(model_args, anyof_class) + + # extract a dict of only required keys from these_model_vars + kwargs = {} + var_names = set(anyof_class.openapi_types.keys()) + for var_name in var_names: + if var_name in fixed_model_args: + kwargs[var_name] = fixed_model_args[var_name] + + # do not try to make a model with no input args + if len(kwargs) == 0: + continue + + # and use it to make the instance + kwargs.update(constant_args) + try: + anyof_instance = anyof_class(**kwargs) + anyof_instances.append(anyof_instance) + except Exception: + pass + if len(anyof_instances) == 0: + raise ApiValueError( + "Invalid inputs given to generate an instance of %s. None of the " + "anyOf schemas matched the inputs." % self.__class__.__name__ + ) + return anyof_instances + + +def get_additional_properties_model_instances(composed_instances, self): + additional_properties_model_instances = [] + all_instances = [self] + all_instances.extend(composed_instances) + for instance in all_instances: + if instance.additional_properties_type is not None: + additional_properties_model_instances.append(instance) + return additional_properties_model_instances + + +def get_var_name_to_model_instances(self, composed_instances): + var_name_to_model_instances = {} + all_instances = [self] + all_instances.extend(composed_instances) + for instance in all_instances: + for var_name in instance.openapi_types: + if var_name not in var_name_to_model_instances: + var_name_to_model_instances[var_name] = [instance] + else: + var_name_to_model_instances[var_name].append(instance) + return var_name_to_model_instances + + +def get_unused_args(self, composed_instances, model_args): + unused_args = dict(model_args) + # arguments apssed to self were already converted to python names + # before __init__ was called + for var_name_py in self.attribute_map: + if var_name_py in unused_args: + del unused_args[var_name_py] + for instance in composed_instances: + if instance.__class__ in self._composed_schemas["allOf"]: + for var_name_py in instance.attribute_map: + if var_name_py in unused_args: + del unused_args[var_name_py] + else: + for var_name_js in instance.attribute_map.values(): + if var_name_js in unused_args: + del unused_args[var_name_js] + return unused_args + + +def validate_get_composed_info(constant_args, model_args, self): + """ + For composed schemas, generate schema instances for + all schemas in the oneOf/anyOf/allOf definition. If additional + properties are allowed, also assign those properties on + all matched schemas that contain additionalProperties. + Openapi schemas are python classes. + + Exceptions are raised if: + - 0 or > 1 oneOf schema matches the model_args input data + - no anyOf schema matches the model_args input data + - any of the allOf schemas do not match the model_args input data + + Args: + constant_args (dict): these are the args that every model requires + model_args (dict): these are the required and optional spec args that + were passed in to make this model + self (class): the class that we are instantiating + This class contains self._composed_schemas + + Returns: + composed_info (list): length three + composed_instances (list): the composed instances which are not + self + var_name_to_model_instances (dict): a dict going from var_name + to the model_instance which holds that var_name + the model_instance may be self or an instance of one of the + classes in self.composed_instances() + additional_properties_model_instances (list): a list of the + model instances which have the property + additional_properties_type. This list can include self + """ + # create composed_instances + composed_instances = [] + allof_instances = get_allof_instances(self, model_args, constant_args) + composed_instances.extend(allof_instances) + oneof_instance = get_oneof_instance(self.__class__, model_args, constant_args) + if oneof_instance is not None: + composed_instances.append(oneof_instance) + anyof_instances = get_anyof_instances(self, model_args, constant_args) + composed_instances.extend(anyof_instances) + + # map variable names to composed_instances + var_name_to_model_instances = get_var_name_to_model_instances( + self, composed_instances + ) + + # set additional_properties_model_instances + additional_properties_model_instances = get_additional_properties_model_instances( + composed_instances, self + ) + + # set any remaining values + unused_args = get_unused_args(self, composed_instances, model_args) + if ( + len(unused_args) > 0 + and len(additional_properties_model_instances) == 0 + and ( + self._configuration is None or not self._configuration.discard_unknown_keys + ) + ): + raise ApiValueError( + "Invalid input arguments input when making an instance of " + "class %s. Not all inputs were used. The unused input data " + "is %s" % (self.__class__.__name__, unused_args) + ) + + # no need to add additional_properties to var_name_to_model_instances here + # because additional_properties_model_instances will direct us to that + # instance when we use getattr or setattr + # and we update var_name_to_model_instances in setattr + + return [ + composed_instances, + var_name_to_model_instances, + additional_properties_model_instances, + unused_args, + ] diff --git a/cloudendure/models.py b/cloudendure/models.py deleted file mode 100644 index 385f1903f..000000000 --- a/cloudendure/models.py +++ /dev/null @@ -1,244 +0,0 @@ -# -*- coding: utf-8 -*- -"""Define the CloudEndure API wrapper related logic.""" -from __future__ import annotations - -import logging -from datetime import datetime -from typing import Any, Dict - -from dateutil.tz import tzlocal - -logger: logging.Logger = logging.getLogger(__name__) - - -class CloudEndureModel: - """Define the CloudEndure Model base object.""" - - def __init__(self) -> None: - """Initialize the CloudEndure Model.""" - self._valid_properties: Dict[str, Any] = {} - - @classmethod - def _is_builtin(self, obj) -> bool: - """Define the built-in property.""" - return isinstance(obj, (int, float, str, list, dict, bool)) - - def as_dict(self) -> Dict[str, Any]: - """Return a dict representation of the model.""" - result: Dict[Any, Any] = {} - for key in self._valid_properties: - val = getattr(self, key) - if isinstance(val, datetime): - val = val.isoformat() - # Parse custom classes - elif val and not CloudEndureModel._is_builtin(val): - val = val.as_dict() - # Parse lists of objects - elif isinstance(val, list): - # We only want to call as_dict in the case where the item - # isn't a builtin type. - for i in range(len(val)): - if CloudEndureModel._is_builtin(val[i]): - continue - val[i] = val[i].as_dict() - # If it's a boolean, add it regardless of the value - elif isinstance(val, bool): - result[key] = val - - # Add it if it's not None - if val: - result[key] = val - return result - - @classmethod - def parse(self, json: Dict[str, Any]) -> None: - """Parse a JSON object into a model instance.""" - raise NotImplementedError - - -# class CloudEndureResource(CloudEndureModel): -# """Define the CloudEndure resource base object.""" - -# RESOURCE_TYPES = (('Blueprint', 'BP'), ('Projects', 'PS'), ) - -# def __init__(self, resource_type: str = ''): -# """Initialize the CloudEndure resource.""" -# self.type: str = resource_type - -# def to_dict(self) -> Dict[str, str]: -# """Get the dictionary representation of the object.""" -# return { -# 'resource_type': '', -# } - -# class CloudEndureBlueprint(CloudEndureResource): -# """Define the CloudEndure Blueprint schema.""" - -# def __init__(self, project_id: str = '', blueprint_id: str = ''): -# """Initialize the CloudEndure Blueprint.""" -# self.project_id: str = project_id -# self.blueprint_id: str = blueprint_id - - -class Cloud(CloudEndureModel): - """Define the CloudEndure Cloud model schema.""" - - endpoint: str = "clouds" - _valid_properties: Dict[str, Any] = { - # Standard Schema - "id": "", - "roles": [], - "name": "", - # Instantiation Datetimes - "fetched_datetime": datetime.now(tzlocal()), - } - - def __init__(self, **kwargs) -> None: - """Initialize a new campaign instance.""" - for key, default in Cloud._valid_properties.items(): - setattr(self, key, kwargs.get(key, default)) - - @classmethod - def parse(self, json: Dict[str, Any]) -> Cloud: - """Parse the Cloud object.""" - cloud: Cloud = self() - return cloud - - -class Project(CloudEndureModel): - """Define the CloudEndure Project model schema.""" - - endpoint: str = "projects" - _valid_properties: Dict[str, Any] = { - # Standard Schema - "agentInstallationToken": "", - "cloudCredentialsIDs": [], - "features": { - "allowArchiving": False, - "allowByolOnDedicatedInstance": False, - "allowRecoveryPlans": False, - "awsExtendedHddTypes": False, - "drTier2": False, - "isDemo": False, - "pit": False, - }, - "id": "", - "licensesIDs": [], - "name": "", - "replicationReversed": False, - "targetCloudId": "", - "type": "", - "userIDs": [], - # Instantiation Datetimes - "fetched_datetime": datetime.now(tzlocal()), - } - - def __init__(self, **kwargs) -> None: - """Initialize a new campaign instance.""" - for key, default in Project._valid_properties.items(): - setattr(self, key, kwargs.get(key, default)) - - @classmethod - def parse(self, json: Dict[str, Any]) -> Project: - """Parse the Project object.""" - project: Project = self() - return project - - -class Machine(CloudEndureModel): - """Define the CloudEndure Machine model schema.""" - - parent: Project = Project() - endpoint: str = "projects/{}/machines" - _valid_properties: Dict[str, Any] = { - # Standard Schema - "sourceProperties": { - "name": "", - "installedApplications": {"items": [{"applicationName": ""}], "lastUpdatedDateTime": "",}, - "disks": [{"isProtected": False, "name": "", "size": 0}], - "machineCloudState": "", - "publicIps": [], - "memory": 0, - "os": "", - "cpu": [{"cores": 0, "modelName": ""}], - "runningServices": {"items": [{"serviceName": ""}], "lastUpdatedDateTime": "",}, - "machineCloudId": "", - }, - "replicationInfo": { - "lastConsistencyDateTime": "", - "nextConsistencyEstimatedDateTime": "", - "rescannedStorageBytes": 0, - "backloggedStorageBytes": 0, - "initiationStates": { - "items": [{"steps": [{"status": "", "message": "", "name": ""}], "startDateTime": "",}], - "estimatedNextAttemptDateTime": "", - }, - "replicatedStorageBytes": 0, - "totalStorageBytes": 0, - }, - "license": {"startOfUseDateTime": "", "licenseId": "string"}, - "tags": [], - "restoreServers": [], - "fromPointInTime": {"id": "", "dateTime": ""}, - "replicationStatus": "", - "replica": "", - "id": "", - "replicationConfiguration": { - "volumeEncryptionKey": "", - "replicationTags": [], - "subnetHostProject": "", - "replicationServerType": "", - "computeLocationId": "", - "subnetId": "", - "logicalLocationId": "", - "bandwidthThrottling": 0, - "storageLocationId": "", - "useDedicatedServer": False, - "zone": "", - "replicatorSecurityGroupIDs": [], - "usePrivateIp": False, - "proxyUrl": "", - "volumeEncryptionAllowed": False, - "archivingEnabled": False, - "objectStorageLocation": "", - }, - "lifeCycle": { - "lastTestLaunchDateTime": "", - "connectionEstablishedDateTime": "", - "agentInstallationDateTime": "", - "lastCutoverDateTime": "", - "lastRecoveryLaunchDateTime": "", - }, - "isAgentInstalled": False, - # Instantiation Datetimes - "fetched_datetime": datetime.now(tzlocal()), - } - - def __init__(self, **kwargs) -> None: - """Initialize a new machine instance.""" - for key, default in Project._valid_properties.items(): - setattr(self, key, kwargs.get(key, default)) - - @classmethod - def parse(self, json: Dict[str, Any]) -> Machine: - """Parse the Machine object. - - TODO: - * Add parsing for nested resources. - - """ - machine: Machine = self() - # # TODO (mbeacom): Add parsing for nested resources. - # for key, val in json.items(): - # if key == 'some_resource': - # resources = [Resource.parse(resource) for resource in val] - # setattr(machine, key, resources) - # elif key == 'another_resource': - # if val is not None: - # resources = [Resource2.parse(resource) for resource in val] - # setattr(machine, key, resources) - # elif key == 'another_resource_3': - # setattr(machine, key, Resource3.parse(val)) - # elif key in self._valid_properties: - # setattr(machine, key, val) - return machine diff --git a/cloudendure/models/__init__.py b/cloudendure/models/__init__.py new file mode 100644 index 000000000..d0dadd2e3 --- /dev/null +++ b/cloudendure/models/__init__.py @@ -0,0 +1,178 @@ +# flake8: noqa + +# import all models into this package +# if you have many models here with many references from one model to another this may +# raise a RecursionError +# to avoid this, import only the models that you directly need like: +# from from cloudendure.model.pet import Pet +# or import this package, but before doing it, use: +# import sys +# sys.setrecursionlimit(n) + +from cloudendure.model.account import Account +from cloudendure.model.account_ce_admin_properties import AccountCeAdminProperties +from cloudendure.model.account_link import AccountLink +from cloudendure.model.account_link_list import AccountLinkList +from cloudendure.model.account_request import AccountRequest +from cloudendure.model.account_request_list import AccountRequestList +from cloudendure.model.accounts_list import AccountsList +from cloudendure.model.agent_next_replication_init_request import ( + AgentNextReplicationInitRequest, +) +from cloudendure.model.all_project_features import AllProjectFeatures +from cloudendure.model.audit_log import AuditLog +from cloudendure.model.audit_log_changed_field import AuditLogChangedField +from cloudendure.model.audit_log_entry import AuditLogEntry +from cloudendure.model.audit_log_entry_participating_machines import ( + AuditLogEntryParticipatingMachines, +) +from cloudendure.model.bandwidth_throttling import BandwidthThrottling +from cloudendure.model.blueprint import Blueprint +from cloudendure.model.blueprint_disks import BlueprintDisks +from cloudendure.model.blueprint_list import BlueprintList +from cloudendure.model.cloud import Cloud +from cloudendure.model.cloud_credentials import CloudCredentials +from cloudendure.model.cloud_credentials_list import CloudCredentialsList +from cloudendure.model.cloud_credentials_request import CloudCredentialsRequest +from cloudendure.model.clouds_list import CloudsList +from cloudendure.model.compute_location import ComputeLocation +from cloudendure.model.configurations import Configurations +from cloudendure.model.configurations_list import ConfigurationsList +from cloudendure.model.cslp_item import CSLPItem +from cloudendure.model.cslp_request import CSLPRequest +from cloudendure.model.cslp_result import CSLPResult +from cloudendure.model.disk_config import DiskConfig +from cloudendure.model.dynamic_configuration import DynamicConfiguration +from cloudendure.model.error import Error +from cloudendure.model.extended_account_info import ExtendedAccountInfo +from cloudendure.model.gcp_machines_finance_data import GcpMachinesFinanceData +from cloudendure.model.identity_provider_redirect_response import ( + IdentityProviderRedirectResponse, +) +from cloudendure.model.initialization_step import InitializationStep +from cloudendure.model.inline_object import InlineObject +from cloudendure.model.inline_object1 import InlineObject1 +from cloudendure.model.inline_object2 import InlineObject2 +from cloudendure.model.inline_object3 import InlineObject3 +from cloudendure.model.inline_object4 import InlineObject4 +from cloudendure.model.inline_object5 import InlineObject5 +from cloudendure.model.inline_object6 import InlineObject6 +from cloudendure.model.inline_object7 import InlineObject7 +from cloudendure.model.inline_object8 import InlineObject8 +from cloudendure.model.inline_object9 import InlineObject9 +from cloudendure.model.inline_object10 import InlineObject10 +from cloudendure.model.inline_response200 import InlineResponse200 +from cloudendure.model.inline_response2001 import InlineResponse2001 +from cloudendure.model.inline_response2002 import InlineResponse2002 +from cloudendure.model.job import Job +from cloudendure.model.job_log import JobLog +from cloudendure.model.job_target_machine import JobTargetMachine +from cloudendure.model.jobs_list import JobsList +from cloudendure.model.key_value_list import KeyValueList +from cloudendure.model.launch_machines_parameters import LaunchMachinesParameters +from cloudendure.model.launch_machines_parameters_debug_scripts import ( + LaunchMachinesParametersDebugScripts, +) +from cloudendure.model.license import License +from cloudendure.model.license_ce_admin_properties import LicenseCeAdminProperties +from cloudendure.model.license_features import LicenseFeatures +from cloudendure.model.license_list import LicenseList +from cloudendure.model.list_users_result import ListUsersResult +from cloudendure.model.list_users_results import ListUsersResults +from cloudendure.model.logical_location import LogicalLocation +from cloudendure.model.machine import Machine +from cloudendure.model.machine_and_path_and_point_in_time import ( + MachineAndPathAndPointInTime, +) +from cloudendure.model.machine_and_point_in_time import MachineAndPointInTime +from cloudendure.model.machine_license import MachineLicense +from cloudendure.model.machine_life_cycle import MachineLifeCycle +from cloudendure.model.machine_replication_configuration import ( + MachineReplicationConfiguration, +) +from cloudendure.model.machine_replication_info import MachineReplicationInfo +from cloudendure.model.machine_replication_info_initiation_states import ( + MachineReplicationInfoInitiationStates, +) +from cloudendure.model.machine_replication_info_initiation_states_items import ( + MachineReplicationInfoInitiationStatesItems, +) +from cloudendure.model.machine_snapshot_credits import MachineSnapshotCredits +from cloudendure.model.machine_source_properties import MachineSourceProperties +from cloudendure.model.machine_source_properties_cpu import MachineSourcePropertiesCpu +from cloudendure.model.machine_source_properties_disks import ( + MachineSourcePropertiesDisks, +) +from cloudendure.model.machine_source_properties_installed_applications import ( + MachineSourcePropertiesInstalledApplications, +) +from cloudendure.model.machine_source_properties_installed_applications_items import ( + MachineSourcePropertiesInstalledApplicationsItems, +) +from cloudendure.model.machine_source_properties_running_services import ( + MachineSourcePropertiesRunningServices, +) +from cloudendure.model.machine_source_properties_running_services_items import ( + MachineSourcePropertiesRunningServicesItems, +) +from cloudendure.model.machine_throttle_time_seconds import MachineThrottleTimeSeconds +from cloudendure.model.machines_list import MachinesList +from cloudendure.model.machines_list_invalid_ids_and_job import ( + MachinesListInvalidIDsAndJob, +) +from cloudendure.model.network_interface import NetworkInterface +from cloudendure.model.outpost import Outpost +from cloudendure.model.point_in_time import PointInTime +from cloudendure.model.point_in_time_list import PointInTimeList +from cloudendure.model.populate_job_names import PopulateJobNames +from cloudendure.model.populate_job_params import PopulateJobParams +from cloudendure.model.project import Project +from cloudendure.model.project_ce_admin_properties import ProjectCeAdminProperties +from cloudendure.model.project_features import ProjectFeatures +from cloudendure.model.project_storage import ProjectStorage +from cloudendure.model.project_storage_working_storage import ( + ProjectStorageWorkingStorage, +) +from cloudendure.model.projects_and_users import ProjectsAndUsers +from cloudendure.model.projects_and_users_items import ProjectsAndUsersItems +from cloudendure.model.projects_list import ProjectsList +from cloudendure.model.recovery_plan import RecoveryPlan +from cloudendure.model.recovery_plan_list import RecoveryPlanList +from cloudendure.model.recovery_plan_step import RecoveryPlanStep +from cloudendure.model.recovery_plan_steps import RecoveryPlanSteps +from cloudendure.model.region import Region +from cloudendure.model.regions_list import RegionsList +from cloudendure.model.replica import Replica +from cloudendure.model.replication_configuration import ReplicationConfiguration +from cloudendure.model.replication_configuration_list import ( + ReplicationConfigurationList, +) +from cloudendure.model.replication_configuration_replication_tags import ( + ReplicationConfigurationReplicationTags, +) +from cloudendure.model.saml_settings import SamlSettings +from cloudendure.model.security_group import SecurityGroup +from cloudendure.model.storage_location import StorageLocation +from cloudendure.model.subnet import Subnet +from cloudendure.model.time import Time +from cloudendure.model.updateable_scripts import UpdateableScripts +from cloudendure.model.updateable_scripts_result import UpdateableScriptsResult +from cloudendure.model.updateable_scripts_result_on_premise_volumes import ( + UpdateableScriptsResultOnPremiseVolumes, +) +from cloudendure.model.upgrade_counter_delay import UpgradeCounterDelay +from cloudendure.model.usage import Usage +from cloudendure.model.usage_list import UsageList +from cloudendure.model.user import User +from cloudendure.model.user_report import UserReport +from cloudendure.model.user_report_gcp_machines_finance_data import ( + UserReportGcpMachinesFinanceData, +) +from cloudendure.model.user_reports import UserReports +from cloudendure.model.user_settings import UserSettings +from cloudendure.model.user_settings_send_notifications import ( + UserSettingsSendNotifications, +) +from cloudendure.model.users_and_roles import UsersAndRoles +from cloudendure.model.users_and_roles_items import UsersAndRolesItems +from cloudendure.model.users_list import UsersList diff --git a/cloudendure/cloudendure_api/rest.py b/cloudendure/rest.py similarity index 81% rename from cloudendure/cloudendure_api/rest.py rename to cloudendure/rest.py index 1fdbc38b2..236a2504d 100644 --- a/cloudendure/cloudendure_api/rest.py +++ b/cloudendure/rest.py @@ -1,29 +1,35 @@ -# -*- coding: utf-8 -*- -"""Define the CloudEndure REST interface.""" -from __future__ import absolute_import +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + import io import json import logging import re import ssl +from urllib.parse import urlencode -import certifi +import urllib3 -# python 2 and python 3 compatibility library -from six.moves.urllib.parse import urlencode - -try: - import urllib3 -except ImportError: - raise ImportError("Swagger python client requires urllib3.") +from cloudendure.exceptions import ( + ApiException, + ApiValueError, + ForbiddenException, + NotFoundException, + ServiceException, + UnauthorizedException, +) logger = logging.getLogger(__name__) class RESTResponse(io.IOBase): - """Define the CloudEndure REST Response.""" - def __init__(self, resp): self.urllib3_response = resp self.status = resp.status @@ -31,19 +37,16 @@ def __init__(self, resp): self.data = resp.data def getheaders(self): - """Return a dictionary of the response headers.""" + """Returns a dictionary of the response headers.""" return self.urllib3_response.getheaders() def getheader(self, name, default=None): - """Return a given response header.""" + """Returns a given response header.""" return self.urllib3_response.getheader(name, default) -class RESTClientObject: - """Define the CloudEndure REST Client Object.""" - +class RESTClientObject(object): def __init__(self, configuration, pools_size=4, maxsize=None): - """Initialize the REST client.""" # urllib3.PoolManager will pass all kw parameters to connectionpool # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75 # noqa: E501 # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680 # noqa: E501 @@ -56,19 +59,18 @@ def __init__(self, configuration, pools_size=4, maxsize=None): else: cert_reqs = ssl.CERT_NONE - # ca_certs - if configuration.ssl_ca_cert: - ca_certs = configuration.ssl_ca_cert - else: - # if not set certificate file, use Mozilla's root certificates. - ca_certs = certifi.where() - addition_pool_args = {} if configuration.assert_hostname is not None: addition_pool_args[ "assert_hostname" ] = configuration.assert_hostname # noqa: E501 + if configuration.retries is not None: + addition_pool_args["retries"] = configuration.retries + + if configuration.socket_options is not None: + addition_pool_args["socket_options"] = configuration.socket_options + if maxsize is None: if configuration.connection_pool_maxsize is not None: maxsize = configuration.connection_pool_maxsize @@ -81,21 +83,22 @@ def __init__(self, configuration, pools_size=4, maxsize=None): num_pools=pools_size, maxsize=maxsize, cert_reqs=cert_reqs, - ca_certs=ca_certs, + ca_certs=configuration.ssl_ca_cert, cert_file=configuration.cert_file, key_file=configuration.key_file, proxy_url=configuration.proxy, - **addition_pool_args, + proxy_headers=configuration.proxy_headers, + **addition_pool_args ) else: self.pool_manager = urllib3.PoolManager( num_pools=pools_size, maxsize=maxsize, cert_reqs=cert_reqs, - ca_certs=ca_certs, + ca_certs=configuration.ssl_ca_cert, cert_file=configuration.cert_file, key_file=configuration.key_file, - **addition_pool_args, + **addition_pool_args ) def request( @@ -128,11 +131,10 @@ def request( (connection, read) timeouts. """ method = method.upper() - if method not in ["GET", "HEAD", "DELETE", "POST", "PUT", "PATCH", "OPTIONS"]: - raise Exception(f"Unsupported method: ({method})") + assert method in ["GET", "HEAD", "DELETE", "POST", "PUT", "PATCH", "OPTIONS"] if post_params and body: - raise ValueError( + raise ApiValueError( "body parameter cannot be used with post_params parameter." ) @@ -141,7 +143,7 @@ def request( timeout = None if _request_timeout: - if isinstance(_request_timeout, (int,)): # noqa: E501,F821 + if isinstance(_request_timeout, (int, float)): # noqa: E501,F821 timeout = urllib3.Timeout(total=_request_timeout) elif isinstance(_request_timeout, tuple) and len(_request_timeout) == 2: timeout = urllib3.Timeout( @@ -151,9 +153,6 @@ def request( if "Content-Type" not in headers: headers["Content-Type"] = "application/json" - headers = {k: v for k, v in headers.items() if v is not None} - headers["X-XSRF-TOKEN"] = "Ykua549wkGxHPsV4fnncbw==\\012" - try: # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE` if method in ["POST", "PUT", "PATCH", "OPTIONS", "DELETE"]: @@ -200,7 +199,7 @@ def request( # Pass a `string` parameter directly in the body to support # other content types than Json when `body` argument is # provided in serialized form - elif isinstance(body, str): + elif isinstance(body, str) or isinstance(body, bytes): request_body = body r = self.pool_manager.request( method, @@ -218,8 +217,6 @@ def request( raise ApiException(status=0, reason=msg) # For `GET`, `HEAD` else: - print("\n\nHEADERS IN REST: ", headers) - print("\nPARAMS IN REST: ", query_params) r = self.pool_manager.request( method, url, @@ -235,14 +232,22 @@ def request( if _preload_content: r = RESTResponse(r) - # In the python 3, the response.data is bytes. - # we need to decode it to string. - r.data = r.data.decode("utf8") - # log response body logger.debug("response body: %s", r.data) if not 200 <= r.status <= 299: + if r.status == 401: + raise UnauthorizedException(http_resp=r) + + if r.status == 403: + raise ForbiddenException(http_resp=r) + + if r.status == 404: + raise NotFoundException(http_resp=r) + + if 500 <= r.status <= 599: + raise ServiceException(http_resp=r) + raise ApiException(http_resp=r) return r @@ -383,29 +388,3 @@ def PATCH( _request_timeout=_request_timeout, body=body, ) - - -class ApiException(Exception): - def __init__(self, status=None, reason=None, http_resp=None): - if http_resp: - self.status = http_resp.status - self.reason = http_resp.reason - self.body = http_resp.data - self.headers = http_resp.getheaders() - else: - self.status = status - self.reason = reason - self.body = None - self.headers = None - - def __str__(self): - """Define the custom string error messages for exception.""" - error_message = f"({self.status})\nReason: {self.reason}\n" - - if self.headers: - error_message += f"HTTP response headers: {self.headers}\n" - - if self.body: - error_message += f"HTTP response body: {self.body}\n" - - return error_message diff --git a/cloudendure/templates.py b/cloudendure/templates.py deleted file mode 100644 index 70a906949..000000000 --- a/cloudendure/templates.py +++ /dev/null @@ -1,108 +0,0 @@ -# -*- coding: utf-8 -*- -"""Define the CloudEndure template logic.""" -from __future__ import annotations - -from typing import Any, Dict - -from cookiecutter.main import cookiecutter - - -class CookiecutterHandler: - """Handle cookiecutter operations.""" - - def run( - self, - migration_data: Dict[str, Any], - cookiecutter_path: str = "https://github.com/2ndWatch/cookiecutter-tf-cloudendure", - ) -> None: - """Run the automation of cookiecutter.""" - print("Running cookiecutter project creation with package: ", cookiecutter_path) - for k, v in migration_data.items(): - print("Creating the cookiecutter repository subdirectory for: ", k) - self.create_project(package_path=cookiecutter_path, context=v) - - def create_project(self, package_path: str, context: Dict[Any, Any] = None, no_input: bool = True) -> bool: - """Create a cookiecutter project with the provided details. - - Args: - package_path (str): The path to the cookiecutter template. - context (dict): The seed context to be used to populate cookiecutter values. - Defaults to an empty dictionary. - no_input (bool): Whether or not the interaction is no input. - Requires True in order to function for bulk creation. - Defaults to: True. - - Returns: - bool: Whether or not project creation was successful. - - """ - if not context: - context = {} - - try: - cookiecutter(package_path, no_input=no_input, extra_context=context) - except Exception as e: - print("Exception: (%s) encountered in create_project", e) - return False - return True - - -class TerraformTemplate: - """Define Terraform template entries. - - Attributes: - INSTANCE_TEMPLATE (str): The Terraform EC2 instance template. - NETWORKTEMPLATE (str): The Terraform network interface template. - VOLUME_TEMPLATE (str): The Terraform volume and volume attachment template. - - """ - - INSTANCE_TEMPLATE: str = """ -resource "aws_instance" "ec2_instance_{name}" {{ - ami = "{image_id}" - instance_type = "${{var.instance_type}}" - key_name = "{keypair}" - iam_instance_profile = "${{local.iam_instance_profile}}" - tags = "${{merge(module.{tagging_module}.tags, map("Name", "{uppercase_name}"))}}" - - network_interface {{ - network_interface_id = "${{aws_network_interface.eni_primary_{name}.id}}" - device_index = 0 - }} - - root_block_device {{ - volume_type = "gp2" - volume_size = "100" - }} - - lifecycle {{ - ignore_changes = ["ami"] - }} -}} -""" - - NETWORK_TEMPLATE: str = """ -resource "aws_network_interface" "eni_primary_{name}" {{ - subnet_id = "{subnet_id}" - private_ips = ["{private_ip}"] - security_groups = ["${{aws_security_group.{security_group}.id}}"] - tags = "${{merge(module.{tagging_module}.tags, map("Name", "ap-eni-{name}-sg"))}}" -}} -""" - - VOLUME_TEMPLATE: str = """ -resource "aws_ebs_volume" "datadisk_{name}_{drive_name}" {{ - availability_zone = "{region}a" - type = "{volume_type}" - size = {volume_size} - encrypted = true - snapshot_id = "{snapshot_id}" - tags = "${{merge(module.{tagging_module}.tags, map("Name", "ap-vol-{name}-{drive_name}-sg"))}}" -}} - -resource "aws_volume_attachment" "ebs_att_disk_{name}_{drive_name}" {{ - device_name = "{drive}" - volume_id = "${{aws_ebs_volume.datadisk_{name}_{drive_name}.id}}" - instance_id = "${{aws_instance.ec2_instance_{name}.id}}" -}} -""" diff --git a/cloudendure/tests/__init__.py b/cloudendure/tests/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/cloudendure/tests/test_utils.py b/cloudendure/tests/test_utils.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/cloudendure/utils.py b/cloudendure/utils.py deleted file mode 100644 index 68cd98050..000000000 --- a/cloudendure/utils.py +++ /dev/null @@ -1,69 +0,0 @@ -# -*- coding: utf-8 -*- -"""Define the CloudEndure utility logic. - -Attributes: - first_cap_re (re.Pattern): The regex pattern to determine the first capital - letter in a string. - all_cap_re (re.Pattern): The regex pattern to determine all capital letters - in a string. - -""" -from __future__ import annotations - -import re -import time -from datetime import datetime -from typing import Any, Dict - -from cloudendure.__version__ import __version__ as cloudendure_version - -first_cap_re: re.Pattern = re.compile("(.)([A-Z][a-z]+)") -all_cap_re: re.Pattern = re.compile("([a-z0-9])([A-Z])") - - -def get_user_agent(user_agent: str = "cloudendure-python") -> str: - """Get the current module version. - - Args: - user_agent (str): The user agent client designation. - Defaults to: cloudendure-python - - Returns: - str: The user agent string representation for the client. - - """ - user_agent_str: str = f"{user_agent}/{cloudendure_version}" - return user_agent_str - - -def get_time_now() -> Dict[str, Any]: - """Get the current time in UTC as milliseconds. - - Returns: - dict: The mapping of time now values in UTC. - - """ - time_now: float = time.time() - milliseconds_now: int = int(round(time_now * 1000)) - datetime_now: datetime = datetime.fromtimestamp(time_now) - data: Dict[str, Any] = { - "seconds": time_now, - "milliseconds": milliseconds_now, - "datetime": datetime_now, - } - return data - - -def to_snake_case(value: str) -> str: - """Convert the provided value from CamelCase to snake_case. - - Args: - value (str): The string value to convert from CamelCase to snake_case. - - Returns: - str: The formatted snake_case string. - - """ - string_1: str = first_cap_re.sub(r"\1_\2", value) - string_2: str = all_cap_re.sub(r"\1_\2", string_1).lower() - return string_2 diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index a48e18cc1..000000000 --- a/docker-compose.yml +++ /dev/null @@ -1,25 +0,0 @@ -version: "3.7" # https://docs.docker.com/compose/compose-file/compose-versioning/ -services: - app: - build: . - image: mbeacom/cloudendure-py:latest - volumes: - - .:/app - deploy: - replicas: 1 - update_config: - delay: 10s - restart_policy: - condition: on-failure - stepfunctions: - # https://docs.aws.amazon.com/step-functions/latest/dg/sfn-local-config-options.html#docker-credentials - image: amazon/aws-stepfunctions-local - restart: unless-stopped - ports: - - "8083:8083" - deploy: - replicas: 1 - update_config: - delay: 10s - restart_policy: - condition: on-failure diff --git a/docs/API_README.md b/docs/API_README.md deleted file mode 100644 index 228ac67b8..000000000 --- a/docs/API_README.md +++ /dev/null @@ -1,214 +0,0 @@ -# cloudendure_api - -This Python package is automatically generated by the [Swagger Codegen](https://github.com/swagger-api/swagger-codegen) project: - -- API version: `5` -- Package version: `0.1.7` -- Build package: `io.swagger.codegen.v3.generators.python.PythonClientCodegen` - -## Requirements - -[Python 3.6+](https://www.python.org/downloads/) - -## Installation & Usage - -### pip install via Poetry - -If the python package is hosted on Github, you can install directly from Github - -```sh -poetry install cloudendure -``` - -Then import the package: - -```python -from cloudendure import cloudendure_api -``` - -## Getting Started - -Please follow the [installation procedure](#installation--usage) and then run the following: - -```python -import time - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException - -# create an instance of the API class -api_instance = cloudendure_api.AccountApi(cloudendure_api.ApiClient(configuration)) -account_id = 'account_id_example' # str | - -try: - # Get Account information - api_response = api_instance.accounts_account_id_get(account_id) - print(api_response) -except ApiException as e: - print('Exception when calling AccountApi->accounts_account_id_get: %s\n '% e) - -``` - -## Documentation for API Endpoints - -All URIs are relative to *https://console.cloudendure.com/api/latest* - -Class | Method | HTTP request | Description ------------- | ------------- | ------------- | ------------- -*AccountApi* | [**accounts_account_id_get**](AccountApi.md#accounts_account_id_get) | **GET** /accounts/{accountId} | Get Account information -*ActionsApi* | [**projects_project_id_find_files_post**](ActionsApi.md#projects_project_id_find_files_post) | **POST** /projects/{projectId}/findFiles | Search for files in a backup project -*ActionsApi* | [**projects_project_id_jobs_get**](ActionsApi.md#projects_project_id_jobs_get) | **GET** /projects/{projectId}/jobs | List Jobs -*ActionsApi* | [**projects_project_id_jobs_job_id_get**](ActionsApi.md#projects_project_id_jobs_job_id_get) | **GET** /projects/{projectId}/jobs/{jobId} | Get Job -*ActionsApi* | [**projects_project_id_launch_machines_post**](ActionsApi.md#projects_project_id_launch_machines_post) | **POST** /projects/{projectId}/launchMachines | Launch target machines -*ActionsApi* | [**projects_project_id_launch_restore_servers_post**](ActionsApi.md#projects_project_id_launch_restore_servers_post) | **POST** /projects/{projectId}/launchRestoreServers | Launch restore servers @todo -*ActionsApi* | [**projects_project_id_move_machines_post**](ActionsApi.md#projects_project_id_move_machines_post) | **POST** /projects/{projectId}/moveMachines | Moves machines to another project -*ActionsApi* | [**projects_project_id_pause_replication_post**](ActionsApi.md#projects_project_id_pause_replication_post) | **POST** /projects/{projectId}/pauseReplication | Pause replication -*ActionsApi* | [**projects_project_id_replicas_delete**](ActionsApi.md#projects_project_id_replicas_delete) | **DELETE** /projects/{projectId}/replicas | Perform Cleanup -*ActionsApi* | [**projects_project_id_restore_files_post**](ActionsApi.md#projects_project_id_restore_files_post) | **POST** /projects/{projectId}/restoreFiles | Restore selected files in a backup project -*ActionsApi* | [**projects_project_id_reverse_replication_post**](ActionsApi.md#projects_project_id_reverse_replication_post) | **POST** /projects/{projectId}/reverseReplication | Reverse replication direction -*ActionsApi* | [**projects_project_id_start_replication_post**](ActionsApi.md#projects_project_id_start_replication_post) | **POST** /projects/{projectId}/startReplication | Start replication -*ActionsApi* | [**projects_project_id_stop_replication_post**](ActionsApi.md#projects_project_id_stop_replication_post) | **POST** /projects/{projectId}/stopReplication | Stop replication -*AuthenticationApi* | [**login_post**](AuthenticationApi.md#login_post) | **POST** /login | Login -*AuthenticationApi* | [**logout_post**](AuthenticationApi.md#logout_post) | **POST** /logout | Logout -*BlueprintApi* | [**projects_project_id_blueprints_blueprint_id_get**](BlueprintApi.md#projects_project_id_blueprints_blueprint_id_get) | **GET** /projects/{projectId}/blueprints/{blueprintId} | Get Blueprint -*BlueprintApi* | [**projects_project_id_blueprints_blueprint_id_patch**](BlueprintApi.md#projects_project_id_blueprints_blueprint_id_patch) | **PATCH** /projects/{projectId}/blueprints/{blueprintId} | Configure Blueprint -*BlueprintApi* | [**projects_project_id_blueprints_get**](BlueprintApi.md#projects_project_id_blueprints_get) | **GET** /projects/{projectId}/blueprints | List Blueprints -*BlueprintApi* | [**projects_project_id_blueprints_post**](BlueprintApi.md#projects_project_id_blueprints_post) | **POST** /projects/{projectId}/blueprints | Create Blueprint -*CloudApi* | [**cloud_credentials_creds_id_regions_get**](CloudApi.md#cloud_credentials_creds_id_regions_get) | **GET** /cloudCredentials/{credsId}/regions | List Regions -*CloudApi* | [**cloud_credentials_creds_id_regions_region_id_delete**](CloudApi.md#cloud_credentials_creds_id_regions_region_id_delete) | **DELETE** /cloudCredentials/{credsId}/regions/{regionId} | Delete region (VCenter) -*CloudApi* | [**cloud_credentials_creds_id_regions_region_id_get**](CloudApi.md#cloud_credentials_creds_id_regions_region_id_get) | **GET** /cloudCredentials/{credsId}/regions/{regionId} | Get Region -*CloudApi* | [**cloud_credentials_creds_id_regions_region_id_patch**](CloudApi.md#cloud_credentials_creds_id_regions_region_id_patch) | **PATCH** /cloudCredentials/{credsId}/regions/{regionId} | Patch region (rename) -*CloudApi* | [**clouds_get**](CloudApi.md#clouds_get) | **GET** /clouds | List Clouds -*CloudCredentialsApi* | [**cloud_credentials_creds_id_get**](CloudCredentialsApi.md#cloud_credentials_creds_id_get) | **GET** /cloudCredentials/{credsId} | Get Credentials -*CloudCredentialsApi* | [**cloud_credentials_creds_id_patch**](CloudCredentialsApi.md#cloud_credentials_creds_id_patch) | **PATCH** /cloudCredentials/{credsId} | Change Credentials -*CloudCredentialsApi* | [**cloud_credentials_get**](CloudCredentialsApi.md#cloud_credentials_get) | **GET** /cloudCredentials | List Credentials -*CloudCredentialsApi* | [**cloud_credentials_post**](CloudCredentialsApi.md#cloud_credentials_post) | **POST** /cloudCredentials | Create Credentials -*DefaultApi* | [**accounts_account_id_access_get**](DefaultApi.md#accounts_account_id_access_get) | **GET** /accounts/{accountId}/access | get a temporary token by email -*DefaultApi* | [**extended_account_info_get**](DefaultApi.md#extended_account_info_get) | **GET** /extendedAccountInfo | Returns the extended current account information. -*DefaultApi* | [**projects_assign_users_post**](DefaultApi.md#projects_assign_users_post) | **POST** /projects/assignUsers | todo -*DefaultApi* | [**projects_project_id_audit_log_get**](DefaultApi.md#projects_project_id_audit_log_get) | **GET** /projects/{projectId}/auditLog | Get audit log -*DefaultApi* | [**projects_project_id_storage_get**](DefaultApi.md#projects_project_id_storage_get) | **GET** /projects/{projectId}/storage | project's storage -*DefaultApi* | [**projects_remove_users_post**](DefaultApi.md#projects_remove_users_post) | **POST** /projects/removeUsers | todo -*DefaultApi* | [**replace_api_token_post**](DefaultApi.md#replace_api_token_post) | **POST** /replaceApiToken | Replaces API token -*DefaultApi* | [**set_password_post**](DefaultApi.md#set_password_post) | **POST** /setPassword | Set password for invited user -*DefaultApi* | [**users_assign_roles_post**](DefaultApi.md#users_assign_roles_post) | **POST** /users/assignRoles | Add roles to users -*DefaultApi* | [**users_post**](DefaultApi.md#users_post) | **POST** /users | Create a new User -*DefaultApi* | [**users_revoke_roles_post**](DefaultApi.md#users_revoke_roles_post) | **POST** /users/revokeRoles | Add roles to users -*LicensingApi* | [**licenses_get**](LicensingApi.md#licenses_get) | **GET** /licenses | List Licenses -*LicensingApi* | [**licenses_license_id_get**](LicensingApi.md#licenses_license_id_get) | **GET** /licenses/{licenseId} | Get License -*MachinesApi* | [**projects_project_id_machines_delete**](MachinesApi.md#projects_project_id_machines_delete) | **DELETE** /projects/{projectId}/machines | Uninstall agent -*MachinesApi* | [**projects_project_id_machines_get**](MachinesApi.md#projects_project_id_machines_get) | **GET** /projects/{projectId}/machines | List Machines -*MachinesApi* | [**projects_project_id_machines_machine_id_get**](MachinesApi.md#projects_project_id_machines_machine_id_get) | **GET** /projects/{projectId}/machines/{machineId} | Get a specific machine. -*MachinesApi* | [**projects_project_id_machines_machine_id_patch**](MachinesApi.md#projects_project_id_machines_machine_id_patch) | **PATCH** /projects/{projectId}/machines/{machineId} | Update a machine. Accepts only Launch time updates. -*MachinesApi* | [**projects_project_id_machines_patch**](MachinesApi.md#projects_project_id_machines_patch) | **PATCH** /projects/{projectId}/machines | Batch-update multiple machines -*MachinesApi* | [**projects_project_id_replicas_replica_id_get**](MachinesApi.md#projects_project_id_replicas_replica_id_get) | **GET** /projects/{projectId}/replicas/{replicaId} | Get Target Machine -*ProjectApi* | [**projects_get**](ProjectApi.md#projects_get) | **GET** /projects | List Projects -*ProjectApi* | [**projects_post**](ProjectApi.md#projects_post) | **POST** /projects | Create Project -*ProjectApi* | [**projects_project_id_delete**](ProjectApi.md#projects_project_id_delete) | **DELETE** /projects/{projectId} | Delete Project and all sub-resources including cloud assets other than launched target machines -*ProjectApi* | [**projects_project_id_get**](ProjectApi.md#projects_project_id_get) | **GET** /projects/{projectId} | Get Project -*ProjectApi* | [**projects_project_id_patch**](ProjectApi.md#projects_project_id_patch) | **PATCH** /projects/{projectId} | Update Project (including partial update) -*ProjectApi* | [**projects_project_id_tags_get**](ProjectApi.md#projects_project_id_tags_get) | **GET** /projects/{projectId}/tags | Gets all instance tags of all machines in the project. -*RecoveryPlansApi* | [**projects_project_id_recovery_plans_get**](RecoveryPlansApi.md#projects_project_id_recovery_plans_get) | **GET** /projects/{projectId}/recoveryPlans | Gets all recovery plans for the project. -*RecoveryPlansApi* | [**projects_project_id_recovery_plans_post**](RecoveryPlansApi.md#projects_project_id_recovery_plans_post) | **POST** /projects/{projectId}/recoveryPlans | Creates a new recovery plan. -*RecoveryPlansApi* | [**projects_project_id_recovery_plans_recovery_plan_id_delete**](RecoveryPlansApi.md#projects_project_id_recovery_plans_recovery_plan_id_delete) | **DELETE** /projects/{projectId}/recoveryPlans/{recoveryPlanId} | Deletes a recovery plan. -*RecoveryPlansApi* | [**projects_project_id_recovery_plans_recovery_plan_id_get**](RecoveryPlansApi.md#projects_project_id_recovery_plans_recovery_plan_id_get) | **GET** /projects/{projectId}/recoveryPlans/{recoveryPlanId} | Gets a recovery plan. -*RecoveryPlansApi* | [**projects_project_id_recovery_plans_recovery_plan_id_patch**](RecoveryPlansApi.md#projects_project_id_recovery_plans_recovery_plan_id_patch) | **PATCH** /projects/{projectId}/recoveryPlans/{recoveryPlanId} | Updates a new recovery plan. -*RecoveryPlansApi* | [**projects_project_id_run_recovery_plan_post**](RecoveryPlansApi.md#projects_project_id_run_recovery_plan_post) | **POST** /projects/{projectId}/runRecoveryPlan | Launch a recovery plan. -*ReplicationApi* | [**projects_project_id_machines_machine_id_bandwidth_throttling_get**](ReplicationApi.md#projects_project_id_machines_machine_id_bandwidth_throttling_get) | **GET** /projects/{projectId}/machines/{machineId}/bandwidthThrottling | Get value of network bandwidth throttling setting for Machine -*ReplicationApi* | [**projects_project_id_machines_machine_id_bandwidth_throttling_patch**](ReplicationApi.md#projects_project_id_machines_machine_id_bandwidth_throttling_patch) | **PATCH** /projects/{projectId}/machines/{machineId}/bandwidthThrottling | Set value of network bandwidth throttling setting for Machine -*ReplicationApi* | [**projects_project_id_machines_machine_id_delete**](ReplicationApi.md#projects_project_id_machines_machine_id_delete) | **DELETE** /projects/{projectId}/machines/{machineId} | Uninstall agent -*ReplicationApi* | [**projects_project_id_machines_machine_id_pointsintime_get**](ReplicationApi.md#projects_project_id_machines_machine_id_pointsintime_get) | **GET** /projects/{projectId}/machines/{machineId}/pointsintime | List Available Points-in-time -*ReplicationApi* | [**projects_project_id_replication_configurations_get**](ReplicationApi.md#projects_project_id_replication_configurations_get) | **GET** /projects/{projectId}/replicationConfigurations | List Replication Configurations -*ReplicationApi* | [**projects_project_id_replication_configurations_post**](ReplicationApi.md#projects_project_id_replication_configurations_post) | **POST** /projects/{projectId}/replicationConfigurations | Create Replication Configuration -*ReplicationApi* | [**projects_project_id_replication_configurations_replication_configuration_id_patch**](ReplicationApi.md#projects_project_id_replication_configurations_replication_configuration_id_patch) | **PATCH** /projects/{projectId}/replicationConfigurations/{replicationConfigurationId} | Modify Replication Configuration -*UserApi* | [**change_password_post**](UserApi.md#change_password_post) | **POST** /changePassword | Change Password -*UserApi* | [**me_get**](UserApi.md#me_get) | **GET** /me | Me -*UserApi* | [**users_user_id_delete**](UserApi.md#users_user_id_delete) | **DELETE** /users/{userId} | Delete a User -*UserApi* | [**users_user_id_patch**](UserApi.md#users_user_id_patch) | **PATCH** /users/{userId} | Modify user settings - -## Documentation For Models - -- [CloudEndureAccount](CloudEndureAccount.md) -- [CloudEndureAccountRequest](CloudEndureAccountRequest.md) -- [CloudEndureAccountRequestList](CloudEndureAccountRequestList.md) -- [CloudEndureAccountsList](CloudEndureAccountsList.md) -- [CloudEndureAgentNextReplicationInitRequest](CloudEndureAgentNextReplicationInitRequest.md) -- [CloudEndureAllProjectFeatures](CloudEndureAllProjectFeatures.md) -- [CloudEndureAuditLog](CloudEndureAuditLog.md) -- [CloudEndureAuditLogChangedField](CloudEndureAuditLogChangedField.md) -- [CloudEndureAuditLogEntry](CloudEndureAuditLogEntry.md) -- [CloudEndureBandwidthThrottling](CloudEndureBandwidthThrottling.md) -- [CloudEndureBlueprint](CloudEndureBlueprint.md) -- [CloudEndureBlueprintList](CloudEndureBlueprintList.md) -- [CloudEndureCloud](CloudEndureCloud.md) -- [CloudEndureCloudCredentials](CloudEndureCloudCredentials.md) -- [CloudEndureCloudCredentialsList](CloudEndureCloudCredentialsList.md) -- [CloudEndureCloudCredentialsRequest](CloudEndureCloudCredentialsRequest.md) -- [CloudEndureCloudsList](CloudEndureCloudsList.md) -- [CloudEndureComputeLocation](CloudEndureComputeLocation.md) -- [CloudEndureConfigurations](CloudEndureConfigurations.md) -- [CloudEndureConfigurationsList](CloudEndureConfigurationsList.md) -- [CloudEndureError](CloudEndureError.md) -- [CloudEndureExtendedAccountInfo](CloudEndureExtendedAccountInfo.md) -- [CloudEndureFindFilesParameters](CloudEndureFindFilesParameters.md) -- [CloudEndureFindFilesResult](CloudEndureFindFilesResult.md) -- [CloudEndureFindFilesResultPit](CloudEndureFindFilesResultPit.md) -- [CloudEndureFindFilesResults](CloudEndureFindFilesResults.md) -- [CloudEndureGcpMachinesFinanceData](CloudEndureGcpMachinesFinanceData.md) -- [CloudEndureIdentityProviderRedirectResponse](CloudEndureIdentityProviderRedirectResponse.md) -- [CloudEndureInitializationStep](CloudEndureInitializationStep.md) -- [CloudEndureJob](CloudEndureJob.md) -- [CloudEndureJobsList](CloudEndureJobsList.md) -- [CloudEndureKeyValueList](CloudEndureKeyValueList.md) -- [CloudEndureLaunchMachinesParameters](CloudEndureLaunchMachinesParameters.md) -- [CloudEndureLicense](CloudEndureLicense.md) -- [CloudEndureLicenseFeatures](CloudEndureLicenseFeatures.md) -- [CloudEndureLicenseList](CloudEndureLicenseList.md) -- [CloudEndureListUsersResult](CloudEndureListUsersResult.md) -- [CloudEndureListUsersResults](CloudEndureListUsersResults.md) -- [CloudEndureLogicalLocation](CloudEndureLogicalLocation.md) -- [CloudEndureMachine](CloudEndureMachine.md) -- [CloudEndureMachineAndPathAndPointInTime](CloudEndureMachineAndPathAndPointInTime.md) -- [CloudEndureMachineAndPointInTime](CloudEndureMachineAndPointInTime.md) -- [CloudEndureMachineReplicationConfiguration](CloudEndureMachineReplicationConfiguration.md) -- [CloudEndureMachineSnapshotCredits](CloudEndureMachineSnapshotCredits.md) -- [CloudEndureMachineThrottleTimeSeconds](CloudEndureMachineThrottleTimeSeconds.md) -- [CloudEndureMachinesList](CloudEndureMachinesList.md) -- [CloudEndureMachinesListInvalidIDsAndJob](CloudEndureMachinesListInvalidIDsAndJob.md) -- [CloudEndureNetworkInterface](CloudEndureNetworkInterface.md) -- [CloudEndurePointInTime](CloudEndurePointInTime.md) -- [CloudEndurePointInTimeList](CloudEndurePointInTimeList.md) -- [CloudEndureProject](CloudEndureProject.md) -- [CloudEndureProjectStorage](CloudEndureProjectStorage.md) -- [CloudEndureProjectsAndUsers](CloudEndureProjectsAndUsers.md) -- [CloudEndureProjectsList](CloudEndureProjectsList.md) -- [CloudEndureRecoveryPlan](CloudEndureRecoveryPlan.md) -- [CloudEndureRecoveryPlanList](CloudEndureRecoveryPlanList.md) -- [CloudEndureRecoveryPlanStep](CloudEndureRecoveryPlanStep.md) -- [CloudEndureRecoveryPlanSteps](CloudEndureRecoveryPlanSteps.md) -- [CloudEndureRegion](CloudEndureRegion.md) -- [CloudEndureRegionsList](CloudEndureRegionsList.md) -- [CloudEndureReplica](CloudEndureReplica.md) -- [CloudEndureReplicationConfiguration](CloudEndureReplicationConfiguration.md) -- [CloudEndureReplicationConfigurationList](CloudEndureReplicationConfigurationList.md) -- [CloudEndureReplicationServerConfig](CloudEndureReplicationServerConfig.md) -- [CloudEndureRestoreFilesParameters](CloudEndureRestoreFilesParameters.md) -- [CloudEndureSamlSettings](CloudEndureSamlSettings.md) -- [CloudEndureSecurityGroup](CloudEndureSecurityGroup.md) -- [CloudEndureStorageLocation](CloudEndureStorageLocation.md) -- [CloudEndureSubnet](CloudEndureSubnet.md) -- [CloudEndureTime](CloudEndureTime.md) -- [CloudEndureUpdateableScripts](CloudEndureUpdateableScripts.md) -- [CloudEndureUpgradeCounterDelay](CloudEndureUpgradeCounterDelay.md) -- [CloudEndureUsage](CloudEndureUsage.md) -- [CloudEndureUsageList](CloudEndureUsageList.md) -- [CloudEndureUser](CloudEndureUser.md) -- [CloudEndureUserReport](CloudEndureUserReport.md) -- [CloudEndureUserReports](CloudEndureUserReports.md) -- [CloudEndureUsersAndRoles](CloudEndureUsersAndRoles.md) -- [CloudEndureUsersList](CloudEndureUsersList.md) -- [CloudEndureVCenterSubnet](CloudEndureVCenterSubnet.md) - -## Documentation For Authorization - - All endpoints do not require authorization. diff --git a/docs/Account.md b/docs/Account.md new file mode 100644 index 000000000..d60f5efa5 --- /dev/null +++ b/docs/Account.md @@ -0,0 +1,27 @@ +# Account + +Contains the account identifier which is referenced by other resources, as well as feature information for the account. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**target_credentials_api** | **bool** | used to enable targetCloudCredentials. This API should be replaced soon. | [optional] +**allow_archiving_default_value** | **bool** | | [optional] +**per_account_user_pool** | **bool** | | [optional] +**default_license_type** | **str** | | [optional] [readonly] +**is_med_one** | **bool** | | [optional] +**id** | **str** | UUID of the account | [optional] [readonly] +**invite_token_expiry_minutes** | **int** | | [optional] +**is_gcp_self_service** | **bool** | | [optional] [readonly] +**is_dr_trial** | **bool** | | [optional] [readonly] +**is_arm_self_service** | **bool** | | [optional] [readonly] +**is_aws_self_service** | **bool** | | [optional] [readonly] +**saml_settings** | [**SamlSettings**](SamlSettings.md) | | [optional] +**is_right_sizing_enabled** | **bool** | | [optional] +**max_projects_allowed** | **int** | | [optional] +**ce_admin_properties** | [**AccountCeAdminProperties**](AccountCeAdminProperties.md) | | [optional] +**owner_id** | **str** | Account Owner (a User) | [optional] +**creation_datetime** | **datetime** | Date and time in which account was created | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/AccountApi.md b/docs/AccountApi.md index ef52d20f4..d20e43c41 100644 --- a/docs/AccountApi.md +++ b/docs/AccountApi.md @@ -1,4 +1,4 @@ -# cloudendure.cloudendure_api.AccountApi +# cloudendure.AccountApi All URIs are relative to *https://console.cloudendure.com/api/latest* @@ -6,35 +6,40 @@ Method | HTTP request | Description ------------- | ------------- | ------------- [**accounts_account_id_get**](AccountApi.md#accounts_account_id_get) | **GET** /accounts/{accountId} | Get Account information -## **accounts_account_id_get** -> CloudEndureAccount accounts_account_id_get(account_id) +# **accounts_account_id_get** +> Account accounts_account_id_get(account_id) Get Account information ### Example ```python -from __future__ import print_function - import time - +import cloudendure +from cloudendure.api import account_api +from cloudendure.model.account import Account from pprint import pprint - -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException - - -# create an instance of the API class -api_instance = cloudendure_api.AccountApi() -account_id = 'account_id_example' # str | - -try: - # Get Account information - api_response = api_instance.accounts_account_id_get(account_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling AccountApi->accounts_account_id_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = account_api.AccountApi(api_client) + account_id = "accountId_example" # str | + + # example passing only required values which don't have defaults set + try: + # Get Account information + api_response = api_instance.accounts_account_id_get(account_id) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling AccountApi->accounts_account_id_get: %s\n" % e) ``` ### Parameters @@ -45,7 +50,7 @@ Name | Type | Description | Notes ### Return type -[**CloudEndureAccount**](CloudEndureAccount.md) +[**Account**](Account.md) ### Authorization @@ -56,5 +61,10 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information successfully retrieved. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/docs/AccountCeAdminProperties.md b/docs/AccountCeAdminProperties.md new file mode 100644 index 000000000..4a2e2beae --- /dev/null +++ b/docs/AccountCeAdminProperties.md @@ -0,0 +1,16 @@ +# AccountCeAdminProperties + +For internal use. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**state** | **str** | | [optional] +**version** | **str** | | [optional] +**account_owner_username** | **str** | | [optional] +**apis_per_minute** | **int** | | [optional] +**comments** | **str** | | [optional] +**history** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/AccountLink.md b/docs/AccountLink.md new file mode 100644 index 000000000..354975a3a --- /dev/null +++ b/docs/AccountLink.md @@ -0,0 +1,13 @@ +# AccountLink + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**request_type** | **str** | | [optional] +**email** | **str** | | [optional] +**request_link** | **str** | | [optional] [readonly] +**account_uuid** | **str** | | [optional] [readonly] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/AccountLinkList.md b/docs/AccountLinkList.md new file mode 100644 index 000000000..41a2e9b36 --- /dev/null +++ b/docs/AccountLinkList.md @@ -0,0 +1,11 @@ +# AccountLinkList + +A collection of AccountLink objects. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[AccountLink]**](AccountLink.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/AccountRequest.md b/docs/AccountRequest.md new file mode 100644 index 000000000..1f43034c6 --- /dev/null +++ b/docs/AccountRequest.md @@ -0,0 +1,17 @@ +# AccountRequest + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**request_link** | **str** | | [optional] [readonly] +**validation_token** | **str** | | [optional] +**flow** | **str** | | [optional] if omitted the server will use the default value of "MIGRATION_REGISTER" +**email** | **str** | | [optional] +**request_type** | **str** | | [optional] +**registration_token** | **str** | | [optional] +**password** | **str** | | [optional] +**id** | **str** | | [optional] [readonly] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/AccountRequestList.md b/docs/AccountRequestList.md new file mode 100644 index 000000000..1c3b94911 --- /dev/null +++ b/docs/AccountRequestList.md @@ -0,0 +1,11 @@ +# AccountRequestList + +A collection of AccountRequest objects. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[AccountRequest]**](AccountRequest.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/AccountsList.md b/docs/AccountsList.md new file mode 100644 index 000000000..37b183234 --- /dev/null +++ b/docs/AccountsList.md @@ -0,0 +1,11 @@ +# AccountsList + +Accounts list +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[Account]**](Account.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ActionsApi.md b/docs/ActionsApi.md index 293bdcc8f..57653fa22 100644 --- a/docs/ActionsApi.md +++ b/docs/ActionsApi.md @@ -1,97 +1,66 @@ -# cloudendure_api.ActionsApi +# cloudendure.ActionsApi All URIs are relative to *https://console.cloudendure.com/api/latest* Method | HTTP request | Description ------------- | ------------- | ------------- -[**projects_project_id_find_files_post**](ActionsApi.md#projects_project_id_find_files_post) | **POST** /projects/{projectId}/findFiles | Search for files in a backup project [**projects_project_id_jobs_get**](ActionsApi.md#projects_project_id_jobs_get) | **GET** /projects/{projectId}/jobs | List Jobs [**projects_project_id_jobs_job_id_get**](ActionsApi.md#projects_project_id_jobs_job_id_get) | **GET** /projects/{projectId}/jobs/{jobId} | Get Job [**projects_project_id_launch_machines_post**](ActionsApi.md#projects_project_id_launch_machines_post) | **POST** /projects/{projectId}/launchMachines | Launch target machines -[**projects_project_id_launch_restore_servers_post**](ActionsApi.md#projects_project_id_launch_restore_servers_post) | **POST** /projects/{projectId}/launchRestoreServers | Launch restore servers @todo [**projects_project_id_move_machines_post**](ActionsApi.md#projects_project_id_move_machines_post) | **POST** /projects/{projectId}/moveMachines | Moves machines to another project [**projects_project_id_pause_replication_post**](ActionsApi.md#projects_project_id_pause_replication_post) | **POST** /projects/{projectId}/pauseReplication | Pause replication [**projects_project_id_replicas_delete**](ActionsApi.md#projects_project_id_replicas_delete) | **DELETE** /projects/{projectId}/replicas | Perform Cleanup -[**projects_project_id_restore_files_post**](ActionsApi.md#projects_project_id_restore_files_post) | **POST** /projects/{projectId}/restoreFiles | Restore selected files in a backup project [**projects_project_id_reverse_replication_post**](ActionsApi.md#projects_project_id_reverse_replication_post) | **POST** /projects/{projectId}/reverseReplication | Reverse replication direction [**projects_project_id_start_replication_post**](ActionsApi.md#projects_project_id_start_replication_post) | **POST** /projects/{projectId}/startReplication | Start replication [**projects_project_id_stop_replication_post**](ActionsApi.md#projects_project_id_stop_replication_post) | **POST** /projects/{projectId}/stopReplication | Stop replication -# **projects_project_id_find_files_post** -> CloudEndureFindFilesResults projects_project_id_find_files_post(body, project_id) - -Search for files in a backup project - -### Example -```python -from __future__ import print_function -import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ActionsApi() -body = cloudendure_api.CloudEndureFindFilesParameters() # CloudEndureFindFilesParameters | The query string and the machine id's to use it in -project_id = 'project_id_example' # str | - -try: - # Search for files in a backup project - api_response = api_instance.projects_project_id_find_files_post(body, project_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling ActionsApi->projects_project_id_find_files_post: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **body** | [**CloudEndureFindFilesParameters**](CloudEndureFindFilesParameters.md)| The query string and the machine id's to use it in | - **project_id** | **str**| | - -### Return type - -[**CloudEndureFindFilesResults**](CloudEndureFindFilesResults.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: application/json - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) # **projects_project_id_jobs_get** -> CloudEndureJobsList projects_project_id_jobs_get(project_id, offset=offset, limit=limit) +> JobsList projects_project_id_jobs_get(project_id) List Jobs Returns the list of jobs in the project. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import actions_api +from cloudendure.model.jobs_list import JobsList from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ActionsApi() -project_id = 'project_id_example' # str | -offset = 56 # int | With which item to start (0 based). (optional) -limit = 56 # int | A number specifying how many entries to return. (optional) - -try: - # List Jobs - api_response = api_instance.projects_project_id_jobs_get(project_id, offset=offset, limit=limit) - pprint(api_response) -except ApiException as e: - print("Exception when calling ActionsApi->projects_project_id_jobs_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = actions_api.ActionsApi(api_client) + project_id = "projectId_example" # str | + offset = 0 # int | With which item to start (0 based). (optional) if omitted the server will use the default value of 0 + limit = 1500 # int | A number specifying how many entries to return. (optional) if omitted the server will use the default value of 1500 + + # example passing only required values which don't have defaults set + try: + # List Jobs + api_response = api_instance.projects_project_id_jobs_get(project_id) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling ActionsApi->projects_project_id_jobs_get: %s\n" % e) + + # example passing only required values which don't have defaults set + # and optional values + try: + # List Jobs + api_response = api_instance.projects_project_id_jobs_get(project_id, offset=offset, limit=limit) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling ActionsApi->projects_project_id_jobs_get: %s\n" % e) ``` ### Parameters @@ -99,12 +68,12 @@ except ApiException as e: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **project_id** | **str**| | - **offset** | **int**| With which item to start (0 based). | [optional] - **limit** | **int**| A number specifying how many entries to return. | [optional] + **offset** | **int**| With which item to start (0 based). | [optional] if omitted the server will use the default value of 0 + **limit** | **int**| A number specifying how many entries to return. | [optional] if omitted the server will use the default value of 1500 ### Return type -[**CloudEndureJobsList**](CloudEndureJobsList.md) +[**JobsList**](JobsList.md) ### Authorization @@ -115,32 +84,47 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information retrieved successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_jobs_job_id_get** -> CloudEndureJob projects_project_id_jobs_job_id_get(project_id, job_id) +> Job projects_project_id_jobs_job_id_get(project_id, job_id) Get Job ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import actions_api +from cloudendure.model.job import Job from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ActionsApi() -project_id = 'project_id_example' # str | -job_id = 'job_id_example' # str | - -try: - # Get Job - api_response = api_instance.projects_project_id_jobs_job_id_get(project_id, job_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling ActionsApi->projects_project_id_jobs_job_id_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = actions_api.ActionsApi(api_client) + project_id = "projectId_example" # str | + job_id = "jobId_example" # str | + + # example passing only required values which don't have defaults set + try: + # Get Job + api_response = api_instance.projects_project_id_jobs_job_id_get(project_id, job_id) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling ActionsApi->projects_project_id_jobs_job_id_get: %s\n" % e) ``` ### Parameters @@ -152,7 +136,7 @@ Name | Type | Description | Notes ### Return type -[**CloudEndureJob**](CloudEndureJob.md) +[**Job**](Job.md) ### Authorization @@ -163,96 +147,79 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information retrieved successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_launch_machines_post** -> CloudEndureJob projects_project_id_launch_machines_post(body, project_id) +> Job projects_project_id_launch_machines_post(project_id, launch_machines) Launch target machines Launch target machines for test, recovery or cutover (by passing enum value to launchType param) ### Example -```python -from __future__ import print_function -import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ActionsApi() -body = cloudendure_api.CloudEndureLaunchMachinesParameters() # CloudEndureLaunchMachinesParameters | Machines to launch -project_id = 'project_id_example' # str | - -try: - # Launch target machines - api_response = api_instance.projects_project_id_launch_machines_post(body, project_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling ActionsApi->projects_project_id_launch_machines_post: %s\n" % e) -``` -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **body** | [**CloudEndureLaunchMachinesParameters**](CloudEndureLaunchMachinesParameters.md)| Machines to launch | - **project_id** | **str**| | - -### Return type - -[**CloudEndureJob**](CloudEndureJob.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: application/json - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) - -# **projects_project_id_launch_restore_servers_post** -> CloudEndureJob projects_project_id_launch_restore_servers_post(body, project_id) - -Launch restore servers @todo - -todo - -### Example ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import actions_api +from cloudendure.model.job import Job +from cloudendure.model.launch_machines_parameters import LaunchMachinesParameters +from cloudendure.model.error import Error from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ActionsApi() -body = cloudendure_api.CloudEndureLaunchMachinesParameters() # CloudEndureLaunchMachinesParameters | todo -project_id = 'project_id_example' # str | - -try: - # Launch restore servers @todo - api_response = api_instance.projects_project_id_launch_restore_servers_post(body, project_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling ActionsApi->projects_project_id_launch_restore_servers_post: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = actions_api.ActionsApi(api_client) + project_id = "projectId_example" # str | + launch_machines = LaunchMachinesParameters( + items=[ + MachineAndPointInTime( + machine_id="machine_id_example", + point_in_time_id="point_in_time_id_example", + ), + ], + launch_type="TEST", + debug_scripts=LaunchMachinesParametersDebugScripts( + postboot=[ + "postboot_example", + ], + preboot=[ + "preboot_example", + ], + ), + ) # LaunchMachinesParameters | Machines to launch + + # example passing only required values which don't have defaults set + try: + # Launch target machines + api_response = api_instance.projects_project_id_launch_machines_post(project_id, launch_machines) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling ActionsApi->projects_project_id_launch_machines_post: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**CloudEndureLaunchMachinesParameters**](CloudEndureLaunchMachinesParameters.md)| todo | **project_id** | **str**| | + **launch_machines** | [**LaunchMachinesParameters**](LaunchMachinesParameters.md)| Machines to launch | ### Return type -[**CloudEndureJob**](CloudEndureJob.md) +[**Job**](Job.md) ### Authorization @@ -263,41 +230,64 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**202** | Test job created. | - | +**400** | Another job is already running in this project. | - | +**402** | Project license has expired. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_move_machines_post** -> projects_project_id_move_machines_post(body, project_id) +> projects_project_id_move_machines_post(project_id, move_machines_params) Moves machines to another project -TBC +TBC ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import actions_api +from cloudendure.model.inline_object4 import InlineObject4 +from cloudendure.model.error import Error from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ActionsApi() -body = NULL # object | -project_id = 'project_id_example' # str | - -try: - # Moves machines to another project - api_instance.projects_project_id_move_machines_post(body, project_id) -except ApiException as e: - print("Exception when calling ActionsApi->projects_project_id_move_machines_post: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = actions_api.ActionsApi(api_client) + project_id = "projectId_example" # str | + move_machines_params = InlineObject4( + machine_ids=[ + "machine_ids_example", + ], + destination_project_id="destination_project_id_example", + ) # InlineObject4 | + + # example passing only required values which don't have defaults set + try: + # Moves machines to another project + api_instance.projects_project_id_move_machines_post(project_id, move_machines_params) + except cloudendure.ApiException as e: + print("Exception when calling ActionsApi->projects_project_id_move_machines_post: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**object**](object.md)| | **project_id** | **str**| | + **move_machines_params** | [**InlineObject4**](InlineObject4.md)| | ### Return type @@ -312,46 +302,68 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Machines moved successfully | - | +**404** | A machine or project not found in Account | - | +**409** | Machines could not be moved due to conflict | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_pause_replication_post** -> CloudEndureMachinesListInvalidIDsAndJob projects_project_id_pause_replication_post(body, project_id) +> MachinesListInvalidIDsAndJob projects_project_id_pause_replication_post(project_id, machine_ids) Pause replication Pause replication for given machines ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import actions_api +from cloudendure.model.machines_list_invalid_ids_and_job import MachinesListInvalidIDsAndJob +from cloudendure.model.inline_object9 import InlineObject9 from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ActionsApi() -body = NULL # object | The machine IDs for which to pause replication. -project_id = 'project_id_example' # str | - -try: - # Pause replication - api_response = api_instance.projects_project_id_pause_replication_post(body, project_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling ActionsApi->projects_project_id_pause_replication_post: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = actions_api.ActionsApi(api_client) + project_id = "projectId_example" # str | + machine_ids = InlineObject9( + machine_ids=[ + "machine_ids_example", + ], + ) # InlineObject9 | + + # example passing only required values which don't have defaults set + try: + # Pause replication + api_response = api_instance.projects_project_id_pause_replication_post(project_id, machine_ids) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling ActionsApi->projects_project_id_pause_replication_post: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**object**](object.md)| The machine IDs for which to pause replication. | **project_id** | **str**| | + **machine_ids** | [**InlineObject9**](InlineObject9.md)| | ### Return type -[**CloudEndureMachinesListInvalidIDsAndJob**](CloudEndureMachinesListInvalidIDsAndJob.md) +[**MachinesListInvalidIDsAndJob**](MachinesListInvalidIDsAndJob.md) ### Authorization @@ -362,94 +374,67 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_replicas_delete** -> CloudEndureJob projects_project_id_replicas_delete(body, project_id) +> Job projects_project_id_replicas_delete(project_id, replica_ids) Perform Cleanup Spawns a cleanup job to remove the specified target machines from the cloud. Returns the job information. ### Example -```python -from __future__ import print_function -import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ActionsApi() -body = NULL # object | The list of replica IDs to delete (corresponding to the 'replica' field in the machine object. -project_id = 'project_id_example' # str | - -try: - # Perform Cleanup - api_response = api_instance.projects_project_id_replicas_delete(body, project_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling ActionsApi->projects_project_id_replicas_delete: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **body** | [**object**](object.md)| The list of replica IDs to delete (corresponding to the 'replica' field in the machine object. | - **project_id** | **str**| | - -### Return type - -[**CloudEndureJob**](CloudEndureJob.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: application/json - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) - -# **projects_project_id_restore_files_post** -> CloudEndureJob projects_project_id_restore_files_post(body, project_id) - -Restore selected files in a backup project -### Example ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import actions_api +from cloudendure.model.job import Job +from cloudendure.model.inline_object5 import InlineObject5 +from cloudendure.model.error import Error from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ActionsApi() -body = cloudendure_api.CloudEndureRestoreFilesParameters() # CloudEndureRestoreFilesParameters | A list of file origins, each origin includes file path, machine id, and pit id. -project_id = 'project_id_example' # str | - -try: - # Restore selected files in a backup project - api_response = api_instance.projects_project_id_restore_files_post(body, project_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling ActionsApi->projects_project_id_restore_files_post: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = actions_api.ActionsApi(api_client) + project_id = "projectId_example" # str | + replica_ids = InlineObject5( + replica_ids=[ + "replica_ids_example", + ], + ) # InlineObject5 | + + # example passing only required values which don't have defaults set + try: + # Perform Cleanup + api_response = api_instance.projects_project_id_replicas_delete(project_id, replica_ids) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling ActionsApi->projects_project_id_replicas_delete: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**CloudEndureRestoreFilesParameters**](CloudEndureRestoreFilesParameters.md)| A list of file origins, each origin includes file path, machine id, and pit id. | **project_id** | **str**| | + **replica_ids** | [**InlineObject5**](InlineObject5.md)| | ### Return type -[**CloudEndureJob**](CloudEndureJob.md) +[**Job**](Job.md) ### Authorization @@ -460,7 +445,13 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**202** | Cleanup job created. | - | +**400** | Another job is already running in this project. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_reverse_replication_post** > projects_project_id_reverse_replication_post(project_id) @@ -468,22 +459,32 @@ No authorization required Reverse replication direction ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import actions_api +from cloudendure.model.error import Error from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ActionsApi() -project_id = 'project_id_example' # str | - -try: - # Reverse replication direction - api_instance.projects_project_id_reverse_replication_post(project_id) -except ApiException as e: - print("Exception when calling ActionsApi->projects_project_id_reverse_replication_post: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = actions_api.ActionsApi(api_client) + project_id = "projectId_example" # str | + + # example passing only required values which don't have defaults set + try: + # Reverse replication direction + api_instance.projects_project_id_reverse_replication_post(project_id) + except cloudendure.ApiException as e: + print("Exception when calling ActionsApi->projects_project_id_reverse_replication_post: %s\n" % e) ``` ### Parameters @@ -505,46 +506,68 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**400** | A job is running. | - | +**422** | Project cannot be reversed. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_start_replication_post** -> CloudEndureMachinesListInvalidIDsAndJob projects_project_id_start_replication_post(body, project_id) +> MachinesListInvalidIDsAndJob projects_project_id_start_replication_post(project_id, machine_ids) Start replication Start replication of the specified source machines. Returns the machine for which replication has been successfully started, and the IDs for which replication could not be started. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import actions_api +from cloudendure.model.machines_list_invalid_ids_and_job import MachinesListInvalidIDsAndJob +from cloudendure.model.inline_object3 import InlineObject3 from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ActionsApi() -body = NULL # object | Specification of the machines for which replication will start. -project_id = 'project_id_example' # str | - -try: - # Start replication - api_response = api_instance.projects_project_id_start_replication_post(body, project_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling ActionsApi->projects_project_id_start_replication_post: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = actions_api.ActionsApi(api_client) + project_id = "projectId_example" # str | + machine_ids = InlineObject3( + machine_ids=[ + "machine_ids_example", + ], + ) # InlineObject3 | + + # example passing only required values which don't have defaults set + try: + # Start replication + api_response = api_instance.projects_project_id_start_replication_post(project_id, machine_ids) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling ActionsApi->projects_project_id_start_replication_post: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**object**](object.md)| Specification of the machines for which replication will start. | **project_id** | **str**| | + **machine_ids** | [**InlineObject3**](InlineObject3.md)| | ### Return type -[**CloudEndureMachinesListInvalidIDsAndJob**](CloudEndureMachinesListInvalidIDsAndJob.md) +[**MachinesListInvalidIDsAndJob**](MachinesListInvalidIDsAndJob.md) ### Authorization @@ -555,46 +578,68 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Request acknowledged. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_stop_replication_post** -> CloudEndureMachinesListInvalidIDsAndJob projects_project_id_stop_replication_post(body, project_id) +> MachinesListInvalidIDsAndJob projects_project_id_stop_replication_post(project_id, machine_ids) Stop replication Stop replication of the specified source machines. Returns the machine for which replication has been successfully stopped, and the IDs for which replication could not be stopped. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import actions_api +from cloudendure.model.inline_object7 import InlineObject7 +from cloudendure.model.machines_list_invalid_ids_and_job import MachinesListInvalidIDsAndJob +from cloudendure.model.error import Error from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ActionsApi() -body = NULL # object | Specification of the machines for which replication will stop. -project_id = 'project_id_example' # str | - -try: - # Stop replication - api_response = api_instance.projects_project_id_stop_replication_post(body, project_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling ActionsApi->projects_project_id_stop_replication_post: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = actions_api.ActionsApi(api_client) + project_id = "projectId_example" # str | + machine_ids = InlineObject7( + machine_ids=[ + "machine_ids_example", + ], + move_vmdks=True, + ) # InlineObject7 | + + # example passing only required values which don't have defaults set + try: + # Stop replication + api_response = api_instance.projects_project_id_stop_replication_post(project_id, machine_ids) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling ActionsApi->projects_project_id_stop_replication_post: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**object**](object.md)| Specification of the machines for which replication will stop. | **project_id** | **str**| | + **machine_ids** | [**InlineObject7**](InlineObject7.md)| | ### Return type -[**CloudEndureMachinesListInvalidIDsAndJob**](CloudEndureMachinesListInvalidIDsAndJob.md) +[**MachinesListInvalidIDsAndJob**](MachinesListInvalidIDsAndJob.md) ### Authorization @@ -605,5 +650,12 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Request acknowledged. | - | +**409** | Another job is already running in this project. | - | +**429** | Too many jobs are running for this project. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/docs/AgentNextReplicationInitRequest.md b/docs/AgentNextReplicationInitRequest.md new file mode 100644 index 000000000..e83507909 --- /dev/null +++ b/docs/AgentNextReplicationInitRequest.md @@ -0,0 +1,10 @@ +# AgentNextReplicationInitRequest + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**duration_from_now** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/AllProjectFeatures.md b/docs/AllProjectFeatures.md new file mode 100644 index 000000000..9a3f843bb --- /dev/null +++ b/docs/AllProjectFeatures.md @@ -0,0 +1,50 @@ +# AllProjectFeatures + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**google** | **bool** | | [optional] +**no_public_ips** | **bool** | | [optional] +**enable_ubuntu18_converter** | **bool** | | [optional] +**windows_converters** | **bool** | | [optional] +**force_reversed_handshake_direction** | **bool** | | [optional] +**no_converters** | **bool** | | [optional] +**vio** | **bool** | | [optional] +**aws_pending_snapshots_for_consistent_snapshot** | **int** | | [optional] +**no_cloud** | **bool** | | [optional] +**consistent_snapshot_creation_interval_min** | **int** | | [optional] +**is_demo** | **bool** | | [optional] +**mtu_size** | **int** | | [optional] +**allow_byol_on_dedicated_instance** | **bool** | | [optional] +**force_no_rescan_after_reboot** | **bool** | | [optional] +**max_converter_volumes** | **int** | | [optional] +**azurearm** | **bool** | | [optional] +**vcenter** | **bool** | | [optional] +**allowed_az_ids** | **str** | | [optional] +**subnet_filter** | **str** | | [optional] +**disable_target_region_cleanup_protection** | **bool** | | [optional] +**no_snapshot_considered_lag_milliseconds** | **int** | | [optional] +**aws_pending_snapshots_for_disconnection** | **int** | | [optional] +**no_converters_windows** | **bool** | | [optional] +**disable_replica_creation** | **bool** | | [optional] +**aws_pending_snapshots_for_consistency_lost** | **int** | | [optional] +**aws** | **bool** | | [optional] +**aws_pending_snapshots_for_inconsistent_snapshot** | **int** | | [optional] +**max_replicator_volumes** | **int** | | [optional] +**allow_recovery_plans** | **bool** | | [optional] +**snapshot_creation_interval_min** | **int** | | [optional] +**snapshot_on_demand_timeout** | **int** | | [optional] +**allow_archiving** | **bool** | | [optional] +**allow_no_rescan_after_reboot** | **bool** | | [optional] +**custom_replicator_instance_type** | **str** | | [optional] +**disable_snapshot_on_demand** | **bool** | | [optional] +**disable_install** | **bool** | | [optional] +**hdd** | **bool** | | [optional] +**snapshot_creation_interval_max** | **int** | | [optional] +**ce_admin_properties** | [**ProjectCeAdminProperties**](ProjectCeAdminProperties.md) | | [optional] +**azure** | **bool** | | [optional] +**aws_pending_snapshots_for_user_initiated** | **int** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/AuditLog.md b/docs/AuditLog.md new file mode 100644 index 000000000..40091dd69 --- /dev/null +++ b/docs/AuditLog.md @@ -0,0 +1,12 @@ +# AuditLog + +A collection of Audit Log entries. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[AuditLogEntry]**](AuditLogEntry.md) | | [optional] +**has_more_results** | **bool** | AuditLog API will only return max 1500 entries so this is a way to know if there are more. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/AuditLogChangedField.md b/docs/AuditLogChangedField.md new file mode 100644 index 000000000..7f228f050 --- /dev/null +++ b/docs/AuditLogChangedField.md @@ -0,0 +1,12 @@ +# AuditLogChangedField + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**field_name** | **str** | | [optional] +**new_value** | **str** | | [optional] +**old_value** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/AuditLogEntry.md b/docs/AuditLogEntry.md new file mode 100644 index 000000000..6e32746fd --- /dev/null +++ b/docs/AuditLogEntry.md @@ -0,0 +1,17 @@ +# AuditLogEntry + +A single entry in the audit log +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**username** | **str** | username (typically an email) of user who initiated action (in UI or via API) which resulted in this audit log entry being added. | [optional] +**event_name** | **str** | Unique event name. One of: - replicationConfigurationChanged - blueprintChanged | [optional] +**participating_machines** | [**[AuditLogEntryParticipatingMachines]**](AuditLogEntryParticipatingMachines.md) | List of machine-identifiers objects. Only present if Audit Log entry relates to one or more machines. | [optional] +**description** | **str** | Long-form human-readable description of Audit Log entry. | [optional] +**changed_fields** | [**[AuditLogChangedField]**](AuditLogChangedField.md) | Map of fields that have been changed and their old an new values. Only present when eventName is replicationConfigurationChanged or blueprintChanged | [optional] +**timestamp** | **datetime** | RFC 3339 compliant date-time string of when Audit Log entry was created/ event described by audit log entry happened. | [optional] +**job_id** | **str** | ID of Job due to which this log entry was created (only included if log entry is result of a Job) | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/AuditLogEntryParticipatingMachines.md b/docs/AuditLogEntryParticipatingMachines.md new file mode 100644 index 000000000..846e69c8b --- /dev/null +++ b/docs/AuditLogEntryParticipatingMachines.md @@ -0,0 +1,12 @@ +# AuditLogEntryParticipatingMachines + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**machine_cloud_endure_id** | **str** | | [optional] +**machine_cloud_name** | **str** | Only present when machine has been given a name in the cloud in which it exists. | [optional] +**machine_cloud_id** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/AuthenticationApi.md b/docs/AuthenticationApi.md index 74949eeaf..9583ef679 100644 --- a/docs/AuthenticationApi.md +++ b/docs/AuthenticationApi.md @@ -1,4 +1,4 @@ -# cloudendure_api.AuthenticationApi +# cloudendure.AuthenticationApi All URIs are relative to *https://console.cloudendure.com/api/latest* @@ -7,42 +7,63 @@ Method | HTTP request | Description [**login_post**](AuthenticationApi.md#login_post) | **POST** /login | Login [**logout_post**](AuthenticationApi.md#logout_post) | **POST** /logout | Logout + # **login_post** -> CloudEndureUser login_post(body) +> User login_post(login_info) Login -@todo: fix re use of XSRF-TOKEN cookie + X-XSRF-TOKEN header Upon successful authentication, this method returns a session identifier cookie that can be used to authenticate subsequent API calls. +Upon successful authentication, this method returns a session identifier cookie that can be used to authenticate subsequent API calls. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import authentication_api +from cloudendure.model.inline_object1 import InlineObject1 +from cloudendure.model.error import Error +from cloudendure.model.user import User from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.AuthenticationApi() -body = NULL # object | Login info - -try: - # Login - api_response = api_instance.login_post(body) - pprint(api_response) -except ApiException as e: - print("Exception when calling AuthenticationApi->login_post: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = authentication_api.AuthenticationApi(api_client) + login_info = InlineObject1( + username="username_example", + login_token="login_token_example", + user_api_token="user_api_token_example", + agent_installation_token="agent_installation_token_example", + password="password_example", + account_identifier="account_identifier_example", + google_oauth_code="google_oauth_code_example", + ) # InlineObject1 | + + # example passing only required values which don't have defaults set + try: + # Login + api_response = api_instance.login_post(login_info) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling AuthenticationApi->login_post: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**object**](object.md)| Login info | + **login_info** | [**InlineObject1**](InlineObject1.md)| | ### Return type -[**CloudEndureUser**](CloudEndureUser.md) +[**User**](User.md) ### Authorization @@ -53,7 +74,16 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Login successful. | - | +**307** | A different endpoint is required to service this user. A redirect address is provided to where subsequent calls should go. | - | +**401** | The login credentials provided cannot be authenticated. | - | +**402** | There is no active license configured for this account (A license must be purchased or extended). | - | +**429** | Authentication failure limit has been reached. The service will become available for additional requests after a timeout. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **logout_post** > logout_post() @@ -63,21 +93,30 @@ Logout Invalidates the session identifier associated with this session. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import authentication_api from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.AuthenticationApi() - -try: - # Logout - api_instance.logout_post() -except ApiException as e: - print("Exception when calling AuthenticationApi->logout_post: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = authentication_api.AuthenticationApi(api_client) + + # example, this endpoint has no required or optional parameters + try: + # Logout + api_instance.logout_post() + except cloudendure.ApiException as e: + print("Exception when calling AuthenticationApi->logout_post: %s\n" % e) ``` ### Parameters @@ -96,5 +135,10 @@ No authorization required - **Content-Type**: Not defined - **Accept**: Not defined -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Logout successful. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/docs/BandwidthThrottling.md b/docs/BandwidthThrottling.md new file mode 100644 index 000000000..0b4f43c93 --- /dev/null +++ b/docs/BandwidthThrottling.md @@ -0,0 +1,10 @@ +# BandwidthThrottling + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**bandwidth_throttling** | **int** | Mbps to use for Data Replication (zero means no throttling). | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Blueprint.md b/docs/Blueprint.md new file mode 100644 index 000000000..05b6d98d4 --- /dev/null +++ b/docs/Blueprint.md @@ -0,0 +1,45 @@ +# Blueprint + +Target machine characteristics: machine and disk types, network configuration, etc. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**iam_role** | **str** | AWS only. Possible values can be fetched from the Region object. | [optional] +**scsi_adapter_type** | **str** | Currently relevant for vCenter cloud only. Possible values can be fetched from the Region object. | [optional] +**public_ip_action** | **str** | Whether to allocate an ephemeral public IP, or not. AS_SUBNET causes CloudEndure to copy this property from the source machine. | [optional] +**machine_name** | **str** | | [optional] +**cpus** | **int** | Number of CPUs per per Target machine; Currently relevant for vCenter cloud only; Max value can be fetched from the maxCpusPerMachine property of the Region object. | [optional] +**security_group_ids** | **[str]** | AWS only. The security groups that will be applied to the target machine. Possible values can be fetched from the Region object. | [optional] +**run_after_launch** | **bool** | AWS only. Whether to power on the launched target machine after launch. True by default. | [optional] +**recommended_private_ip** | **str** | The private IP address recommended for use with this machine. | [optional] [readonly] +**instance_type** | **str** | Possible values can be fetched from the Region object, plus special values \"COPY_ORIGIN\" or \"CUSTOM\" | [optional] +**mb_ram** | **int** | MB RAM per Target machine; Currently relevant for vCenter cloud only; Max value can be fetched from the maxMbRamPerMachine property of the Region object. | [optional] +**network_interface** | **str** | | [optional] +**subnet_ids** | **[str]** | AWS only. Configures a subnets in which the instance network interface will take part. Possible values can be fetched from the Region object. | [optional] +**cores_per_cpu** | **int** | Number of CPU cores per CPU in Target machine; Currently relevant for vCenter cloud only. | [optional] +**recommended_instance_type** | **str** | When instance rightsizing is enabled, the instance type suitable for the source machine's HW | [optional] [readonly] +**force_uefi** | **bool** | | [optional] +**static_ip** | **str** | Possible values can be fetched from the Region object. | [optional] +**launch_on_instance_id** | **str** | instance id for target machine managed by AMS. | [optional] +**tags** | [**[ReplicationConfigurationReplicationTags]**](ReplicationConfigurationReplicationTags.md) | AWS only. Tags that will be applied to the target machine. | [optional] +**security_group_action** | **str** | How to assign a security group to the target machine. | [optional] if omitted the server will use the default value of "FROM_POLICY" +**private_ips** | **[str]** | | [optional] +**tenancy** | **str** | | [optional] +**compute_location_id** | **str** | | [optional] +**subnets_host_project** | **str** | GCP only. Host project for cross project network subnet. | [optional] +**logical_location_id** | **str** | vcenter = vmFolder; relates to $ref LogicalLocation | [optional] +**network_adapter_type** | **str** | Currently relevant for vCenter cloud only. Possible values can be fetched from the Region object. | [optional] +**byol_on_dedicated_instance** | **bool** | specifies whether to use byol windows license if dedicated instance tenancy is selected. | [optional] +**placement_group** | **str** | AWS only. Possible values can be fetched from the Region object. | [optional] +**machine_id** | **str** | | [optional] [readonly] +**region** | **str** | | [optional] [readonly] +**disks** | [**[BlueprintDisks]**](BlueprintDisks.md) | AWS only. Target machine disk properties. | [optional] +**private_ip_action** | **str** | | [optional] +**static_ip_action** | **str** | | [optional] +**id** | **str** | | [optional] [readonly] +**dedicated_host_identifier** | **str** | | [optional] +**use_shared_ram** | **bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/BlueprintApi.md b/docs/BlueprintApi.md index bf8858fc5..84e070119 100644 --- a/docs/BlueprintApi.md +++ b/docs/BlueprintApi.md @@ -1,4 +1,4 @@ -# cloudendure_api.BlueprintApi +# cloudendure.BlueprintApi All URIs are relative to *https://console.cloudendure.com/api/latest* @@ -9,30 +9,41 @@ Method | HTTP request | Description [**projects_project_id_blueprints_get**](BlueprintApi.md#projects_project_id_blueprints_get) | **GET** /projects/{projectId}/blueprints | List Blueprints [**projects_project_id_blueprints_post**](BlueprintApi.md#projects_project_id_blueprints_post) | **POST** /projects/{projectId}/blueprints | Create Blueprint + # **projects_project_id_blueprints_blueprint_id_get** -> CloudEndureBlueprint projects_project_id_blueprints_blueprint_id_get(project_id, blueprint_id) +> Blueprint projects_project_id_blueprints_blueprint_id_get(project_id, blueprint_id) Get Blueprint ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import blueprint_api +from cloudendure.model.blueprint import Blueprint from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.BlueprintApi() -project_id = 'project_id_example' # str | -blueprint_id = 'blueprint_id_example' # str | - -try: - # Get Blueprint - api_response = api_instance.projects_project_id_blueprints_blueprint_id_get(project_id, blueprint_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling BlueprintApi->projects_project_id_blueprints_blueprint_id_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = blueprint_api.BlueprintApi(api_client) + project_id = "projectId_example" # str | + blueprint_id = "blueprintId_example" # str | + + # example passing only required values which don't have defaults set + try: + # Get Blueprint + api_response = api_instance.projects_project_id_blueprints_blueprint_id_get(project_id, blueprint_id) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling BlueprintApi->projects_project_id_blueprints_blueprint_id_get: %s\n" % e) ``` ### Parameters @@ -44,7 +55,7 @@ Name | Type | Description | Notes ### Return type -[**CloudEndureBlueprint**](CloudEndureBlueprint.md) +[**Blueprint**](Blueprint.md) ### Authorization @@ -55,48 +66,117 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information retrieved successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_blueprints_blueprint_id_patch** -> CloudEndureBlueprint projects_project_id_blueprints_blueprint_id_patch(body, project_id, blueprint_id) +> Blueprint projects_project_id_blueprints_blueprint_id_patch(project_id, blueprint_id, blueprint) Configure Blueprint Configure target machine characteristics: machine and disk types, network configuration, etc. Returns the modified object. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import blueprint_api +from cloudendure.model.blueprint import Blueprint from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.BlueprintApi() -body = cloudendure_api.CloudEndureBlueprint() # CloudEndureBlueprint | -project_id = 'project_id_example' # str | -blueprint_id = 'blueprint_id_example' # str | - -try: - # Configure Blueprint - api_response = api_instance.projects_project_id_blueprints_blueprint_id_patch(body, project_id, blueprint_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling BlueprintApi->projects_project_id_blueprints_blueprint_id_patch: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = blueprint_api.BlueprintApi(api_client) + project_id = "projectId_example" # str | + blueprint_id = "blueprintId_example" # str | + blueprint = Blueprint( + iam_role="iam_role_example", + scsi_adapter_type="scsi_adapter_type_example", + public_ip_action="ALLOCATE", + machine_name="machine_name_example", + cpus=1, + security_group_ids=[ + "security_group_ids_example", + ], + run_after_launch=True, + recommended_private_ip="recommended_private_ip_example", + instance_type="instance_type_example", + mb_ram=1, + network_interface="network_interface_example", + subnet_ids=[ + "subnet_ids_example", + ], + cores_per_cpu=1, + recommended_instance_type="recommended_instance_type_example", + force_uefi=True, + static_ip="static_ip_example", + launch_on_instance_id="launch_on_instance_id_example", + tags=[ + ReplicationConfigurationReplicationTags( + key="key_example", + value="value_example", + ), + ], + security_group_action="FROM_POLICY", + private_ips=[ + "private_ips_example", + ], + tenancy="SHARED", + compute_location_id="compute_location_id_example", + subnets_host_project="subnets_host_project_example", + logical_location_id="logical_location_id_example", + network_adapter_type="network_adapter_type_example", + byol_on_dedicated_instance=True, + placement_group="placement_group_example", + machine_id="machine_id_example", + region="region_example", + disks=[ + BlueprintDisks( + type="COPY_ORIGIN", + iops=0, + throughput=0, + name="name_example", + ), + ], + private_ip_action="CREATE_NEW", + static_ip_action="EXISTING", + id="id_example", + dedicated_host_identifier="dedicated_host_identifier_example", + use_shared_ram=True, + ) # Blueprint | + + # example passing only required values which don't have defaults set + try: + # Configure Blueprint + api_response = api_instance.projects_project_id_blueprints_blueprint_id_patch(project_id, blueprint_id, blueprint) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling BlueprintApi->projects_project_id_blueprints_blueprint_id_patch: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**CloudEndureBlueprint**](CloudEndureBlueprint.md)| | **project_id** | **str**| | **blueprint_id** | **str**| | + **blueprint** | [**Blueprint**](Blueprint.md)| | ### Return type -[**CloudEndureBlueprint**](CloudEndureBlueprint.md) +[**Blueprint**](Blueprint.md) ### Authorization @@ -107,35 +187,59 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Object updated successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_blueprints_get** -> CloudEndureBlueprintList projects_project_id_blueprints_get(project_id, offset=offset, limit=limit) +> BlueprintList projects_project_id_blueprints_get(project_id) List Blueprints Returns the list of available blueprints in the project. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import blueprint_api +from cloudendure.model.blueprint_list import BlueprintList from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.BlueprintApi() -project_id = 'project_id_example' # str | -offset = 56 # int | With which item to start (0 based). (optional) -limit = 56 # int | A number specifying how many entries to return. (optional) - -try: - # List Blueprints - api_response = api_instance.projects_project_id_blueprints_get(project_id, offset=offset, limit=limit) - pprint(api_response) -except ApiException as e: - print("Exception when calling BlueprintApi->projects_project_id_blueprints_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = blueprint_api.BlueprintApi(api_client) + project_id = "projectId_example" # str | + offset = 0 # int | With which item to start (0 based). (optional) if omitted the server will use the default value of 0 + limit = 1500 # int | A number specifying how many entries to return. (optional) if omitted the server will use the default value of 1500 + + # example passing only required values which don't have defaults set + try: + # List Blueprints + api_response = api_instance.projects_project_id_blueprints_get(project_id) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling BlueprintApi->projects_project_id_blueprints_get: %s\n" % e) + + # example passing only required values which don't have defaults set + # and optional values + try: + # List Blueprints + api_response = api_instance.projects_project_id_blueprints_get(project_id, offset=offset, limit=limit) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling BlueprintApi->projects_project_id_blueprints_get: %s\n" % e) ``` ### Parameters @@ -143,12 +247,12 @@ except ApiException as e: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **project_id** | **str**| | - **offset** | **int**| With which item to start (0 based). | [optional] - **limit** | **int**| A number specifying how many entries to return. | [optional] + **offset** | **int**| With which item to start (0 based). | [optional] if omitted the server will use the default value of 0 + **limit** | **int**| A number specifying how many entries to return. | [optional] if omitted the server will use the default value of 1500 ### Return type -[**CloudEndureBlueprintList**](CloudEndureBlueprintList.md) +[**BlueprintList**](BlueprintList.md) ### Authorization @@ -159,46 +263,115 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information retrieved successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_blueprints_post** -> CloudEndureBlueprint projects_project_id_blueprints_post(body, project_id) +> Blueprint projects_project_id_blueprints_post(project_id, blueprint) Create Blueprint Define the target machine characteristics: machine and disk types, network configuration, etc. There can be only one blueprint per machine per region. Returns the newly created object. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import blueprint_api +from cloudendure.model.blueprint import Blueprint from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.BlueprintApi() -body = cloudendure_api.CloudEndureBlueprint() # CloudEndureBlueprint | -project_id = 'project_id_example' # str | - -try: - # Create Blueprint - api_response = api_instance.projects_project_id_blueprints_post(body, project_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling BlueprintApi->projects_project_id_blueprints_post: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = blueprint_api.BlueprintApi(api_client) + project_id = "projectId_example" # str | + blueprint = Blueprint( + iam_role="iam_role_example", + scsi_adapter_type="scsi_adapter_type_example", + public_ip_action="ALLOCATE", + machine_name="machine_name_example", + cpus=1, + security_group_ids=[ + "security_group_ids_example", + ], + run_after_launch=True, + recommended_private_ip="recommended_private_ip_example", + instance_type="instance_type_example", + mb_ram=1, + network_interface="network_interface_example", + subnet_ids=[ + "subnet_ids_example", + ], + cores_per_cpu=1, + recommended_instance_type="recommended_instance_type_example", + force_uefi=True, + static_ip="static_ip_example", + launch_on_instance_id="launch_on_instance_id_example", + tags=[ + ReplicationConfigurationReplicationTags( + key="key_example", + value="value_example", + ), + ], + security_group_action="FROM_POLICY", + private_ips=[ + "private_ips_example", + ], + tenancy="SHARED", + compute_location_id="compute_location_id_example", + subnets_host_project="subnets_host_project_example", + logical_location_id="logical_location_id_example", + network_adapter_type="network_adapter_type_example", + byol_on_dedicated_instance=True, + placement_group="placement_group_example", + machine_id="machine_id_example", + region="region_example", + disks=[ + BlueprintDisks( + type="COPY_ORIGIN", + iops=0, + throughput=0, + name="name_example", + ), + ], + private_ip_action="CREATE_NEW", + static_ip_action="EXISTING", + id="id_example", + dedicated_host_identifier="dedicated_host_identifier_example", + use_shared_ram=True, + ) # Blueprint | + + # example passing only required values which don't have defaults set + try: + # Create Blueprint + api_response = api_instance.projects_project_id_blueprints_post(project_id, blueprint) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling BlueprintApi->projects_project_id_blueprints_post: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**CloudEndureBlueprint**](CloudEndureBlueprint.md)| | **project_id** | **str**| | + **blueprint** | [**Blueprint**](Blueprint.md)| | ### Return type -[**CloudEndureBlueprint**](CloudEndureBlueprint.md) +[**Blueprint**](Blueprint.md) ### Authorization @@ -209,5 +382,10 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**201** | New object successfully created. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/docs/BlueprintDisks.md b/docs/BlueprintDisks.md new file mode 100644 index 000000000..54f976006 --- /dev/null +++ b/docs/BlueprintDisks.md @@ -0,0 +1,13 @@ +# BlueprintDisks + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | **str** | The type of disk to allocate in the target machine. COPY_ORIGIN will use the source setting. | [optional] +**iops** | **int** | | [optional] +**throughput** | **int** | | [optional] +**name** | **str** | Disk name as appears in the source machine object. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/BlueprintList.md b/docs/BlueprintList.md new file mode 100644 index 000000000..066cde59e --- /dev/null +++ b/docs/BlueprintList.md @@ -0,0 +1,11 @@ +# BlueprintList + +A collection of Blueprint objects. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[Blueprint]**](Blueprint.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CSLPItem.md b/docs/CSLPItem.md new file mode 100644 index 000000000..028561d71 --- /dev/null +++ b/docs/CSLPItem.md @@ -0,0 +1,17 @@ +# CSLPItem + +defines CLSP (Conversion Scripts Live Patching) single script item 1-1 to DB item +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**live_patch_comment** | **str** | script live patch reason - like 'git comment' | [optional] +**ce_versions** | **[str]** | all management versions for this specific script content | [optional] +**live_patch_type** | **str** | type of the live patch in DB | [optional] +**script_text** | **str** | multi-line script text | [optional] +**sha256sum_orig** | **str** | SHA-256 of the not runnable script with 'constants.CE_DOMAIN_KEY' placeholder (empty CE DNS as stored in git source control) | [optional] +**script_name** | **str** | name relative to conversion_scripts sub-folder, eg. \"windows/postboot/setup_win_replica.bat\" | [optional] +**sha256sum** | **str** | SHA-256 of the runnable script with actual CE DNS replacing 'constants.CE_DOMAIN_KEY' | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CSLPRequest.md b/docs/CSLPRequest.md new file mode 100644 index 000000000..7c75d2662 --- /dev/null +++ b/docs/CSLPRequest.md @@ -0,0 +1,15 @@ +# CSLPRequest + +CLSP (Conversion Scripts Live Patching) 'post' operation request parameters +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**script_names** | **[str]** | list of names relative to conversion_scripts sub-folder as a query filter parameter | [optional] +**live_patch_comment** | **str** | script live patch reason - like 'git comment' | [optional] +**operation** | **str** | one of hard-coded labels in the CSLPOperation enum | [optional] +**ce_version** | **str** | management version query filter parameter | [optional] +**script_items** | [**[CSLPItem]**](CSLPItem.md) | list of input script items (tbd) | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CSLPResult.md b/docs/CSLPResult.md new file mode 100644 index 000000000..f0745414c --- /dev/null +++ b/docs/CSLPResult.md @@ -0,0 +1,13 @@ +# CSLPResult + +CLSP (Conversion Scripts Live Patching) 'post' operation return values +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**error_level** | **str** | basic status of the operation execution | [optional] +**script_items** | [**[CSLPItem]**](CSLPItem.md) | list of items returned by the retrieve/get_scripts_from_file_system actions | [optional] +**user_message** | **str** | message describing operation execution status | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Cloud.md b/docs/Cloud.md new file mode 100644 index 000000000..6819eb4d8 --- /dev/null +++ b/docs/Cloud.md @@ -0,0 +1,13 @@ +# Cloud + +Identifies a cloud by name, and the role it can serve in a specific account. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [optional] +**roles** | **[str]** | | [optional] +**name** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CloudApi.md b/docs/CloudApi.md index cd86ae967..0f6ea1ef9 100644 --- a/docs/CloudApi.md +++ b/docs/CloudApi.md @@ -1,4 +1,4 @@ -# cloudendure_api.CloudApi +# cloudendure.CloudApi All URIs are relative to *https://console.cloudendure.com/api/latest* @@ -10,33 +10,53 @@ Method | HTTP request | Description [**cloud_credentials_creds_id_regions_region_id_patch**](CloudApi.md#cloud_credentials_creds_id_regions_region_id_patch) | **PATCH** /cloudCredentials/{credsId}/regions/{regionId} | Patch region (rename) [**clouds_get**](CloudApi.md#clouds_get) | **GET** /clouds | List Clouds + # **cloud_credentials_creds_id_regions_get** -> CloudEndureRegionsList cloud_credentials_creds_id_regions_get(creds_id, offset=offset, limit=limit) +> RegionsList cloud_credentials_creds_id_regions_get(creds_id) List Regions Returns the list of regions these credentials provide access to. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import cloud_api +from cloudendure.model.regions_list import RegionsList from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.CloudApi() -creds_id = 'creds_id_example' # str | UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". -offset = 56 # int | With which item to start (0 based). (optional) -limit = 56 # int | A number specifying how many entries to return. (optional) - -try: - # List Regions - api_response = api_instance.cloud_credentials_creds_id_regions_get(creds_id, offset=offset, limit=limit) - pprint(api_response) -except ApiException as e: - print("Exception when calling CloudApi->cloud_credentials_creds_id_regions_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = cloud_api.CloudApi(api_client) + creds_id = "credsId_example" # str | UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + offset = 0 # int | With which item to start (0 based). (optional) if omitted the server will use the default value of 0 + limit = 1500 # int | A number specifying how many entries to return. (optional) if omitted the server will use the default value of 1500 + + # example passing only required values which don't have defaults set + try: + # List Regions + api_response = api_instance.cloud_credentials_creds_id_regions_get(creds_id) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling CloudApi->cloud_credentials_creds_id_regions_get: %s\n" % e) + + # example passing only required values which don't have defaults set + # and optional values + try: + # List Regions + api_response = api_instance.cloud_credentials_creds_id_regions_get(creds_id, offset=offset, limit=limit) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling CloudApi->cloud_credentials_creds_id_regions_get: %s\n" % e) ``` ### Parameters @@ -44,12 +64,12 @@ except ApiException as e: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **creds_id** | **str**| UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". | - **offset** | **int**| With which item to start (0 based). | [optional] - **limit** | **int**| A number specifying how many entries to return. | [optional] + **offset** | **int**| With which item to start (0 based). | [optional] if omitted the server will use the default value of 0 + **limit** | **int**| A number specifying how many entries to return. | [optional] if omitted the server will use the default value of 1500 ### Return type -[**CloudEndureRegionsList**](CloudEndureRegionsList.md) +[**RegionsList**](RegionsList.md) ### Authorization @@ -60,7 +80,12 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information retrieved successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **cloud_credentials_creds_id_regions_region_id_delete** > cloud_credentials_creds_id_regions_region_id_delete(creds_id, region_id) @@ -68,23 +93,32 @@ No authorization required Delete region (VCenter) ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import cloud_api from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.CloudApi() -creds_id = 'creds_id_example' # str | UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". -region_id = 'region_id_example' # str | - -try: - # Delete region (VCenter) - api_instance.cloud_credentials_creds_id_regions_region_id_delete(creds_id, region_id) -except ApiException as e: - print("Exception when calling CloudApi->cloud_credentials_creds_id_regions_region_id_delete: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = cloud_api.CloudApi(api_client) + creds_id = "credsId_example" # str | UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + region_id = "regionId_example" # str | + + # example passing only required values which don't have defaults set + try: + # Delete region (VCenter) + api_instance.cloud_credentials_creds_id_regions_region_id_delete(creds_id, region_id) + except cloudendure.ApiException as e: + print("Exception when calling CloudApi->cloud_credentials_creds_id_regions_region_id_delete: %s\n" % e) ``` ### Parameters @@ -107,32 +141,47 @@ No authorization required - **Content-Type**: Not defined - **Accept**: Not defined -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Region deleted successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **cloud_credentials_creds_id_regions_region_id_get** -> CloudEndureRegion cloud_credentials_creds_id_regions_region_id_get(creds_id, region_id) +> Region cloud_credentials_creds_id_regions_region_id_get(creds_id, region_id) Get Region ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import cloud_api +from cloudendure.model.region import Region from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.CloudApi() -creds_id = 'creds_id_example' # str | UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". -region_id = 'region_id_example' # str | - -try: - # Get Region - api_response = api_instance.cloud_credentials_creds_id_regions_region_id_get(creds_id, region_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling CloudApi->cloud_credentials_creds_id_regions_region_id_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = cloud_api.CloudApi(api_client) + creds_id = "credsId_example" # str | UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + region_id = "regionId_example" # str | + + # example passing only required values which don't have defaults set + try: + # Get Region + api_response = api_instance.cloud_credentials_creds_id_regions_region_id_get(creds_id, region_id) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling CloudApi->cloud_credentials_creds_id_regions_region_id_get: %s\n" % e) ``` ### Parameters @@ -144,7 +193,7 @@ Name | Type | Description | Notes ### Return type -[**CloudEndureRegion**](CloudEndureRegion.md) +[**Region**](Region.md) ### Authorization @@ -155,46 +204,143 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information retrieved successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **cloud_credentials_creds_id_regions_region_id_patch** -> CloudEndureRegion cloud_credentials_creds_id_regions_region_id_patch(body, creds_id, region_id) +> Region cloud_credentials_creds_id_regions_region_id_patch(creds_id, region_id, region) Patch region (rename) ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import cloud_api +from cloudendure.model.region import Region from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.CloudApi() -body = cloudendure_api.CloudEndureRegion() # CloudEndureRegion | -creds_id = 'creds_id_example' # str | UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". -region_id = 'region_id_example' # str | - -try: - # Patch region (rename) - api_response = api_instance.cloud_credentials_creds_id_regions_region_id_patch(body, creds_id, region_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling CloudApi->cloud_credentials_creds_id_regions_region_id_patch: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = cloud_api.CloudApi(api_client) + creds_id = "credsId_example" # str | UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + region_id = "regionId_example" # str | + region = Region( + subnets=[ + Subnet( + subnet_id="subnet_id_example", + network_id="network_id_example", + name="name_example", + outpost_arn="outpost_arn_example", + ), + ], + scsi_adapter_types=[ + "scsi_adapter_types_example", + ], + outposts=[ + Outpost( + outpost_arn="outpost_arn_example", + instance_types=[ + "instance_types_example", + ], + error="error_example", + ), + ], + placement_groups=[ + "placement_groups_example", + ], + instance_types=[], + logical_locations=[ + LogicalLocation( + location_id="location_id_example", + name="name_example", + ), + ], + zones=[ + "zones_example", + ], + volume_encryption_keys=[ + "volume_encryption_keys_example", + ], + cloud="cloud_example", + security_groups=[ + SecurityGroup( + network_id="network_id_example", + security_group_id="security_group_id_example", + name="name_example", + ), + ], + id="id_example", + max_cpus_per_machine=1, + network_interfaces=[ + NetworkInterface( + subnet_id="subnet_id_example", + name="name_example", + private_ip="private_ip_example", + ), + ], + compute_locations=[ + ComputeLocation( + is_encryption_supported=True, + location_id="location_id_example", + name="name_example", + ), + ], + name="name_example", + storage_locations=[ + StorageLocation( + location_id="location_id_example", + name="name_example", + ), + ], + iam_roles=[ + "iam_roles_example", + ], + static_ips=[ + "static_ips_example", + ], + max_cores_per_machine_cpu=1, + dedicated_hosts=[ + "dedicated_hosts_example", + ], + network_adapter_types=[ + "network_adapter_types_example", + ], + max_mb_ram_per_machine=1, + ) # Region | + + # example passing only required values which don't have defaults set + try: + # Patch region (rename) + api_response = api_instance.cloud_credentials_creds_id_regions_region_id_patch(creds_id, region_id, region) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling CloudApi->cloud_credentials_creds_id_regions_region_id_patch: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**CloudEndureRegion**](CloudEndureRegion.md)| | **creds_id** | **str**| UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". | **region_id** | **str**| | + **region** | [**Region**](Region.md)| | ### Return type -[**CloudEndureRegion**](CloudEndureRegion.md) +[**Region**](Region.md) ### Authorization @@ -205,46 +351,62 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Renamed successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **clouds_get** -> CloudEndureCloudsList clouds_get(offset=offset, limit=limit) +> CloudsList clouds_get() List Clouds Returns a list of clouds that can be used with CloudEndure. The roles array determines whether this cloud can be used as source, target, or both. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import cloud_api +from cloudendure.model.clouds_list import CloudsList from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.CloudApi() -offset = 56 # int | With which item to start (0 based). (optional) -limit = 56 # int | A number specifying how many entries to return. (optional) - -try: - # List Clouds - api_response = api_instance.clouds_get(offset=offset, limit=limit) - pprint(api_response) -except ApiException as e: - print("Exception when calling CloudApi->clouds_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = cloud_api.CloudApi(api_client) + offset = 0 # int | With which item to start (0 based). (optional) if omitted the server will use the default value of 0 + limit = 1500 # int | A number specifying how many entries to return. (optional) if omitted the server will use the default value of 1500 + + # example passing only required values which don't have defaults set + # and optional values + try: + # List Clouds + api_response = api_instance.clouds_get(offset=offset, limit=limit) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling CloudApi->clouds_get: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **offset** | **int**| With which item to start (0 based). | [optional] - **limit** | **int**| A number specifying how many entries to return. | [optional] + **offset** | **int**| With which item to start (0 based). | [optional] if omitted the server will use the default value of 0 + **limit** | **int**| A number specifying how many entries to return. | [optional] if omitted the server will use the default value of 1500 ### Return type -[**CloudEndureCloudsList**](CloudEndureCloudsList.md) +[**CloudsList**](CloudsList.md) ### Authorization @@ -255,5 +417,10 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information retrieved successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/docs/CloudCredentials.md b/docs/CloudCredentials.md new file mode 100644 index 000000000..87c03786c --- /dev/null +++ b/docs/CloudCredentials.md @@ -0,0 +1,15 @@ +# CloudCredentials + +An object identifying the credentials used by CloudEndure to act on behalf of the user in a specific cloud. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [optional] [readonly] +**public_key** | **str** | The public part of the Cloud credentials. For AWS - access key ID; for GCP - user email; for Azure - SHA1 digestion of the certificate file. | [optional] +**account_identifier** | **str** | An ID provided by the cloud for the user account. | [optional] [readonly] +**cloud** | **str** | | [optional] [readonly] +**name** | **str** | An optional (can be empty), user provided, descriptive name. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CloudCredentialsApi.md b/docs/CloudCredentialsApi.md index c3a36e2c2..96978feb2 100644 --- a/docs/CloudCredentialsApi.md +++ b/docs/CloudCredentialsApi.md @@ -1,4 +1,4 @@ -# cloudendure_api.CloudCredentialsApi +# cloudendure.CloudCredentialsApi All URIs are relative to *https://console.cloudendure.com/api/latest* @@ -9,29 +9,40 @@ Method | HTTP request | Description [**cloud_credentials_get**](CloudCredentialsApi.md#cloud_credentials_get) | **GET** /cloudCredentials | List Credentials [**cloud_credentials_post**](CloudCredentialsApi.md#cloud_credentials_post) | **POST** /cloudCredentials | Create Credentials + # **cloud_credentials_creds_id_get** -> CloudEndureCloudCredentials cloud_credentials_creds_id_get(creds_id) +> CloudCredentials cloud_credentials_creds_id_get(creds_id) Get Credentials ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import cloud_credentials_api +from cloudendure.model.cloud_credentials import CloudCredentials from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.CloudCredentialsApi() -creds_id = 'creds_id_example' # str | UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". - -try: - # Get Credentials - api_response = api_instance.cloud_credentials_creds_id_get(creds_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling CloudCredentialsApi->cloud_credentials_creds_id_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = cloud_credentials_api.CloudCredentialsApi(api_client) + creds_id = "credsId_example" # str | UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + + # example passing only required values which don't have defaults set + try: + # Get Credentials + api_response = api_instance.cloud_credentials_creds_id_get(creds_id) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling CloudCredentialsApi->cloud_credentials_creds_id_get: %s\n" % e) ``` ### Parameters @@ -42,7 +53,7 @@ Name | Type | Description | Notes ### Return type -[**CloudEndureCloudCredentials**](CloudEndureCloudCredentials.md) +[**CloudCredentials**](CloudCredentials.md) ### Authorization @@ -53,46 +64,69 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information retrieved successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **cloud_credentials_creds_id_patch** -> CloudEndureCloudCredentials cloud_credentials_creds_id_patch(body, creds_id) +> CloudCredentials cloud_credentials_creds_id_patch(creds_id, cloud_credentials) Change Credentials -Changes the cloud credentials. @todo:v15 If the new Cloud Credentials are to a different cloud account (or different cloud), than PATCH should fail with ??? error code and ??? error message. Old v14 behavior: If the these cloud credentials are used with the current replication, and the new credentials are to a different cloud account (or different cloud), all agents will be uninstalled and replication will stop on them. +Changes the cloud credentials. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import cloud_credentials_api +from cloudendure.model.cloud_credentials import CloudCredentials +from cloudendure.model.cloud_credentials_request import CloudCredentialsRequest from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.CloudCredentialsApi() -body = cloudendure_api.CloudEndureCloudCredentialsRequest() # CloudEndureCloudCredentialsRequest | -creds_id = 'creds_id_example' # str | UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". - -try: - # Change Credentials - api_response = api_instance.cloud_credentials_creds_id_patch(body, creds_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling CloudCredentialsApi->cloud_credentials_creds_id_patch: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = cloud_credentials_api.CloudCredentialsApi(api_client) + creds_id = "credsId_example" # str | UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + cloud_credentials = CloudCredentialsRequest( + public_key="public_key_example", + name="name_example", + cloud_id="cloud_id_example", + private_key='YQ==', + account_identifier="account_identifier_example", + id="id_example", + ) # CloudCredentialsRequest | + + # example passing only required values which don't have defaults set + try: + # Change Credentials + api_response = api_instance.cloud_credentials_creds_id_patch(creds_id, cloud_credentials) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling CloudCredentialsApi->cloud_credentials_creds_id_patch: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**CloudEndureCloudCredentialsRequest**](CloudEndureCloudCredentialsRequest.md)| | **creds_id** | **str**| UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". | + **cloud_credentials** | [**CloudCredentialsRequest**](CloudCredentialsRequest.md)| | ### Return type -[**CloudEndureCloudCredentials**](CloudEndureCloudCredentials.md) +[**CloudCredentials**](CloudCredentials.md) ### Authorization @@ -103,46 +137,62 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Object updated successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **cloud_credentials_get** -> CloudEndureCloudCredentialsList cloud_credentials_get(offset=offset, limit=limit) +> CloudCredentialsList cloud_credentials_get() List Credentials Returns the list of cloudCredentials in the account. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import cloud_credentials_api +from cloudendure.model.cloud_credentials_list import CloudCredentialsList from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.CloudCredentialsApi() -offset = 56 # int | With which item to start (0 based). (optional) -limit = 56 # int | A number specifying how many entries to return. (optional) - -try: - # List Credentials - api_response = api_instance.cloud_credentials_get(offset=offset, limit=limit) - pprint(api_response) -except ApiException as e: - print("Exception when calling CloudCredentialsApi->cloud_credentials_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = cloud_credentials_api.CloudCredentialsApi(api_client) + offset = 0 # int | With which item to start (0 based). (optional) if omitted the server will use the default value of 0 + limit = 1500 # int | A number specifying how many entries to return. (optional) if omitted the server will use the default value of 1500 + + # example passing only required values which don't have defaults set + # and optional values + try: + # List Credentials + api_response = api_instance.cloud_credentials_get(offset=offset, limit=limit) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling CloudCredentialsApi->cloud_credentials_get: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **offset** | **int**| With which item to start (0 based). | [optional] - **limit** | **int**| A number specifying how many entries to return. | [optional] + **offset** | **int**| With which item to start (0 based). | [optional] if omitted the server will use the default value of 0 + **limit** | **int**| A number specifying how many entries to return. | [optional] if omitted the server will use the default value of 1500 ### Return type -[**CloudEndureCloudCredentialsList**](CloudEndureCloudCredentialsList.md) +[**CloudCredentialsList**](CloudCredentialsList.md) ### Authorization @@ -153,44 +203,67 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information retrieved successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **cloud_credentials_post** -> CloudEndureCloudCredentials cloud_credentials_post(body) +> CloudCredentials cloud_credentials_post(cloud_credentials) Create Credentials Provide the credentials with which to access the cloud API. Returns the newly created object. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import cloud_credentials_api +from cloudendure.model.cloud_credentials import CloudCredentials +from cloudendure.model.cloud_credentials_request import CloudCredentialsRequest from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.CloudCredentialsApi() -body = cloudendure_api.CloudEndureCloudCredentialsRequest() # CloudEndureCloudCredentialsRequest | - -try: - # Create Credentials - api_response = api_instance.cloud_credentials_post(body) - pprint(api_response) -except ApiException as e: - print("Exception when calling CloudCredentialsApi->cloud_credentials_post: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = cloud_credentials_api.CloudCredentialsApi(api_client) + cloud_credentials = CloudCredentialsRequest( + public_key="public_key_example", + name="name_example", + cloud_id="cloud_id_example", + private_key='YQ==', + account_identifier="account_identifier_example", + id="id_example", + ) # CloudCredentialsRequest | + + # example passing only required values which don't have defaults set + try: + # Create Credentials + api_response = api_instance.cloud_credentials_post(cloud_credentials) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling CloudCredentialsApi->cloud_credentials_post: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**CloudEndureCloudCredentialsRequest**](CloudEndureCloudCredentialsRequest.md)| | + **cloud_credentials** | [**CloudCredentialsRequest**](CloudCredentialsRequest.md)| | ### Return type -[**CloudEndureCloudCredentials**](CloudEndureCloudCredentials.md) +[**CloudCredentials**](CloudCredentials.md) ### Authorization @@ -201,5 +274,10 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**201** | New object successfully created. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/docs/CloudCredentialsList.md b/docs/CloudCredentialsList.md new file mode 100644 index 000000000..5aabe59bc --- /dev/null +++ b/docs/CloudCredentialsList.md @@ -0,0 +1,11 @@ +# CloudCredentialsList + +A collection of CloudCredentials objects. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[CloudCredentials]**](CloudCredentials.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CloudCredentialsRequest.md b/docs/CloudCredentialsRequest.md new file mode 100644 index 000000000..0f33c6e8b --- /dev/null +++ b/docs/CloudCredentialsRequest.md @@ -0,0 +1,16 @@ +# CloudCredentialsRequest + +The credentials with which CloudEndure acts on behalf of the user in a specific cloud. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**cloud_id** | **str** | | +**public_key** | **str** | The public part of the Cloud credentials. For AWS - The access key ID, For GCP and Azure - N/A. | [optional] +**name** | **str** | An optional (can be empty), user provided, descriptive name. | [optional] +**private_key** | **str** | Cloud credentials secret, Base64-encoded. For AWS - The secret access key, For GCP - The private key in JSON format, For Azure - The certificate file. | [optional] +**account_identifier** | **str** | Cloud account identifier. For AWS - N/A, For GCP - The project ID, For Azure - The subscription ID. | [optional] +**id** | **str** | | [optional] [readonly] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CloudEndureAccount.md b/docs/CloudEndureAccount.md deleted file mode 100644 index d650acbcc..000000000 --- a/docs/CloudEndureAccount.md +++ /dev/null @@ -1,23 +0,0 @@ -# CloudEndureAccount - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**invite_token_expiry_minutes** | **int** | | [optional] -**allow_archiving_default_value** | **bool** | | [optional] -**per_account_user_pool** | **bool** | | [optional] -**is_gcp_self_service** | **bool** | | [optional] -**is_dr_trial** | **bool** | | [optional] -**is_arm_self_service** | **bool** | | [optional] -**is_aws_self_service** | **bool** | | [optional] -**saml_settings** | [**CloudEndureSamlSettings**](CloudEndureSamlSettings.md) | | [optional] -**is_right_sizing_enabled** | **bool** | | [optional] -**default_license_type** | **str** | | [optional] -**max_projects_allowed** | **int** | | [optional] -**ce_admin_properties** | **object** | For internal use. | [optional] -**owner_id** | **str** | Account Owner (a User) | [optional] -**is_med_one** | **bool** | | [optional] -**id** | **str** | UUID of the account | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureAccountRequest.md b/docs/CloudEndureAccountRequest.md deleted file mode 100644 index f921621eb..000000000 --- a/docs/CloudEndureAccountRequest.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudEndureAccountRequest - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**id** | **str** | | [optional] -**request_type** | **str** | | [optional] -**email** | **str** | | [optional] -**request_link** | **str** | | [optional] -**registration_token** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureAccountRequestList.md b/docs/CloudEndureAccountRequestList.md deleted file mode 100644 index a1afc8eaf..000000000 --- a/docs/CloudEndureAccountRequestList.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureAccountRequestList - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | [**list[CloudEndureAccountRequest]**](CloudEndureAccountRequest.md) | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureAccountsList.md b/docs/CloudEndureAccountsList.md deleted file mode 100644 index c3f54479e..000000000 --- a/docs/CloudEndureAccountsList.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureAccountsList - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | [**list[CloudEndureAccount]**](CloudEndureAccount.md) | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureAgentNextReplicationInitRequest.md b/docs/CloudEndureAgentNextReplicationInitRequest.md deleted file mode 100644 index 72c2e574e..000000000 --- a/docs/CloudEndureAgentNextReplicationInitRequest.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureAgentNextReplicationInitRequest - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**duration_from_now** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureAllProjectFeatures.md b/docs/CloudEndureAllProjectFeatures.md deleted file mode 100644 index 1c0f721de..000000000 --- a/docs/CloudEndureAllProjectFeatures.md +++ /dev/null @@ -1,40 +0,0 @@ -# CloudEndureAllProjectFeatures - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**google** | **bool** | | [optional] -**is_demo** | **bool** | | [optional] -**windows_converters** | **bool** | | [optional] -**force_reversed_handshake_direction** | **bool** | | [optional] -**no_converters** | **bool** | | [optional] -**vio** | **bool** | | [optional] -**no_cloud** | **bool** | | [optional] -**consistent_snapshot_creation_interval_min** | **int** | | [optional] -**no_public_ips** | **bool** | | [optional] -**daily_pit_number** | **int** | | [optional] -**mtu_size** | **int** | | [optional] -**allow_byol_on_dedicated_instance** | **bool** | | [optional] -**max_converter_volumes** | **int** | | [optional] -**azurearm** | **bool** | | [optional] -**vcenter** | **bool** | | [optional] -**subnet_filter** | **str** | | [optional] -**no_snapshot_considered_lag_milliseconds** | **int** | | [optional] -**no_converters_windows** | **bool** | | [optional] -**disable_replica_creation** | **bool** | | [optional] -**aws** | **bool** | | [optional] -**max_replicator_volumes** | **int** | | [optional] -**allow_recovery_plans** | **bool** | | [optional] -**snapshot_creation_interval_min** | **int** | | [optional] -**snapshot_on_demand_timeout** | **int** | | [optional] -**allow_archiving** | **bool** | | [optional] -**custom_replicator_instance_type** | **str** | | [optional] -**disable_snapshot_on_demand** | **bool** | | [optional] -**disable_install** | **bool** | | [optional] -**hdd** | **bool** | | [optional] -**snapshot_creation_interval_max** | **int** | | [optional] -**ce_admin_properties** | **object** | For internal use. | [optional] -**azure** | **bool** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureAuditLog.md b/docs/CloudEndureAuditLog.md deleted file mode 100644 index 099150170..000000000 --- a/docs/CloudEndureAuditLog.md +++ /dev/null @@ -1,10 +0,0 @@ -# CloudEndureAuditLog - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | [**list[CloudEndureAuditLogEntry]**](CloudEndureAuditLogEntry.md) | | [optional] -**has_more_results** | **bool** | AuditLog API will only return max 1500 entries so this is a way to know if there are more. | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureAuditLogChangedField.md b/docs/CloudEndureAuditLogChangedField.md deleted file mode 100644 index f1835be58..000000000 --- a/docs/CloudEndureAuditLogChangedField.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudEndureAuditLogChangedField - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**field_name** | **str** | | [optional] -**new_value** | **str** | | [optional] -**old_value** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureAuditLogEntry.md b/docs/CloudEndureAuditLogEntry.md deleted file mode 100644 index ecb3829c0..000000000 --- a/docs/CloudEndureAuditLogEntry.md +++ /dev/null @@ -1,15 +0,0 @@ -# CloudEndureAuditLogEntry - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**username** | **str** | username (typically an email) of user who initiated action (in UI or via API) which resulted in this audit log entry being added. | [optional] -**event_name** | **str** | Unique event name. One of: - replicationConfigurationChanged - blueprintChanged - ... @todo: complete | [optional] -**participating_machines** | **list[object]** | List of machine-identifiers objects. Only present if Audit Log entry relates to one or more machines. | [optional] -**description** | **str** | Long-form human-readable description of Audit Log entry. | [optional] -**changed_fields** | [**list[CloudEndureAuditLogChangedField]**](CloudEndureAuditLogChangedField.md) | Map of fields that have been changed and their old an new values. Only present when eventName is replicationConfigurationChanged or blueprintChanged | [optional] -**timestamp** | **datetime** | RFC 3339 compliant date-time string of when Audit Log entry was created/ event described by audit log entry happened. | [optional] -**job_id** | **str** | ID of Job due to which this log entry was created (only included if log entry is result of a Job) | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureBandwidthThrottling.md b/docs/CloudEndureBandwidthThrottling.md deleted file mode 100644 index 0647b9140..000000000 --- a/docs/CloudEndureBandwidthThrottling.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureBandwidthThrottling - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**bandwidth_throttling** | **int** | Mbps to use for Data Replication (zero means no throttling). | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureBlueprint.md b/docs/CloudEndureBlueprint.md deleted file mode 100644 index 137bbf022..000000000 --- a/docs/CloudEndureBlueprint.md +++ /dev/null @@ -1,41 +0,0 @@ -# CloudEndureBlueprint - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**iam_role** | **str** | AWS only. Possible values can be fetched from the Region object. | [optional] -**scsi_adapter_type** | **str** | Currently relevant for vCenter cloud only. Possible values can be fetched from the Region object. | [optional] -**public_ip_action** | **str** | Whether to allocate an ephemeral public IP, or not. AS_SUBNET causes CloudEndure to copy this property from the source machine. | [optional] -**machine_name** | **str** | | [optional] -**cpus** | **int** | Number of CPUs per per Target machine; Currently relevant for vCenter cloud only; Max value can be fetched from the maxCpusPerMachine property of the Region object. | [optional] -**security_group_i_ds** | **list[str]** | AWS only. The security groups that will be applied to the target machine. Possible values can be fetched from the Region object. | [optional] -**run_after_launch** | **bool** | AWS only. Whether to power on the launched target machine after launch. True by default. | [optional] -**recommended_private_ip** | **str** | The private IP address recommended for use with this machine. | [optional] -**network_interface** | **str** | | [optional] -**id** | **str** | | [optional] -**mb_ram** | **int** | MB RAM per Target machine; Currently relevant for vCenter cloud only; Max value can be fetched from the maxMbRamPerMachine property of the Region object. | [optional] -**instance_type** | **str** | Possible values can be fetched from the Region object, plus special values \"COPY_ORIGIN\" or \"CUSTOM\" | [optional] -**subnet_i_ds** | **list[str]** | AWS only. Configures a subnets in which the instance network interface will take part. Possible values can be fetched from the Region object. | [optional] -**cores_per_cpu** | **int** | Number of CPU cores per CPU in Target machine; Currently relevant for vCenter cloud only. | [optional] -**recommended_instance_type** | **str** | When instance rightsizing is enabled, the instance type suitable for the source machine's HW | [optional] -**static_ip** | **str** | Possible values can be fetched from the Region object. | [optional] -**tags** | **list[object]** | AWS only. Tags that will be applied to the target machine. | [optional] -**security_group_action** | **str** | How to assign a security group to the target machine. | [optional] -**private_i_ps** | **list[str]** | | [optional] -**tenancy** | **str** | | [optional] -**compute_location_id** | **str** | todo | [optional] -**subnets_host_project** | **str** | GCP only. Host project for cross project network subnet. | [optional] -**logical_location_id** | **str** | vcenter = vmFolder; relates to $ref LogicalLocation | [optional] -**network_adapter_type** | **str** | Currently relevant for vCenter cloud only. Possible values can be fetched from the Region object. | [optional] -**byol_on_dedicated_instance** | **bool** | specifies whether to use byol windows license if dedicated instance tenancy is selected. | [optional] -**placement_group** | **str** | AWS only. Possible values can be fetched from the Region object. | [optional] -**machine_id** | **str** | | [optional] -**region** | **str** | | [optional] -**disks** | **list[object]** | AWS only. Target machine disk properties. | [optional] -**private_ip_action** | **str** | | [optional] -**static_ip_action** | **str** | | [optional] -**dedicated_host_identifier** | **str** | | [optional] -**use_shared_ram** | **bool** | todo | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureBlueprintList.md b/docs/CloudEndureBlueprintList.md deleted file mode 100644 index db17e4989..000000000 --- a/docs/CloudEndureBlueprintList.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureBlueprintList - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | [**list[CloudEndureBlueprint]**](CloudEndureBlueprint.md) | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureCloud.md b/docs/CloudEndureCloud.md deleted file mode 100644 index e0cb6f573..000000000 --- a/docs/CloudEndureCloud.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudEndureCloud - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**id** | **str** | | [optional] -**roles** | **list[str]** | | [optional] -**name** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureCloudCredentials.md b/docs/CloudEndureCloudCredentials.md deleted file mode 100644 index 06fd482bf..000000000 --- a/docs/CloudEndureCloudCredentials.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudEndureCloudCredentials - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**id** | **str** | | [optional] -**public_key** | **str** | The public part of the Cloud credentials. For AWS - access key ID; for GCP - user email; for Azure - SHA1 digestion of the certificate file. | [optional] -**account_identifier** | **str** | An ID provided by the cloud for the user account. | [optional] -**cloud** | **str** | | [optional] -**name** | **str** | An optional (can be empty), user provided, descriptive name. | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureCloudCredentialsList.md b/docs/CloudEndureCloudCredentialsList.md deleted file mode 100644 index 4029d084e..000000000 --- a/docs/CloudEndureCloudCredentialsList.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureCloudCredentialsList - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | [**list[CloudEndureCloudCredentials]**](CloudEndureCloudCredentials.md) | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureCloudCredentialsRequest.md b/docs/CloudEndureCloudCredentialsRequest.md deleted file mode 100644 index 0c15dd12d..000000000 --- a/docs/CloudEndureCloudCredentialsRequest.md +++ /dev/null @@ -1,14 +0,0 @@ -# CloudEndureCloudCredentialsRequest - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**public_key** | **str** | The public part of the Cloud credentials. For AWS - The access key ID, For GCP and Azure - N/A. | [optional] -**name** | **str** | An optional (can be empty), user provided, descriptive name. | [optional] -**cloud_id** | **str** | | -**private_key** | **str** | Cloud credentials secret. For AWS - The secret access key, For GCP - The private key in JSON format, For Azure - The certificate file. | [optional] -**account_identifier** | **str** | Cloud account identifier. For AWS - N/A, For GCP - The project ID, For Azure - The subscription ID. | [optional] -**id** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureCloudsList.md b/docs/CloudEndureCloudsList.md deleted file mode 100644 index 05dacd878..000000000 --- a/docs/CloudEndureCloudsList.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureCloudsList - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | [**list[CloudEndureCloud]**](CloudEndureCloud.md) | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureComputeLocation.md b/docs/CloudEndureComputeLocation.md deleted file mode 100644 index 253601518..000000000 --- a/docs/CloudEndureComputeLocation.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudEndureComputeLocation - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**is_encryption_supported** | **bool** | | [optional] -**location_id** | **str** | | [optional] -**name** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureConfigurations.md b/docs/CloudEndureConfigurations.md deleted file mode 100644 index 03e7bccf1..000000000 --- a/docs/CloudEndureConfigurations.md +++ /dev/null @@ -1,10 +0,0 @@ -# CloudEndureConfigurations - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**name** | **str** | | [optional] -**value** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureConfigurationsList.md b/docs/CloudEndureConfigurationsList.md deleted file mode 100644 index b45624945..000000000 --- a/docs/CloudEndureConfigurationsList.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureConfigurationsList - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | [**list[CloudEndureConfigurations]**](CloudEndureConfigurations.md) | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureError.md b/docs/CloudEndureError.md deleted file mode 100644 index c4b513123..000000000 --- a/docs/CloudEndureError.md +++ /dev/null @@ -1,10 +0,0 @@ -# CloudEndureError - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**message** | **str** | | [optional] -**code** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureExtendedAccountInfo.md b/docs/CloudEndureExtendedAccountInfo.md deleted file mode 100644 index 3011fd753..000000000 --- a/docs/CloudEndureExtendedAccountInfo.md +++ /dev/null @@ -1,16 +0,0 @@ -# CloudEndureExtendedAccountInfo - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**account** | [**CloudEndureAccount**](CloudEndureAccount.md) | | [optional] -**clouds** | [**CloudEndureCloudsList**](CloudEndureCloudsList.md) | | [optional] -**generic_region** | [**CloudEndureRegion**](CloudEndureRegion.md) | | [optional] -**date_time** | [**CloudEndureTime**](CloudEndureTime.md) | | [optional] -**user** | [**CloudEndureUser**](CloudEndureUser.md) | | [optional] -**projects** | [**CloudEndureProjectsList**](CloudEndureProjectsList.md) | | [optional] -**is_newly_registered** | **bool** | | [optional] -**replication_configurations** | [**CloudEndureReplicationConfigurationList**](CloudEndureReplicationConfigurationList.md) | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureFindFilesParameters.md b/docs/CloudEndureFindFilesParameters.md deleted file mode 100644 index 558a99956..000000000 --- a/docs/CloudEndureFindFilesParameters.md +++ /dev/null @@ -1,10 +0,0 @@ -# CloudEndureFindFilesParameters - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**query** | **str** | | -**machine_i_ds** | **list[str]** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureFindFilesResult.md b/docs/CloudEndureFindFilesResult.md deleted file mode 100644 index 9e65a7949..000000000 --- a/docs/CloudEndureFindFilesResult.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudEndureFindFilesResult - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**machine_id** | **str** | | -**points_in_time** | **object** | | [optional] -**file_path** | **str** | | - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureFindFilesResultPit.md b/docs/CloudEndureFindFilesResultPit.md deleted file mode 100644 index 9c2fa8f16..000000000 --- a/docs/CloudEndureFindFilesResultPit.md +++ /dev/null @@ -1,10 +0,0 @@ -# CloudEndureFindFilesResultPit - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**id** | **str** | | -**date_time** | **datetime** | | - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureFindFilesResults.md b/docs/CloudEndureFindFilesResults.md deleted file mode 100644 index 5b86aeca5..000000000 --- a/docs/CloudEndureFindFilesResults.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudEndureFindFilesResults - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**count** | **int** | | -**query** | **str** | | -**items** | [**list[CloudEndureFindFilesResult]**](CloudEndureFindFilesResult.md) | | [optional] -**invalid_machine_i_ds** | **list[str]** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureGcpMachinesFinanceData.md b/docs/CloudEndureGcpMachinesFinanceData.md deleted file mode 100644 index 3cd57a105..000000000 --- a/docs/CloudEndureGcpMachinesFinanceData.md +++ /dev/null @@ -1,16 +0,0 @@ -# CloudEndureGcpMachinesFinanceData - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**gcp_project_name** | **str** | | [optional] -**machine_name** | **str** | | [optional] -**number_of_cores** | **int** | | [optional] -**creation_time** | **datetime** | | [optional] -**is_preemptible** | **bool** | | [optional] -**has_gpu** | **bool** | | [optional] -**machine_id** | **str** | | [optional] -**ce_project_name** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureIdentityProviderRedirectResponse.md b/docs/CloudEndureIdentityProviderRedirectResponse.md deleted file mode 100644 index 897c9b98c..000000000 --- a/docs/CloudEndureIdentityProviderRedirectResponse.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureIdentityProviderRedirectResponse - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**saml_redirect** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureInitializationStep.md b/docs/CloudEndureInitializationStep.md deleted file mode 100644 index d6b2bb738..000000000 --- a/docs/CloudEndureInitializationStep.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudEndureInitializationStep - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**status** | **str** | | [optional] -**message** | **str** | | [optional] -**name** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureJob.md b/docs/CloudEndureJob.md deleted file mode 100644 index a1f519f22..000000000 --- a/docs/CloudEndureJob.md +++ /dev/null @@ -1,16 +0,0 @@ -# CloudEndureJob - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**status** | **str** | | [optional] -**participating_machines** | **list[str]** | | [optional] -**log** | **list[object]** | | [optional] -**type** | **str** | todo explian that cleanup is also for restore servers | [optional] -**end_date_time** | **datetime** | | [optional] -**creation_date_time** | **datetime** | | [optional] -**id** | **str** | | [optional] -**initiated_by** | **str** | username of user who initiated the job | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureJobsList.md b/docs/CloudEndureJobsList.md deleted file mode 100644 index 9259c8bfd..000000000 --- a/docs/CloudEndureJobsList.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureJobsList - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | [**list[CloudEndureJob]**](CloudEndureJob.md) | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureKeyValueList.md b/docs/CloudEndureKeyValueList.md deleted file mode 100644 index 010b14ca1..000000000 --- a/docs/CloudEndureKeyValueList.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureKeyValueList - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | **list[object]** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureLaunchMachinesParameters.md b/docs/CloudEndureLaunchMachinesParameters.md deleted file mode 100644 index 61c76a0d1..000000000 --- a/docs/CloudEndureLaunchMachinesParameters.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudEndureLaunchMachinesParameters - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | [**list[CloudEndureMachineAndPointInTime]**](CloudEndureMachineAndPointInTime.md) | | [optional] -**launch_type** | **str** | | -**debug_scripts** | **object** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureLicense.md b/docs/CloudEndureLicense.md deleted file mode 100644 index 34cfab425..000000000 --- a/docs/CloudEndureLicense.md +++ /dev/null @@ -1,16 +0,0 @@ -# CloudEndureLicense - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**count** | **int** | The total number of licenses. | [optional] -**duration_from_start_of_use** | **str** | Validity period for a a single license from the time of agent installation. | [optional] -**used** | **int** | How many licenses have already been consumed. | [optional] -**features** | [**CloudEndureLicenseFeatures**](CloudEndureLicenseFeatures.md) | | [optional] -**expiration_date_time** | **datetime** | | [optional] -**ce_admin_properties** | **object** | For internal use. | [optional] -**type** | **str** | License type. DR licenses can be moved from one machine to another. Migration licenses are consumed upon installation. | [optional] -**id** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureLicenseFeatures.md b/docs/CloudEndureLicenseFeatures.md deleted file mode 100644 index c8028e967..000000000 --- a/docs/CloudEndureLicenseFeatures.md +++ /dev/null @@ -1,10 +0,0 @@ -# CloudEndureLicenseFeatures - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**pit** | **bool** | | [optional] -**dr_tier2** | **bool** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureLicenseList.md b/docs/CloudEndureLicenseList.md deleted file mode 100644 index 538362a42..000000000 --- a/docs/CloudEndureLicenseList.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureLicenseList - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | [**list[CloudEndureLicense]**](CloudEndureLicense.md) | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureListUsersResult.md b/docs/CloudEndureListUsersResult.md deleted file mode 100644 index db6719634..000000000 --- a/docs/CloudEndureListUsersResult.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudEndureListUsersResult - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**username** | **str** | | [optional] -**is_account_owner** | **bool** | | [optional] -**state** | **str** | | [optional] -**version** | **str** | | [optional] -**account_uuid** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureListUsersResults.md b/docs/CloudEndureListUsersResults.md deleted file mode 100644 index cf08d5292..000000000 --- a/docs/CloudEndureListUsersResults.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureListUsersResults - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | [**list[CloudEndureListUsersResult]**](CloudEndureListUsersResult.md) | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureLogicalLocation.md b/docs/CloudEndureLogicalLocation.md deleted file mode 100644 index 1155fca06..000000000 --- a/docs/CloudEndureLogicalLocation.md +++ /dev/null @@ -1,10 +0,0 @@ -# CloudEndureLogicalLocation - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**location_id** | **str** | | [optional] -**name** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureMachine.md b/docs/CloudEndureMachine.md deleted file mode 100644 index df75d55af..000000000 --- a/docs/CloudEndureMachine.md +++ /dev/null @@ -1,20 +0,0 @@ -# CloudEndureMachine - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**source_properties** | **object** | Source machine properties. | [optional] -**replication_info** | **object** | Detailed information on the state of replication. | [optional] -**license** | **object** | Detailed machine license consumption information. | [optional] -**tags** | **list[str]** | | [optional] -**restore_servers** | **list[str]** | todo restoreServer ids | [optional] -**from_point_in_time** | [**CloudEndurePointInTime**](CloudEndurePointInTime.md) | | [optional] -**replication_status** | **str** | Is replication started, paused or stopped | [optional] -**replica** | **str** | The ID of the target machine that has been previously launched, if such exists. | [optional] -**id** | **str** | | [optional] -**replication_configuration** | [**CloudEndureMachineReplicationConfiguration**](CloudEndureMachineReplicationConfiguration.md) | | [optional] -**life_cycle** | **object** | Detailed machine lifecycle information. | [optional] -**is_agent_installed** | **bool** | Whether a CloudEndure agent is currently installed on this machine. | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureMachineAndPathAndPointInTime.md b/docs/CloudEndureMachineAndPathAndPointInTime.md deleted file mode 100644 index 6ae1d793b..000000000 --- a/docs/CloudEndureMachineAndPathAndPointInTime.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudEndureMachineAndPathAndPointInTime - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**machine_id** | **str** | | -**point_in_time_id** | **str** | | [optional] -**file_path** | **str** | | - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureMachineReplicationConfiguration.md b/docs/CloudEndureMachineReplicationConfiguration.md deleted file mode 100644 index 4a3a76440..000000000 --- a/docs/CloudEndureMachineReplicationConfiguration.md +++ /dev/null @@ -1,25 +0,0 @@ -# CloudEndureMachineReplicationConfiguration - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**volume_encryption_key** | **str** | AWS only. ARN to private key for Volume Encryption. Possible values can be fetched from the Region object. | [optional] -**replication_tags** | **list[object]** | AWS only. Tags that will be applied to every cloud resource created in the CloudEndure Staging Area. | [optional] -**subnet_host_project** | **str** | GCP only. Host project of cross project network subnet. | [optional] -**replication_server_type** | **str** | | [optional] -**compute_location_id** | **str** | todo vcenter only | [optional] -**subnet_id** | **str** | Subnet where replication servers will be created. Possible values can be fetched from the Region object. | [optional] -**logical_location_id** | **str** | vcenter = vmFolder | [optional] -**bandwidth_throttling** | **int** | Mbps to use for Data Replication (zero means no throttling). | [optional] -**storage_location_id** | **str** | @todo backend creates cloudendure bla bla storage account upon need (empty string). | [optional] -**use_dedicated_server** | **bool** | | [optional] -**zone** | **str** | Relevant for GCP and Azure ARM. The Zone to replicate into. | [optional] -**replicator_security_group_i_ds** | **list[str]** | AWS only. The security groups that will be applied to the replication servers. Possible values can be fetched from the Region object. | [optional] -**use_private_ip** | **bool** | Should the CloudEndure agent access the replication server using its private IP address. | [optional] -**proxy_url** | **str** | The full URI for a proxy (schema, username, password, domain, port) if required for the CloudEndure agent. | [optional] -**volume_encryption_allowed** | **bool** | todo AWS only... not relevant for Backup Projects because EBS is not used | [optional] -**archiving_enabled** | **bool** | | [optional] -**object_storage_location** | **str** | bucket in aws | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureMachineSnapshotCredits.md b/docs/CloudEndureMachineSnapshotCredits.md deleted file mode 100644 index 677924f03..000000000 --- a/docs/CloudEndureMachineSnapshotCredits.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureMachineSnapshotCredits - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**credits** | **int** | Mbps to use for Data Replication (zero means no throttling). | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureMachineThrottleTimeSeconds.md b/docs/CloudEndureMachineThrottleTimeSeconds.md deleted file mode 100644 index d1542a8ea..000000000 --- a/docs/CloudEndureMachineThrottleTimeSeconds.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureMachineThrottleTimeSeconds - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**credits** | **int** | time to throttle the machine in seconds | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureMachinesList.md b/docs/CloudEndureMachinesList.md deleted file mode 100644 index 2d5d5411d..000000000 --- a/docs/CloudEndureMachinesList.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureMachinesList - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | [**list[CloudEndureMachine]**](CloudEndureMachine.md) | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureMachinesListInvalidIDsAndJob.md b/docs/CloudEndureMachinesListInvalidIDsAndJob.md deleted file mode 100644 index b88912b8f..000000000 --- a/docs/CloudEndureMachinesListInvalidIDsAndJob.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudEndureMachinesListInvalidIDsAndJob - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | [**list[CloudEndureMachine]**](CloudEndureMachine.md) | | [optional] -**job** | [**CloudEndureJob**](CloudEndureJob.md) | | [optional] -**invalid_machine_i_ds** | **list[str]** | The IDs of the machines for which the operation failed. | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureNetworkInterface.md b/docs/CloudEndureNetworkInterface.md deleted file mode 100644 index 181da8fb5..000000000 --- a/docs/CloudEndureNetworkInterface.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudEndureNetworkInterface - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**subnet_id** | **str** | | [optional] -**name** | **str** | | [optional] -**private_ip** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndurePointInTimeList.md b/docs/CloudEndurePointInTimeList.md deleted file mode 100644 index b624f6461..000000000 --- a/docs/CloudEndurePointInTimeList.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndurePointInTimeList - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | [**list[CloudEndurePointInTime]**](CloudEndurePointInTime.md) | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureProject.md b/docs/CloudEndureProject.md deleted file mode 100644 index 1b75ca263..000000000 --- a/docs/CloudEndureProject.md +++ /dev/null @@ -1,23 +0,0 @@ -# CloudEndureProject - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**target_cloud_id** | **str** | | [optional] -**agent_installation_token** | **str** | | [optional] -**name** | **str** | | [optional] -**users_i_ds** | **list[str]** | todo empty array unless AO or ce admin | [optional] -**type** | **str** | | [optional] -**replication_reversed** | **bool** | | [optional] -**source_cloud_credentials_id** | **str** | | [optional] -**cloud_credentials_i_ds** | **list[str]** | The IDs of the cloud credentials to use (array of one). | [optional] -**source_region** | **str** | The ID of the region to use as source. | [optional] -**licenses_i_ds** | **list[str]** | The IDs of the licenses associated with this project (array of one). | [optional] -**ce_admin_properties** | **object** | For internal use. | [optional] -**replication_configuration** | **str** | The ID of the replication configuration object to use (corresponding to the ones available in /projects/{projectId}/replicationConfigurations). | [optional] -**source_cloud_id** | **str** | | [optional] -**id** | **str** | | [optional] -**features** | **object** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureProjectStorage.md b/docs/CloudEndureProjectStorage.md deleted file mode 100644 index 13ba4eba9..000000000 --- a/docs/CloudEndureProjectStorage.md +++ /dev/null @@ -1,13 +0,0 @@ -# CloudEndureProjectStorage - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**project_id** | **str** | | [optional] -**points_in_time_total_bytes** | **int** | | [optional] -**running_machines_total_bytes** | **int** | | [optional] -**working_storage** | **object** | | [optional] -**calculation_date_time** | **datetime** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureProjectsAndUsers.md b/docs/CloudEndureProjectsAndUsers.md deleted file mode 100644 index bd4261a88..000000000 --- a/docs/CloudEndureProjectsAndUsers.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureProjectsAndUsers - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | **list[object]** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureProjectsList.md b/docs/CloudEndureProjectsList.md deleted file mode 100644 index 7dc472030..000000000 --- a/docs/CloudEndureProjectsList.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureProjectsList - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | [**list[CloudEndureProject]**](CloudEndureProject.md) | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureRecoveryPlan.md b/docs/CloudEndureRecoveryPlan.md deleted file mode 100644 index f605979a5..000000000 --- a/docs/CloudEndureRecoveryPlan.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudEndureRecoveryPlan - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**steps** | [**CloudEndureRecoveryPlanSteps**](CloudEndureRecoveryPlanSteps.md) | | [optional] -**id** | **str** | | [optional] -**name** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureRecoveryPlanList.md b/docs/CloudEndureRecoveryPlanList.md deleted file mode 100644 index 4a25285c9..000000000 --- a/docs/CloudEndureRecoveryPlanList.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureRecoveryPlanList - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | [**list[CloudEndureRecoveryPlan]**](CloudEndureRecoveryPlan.md) | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureRecoveryPlanStep.md b/docs/CloudEndureRecoveryPlanStep.md deleted file mode 100644 index 6b4553c26..000000000 --- a/docs/CloudEndureRecoveryPlanStep.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudEndureRecoveryPlanStep - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**machine_i_ds** | **list[str]** | | [optional] -**wait_before** | **str** | | [optional] -**name** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureRecoveryPlanSteps.md b/docs/CloudEndureRecoveryPlanSteps.md deleted file mode 100644 index 9db218900..000000000 --- a/docs/CloudEndureRecoveryPlanSteps.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureRecoveryPlanSteps - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | [**list[CloudEndureRecoveryPlanStep]**](CloudEndureRecoveryPlanStep.md) | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureRegion.md b/docs/CloudEndureRegion.md deleted file mode 100644 index 269c60368..000000000 --- a/docs/CloudEndureRegion.md +++ /dev/null @@ -1,29 +0,0 @@ -# CloudEndureRegion - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**subnets** | [**list[CloudEndureSubnet]**](CloudEndureSubnet.md) | | [optional] -**placement_groups** | **list[str]** | | [optional] -**scsi_adapter_types** | **list[str]** | todo | [optional] -**instance_types** | **list[str]** | | [optional] -**zones** | **list[str]** | | [optional] -**volume_encryption_keys** | **list[str]** | | [optional] -**cloud** | **str** | | [optional] -**security_groups** | [**list[CloudEndureSecurityGroup]**](CloudEndureSecurityGroup.md) | | [optional] -**logical_locations** | [**list[CloudEndureLogicalLocation]**](CloudEndureLogicalLocation.md) | | [optional] -**static_ips** | **list[str]** | | [optional] -**max_cpus_per_machine** | **int** | Maximum CPUs per per Target machine (currently relevant for vCenter cloud only) | [optional] -**network_interfaces** | [**list[CloudEndureNetworkInterface]**](CloudEndureNetworkInterface.md) | | [optional] -**compute_locations** | [**list[CloudEndureComputeLocation]**](CloudEndureComputeLocation.md) | Compute location (e.g. vCenter Host) | [optional] -**name** | **str** | | [optional] -**storage_locations** | [**list[CloudEndureStorageLocation]**](CloudEndureStorageLocation.md) | Storage location (e.g. Azure Storage Account, vCenter Data Store) | [optional] -**iam_roles** | **list[str]** | | [optional] -**id** | **str** | | [optional] -**max_cores_per_machine_cpu** | **int** | Maximum CPU cores per CPU in Target machines (currently relevant for vCenter cloud only) | [optional] -**dedicated_hosts** | **list[str]** | | [optional] -**network_adapter_types** | **list[str]** | todo | [optional] -**max_mb_ram_per_machine** | **int** | Maximum MB RAM per Target machine (currently relevant for vCenter cloud only) | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureRegionsList.md b/docs/CloudEndureRegionsList.md deleted file mode 100644 index dfb790df3..000000000 --- a/docs/CloudEndureRegionsList.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureRegionsList - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | [**list[CloudEndureRegion]**](CloudEndureRegion.md) | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureReplica.md b/docs/CloudEndureReplica.md deleted file mode 100644 index 8c9efb084..000000000 --- a/docs/CloudEndureReplica.md +++ /dev/null @@ -1,17 +0,0 @@ -# CloudEndureReplica - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**machine** | **str** | The ID of the source machine for this target machine. | [optional] -**cloud_endure_creation_date_time** | **datetime** | Timestamp for launching this target machine. | [optional] -**name** | **str** | Target machine name in the target environment. | [optional] -**point_in_time** | **str** | The ID of the pointInTime object from which this target machine was created. | [optional] -**machine_cloud_state** | **str** | Target machine state in the target environment. | [optional] -**public_ips** | **list[str]** | Static (non-ephemral) public IPs. On some clouds this also includes ephemeral IPs. | [optional] -**region_id** | **str** | The ID of the region where this target machine has been launched. | [optional] -**id** | **str** | | [optional] -**machine_cloud_id** | **str** | Target machine ID in the target environment. | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureReplicationConfiguration.md b/docs/CloudEndureReplicationConfiguration.md deleted file mode 100644 index 693ae60e3..000000000 --- a/docs/CloudEndureReplicationConfiguration.md +++ /dev/null @@ -1,28 +0,0 @@ -# CloudEndureReplicationConfiguration - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**volume_encryption_key** | **str** | AWS only. ARN to private key for Volume Encryption. Possible values can be fetched from the Region object. | [optional] -**replication_tags** | **list[object]** | AWS only. Tags that will be applied to every cloud resource created in the CloudEndure Staging Area. | [optional] -**subnet_host_project** | **str** | GCP only. Host project of cross project network subnet. | [optional] -**replication_server_type** | **str** | | [optional] -**compute_location_id** | **str** | todo vcenter only | [optional] -**cloud_credentials** | **str** | The ID for the cloudCredentials object containing the credentials to be used for accessing the target cloud. | [optional] -**subnet_id** | **str** | Subnet where replication servers will be created. Possible values can be fetched from the Region object. | [optional] -**logical_location_id** | **str** | vcenter = vmFolder | [optional] -**bandwidth_throttling** | **int** | Mbps to use for Data Replication (zero means no throttling). | [optional] -**storage_location_id** | **str** | @todo backend creates cloudendure bla bla storage account upon need (empty string). | [optional] -**use_dedicated_server** | **bool** | | [optional] -**zone** | **str** | Relevant for GCP and Azure ARM. The Zone to replicate into. | [optional] -**replicator_security_group_i_ds** | **list[str]** | AWS only. The security groups that will be applied to the replication servers. Possible values can be fetched from the Region object. | [optional] -**use_private_ip** | **bool** | Should the CloudEndure agent access the replication server using its private IP address. | [optional] -**region** | **str** | | [optional] -**id** | **str** | | [optional] -**proxy_url** | **str** | The full URI for a proxy (schema, username, password, domain, port) if required for the CloudEndure agent. | [optional] -**volume_encryption_allowed** | **bool** | todo | [optional] -**archiving_enabled** | **bool** | | [optional] -**object_storage_location** | **str** | bucket in aws | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureReplicationConfigurationList.md b/docs/CloudEndureReplicationConfigurationList.md deleted file mode 100644 index 1d0f676ac..000000000 --- a/docs/CloudEndureReplicationConfigurationList.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureReplicationConfigurationList - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | [**list[CloudEndureReplicationConfiguration]**](CloudEndureReplicationConfiguration.md) | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureReplicationServerConfig.md b/docs/CloudEndureReplicationServerConfig.md deleted file mode 100644 index 2a992cb62..000000000 --- a/docs/CloudEndureReplicationServerConfig.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureReplicationServerConfig - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**volumes** | **list[object]** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureRestoreFilesParameters.md b/docs/CloudEndureRestoreFilesParameters.md deleted file mode 100644 index 2a4143fcc..000000000 --- a/docs/CloudEndureRestoreFilesParameters.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureRestoreFilesParameters - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | [**list[CloudEndureMachineAndPathAndPointInTime]**](CloudEndureMachineAndPathAndPointInTime.md) | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureSamlSettings.md b/docs/CloudEndureSamlSettings.md deleted file mode 100644 index 6333df38e..000000000 --- a/docs/CloudEndureSamlSettings.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudEndureSamlSettings - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**identity_provider_certificate** | **str** | | [optional] -**identity_provider_url** | **str** | | [optional] -**identity_provider_id** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureSecurityGroup.md b/docs/CloudEndureSecurityGroup.md deleted file mode 100644 index 04886f1e4..000000000 --- a/docs/CloudEndureSecurityGroup.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudEndureSecurityGroup - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**network_id** | **str** | | [optional] -**security_group_id** | **str** | | [optional] -**name** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureStorageLocation.md b/docs/CloudEndureStorageLocation.md deleted file mode 100644 index 38e40386f..000000000 --- a/docs/CloudEndureStorageLocation.md +++ /dev/null @@ -1,10 +0,0 @@ -# CloudEndureStorageLocation - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**location_id** | **str** | | [optional] -**name** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureSubnet.md b/docs/CloudEndureSubnet.md deleted file mode 100644 index a6cea0d1b..000000000 --- a/docs/CloudEndureSubnet.md +++ /dev/null @@ -1,11 +0,0 @@ -# CloudEndureSubnet - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**subnet_id** | **str** | | [optional] -**network_id** | **str** | | [optional] -**name** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureTime.md b/docs/CloudEndureTime.md deleted file mode 100644 index b3bdc6c60..000000000 --- a/docs/CloudEndureTime.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureTime - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**date_time** | **datetime** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureUpdateableScripts.md b/docs/CloudEndureUpdateableScripts.md deleted file mode 100644 index fc5a3c57c..000000000 --- a/docs/CloudEndureUpdateableScripts.md +++ /dev/null @@ -1,10 +0,0 @@ -# CloudEndureUpdateableScripts - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**result** | **object** | | [optional] -**error** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureUpgradeCounterDelay.md b/docs/CloudEndureUpgradeCounterDelay.md deleted file mode 100644 index 2a6baee9b..000000000 --- a/docs/CloudEndureUpgradeCounterDelay.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureUpgradeCounterDelay - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**sleep** | **int** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureUsage.md b/docs/CloudEndureUsage.md deleted file mode 100644 index bfc3d6fca..000000000 --- a/docs/CloudEndureUsage.md +++ /dev/null @@ -1,12 +0,0 @@ -# CloudEndureUsage - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**start_of_use_date_time** | **datetime** | | [optional] -**cloud_id** | **str** | The ID in the cloud | [optional] -**name** | **str** | The name of the machine. | [optional] -**machine_id** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureUsageList.md b/docs/CloudEndureUsageList.md deleted file mode 100644 index aacee4bbc..000000000 --- a/docs/CloudEndureUsageList.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureUsageList - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | [**list[CloudEndureUsage]**](CloudEndureUsage.md) | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureUser.md b/docs/CloudEndureUser.md deleted file mode 100644 index 984077b2c..000000000 --- a/docs/CloudEndureUser.md +++ /dev/null @@ -1,18 +0,0 @@ -# CloudEndureUser - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**username** | **str** | | [optional] -**status** | **str** | | [optional] -**account** | **str** | | [optional] -**roles** | **list[str]** | | [optional] -**settings** | **object** | | [optional] -**api_token** | **str** | | [optional] -**has_password** | **bool** | | [optional] -**terms_accepted** | **bool** | todo one-way; cannot be set at time of POST | [optional] -**id** | **str** | | [optional] -**self_link** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureUserReport.md b/docs/CloudEndureUserReport.md deleted file mode 100644 index 990c81960..000000000 --- a/docs/CloudEndureUserReport.md +++ /dev/null @@ -1,18 +0,0 @@ -# CloudEndureUserReport - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**n_protected_machines** | **int** | | [optional] -**project_name** | **str** | | [optional] -**is_activated** | **bool** | | [optional] -**n_license_usages** | **int** | | [optional] -**gcp_machines_finance_data** | **object** | | [optional] -**total_tested_or_cutover** | **int** | | [optional] -**owner_name** | **str** | | [optional] -**n_lagging_machines** | **int** | | [optional] -**n_active_target_machines** | **int** | | [optional] -**n_test_machines** | **int** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureUserReports.md b/docs/CloudEndureUserReports.md deleted file mode 100644 index 449747ba5..000000000 --- a/docs/CloudEndureUserReports.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureUserReports - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | [**list[CloudEndureUserReport]**](CloudEndureUserReport.md) | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureUsersAndRoles.md b/docs/CloudEndureUsersAndRoles.md deleted file mode 100644 index 585266cd3..000000000 --- a/docs/CloudEndureUsersAndRoles.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureUsersAndRoles - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | **list[object]** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureUsersList.md b/docs/CloudEndureUsersList.md deleted file mode 100644 index 5f92f45ad..000000000 --- a/docs/CloudEndureUsersList.md +++ /dev/null @@ -1,9 +0,0 @@ -# CloudEndureUsersList - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**items** | [**list[CloudEndureUser]**](CloudEndureUser.md) | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudEndureVCenterSubnet.md b/docs/CloudEndureVCenterSubnet.md deleted file mode 100644 index 41dd09b1c..000000000 --- a/docs/CloudEndureVCenterSubnet.md +++ /dev/null @@ -1,10 +0,0 @@ -# CloudEndureVCenterSubnet - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**netmask** | **str** | | [optional] -**ip_address** | **str** | | [optional] - -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) - diff --git a/docs/CloudsList.md b/docs/CloudsList.md new file mode 100644 index 000000000..ad2803dd3 --- /dev/null +++ b/docs/CloudsList.md @@ -0,0 +1,11 @@ +# CloudsList + +A collection of Cloud objects. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[Cloud]**](Cloud.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ComputeLocation.md b/docs/ComputeLocation.md new file mode 100644 index 000000000..b4adb4fbe --- /dev/null +++ b/docs/ComputeLocation.md @@ -0,0 +1,12 @@ +# ComputeLocation + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**is_encryption_supported** | **bool** | | [optional] +**location_id** | **str** | | [optional] +**name** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Configurations.md b/docs/Configurations.md new file mode 100644 index 000000000..b819a20d6 --- /dev/null +++ b/docs/Configurations.md @@ -0,0 +1,12 @@ +# Configurations + +Configurations name and value +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | [optional] +**value** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ConfigurationsList.md b/docs/ConfigurationsList.md new file mode 100644 index 000000000..b3f5a5196 --- /dev/null +++ b/docs/ConfigurationsList.md @@ -0,0 +1,11 @@ +# ConfigurationsList + +Configurations name and value list. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[Configurations]**](Configurations.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/DefaultApi.md b/docs/DefaultApi.md index 83eaa43ec..00b06066b 100644 --- a/docs/DefaultApi.md +++ b/docs/DefaultApi.md @@ -1,4 +1,4 @@ -# cloudendure_api.DefaultApi +# cloudendure.DefaultApi All URIs are relative to *https://console.cloudendure.com/api/latest* @@ -6,42 +6,54 @@ Method | HTTP request | Description ------------- | ------------- | ------------- [**accounts_account_id_access_get**](DefaultApi.md#accounts_account_id_access_get) | **GET** /accounts/{accountId}/access | get a temporary token by email [**extended_account_info_get**](DefaultApi.md#extended_account_info_get) | **GET** /extendedAccountInfo | Returns the extended current account information. -[**projects_assign_users_post**](DefaultApi.md#projects_assign_users_post) | **POST** /projects/assignUsers | todo +[**projects_assign_users_post**](DefaultApi.md#projects_assign_users_post) | **POST** /projects/assignUsers | Assign User [**projects_project_id_audit_log_get**](DefaultApi.md#projects_project_id_audit_log_get) | **GET** /projects/{projectId}/auditLog | Get audit log -[**projects_project_id_storage_get**](DefaultApi.md#projects_project_id_storage_get) | **GET** /projects/{projectId}/storage | project's storage -[**projects_remove_users_post**](DefaultApi.md#projects_remove_users_post) | **POST** /projects/removeUsers | todo +[**projects_project_id_machines_machine_id_force_rescan_post**](DefaultApi.md#projects_project_id_machines_machine_id_force_rescan_post) | **POST** /projects/{projectId}/machines/{machineId}/forceRescan | Force rescan of machine volumes. +[**projects_project_id_storage_get**](DefaultApi.md#projects_project_id_storage_get) | **GET** /projects/{projectId}/storage | project's storage +[**projects_remove_users_post**](DefaultApi.md#projects_remove_users_post) | **POST** /projects/removeUsers | Remove User [**replace_api_token_post**](DefaultApi.md#replace_api_token_post) | **POST** /replaceApiToken | Replaces API token [**set_password_post**](DefaultApi.md#set_password_post) | **POST** /setPassword | Set password for invited user [**users_assign_roles_post**](DefaultApi.md#users_assign_roles_post) | **POST** /users/assignRoles | Add roles to users [**users_post**](DefaultApi.md#users_post) | **POST** /users | Create a new User -[**users_revoke_roles_post**](DefaultApi.md#users_revoke_roles_post) | **POST** /users/revokeRoles | Add roles to users +[**users_revoke_roles_post**](DefaultApi.md#users_revoke_roles_post) | **POST** /users/revokeRoles | Revoke roles from users + # **accounts_account_id_access_get** -> object accounts_account_id_access_get(account_id, username) +> InlineResponse2002 accounts_account_id_access_get(account_id, username) get a temporary token by email get a temporary token by email. Available for account owner when SSO is used ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import default_api +from cloudendure.model.inline_response2002 import InlineResponse2002 from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.DefaultApi() -account_id = 'account_id_example' # str | -username = 'username_example' # str | - -try: - # get a temporary token by email - api_response = api_instance.accounts_account_id_access_get(account_id, username) - pprint(api_response) -except ApiException as e: - print("Exception when calling DefaultApi->accounts_account_id_access_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = default_api.DefaultApi(api_client) + account_id = "accountId_example" # str | + username = "username_example" # str | + + # example passing only required values which don't have defaults set + try: + # get a temporary token by email + api_response = api_instance.accounts_account_id_access_get(account_id, username) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling DefaultApi->accounts_account_id_access_get: %s\n" % e) ``` ### Parameters @@ -53,7 +65,7 @@ Name | Type | Description | Notes ### Return type -**object** +[**InlineResponse2002**](InlineResponse2002.md) ### Authorization @@ -64,30 +76,45 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Request was processed. A one-time, time-limited token will be sent by email if conditions were met. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **extended_account_info_get** -> CloudEndureExtendedAccountInfo extended_account_info_get() +> ExtendedAccountInfo extended_account_info_get() Returns the extended current account information. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import default_api +from cloudendure.model.extended_account_info import ExtendedAccountInfo from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.DefaultApi() - -try: - # Returns the extended current account information. - api_response = api_instance.extended_account_info_get() - pprint(api_response) -except ApiException as e: - print("Exception when calling DefaultApi->extended_account_info_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = default_api.DefaultApi(api_client) + + # example, this endpoint has no required or optional parameters + try: + # Returns the extended current account information. + api_response = api_instance.extended_account_info_get() + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling DefaultApi->extended_account_info_get: %s\n" % e) ``` ### Parameters @@ -95,7 +122,7 @@ This endpoint does not need any parameter. ### Return type -[**CloudEndureExtendedAccountInfo**](CloudEndureExtendedAccountInfo.md) +[**ExtendedAccountInfo**](ExtendedAccountInfo.md) ### Authorization @@ -106,39 +133,63 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information retrieved successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_assign_users_post** -> projects_assign_users_post(body) +> projects_assign_users_post(projects_and_users) -todo +Assign User -todo +Assign User to Project ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import default_api +from cloudendure.model.projects_and_users import ProjectsAndUsers from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.DefaultApi() -body = cloudendure_api.CloudEndureProjectsAndUsers() # CloudEndureProjectsAndUsers | - -try: - # todo - api_instance.projects_assign_users_post(body) -except ApiException as e: - print("Exception when calling DefaultApi->projects_assign_users_post: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = default_api.DefaultApi(api_client) + projects_and_users = ProjectsAndUsers( + items=[ + ProjectsAndUsersItems( + project_id="project_id_example", + user_ids=[ + "user_ids_example", + ], + ), + ], + ) # ProjectsAndUsers | + + # example passing only required values which don't have defaults set + try: + # Assign User + api_instance.projects_assign_users_post(projects_and_users) + except cloudendure.ApiException as e: + print("Exception when calling DefaultApi->projects_assign_users_post: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**CloudEndureProjectsAndUsers**](CloudEndureProjectsAndUsers.md)| | + **projects_and_users** | [**ProjectsAndUsers**](ProjectsAndUsers.md)| | ### Return type @@ -153,35 +204,60 @@ No authorization required - **Content-Type**: application/json - **Accept**: Not defined -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Users associated to Projects. | - | +**404** | Some of the Users or Projects do not exist. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_audit_log_get** -> CloudEndureAuditLog projects_project_id_audit_log_get(project_id, limit=limit, from_date_time=from_date_time, to_date_time=to_date_time, format=format) +> AuditLog projects_project_id_audit_log_get(project_id) Get audit log ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import default_api +from cloudendure.model.audit_log import AuditLog from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.DefaultApi() -project_id = 'project_id_example' # str | -limit = 56 # int | A number specifying how many entries to return. (optional) -from_date_time = '2013-10-20T19:20:30+01:00' # datetime | Used to limit the response to a specific date range. Must be used in conjunction with toDateTime param. (optional) -to_date_time = '2013-10-20T19:20:30+01:00' # datetime | Used to limit the response to a specific date range. Must be used in conjunction with fromDateTime param. (optional) -format = 'format_example' # str | (optional) - -try: - # Get audit log - api_response = api_instance.projects_project_id_audit_log_get(project_id, limit=limit, from_date_time=from_date_time, to_date_time=to_date_time, format=format) - pprint(api_response) -except ApiException as e: - print("Exception when calling DefaultApi->projects_project_id_audit_log_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = default_api.DefaultApi(api_client) + project_id = "projectId_example" # str | + limit = 1500 # int | A number specifying how many entries to return. (optional) if omitted the server will use the default value of 1500 + from_date_time = dateutil_parser('1970-01-01T00:00:00.00Z') # datetime | Used to limit the response to a specific date range. Must be used in conjunction with toDateTime param. (optional) + to_date_time = dateutil_parser('1970-01-01T00:00:00.00Z') # datetime | Used to limit the response to a specific date range. Must be used in conjunction with fromDateTime param. (optional) + format = "json" # str | (optional) if omitted the server will use the default value of "json" + + # example passing only required values which don't have defaults set + try: + # Get audit log + api_response = api_instance.projects_project_id_audit_log_get(project_id) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling DefaultApi->projects_project_id_audit_log_get: %s\n" % e) + + # example passing only required values which don't have defaults set + # and optional values + try: + # Get audit log + api_response = api_instance.projects_project_id_audit_log_get(project_id, limit=limit, from_date_time=from_date_time, to_date_time=to_date_time, format=format) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling DefaultApi->projects_project_id_audit_log_get: %s\n" % e) ``` ### Parameters @@ -189,14 +265,14 @@ except ApiException as e: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **project_id** | **str**| | - **limit** | **int**| A number specifying how many entries to return. | [optional] + **limit** | **int**| A number specifying how many entries to return. | [optional] if omitted the server will use the default value of 1500 **from_date_time** | **datetime**| Used to limit the response to a specific date range. Must be used in conjunction with toDateTime param. | [optional] **to_date_time** | **datetime**| Used to limit the response to a specific date range. Must be used in conjunction with fromDateTime param. | [optional] - **format** | **str**| | [optional] + **format** | **str**| | [optional] if omitted the server will use the default value of "json" ### Return type -[**CloudEndureAuditLog**](CloudEndureAuditLog.md) +[**AuditLog**](AuditLog.md) ### Authorization @@ -207,33 +283,111 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json, text/csv -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information retrieved successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **projects_project_id_machines_machine_id_force_rescan_post** +> projects_project_id_machines_machine_id_force_rescan_post(project_id, machine_id) + +Force rescan of machine volumes. + +### Example + +```python +import time +import cloudendure +from cloudendure.api import default_api +from cloudendure.model.error import Error +from pprint import pprint +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = default_api.DefaultApi(api_client) + project_id = "projectId_example" # str | + machine_id = "machineId_example" # str | + + # example passing only required values which don't have defaults set + try: + # Force rescan of machine volumes. + api_instance.projects_project_id_machines_machine_id_force_rescan_post(project_id, machine_id) + except cloudendure.ApiException as e: + print("Exception when calling DefaultApi->projects_project_id_machines_machine_id_force_rescan_post: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **project_id** | **str**| | + **machine_id** | **str**| | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Force rescan applied successfully. | - | +**400** | Force rescan unavailable for this machine. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_storage_get** -> CloudEndureProjectStorage projects_project_id_storage_get(project_id) +> ProjectStorage projects_project_id_storage_get(project_id) project's storage get project's storage usage (vCenter only) ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import default_api +from cloudendure.model.project_storage import ProjectStorage from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.DefaultApi() -project_id = 'project_id_example' # str | - -try: - # project's storage - api_response = api_instance.projects_project_id_storage_get(project_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling DefaultApi->projects_project_id_storage_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = default_api.DefaultApi(api_client) + project_id = "projectId_example" # str | + + # example passing only required values which don't have defaults set + try: + # project's storage + api_response = api_instance.projects_project_id_storage_get(project_id) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling DefaultApi->projects_project_id_storage_get: %s\n" % e) ``` ### Parameters @@ -244,7 +398,7 @@ Name | Type | Description | Notes ### Return type -[**CloudEndureProjectStorage**](CloudEndureProjectStorage.md) +[**ProjectStorage**](ProjectStorage.md) ### Authorization @@ -255,39 +409,63 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information retrieved successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_remove_users_post** -> projects_remove_users_post(body) +> projects_remove_users_post(projects_and_users) -todo +Remove User -todo +Remove User from Project ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import default_api +from cloudendure.model.projects_and_users import ProjectsAndUsers from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.DefaultApi() -body = cloudendure_api.CloudEndureProjectsAndUsers() # CloudEndureProjectsAndUsers | - -try: - # todo - api_instance.projects_remove_users_post(body) -except ApiException as e: - print("Exception when calling DefaultApi->projects_remove_users_post: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = default_api.DefaultApi(api_client) + projects_and_users = ProjectsAndUsers( + items=[ + ProjectsAndUsersItems( + project_id="project_id_example", + user_ids=[ + "user_ids_example", + ], + ), + ], + ) # ProjectsAndUsers | + + # example passing only required values which don't have defaults set + try: + # Remove User + api_instance.projects_remove_users_post(projects_and_users) + except cloudendure.ApiException as e: + print("Exception when calling DefaultApi->projects_remove_users_post: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**CloudEndureProjectsAndUsers**](CloudEndureProjectsAndUsers.md)| | + **projects_and_users** | [**ProjectsAndUsers**](ProjectsAndUsers.md)| | ### Return type @@ -302,32 +480,47 @@ No authorization required - **Content-Type**: application/json - **Accept**: Not defined -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Users dis-associated from Projects. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **replace_api_token_post** -> object replace_api_token_post() +> InlineResponse2001 replace_api_token_post() Replaces API token Replaces API token ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import default_api +from cloudendure.model.inline_response2001 import InlineResponse2001 from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.DefaultApi() - -try: - # Replaces API token - api_response = api_instance.replace_api_token_post() - pprint(api_response) -except ApiException as e: - print("Exception when calling DefaultApi->replace_api_token_post: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = default_api.DefaultApi(api_client) + + # example, this endpoint has no required or optional parameters + try: + # Replaces API token + api_response = api_instance.replace_api_token_post() + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling DefaultApi->replace_api_token_post: %s\n" % e) ``` ### Parameters @@ -335,7 +528,7 @@ This endpoint does not need any parameter. ### Return type -**object** +[**InlineResponse2001**](InlineResponse2001.md) ### Authorization @@ -346,37 +539,56 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | API replaced | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **set_password_post** -> set_password_post(body) +> set_password_post(set_password_params) Set password for invited user ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import default_api +from cloudendure.model.inline_object2 import InlineObject2 +from cloudendure.model.error import Error from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.DefaultApi() -body = NULL # object | set password token and new password - -try: - # Set password for invited user - api_instance.set_password_post(body) -except ApiException as e: - print("Exception when calling DefaultApi->set_password_post: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = default_api.DefaultApi(api_client) + set_password_params = InlineObject2( + token="token_example", + new_password="new_password_example", + ) # InlineObject2 | + + # example passing only required values which don't have defaults set + try: + # Set password for invited user + api_instance.set_password_post(set_password_params) + except cloudendure.ApiException as e: + print("Exception when calling DefaultApi->set_password_post: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**object**](object.md)| set password token and new password | + **set_password_params** | [**InlineObject2**](InlineObject2.md)| | ### Return type @@ -391,42 +603,69 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Password set | - | +**400** | Invalid password | - | +**401** | Invalid setPasswordToken | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **users_assign_roles_post** -> CloudEndureUsersList users_assign_roles_post(body) +> UsersList users_assign_roles_post(users_and_roles) Add roles to users ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import default_api +from cloudendure.model.users_and_roles import UsersAndRoles +from cloudendure.model.users_list import UsersList from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.DefaultApi() -body = cloudendure_api.CloudEndureUsersAndRoles() # CloudEndureUsersAndRoles | - -try: - # Add roles to users - api_response = api_instance.users_assign_roles_post(body) - pprint(api_response) -except ApiException as e: - print("Exception when calling DefaultApi->users_assign_roles_post: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = default_api.DefaultApi(api_client) + users_and_roles = UsersAndRoles( + items=[ + UsersAndRolesItems( + user_id="user_id_example", + roles=[ + "USER", + ], + ), + ], + ) # UsersAndRoles | + + # example passing only required values which don't have defaults set + try: + # Add roles to users + api_response = api_instance.users_assign_roles_post(users_and_roles) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling DefaultApi->users_assign_roles_post: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**CloudEndureUsersAndRoles**](CloudEndureUsersAndRoles.md)| | + **users_and_roles** | [**UsersAndRoles**](UsersAndRoles.md)| | ### Return type -[**CloudEndureUsersList**](CloudEndureUsersList.md) +[**UsersList**](UsersList.md) ### Authorization @@ -437,42 +676,61 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Changed Users. | - | +**404** | Some of the specified Users do not exist. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **users_post** -> CloudEndureUser users_post(body) +> User users_post(users_params) Create a new User ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import default_api +from cloudendure.model.user import User +from cloudendure.model.inline_object6 import InlineObject6 from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.DefaultApi() -body = NULL # object | - -try: - # Create a new User - api_response = api_instance.users_post(body) - pprint(api_response) -except ApiException as e: - print("Exception when calling DefaultApi->users_post: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = default_api.DefaultApi(api_client) + users_params = InlineObject6( + username="username_example", + ) # InlineObject6 | + + # example passing only required values which don't have defaults set + try: + # Create a new User + api_response = api_instance.users_post(users_params) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling DefaultApi->users_post: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**object**](object.md)| | + **users_params** | [**InlineObject6**](InlineObject6.md)| | ### Return type -[**CloudEndureUser**](CloudEndureUser.md) +[**User**](User.md) ### Authorization @@ -483,42 +741,68 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | User created | - | +**202** | User created | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **users_revoke_roles_post** -> CloudEndureUsersList users_revoke_roles_post(body) +> UsersList users_revoke_roles_post(users_and_roles) -Add roles to users +Revoke roles from users ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import default_api +from cloudendure.model.users_and_roles import UsersAndRoles +from cloudendure.model.users_list import UsersList from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.DefaultApi() -body = cloudendure_api.CloudEndureUsersAndRoles() # CloudEndureUsersAndRoles | - -try: - # Add roles to users - api_response = api_instance.users_revoke_roles_post(body) - pprint(api_response) -except ApiException as e: - print("Exception when calling DefaultApi->users_revoke_roles_post: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = default_api.DefaultApi(api_client) + users_and_roles = UsersAndRoles( + items=[ + UsersAndRolesItems( + user_id="user_id_example", + roles=[ + "USER", + ], + ), + ], + ) # UsersAndRoles | + + # example passing only required values which don't have defaults set + try: + # Revoke roles from users + api_response = api_instance.users_revoke_roles_post(users_and_roles) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling DefaultApi->users_revoke_roles_post: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**CloudEndureUsersAndRoles**](CloudEndureUsersAndRoles.md)| | + **users_and_roles** | [**UsersAndRoles**](UsersAndRoles.md)| | ### Return type -[**CloudEndureUsersList**](CloudEndureUsersList.md) +[**UsersList**](UsersList.md) ### Authorization @@ -529,5 +813,11 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Changed Users. | - | +**404** | Some of the specified Users do not exist. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/docs/DiskConfig.md b/docs/DiskConfig.md new file mode 100644 index 000000000..418fda980 --- /dev/null +++ b/docs/DiskConfig.md @@ -0,0 +1,15 @@ +# DiskConfig + +AWS only. Replicator and/or Target machine disk properties. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | **str** | The type of disk to allocate in the target machine. COPY_ORIGIN will use the source setting. | +**name** | **str** | Disk name as appears in the source machine object. | +**actual_type** | **str** | The actual disk type in case of type is DEFAULT | [optional] +**iops** | **int** | | [optional] +**throughput** | **int** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/DynamicConfiguration.md b/docs/DynamicConfiguration.md new file mode 100644 index 000000000..f5a75c50d --- /dev/null +++ b/docs/DynamicConfiguration.md @@ -0,0 +1,10 @@ +# DynamicConfiguration + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**throttling_bytes_per_second** | **int** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Error.md b/docs/Error.md new file mode 100644 index 000000000..a05aa6265 --- /dev/null +++ b/docs/Error.md @@ -0,0 +1,11 @@ +# Error + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**message** | **str** | | [optional] +**code** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ExtendedAccountInfo.md b/docs/ExtendedAccountInfo.md new file mode 100644 index 000000000..7e2377a44 --- /dev/null +++ b/docs/ExtendedAccountInfo.md @@ -0,0 +1,19 @@ +# ExtendedAccountInfo + +Returns all info relevant for user UI initialization +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**account** | [**Account**](Account.md) | | [optional] +**clouds** | [**CloudsList**](CloudsList.md) | | [optional] +**generic_region** | [**Region**](Region.md) | | [optional] +**date_time** | [**Time**](Time.md) | | [optional] +**is_newly_registered** | **bool** | | [optional] +**user** | [**User**](User.md) | | [optional] +**projects** | [**ProjectsList**](ProjectsList.md) | | [optional] +**is_uefi_enabled** | **bool** | | [optional] +**replication_configurations** | [**ReplicationConfigurationList**](ReplicationConfigurationList.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/GcpMachinesFinanceData.md b/docs/GcpMachinesFinanceData.md new file mode 100644 index 000000000..2eb306d2a --- /dev/null +++ b/docs/GcpMachinesFinanceData.md @@ -0,0 +1,18 @@ +# GcpMachinesFinanceData + +GCP finance data +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**gcp_project_name** | **str** | | [optional] +**machine_name** | **str** | | [optional] +**number_of_cores** | **int** | | [optional] +**creation_time** | **datetime** | | [optional] +**is_preemptible** | **bool** | | [optional] +**has_gpu** | **bool** | | [optional] +**machine_id** | **str** | | [optional] +**ce_project_name** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/IdentityProviderRedirectResponse.md b/docs/IdentityProviderRedirectResponse.md new file mode 100644 index 000000000..067324396 --- /dev/null +++ b/docs/IdentityProviderRedirectResponse.md @@ -0,0 +1,10 @@ +# IdentityProviderRedirectResponse + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**saml_redirect** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/InitializationStep.md b/docs/InitializationStep.md new file mode 100644 index 000000000..fc0184f89 --- /dev/null +++ b/docs/InitializationStep.md @@ -0,0 +1,14 @@ +# InitializationStep + +A state in the process if initiating replication. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**status** | **str** | | [optional] +**message** | **str** | | [optional] +**update_date_time** | **datetime** | | [optional] +**name** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/InlineObject.md b/docs/InlineObject.md new file mode 100644 index 000000000..3636d4ea6 --- /dev/null +++ b/docs/InlineObject.md @@ -0,0 +1,11 @@ +# InlineObject + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**new_password** | **str** | | +**old_password** | **str** | | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/InlineObject1.md b/docs/InlineObject1.md new file mode 100644 index 000000000..ca03fa006 --- /dev/null +++ b/docs/InlineObject1.md @@ -0,0 +1,16 @@ +# InlineObject1 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**username** | **str** | | [optional] +**login_token** | **str** | | [optional] +**user_api_token** | **str** | | [optional] +**agent_installation_token** | **str** | | [optional] +**password** | **str** | | [optional] +**account_identifier** | **str** | | [optional] +**google_oauth_code** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/InlineObject10.md b/docs/InlineObject10.md new file mode 100644 index 000000000..4662ea95f --- /dev/null +++ b/docs/InlineObject10.md @@ -0,0 +1,12 @@ +# InlineObject10 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**recovery_plan_id** | **str** | | +**execution_mode** | **str** | | +**point_in_time_id** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/InlineObject2.md b/docs/InlineObject2.md new file mode 100644 index 000000000..db57512bd --- /dev/null +++ b/docs/InlineObject2.md @@ -0,0 +1,11 @@ +# InlineObject2 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**token** | **str** | | [optional] +**new_password** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/InlineObject3.md b/docs/InlineObject3.md new file mode 100644 index 000000000..71a1bb229 --- /dev/null +++ b/docs/InlineObject3.md @@ -0,0 +1,10 @@ +# InlineObject3 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**machine_ids** | **[str]** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/InlineObject4.md b/docs/InlineObject4.md new file mode 100644 index 000000000..8a9e79489 --- /dev/null +++ b/docs/InlineObject4.md @@ -0,0 +1,11 @@ +# InlineObject4 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**machine_ids** | **[str]** | | [optional] +**destination_project_id** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/InlineObject5.md b/docs/InlineObject5.md new file mode 100644 index 000000000..68480fd2b --- /dev/null +++ b/docs/InlineObject5.md @@ -0,0 +1,10 @@ +# InlineObject5 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**replica_ids** | **[str]** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/InlineObject6.md b/docs/InlineObject6.md new file mode 100644 index 000000000..ebe93cbf4 --- /dev/null +++ b/docs/InlineObject6.md @@ -0,0 +1,10 @@ +# InlineObject6 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**username** | **str** | | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/InlineObject7.md b/docs/InlineObject7.md new file mode 100644 index 000000000..a0df2d9d4 --- /dev/null +++ b/docs/InlineObject7.md @@ -0,0 +1,11 @@ +# InlineObject7 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**machine_ids** | **[str]** | | [optional] +**move_vmdks** | **bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/InlineObject8.md b/docs/InlineObject8.md new file mode 100644 index 000000000..77a0f1605 --- /dev/null +++ b/docs/InlineObject8.md @@ -0,0 +1,10 @@ +# InlineObject8 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**machine_ids** | **[str]** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/InlineObject9.md b/docs/InlineObject9.md new file mode 100644 index 000000000..44fc5911c --- /dev/null +++ b/docs/InlineObject9.md @@ -0,0 +1,10 @@ +# InlineObject9 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**machine_ids** | **[str]** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/InlineResponse200.md b/docs/InlineResponse200.md new file mode 100644 index 000000000..b7126ae8d --- /dev/null +++ b/docs/InlineResponse200.md @@ -0,0 +1,10 @@ +# InlineResponse200 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | **[str]** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/InlineResponse2001.md b/docs/InlineResponse2001.md new file mode 100644 index 000000000..bf60aa4a8 --- /dev/null +++ b/docs/InlineResponse2001.md @@ -0,0 +1,10 @@ +# InlineResponse2001 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**api_token** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/InlineResponse2002.md b/docs/InlineResponse2002.md new file mode 100644 index 000000000..5ccebfc8a --- /dev/null +++ b/docs/InlineResponse2002.md @@ -0,0 +1,10 @@ +# InlineResponse2002 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**message** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Job.md b/docs/Job.md new file mode 100644 index 000000000..ee45226ff --- /dev/null +++ b/docs/Job.md @@ -0,0 +1,19 @@ +# Job + +An asynchoronous job running in the backend. A single job can run at any given time for a specific project. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**status** | **str** | | [optional] +**participating_machines** | **[str]** | | [optional] +**log** | [**[JobLog]**](JobLog.md) | | [optional] +**type** | **str** | | [optional] +**end_date_time** | **datetime** | | [optional] +**target_machines** | [**[JobTargetMachine]**](JobTargetMachine.md) | | [optional] +**creation_date_time** | **datetime** | | [optional] +**id** | **str** | | [optional] +**initiated_by** | **str** | username of user who initiated the job | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/JobLog.md b/docs/JobLog.md new file mode 100644 index 000000000..011bf030e --- /dev/null +++ b/docs/JobLog.md @@ -0,0 +1,11 @@ +# JobLog + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**message** | **str** | | [optional] +**log_date_time** | **datetime** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/JobTargetMachine.md b/docs/JobTargetMachine.md new file mode 100644 index 000000000..1e9b7f591 --- /dev/null +++ b/docs/JobTargetMachine.md @@ -0,0 +1,15 @@ +# JobTargetMachine + +Contains info about target machines of a job +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**target_status_change_timestamp** | **datetime** | | [optional] [readonly] +**target_status** | **str** | Cloud healthcheck string | [optional] [readonly] +**target_instance_id** | **str** | Target machine ID in the target environment. | [optional] [readonly] +**snapshot_time** | **datetime** | | [optional] [readonly] +**source_machine_id** | **str** | The ID of the source machine for this target machine. | [optional] [readonly] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/JobsList.md b/docs/JobsList.md new file mode 100644 index 000000000..266bafd29 --- /dev/null +++ b/docs/JobsList.md @@ -0,0 +1,11 @@ +# JobsList + +A collection of Job objects. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[Job]**](Job.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/KeyValueList.md b/docs/KeyValueList.md new file mode 100644 index 000000000..42be8fdb7 --- /dev/null +++ b/docs/KeyValueList.md @@ -0,0 +1,10 @@ +# KeyValueList + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[ReplicationConfigurationReplicationTags]**](ReplicationConfigurationReplicationTags.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/LaunchMachinesParameters.md b/docs/LaunchMachinesParameters.md new file mode 100644 index 000000000..f26072db6 --- /dev/null +++ b/docs/LaunchMachinesParameters.md @@ -0,0 +1,13 @@ +# LaunchMachinesParameters + +The machine and pointInTime IDs to start replica creation for. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**launch_type** | **str** | | +**items** | [**[MachineAndPointInTime]**](MachineAndPointInTime.md) | | [optional] +**debug_scripts** | [**LaunchMachinesParametersDebugScripts**](LaunchMachinesParametersDebugScripts.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/LaunchMachinesParametersDebugScripts.md b/docs/LaunchMachinesParametersDebugScripts.md new file mode 100644 index 000000000..6ce8f26d6 --- /dev/null +++ b/docs/LaunchMachinesParametersDebugScripts.md @@ -0,0 +1,12 @@ +# LaunchMachinesParametersDebugScripts + +For internal use. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**postboot** | **[str]** | | [optional] +**preboot** | **[str]** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/License.md b/docs/License.md new file mode 100644 index 000000000..b48902bf8 --- /dev/null +++ b/docs/License.md @@ -0,0 +1,17 @@ +# License + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**count** | **int** | The total number of licenses. | [optional] +**duration_from_start_of_use** | **str** | Validity period for a a single license from the time of agent installation. | [optional] +**used** | **int** | How many licenses have already been consumed. | [optional] [readonly] +**features** | [**LicenseFeatures**](LicenseFeatures.md) | | [optional] +**expiration_date_time** | **datetime** | | [optional] +**ce_admin_properties** | [**LicenseCeAdminProperties**](LicenseCeAdminProperties.md) | | [optional] +**type** | **str** | License type. DR licenses can be moved from one machine to another. Migration licenses are consumed upon installation. | [optional] +**id** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/LicenseCeAdminProperties.md b/docs/LicenseCeAdminProperties.md new file mode 100644 index 000000000..c06c88a07 --- /dev/null +++ b/docs/LicenseCeAdminProperties.md @@ -0,0 +1,14 @@ +# LicenseCeAdminProperties + +For internal use. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**project_ids** | **[str]** | | [optional] +**account_ids** | **[str]** | | [optional] +**comments** | **str** | | [optional] +**history** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/LicenseFeatures.md b/docs/LicenseFeatures.md new file mode 100644 index 000000000..27025992d --- /dev/null +++ b/docs/LicenseFeatures.md @@ -0,0 +1,11 @@ +# LicenseFeatures + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**pit** | **bool** | | [optional] +**dr_tier2** | **bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/LicenseList.md b/docs/LicenseList.md new file mode 100644 index 000000000..09c0e6e8a --- /dev/null +++ b/docs/LicenseList.md @@ -0,0 +1,11 @@ +# LicenseList + +A collection of License objects. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[License]**](License.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/LicensingApi.md b/docs/LicensingApi.md index 12d8de9d4..3c41181cf 100644 --- a/docs/LicensingApi.md +++ b/docs/LicensingApi.md @@ -1,4 +1,4 @@ -# cloudendure_api.LicensingApi +# cloudendure.LicensingApi All URIs are relative to *https://console.cloudendure.com/api/latest* @@ -7,44 +7,56 @@ Method | HTTP request | Description [**licenses_get**](LicensingApi.md#licenses_get) | **GET** /licenses | List Licenses [**licenses_license_id_get**](LicensingApi.md#licenses_license_id_get) | **GET** /licenses/{licenseId} | Get License + # **licenses_get** -> CloudEndureLicenseList licenses_get(offset=offset, limit=limit) +> LicenseList licenses_get() List Licenses Returns the list of licenses currently associated with this user. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import licensing_api +from cloudendure.model.license_list import LicenseList from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.LicensingApi() -offset = 56 # int | With which item to start (0 based). (optional) -limit = 56 # int | A number specifying how many entries to return. (optional) - -try: - # List Licenses - api_response = api_instance.licenses_get(offset=offset, limit=limit) - pprint(api_response) -except ApiException as e: - print("Exception when calling LicensingApi->licenses_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = licensing_api.LicensingApi(api_client) + offset = 0 # int | With which item to start (0 based). (optional) if omitted the server will use the default value of 0 + limit = 1500 # int | A number specifying how many entries to return. (optional) if omitted the server will use the default value of 1500 + + # example passing only required values which don't have defaults set + # and optional values + try: + # List Licenses + api_response = api_instance.licenses_get(offset=offset, limit=limit) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling LicensingApi->licenses_get: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **offset** | **int**| With which item to start (0 based). | [optional] - **limit** | **int**| A number specifying how many entries to return. | [optional] + **offset** | **int**| With which item to start (0 based). | [optional] if omitted the server will use the default value of 0 + **limit** | **int**| A number specifying how many entries to return. | [optional] if omitted the server will use the default value of 1500 ### Return type -[**CloudEndureLicenseList**](CloudEndureLicenseList.md) +[**LicenseList**](LicenseList.md) ### Authorization @@ -55,31 +67,46 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information retrieved successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **licenses_license_id_get** -> CloudEndureLicense licenses_license_id_get(license_id) +> License licenses_license_id_get(license_id) Get License ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import licensing_api +from cloudendure.model.license import License from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.LicensingApi() -license_id = 'license_id_example' # str | - -try: - # Get License - api_response = api_instance.licenses_license_id_get(license_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling LicensingApi->licenses_license_id_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = licensing_api.LicensingApi(api_client) + license_id = "licenseId_example" # str | + + # example passing only required values which don't have defaults set + try: + # Get License + api_response = api_instance.licenses_license_id_get(license_id) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling LicensingApi->licenses_license_id_get: %s\n" % e) ``` ### Parameters @@ -90,7 +117,7 @@ Name | Type | Description | Notes ### Return type -[**CloudEndureLicense**](CloudEndureLicense.md) +[**License**](License.md) ### Authorization @@ -101,5 +128,10 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information retrieved successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/docs/ListUsersResult.md b/docs/ListUsersResult.md new file mode 100644 index 000000000..5104c3bd5 --- /dev/null +++ b/docs/ListUsersResult.md @@ -0,0 +1,15 @@ +# ListUsersResult + +Configurations name and value +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**username** | **str** | | [optional] +**is_account_owner** | **bool** | | [optional] +**state** | **str** | | [optional] +**version** | **str** | | [optional] +**account_uuid** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ListUsersResults.md b/docs/ListUsersResults.md new file mode 100644 index 000000000..2c1879b15 --- /dev/null +++ b/docs/ListUsersResults.md @@ -0,0 +1,11 @@ +# ListUsersResults + +Configurations name and value list. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[ListUsersResult]**](ListUsersResult.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/LogicalLocation.md b/docs/LogicalLocation.md new file mode 100644 index 000000000..94965fe00 --- /dev/null +++ b/docs/LogicalLocation.md @@ -0,0 +1,11 @@ +# LogicalLocation + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**location_id** | **str** | | [optional] +**name** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Machine.md b/docs/Machine.md new file mode 100644 index 000000000..bdcfd961f --- /dev/null +++ b/docs/Machine.md @@ -0,0 +1,23 @@ +# Machine + +A machine on which a CloudEndure agent has been installed (Replication source). +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**original_source_cloud_id** | **str** | The cloud id of the source machine from which a machine was originally replicated from. | [optional] [readonly] +**source_properties** | [**MachineSourceProperties**](MachineSourceProperties.md) | | [optional] +**replication_info** | [**MachineReplicationInfo**](MachineReplicationInfo.md) | | [optional] +**license** | [**MachineLicense**](MachineLicense.md) | | [optional] +**tags** | **[str]** | | [optional] +**restore_servers** | **[str]** | RestoreServer IDs | [optional] +**from_point_in_time** | [**PointInTime**](PointInTime.md) | | [optional] +**replication_status** | **str** | Is replication started, paused or stopped | [optional] +**replica** | **str** | The ID of the target machine that has been previously launched, if such exists. | [optional] +**id** | **str** | | [optional] +**replication_configuration** | [**MachineReplicationConfiguration**](MachineReplicationConfiguration.md) | | [optional] +**life_cycle** | [**MachineLifeCycle**](MachineLifeCycle.md) | | [optional] +**is_agent_installed** | **bool** | Whether a CloudEndure agent is currently installed on this machine. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/MachineAndPathAndPointInTime.md b/docs/MachineAndPathAndPointInTime.md new file mode 100644 index 000000000..eb923c824 --- /dev/null +++ b/docs/MachineAndPathAndPointInTime.md @@ -0,0 +1,13 @@ +# MachineAndPathAndPointInTime + +Machine ID, path and pointInTime ID +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**machine_id** | **str** | | +**file_path** | **str** | | +**point_in_time_id** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CloudEndureMachineAndPointInTime.md b/docs/MachineAndPointInTime.md similarity index 53% rename from docs/CloudEndureMachineAndPointInTime.md rename to docs/MachineAndPointInTime.md index d335bf69c..e1d904c00 100644 --- a/docs/CloudEndureMachineAndPointInTime.md +++ b/docs/MachineAndPointInTime.md @@ -1,10 +1,12 @@ -# CloudEndureMachineAndPointInTime +# MachineAndPointInTime +Machine ID and pointInTime ID ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**machine_id** | **str** | A source machine to launch a target machine for. | -**point_in_time_id** | **str** | The ID of the pointInTime to launch a target machine from. If omitted, CloudEndure will use the latest pointInTime. | [optional] +**machine_id** | **str** | A source machine to launch a target machine for. | +**point_in_time_id** | **str** | The ID of the pointInTime to launch a target machine from. If omitted, CloudEndure will use the latest pointInTime. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) diff --git a/docs/MachineLicense.md b/docs/MachineLicense.md new file mode 100644 index 000000000..006e65a9b --- /dev/null +++ b/docs/MachineLicense.md @@ -0,0 +1,12 @@ +# MachineLicense + +Detailed machine license consumption information. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**start_of_use_date_time** | **datetime** | Timestamp for when a license was consumed. | [optional] +**license_id** | **str** | ID for the License object consumed by this machine. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/MachineLifeCycle.md b/docs/MachineLifeCycle.md new file mode 100644 index 000000000..17355ac56 --- /dev/null +++ b/docs/MachineLifeCycle.md @@ -0,0 +1,20 @@ +# MachineLifeCycle + +Detailed machine lifecycle information. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**last_test_launch_date_time** | **datetime** | | [optional] +**last_recovery_job_id** | **str** | | [optional] +**last_recovery_launch_date_time** | **datetime** | | [optional] +**last_target_health_checks_passed_date_time** | **datetime** | | [optional] +**connection_established_date_time** | **datetime** | Timestamp of the initial CloudEndure agent access to the CloudEndure Service Manager event. | [optional] +**agent_installation_date_time** | **datetime** | Timestamp of the initial CloudEndure agent installation event. | [optional] +**last_target_health_checks_passed_job_id** | **str** | | [optional] +**last_cutover_job_id** | **str** | | [optional] +**last_test_launch_job_id** | **str** | | [optional] +**last_cutover_date_time** | **datetime** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/MachineReplicationConfiguration.md b/docs/MachineReplicationConfiguration.md new file mode 100644 index 000000000..e82819a49 --- /dev/null +++ b/docs/MachineReplicationConfiguration.md @@ -0,0 +1,41 @@ +# MachineReplicationConfiguration + +Controls the behaviour of the replication servers, as well as the network communication from the CloudEndure agent. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**volume_encryption_key** | **str** | AWS only. ARN to private key for Volume Encryption. Possible values can be fetched from the Region object. | [optional] +**replication_tags** | [**[ReplicationConfigurationReplicationTags]**](ReplicationConfigurationReplicationTags.md) | AWS only. Tags that will be applied to every cloud resource created in the CloudEndure Staging Area. | [optional] +**disable_public_ip** | **bool** | When private IP is used, do not allocate public IP for replication server | [optional] +**cost_optimized_burst_balance_delta_threshold** | **int** | when using cost optimized disk type, threshold of delta between measurments to move to default | [optional] +**subnet_host_project** | **str** | GCP only. Host project of cross project network subnet. | [optional] +**no_rescan** | **bool** | | [optional] [readonly] +**replication_software_download_source** | **str** | | [optional] +**cost_optimized_sc1_volumes_throughput_window_size_minutes** | **int** | when using cost optimized disk type, size of window for sc1 volumes througput measurments | [optional] +**replication_server_type** | **str** | | [optional] +**cost_optimized_burst_balance_window_size_minutes** | **int** | when using cost optimized disk type, size of window for burst balance measurments | [optional] +**use_low_cost_disks** | **bool** | use low cost disks for replication whenever possible | [optional] +**compute_location_id** | **str** | | [optional] +**subnet_id** | **str** | Subnet where replication servers will be created. Possible values can be fetched from the Region object. | [optional] +**logical_location_id** | **str** | vcenter = vmFolder | [optional] +**cost_optimized_default_volumes_throughput_window_size_minutes** | **int** | when using cost optimized disk type, size of window for default volumes througput measurments | [optional] +**bandwidth_throttling** | **int** | Mbps to use for Data Replication (zero means no throttling). | [optional] +**cost_optimized_burst_balance_threshold** | **int** | when using cost optimized disk type, threshold of burst balance under which to move to default | [optional] +**use_dedicated_server** | **bool** | | [optional] +**zone** | **str** | Relevant for GCP and Azure ARM. The Zone to replicate into. | [optional] +**replicator_security_group_ids** | **[str]** | AWS only. The security groups that will be applied to the replication servers. Possible values can be fetched from the Region object. | [optional] +**use_private_ip** | **bool** | Should the CloudEndure agent access the replication server using its private IP address. | [optional] +**auto_disk_detection** | **bool** | | [optional] [readonly] +**failback_client_id** | **str** | | [optional] [readonly] +**proxy_url** | **str** | The full URI for a proxy (schema, username, password, domain, port) if required for the CloudEndure agent. | [optional] +**volume_encryption_allowed** | **bool** | | [optional] +**object_storage_location** | **str** | bucket in aws | [optional] +**archiving_enabled** | **bool** | | [optional] +**converter_type** | **str** | | [optional] +**storage_location_id** | **str** | | [optional] +**use_cost_optimized_disk_type** | **bool** | use cost optimized disk type for replication | [optional] +**staging_disks** | [**[DiskConfig]**](DiskConfig.md) | Replicator disk properties. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/MachineReplicationInfo.md b/docs/MachineReplicationInfo.md new file mode 100644 index 000000000..a5bee019a --- /dev/null +++ b/docs/MachineReplicationInfo.md @@ -0,0 +1,20 @@ +# MachineReplicationInfo + +Detailed information on the state of replication. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**rescanned_storage_bytes** | **int** | Amount of data rescanned (in Bytes). | [optional] +**backlogged_storage_bytes** | **int** | Amount of data requiring sync (in Bytes), that has not yet been sent. | [optional] +**failback_client_last_seen_date_time** | **datetime** | | [optional] +**last_consistency_date_time** | **datetime** | Timestamp of last disk replication consistency event. | [optional] +**next_consistency_estimated_date_time** | **datetime** | Timestamp of estimate for the next disk replication consistency event. | [optional] +**total_storage_bytes** | **int** | Total storage being replicated (in Bytes). | [optional] +**initiation_states** | [**MachineReplicationInfoInitiationStates**](MachineReplicationInfoInitiationStates.md) | | [optional] +**replicated_storage_bytes** | **int** | Amount of data already synced (in Bytes). | [optional] +**last_seen_date_time** | **datetime** | | [optional] +**last_scan_start_date_time** | **datetime** | Timestamp of last time a volume scan has started. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/MachineReplicationInfoInitiationStates.md b/docs/MachineReplicationInfoInitiationStates.md new file mode 100644 index 000000000..febd4c9db --- /dev/null +++ b/docs/MachineReplicationInfoInitiationStates.md @@ -0,0 +1,11 @@ +# MachineReplicationInfoInitiationStates + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[MachineReplicationInfoInitiationStatesItems]**](MachineReplicationInfoInitiationStatesItems.md) | A collection of replication initiation attempts in chronological order. | [optional] +**estimated_next_attempt_date_time** | **datetime** | In case replication is not currently active - An estimate on when its initiation will next be attempted. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/MachineReplicationInfoInitiationStatesItems.md b/docs/MachineReplicationInfoInitiationStatesItems.md new file mode 100644 index 000000000..11f202fc1 --- /dev/null +++ b/docs/MachineReplicationInfoInitiationStatesItems.md @@ -0,0 +1,11 @@ +# MachineReplicationInfoInitiationStatesItems + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**steps** | [**[InitializationStep]**](InitializationStep.md) | A collection of initiation steps in sequential order. | [optional] +**start_date_time** | **datetime** | The time stamp when this attempt commenced. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/MachineSnapshotCredits.md b/docs/MachineSnapshotCredits.md new file mode 100644 index 000000000..5ab9997d3 --- /dev/null +++ b/docs/MachineSnapshotCredits.md @@ -0,0 +1,10 @@ +# MachineSnapshotCredits + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**credits** | **int** | Mbps to use for Data Replication (zero means no throttling). | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/MachineSourceProperties.md b/docs/MachineSourceProperties.md new file mode 100644 index 000000000..d6b9bcf50 --- /dev/null +++ b/docs/MachineSourceProperties.md @@ -0,0 +1,20 @@ +# MachineSourceProperties + +Source machine properties. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | Machine name in the source environment. | [optional] +**installed_applications** | [**MachineSourcePropertiesInstalledApplications**](MachineSourcePropertiesInstalledApplications.md) | | [optional] +**disks** | [**[MachineSourcePropertiesDisks]**](MachineSourcePropertiesDisks.md) | Identified disks. | [optional] +**machine_cloud_state** | **str** | Machine current state in the source environment. | [optional] +**public_ips** | **[str]** | Static (non-ephemral) public IPs. On some clouds this also includes ephemeral IPs. | [optional] +**memory** | **int** | Available RAM (in Bytes). | [optional] +**os** | **str** | Running Operating System. | [optional] +**cpu** | [**[MachineSourcePropertiesCpu]**](MachineSourcePropertiesCpu.md) | Identified CPUs. | [optional] +**running_services** | [**MachineSourcePropertiesRunningServices**](MachineSourcePropertiesRunningServices.md) | | [optional] +**machine_cloud_id** | **str** | Machine ID in the source environment. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/MachineSourcePropertiesCpu.md b/docs/MachineSourcePropertiesCpu.md new file mode 100644 index 000000000..21ab97e6a --- /dev/null +++ b/docs/MachineSourcePropertiesCpu.md @@ -0,0 +1,11 @@ +# MachineSourcePropertiesCpu + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**cores** | **int** | Number of cores. | [optional] +**model_name** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/MachineSourcePropertiesDisks.md b/docs/MachineSourcePropertiesDisks.md new file mode 100644 index 000000000..d0c010dd1 --- /dev/null +++ b/docs/MachineSourcePropertiesDisks.md @@ -0,0 +1,12 @@ +# MachineSourcePropertiesDisks + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**is_protected** | **bool** | Is this disk currently being replicated by CloudEndure. | +**name** | **str** | | +**size** | **int** | Disk size (in Bytes). | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/MachineSourcePropertiesInstalledApplications.md b/docs/MachineSourcePropertiesInstalledApplications.md new file mode 100644 index 000000000..10254633c --- /dev/null +++ b/docs/MachineSourcePropertiesInstalledApplications.md @@ -0,0 +1,12 @@ +# MachineSourcePropertiesInstalledApplications + +Installed applications on source machine. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[MachineSourcePropertiesInstalledApplicationsItems]**](MachineSourcePropertiesInstalledApplicationsItems.md) | | [optional] +**last_updated_date_time** | **datetime** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/MachineSourcePropertiesInstalledApplicationsItems.md b/docs/MachineSourcePropertiesInstalledApplicationsItems.md new file mode 100644 index 000000000..e3f10cb23 --- /dev/null +++ b/docs/MachineSourcePropertiesInstalledApplicationsItems.md @@ -0,0 +1,10 @@ +# MachineSourcePropertiesInstalledApplicationsItems + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**application_name** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/MachineSourcePropertiesRunningServices.md b/docs/MachineSourcePropertiesRunningServices.md new file mode 100644 index 000000000..9877742c4 --- /dev/null +++ b/docs/MachineSourcePropertiesRunningServices.md @@ -0,0 +1,12 @@ +# MachineSourcePropertiesRunningServices + +Running services on source machine. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[MachineSourcePropertiesRunningServicesItems]**](MachineSourcePropertiesRunningServicesItems.md) | | [optional] +**last_updated_date_time** | **datetime** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/MachineSourcePropertiesRunningServicesItems.md b/docs/MachineSourcePropertiesRunningServicesItems.md new file mode 100644 index 000000000..32db0c816 --- /dev/null +++ b/docs/MachineSourcePropertiesRunningServicesItems.md @@ -0,0 +1,10 @@ +# MachineSourcePropertiesRunningServicesItems + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**service_name** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/MachineThrottleTimeSeconds.md b/docs/MachineThrottleTimeSeconds.md new file mode 100644 index 000000000..4da60cd3d --- /dev/null +++ b/docs/MachineThrottleTimeSeconds.md @@ -0,0 +1,10 @@ +# MachineThrottleTimeSeconds + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**credits** | **int** | time to throttle the machine in seconds | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/MachinesApi.md b/docs/MachinesApi.md index 5ef07272f..22a6d76b9 100644 --- a/docs/MachinesApi.md +++ b/docs/MachinesApi.md @@ -1,49 +1,65 @@ -# cloudendure_api.MachinesApi +# cloudendure.MachinesApi All URIs are relative to *https://console.cloudendure.com/api/latest* Method | HTTP request | Description ------------- | ------------- | ------------- -[**projects_project_id_machines_delete**](MachinesApi.md#projects_project_id_machines_delete) | **DELETE** /projects/{projectId}/machines | Uninstall agent +[**projects_project_id_machines_delete**](MachinesApi.md#projects_project_id_machines_delete) | **DELETE** /projects/{projectId}/machines | Uninstall multiple agents [**projects_project_id_machines_get**](MachinesApi.md#projects_project_id_machines_get) | **GET** /projects/{projectId}/machines | List Machines +[**projects_project_id_machines_machine_id_delete**](MachinesApi.md#projects_project_id_machines_machine_id_delete) | **DELETE** /projects/{projectId}/machines/{machineId} | Uninstall agent [**projects_project_id_machines_machine_id_get**](MachinesApi.md#projects_project_id_machines_machine_id_get) | **GET** /projects/{projectId}/machines/{machineId} | Get a specific machine. [**projects_project_id_machines_machine_id_patch**](MachinesApi.md#projects_project_id_machines_machine_id_patch) | **PATCH** /projects/{projectId}/machines/{machineId} | Update a machine. Accepts only Launch time updates. [**projects_project_id_machines_patch**](MachinesApi.md#projects_project_id_machines_patch) | **PATCH** /projects/{projectId}/machines | Batch-update multiple machines [**projects_project_id_replicas_replica_id_get**](MachinesApi.md#projects_project_id_replicas_replica_id_get) | **GET** /projects/{projectId}/replicas/{replicaId} | Get Target Machine + # **projects_project_id_machines_delete** -> projects_project_id_machines_delete(body, project_id) +> projects_project_id_machines_delete(project_id, machine_ids) -Uninstall agent +Uninstall multiple agents Stops replication and removes the cloudendure agent from the specified machines. All cloud artifacts associated with those machines with the exception of launched target machines are deleted. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import machines_api +from cloudendure.model.inline_object8 import InlineObject8 from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.MachinesApi() -body = NULL # object | The list of machine IDs to remove from the CloudEndure service. -project_id = 'project_id_example' # str | - -try: - # Uninstall agent - api_instance.projects_project_id_machines_delete(body, project_id) -except ApiException as e: - print("Exception when calling MachinesApi->projects_project_id_machines_delete: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = machines_api.MachinesApi(api_client) + project_id = "projectId_example" # str | + machine_ids = InlineObject8( + machine_ids=[ + "machine_ids_example", + ], + ) # InlineObject8 | + + # example passing only required values which don't have defaults set + try: + # Uninstall multiple agents + api_instance.projects_project_id_machines_delete(project_id, machine_ids) + except cloudendure.ApiException as e: + print("Exception when calling MachinesApi->projects_project_id_machines_delete: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**object**](object.md)| The list of machine IDs to remove from the CloudEndure service. | **project_id** | **str**| | + **machine_ids** | [**InlineObject8**](InlineObject8.md)| | ### Return type @@ -58,37 +74,61 @@ No authorization required - **Content-Type**: application/json - **Accept**: Not defined -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Machines removed from CloudEndure service. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_machines_get** -> CloudEndureMachinesList projects_project_id_machines_get(project_id, offset=offset, limit=limit, all=all, types=types) +> MachinesList projects_project_id_machines_get(project_id) List Machines Returns the list of all source machines in the Project (i.e. machines that have an Agent installed). ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import machines_api +from cloudendure.model.machines_list import MachinesList from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.MachinesApi() -project_id = 'project_id_example' # str | -offset = 56 # int | With which item to start (0 based). (optional) -limit = 56 # int | A number specifying how many entries to return. (optional) -all = true # bool | When set to false, returns only currently replicating machines. When set to true, returns all machines in the project regardless of replications status. machines are consuming/ have consumed licenses. Note that some license types are transferable and therefore once you remove the and set to true false, returns only currently replicating machines. When set to true, returns all machines in the project regardless of replications status. (optional) -types = 'types_example' # str | Use this url query param to control which machines are returned when doing GET. If you do not include the \\\"types\\\" query param, you will only get source machines (optional) - -try: - # List Machines - api_response = api_instance.projects_project_id_machines_get(project_id, offset=offset, limit=limit, all=all, types=types) - pprint(api_response) -except ApiException as e: - print("Exception when calling MachinesApi->projects_project_id_machines_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = machines_api.MachinesApi(api_client) + project_id = "projectId_example" # str | + offset = 0 # int | With which item to start (0 based). (optional) if omitted the server will use the default value of 0 + limit = 1500 # int | A number specifying how many entries to return. (optional) if omitted the server will use the default value of 1500 + all = False # bool | When set to false, returns only currently replicating machines. When set to true, returns all machines in the project regardless of replications status. machines are consuming/ have consumed licenses. Note that some license types are transferable and therefore once you remove the and set to true false, returns only currently replicating machines. When set to true, returns all machines in the project regardless of replications status. (optional) if omitted the server will use the default value of False + types = "types_example" # str | Use this url query param to control which machines are returned when doing GET. If you do not include the \\\"types\\\" query param, you will only get source machines (optional) + + # example passing only required values which don't have defaults set + try: + # List Machines + api_response = api_instance.projects_project_id_machines_get(project_id) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling MachinesApi->projects_project_id_machines_get: %s\n" % e) + + # example passing only required values which don't have defaults set + # and optional values + try: + # List Machines + api_response = api_instance.projects_project_id_machines_get(project_id, offset=offset, limit=limit, all=all, types=types) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling MachinesApi->projects_project_id_machines_get: %s\n" % e) ``` ### Parameters @@ -96,14 +136,14 @@ except ApiException as e: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **project_id** | **str**| | - **offset** | **int**| With which item to start (0 based). | [optional] - **limit** | **int**| A number specifying how many entries to return. | [optional] - **all** | **bool**| When set to false, returns only currently replicating machines. When set to true, returns all machines in the project regardless of replications status. machines are consuming/ have consumed licenses. Note that some license types are transferable and therefore once you remove the and set to true false, returns only currently replicating machines. When set to true, returns all machines in the project regardless of replications status. | [optional] + **offset** | **int**| With which item to start (0 based). | [optional] if omitted the server will use the default value of 0 + **limit** | **int**| A number specifying how many entries to return. | [optional] if omitted the server will use the default value of 1500 + **all** | **bool**| When set to false, returns only currently replicating machines. When set to true, returns all machines in the project regardless of replications status. machines are consuming/ have consumed licenses. Note that some license types are transferable and therefore once you remove the and set to true false, returns only currently replicating machines. When set to true, returns all machines in the project regardless of replications status. | [optional] if omitted the server will use the default value of False **types** | **str**| Use this url query param to control which machines are returned when doing GET. If you do not include the \\\"types\\\" query param, you will only get source machines | [optional] ### Return type -[**CloudEndureMachinesList**](CloudEndureMachinesList.md) +[**MachinesList**](MachinesList.md) ### Authorization @@ -114,32 +154,110 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information retrieved successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **projects_project_id_machines_machine_id_delete** +> projects_project_id_machines_machine_id_delete(project_id, machine_id) + +Uninstall agent + +Stops replication and removes the cloudendure agent from this machine. All cloud artifacts associated with those machines with the exception of launched target machine are deleted. + +### Example + +```python +import time +import cloudendure +from cloudendure.api import machines_api +from pprint import pprint +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = machines_api.MachinesApi(api_client) + project_id = "projectId_example" # str | + machine_id = "machineId_example" # str | + + # example passing only required values which don't have defaults set + try: + # Uninstall agent + api_instance.projects_project_id_machines_machine_id_delete(project_id, machine_id) + except cloudendure.ApiException as e: + print("Exception when calling MachinesApi->projects_project_id_machines_machine_id_delete: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **project_id** | **str**| | + **machine_id** | **str**| | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Machine removed from CloudEndure service. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_machines_machine_id_get** -> CloudEndureMachine projects_project_id_machines_machine_id_get(project_id, machine_id) +> Machine projects_project_id_machines_machine_id_get(project_id, machine_id) Get a specific machine. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import machines_api +from cloudendure.model.machine import Machine from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.MachinesApi() -project_id = 'project_id_example' # str | -machine_id = 'machine_id_example' # str | - -try: - # Get a specific machine. - api_response = api_instance.projects_project_id_machines_machine_id_get(project_id, machine_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling MachinesApi->projects_project_id_machines_machine_id_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = machines_api.MachinesApi(api_client) + project_id = "projectId_example" # str | + machine_id = "machineId_example" # str | + + # example passing only required values which don't have defaults set + try: + # Get a specific machine. + api_response = api_instance.projects_project_id_machines_machine_id_get(project_id, machine_id) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling MachinesApi->projects_project_id_machines_machine_id_get: %s\n" % e) ``` ### Parameters @@ -151,7 +269,7 @@ Name | Type | Description | Notes ### Return type -[**CloudEndureMachine**](CloudEndureMachine.md) +[**Machine**](Machine.md) ### Authorization @@ -162,46 +280,207 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information retrieved successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_machines_machine_id_patch** -> CloudEndureMachine projects_project_id_machines_machine_id_patch(body, project_id, machine_id) +> Machine projects_project_id_machines_machine_id_patch(project_id, machine_id, machine) Update a machine. Accepts only Launch time updates. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import machines_api +from cloudendure.model.machine import Machine from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.MachinesApi() -body = cloudendure_api.CloudEndureMachine() # CloudEndureMachine | -project_id = 'project_id_example' # str | -machine_id = 'machine_id_example' # str | - -try: - # Update a machine. Accepts only Launch time updates. - api_response = api_instance.projects_project_id_machines_machine_id_patch(body, project_id, machine_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling MachinesApi->projects_project_id_machines_machine_id_patch: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = machines_api.MachinesApi(api_client) + project_id = "projectId_example" # str | + machine_id = "machineId_example" # str | + machine = Machine( + original_source_cloud_id="original_source_cloud_id_example", + source_properties=MachineSourceProperties( + name="name_example", + installed_applications=MachineSourcePropertiesInstalledApplications( + items=[ + MachineSourcePropertiesInstalledApplicationsItems( + application_name="application_name_example", + ), + ], + last_updated_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + ), + disks=[ + MachineSourcePropertiesDisks( + is_protected=True, + name="name_example", + size=1, + ), + ], + machine_cloud_state="machine_cloud_state_example", + public_ips=[ + "public_ips_example", + ], + memory=1, + os="os_example", + cpu=[ + MachineSourcePropertiesCpu( + cores=1, + model_name="model_name_example", + ), + ], + running_services=MachineSourcePropertiesRunningServices( + items=[ + MachineSourcePropertiesRunningServicesItems( + service_name="service_name_example", + ), + ], + last_updated_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + ), + machine_cloud_id="machine_cloud_id_example", + ), + replication_info=MachineReplicationInfo( + rescanned_storage_bytes=1, + backlogged_storage_bytes=1, + failback_client_last_seen_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + last_consistency_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + next_consistency_estimated_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + total_storage_bytes=1, + initiation_states=MachineReplicationInfoInitiationStates( + items=[ + MachineReplicationInfoInitiationStatesItems( + steps=[ + InitializationStep( + status="NOT_STARTED", + message="message_example", + update_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + name="WAITING_TO_INITIATE_REPLICATION", + ), + ], + start_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + ), + ], + estimated_next_attempt_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + ), + replicated_storage_bytes=1, + last_seen_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + last_scan_start_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + ), + license=MachineLicense( + start_of_use_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + license_id="license_id_example", + ), + tags=[ + "tags_example", + ], + restore_servers=[ + "restore_servers_example", + ], + from_point_in_time=PointInTime( + id="id_example", + date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + ), + replication_status="STOPPED", + replica="replica_example", + id="id_example", + replication_configuration=MachineReplicationConfiguration( + volume_encryption_key="volume_encryption_key_example", + replication_tags=[ + ReplicationConfigurationReplicationTags( + key="key_example", + value="value_example", + ), + ], + disable_public_ip=True, + cost_optimized_burst_balance_delta_threshold=1, + subnet_host_project="subnet_host_project_example", + no_rescan=True, + replication_software_download_source="replication_software_download_source_example", + cost_optimized_sc1_volumes_throughput_window_size_minutes=1, + replication_server_type="replication_server_type_example", + cost_optimized_burst_balance_window_size_minutes=1, + use_low_cost_disks=True, + compute_location_id="compute_location_id_example", + subnet_id="subnet_id_example", + logical_location_id="logical_location_id_example", + cost_optimized_default_volumes_throughput_window_size_minutes=1, + bandwidth_throttling=1, + cost_optimized_burst_balance_threshold=1, + use_dedicated_server=True, + zone="zone_example", + replicator_security_group_ids=[ + "replicator_security_group_ids_example", + ], + use_private_ip=True, + auto_disk_detection=True, + failback_client_id="failback_client_id_example", + proxy_url="proxy_url_example", + volume_encryption_allowed=True, + object_storage_location="object_storage_location_example", + archiving_enabled=True, + converter_type="converter_type_example", + storage_location_id="storage_location_id_example", + use_cost_optimized_disk_type=True, + staging_disks=[ + DiskConfig( + actual_type="actual_type_example", + type="DEFAULT", + iops=0, + throughput=0, + name="name_example", + ), + ], + ), + life_cycle=MachineLifeCycle( + last_test_launch_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + last_recovery_job_id="last_recovery_job_id_example", + last_recovery_launch_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + last_target_health_checks_passed_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + connection_established_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + agent_installation_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + last_target_health_checks_passed_job_id="last_target_health_checks_passed_job_id_example", + last_cutover_job_id="last_cutover_job_id_example", + last_test_launch_job_id="last_test_launch_job_id_example", + last_cutover_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + ), + is_agent_installed=True, + ) # Machine | + + # example passing only required values which don't have defaults set + try: + # Update a machine. Accepts only Launch time updates. + api_response = api_instance.projects_project_id_machines_machine_id_patch(project_id, machine_id, machine) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling MachinesApi->projects_project_id_machines_machine_id_patch: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**CloudEndureMachine**](CloudEndureMachine.md)| | **project_id** | **str**| | **machine_id** | **str**| | + **machine** | [**Machine**](Machine.md)| | ### Return type -[**CloudEndureMachine**](CloudEndureMachine.md) +[**Machine**](Machine.md) ### Authorization @@ -212,46 +491,209 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_machines_patch** -> CloudEndureMachinesList projects_project_id_machines_patch(body, project_id) +> MachinesList projects_project_id_machines_patch(project_id, machines_list) Batch-update multiple machines -todo must allow update of tags, update of replicationConfiguration; may allow update of launch times - ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import machines_api +from cloudendure.model.machines_list import MachinesList from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.MachinesApi() -body = cloudendure_api.CloudEndureMachinesList() # CloudEndureMachinesList | -project_id = 'project_id_example' # str | - -try: - # Batch-update multiple machines - api_response = api_instance.projects_project_id_machines_patch(body, project_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling MachinesApi->projects_project_id_machines_patch: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = machines_api.MachinesApi(api_client) + project_id = "projectId_example" # str | + machines_list = MachinesList( + items=[ + Machine( + original_source_cloud_id="original_source_cloud_id_example", + source_properties=MachineSourceProperties( + name="name_example", + installed_applications=MachineSourcePropertiesInstalledApplications( + items=[ + MachineSourcePropertiesInstalledApplicationsItems( + application_name="application_name_example", + ), + ], + last_updated_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + ), + disks=[ + MachineSourcePropertiesDisks( + is_protected=True, + name="name_example", + size=1, + ), + ], + machine_cloud_state="machine_cloud_state_example", + public_ips=[ + "public_ips_example", + ], + memory=1, + os="os_example", + cpu=[ + MachineSourcePropertiesCpu( + cores=1, + model_name="model_name_example", + ), + ], + running_services=MachineSourcePropertiesRunningServices( + items=[ + MachineSourcePropertiesRunningServicesItems( + service_name="service_name_example", + ), + ], + last_updated_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + ), + machine_cloud_id="machine_cloud_id_example", + ), + replication_info=MachineReplicationInfo( + rescanned_storage_bytes=1, + backlogged_storage_bytes=1, + failback_client_last_seen_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + last_consistency_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + next_consistency_estimated_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + total_storage_bytes=1, + initiation_states=MachineReplicationInfoInitiationStates( + items=[ + MachineReplicationInfoInitiationStatesItems( + steps=[ + InitializationStep( + status="NOT_STARTED", + message="message_example", + update_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + name="WAITING_TO_INITIATE_REPLICATION", + ), + ], + start_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + ), + ], + estimated_next_attempt_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + ), + replicated_storage_bytes=1, + last_seen_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + last_scan_start_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + ), + license=MachineLicense( + start_of_use_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + license_id="license_id_example", + ), + tags=[ + "tags_example", + ], + restore_servers=[ + "restore_servers_example", + ], + from_point_in_time=PointInTime( + id="id_example", + date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + ), + replication_status="STOPPED", + replica="replica_example", + id="id_example", + replication_configuration=MachineReplicationConfiguration( + volume_encryption_key="volume_encryption_key_example", + replication_tags=[ + ReplicationConfigurationReplicationTags( + key="key_example", + value="value_example", + ), + ], + disable_public_ip=True, + cost_optimized_burst_balance_delta_threshold=1, + subnet_host_project="subnet_host_project_example", + no_rescan=True, + replication_software_download_source="replication_software_download_source_example", + cost_optimized_sc1_volumes_throughput_window_size_minutes=1, + replication_server_type="replication_server_type_example", + cost_optimized_burst_balance_window_size_minutes=1, + use_low_cost_disks=True, + compute_location_id="compute_location_id_example", + subnet_id="subnet_id_example", + logical_location_id="logical_location_id_example", + cost_optimized_default_volumes_throughput_window_size_minutes=1, + bandwidth_throttling=1, + cost_optimized_burst_balance_threshold=1, + use_dedicated_server=True, + zone="zone_example", + replicator_security_group_ids=[ + "replicator_security_group_ids_example", + ], + use_private_ip=True, + auto_disk_detection=True, + failback_client_id="failback_client_id_example", + proxy_url="proxy_url_example", + volume_encryption_allowed=True, + object_storage_location="object_storage_location_example", + archiving_enabled=True, + converter_type="converter_type_example", + storage_location_id="storage_location_id_example", + use_cost_optimized_disk_type=True, + staging_disks=[ + DiskConfig( + actual_type="actual_type_example", + type="DEFAULT", + iops=0, + throughput=0, + name="name_example", + ), + ], + ), + life_cycle=MachineLifeCycle( + last_test_launch_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + last_recovery_job_id="last_recovery_job_id_example", + last_recovery_launch_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + last_target_health_checks_passed_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + connection_established_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + agent_installation_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + last_target_health_checks_passed_job_id="last_target_health_checks_passed_job_id_example", + last_cutover_job_id="last_cutover_job_id_example", + last_test_launch_job_id="last_test_launch_job_id_example", + last_cutover_date_time=dateutil_parser('1970-01-01T00:00:00.00Z'), + ), + is_agent_installed=True, + ), + ], + ) # MachinesList | + + # example passing only required values which don't have defaults set + try: + # Batch-update multiple machines + api_response = api_instance.projects_project_id_machines_patch(project_id, machines_list) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling MachinesApi->projects_project_id_machines_patch: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**CloudEndureMachinesList**](CloudEndureMachinesList.md)| | **project_id** | **str**| | + **machines_list** | [**MachinesList**](MachinesList.md)| | ### Return type -[**CloudEndureMachinesList**](CloudEndureMachinesList.md) +[**MachinesList**](MachinesList.md) ### Authorization @@ -262,32 +704,49 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | List of modified machines (All must succeed or fail). | - | +**400** | Bad request. The server cannot process the request due to an apparent client error. The response body may include an error code and message. - Error code tagLengthError means that one or more of the tags did not meet the tag length limits of between 1 and 127 Unicode characters. - Error code tagLimitReached means that processing the request would have resulted in one or more of the machines exceeding the 50-tags-per-machine limit. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_replicas_replica_id_get** -> CloudEndureReplica projects_project_id_replicas_replica_id_get(project_id, replica_id) +> Replica projects_project_id_replicas_replica_id_get(project_id, replica_id) Get Target Machine ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import machines_api +from cloudendure.model.error import Error +from cloudendure.model.replica import Replica from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.MachinesApi() -project_id = 'project_id_example' # str | -replica_id = 'replica_id_example' # str | - -try: - # Get Target Machine - api_response = api_instance.projects_project_id_replicas_replica_id_get(project_id, replica_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling MachinesApi->projects_project_id_replicas_replica_id_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = machines_api.MachinesApi(api_client) + project_id = "projectId_example" # str | + replica_id = "replicaId_example" # str | + + # example passing only required values which don't have defaults set + try: + # Get Target Machine + api_response = api_instance.projects_project_id_replicas_replica_id_get(project_id, replica_id) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling MachinesApi->projects_project_id_replicas_replica_id_get: %s\n" % e) ``` ### Parameters @@ -299,7 +758,7 @@ Name | Type | Description | Notes ### Return type -[**CloudEndureReplica**](CloudEndureReplica.md) +[**Replica**](Replica.md) ### Authorization @@ -310,5 +769,11 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information retrieved successfully. | - | +**404** | Replica ID not found. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/docs/MachinesList.md b/docs/MachinesList.md new file mode 100644 index 000000000..7728d8794 --- /dev/null +++ b/docs/MachinesList.md @@ -0,0 +1,11 @@ +# MachinesList + +A collection of Machine objects. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[Machine]**](Machine.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/MachinesListInvalidIDsAndJob.md b/docs/MachinesListInvalidIDsAndJob.md new file mode 100644 index 000000000..39a19a990 --- /dev/null +++ b/docs/MachinesListInvalidIDsAndJob.md @@ -0,0 +1,13 @@ +# MachinesListInvalidIDsAndJob + +A Batch operation result object - The machine objects for which the operation succeeded, and the IDs of the machines for which the operation failed. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[Machine]**](Machine.md) | | [optional] +**job** | [**Job**](Job.md) | | [optional] +**invalid_machine_ids** | **[str]** | The IDs of the machines for which the operation failed. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/NetworkInterface.md b/docs/NetworkInterface.md new file mode 100644 index 000000000..f359c0587 --- /dev/null +++ b/docs/NetworkInterface.md @@ -0,0 +1,12 @@ +# NetworkInterface + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**subnet_id** | **str** | | [optional] +**name** | **str** | | [optional] +**private_ip** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Outpost.md b/docs/Outpost.md new file mode 100644 index 000000000..d83e23006 --- /dev/null +++ b/docs/Outpost.md @@ -0,0 +1,12 @@ +# Outpost + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**outpost_arn** | **str** | | [optional] +**instance_types** | **[str]** | | [optional] +**error** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CloudEndurePointInTime.md b/docs/PointInTime.md similarity index 50% rename from docs/CloudEndurePointInTime.md rename to docs/PointInTime.md index 62110e9af..aabed8552 100644 --- a/docs/CloudEndurePointInTime.md +++ b/docs/PointInTime.md @@ -1,10 +1,11 @@ -# CloudEndurePointInTime +# PointInTime ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**id** | **str** | | [optional] -**date_time** | **datetime** | Timestamp for this Recovery Point. A NULL value signifies there is no later point available. | [optional] +**id** | **str** | | [optional] +**date_time** | **datetime** | Timestamp for this Recovery Point. A NULL value signifies there is no later point available. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) -[[Back to Model list]](API_README.md#documentation-for-models) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to README]](API_README.md) diff --git a/docs/PointInTimeList.md b/docs/PointInTimeList.md new file mode 100644 index 000000000..6f91f7181 --- /dev/null +++ b/docs/PointInTimeList.md @@ -0,0 +1,11 @@ +# PointInTimeList + +A collection of PointInTime objects. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[PointInTime]**](PointInTime.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/PopulateJobNames.md b/docs/PopulateJobNames.md new file mode 100644 index 000000000..827d8dbe0 --- /dev/null +++ b/docs/PopulateJobNames.md @@ -0,0 +1,11 @@ +# PopulateJobNames + +List of possible job names to populates +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**job_names** | **[str]** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/PopulateJobParams.md b/docs/PopulateJobParams.md new file mode 100644 index 000000000..7ee21a263 --- /dev/null +++ b/docs/PopulateJobParams.md @@ -0,0 +1,12 @@ +# PopulateJobParams + +A job name to populate +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**job_name** | **str** | | +**immediate** | **bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Project.md b/docs/Project.md new file mode 100644 index 000000000..79980bd3d --- /dev/null +++ b/docs/Project.md @@ -0,0 +1,26 @@ +# Project + +Contains the project characteristics such as the replicationConfiguration in use, source region and project type. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**replication_configuration** | **str** | The ID of the replication configuration object to use (corresponding to the ones available in /projects/{projectId}/replicationConfigurations). | [optional] +**features** | [**ProjectFeatures**](ProjectFeatures.md) | | [optional] +**replication_reversed** | **bool** | | [optional] [readonly] +**cloud_credentials_ids** | **[str]** | The IDs of the cloud credentials to use (array of one). | [optional] +**source_region** | **str** | The ID of the region to use as source. | [optional] +**id** | **str** | | [optional] [readonly] +**target_cloud_id** | **str** | | [optional] +**agent_installation_token** | **str** | | [optional] [readonly] +**name** | **str** | | [optional] +**users_ids** | **[str]** | | [optional] +**type** | **str** | | [optional] +**source_cloud_credentials_id** | **str** | | [optional] [readonly] +**target_cloud_credentials_id** | **str** | | [optional] [readonly] +**licenses_ids** | **[str]** | The IDs of the licenses associated with this project (array of one). | [optional] +**ce_admin_properties** | [**ProjectCeAdminProperties**](ProjectCeAdminProperties.md) | | [optional] +**source_cloud_id** | **str** | | [optional] [readonly] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ProjectApi.md b/docs/ProjectApi.md index 3bc3f29ef..910c2a879 100644 --- a/docs/ProjectApi.md +++ b/docs/ProjectApi.md @@ -1,4 +1,4 @@ -# cloudendure_api.ProjectApi +# cloudendure.ProjectApi All URIs are relative to *https://console.cloudendure.com/api/latest* @@ -10,45 +10,58 @@ Method | HTTP request | Description [**projects_project_id_get**](ProjectApi.md#projects_project_id_get) | **GET** /projects/{projectId} | Get Project [**projects_project_id_patch**](ProjectApi.md#projects_project_id_patch) | **PATCH** /projects/{projectId} | Update Project (including partial update) [**projects_project_id_tags_get**](ProjectApi.md#projects_project_id_tags_get) | **GET** /projects/{projectId}/tags | Gets all instance tags of all machines in the project. +[**projects_project_id_target_cloud_credentials_post**](ProjectApi.md#projects_project_id_target_cloud_credentials_post) | **POST** /projects/{projectId}/targetCloudCredentials | Set target cloud credentials + # **projects_get** -> CloudEndureProjectsList projects_get(offset=offset, limit=limit) +> ProjectsList projects_get() List Projects Returns the list of projects defined in this account. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import project_api +from cloudendure.model.projects_list import ProjectsList from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ProjectApi() -offset = 56 # int | With which item to start (0 based). (optional) -limit = 56 # int | A number specifying how many entries to return. (optional) - -try: - # List Projects - api_response = api_instance.projects_get(offset=offset, limit=limit) - pprint(api_response) -except ApiException as e: - print("Exception when calling ProjectApi->projects_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = project_api.ProjectApi(api_client) + offset = 0 # int | With which item to start (0 based). (optional) if omitted the server will use the default value of 0 + limit = 1500 # int | A number specifying how many entries to return. (optional) if omitted the server will use the default value of 1500 + + # example passing only required values which don't have defaults set + # and optional values + try: + # List Projects + api_response = api_instance.projects_get(offset=offset, limit=limit) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling ProjectApi->projects_get: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **offset** | **int**| With which item to start (0 based). | [optional] - **limit** | **int**| A number specifying how many entries to return. | [optional] + **offset** | **int**| With which item to start (0 based). | [optional] if omitted the server will use the default value of 0 + **limit** | **int**| A number specifying how many entries to return. | [optional] if omitted the server will use the default value of 1500 ### Return type -[**CloudEndureProjectsList**](CloudEndureProjectsList.md) +[**ProjectsList**](ProjectsList.md) ### Authorization @@ -59,44 +72,96 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information retrieved successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_post** -> CloudEndureProject projects_post(body) +> Project projects_post(project) Create Project Create project ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import project_api +from cloudendure.model.project import Project +from cloudendure.model.error import Error from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ProjectApi() -body = cloudendure_api.CloudEndureProject() # CloudEndureProject | - -try: - # Create Project - api_response = api_instance.projects_post(body) - pprint(api_response) -except ApiException as e: - print("Exception when calling ProjectApi->projects_post: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = project_api.ProjectApi(api_client) + project = Project( + replication_configuration="replication_configuration_example", + features=ProjectFeatures( + aws_extended_hdd_types=True, + allow_recovery_plans=True, + force_no_rescan_after_reboot=True, + allow_no_rescan_after_reboot=True, + allow_archiving=True, + is_demo=True, + dr_tier2=True, + allow_byol_on_dedicated_instance=True, + pit=True, + ), + replication_reversed=True, + cloud_credentials_ids=[ + "cloud_credentials_ids_example", + ], + source_region="source_region_example", + id="id_example", + target_cloud_id="target_cloud_id_example", + agent_installation_token="agent_installation_token_example", + name="name_example", + users_ids=[ + "users_ids_example", + ], + type="MIGRATION", + source_cloud_credentials_id="source_cloud_credentials_id_example", + target_cloud_credentials_id="target_cloud_credentials_id_example", + licenses_ids=[ + "licenses_ids_example", + ], + ce_admin_properties=ProjectCeAdminProperties( + comments="comments_example", + history="history_example", + ), + source_cloud_id="source_cloud_id_example", + ) # Project | + + # example passing only required values which don't have defaults set + try: + # Create Project + api_response = api_instance.projects_post(project) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling ProjectApi->projects_post: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**CloudEndureProject**](CloudEndureProject.md)| | + **project** | [**Project**](Project.md)| | ### Return type -[**CloudEndureProject**](CloudEndureProject.md) +[**Project**](Project.md) ### Authorization @@ -107,7 +172,14 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**201** | Project created. | - | +**400** | Max Projects per Account reached. | - | +**409** | Cannot be completed due to conflict | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_delete** > projects_project_id_delete(project_id) @@ -115,22 +187,31 @@ No authorization required Delete Project and all sub-resources including cloud assets other than launched target machines ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import project_api from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ProjectApi() -project_id = 'project_id_example' # str | - -try: - # Delete Project and all sub-resources including cloud assets other than launched target machines - api_instance.projects_project_id_delete(project_id) -except ApiException as e: - print("Exception when calling ProjectApi->projects_project_id_delete: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = project_api.ProjectApi(api_client) + project_id = "projectId_example" # str | + + # example passing only required values which don't have defaults set + try: + # Delete Project and all sub-resources including cloud assets other than launched target machines + api_instance.projects_project_id_delete(project_id) + except cloudendure.ApiException as e: + print("Exception when calling ProjectApi->projects_project_id_delete: %s\n" % e) ``` ### Parameters @@ -152,31 +233,46 @@ No authorization required - **Content-Type**: Not defined - **Accept**: Not defined -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Deleted successfully | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_get** -> CloudEndureProject projects_project_id_get(project_id) +> Project projects_project_id_get(project_id) Get Project ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import project_api +from cloudendure.model.project import Project from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ProjectApi() -project_id = 'project_id_example' # str | - -try: - # Get Project - api_response = api_instance.projects_project_id_get(project_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling ProjectApi->projects_project_id_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = project_api.ProjectApi(api_client) + project_id = "projectId_example" # str | + + # example passing only required values which don't have defaults set + try: + # Get Project + api_response = api_instance.projects_project_id_get(project_id) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling ProjectApi->projects_project_id_get: %s\n" % e) ``` ### Parameters @@ -187,7 +283,7 @@ Name | Type | Description | Notes ### Return type -[**CloudEndureProject**](CloudEndureProject.md) +[**Project**](Project.md) ### Authorization @@ -198,46 +294,98 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information retrieved successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_patch** -> CloudEndureProject projects_project_id_patch(body, project_id) +> Project projects_project_id_patch(project_id, project) Update Project (including partial update) Set project properties including Data Replication source location and replicationConfiguration to use. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import project_api +from cloudendure.model.project import Project +from cloudendure.model.error import Error from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ProjectApi() -body = cloudendure_api.CloudEndureProject() # CloudEndureProject | -project_id = 'project_id_example' # str | - -try: - # Update Project (including partial update) - api_response = api_instance.projects_project_id_patch(body, project_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling ProjectApi->projects_project_id_patch: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = project_api.ProjectApi(api_client) + project_id = "projectId_example" # str | + project = Project( + replication_configuration="replication_configuration_example", + features=ProjectFeatures( + aws_extended_hdd_types=True, + allow_recovery_plans=True, + force_no_rescan_after_reboot=True, + allow_no_rescan_after_reboot=True, + allow_archiving=True, + is_demo=True, + dr_tier2=True, + allow_byol_on_dedicated_instance=True, + pit=True, + ), + replication_reversed=True, + cloud_credentials_ids=[ + "cloud_credentials_ids_example", + ], + source_region="source_region_example", + id="id_example", + target_cloud_id="target_cloud_id_example", + agent_installation_token="agent_installation_token_example", + name="name_example", + users_ids=[ + "users_ids_example", + ], + type="MIGRATION", + source_cloud_credentials_id="source_cloud_credentials_id_example", + target_cloud_credentials_id="target_cloud_credentials_id_example", + licenses_ids=[ + "licenses_ids_example", + ], + ce_admin_properties=ProjectCeAdminProperties( + comments="comments_example", + history="history_example", + ), + source_cloud_id="source_cloud_id_example", + ) # Project | + + # example passing only required values which don't have defaults set + try: + # Update Project (including partial update) + api_response = api_instance.projects_project_id_patch(project_id, project) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling ProjectApi->projects_project_id_patch: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**CloudEndureProject**](CloudEndureProject.md)| | **project_id** | **str**| | + **project** | [**Project**](Project.md)| | ### Return type -[**CloudEndureProject**](CloudEndureProject.md) +[**Project**](Project.md) ### Authorization @@ -248,35 +396,60 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Object updated successfully. | - | +**409** | Cannot be completed due to conflict | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_tags_get** -> object projects_project_id_tags_get(project_id, offset=offset, limit=limit) +> InlineResponse200 projects_project_id_tags_get(project_id) Gets all instance tags of all machines in the project. Returns all instance tags of all machines in the project. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import project_api +from cloudendure.model.inline_response200 import InlineResponse200 from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ProjectApi() -project_id = 'project_id_example' # str | -offset = 56 # int | With which item to start (0 based). (optional) -limit = 56 # int | A number specifying how many entries to return. (optional) - -try: - # Gets all instance tags of all machines in the project. - api_response = api_instance.projects_project_id_tags_get(project_id, offset=offset, limit=limit) - pprint(api_response) -except ApiException as e: - print("Exception when calling ProjectApi->projects_project_id_tags_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = project_api.ProjectApi(api_client) + project_id = "projectId_example" # str | + offset = 0 # int | With which item to start (0 based). (optional) if omitted the server will use the default value of 0 + limit = 1500 # int | A number specifying how many entries to return. (optional) if omitted the server will use the default value of 1500 + + # example passing only required values which don't have defaults set + try: + # Gets all instance tags of all machines in the project. + api_response = api_instance.projects_project_id_tags_get(project_id) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling ProjectApi->projects_project_id_tags_get: %s\n" % e) + + # example passing only required values which don't have defaults set + # and optional values + try: + # Gets all instance tags of all machines in the project. + api_response = api_instance.projects_project_id_tags_get(project_id, offset=offset, limit=limit) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling ProjectApi->projects_project_id_tags_get: %s\n" % e) ``` ### Parameters @@ -284,12 +457,12 @@ except ApiException as e: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **project_id** | **str**| | - **offset** | **int**| With which item to start (0 based). | [optional] - **limit** | **int**| A number specifying how many entries to return. | [optional] + **offset** | **int**| With which item to start (0 based). | [optional] if omitted the server will use the default value of 0 + **limit** | **int**| A number specifying how many entries to return. | [optional] if omitted the server will use the default value of 1500 ### Return type -**object** +[**InlineResponse200**](InlineResponse200.md) ### Authorization @@ -300,5 +473,85 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information retrieved successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **projects_project_id_target_cloud_credentials_post** +> Project projects_project_id_target_cloud_credentials_post(project_id, cloud_credentials) + +Set target cloud credentials + +Used to set different account for staging and target. Changes target credentials for account. null values can be used to remove the credentials. + +### Example + +```python +import time +import cloudendure +from cloudendure.api import project_api +from cloudendure.model.cloud_credentials_request import CloudCredentialsRequest +from cloudendure.model.project import Project +from cloudendure.model.error import Error +from pprint import pprint +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = project_api.ProjectApi(api_client) + project_id = "projectId_example" # str | + cloud_credentials = CloudCredentialsRequest( + public_key="public_key_example", + name="name_example", + cloud_id="cloud_id_example", + private_key='YQ==', + account_identifier="account_identifier_example", + id="id_example", + ) # CloudCredentialsRequest | + + # example passing only required values which don't have defaults set + try: + # Set target cloud credentials + api_response = api_instance.projects_project_id_target_cloud_credentials_post(project_id, cloud_credentials) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling ProjectApi->projects_project_id_target_cloud_credentials_post: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **project_id** | **str**| | + **cloud_credentials** | [**CloudCredentialsRequest**](CloudCredentialsRequest.md)| | + +### Return type + +[**Project**](Project.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Success. | - | +**409** | Cannot be completed due to conflict | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/docs/ProjectCeAdminProperties.md b/docs/ProjectCeAdminProperties.md new file mode 100644 index 000000000..55361e22c --- /dev/null +++ b/docs/ProjectCeAdminProperties.md @@ -0,0 +1,12 @@ +# ProjectCeAdminProperties + +For internal use. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**comments** | **str** | | [optional] +**history** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ProjectFeatures.md b/docs/ProjectFeatures.md new file mode 100644 index 000000000..1ff0971e3 --- /dev/null +++ b/docs/ProjectFeatures.md @@ -0,0 +1,18 @@ +# ProjectFeatures + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**aws_extended_hdd_types** | **bool** | Whether the hard disk ST1 and SC1 types are supported. | [optional] +**allow_recovery_plans** | **bool** | Whether the Recovery Plans are enabled. | [optional] +**force_no_rescan_after_reboot** | **bool** | makes installing the new driver on project machines the default behavior. | [optional] +**allow_no_rescan_after_reboot** | **bool** | allows installing the new driver on project machines. | [optional] +**allow_archiving** | **bool** | Enables machine archiving for backup | [optional] +**is_demo** | **bool** | Enables clicking the target private IP (for demo) | [optional] +**dr_tier2** | **bool** | Whether the account is in DR level | [optional] +**allow_byol_on_dedicated_instance** | **bool** | specifies whether to allow byol windows license in the UI if dedicated instance tenancy is selected. | [optional] +**pit** | **bool** | Whether the account can use PIT when creating replicas. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ProjectStorage.md b/docs/ProjectStorage.md new file mode 100644 index 000000000..781e7c8d0 --- /dev/null +++ b/docs/ProjectStorage.md @@ -0,0 +1,15 @@ +# ProjectStorage + +total storage used by a project +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**project_id** | **str** | | [optional] +**points_in_time_total_bytes** | **int** | | [optional] +**running_machines_total_bytes** | **int** | | [optional] +**working_storage** | [**ProjectStorageWorkingStorage**](ProjectStorageWorkingStorage.md) | | [optional] +**calculation_date_time** | **datetime** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ProjectStorageWorkingStorage.md b/docs/ProjectStorageWorkingStorage.md new file mode 100644 index 000000000..1e5cbaedb --- /dev/null +++ b/docs/ProjectStorageWorkingStorage.md @@ -0,0 +1,11 @@ +# ProjectStorageWorkingStorage + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**disks_total_bytes** | **int** | | [optional] +**snapshots_total_bytes** | **int** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ProjectsAndUsers.md b/docs/ProjectsAndUsers.md new file mode 100644 index 000000000..9428f8243 --- /dev/null +++ b/docs/ProjectsAndUsers.md @@ -0,0 +1,11 @@ +# ProjectsAndUsers + +Collection of objects pairing projectId with User IDs, used by assignUsers and removeUsers API. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[ProjectsAndUsersItems]**](ProjectsAndUsersItems.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ProjectsAndUsersItems.md b/docs/ProjectsAndUsersItems.md new file mode 100644 index 000000000..db29c598c --- /dev/null +++ b/docs/ProjectsAndUsersItems.md @@ -0,0 +1,11 @@ +# ProjectsAndUsersItems + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**project_id** | **str** | | [optional] +**user_ids** | **[str]** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ProjectsList.md b/docs/ProjectsList.md new file mode 100644 index 000000000..09d526b0d --- /dev/null +++ b/docs/ProjectsList.md @@ -0,0 +1,11 @@ +# ProjectsList + +A collection of Project objects. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[Project]**](Project.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/RecoveryPlan.md b/docs/RecoveryPlan.md new file mode 100644 index 000000000..f750a8b1a --- /dev/null +++ b/docs/RecoveryPlan.md @@ -0,0 +1,13 @@ +# RecoveryPlan + +Recovery plan +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**steps** | [**RecoveryPlanSteps**](RecoveryPlanSteps.md) | | [optional] +**id** | **str** | | [optional] [readonly] +**name** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/RecoveryPlanList.md b/docs/RecoveryPlanList.md new file mode 100644 index 000000000..2f842eb60 --- /dev/null +++ b/docs/RecoveryPlanList.md @@ -0,0 +1,11 @@ +# RecoveryPlanList + +Recovery plan list +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[RecoveryPlan]**](RecoveryPlan.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/RecoveryPlanStep.md b/docs/RecoveryPlanStep.md new file mode 100644 index 000000000..02d4ad451 --- /dev/null +++ b/docs/RecoveryPlanStep.md @@ -0,0 +1,13 @@ +# RecoveryPlanStep + +Recovery plan step +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**machine_ids** | **[str]** | | [optional] +**wait_before** | **str** | | [optional] +**name** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/RecoveryPlanSteps.md b/docs/RecoveryPlanSteps.md new file mode 100644 index 000000000..de0244536 --- /dev/null +++ b/docs/RecoveryPlanSteps.md @@ -0,0 +1,11 @@ +# RecoveryPlanSteps + +Recovery plan steps +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[RecoveryPlanStep]**](RecoveryPlanStep.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/RecoveryPlansApi.md b/docs/RecoveryPlansApi.md index 7325ee8ce..3e9b41894 100644 --- a/docs/RecoveryPlansApi.md +++ b/docs/RecoveryPlansApi.md @@ -1,4 +1,4 @@ -# cloudendure_api.RecoveryPlansApi +# cloudendure.RecoveryPlansApi All URIs are relative to *https://console.cloudendure.com/api/latest* @@ -11,29 +11,40 @@ Method | HTTP request | Description [**projects_project_id_recovery_plans_recovery_plan_id_patch**](RecoveryPlansApi.md#projects_project_id_recovery_plans_recovery_plan_id_patch) | **PATCH** /projects/{projectId}/recoveryPlans/{recoveryPlanId} | Updates a new recovery plan. [**projects_project_id_run_recovery_plan_post**](RecoveryPlansApi.md#projects_project_id_run_recovery_plan_post) | **POST** /projects/{projectId}/runRecoveryPlan | Launch a recovery plan. + # **projects_project_id_recovery_plans_get** -> CloudEndureRecoveryPlanList projects_project_id_recovery_plans_get(project_id) +> RecoveryPlanList projects_project_id_recovery_plans_get(project_id) Gets all recovery plans for the project. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import recovery_plans_api +from cloudendure.model.recovery_plan_list import RecoveryPlanList from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.RecoveryPlansApi() -project_id = 'project_id_example' # str | - -try: - # Gets all recovery plans for the project. - api_response = api_instance.projects_project_id_recovery_plans_get(project_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling RecoveryPlansApi->projects_project_id_recovery_plans_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = recovery_plans_api.RecoveryPlansApi(api_client) + project_id = "projectId_example" # str | + + # example passing only required values which don't have defaults set + try: + # Gets all recovery plans for the project. + api_response = api_instance.projects_project_id_recovery_plans_get(project_id) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling RecoveryPlansApi->projects_project_id_recovery_plans_get: %s\n" % e) ``` ### Parameters @@ -44,7 +55,7 @@ Name | Type | Description | Notes ### Return type -[**CloudEndureRecoveryPlanList**](CloudEndureRecoveryPlanList.md) +[**RecoveryPlanList**](RecoveryPlanList.md) ### Authorization @@ -55,44 +66,73 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_recovery_plans_post** -> CloudEndureRecoveryPlan projects_project_id_recovery_plans_post(body, project_id) +> RecoveryPlan projects_project_id_recovery_plans_post(project_id, recovery_plan) Creates a new recovery plan. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import recovery_plans_api +from cloudendure.model.recovery_plan import RecoveryPlan from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.RecoveryPlansApi() -body = cloudendure_api.CloudEndureRecoveryPlan() # CloudEndureRecoveryPlan | Recovery Plan to create -project_id = 'project_id_example' # str | - -try: - # Creates a new recovery plan. - api_response = api_instance.projects_project_id_recovery_plans_post(body, project_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling RecoveryPlansApi->projects_project_id_recovery_plans_post: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = recovery_plans_api.RecoveryPlansApi(api_client) + project_id = "projectId_example" # str | + recovery_plan = RecoveryPlan( + steps=RecoveryPlanSteps( + items=[ + RecoveryPlanStep( + machine_ids=[ + "machine_ids_example", + ], + wait_before="wait_before_example", + name="name_example", + ), + ], + ), + id="id_example", + name="name_example", + ) # RecoveryPlan | Recovery Plan to create + + # example passing only required values which don't have defaults set + try: + # Creates a new recovery plan. + api_response = api_instance.projects_project_id_recovery_plans_post(project_id, recovery_plan) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling RecoveryPlansApi->projects_project_id_recovery_plans_post: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**CloudEndureRecoveryPlan**](CloudEndureRecoveryPlan.md)| Recovery Plan to create | **project_id** | **str**| | + **recovery_plan** | [**RecoveryPlan**](RecoveryPlan.md)| Recovery Plan to create | ### Return type -[**CloudEndureRecoveryPlan**](CloudEndureRecoveryPlan.md) +[**RecoveryPlan**](RecoveryPlan.md) ### Authorization @@ -103,7 +143,12 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**202** | OK | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_recovery_plans_recovery_plan_id_delete** > projects_project_id_recovery_plans_recovery_plan_id_delete(project_id, recovery_plan_id) @@ -111,23 +156,32 @@ No authorization required Deletes a recovery plan. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import recovery_plans_api from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.RecoveryPlansApi() -project_id = 'project_id_example' # str | -recovery_plan_id = 'recovery_plan_id_example' # str | - -try: - # Deletes a recovery plan. - api_instance.projects_project_id_recovery_plans_recovery_plan_id_delete(project_id, recovery_plan_id) -except ApiException as e: - print("Exception when calling RecoveryPlansApi->projects_project_id_recovery_plans_recovery_plan_id_delete: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = recovery_plans_api.RecoveryPlansApi(api_client) + project_id = "projectId_example" # str | + recovery_plan_id = "recoveryPlanId_example" # str | + + # example passing only required values which don't have defaults set + try: + # Deletes a recovery plan. + api_instance.projects_project_id_recovery_plans_recovery_plan_id_delete(project_id, recovery_plan_id) + except cloudendure.ApiException as e: + print("Exception when calling RecoveryPlansApi->projects_project_id_recovery_plans_recovery_plan_id_delete: %s\n" % e) ``` ### Parameters @@ -150,32 +204,47 @@ No authorization required - **Content-Type**: Not defined - **Accept**: Not defined -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | OK | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_recovery_plans_recovery_plan_id_get** -> CloudEndureRecoveryPlan projects_project_id_recovery_plans_recovery_plan_id_get(project_id, recovery_plan_id) +> RecoveryPlan projects_project_id_recovery_plans_recovery_plan_id_get(project_id, recovery_plan_id) Gets a recovery plan. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import recovery_plans_api +from cloudendure.model.recovery_plan import RecoveryPlan from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.RecoveryPlansApi() -project_id = 'project_id_example' # str | -recovery_plan_id = 'recovery_plan_id_example' # str | - -try: - # Gets a recovery plan. - api_response = api_instance.projects_project_id_recovery_plans_recovery_plan_id_get(project_id, recovery_plan_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling RecoveryPlansApi->projects_project_id_recovery_plans_recovery_plan_id_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = recovery_plans_api.RecoveryPlansApi(api_client) + project_id = "projectId_example" # str | + recovery_plan_id = "recoveryPlanId_example" # str | + + # example passing only required values which don't have defaults set + try: + # Gets a recovery plan. + api_response = api_instance.projects_project_id_recovery_plans_recovery_plan_id_get(project_id, recovery_plan_id) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling RecoveryPlansApi->projects_project_id_recovery_plans_recovery_plan_id_get: %s\n" % e) ``` ### Parameters @@ -187,7 +256,7 @@ Name | Type | Description | Notes ### Return type -[**CloudEndureRecoveryPlan**](CloudEndureRecoveryPlan.md) +[**RecoveryPlan**](RecoveryPlan.md) ### Authorization @@ -198,46 +267,75 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_recovery_plans_recovery_plan_id_patch** -> CloudEndureRecoveryPlan projects_project_id_recovery_plans_recovery_plan_id_patch(body, project_id, recovery_plan_id) +> RecoveryPlan projects_project_id_recovery_plans_recovery_plan_id_patch(project_id, recovery_plan_id, recovery_plan) Updates a new recovery plan. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import recovery_plans_api +from cloudendure.model.recovery_plan import RecoveryPlan from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.RecoveryPlansApi() -body = cloudendure_api.CloudEndureRecoveryPlan() # CloudEndureRecoveryPlan | Recovery Plan to create -project_id = 'project_id_example' # str | -recovery_plan_id = 'recovery_plan_id_example' # str | - -try: - # Updates a new recovery plan. - api_response = api_instance.projects_project_id_recovery_plans_recovery_plan_id_patch(body, project_id, recovery_plan_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling RecoveryPlansApi->projects_project_id_recovery_plans_recovery_plan_id_patch: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = recovery_plans_api.RecoveryPlansApi(api_client) + project_id = "projectId_example" # str | + recovery_plan_id = "recoveryPlanId_example" # str | + recovery_plan = RecoveryPlan( + steps=RecoveryPlanSteps( + items=[ + RecoveryPlanStep( + machine_ids=[ + "machine_ids_example", + ], + wait_before="wait_before_example", + name="name_example", + ), + ], + ), + id="id_example", + name="name_example", + ) # RecoveryPlan | Recovery Plan to create + + # example passing only required values which don't have defaults set + try: + # Updates a new recovery plan. + api_response = api_instance.projects_project_id_recovery_plans_recovery_plan_id_patch(project_id, recovery_plan_id, recovery_plan) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling RecoveryPlansApi->projects_project_id_recovery_plans_recovery_plan_id_patch: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**CloudEndureRecoveryPlan**](CloudEndureRecoveryPlan.md)| Recovery Plan to create | **project_id** | **str**| | **recovery_plan_id** | **str**| | + **recovery_plan** | [**RecoveryPlan**](RecoveryPlan.md)| Recovery Plan to create | ### Return type -[**CloudEndureRecoveryPlan**](CloudEndureRecoveryPlan.md) +[**RecoveryPlan**](RecoveryPlan.md) ### Authorization @@ -248,44 +346,64 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_run_recovery_plan_post** -> CloudEndureJob projects_project_id_run_recovery_plan_post(body, project_id) +> Job projects_project_id_run_recovery_plan_post(project_id, init_recovery_plan_params) Launch a recovery plan. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import recovery_plans_api +from cloudendure.model.job import Job +from cloudendure.model.inline_object10 import InlineObject10 from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.RecoveryPlansApi() -body = NULL # object | Recovery Plan to create -project_id = 'project_id_example' # str | - -try: - # Launch a recovery plan. - api_response = api_instance.projects_project_id_run_recovery_plan_post(body, project_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling RecoveryPlansApi->projects_project_id_run_recovery_plan_post: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = recovery_plans_api.RecoveryPlansApi(api_client) + project_id = "projectId_example" # str | + init_recovery_plan_params = InlineObject10( + recovery_plan_id="recovery_plan_id_example", + execution_mode="TEST", + point_in_time_id="point_in_time_id_example", + ) # InlineObject10 | + + # example passing only required values which don't have defaults set + try: + # Launch a recovery plan. + api_response = api_instance.projects_project_id_run_recovery_plan_post(project_id, init_recovery_plan_params) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling RecoveryPlansApi->projects_project_id_run_recovery_plan_post: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**object**](object.md)| Recovery Plan to create | **project_id** | **str**| | + **init_recovery_plan_params** | [**InlineObject10**](InlineObject10.md)| | ### Return type -[**CloudEndureJob**](CloudEndureJob.md) +[**Job**](Job.md) ### Authorization @@ -296,5 +414,10 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**202** | Job created. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/docs/Region.md b/docs/Region.md new file mode 100644 index 000000000..25a671e98 --- /dev/null +++ b/docs/Region.md @@ -0,0 +1,32 @@ +# Region + +A representation of a cloud region within a specific account. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**subnets** | [**[Subnet]**](Subnet.md) | | [optional] +**scsi_adapter_types** | **[str]** | | [optional] +**outposts** | [**[Outpost]**](Outpost.md) | | [optional] +**placement_groups** | **[str]** | | [optional] +**instance_types** | **[str]** | | [optional] +**logical_locations** | [**[LogicalLocation]**](LogicalLocation.md) | | [optional] +**zones** | **[str]** | | [optional] +**volume_encryption_keys** | **[str]** | | [optional] +**cloud** | **str** | | [optional] +**security_groups** | [**[SecurityGroup]**](SecurityGroup.md) | | [optional] +**id** | **str** | | [optional] +**max_cpus_per_machine** | **int** | Maximum CPUs per per Target machine (currently relevant for vCenter cloud only) | [optional] +**network_interfaces** | [**[NetworkInterface]**](NetworkInterface.md) | | [optional] +**compute_locations** | [**[ComputeLocation]**](ComputeLocation.md) | Compute location (e.g. vCenter Host) | [optional] +**name** | **str** | | [optional] +**storage_locations** | [**[StorageLocation]**](StorageLocation.md) | Storage location (e.g. Azure Storage Account, vCenter Data Store) | [optional] +**iam_roles** | **[str]** | | [optional] +**static_ips** | **[str]** | | [optional] +**max_cores_per_machine_cpu** | **int** | Maximum CPU cores per CPU in Target machines (currently relevant for vCenter cloud only) | [optional] +**dedicated_hosts** | **[str]** | | [optional] +**network_adapter_types** | **[str]** | | [optional] +**max_mb_ram_per_machine** | **int** | Maximum MB RAM per Target machine (currently relevant for vCenter cloud only) | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/RegionsList.md b/docs/RegionsList.md new file mode 100644 index 000000000..32eb61b4c --- /dev/null +++ b/docs/RegionsList.md @@ -0,0 +1,11 @@ +# RegionsList + +A collection of Region objects. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[Region]**](Region.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Replica.md b/docs/Replica.md new file mode 100644 index 000000000..aaad69ccf --- /dev/null +++ b/docs/Replica.md @@ -0,0 +1,21 @@ +# Replica + +A launched target machine (For a specific replication source). +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**machine** | **str** | The ID of the source machine for this target machine. | [optional] +**cloud_endure_creation_date_time** | **datetime** | Timestamp for launching this target machine. | [optional] [readonly] +**name** | **str** | Target machine name in the target environment. | [optional] [readonly] +**point_in_time** | **str** | The ID of the pointInTime object from which this target machine was created. | [optional] +**job_id** | **str** | | [optional] [readonly] +**machine_cloud_state** | **str** | Target machine state in the target environment. | [optional] [readonly] +**public_ips** | **[str]** | Static (non-ephemral) public IPs. On some clouds this also includes ephemeral IPs. | [optional] [readonly] +**machine_cloud_health_checks** | **str** | Cloud healthcheck string | [optional] [readonly] +**region_id** | **str** | The ID of the region where this target machine has been launched. | [optional] [readonly] +**id** | **str** | | [optional] [readonly] +**machine_cloud_id** | **str** | Target machine ID in the target environment. | [optional] [readonly] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ReplicationApi.md b/docs/ReplicationApi.md index 352654259..894c17ae2 100644 --- a/docs/ReplicationApi.md +++ b/docs/ReplicationApi.md @@ -1,4 +1,4 @@ -# cloudendure_api.ReplicationApi +# cloudendure.ReplicationApi All URIs are relative to *https://console.cloudendure.com/api/latest* @@ -12,30 +12,41 @@ Method | HTTP request | Description [**projects_project_id_replication_configurations_post**](ReplicationApi.md#projects_project_id_replication_configurations_post) | **POST** /projects/{projectId}/replicationConfigurations | Create Replication Configuration [**projects_project_id_replication_configurations_replication_configuration_id_patch**](ReplicationApi.md#projects_project_id_replication_configurations_replication_configuration_id_patch) | **PATCH** /projects/{projectId}/replicationConfigurations/{replicationConfigurationId} | Modify Replication Configuration + # **projects_project_id_machines_machine_id_bandwidth_throttling_get** -> CloudEndureBandwidthThrottling projects_project_id_machines_machine_id_bandwidth_throttling_get(project_id, machine_id) +> BandwidthThrottling projects_project_id_machines_machine_id_bandwidth_throttling_get(project_id, machine_id) Get value of network bandwidth throttling setting for Machine ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import replication_api +from cloudendure.model.bandwidth_throttling import BandwidthThrottling from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ReplicationApi() -project_id = 'project_id_example' # str | -machine_id = 'machine_id_example' # str | - -try: - # Get value of network bandwidth throttling setting for Machine - api_response = api_instance.projects_project_id_machines_machine_id_bandwidth_throttling_get(project_id, machine_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling ReplicationApi->projects_project_id_machines_machine_id_bandwidth_throttling_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = replication_api.ReplicationApi(api_client) + project_id = "projectId_example" # str | + machine_id = "machineId_example" # str | + + # example passing only required values which don't have defaults set + try: + # Get value of network bandwidth throttling setting for Machine + api_response = api_instance.projects_project_id_machines_machine_id_bandwidth_throttling_get(project_id, machine_id) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling ReplicationApi->projects_project_id_machines_machine_id_bandwidth_throttling_get: %s\n" % e) ``` ### Parameters @@ -47,7 +58,7 @@ Name | Type | Description | Notes ### Return type -[**CloudEndureBandwidthThrottling**](CloudEndureBandwidthThrottling.md) +[**BandwidthThrottling**](BandwidthThrottling.md) ### Authorization @@ -58,46 +69,63 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_machines_machine_id_bandwidth_throttling_patch** -> CloudEndureBandwidthThrottling projects_project_id_machines_machine_id_bandwidth_throttling_patch(body, project_id, machine_id) +> BandwidthThrottling projects_project_id_machines_machine_id_bandwidth_throttling_patch(project_id, machine_id, bandwidth_throttling) Set value of network bandwidth throttling setting for Machine ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import replication_api +from cloudendure.model.bandwidth_throttling import BandwidthThrottling from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ReplicationApi() -body = cloudendure_api.CloudEndureBandwidthThrottling() # CloudEndureBandwidthThrottling | -project_id = 'project_id_example' # str | -machine_id = 'machine_id_example' # str | - -try: - # Set value of network bandwidth throttling setting for Machine - api_response = api_instance.projects_project_id_machines_machine_id_bandwidth_throttling_patch(body, project_id, machine_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling ReplicationApi->projects_project_id_machines_machine_id_bandwidth_throttling_patch: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = replication_api.ReplicationApi(api_client) + project_id = "projectId_example" # str | + machine_id = "machineId_example" # str | + bandwidth_throttling = BandwidthThrottling( + bandwidth_throttling=1, + ) # BandwidthThrottling | + + # example passing only required values which don't have defaults set + try: + # Set value of network bandwidth throttling setting for Machine + api_response = api_instance.projects_project_id_machines_machine_id_bandwidth_throttling_patch(project_id, machine_id, bandwidth_throttling) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling ReplicationApi->projects_project_id_machines_machine_id_bandwidth_throttling_patch: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**CloudEndureBandwidthThrottling**](CloudEndureBandwidthThrottling.md)| | **project_id** | **str**| | **machine_id** | **str**| | + **bandwidth_throttling** | [**BandwidthThrottling**](BandwidthThrottling.md)| | ### Return type -[**CloudEndureBandwidthThrottling**](CloudEndureBandwidthThrottling.md) +[**BandwidthThrottling**](BandwidthThrottling.md) ### Authorization @@ -108,7 +136,12 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_machines_machine_id_delete** > projects_project_id_machines_machine_id_delete(project_id, machine_id) @@ -118,23 +151,32 @@ Uninstall agent Stops replication and removes the cloudendure agent from this machine. All cloud artifacts associated with those machines with the exception of launched target machine are deleted. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import replication_api from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ReplicationApi() -project_id = 'project_id_example' # str | -machine_id = 'machine_id_example' # str | - -try: - # Uninstall agent - api_instance.projects_project_id_machines_machine_id_delete(project_id, machine_id) -except ApiException as e: - print("Exception when calling ReplicationApi->projects_project_id_machines_machine_id_delete: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = replication_api.ReplicationApi(api_client) + project_id = "projectId_example" # str | + machine_id = "machineId_example" # str | + + # example passing only required values which don't have defaults set + try: + # Uninstall agent + api_instance.projects_project_id_machines_machine_id_delete(project_id, machine_id) + except cloudendure.ApiException as e: + print("Exception when calling ReplicationApi->projects_project_id_machines_machine_id_delete: %s\n" % e) ``` ### Parameters @@ -157,36 +199,60 @@ No authorization required - **Content-Type**: Not defined - **Accept**: Not defined -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Machine removed from CloudEndure service. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_machines_machine_id_pointsintime_get** -> CloudEndurePointInTimeList projects_project_id_machines_machine_id_pointsintime_get(project_id, machine_id, offset=offset, limit=limit) +> PointInTimeList projects_project_id_machines_machine_id_pointsintime_get(project_id, machine_id) List Available Points-in-time Returns the list of available recovery points for this machine. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import replication_api +from cloudendure.model.point_in_time_list import PointInTimeList from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ReplicationApi() -project_id = 'project_id_example' # str | -machine_id = 'machine_id_example' # str | -offset = 56 # int | With which item to start (0 based). (optional) -limit = 56 # int | A number specifying how many entries to return. (optional) - -try: - # List Available Points-in-time - api_response = api_instance.projects_project_id_machines_machine_id_pointsintime_get(project_id, machine_id, offset=offset, limit=limit) - pprint(api_response) -except ApiException as e: - print("Exception when calling ReplicationApi->projects_project_id_machines_machine_id_pointsintime_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = replication_api.ReplicationApi(api_client) + project_id = "projectId_example" # str | + machine_id = "machineId_example" # str | + offset = 0 # int | With which item to start (0 based). (optional) if omitted the server will use the default value of 0 + limit = 1500 # int | A number specifying how many entries to return. (optional) if omitted the server will use the default value of 1500 + + # example passing only required values which don't have defaults set + try: + # List Available Points-in-time + api_response = api_instance.projects_project_id_machines_machine_id_pointsintime_get(project_id, machine_id) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling ReplicationApi->projects_project_id_machines_machine_id_pointsintime_get: %s\n" % e) + + # example passing only required values which don't have defaults set + # and optional values + try: + # List Available Points-in-time + api_response = api_instance.projects_project_id_machines_machine_id_pointsintime_get(project_id, machine_id, offset=offset, limit=limit) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling ReplicationApi->projects_project_id_machines_machine_id_pointsintime_get: %s\n" % e) ``` ### Parameters @@ -195,12 +261,12 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **project_id** | **str**| | **machine_id** | **str**| | - **offset** | **int**| With which item to start (0 based). | [optional] - **limit** | **int**| A number specifying how many entries to return. | [optional] + **offset** | **int**| With which item to start (0 based). | [optional] if omitted the server will use the default value of 0 + **limit** | **int**| A number specifying how many entries to return. | [optional] if omitted the server will use the default value of 1500 ### Return type -[**CloudEndurePointInTimeList**](CloudEndurePointInTimeList.md) +[**PointInTimeList**](PointInTimeList.md) ### Authorization @@ -211,35 +277,59 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information retrieved successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_replication_configurations_get** -> CloudEndureReplicationConfigurationList projects_project_id_replication_configurations_get(project_id, offset=offset, limit=limit) +> ReplicationConfigurationList projects_project_id_replication_configurations_get(project_id) List Replication Configurations Returns the list of replication configuration objects defined in this project. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import replication_api +from cloudendure.model.replication_configuration_list import ReplicationConfigurationList from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ReplicationApi() -project_id = 'project_id_example' # str | -offset = 56 # int | With which item to start (0 based). (optional) -limit = 56 # int | A number specifying how many entries to return. (optional) - -try: - # List Replication Configurations - api_response = api_instance.projects_project_id_replication_configurations_get(project_id, offset=offset, limit=limit) - pprint(api_response) -except ApiException as e: - print("Exception when calling ReplicationApi->projects_project_id_replication_configurations_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = replication_api.ReplicationApi(api_client) + project_id = "projectId_example" # str | + offset = 0 # int | With which item to start (0 based). (optional) if omitted the server will use the default value of 0 + limit = 1500 # int | A number specifying how many entries to return. (optional) if omitted the server will use the default value of 1500 + + # example passing only required values which don't have defaults set + try: + # List Replication Configurations + api_response = api_instance.projects_project_id_replication_configurations_get(project_id) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling ReplicationApi->projects_project_id_replication_configurations_get: %s\n" % e) + + # example passing only required values which don't have defaults set + # and optional values + try: + # List Replication Configurations + api_response = api_instance.projects_project_id_replication_configurations_get(project_id, offset=offset, limit=limit) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling ReplicationApi->projects_project_id_replication_configurations_get: %s\n" % e) ``` ### Parameters @@ -247,12 +337,12 @@ except ApiException as e: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **project_id** | **str**| | - **offset** | **int**| With which item to start (0 based). | [optional] - **limit** | **int**| A number specifying how many entries to return. | [optional] + **offset** | **int**| With which item to start (0 based). | [optional] if omitted the server will use the default value of 0 + **limit** | **int**| A number specifying how many entries to return. | [optional] if omitted the server will use the default value of 1500 ### Return type -[**CloudEndureReplicationConfigurationList**](CloudEndureReplicationConfigurationList.md) +[**ReplicationConfigurationList**](ReplicationConfigurationList.md) ### Authorization @@ -263,46 +353,101 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information retrieved successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_replication_configurations_post** -> CloudEndureReplicationConfiguration projects_project_id_replication_configurations_post(body, project_id) +> ReplicationConfiguration projects_project_id_replication_configurations_post(project_id, replication_configuration) Create Replication Configuration -Control Data Replication parameters such as target cloud credentials, Staging Area and replication network configuration. A single configuration can exist per target region. Returns the newly created object. +Control Data Replication parameters such as target cloud credentials, Staging Area and replication network configuration. A single configuration can exist per target region. Returns the newly created object. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import replication_api +from cloudendure.model.error import Error +from cloudendure.model.replication_configuration import ReplicationConfiguration from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ReplicationApi() -body = cloudendure_api.CloudEndureReplicationConfiguration() # CloudEndureReplicationConfiguration | -project_id = 'project_id_example' # str | - -try: - # Create Replication Configuration - api_response = api_instance.projects_project_id_replication_configurations_post(body, project_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling ReplicationApi->projects_project_id_replication_configurations_post: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = replication_api.ReplicationApi(api_client) + project_id = "projectId_example" # str | + replication_configuration = ReplicationConfiguration( + volume_encryption_key="volume_encryption_key_example", + replication_tags=[ + ReplicationConfigurationReplicationTags( + key="key_example", + value="value_example", + ), + ], + disable_public_ip=True, + subnet_host_project="subnet_host_project_example", + cost_optimized_burst_balance_delta_threshold=1, + replication_software_download_source="replication_software_download_source_example", + cost_optimized_sc1_volumes_throughput_window_size_minutes=1, + replication_server_type="replication_server_type_example", + cost_optimized_burst_balance_window_size_minutes=1, + use_low_cost_disks=True, + compute_location_id="compute_location_id_example", + cloud_credentials="cloud_credentials_example", + subnet_id="subnet_id_example", + logical_location_id="logical_location_id_example", + cost_optimized_default_volumes_throughput_window_size_minutes=1, + bandwidth_throttling=1, + cost_optimized_burst_balance_threshold=1, + use_dedicated_server=True, + daily_pit_number=1, + zone="zone_example", + replicator_security_group_ids=[ + "replicator_security_group_ids_example", + ], + use_private_ip=True, + region="region_example", + id="id_example", + proxy_url="proxy_url_example", + volume_encryption_allowed=True, + object_storage_location="object_storage_location_example", + archiving_enabled=True, + converter_type="converter_type_example", + storage_location_id="storage_location_id_example", + use_cost_optimized_disk_type=True, + ) # ReplicationConfiguration | + + # example passing only required values which don't have defaults set + try: + # Create Replication Configuration + api_response = api_instance.projects_project_id_replication_configurations_post(project_id, replication_configuration) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling ReplicationApi->projects_project_id_replication_configurations_post: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**CloudEndureReplicationConfiguration**](CloudEndureReplicationConfiguration.md)| | **project_id** | **str**| | + **replication_configuration** | [**ReplicationConfiguration**](ReplicationConfiguration.md)| | ### Return type -[**CloudEndureReplicationConfiguration**](CloudEndureReplicationConfiguration.md) +[**ReplicationConfiguration**](ReplicationConfiguration.md) ### Authorization @@ -313,48 +458,104 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**201** | New object successfully created. | - | +**400** | There is a conflict in the replication configuration. This can be due to: subnet ID which does not exist in the region, security groups that are not in the same network as the subnet, etc. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **projects_project_id_replication_configurations_replication_configuration_id_patch** -> CloudEndureReplicationConfiguration projects_project_id_replication_configurations_replication_configuration_id_patch(body, project_id, replication_configuration_id) +> ReplicationConfiguration projects_project_id_replication_configurations_replication_configuration_id_patch(project_id, replication_configuration_id, replication_configuration) Modify Replication Configuration Modifying volumeEncryptionKey or modifying cloudCredentials to ones matching a different cloud account will result in replication restarting from initial sync. Returns the modified object. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import replication_api +from cloudendure.model.error import Error +from cloudendure.model.replication_configuration import ReplicationConfiguration from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.ReplicationApi() -body = cloudendure_api.CloudEndureReplicationConfiguration() # CloudEndureReplicationConfiguration | -project_id = 'project_id_example' # str | -replication_configuration_id = 'replication_configuration_id_example' # str | - -try: - # Modify Replication Configuration - api_response = api_instance.projects_project_id_replication_configurations_replication_configuration_id_patch(body, project_id, replication_configuration_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling ReplicationApi->projects_project_id_replication_configurations_replication_configuration_id_patch: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = replication_api.ReplicationApi(api_client) + project_id = "projectId_example" # str | + replication_configuration_id = "replicationConfigurationId_example" # str | + replication_configuration = ReplicationConfiguration( + volume_encryption_key="volume_encryption_key_example", + replication_tags=[ + ReplicationConfigurationReplicationTags( + key="key_example", + value="value_example", + ), + ], + disable_public_ip=True, + subnet_host_project="subnet_host_project_example", + cost_optimized_burst_balance_delta_threshold=1, + replication_software_download_source="replication_software_download_source_example", + cost_optimized_sc1_volumes_throughput_window_size_minutes=1, + replication_server_type="replication_server_type_example", + cost_optimized_burst_balance_window_size_minutes=1, + use_low_cost_disks=True, + compute_location_id="compute_location_id_example", + cloud_credentials="cloud_credentials_example", + subnet_id="subnet_id_example", + logical_location_id="logical_location_id_example", + cost_optimized_default_volumes_throughput_window_size_minutes=1, + bandwidth_throttling=1, + cost_optimized_burst_balance_threshold=1, + use_dedicated_server=True, + daily_pit_number=1, + zone="zone_example", + replicator_security_group_ids=[ + "replicator_security_group_ids_example", + ], + use_private_ip=True, + region="region_example", + id="id_example", + proxy_url="proxy_url_example", + volume_encryption_allowed=True, + object_storage_location="object_storage_location_example", + archiving_enabled=True, + converter_type="converter_type_example", + storage_location_id="storage_location_id_example", + use_cost_optimized_disk_type=True, + ) # ReplicationConfiguration | + + # example passing only required values which don't have defaults set + try: + # Modify Replication Configuration + api_response = api_instance.projects_project_id_replication_configurations_replication_configuration_id_patch(project_id, replication_configuration_id, replication_configuration) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling ReplicationApi->projects_project_id_replication_configurations_replication_configuration_id_patch: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**CloudEndureReplicationConfiguration**](CloudEndureReplicationConfiguration.md)| | **project_id** | **str**| | **replication_configuration_id** | **str**| | + **replication_configuration** | [**ReplicationConfiguration**](ReplicationConfiguration.md)| | ### Return type -[**CloudEndureReplicationConfiguration**](CloudEndureReplicationConfiguration.md) +[**ReplicationConfiguration**](ReplicationConfiguration.md) ### Authorization @@ -365,5 +566,11 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Object updated successfully. | - | +**400** | There is a conflict in the replication configuration. This can be due to: subnet ID which does not exist in the region, security groups that are not in the same network as the subnet, etc. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/docs/ReplicationConfiguration.md b/docs/ReplicationConfiguration.md new file mode 100644 index 000000000..36dd1c726 --- /dev/null +++ b/docs/ReplicationConfiguration.md @@ -0,0 +1,41 @@ +# ReplicationConfiguration + +Controls the location and behaviour of the replication servers, as well as the network communication from the CloudEndure agent. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**volume_encryption_key** | **str** | AWS only. ARN to private key for Volume Encryption. Possible values can be fetched from the Region object. | [optional] +**replication_tags** | [**[ReplicationConfigurationReplicationTags]**](ReplicationConfigurationReplicationTags.md) | AWS only. Tags that will be applied to every cloud resource created in the CloudEndure Staging Area. | [optional] +**disable_public_ip** | **bool** | When private IP is used, do not allocate public IP for replication server | [optional] +**subnet_host_project** | **str** | GCP only. Host project of cross project network subnet. | [optional] +**cost_optimized_burst_balance_delta_threshold** | **int** | when using cost optimized disk type, threshold of delta between measurments to move to default | [optional] +**replication_software_download_source** | **str** | | [optional] +**cost_optimized_sc1_volumes_throughput_window_size_minutes** | **int** | when using cost optimized disk type, size of window for sc1 volumes througput measurments | [optional] +**replication_server_type** | **str** | | [optional] +**cost_optimized_burst_balance_window_size_minutes** | **int** | when using cost optimized disk type, size of window for burst balance measurments | [optional] +**use_low_cost_disks** | **bool** | use low cost disks for replication whenever possible | [optional] +**compute_location_id** | **str** | | [optional] +**cloud_credentials** | **str** | The ID for the cloudCredentials object containing the credentials to be used for accessing the target cloud. | [optional] +**subnet_id** | **str** | Subnet where replication servers will be created. Possible values can be fetched from the Region object. | [optional] +**logical_location_id** | **str** | vcenter = vmFolder | [optional] +**cost_optimized_default_volumes_throughput_window_size_minutes** | **int** | when using cost optimized disk type, size of window for default volumes througput measurments | [optional] +**bandwidth_throttling** | **int** | Mbps to use for Data Replication (zero means no throttling). | [optional] +**cost_optimized_burst_balance_threshold** | **int** | when using cost optimized disk type, threshold of burst balance under which to move to default | [optional] +**use_dedicated_server** | **bool** | | [optional] +**daily_pit_number** | **int** | Number of days to Keep PIT snapshots | [optional] +**zone** | **str** | Relevant for GCP and Azure ARM. The Zone to replicate into. | [optional] +**replicator_security_group_ids** | **[str]** | AWS only. The security groups that will be applied to the replication servers. Possible values can be fetched from the Region object. | [optional] +**use_private_ip** | **bool** | Should the CloudEndure agent access the replication server using its private IP address. | [optional] +**region** | **str** | | [optional] [readonly] +**id** | **str** | | [optional] [readonly] +**proxy_url** | **str** | The full URI for a proxy (schema, username, password, domain, port) if required for the CloudEndure agent. | [optional] +**volume_encryption_allowed** | **bool** | | [optional] +**object_storage_location** | **str** | bucket in aws | [optional] +**archiving_enabled** | **bool** | | [optional] +**converter_type** | **str** | | [optional] +**storage_location_id** | **str** | | [optional] +**use_cost_optimized_disk_type** | **bool** | use cost optimized disk type for replication | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ReplicationConfigurationList.md b/docs/ReplicationConfigurationList.md new file mode 100644 index 000000000..ffe05e933 --- /dev/null +++ b/docs/ReplicationConfigurationList.md @@ -0,0 +1,11 @@ +# ReplicationConfigurationList + +A collection of Replication configuration objects. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[ReplicationConfiguration]**](ReplicationConfiguration.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ReplicationConfigurationReplicationTags.md b/docs/ReplicationConfigurationReplicationTags.md new file mode 100644 index 000000000..cb97efb88 --- /dev/null +++ b/docs/ReplicationConfigurationReplicationTags.md @@ -0,0 +1,11 @@ +# ReplicationConfigurationReplicationTags + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**key** | **str** | | [optional] +**value** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/SamlSettings.md b/docs/SamlSettings.md new file mode 100644 index 000000000..5cada6a37 --- /dev/null +++ b/docs/SamlSettings.md @@ -0,0 +1,12 @@ +# SamlSettings + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**identity_provider_certificate** | **str** | | [optional] +**identity_provider_url** | **str** | | [optional] +**identity_provider_id** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/SecurityGroup.md b/docs/SecurityGroup.md new file mode 100644 index 000000000..6410531d6 --- /dev/null +++ b/docs/SecurityGroup.md @@ -0,0 +1,12 @@ +# SecurityGroup + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**network_id** | **str** | | [optional] +**security_group_id** | **str** | | [optional] +**name** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/StorageLocation.md b/docs/StorageLocation.md new file mode 100644 index 000000000..9dee086bc --- /dev/null +++ b/docs/StorageLocation.md @@ -0,0 +1,11 @@ +# StorageLocation + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**location_id** | **str** | | [optional] +**name** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Subnet.md b/docs/Subnet.md new file mode 100644 index 000000000..9d5bbdbef --- /dev/null +++ b/docs/Subnet.md @@ -0,0 +1,13 @@ +# Subnet + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**subnet_id** | **str** | | [optional] +**network_id** | **str** | | [optional] +**name** | **str** | | [optional] +**outpost_arn** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Time.md b/docs/Time.md new file mode 100644 index 000000000..bb86ea252 --- /dev/null +++ b/docs/Time.md @@ -0,0 +1,11 @@ +# Time + +Server date-time. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**date_time** | **datetime** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UpdateableScripts.md b/docs/UpdateableScripts.md new file mode 100644 index 000000000..6bac29f50 --- /dev/null +++ b/docs/UpdateableScripts.md @@ -0,0 +1,11 @@ +# UpdateableScripts + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**result** | [**UpdateableScriptsResult**](UpdateableScriptsResult.md) | | [optional] +**error** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UpdateableScriptsResult.md b/docs/UpdateableScriptsResult.md new file mode 100644 index 000000000..055749c40 --- /dev/null +++ b/docs/UpdateableScriptsResult.md @@ -0,0 +1,24 @@ +# UpdateableScriptsResult + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**migration** | **str** | | [optional] +**custom_preboot_timeout** | **int** | | [optional] +**mount_points** | **[str]** | | [optional] +**postboot_auto_copy_datetime** | **str** | | [optional] +**lvm_vgs** | **[str]** | | [optional] +**preboot_environment** | **{str: (str,)}** | | [optional] +**postboot** | **[str]** | | [optional] +**converter_ami** | **str** | | [optional] +**postboot_uninstall_disable** | **bool** | | [optional] +**volume_id** | **str** | | [optional] +**preboot_auto_copy_datetime** | **str** | | [optional] +**partitions** | **[int]** | | [optional] +**preboot** | **[str]** | | [optional] +**on_premise_root_device** | **str** | | [optional] +**on_premise_volumes** | [**[UpdateableScriptsResultOnPremiseVolumes]**](UpdateableScriptsResultOnPremiseVolumes.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UpdateableScriptsResultOnPremiseVolumes.md b/docs/UpdateableScriptsResultOnPremiseVolumes.md new file mode 100644 index 000000000..f3cd10407 --- /dev/null +++ b/docs/UpdateableScriptsResultOnPremiseVolumes.md @@ -0,0 +1,12 @@ +# UpdateableScriptsResultOnPremiseVolumes + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**device** | **str** | | [optional] +**vol_id** | **str** | | [optional] +**size** | **int** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UpgradeCounterDelay.md b/docs/UpgradeCounterDelay.md new file mode 100644 index 000000000..0010617fa --- /dev/null +++ b/docs/UpgradeCounterDelay.md @@ -0,0 +1,11 @@ +# UpgradeCounterDelay + +Ask agent to retry upgrade connection after sleep time +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**sleep** | **int** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Usage.md b/docs/Usage.md new file mode 100644 index 000000000..b10876c75 --- /dev/null +++ b/docs/Usage.md @@ -0,0 +1,14 @@ +# Usage + +Usage of the license. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**start_of_use_date_time** | **datetime** | | [optional] +**cloud_id** | **str** | The ID in the cloud | [optional] +**name** | **str** | The name of the machine. | [optional] +**machine_id** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UsageList.md b/docs/UsageList.md new file mode 100644 index 000000000..6a5a6b952 --- /dev/null +++ b/docs/UsageList.md @@ -0,0 +1,11 @@ +# UsageList + +Usage list +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[Usage]**](Usage.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/User.md b/docs/User.md new file mode 100644 index 000000000..806b1bed4 --- /dev/null +++ b/docs/User.md @@ -0,0 +1,20 @@ +# User + +Contains the user identification properties such as e-mail address and Installation Token as well as user preferences. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**username** | **str** | | [optional] +**status** | **str** | | [optional] [readonly] +**account** | **str** | | [optional] [readonly] +**roles** | **[str]** | | [optional] [readonly] +**settings** | [**UserSettings**](UserSettings.md) | | [optional] +**api_token** | **str** | | [optional] [readonly] +**has_password** | **bool** | | [optional] +**terms_accepted** | **bool** | one-way; cannot be set at time of POST | [optional] +**id** | **str** | | [optional] [readonly] +**self_link** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UserApi.md b/docs/UserApi.md index 4624a4c28..e65f8a7c4 100644 --- a/docs/UserApi.md +++ b/docs/UserApi.md @@ -1,4 +1,4 @@ -# cloudendure_api.UserApi +# cloudendure.UserApi All URIs are relative to *https://console.cloudendure.com/api/latest* @@ -9,35 +9,50 @@ Method | HTTP request | Description [**users_user_id_delete**](UserApi.md#users_user_id_delete) | **DELETE** /users/{userId} | Delete a User [**users_user_id_patch**](UserApi.md#users_user_id_patch) | **PATCH** /users/{userId} | Modify user settings + # **change_password_post** -> change_password_post(body) +> change_password_post(password_params) Change Password ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import user_api +from cloudendure.model.error import Error +from cloudendure.model.inline_object import InlineObject from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.UserApi() -body = NULL # object | - -try: - # Change Password - api_instance.change_password_post(body) -except ApiException as e: - print("Exception when calling UserApi->change_password_post: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = user_api.UserApi(api_client) + password_params = InlineObject( + new_password="new_password_example", + old_password="old_password_example", + ) # InlineObject | + + # example passing only required values which don't have defaults set + try: + # Change Password + api_instance.change_password_post(password_params) + except cloudendure.ApiException as e: + print("Exception when calling UserApi->change_password_post: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**object**](object.md)| | + **password_params** | [**InlineObject**](InlineObject.md)| | ### Return type @@ -52,32 +67,48 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Password changed successfully. | - | +**400** | Password change did not succeed (e.g. Old password mismatch). | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **me_get** -> CloudEndureUser me_get() +> User me_get() Me Provides user configuration information for the currently logged in user. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import user_api +from cloudendure.model.user import User from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.UserApi() - -try: - # Me - api_response = api_instance.me_get() - pprint(api_response) -except ApiException as e: - print("Exception when calling UserApi->me_get: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = user_api.UserApi(api_client) + + # example, this endpoint has no required or optional parameters + try: + # Me + api_response = api_instance.me_get() + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling UserApi->me_get: %s\n" % e) ``` ### Parameters @@ -85,7 +116,7 @@ This endpoint does not need any parameter. ### Return type -[**CloudEndureUser**](CloudEndureUser.md) +[**User**](User.md) ### Authorization @@ -96,32 +127,44 @@ No authorization required - **Content-Type**: Not defined - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Information retrieved successfully. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **users_user_id_delete** > users_user_id_delete(user_id) Delete a User -todo - ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import user_api from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.UserApi() -user_id = 'user_id_example' # str | - -try: - # Delete a User - api_instance.users_user_id_delete(user_id) -except ApiException as e: - print("Exception when calling UserApi->users_user_id_delete: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = user_api.UserApi(api_client) + user_id = "userId_example" # str | + + # example passing only required values which don't have defaults set + try: + # Delete a User + api_instance.users_user_id_delete(user_id) + except cloudendure.ApiException as e: + print("Exception when calling UserApi->users_user_id_delete: %s\n" % e) ``` ### Parameters @@ -143,46 +186,85 @@ No authorization required - **Content-Type**: Not defined - **Accept**: Not defined -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | User deleted successfully | - | +**409** | User is Account Owner and cannot be deleted. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **users_user_id_patch** -> CloudEndureUser users_user_id_patch(body, user_id) +> User users_user_id_patch(user_id, user) Modify user settings Configure which projects this user can receive e-mail notifications for. ### Example + ```python -from __future__ import print_function import time -from cloudendure import cloudendure_api -from cloudendure.cloudendure_api.rest import ApiException +import cloudendure +from cloudendure.api import user_api +from cloudendure.model.error import Error +from cloudendure.model.user import User from pprint import pprint - -# create an instance of the API class -api_instance = cloudendure_api.UserApi() -body = cloudendure_api.CloudEndureUser() # CloudEndureUser | -user_id = 'user_id_example' # str | - -try: - # Modify user settings - api_response = api_instance.users_user_id_patch(body, user_id) - pprint(api_response) -except ApiException as e: - print("Exception when calling UserApi->users_user_id_patch: %s\n" % e) +# Defining the host is optional and defaults to https://console.cloudendure.com/api/latest +# See configuration.py for a list of all supported configuration parameters. +configuration = cloudendure.Configuration( + host = "https://console.cloudendure.com/api/latest" +) + + +# Enter a context with an instance of the API client +with cloudendure.ApiClient() as api_client: + # Create an instance of the API class + api_instance = user_api.UserApi(api_client) + user_id = "userId_example" # str | + user = User( + username="username_example", + status="PENDING", + account="account_example", + roles=[ + "USER", + ], + settings=UserSettings( + send_notifications=UserSettingsSendNotifications( + project_ids=[ + "project_ids_example", + ], + project_ids_untested_migrations=[ + "project_ids_untested_migrations_example", + ], + ), + ), + api_token="api_token_example", + has_password=True, + terms_accepted=True, + id="id_example", + self_link="self_link_example", + ) # User | + + # example passing only required values which don't have defaults set + try: + # Modify user settings + api_response = api_instance.users_user_id_patch(user_id, user) + pprint(api_response) + except cloudendure.ApiException as e: + print("Exception when calling UserApi->users_user_id_patch: %s\n" % e) ``` ### Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**CloudEndureUser**](CloudEndureUser.md)| | **user_id** | **str**| | + **user** | [**User**](User.md)| | ### Return type -[**CloudEndureUser**](CloudEndureUser.md) +[**User**](User.md) ### Authorization @@ -193,5 +275,12 @@ No authorization required - **Content-Type**: application/json - **Accept**: application/json -[[Back to top]](#) [[Back to API list]](API_README.md#documentation-for-api-endpoints) [[Back to Model list]](API_README.md#documentation-for-models) [[Back to README]](API_README.md) +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Object updated successfully. | - | +**401** | Tried patching a user different to the currently logged in one. | - | +**404** | Cannot apply the project ids provided. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/docs/UserReport.md b/docs/UserReport.md new file mode 100644 index 000000000..d8d1e9b2b --- /dev/null +++ b/docs/UserReport.md @@ -0,0 +1,19 @@ +# UserReport + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**n_protected_machines** | **int** | | [optional] +**project_name** | **str** | | [optional] +**is_activated** | **bool** | | [optional] +**n_license_usages** | **int** | | [optional] +**gcp_machines_finance_data** | [**UserReportGcpMachinesFinanceData**](UserReportGcpMachinesFinanceData.md) | | [optional] +**total_tested_or_cutover** | **int** | | [optional] +**owner_name** | **str** | | [optional] +**n_lagging_machines** | **int** | | [optional] +**n_active_target_machines** | **int** | | [optional] +**n_test_machines** | **int** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UserReportGcpMachinesFinanceData.md b/docs/UserReportGcpMachinesFinanceData.md new file mode 100644 index 000000000..b21235467 --- /dev/null +++ b/docs/UserReportGcpMachinesFinanceData.md @@ -0,0 +1,10 @@ +# UserReportGcpMachinesFinanceData + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[GcpMachinesFinanceData]**](GcpMachinesFinanceData.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UserReports.md b/docs/UserReports.md new file mode 100644 index 000000000..d48efcc7f --- /dev/null +++ b/docs/UserReports.md @@ -0,0 +1,11 @@ +# UserReports + +finance report of users +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[UserReport]**](UserReport.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UserSettings.md b/docs/UserSettings.md new file mode 100644 index 000000000..eef0fcac7 --- /dev/null +++ b/docs/UserSettings.md @@ -0,0 +1,10 @@ +# UserSettings + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**send_notifications** | [**UserSettingsSendNotifications**](UserSettingsSendNotifications.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UserSettingsSendNotifications.md b/docs/UserSettingsSendNotifications.md new file mode 100644 index 000000000..fe197ee4f --- /dev/null +++ b/docs/UserSettingsSendNotifications.md @@ -0,0 +1,11 @@ +# UserSettingsSendNotifications + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**project_ids** | **[str]** | | [optional] +**project_ids_untested_migrations** | **[str]** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UsersAndRoles.md b/docs/UsersAndRoles.md new file mode 100644 index 000000000..ff4413e28 --- /dev/null +++ b/docs/UsersAndRoles.md @@ -0,0 +1,11 @@ +# UsersAndRoles + +Collection of objects each of which defines which roles to add or remove from specified userId; used by /users/assignRoles and /users/revokeRoles APIs. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[UsersAndRolesItems]**](UsersAndRolesItems.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UsersAndRolesItems.md b/docs/UsersAndRolesItems.md new file mode 100644 index 000000000..82c44d6c6 --- /dev/null +++ b/docs/UsersAndRolesItems.md @@ -0,0 +1,11 @@ +# UsersAndRolesItems + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**user_id** | **str** | | [optional] +**roles** | **[str]** | The list of roles you want to add to the User (when used with the assignRoles API) or the list of roles you want to remove from the User (when used with the revokeRoles API). All Users have the \"User\" role which cannot be removed. The following cases will be silently ignored: trying to remove the \"User\" role, passing an empty string as a role and using an empty array. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UsersList.md b/docs/UsersList.md new file mode 100644 index 000000000..58b2fbd13 --- /dev/null +++ b/docs/UsersList.md @@ -0,0 +1,11 @@ +# UsersList + +A collection of user objects. +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**items** | [**[User]**](User.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/examples/README.md b/examples/README.md deleted file mode 100644 index d7a80bc2d..000000000 --- a/examples/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# AWS Setup - -## Examples - -- [JSON Policy](json/policy.json) -- [Terraform IAM Setup](terraform/README.md) diff --git a/examples/json/policy.json b/examples/json/policy.json deleted file mode 100644 index 5927f4db5..000000000 --- a/examples/json/policy.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "Version": "2012-10-17", - "Id": "EBS-key-policy", - "Statement": [ - { - "Sid": "Enable IAM User Permissions", - "Effect": "Allow", - "Principal": { - "AWS": [ - "arn:aws:iam:::root" - ] - }, - "Action": "kms:*", - "Resource": "*" - }, - { - "Sid": "Allow access for Key Administrators", - "Effect": "Allow", - "Principal": { - "AWS": [ - "arn:aws:iam:::role/" - ] - }, - "Action": [ - "kms:Create*", - "kms:Describe*", - "kms:Enable*", - "kms:List*", - "kms:Put*", - "kms:Update*", - "kms:Revoke*", - "kms:Disable*", - "kms:Get*", - "kms:Delete*", - "kms:TagResource", - "kms:UntagResource", - "kms:ScheduleKeyDeletion", - "kms:CancelKeyDeletion" - ], - "Resource": "*" - }, - { - "Sid": "Allow use of the key", - "Effect": "Allow", - "Principal": { - "AWS": [ - "arn:aws:iam:::role/", - "arn:aws:iam:::user/CloudEndureAccess" - ] - }, - "Action": [ - "kms:CreateGrant", - "kms:Encrypt", - "kms:Decrypt", - "kms:ReEncrypt*", - "kms:GenerateDataKey*", - "kms:DescribeKey" - ], - "Resource": "*" - } - ] -} diff --git a/examples/terraform/README.md b/examples/terraform/README.md deleted file mode 100644 index cae6e99cb..000000000 --- a/examples/terraform/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# CloudEndure Cross Account Setup - -## Inputs - -| Name | Description | Type | Default | Required | -|------|-------------|:----:|:-----:|:-----:| -| destination\_account\_numbers | The destination AWS account where images will be copied. | list | `` | no | -| source\_account\_number | The source AWS account where the CloudEndure generated image resides. | string | n/a | yes | diff --git a/examples/terraform/main.tf b/examples/terraform/main.tf deleted file mode 100644 index c0ca123db..000000000 --- a/examples/terraform/main.tf +++ /dev/null @@ -1,90 +0,0 @@ -data "aws_iam_policy_document" "cloudendure_role_policy" { - statement { - actions = ["sts:AssumeRole"] - - principals { - type = "Service" - identifiers = ["ec2.amazonaws.com"] - } - } -} - -resource "aws_iam_role" "this" { - name = "cloudendure-access-role" - assume_role_policy = "${data.aws_iam_policy_document.cloudendure_role_policy.json}" -} - -data "aws_iam_policy_document" "cloudendure" { - statement { - sid = "Enable IAM User Permissions" - - principals { - type = "AWS" - identifiers = ["arn:aws:iam::${var.source_account_number}:root"] - } - - actions = ["kms:*"] - resources = ["*"] - } - - statement { - sid = "Allow access for Key Administrators" - - principals { - type = "AWS" - identifiers = ["arn:aws:iam::${var.source_account_number}:role/cloudendure-access-role"] - } - - actions = [ - "kms:Create*", - "kms:Describe*", - "kms:Enable*", - "kms:List*", - "kms:Put*", - "kms:Update*", - "kms:Revoke*", - "kms:Disable*", - "kms:Get*", - "kms:Delete*", - "kms:TagResource", - "kms:UntagResource", - "kms:ScheduleKeyDeletion", - "kms:CancelKeyDeletion", - ] - - resources = [ - "*", - ] - } - - statement { - sid = "Allow use of the key" - - principals { - type = "AWS" - identifiers = [ - "arn:aws:iam::${var.destination_account_number}:role/${var.destination_role_name}", - "arn:aws:iam::${var.source_account_number}:user/CloudEndureAccess", - ] - } - - actions = [ - "kms:CreateGrant", - "kms:Encrypt", - "kms:Decrypt", - "kms:ReEncrypt*", - "kms:GenerateDataKey*", - "kms:DescribeKey", - ] - - resources = [ - "*", - ] - } -} - -resource "aws_iam_role_policy" "this" { - name = "cloudendure_access_role_policy" - role = "${aws_iam_role.this.id}" - policy = "${data.aws_iam_policy_document.cloudendure.json}" -} diff --git a/examples/terraform/outputs.tf b/examples/terraform/outputs.tf deleted file mode 100644 index e69de29bb..000000000 diff --git a/examples/terraform/variables.tf b/examples/terraform/variables.tf deleted file mode 100644 index 6fb38bd3b..000000000 --- a/examples/terraform/variables.tf +++ /dev/null @@ -1,10 +0,0 @@ -variable "source_account_number" { - description = "The source AWS account where the CloudEndure generated image resides." - type = "string" -} - -variable "destination_account_numbers" { - default = [] - description = "The destination AWS account where images will be copied." - type = "list" -} diff --git a/images/ce_dataflow.png b/images/ce_dataflow.png deleted file mode 100644 index 7e29801b84a83468f55bccae6a0b3237cebf8ef0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282539 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 diff --git a/images/stepfunctions_graph.svg b/images/stepfunctions_graph.svg deleted file mode 100644 index 9dbe9df22..000000000 --- a/images/stepfunctions_graph.svg +++ /dev/null @@ -1,2 +0,0 @@ - - Start End Find Instance Instance Found? Not A Migration Instance Check/Build Repo Create Security Group Get Instance Status Instance Ready? Instance Ready Wait Notify Failure Wait For Instance Create Root Image Get Root Image Status Root Image Complete? Create Snapshots Image Wait For Root Image Get Snapshots Image Status Snapshots Image Complete? Share Image Wait For Snapshots Image Copy Image Wait For Copy Get Copy Status Copy Complete? Image Cleanup Migration Failed Launch Terraform Launch Terraform Success? Wait For Final Instance Get Final Instance Status Final Instance Ready? Migration Finished \ No newline at end of file diff --git a/lambda/__init__.py b/lambda/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/lambda/copy_ami.py b/lambda/copy_ami.py deleted file mode 100644 index bff69c630..000000000 --- a/lambda/copy_ami.py +++ /dev/null @@ -1,110 +0,0 @@ -# -*- coding: utf-8 -*- -"""Define the CloudEndure lambda function. - -Attributes: - LOG_LEVEL (str): - REGION_OVERRIDE (str): If provided, this value will override the default AWS region. - logger (logging.Logger): - -""" -from __future__ import annotations - -import logging -import os -from typing import Dict - -import boto3 -from botocore import client as boto_client - -logger: logging.Logger = logging.getLogger(__name__) - -SRC_ACCOUNT_ID: str = os.environ.get("CLOUDENDURE_SRC_ACCOUNT", "") -DEST_ACCOUNT_ID: str = os.environ.get("CLOUDENDURE_DEST_ACCOUNT", "") -IMAGE_ID: str = os.environ.get("CLOUDENDURE_IMAGE_ID", "") -SRC_REGION: str = os.environ.get("CLOUDENDURE_SRC_REGION", "us-east-1") -DEST_REGION: str = os.environ.get("CLOUDENDURE_DEST_REGION", "us-west-1") -SRC_ROLE_ARN: str = os.environ.get("CLOUDENDURE_SRC_ROLE_ARN", "") -DEST_ROLE_ARN: str = os.environ.get("CLOUDENDURE_DEST_ROLE_ARN", "") -SESSION_NAME: str = os.environ.get("CLOUDENDURE_SESSION_NAME", "CloudEndureMigration") - - -def assume_role(sts_role_arn: str = "", session_name: str = SESSION_NAME) -> Dict[str, str]: - sts: boto_client = boto3.client("sts") - - try: - credentials: Dict[str, str] = sts.assume_role(RoleArn=sts_role_arn, RoleSessionName=session_name).get( - "Credentials", {} - ) - except Exception as e: - logger.error( - "%s encountered while attempting to assume the Role ARN: (%s) during (%s)", e, sts_role_arn, session_name, - ) - - if not credentials: - logger.error("Unable to assume role via STS! Please check permissions and try again.") - - return credentials - - -def get_ec2(credentials: Dict[str, str], region: str = "") -> boto_client: - """Get an active EC2 boto3 client.""" - ec2 = None - - # Copy image to failover regions - try: - ec2: boto_client = boto3.client( - "ec2", - region, - aws_access_key_id=credentials["AccessKeyId"], - aws_secret_access_key=credentials["SecretAccessKey"], - aws_session_token=credentials["SessionToken"], - ) - except Exception as e: - logger.error(e) - - return ec2 - - -def share_image(image_name: str = "CloudEndureImage") -> bool: - src_credentials: Dict[str, str] = assume_role(SRC_ROLE_ARN) - src_ec2: boto_client = get_ec2(src_credentials, region=SRC_REGION) - - # Access the image that needs to be copied - image = src_ec2.Image(IMAGE_ID) - - try: - # Share the image with the destination account - image.modify_attribute( - ImageId=image.id, - Attribute="launchPermission", - OperationType="add", - LaunchPermission={"Add": [{"UserId": DEST_ACCOUNT_ID}]}, - ) - except Exception as e: - logger.error(e) - return False - - # We have to now share the snapshots associated with the AMI so it can be copied - devices = image.block_device_mappings - for device in devices: - if "Ebs" in device: - snapshot_id: str = device["Ebs"]["SnapshotId"] - snapshot = src_ec2.Snapshot(snapshot_id) - snapshot.modify_attribute( - Attribute="createVolumePermission", - CreateVolumePermission={"Add": [{"UserId": DEST_ACCOUNT_ID}]}, - OperationType="add", - ) - - # Access destination account so we can now copy the image - dest_credentials: Dict[str, str] = assume_role(DEST_ROLE_ARN) - # Copy image to failover regions - dest_ec2: boto_client = get_ec2(dest_credentials, region=DEST_REGION) - - # Copy the shared AMI to dest region - try: - dest_ec2.copy_image(Name=image_name, SourceImageId=image.id, SourceRegion=SRC_REGION) - except Exception as e: - logger.error(e) - return False - return True diff --git a/lambda/exceptions.py b/lambda/exceptions.py deleted file mode 100644 index 58072d9c9..000000000 --- a/lambda/exceptions.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -"""Define the Lambda specific exceptions.""" -from __future__ import annotations - - -class LambdaException(Exception): - """Define the generic AWS Lambda exception.""" - - pass - - -class InvalidPayload(LambdaException): - """Define the exception to be raised when an invalid payload is encountered.""" - - pass - - -class ImproperlyConfigured(LambdaException): - """Define the exception to be raised if the environment is improperly configured or missing.""" - - pass diff --git a/lambda/handler.py b/lambda/handler.py deleted file mode 100644 index 666199f40..000000000 --- a/lambda/handler.py +++ /dev/null @@ -1,147 +0,0 @@ -# -*- coding: utf-8 -*- -"""Define the CloudEndure lambda function. - -Attributes: - LOG_LEVEL (str): - REGION_OVERRIDE (str): If provided, this value will override the default AWS region. - logger (logging.Logger): The logger to be used throughout execution of the AWS Lambda. - -""" -from __future__ import annotations - -import datetime -import json -import logging -import os -from typing import Any, Dict, List - -import boto3 -from botocore import client as boto_client -from botocore.exceptions import ClientError - -from .exceptions import ImproperlyConfigured, InvalidPayload - -LOG_LEVEL: int = getattr(logging, os.environ.get("CLOUDENDURE_LOGLEVEL", "INFO")) -REGION_OVERRIDE: str = os.environ.get("CLOUDENDURE_REGION_OVERRIDE", "") - -logger: logging.Logger = logging.getLogger(__name__) - -logger.setLevel(LOG_LEVEL) - - -def send_sqs_message(image_info: Dict[str, Any]) -> bool: - """Send a SQS message. - - The message includes the AMI information that was created from the migrated - instance that passed testing post migration in CloudEndure. - - Raises: - ClientError: The exception is raised in the event of a boto3 client error. - ImproperlyConfigured: The exception is raised in the event of missing or invalid - environment configuration settings. - - Returns: - bool: Whether or not the message has been sent successfully. - - """ - queue_url: str = os.environ.get("QueueURL", "") - if not queue_url: - raise ImproperlyConfigured("Missing environment variable: QueueURL") - - try: - message: str = json.dumps(image_info) - sqs_client: boto_client = boto3.client("sqs") - sqs_client.send_message(QueueUrl=queue_url, MessageBody=message) - except ClientError as e: - logger.error(e.response) - return False - except ImproperlyConfigured as e: - logger.error(e) - return False - return True - - -def create_ami(project_id: str, instance_id: str) -> bool: - """Create an AMI from the specified instance. - - Args: - project_id (str): The ID associated with the Project. - instance_id (str): The ID associated with the AWS instance. - - Raises: - ClientError: The exception is raised in the event of a boto3 client error. - - Returns: - bool: Whether or not the AMI has been created successfully. - - """ - try: - _ec2_client: boto_client = boto3.client("ec2") - - # Create an AMI from the migrated instance - image_creation_time: str = datetime.datetime.utcnow().strftime("%Y%m%d%H%M%S") - ec2_image: Dict[str, Any] = _ec2_client.create_image( - InstanceId=instance_id, - Name=f"{image_creation_time}", - Description=f"{project_id} {image_creation_time}", - NoReboot=True, - ) - logger.info("AMI Id: %s", ec2_image) - _filters: List[Dict] = [{"Name": "resource-id", "Values": [instance_id]}] - - # Tag the newly created AMI by getting the tags of the migrated instance to copy to the AMI. - ec2_tags: Dict[str, Any] = _ec2_client.describe_tags(Filters=_filters) - - logger.info(ec2_tags) - for tag in ec2_tags["Tags"]: - _ec2_client.create_tags( - Resources=[ec2_image["ImageId"]], Tags=[{"Key": tag["Key"], "Value": tag["Value"]}], - ) - - send_sqs_message(ec2_image) - - except ClientError as err: - logger.error(err.response) - return False - return True - - -def lambda_handler(event: Dict[str, Any], context: Dict[str, Any]) -> bool: - """Define the AWS Lambda entry point and handler. - - Args: - event (str): The event performed against Lambda. - context (dict): The context of the request performed against Lambda. - - Raises: - ClientError: The exception is raised in the event of a boto3 client error. - InvalidPayload: The exception is raised in the event of an invalid payload. - - Returns: - bool: Whether or not the lambda function has executed successfully. - - """ - logger.debug(event) - - event_records: List[Any] = event.get("Records", []) - if not event_records: - return False - - try: - event_message: str = event_records[0].get("Sns", {}).get("Message", "") - json_sns_message: Dict[str, Any] = json.loads(event_message) - instance_id: str = json_sns_message.get("instanceId", "") - project_id: str = json_sns_message.get("projectId", "") - - if json_sns_message.get("Pass", "NA") != "True": - raise InvalidPayload(f"{instance_id} did not pass post migration testing! Not creating an AMI.") - else: - logger.info("%s passed post migration testing. Creating an AMI." % (instance_id)) - create_ami(project_id, instance_id) - except ClientError as e: - logger.error(e.response) - return False - except InvalidPayload as e: - logger.error(e) - return False - return True diff --git a/openapi-generator/templates/README_common.mustache b/openapi-generator/templates/README_common.mustache new file mode 100644 index 000000000..21b73d86a --- /dev/null +++ b/openapi-generator/templates/README_common.mustache @@ -0,0 +1,153 @@ +```python +import cloudendure +from cloudendure.api import authentication_api +from cloudendure.api import project_api +# since the api def doesn't have this defined, we'll rename it. +from cloudendure.models import InlineObject1 as LoginModel + +# bare, base api client +api_client = cloudendure.ApiClient() + +# we need to auth before anything else... if we don't have a session... +auth_client = authentication_api.AuthenticationApi(api_client) +# your token can be found in the 'Setup & Info' page, in the 'OTHER SETTINGS' tab under the 'API Token' section. +login_model = LoginModel(user_api_token="xxxx-yyyy-zzzz...") +auth_client.login_post(login_model) +# In order to set the proper session cookie and headers: +api_client.set_auth_from_last_response() + +# you can get both parts of the auth to store for later use (so you don't have to log in again) +# stored in the header as 'X-XSRF-TOKEN' +xsrf_token = api_client.xsrf_token + +# the session cookie +cookie = api_client.cookie + +# no need to log back in if you've got valid token and session cookie +new_api_client = cloudendure.ApiClient() +new_api_client.set_session_auth(xsrf_token, cookie) + +# now... do something useful +project_client = project_api.ProjectApi(new_api_client) # or api_client +response = project_client.projects_get() +print(response.items) +project_id = response.items[0].id + +machine_client = machines_api.MachinesApi(api_client) # or new_api_client +response = machine_client.projects_project_id_machinies_get(project_id) +print(response.items) +``` + +## Documentation for API Endpoints + + + +All URIs are relative to *{{basePath}}* + +Class | Method | HTTP request | Description +------------ | ------------- | ------------- | ------------- +{{#apiInfo}}{{#apis}}{{#operations}}{{#operation}}*{{classname}}* | [**{{operationId}}**]({{apiDocPath}}{{classname}}.md#{{operationIdLowerCase}}) | **{{httpMethod}}** {{path}} | {{#summary}}{{summary}}{{/summary}} +{{/operation}}{{/operations}}{{/apis}}{{/apiInfo}} + +## Documentation For Models + +{{#models}}{{#model}} - [{{{classname}}}]({{modelDocPath}}{{{classname}}}.md) +{{/model}}{{/models}} + +## Documentation For Authorization + +{{^authMethods}} + See the above example for authorization. +{{/authMethods}} +{{#authMethods}} +{{#last}} Authentication schemes defined for the API:{{/last}} +## {{{name}}} + +{{#isApiKey}} +- **Type**: API key +- **API key parameter name**: {{{keyParamName}}} +- **Location**: {{#isKeyInQuery}}URL query string{{/isKeyInQuery}}{{#isKeyInHeader}}HTTP header{{/isKeyInHeader}} +{{/isApiKey}} +{{#isBasic}} +{{#isBasicBasic}} +- **Type**: HTTP basic authentication +{{/isBasicBasic}} +{{#isBasicBearer}} +- **Type**: Bearer authentication{{#bearerFormat}} ({{{.}}}){{/bearerFormat}} +{{/isBasicBearer}} +{{#isHttpSignature}} +- **Type**: HTTP signature authentication +{{/isHttpSignature}} +{{/isBasic}} +{{#isOAuth}} +- **Type**: OAuth +- **Flow**: {{{flow}}} +- **Authorization URL**: {{{authorizationUrl}}} +- **Scopes**: {{^scopes}}N/A{{/scopes}} +{{#scopes}} - **{{{scope}}}**: {{{description}}} +{{/scopes}} +{{/isOAuth}} + +{{/authMethods}} + +## Author + +(2nd Watch)[https://www.2ndwatch.com] +{{#apiInfo}}{{#apis}}{{#-last}}{{infoEmail}} +{{/-last}}{{/apis}}{{/apiInfo}} + +## Notes for Large OpenAPI documents +If the OpenAPI document is large, imports in {{{packageName}}}.apis and {{{packageName}}}.models may fail with a +RecursionError indicating the maximum recursion limit has been exceeded. In that case, there are a couple of solutions: + +Solution 1: +Use specific imports for apis and models like: +- `from {{{packageName}}}.api.default_api import DefaultApi` +- `from {{{packageName}}}.model.pet import Pet` + +Solution 2: +Before importing the package, adjust the maximum recursion limit as shown below: +``` +import sys +sys.setrecursionlimit(1500) +import {{{packageName}}} +from {{{packageName}}}.apis import * +from {{{packageName}}}.models import * +``` + +## Generating the API + +### Dependencies +First things first, you'll need these tools installed in order to build this +projects client code: + * `curl` + * `python` + * (Poetry)[https://python-poetry.org/] + * (openapi-generator)[https://github.com/OpenAPITools/openapi-generator] + +### `Makefile`, Build / Rebuild +This project makes extensive use of `GNU make`. You can view all the available +make commands by just typing the `make` command, or `make help`. Each of the +components used to build this project are their own command, but the two that +we're looking for to do everything for us are: + * `make build-api` + * `make rebuild-api` + +Both of these commands do all the things. The only difference is that +`rebuild-api` deletes all the generated code first. I prefer this method to +make sure any cruft that's different between the apis from cloudendure is +removed. So, simply run: + +```bash +%> make rebuild-api +``` + +... and boom! it's built! + +Now, commit the changes, then tag using the `make tag` command. Do note that +the actual API version from CE is "5", so the versions here will not entirely +match up. Given that this needed to be regenerated, it was likely a breaking +change, but we at _least_ want to stick with the "5", so we'll bump the MINOR +version.ie: the `X` in `v5.X.0` + +once this step is done we should be complete. diff --git a/openapi-generator/templates/api_client.mustache b/openapi-generator/templates/api_client.mustache new file mode 100644 index 000000000..9e21c6ee9 --- /dev/null +++ b/openapi-generator/templates/api_client.mustache @@ -0,0 +1,891 @@ +{{>partial_header}} + +import json +import atexit +import mimetypes +from multiprocessing.pool import ThreadPool +import io +import os +import re +import typing +from urllib.parse import quote +from urllib3.fields import RequestField + +{{#tornado}} +import tornado.gen +{{/tornado}} + +from {{packageName}} import rest +from {{packageName}}.configuration import Configuration +from {{packageName}}.exceptions import ApiTypeError, ApiValueError, ApiException +from {{packageName}}.model_utils import ( + ModelNormal, + ModelSimple, + ModelComposed, + check_allowed_values, + check_validations, + date, + datetime, + deserialize_file, + file_type, + model_to_dict, + none_type, + validate_and_convert_types +) + + +class ApiClient(object): + """Generic API client for OpenAPI client library builds. + + OpenAPI generic API client. This client handles the client- + server communication, and is invariant across implementations. Specifics of + the methods and models for each application are generated from the OpenAPI + templates. + + NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + Do not edit the class manually. + + :param configuration: .Configuration object for this client + :param header_name: a header to pass when making calls to the API. + :param header_value: a header value to pass when making calls to + the API. + :param cookie: a cookie to include in the header when making calls + to the API + :param pool_threads: The number of threads to use for async requests + to the API. More threads means more concurrent API requests. + """ + + _pool = None + + def __init__(self, configuration=None, header_name=None, header_value=None, + cookie=None, pool_threads=1): + if configuration is None: + configuration = Configuration.get_default_copy() + self.configuration = configuration + self.pool_threads = pool_threads + + self.rest_client = rest.RESTClientObject(configuration) + self.default_headers = {} + if header_name is not None: + self.default_headers[header_name] = header_value + self.cookie = cookie + # Set default User-Agent. + self.user_agent = '{{#httpUserAgent}}{{{.}}}{{/httpUserAgent}}{{^httpUserAgent}}OpenAPI-Generator/{{{packageVersion}}}/python{{/httpUserAgent}}' + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.close() + + def close(self): + if self._pool: + self._pool.close() + self._pool.join() + self._pool = None + if hasattr(atexit, 'unregister'): + atexit.unregister(self.close) + + @property + def pool(self): + """Create thread pool on first request + avoids instantiating unused threadpool for blocking clients. + """ + if self._pool is None: + atexit.register(self.close) + self._pool = ThreadPool(self.pool_threads) + return self._pool + + @property + def user_agent(self): + """User agent for this API client""" + return self.default_headers['User-Agent'] + + @user_agent.setter + def user_agent(self, value): + self.default_headers['User-Agent'] = value + + def set_default_header(self, header_name, header_value): + self.default_headers[header_name] = header_value + + {{#tornado}} + @tornado.gen.coroutine + {{/tornado}} + {{#asyncio}}async {{/asyncio}}def __call_api( + self, + resource_path: str, + method: str, + path_params: typing.Optional[typing.Dict[str, typing.Any]] = None, + query_params: typing.Optional[typing.List[typing.Tuple[str, typing.Any]]] = None, + header_params: typing.Optional[typing.Dict[str, typing.Any]] = None, + body: typing.Optional[typing.Any] = None, + post_params: typing.Optional[typing.List[typing.Tuple[str, typing.Any]]] = None, + files: typing.Optional[typing.Dict[str, typing.List[io.IOBase]]] = None, + response_type: typing.Optional[typing.Tuple[typing.Any]] = None, + auth_settings: typing.Optional[typing.List[str]] = None, + _return_http_data_only: typing.Optional[bool] = None, + collection_formats: typing.Optional[typing.Dict[str, str]] = None, + _preload_content: bool = True, + _request_timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + _host: typing.Optional[str] = None, + _check_type: typing.Optional[bool] = None + ): + + config = self.configuration + + # header parameters + header_params = header_params or {} + header_params.update(self.default_headers) + if self.cookie: + header_params['Cookie'] = self.cookie + if header_params: + header_params = self.sanitize_for_serialization(header_params) + header_params = dict(self.parameters_to_tuples(header_params, + collection_formats)) + + # path parameters + if path_params: + path_params = self.sanitize_for_serialization(path_params) + path_params = self.parameters_to_tuples(path_params, + collection_formats) + for k, v in path_params: + # specified safe chars, encode everything + resource_path = resource_path.replace( + '{%s}' % k, + quote(str(v), safe=config.safe_chars_for_path_param) + ) + + # query parameters + if query_params: + query_params = self.sanitize_for_serialization(query_params) + query_params = self.parameters_to_tuples(query_params, + collection_formats) + + # post parameters + if post_params or files: + post_params = post_params if post_params else [] + post_params = self.sanitize_for_serialization(post_params) + post_params = self.parameters_to_tuples(post_params, + collection_formats) + post_params.extend(self.files_parameters(files)) + if header_params['Content-Type'].startswith("multipart"): + post_params = self.parameters_to_multipart(post_params, + (dict) ) + + # body + if body: + body = self.sanitize_for_serialization(body) + + # auth setting + self.update_params_for_auth(header_params, query_params, + auth_settings, resource_path, method, body) + + # request url + if _host is None: + url = self.configuration.host + resource_path + else: + # use server/host defined in path or operation instead + url = _host + resource_path + + try: + # perform request and return response + response_data = {{#asyncio}}await {{/asyncio}}{{#tornado}}yield {{/tornado}}self.request( + method, url, query_params=query_params, headers=header_params, + post_params=post_params, body=body, + _preload_content=_preload_content, + _request_timeout=_request_timeout) + except ApiException as e: + e.body = e.body.decode('utf-8') + raise e + + self.last_response = response_data + + return_data = response_data + + if not _preload_content: + {{^tornado}} + return (return_data) + {{/tornado}} + {{#tornado}} + raise tornado.gen.Return(return_data) + {{/tornado}} + return return_data + + # deserialize response data + if response_type: + if response_type != (file_type,): + encoding = "utf-8" + content_type = response_data.getheader('content-type') + if content_type is not None: + match = re.search(r"charset=([a-zA-Z\-\d]+)[\s\;]?", content_type) + if match: + encoding = match.group(1) + response_data.data = response_data.data.decode(encoding) + + return_data = self.deserialize( + response_data, + response_type, + _check_type + ) + else: + return_data = None + +{{^tornado}} + if _return_http_data_only: + return (return_data) + else: + return (return_data, response_data.status, + response_data.getheaders()) +{{/tornado}} +{{#tornado}} + if _return_http_data_only: + raise tornado.gen.Return(return_data) + else: + raise tornado.gen.Return((return_data, response_data.status, + response_data.getheaders())) +{{/tornado}} + + def parameters_to_multipart(self, params, collection_types): + """Get parameters as list of tuples, formatting as json if value is collection_types + + :param params: Parameters as list of two-tuples + :param dict collection_types: Parameter collection types + :return: Parameters as list of tuple or urllib3.fields.RequestField + """ + new_params = [] + if collection_types is None: + collection_types = (dict) + for k, v in params.items() if isinstance(params, dict) else params: # noqa: E501 + if isinstance(v, collection_types): # v is instance of collection_type, formatting as application/json + v = json.dumps(v, ensure_ascii=False).encode("utf-8") + field = RequestField(k, v) + field.make_multipart(content_type="application/json; charset=utf-8") + new_params.append(field) + else: + new_params.append((k, v)) + return new_params + + @classmethod + def sanitize_for_serialization(cls, obj): + """Prepares data for transmission before it is sent with the rest client + If obj is None, return None. + If obj is str, int, long, float, bool, return directly. + If obj is datetime.datetime, datetime.date + convert to string in iso8601 format. + If obj is list, sanitize each element in the list. + If obj is dict, return the dict. + If obj is OpenAPI model, return the properties dict. + If obj is io.IOBase, return the bytes + :param obj: The data to serialize. + :return: The serialized form of data. + """ + if isinstance(obj, (ModelNormal, ModelComposed)): + return { + key: cls.sanitize_for_serialization(val) for key, val in model_to_dict(obj, serialize=True).items() + } + elif isinstance(obj, io.IOBase): + return cls.get_file_data_and_close_file(obj) + elif isinstance(obj, (str, int, float, none_type, bool)): + return obj + elif isinstance(obj, (datetime, date)): + return obj.isoformat() + elif isinstance(obj, ModelSimple): + return cls.sanitize_for_serialization(obj.value) + elif isinstance(obj, (list, tuple)): + return [cls.sanitize_for_serialization(item) for item in obj] + if isinstance(obj, dict): + return {key: cls.sanitize_for_serialization(val) for key, val in obj.items()} + raise ApiValueError('Unable to prepare type {} for serialization'.format(obj.__class__.__name__)) + + def deserialize(self, response, response_type, _check_type): + """Deserializes response into an object. + + :param response: RESTResponse object to be deserialized. + :param response_type: For the response, a tuple containing: + valid classes + a list containing valid classes (for list schemas) + a dict containing a tuple of valid classes as the value + Example values: + (str,) + (Pet,) + (float, none_type) + ([int, none_type],) + ({str: (bool, str, int, float, date, datetime, str, none_type)},) + :param _check_type: boolean, whether to check the types of the data + received from the server + :type _check_type: bool + + :return: deserialized object. + """ + # handle file downloading + # save response body into a tmp file and return the instance + if response_type == (file_type,): + content_disposition = response.getheader("Content-Disposition") + return deserialize_file(response.data, self.configuration, + content_disposition=content_disposition) + + # fetch data from response object + try: + received_data = json.loads(response.data) + except ValueError: + received_data = response.data + + # store our data under the key of 'received_data' so users have some + # context if they are deserializing a string and the data type is wrong + deserialized_data = validate_and_convert_types( + received_data, + response_type, + ['received_data'], + True, + _check_type, + configuration=self.configuration + ) + return deserialized_data + + def call_api( + self, + resource_path: str, + method: str, + path_params: typing.Optional[typing.Dict[str, typing.Any]] = None, + query_params: typing.Optional[typing.List[typing.Tuple[str, typing.Any]]] = None, + header_params: typing.Optional[typing.Dict[str, typing.Any]] = None, + body: typing.Optional[typing.Any] = None, + post_params: typing.Optional[typing.List[typing.Tuple[str, typing.Any]]] = None, + files: typing.Optional[typing.Dict[str, typing.List[io.IOBase]]] = None, + response_type: typing.Optional[typing.Tuple[typing.Any]] = None, + auth_settings: typing.Optional[typing.List[str]] = None, + async_req: typing.Optional[bool] = None, + _return_http_data_only: typing.Optional[bool] = None, + collection_formats: typing.Optional[typing.Dict[str, str]] = None, + _preload_content: bool = True, + _request_timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + _host: typing.Optional[str] = None, + _check_type: typing.Optional[bool] = None + ): + """Makes the HTTP request (synchronous) and returns deserialized data. + + To make an async_req request, set the async_req parameter. + + :param resource_path: Path to method endpoint. + :param method: Method to call. + :param path_params: Path parameters in the url. + :param query_params: Query parameters in the url. + :param header_params: Header parameters to be + placed in the request header. + :param body: Request body. + :param post_params dict: Request post form parameters, + for `application/x-www-form-urlencoded`, `multipart/form-data`. + :param auth_settings list: Auth Settings names for the request. + :param response_type: For the response, a tuple containing: + valid classes + a list containing valid classes (for list schemas) + a dict containing a tuple of valid classes as the value + Example values: + (str,) + (Pet,) + (float, none_type) + ([int, none_type],) + ({str: (bool, str, int, float, date, datetime, str, none_type)},) + :param files: key -> field name, value -> a list of open file + objects for `multipart/form-data`. + :type files: dict + :param async_req bool: execute request asynchronously + :type async_req: bool, optional + :param _return_http_data_only: response data without head status code + and headers + :type _return_http_data_only: bool, optional + :param collection_formats: dict of collection formats for path, query, + header, and post parameters. + :type collection_formats: dict, optional + :param _preload_content: if False, the urllib3.HTTPResponse object will + be returned without reading/decoding response + data. Default is True. + :type _preload_content: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _check_type: boolean describing if the data back from the server + should have its type checked. + :type _check_type: bool, optional + :return: + If async_req parameter is True, + the request will be called asynchronously. + The method will return the request thread. + If parameter async_req is False or missing, + then the method will return the response directly. + """ + if not async_req: + return self.__call_api(resource_path, method, + path_params, query_params, header_params, + body, post_params, files, + response_type, auth_settings, + _return_http_data_only, collection_formats, + _preload_content, _request_timeout, _host, + _check_type) + + return self.pool.apply_async(self.__call_api, (resource_path, + method, path_params, + query_params, + header_params, body, + post_params, files, + response_type, + auth_settings, + _return_http_data_only, + collection_formats, + _preload_content, + _request_timeout, + _host, _check_type)) + + def request(self, method, url, query_params=None, headers=None, + post_params=None, body=None, _preload_content=True, + _request_timeout=None): + """Makes the HTTP request using RESTClient.""" + if method == "GET": + return self.rest_client.GET(url, + query_params=query_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + headers=headers) + elif method == "HEAD": + return self.rest_client.HEAD(url, + query_params=query_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + headers=headers) + elif method == "OPTIONS": + return self.rest_client.OPTIONS(url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "POST": + return self.rest_client.POST(url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "PUT": + return self.rest_client.PUT(url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "PATCH": + return self.rest_client.PATCH(url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "DELETE": + return self.rest_client.DELETE(url, + query_params=query_params, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + else: + raise ApiValueError( + "http method must be `GET`, `HEAD`, `OPTIONS`," + " `POST`, `PATCH`, `PUT` or `DELETE`." + ) + + def parameters_to_tuples(self, params, collection_formats): + """Get parameters as list of tuples, formatting collections. + + :param params: Parameters as dict or list of two-tuples + :param dict collection_formats: Parameter collection formats + :return: Parameters as list of tuples, collections formatted + """ + new_params = [] + if collection_formats is None: + collection_formats = {} + for k, v in params.items() if isinstance(params, dict) else params: # noqa: E501 + if k in collection_formats: + collection_format = collection_formats[k] + if collection_format == 'multi': + new_params.extend((k, value) for value in v) + else: + if collection_format == 'ssv': + delimiter = ' ' + elif collection_format == 'tsv': + delimiter = '\t' + elif collection_format == 'pipes': + delimiter = '|' + else: # csv is the default + delimiter = ',' + new_params.append( + (k, delimiter.join(str(value) for value in v))) + else: + new_params.append((k, v)) + return new_params + + @staticmethod + def get_file_data_and_close_file(file_instance: io.IOBase) -> bytes: + file_data = file_instance.read() + file_instance.close() + return file_data + + def files_parameters(self, files: typing.Optional[typing.Dict[str, typing.List[io.IOBase]]] = None): + """Builds form parameters. + + :param files: None or a dict with key=param_name and + value is a list of open file objects + :return: List of tuples of form parameters with file data + """ + if files is None: + return [] + + params = [] + for param_name, file_instances in files.items(): + if file_instances is None: + # if the file field is nullable, skip None values + continue + for file_instance in file_instances: + if file_instance is None: + # if the file field is nullable, skip None values + continue + if file_instance.closed is True: + raise ApiValueError( + "Cannot read a closed file. The passed in file_type " + "for %s must be open." % param_name + ) + filename = os.path.basename(file_instance.name) + filedata = self.get_file_data_and_close_file(file_instance) + mimetype = (mimetypes.guess_type(filename)[0] or + 'application/octet-stream') + params.append( + tuple([param_name, tuple([filename, filedata, mimetype])])) + + return params + + def select_header_accept(self, accepts): + """Returns `Accept` based on an array of accepts provided. + + :param accepts: List of headers. + :return: Accept (e.g. application/json). + """ + if not accepts: + return + + accepts = [x.lower() for x in accepts] + + if 'application/json' in accepts: + return 'application/json' + else: + return ', '.join(accepts) + + def select_header_content_type(self, content_types): + """Returns `Content-Type` based on an array of content_types provided. + + :param content_types: List of content-types. + :return: Content-Type (e.g. application/json). + """ + if not content_types: + return 'application/json' + + content_types = [x.lower() for x in content_types] + + if 'application/json' in content_types or '*/*' in content_types: + return 'application/json' + else: + return content_types[0] + + def update_params_for_auth(self, headers, querys, auth_settings, + resource_path, method, body): + """Updates header and query params based on authentication setting. + + :param headers: Header parameters dict to be updated. + :param querys: Query parameters tuple list to be updated. + :param auth_settings: Authentication setting identifiers list. + :param resource_path: A string representation of the HTTP request resource path. + :param method: A string representation of the HTTP request method. + :param body: A object representing the body of the HTTP request. + The object type is the return value of _encoder.default(). + """ + if not auth_settings: + return + + for auth in auth_settings: + auth_setting = self.configuration.auth_settings().get(auth) + if auth_setting: + if auth_setting['in'] == 'cookie': + headers['Cookie'] = auth_setting['value'] + elif auth_setting['in'] == 'header': + if auth_setting['type'] != 'http-signature': + headers[auth_setting['key']] = auth_setting['value'] +{{#hasHttpSignatureMethods}} + else: + # The HTTP signature scheme requires multiple HTTP headers + # that are calculated dynamically. + signing_info = self.configuration.signing_info + auth_headers = signing_info.get_http_signature_headers( + resource_path, method, headers, body, querys) + headers.update(auth_headers) +{{/hasHttpSignatureMethods}} + elif auth_setting['in'] == 'query': + querys.append((auth_setting['key'], auth_setting['value'])) + else: + raise ApiValueError( + 'Authentication token must be in `query` or `header`' + ) + ## + ## HERE: This was included to persist the auth setup for CE. As of yet, I see no + ## way to do it via the mechanism above (see the `auth in auth_settings` logic + ## above) + def set_auth_from_last_response(self): + if not self.last_response: + raise OpenApiException("no last_response: There must have been a successful request to set auth.") + + cookie = self.last_response.getheader('Set-Cookie') + + # pull the values + token = re.search('XSRF-TOKEN="(.+)"', cookie).group(1) + session = re.search("(session=.*?);", cookie).group(1) + + ## set them properly + self.set_session_auth(token, session) + + def set_session_auth(self, token, session): + self.set_default_header("X-XSRF-TOKEN", token) + self.cookie = session + + ## END HERE ## + +class Endpoint(object): + def __init__(self, settings=None, params_map=None, root_map=None, + headers_map=None, api_client=None, callable=None): + """Creates an endpoint + + Args: + settings (dict): see below key value pairs + 'response_type' (tuple/None): response type + 'auth' (list): a list of auth type keys + 'endpoint_path' (str): the endpoint path + 'operation_id' (str): endpoint string identifier + 'http_method' (str): POST/PUT/PATCH/GET etc + 'servers' (list): list of str servers that this endpoint is at + params_map (dict): see below key value pairs + 'all' (list): list of str endpoint parameter names + 'required' (list): list of required parameter names + 'nullable' (list): list of nullable parameter names + 'enum' (list): list of parameters with enum values + 'validation' (list): list of parameters with validations + root_map + 'validations' (dict): the dict mapping endpoint parameter tuple + paths to their validation dictionaries + 'allowed_values' (dict): the dict mapping endpoint parameter + tuple paths to their allowed_values (enum) dictionaries + 'openapi_types' (dict): param_name to openapi type + 'attribute_map' (dict): param_name to camelCase name + 'location_map' (dict): param_name to 'body', 'file', 'form', + 'header', 'path', 'query' + collection_format_map (dict): param_name to `csv` etc. + headers_map (dict): see below key value pairs + 'accept' (list): list of Accept header strings + 'content_type' (list): list of Content-Type header strings + api_client (ApiClient) api client instance + callable (function): the function which is invoked when the + Endpoint is called + """ + self.settings = settings + self.params_map = params_map + self.params_map['all'].extend([ + 'async_req', + '_host_index', + '_preload_content', + '_request_timeout', + '_return_http_data_only', + '_check_input_type', + '_check_return_type' + ]) + self.params_map['nullable'].extend(['_request_timeout']) + self.validations = root_map['validations'] + self.allowed_values = root_map['allowed_values'] + self.openapi_types = root_map['openapi_types'] + extra_types = { + 'async_req': (bool,), + '_host_index': (none_type, int), + '_preload_content': (bool,), + '_request_timeout': (none_type, int, (int,), [int]), + '_return_http_data_only': (bool,), + '_check_input_type': (bool,), + '_check_return_type': (bool,) + } + self.openapi_types.update(extra_types) + self.attribute_map = root_map['attribute_map'] + self.location_map = root_map['location_map'] + self.collection_format_map = root_map['collection_format_map'] + self.headers_map = headers_map + self.api_client = api_client + self.callable = callable + + def __validate_inputs(self, kwargs): + for param in self.params_map['enum']: + if param in kwargs: + check_allowed_values( + self.allowed_values, + (param,), + kwargs[param] + ) + + for param in self.params_map['validation']: + if param in kwargs: + check_validations( + self.validations, + (param,), + kwargs[param], + configuration=self.api_client.configuration + ) + + if kwargs['_check_input_type'] is False: + return + + for key, value in kwargs.items(): + fixed_val = validate_and_convert_types( + value, + self.openapi_types[key], + [key], + False, + kwargs['_check_input_type'], + configuration=self.api_client.configuration + ) + kwargs[key] = fixed_val + + def __gather_params(self, kwargs): + params = { + 'body': None, + 'collection_format': {}, + 'file': {}, + 'form': [], + 'header': {}, + 'path': {}, + 'query': [] + } + + for param_name, param_value in kwargs.items(): + param_location = self.location_map.get(param_name) + if param_location is None: + continue + if param_location: + if param_location == 'body': + params['body'] = param_value + continue + base_name = self.attribute_map[param_name] + if (param_location == 'form' and + self.openapi_types[param_name] == (file_type,)): + params['file'][param_name] = [param_value] + elif (param_location == 'form' and + self.openapi_types[param_name] == ([file_type],)): + # param_value is already a list + params['file'][param_name] = param_value + elif param_location in {'form', 'query'}: + param_value_full = (base_name, param_value) + params[param_location].append(param_value_full) + if param_location not in {'form', 'query'}: + params[param_location][base_name] = param_value + collection_format = self.collection_format_map.get(param_name) + if collection_format: + params['collection_format'][base_name] = collection_format + + return params + + def __call__(self, *args, **kwargs): + """ This method is invoked when endpoints are called + Example: +{{#apiInfo}}{{#apis}}{{#-first}}{{#operations}}{{#operation}}{{#-first}} + api_instance = {{classname}}() + api_instance.{{operationId}} # this is an instance of the class Endpoint + api_instance.{{operationId}}() # this invokes api_instance.{{operationId}}.__call__() + which then invokes the callable functions stored in that endpoint at + api_instance.{{operationId}}.callable or self.callable in this class +{{/-first}}{{/operation}}{{/operations}}{{/-first}}{{/apis}}{{/apiInfo}} + """ + return self.callable(self, *args, **kwargs) + + def call_with_http_info(self, **kwargs): + + try: + index = self.api_client.configuration.server_operation_index.get( + self.settings['operation_id'], self.api_client.configuration.server_index + ) if kwargs['_host_index'] is None else kwargs['_host_index'] + server_variables = self.api_client.configuration.server_operation_variables.get( + self.settings['operation_id'], self.api_client.configuration.server_variables + ) + _host = self.api_client.configuration.get_host_from_settings( + index, variables=server_variables, servers=self.settings['servers'] + ) + except IndexError: + if self.settings['servers']: + raise ApiValueError( + "Invalid host index. Must be 0 <= index < %s" % + len(self.settings['servers']) + ) + _host = None + + for key, value in kwargs.items(): + if key not in self.params_map['all']: + raise ApiTypeError( + "Got an unexpected parameter '%s'" + " to method `%s`" % + (key, self.settings['operation_id']) + ) + # only throw this nullable ApiValueError if _check_input_type + # is False, if _check_input_type==True we catch this case + # in self.__validate_inputs + if (key not in self.params_map['nullable'] and value is None + and kwargs['_check_input_type'] is False): + raise ApiValueError( + "Value may not be None for non-nullable parameter `%s`" + " when calling `%s`" % + (key, self.settings['operation_id']) + ) + + for key in self.params_map['required']: + if key not in kwargs.keys(): + raise ApiValueError( + "Missing the required parameter `%s` when calling " + "`%s`" % (key, self.settings['operation_id']) + ) + + self.__validate_inputs(kwargs) + + params = self.__gather_params(kwargs) + + accept_headers_list = self.headers_map['accept'] + if accept_headers_list: + params['header']['Accept'] = self.api_client.select_header_accept( + accept_headers_list) + + content_type_headers_list = self.headers_map['content_type'] + if content_type_headers_list: + header_list = self.api_client.select_header_content_type( + content_type_headers_list) + params['header']['Content-Type'] = header_list + + return self.api_client.call_api( + self.settings['endpoint_path'], self.settings['http_method'], + params['path'], + params['query'], + params['header'], + body=params['body'], + post_params=params['form'], + files=params['file'], + response_type=self.settings['response_type'], + auth_settings=self.settings['auth'], + async_req=kwargs['async_req'], + _check_type=kwargs['_check_return_type'], + _return_http_data_only=kwargs['_return_http_data_only'], + _preload_content=kwargs['_preload_content'], + _request_timeout=kwargs['_request_timeout'], + _host=_host, + collection_formats=params['collection_format']) diff --git a/poetry.lock b/poetry.lock index e1ba20203..76b666c4b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,2214 +1,580 @@ [[package]] -category = "dev" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." name = "appdirs" -optional = false -python-versions = "*" -version = "1.4.3" - -[[package]] -category = "main" -description = "Better dates & times for Python" -name = "arrow" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "0.15.5" - -[package.dependencies] -python-dateutil = "*" - -[[package]] +version = "1.4.4" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" -description = "An abstract syntax tree for Python with inference support." -name = "astroid" optional = false -python-versions = ">=3.5.*" -version = "2.3.3" - -[package.dependencies] -lazy-object-proxy = ">=1.4.0,<1.5.0" -six = ">=1.12,<2.0" -wrapt = ">=1.11.0,<1.12.0" - -[package.dependencies.typed-ast] -python = "<3.8" -version = ">=1.4.0,<1.5" +python-versions = "*" [[package]] -category = "dev" -description = "Atomic file writes." -marker = "sys_platform == \"win32\"" name = "atomicwrites" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.3.0" - -[[package]] +version = "1.4.0" +description = "Atomic file writes." category = "dev" -description = "Classes Without Boilerplate" -name = "attrs" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "19.3.0" - -[package.extras] -azure-pipelines = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "pytest-azurepipelines"] -dev = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "sphinx", "pre-commit"] -docs = ["sphinx", "zope.interface"] -tests = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] - -[[package]] -category = "dev" -description = "A tool that automatically formats Python code to conform to the PEP 8 style guide" -name = "autopep8" -optional = false -python-versions = "*" -version = "1.5" - -[package.dependencies] -pycodestyle = ">=2.5.0" [[package]] +name = "attrs" +version = "20.3.0" +description = "Classes Without Boilerplate" category = "dev" -description = "AWS SAM Translator is a library that transform SAM templates into AWS CloudFormation templates" -name = "aws-sam-translator" optional = false -python-versions = "*" -version = "1.22.0" - -[package.dependencies] -boto3 = ">=1.5,<2.0" -jsonschema = ">=3.0,<4.0" -six = ">=1.11,<2.0" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.extras] -dev = ["coverage (>=4.4.0)", "flake8 (>=3.3.0)", "tox (>=2.2.1)", "pytest-cov (>=2.4.0)", "pylint (>=1.7.2,<2.0)", "pyyaml (>=5.1)", "pytest (>=3.0.7)", "mock (>=2.0.0)", "parameterized (>=0.6.1)", "requests (>=2.20.0)", "docopt (>=0.6.2)"] - -[[package]] -category = "dev" -description = "The AWS X-Ray SDK for Python (the SDK) enables Python developers to record and emit information from within their applications to the AWS X-Ray service." -name = "aws-xray-sdk" -optional = false -python-versions = "*" -version = "2.4.3" - -[package.dependencies] -botocore = ">=1.11.3" -future = "*" -jsonpickle = "*" -wrapt = "*" - -[[package]] -category = "dev" -description = "Security oriented static analyser for python code." -name = "bandit" -optional = false -python-versions = "*" -version = "1.6.2" - -[package.dependencies] -GitPython = ">=1.0.1" -PyYAML = ">=3.13" -colorama = ">=0.3.9" -six = ">=1.10.0" -stevedore = ">=1.20.0" - -[[package]] -category = "main" -description = "Ultra-lightweight pure Python package to check if a file is binary or text." -name = "binaryornot" -optional = false -python-versions = "*" -version = "0.4.4" - -[package.dependencies] -chardet = ">=3.0.2" +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "furo", "sphinx", "pre-commit"] +docs = ["furo", "sphinx", "zope.interface"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"] [[package]] -category = "dev" -description = "The uncompromising code formatter." name = "black" +version = "20.8b1" +description = "The uncompromising code formatter." +category = "dev" optional = false python-versions = ">=3.6" -version = "19.10b0" [package.dependencies] appdirs = "*" -attrs = ">=18.1.0" -click = ">=6.5" +click = ">=7.1.2" +mypy-extensions = ">=0.4.3" pathspec = ">=0.6,<1" -regex = "*" -toml = ">=0.9.4" +regex = ">=2020.1.8" +toml = ">=0.10.1" typed-ast = ">=1.4.0" +typing-extensions = ">=3.7.4" [package.extras] +colorama = ["colorama (>=0.4.3)"] d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] [[package]] -category = "dev" -description = "An easy safelist-based HTML-sanitizing tool." -name = "bleach" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "3.1.4" - -[package.dependencies] -six = ">=1.9.0" -webencodings = "*" - -[[package]] -category = "dev" -description = "Amazon Web Services Library" -name = "boto" -optional = false -python-versions = "*" -version = "2.49.0" - -[[package]] -category = "main" -description = "The AWS SDK for Python" -name = "boto3" -optional = false -python-versions = "*" -version = "1.12.30" - -[package.dependencies] -botocore = ">=1.15.30,<1.16.0" -jmespath = ">=0.7.1,<1.0.0" -s3transfer = ">=0.3.0,<0.4.0" - -[[package]] -category = "main" -description = "Low-level, data-driven core of boto 3." -name = "botocore" -optional = false -python-versions = "*" -version = "1.15.30" - -[package.dependencies] -docutils = ">=0.10,<0.16" -jmespath = ">=0.7.1,<1.0.0" -python-dateutil = ">=2.1,<3.0.0" - -[package.dependencies.urllib3] -python = "<3.4.0 || >=3.5.0" -version = ">=1.20,<1.26" - -[[package]] -category = "main" -description = "Python package for providing Mozilla's CA Bundle." -name = "certifi" -optional = false -python-versions = "*" -version = "2019.11.28" - -[[package]] -category = "dev" -description = "Foreign Function Interface for Python calling C code." -name = "cffi" -optional = false -python-versions = "*" -version = "1.14.0" - -[package.dependencies] -pycparser = "*" - -[[package]] -category = "dev" -description = "Checks CloudFormation templates for practices and behaviour that could potentially be improved" -name = "cfn-lint" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.29.2" - -[package.dependencies] -aws-sam-translator = ">=1.21.0" -jsonschema = ">=3.0,<4.0" -six = ">=1.11,<2.0" - -[package.dependencies.jsonpatch] -python = "<3.4.0 || >=3.5.0" -version = "*" - -[package.dependencies.networkx] -python = ">=3.5" -version = ">=2.4,<3.0" - -[package.dependencies.pyyaml] -python = "<3.4.0 || >=3.5.0" -version = "*" - -[[package]] -category = "main" -description = "Universal encoding detector for Python 2 and 3" -name = "chardet" -optional = false -python-versions = "*" -version = "3.0.4" - -[[package]] -category = "main" -description = "Composable command line interface toolkit" name = "click" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "7.1.1" - -[[package]] -category = "dev" -description = "Hosted coverage reports for GitHub, Bitbucket and Gitlab" -name = "codecov" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.0.22" - -[package.dependencies] -coverage = "*" -requests = ">=2.7.9" - -[[package]] -category = "dev" -description = "Cross-platform colored terminal text." -marker = "sys_platform == \"win32\" or platform_system == \"Windows\"" -name = "colorama" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "0.4.3" - -[[package]] -category = "main" -description = "A command-line utility that creates projects from project templates, e.g. creating a Python package project from a Python package project template." -name = "cookiecutter" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "1.7.0" - -[package.dependencies] -binaryornot = ">=0.2.0" -click = ">=7.0" -future = ">=0.15.2" -jinja2 = ">=2.7" -jinja2-time = ">=0.1.0" -poyo = ">=0.1.0" -requests = ">=2.18.0" -whichcraft = ">=0.4.0" - -[[package]] -category = "dev" -description = "Code coverage measurement for Python" -name = "coverage" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" -version = "5.0.4" - -[package.extras] -toml = ["toml"] - -[[package]] -category = "dev" -description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -name = "cryptography" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" -version = "2.8" - -[package.dependencies] -cffi = ">=1.8,<1.11.3 || >1.11.3" -six = ">=1.4.1" - -[package.extras] -docs = ["sphinx (>=1.6.5,<1.8.0 || >1.8.0)", "sphinx-rtd-theme"] -docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"] -idna = ["idna (>=2.1)"] -pep8test = ["flake8", "flake8-import-order", "pep8-naming"] -test = ["pytest (>=3.6.0,<3.9.0 || >3.9.0,<3.9.1 || >3.9.1,<3.9.2 || >3.9.2)", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,<3.79.2 || >3.79.2)"] - -[[package]] -category = "dev" -description = "Decorators for Humans" -marker = "python_version >= \"3.5\"" -name = "decorator" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*" -version = "4.4.2" - -[[package]] +version = "7.1.2" +description = "Composable command line interface toolkit" category = "dev" -description = "A Python library for the Docker Engine API." -name = "docker" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "4.2.0" - -[package.dependencies] -requests = ">=2.14.2,<2.18.0 || >2.18.0" -six = ">=1.4.0" -websocket-client = ">=0.32.0" - -[package.dependencies.pypiwin32] -python = ">=3.6" -version = "223" - -[package.extras] -ssh = ["paramiko (>=2.4.2)"] -tls = ["pyOpenSSL (>=17.5.0)", "cryptography (>=1.3.4)", "idna (>=2.0.0)"] - -[[package]] -category = "main" -description = "Docutils -- Python Documentation Utilities" -name = "docutils" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -version = "0.15.2" - -[[package]] -category = "dev" -description = "ECDSA cryptographic signature library (pure python)" -name = "ecdsa" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -version = "0.15" - -[package.dependencies] -six = ">=1.9.0" - -[package.extras] -gmpy = ["gmpy"] -gmpy2 = ["gmpy2"] - -[[package]] -category = "dev" -description = "Discover and load entry points from installed packages." -name = "entrypoints" -optional = false -python-versions = ">=2.7" -version = "0.3" - -[[package]] -category = "main" -description = "A library for automatically generating command line interfaces." -name = "fire" -optional = false -python-versions = "*" -version = "0.3.0" - -[package.dependencies] -six = "*" -termcolor = "*" - -[[package]] -category = "dev" -description = "the modular source code checker: pep8, pyflakes and co" -name = "flake8" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "3.7.9" - -[package.dependencies] -entrypoints = ">=0.3.0,<0.4.0" -mccabe = ">=0.6.0,<0.7.0" -pycodestyle = ">=2.5.0,<2.6.0" -pyflakes = ">=2.1.0,<2.2.0" - -[[package]] -category = "main" -description = "Clean single-source support for Python 3 and 2" -name = "future" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -version = "0.18.2" - -[[package]] -category = "dev" -description = "Git Object Database" -name = "gitdb" -optional = false -python-versions = ">=3.4" -version = "4.0.2" - -[package.dependencies] -smmap = ">=3.0.1,<4" - -[[package]] -category = "dev" -description = "Python Git Library" -name = "gitpython" -optional = false -python-versions = ">=3.4" -version = "3.1.0" - -[package.dependencies] -gitdb = ">=4.0.1,<5" - -[[package]] -category = "main" -description = "Internationalized Domain Names in Applications (IDNA)" -name = "idna" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.8" - -[[package]] -category = "dev" -description = "Read metadata from Python packages" -marker = "python_version < \"3.8\"" -name = "importlib-metadata" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" -version = "1.6.0" - -[package.dependencies] -zipp = ">=0.5" - -[package.extras] -docs = ["sphinx", "rst.linker"] -testing = ["packaging", "importlib-resources"] - -[[package]] -category = "dev" -description = "A Python utility / library to sort Python imports." -name = "isort" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "4.3.21" - -[package.extras] -pipfile = ["pipreqs", "requirementslib"] -pyproject = ["toml"] -requirements = ["pipreqs", "pip-api"] -xdg_home = ["appdirs (>=1.4.0)"] - -[[package]] -category = "dev" -description = "Low-level, pure Python DBus protocol wrapper." -marker = "sys_platform == \"linux\"" -name = "jeepney" -optional = false -python-versions = ">=3.5" -version = "0.4.3" - -[package.extras] -dev = ["testpath"] - -[[package]] -category = "main" -description = "A very fast and expressive template engine." -name = "jinja2" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "2.11.1" - -[package.dependencies] -MarkupSafe = ">=0.23" - -[package.extras] -i18n = ["Babel (>=0.8)"] - -[[package]] -category = "main" -description = "Jinja2 Extension for Dates and Times" -name = "jinja2-time" -optional = false -python-versions = "*" -version = "0.2.0" - -[package.dependencies] -arrow = "*" -jinja2 = "*" - -[[package]] -category = "main" -description = "JSON Matching Expressions" -name = "jmespath" -optional = false -python-versions = "*" -version = "0.9.5" - -[[package]] -category = "dev" -description = "Diff JSON and JSON-like structures in Python" -name = "jsondiff" -optional = false -python-versions = "*" -version = "1.1.2" - -[[package]] -category = "dev" -description = " Apply JSON-Patches (RFC 6902) " -marker = "python_version != \"3.4\"" -name = "jsonpatch" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "1.25" - -[package.dependencies] -jsonpointer = ">=1.9" - -[[package]] -category = "dev" -description = "Python library for serializing any arbitrary object graph into JSON" -name = "jsonpickle" -optional = false -python-versions = "*" -version = "1.3" - -[[package]] -category = "dev" -description = "Identify specific nodes in a JSON document (RFC 6901)" -marker = "python_version != \"3.4\"" -name = "jsonpointer" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.0" - -[[package]] -category = "dev" -description = "An implementation of JSON Schema validation for Python" -name = "jsonschema" -optional = false -python-versions = "*" -version = "3.2.0" - -[package.dependencies] -attrs = ">=17.4.0" -pyrsistent = ">=0.14.0" -setuptools = "*" -six = ">=1.11.0" - -[package.dependencies.importlib-metadata] -python = "<3.8" -version = "*" - -[package.extras] -format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"] -format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"] - -[[package]] -category = "dev" -description = "Store and access your passwords safely." -name = "keyring" -optional = false -python-versions = ">=3.6" -version = "21.2.0" - -[package.dependencies] -SecretStorage = ">=3" -jeepney = ">=0.4.2" -pywin32-ctypes = "<0.1.0 || >0.1.0,<0.1.1 || >0.1.1" - -[package.dependencies.importlib-metadata] -python = "<3.8" -version = "*" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=3.5,<3.7.3 || >3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-black-multipy", "pytest-cov"] - -[[package]] -category = "dev" -description = "A fast and thorough lazy object proxy." -name = "lazy-object-proxy" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.4.3" - -[[package]] -category = "dev" -description = "Python LiveReload is an awesome tool for web developers" -name = "livereload" -optional = false -python-versions = "*" -version = "2.6.1" - -[package.dependencies] -six = "*" -tornado = "*" - -[[package]] -category = "dev" -description = "A Python implementation of Lunr.js" -name = "lunr" -optional = false -python-versions = "*" -version = "0.5.6" - -[package.dependencies] -future = ">=0.16.0" -six = ">=1.11.0" - -[package.dependencies.nltk] -optional = true -version = ">=3.2.5" - -[package.extras] -languages = ["nltk (>=3.2.5)"] - -[[package]] -category = "dev" -description = "Python implementation of Markdown." -name = "markdown" -optional = false -python-versions = ">=3.5" -version = "3.2.1" - -[package.dependencies] -setuptools = ">=36" - -[package.extras] -testing = ["coverage", "pyyaml"] - -[[package]] -category = "main" -description = "Safely add untrusted strings to HTML/XML markup." -name = "markupsafe" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" -version = "1.1.1" - -[[package]] -category = "dev" -description = "McCabe checker, plugin for flake8" -name = "mccabe" -optional = false -python-versions = "*" -version = "0.6.1" - -[[package]] -category = "dev" -description = "Project documentation with Markdown." -name = "mkdocs" -optional = false -python-versions = ">=3.5" -version = "1.1" - -[package.dependencies] -Jinja2 = ">=2.10.1" -Markdown = ">=3.2.1" -PyYAML = ">=3.10" -click = ">=3.3" -livereload = ">=2.5.1" -tornado = ">=5.0" - -[package.dependencies.lunr] -extras = ["languages"] -version = "0.5.6" - -[[package]] -category = "dev" -description = "A Material Design theme for MkDocs" -name = "mkdocs-material" -optional = false -python-versions = "*" -version = "4.6.3" - -[package.dependencies] -Pygments = ">=2.4" -markdown = ">=3.2" -mkdocs = ">=1.0" -pymdown-extensions = ">=6.3" - -[[package]] -category = "dev" -description = "Rolling backport of unittest.mock for all Pythons" -name = "mock" -optional = false -python-versions = ">=3.6" -version = "4.0.2" - -[package.extras] -build = ["twine", "wheel", "blurb"] -docs = ["sphinx"] -test = ["pytest", "pytest-cov"] - -[[package]] -category = "dev" -description = "More routines for operating on iterables, beyond itertools" -name = "more-itertools" -optional = false -python-versions = ">=3.5" -version = "8.2.0" - -[[package]] -category = "dev" -description = "A library that allows your python tests to easily mock out the boto library" -name = "moto" -optional = false -python-versions = "*" -version = "1.3.14" - -[package.dependencies] -Jinja2 = ">=2.10.1" -PyYAML = ">=5.1" -aws-xray-sdk = ">=0.93,<0.96 || >0.96" -boto = ">=2.36.0" -boto3 = ">=1.9.201" -botocore = ">=1.12.201" -cfn-lint = ">=0.4.0" -cryptography = ">=2.3.0" -docker = ">=2.5.1" -idna = ">=2.5,<2.9" -jsondiff = "1.1.2" -mock = "*" -python-dateutil = ">=2.1,<3.0.0" -python-jose = "<4.0.0" -pytz = "*" -requests = ">=2.5" -responses = ">=0.9.0" -six = ">1.9" -sshpubkeys = ">=3.1.0,<4.0" -werkzeug = "*" -xmltodict = "*" - -[package.extras] -server = ["flask"] - -[[package]] -category = "dev" -description = "Optional static typing for Python" -name = "mypy" -optional = false -python-versions = ">=3.5" -version = "0.761" - -[package.dependencies] -mypy-extensions = ">=0.4.3,<0.5.0" -typed-ast = ">=1.4.0,<1.5.0" -typing-extensions = ">=3.7.4" - -[package.extras] -dmypy = ["psutil (>=4.0)"] - -[[package]] -category = "dev" -description = "Experimental type system extensions for programs checked with the mypy typechecker." -name = "mypy-extensions" -optional = false -python-versions = "*" -version = "0.4.3" - -[[package]] -category = "dev" -description = "Python package for creating and manipulating graphs and networks" -marker = "python_version >= \"3.5\"" -name = "networkx" -optional = false -python-versions = ">=3.5" -version = "2.4" - -[package.dependencies] -decorator = ">=4.3.0" - -[package.extras] -all = ["numpy", "scipy", "pandas", "matplotlib", "pygraphviz", "pydot", "pyyaml", "gdal", "lxml", "pytest"] -gdal = ["gdal"] -lxml = ["lxml"] -matplotlib = ["matplotlib"] -numpy = ["numpy"] -pandas = ["pandas"] -pydot = ["pydot"] -pygraphviz = ["pygraphviz"] -pytest = ["pytest"] -pyyaml = ["pyyaml"] -scipy = ["scipy"] - -[[package]] -category = "dev" -description = "Natural Language Toolkit" -name = "nltk" -optional = false -python-versions = "*" -version = "3.4.5" - -[package.dependencies] -six = "*" - -[package.extras] -all = ["pyparsing", "scikit-learn", "python-crfsuite", "matplotlib", "scipy", "gensim", "requests", "twython", "numpy"] -corenlp = ["requests"] -machine_learning = ["gensim", "numpy", "python-crfsuite", "scikit-learn", "scipy"] -plot = ["matplotlib"] -tgrep = ["pyparsing"] -twitter = ["twython"] - -[[package]] -category = "dev" -description = "nose extends unittest to make testing easier" -name = "nose" -optional = false -python-versions = "*" -version = "1.3.7" - -[[package]] -category = "dev" -description = "Core utilities for Python packages" -name = "packaging" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "20.3" - -[package.dependencies] -pyparsing = ">=2.0.2" -six = "*" - -[[package]] -category = "dev" -description = "Utility library for gitignore style pattern matching of file paths." -name = "pathspec" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "0.7.0" - -[[package]] -category = "dev" -description = "Python Build Reasonableness" -name = "pbr" -optional = false -python-versions = "*" -version = "5.4.4" - -[[package]] -category = "dev" -description = "Python style guide checker" -name = "pep8" -optional = false -python-versions = "*" -version = "1.7.1" - -[[package]] -category = "dev" -description = "Query metadatdata from sdists / bdists / installed packages." -name = "pkginfo" -optional = false -python-versions = "*" -version = "1.5.0.1" - -[package.extras] -testing = ["nose", "coverage"] - -[[package]] -category = "dev" -description = "plugin and hook calling mechanisms for python" -name = "pluggy" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.13.1" - -[package.dependencies] -[package.dependencies.importlib-metadata] -python = "<3.8" -version = ">=0.12" - -[package.extras] -dev = ["pre-commit", "tox"] - -[[package]] -category = "main" -description = "A lightweight YAML Parser for Python. 🐓" -name = "poyo" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.5.0" - -[[package]] -category = "dev" -description = "library with cross-python path, ini-parsing, io, code, log facilities" -name = "py" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.8.1" - -[[package]] -category = "dev" -description = "ASN.1 types and codecs" -name = "pyasn1" -optional = false -python-versions = "*" -version = "0.4.8" - -[[package]] -category = "dev" -description = "Python style guide checker" -name = "pycodestyle" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.5.0" - -[[package]] -category = "dev" -description = "C parser in Python" -name = "pycparser" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.20" - -[[package]] -category = "dev" -description = "Create Python API documentation in Markdown format" -name = "pydoc-markdown" -optional = false -python-versions = "*" -version = "2.1.3" - -[package.dependencies] -Markdown = ">=2.6.11" -MkDocs = ">=1.0.0" -PyYAML = ">=3.12" -six = ">=0.11.0" -yapf = ">=0.26.0" - -[[package]] -category = "dev" -description = "Python docstring style checker" -name = "pydocstyle" -optional = false -python-versions = ">=3.5" -version = "5.0.2" - -[package.dependencies] -snowballstemmer = "*" - -[[package]] -category = "dev" -description = "passive checker of Python programs" -name = "pyflakes" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.1.1" - -[[package]] -category = "dev" -description = "Pygments is a syntax highlighting package written in Python." -name = "pygments" -optional = false -python-versions = ">=3.5" -version = "2.6.1" - -[[package]] -category = "dev" -description = "python code static checker" -name = "pylint" -optional = false -python-versions = ">=3.5.*" -version = "2.4.4" - -[package.dependencies] -astroid = ">=2.3.0,<2.4" -colorama = "*" -isort = ">=4.2.5,<5" -mccabe = ">=0.6,<0.7" - -[[package]] -category = "dev" -description = "Extension pack for Python Markdown." -name = "pymdown-extensions" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" -version = "6.3" - -[package.dependencies] -Markdown = ">=3.2" - -[[package]] -category = "dev" -description = "Python parsing module" -name = "pyparsing" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -version = "2.4.6" - -[[package]] -category = "dev" -description = "" -marker = "sys_platform == \"win32\" and python_version >= \"3.6\"" -name = "pypiwin32" -optional = false -python-versions = "*" -version = "223" - -[package.dependencies] -pywin32 = ">=223" - -[[package]] -category = "dev" -description = "Persistent/Functional/Immutable data structures" -name = "pyrsistent" -optional = false -python-versions = "*" -version = "0.16.0" - -[package.dependencies] -six = "*" - -[[package]] -category = "dev" -description = "pytest: simple powerful testing with Python" -name = "pytest" -optional = false -python-versions = ">=3.5" -version = "5.4.1" - -[package.dependencies] -atomicwrites = ">=1.0" -attrs = ">=17.4.0" -colorama = "*" -more-itertools = ">=4.0.0" -packaging = "*" -pluggy = ">=0.12,<1.0" -py = ">=1.5.0" -wcwidth = "*" - -[package.dependencies.importlib-metadata] -python = "<3.8" -version = ">=0.12" - -[package.extras] -checkqa-mypy = ["mypy (v0.761)"] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] - -[[package]] -category = "dev" -description = "Pytest plugin for measuring coverage." -name = "pytest-cov" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.8.1" - -[package.dependencies] -coverage = ">=4.4" -pytest = ">=3.6" - -[package.extras] -testing = ["fields", "hunter", "process-tests (2.0.2)", "six", "virtualenv"] - -[[package]] -category = "dev" -description = "py.test plugin to check import ordering using isort" -name = "pytest-isort" -optional = false -python-versions = "*" -version = "0.3.1" - -[package.dependencies] -isort = ">=4.0" -pytest = ">=3.5" - -[[package]] -category = "dev" -description = "pytest-sugar is a plugin for pytest that changes the default look and feel of pytest (e.g. progressbar, show tests that fail instantly)." -name = "pytest-sugar" -optional = false -python-versions = "*" -version = "0.9.2" - -[package.dependencies] -packaging = ">=14.1" -pytest = ">=2.9" -termcolor = ">=1.1.0" - -[[package]] -category = "main" -description = "Extensions to the standard Python datetime module" -name = "python-dateutil" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -version = "2.8.1" - -[package.dependencies] -six = ">=1.5" - -[[package]] -category = "dev" -description = "JOSE implementation in Python" -name = "python-jose" -optional = false -python-versions = "*" -version = "3.1.0" - -[package.dependencies] -ecdsa = "<1.0" -pyasn1 = "*" -rsa = "*" -six = "<2.0" - -[package.extras] -cryptography = ["cryptography"] -pycrypto = ["pycrypto (>=2.6.0,<2.7.0)", "pyasn1"] -pycryptodome = ["pycryptodome (>=3.3.1,<4.0.0)", "pyasn1"] - -[[package]] -category = "dev" -description = "World timezone definitions, modern and historical" -name = "pytz" -optional = false -python-versions = "*" -version = "2019.3" - -[[package]] -category = "dev" -description = "Python for Window Extensions" -marker = "sys_platform == \"win32\" and python_version >= \"3.6\"" -name = "pywin32" -optional = false -python-versions = "*" -version = "227" - -[[package]] -category = "dev" -description = "" -marker = "sys_platform == \"win32\"" -name = "pywin32-ctypes" -optional = false -python-versions = "*" -version = "0.2.0" - -[[package]] -category = "dev" -description = "YAML parser and emitter for Python" -name = "pyyaml" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "5.3.1" - -[[package]] -category = "dev" -description = "Randomize the order of the tests within a unittest.TestCase class" -name = "randomize" -optional = false -python-versions = "*" -version = "0.14" - -[[package]] -category = "dev" -description = "readme_renderer is a library for rendering \"readme\" descriptions for Warehouse" -name = "readme-renderer" -optional = false -python-versions = "*" -version = "25.0" - -[package.dependencies] -Pygments = ">=2.5.1" -bleach = ">=2.1.0" -docutils = ">=0.13.1" -six = "*" - -[package.extras] -md = ["cmarkgfm (>=0.2.0)"] - -[[package]] -category = "dev" -description = "Alternative regular expression module, to replace re." -name = "regex" -optional = false -python-versions = "*" -version = "2020.2.20" [[package]] -category = "main" -description = "Python HTTP for Humans." -name = "requests" +name = "colorama" +version = "0.4.4" +description = "Cross-platform colored terminal text." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "2.23.0" -[package.dependencies] -certifi = ">=2017.4.17" -chardet = ">=3.0.2,<4" -idna = ">=2.5,<3" -urllib3 = ">=1.21.1,<1.25.0 || >1.25.0,<1.25.1 || >1.25.1,<1.26" +[[package]] +name = "coverage" +version = "5.5" +description = "Code coverage measurement for Python" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" [package.extras] -security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"] -socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"] +toml = ["toml"] [[package]] +name = "docopt" +version = "0.6.2" +description = "Pythonic argument parser, that will make you smile" category = "dev" -description = "A utility belt for advanced users of python-requests" -name = "requests-toolbelt" optional = false python-versions = "*" -version = "0.9.1" - -[package.dependencies] -requests = ">=2.0.1,<3.0.0" [[package]] +name = "iniconfig" +version = "1.1.1" +description = "iniconfig: brain-dead simple config-ini parsing" category = "dev" -description = "A utility library for mocking out the `requests` Python library." -name = "responses" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.10.12" +python-versions = "*" -[package.dependencies] -requests = ">=2.0" -six = "*" +[[package]] +name = "isort" +version = "5.8.0" +description = "A Python utility / library to sort Python imports." +category = "dev" +optional = false +python-versions = ">=3.6,<4.0" [package.extras] -tests = ["coverage (>=3.7.1,<5.0.0)", "pytest-cov", "pytest-localserver", "flake8", "pytest (>=4.6,<5.0)", "pytest"] +pipfile_deprecated_finder = ["pipreqs", "requirementslib"] +requirements_deprecated_finder = ["pipreqs", "pip-api"] +colors = ["colorama (>=0.4.3,<0.5.0)"] [[package]] +name = "mypy-extensions" +version = "0.4.3" +description = "Experimental type system extensions for programs checked with the mypy typechecker." category = "dev" -description = "Pure-Python RSA implementation" -name = "rsa" optional = false python-versions = "*" -version = "4.0" - -[package.dependencies] -pyasn1 = ">=0.1.3" [[package]] -category = "main" -description = "An Amazon S3 Transfer Manager" -name = "s3transfer" +name = "packaging" +version = "20.9" +description = "Core utilities for Python packages" +category = "dev" optional = false -python-versions = "*" -version = "0.3.3" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.dependencies] -botocore = ">=1.12.36,<2.0a.0" +pyparsing = ">=2.0.2" [[package]] +name = "pathspec" +version = "0.8.1" +description = "Utility library for gitignore style pattern matching of file paths." category = "dev" -description = "Python bindings to FreeDesktop.org Secret Service API" -marker = "sys_platform == \"linux\"" -name = "secretstorage" optional = false -python-versions = ">=3.5" -version = "3.1.2" - -[package.dependencies] -cryptography = "*" -jeepney = ">=0.4.2" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] -category = "main" -description = "Python 2 and 3 compatibility utilities" -name = "six" +name = "pluggy" +version = "0.13.1" +description = "plugin and hook calling mechanisms for python" +category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -version = "1.14.0" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.extras] +dev = ["pre-commit", "tox"] [[package]] +name = "py" +version = "1.10.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" category = "dev" -description = "A pure Python implementation of a sliding window memory map manager" -name = "smmap" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "3.0.1" [[package]] +name = "pyparsing" +version = "2.4.7" +description = "Python parsing module" category = "dev" -description = "This package provides 26 stemmers for 25 languages generated from Snowball algorithms." -name = "snowballstemmer" optional = false -python-versions = "*" -version = "2.0.0" +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] +name = "pytest" +version = "6.2.2" +description = "pytest: simple powerful testing with Python" category = "dev" -description = "SSH public key parser" -name = "sshpubkeys" optional = false -python-versions = "*" -version = "3.1.0" +python-versions = ">=3.6" [package.dependencies] -cryptography = ">=2.1.4" -ecdsa = ">=0.13" +atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} +attrs = ">=19.2.0" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<1.0.0a1" +py = ">=1.8.2" +toml = "*" [package.extras] -dev = ["twine", "wheel"] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] [[package]] +name = "pytest-cov" +version = "2.11.1" +description = "Pytest plugin for measuring coverage." category = "dev" -description = "Manage dynamic plugins for Python applications" -name = "stevedore" optional = false -python-versions = "*" -version = "1.32.0" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [package.dependencies] -pbr = ">=2.0.0,<2.1.0 || >2.1.0" -six = ">=1.10.0" +coverage = ">=5.2.1" +pytest = ">=4.6" -[[package]] -category = "main" -description = "ANSII Color formatting for output in terminal." -name = "termcolor" -optional = false -python-versions = "*" -version = "1.1.0" +[package.extras] +testing = ["fields", "hunter", "process-tests (==2.0.2)", "six", "pytest-xdist", "virtualenv"] [[package]] +name = "pytest-mock" +version = "3.5.1" +description = "Thin-wrapper around the mock package for easier use with pytest" category = "dev" -description = "Python Library for Tom's Obvious, Minimal Language" -name = "toml" optional = false -python-versions = "*" -version = "0.10.0" +python-versions = ">=3.5" -[[package]] -category = "dev" -description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -name = "tornado" -optional = false -python-versions = ">= 3.5" -version = "6.0.4" +[package.dependencies] +pytest = ">=5.0" + +[package.extras] +dev = ["pre-commit", "tox", "pytest-asyncio"] [[package]] +name = "pytest-spec" +version = "3.1.0" +description = "Library pytest-spec is a pytest plugin to display test execution output like a SPECIFICATION." category = "dev" -description = "Fast, Extensible Progress Meter" -name = "tqdm" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*" -version = "4.43.0" +python-versions = "*" -[package.extras] -dev = ["py-make (>=0.1.0)", "twine", "argopt", "pydoc-markdown"] +[package.dependencies] +six = "*" [[package]] +name = "pytest-testmon" +version = "1.1.0" +description = "selects tests affected by changed files and methods" category = "dev" -description = "Collection of utilities for publishing packages on PyPI" -name = "twine" optional = false python-versions = ">=3.6" -version = "3.1.1" [package.dependencies] -keyring = ">=15.1" -pkginfo = ">=1.4.2" -readme-renderer = ">=21.0" -requests = ">=2.20" -requests-toolbelt = ">=0.8.0,<0.9.0 || >0.9.0" -setuptools = ">=0.7.0" -tqdm = ">=4.14" - -[package.dependencies.importlib-metadata] -python = "<3.8" -version = "*" +coverage = ">=4,<6" +pytest = ">=5,<7" [[package]] +name = "pytest-watch" +version = "4.2.0" +description = "Local continuous test runner with pytest and watchdog." category = "dev" -description = "a fork of Python 2 and 3 ast modules with type comment support" -name = "typed-ast" optional = false python-versions = "*" -version = "1.4.1" -[[package]] -category = "dev" -description = "Backported and Experimental Type Hints for Python 3.5+" -name = "typing-extensions" -optional = false -python-versions = "*" -version = "3.7.4.1" +[package.dependencies] +colorama = ">=0.3.3" +docopt = ">=0.4.0" +pytest = ">=2.6.4" +watchdog = ">=0.6.0" [[package]] +name = "python-dateutil" +version = "2.5.3" +description = "Extensions to the standard Python datetime module" category = "main" -description = "HTTP library with thread-safe connection pooling, file post, and more." -name = "urllib3" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" -version = "1.25.8" +python-versions = "*" -[package.extras] -brotli = ["brotlipy (>=0.6.0)"] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] -socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"] +[package.dependencies] +six = ">=1.5" [[package]] +name = "regex" +version = "2021.3.17" +description = "Alternative regular expression module, to replace re." category = "dev" -description = "Measures number of Terminal column cells of wide-character codes" -name = "wcwidth" optional = false python-versions = "*" -version = "0.1.9" [[package]] -category = "dev" -description = "Character encoding aliases for legacy web content" -name = "webencodings" +name = "six" +version = "1.15.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" optional = false -python-versions = "*" -version = "0.5.1" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" category = "dev" -description = "WebSocket client for Python. hybi13 is supported." -name = "websocket-client" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.57.0" - -[package.dependencies] -six = "*" +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] +name = "typed-ast" +version = "1.4.2" +description = "a fork of Python 2 and 3 ast modules with type comment support" category = "dev" -description = "The comprehensive WSGI web application library." -name = "werkzeug" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "1.0.0" - -[package.extras] -dev = ["pytest", "coverage", "tox", "sphinx", "pallets-sphinx-themes", "sphinx-issues"] -watchdog = ["watchdog"] - -[[package]] -category = "main" -description = "This package provides cross-platform cross-python shutil.which functionality." -name = "whichcraft" optional = false python-versions = "*" -version = "0.6.1" [[package]] +name = "typing-extensions" +version = "3.7.4.3" +description = "Backported and Experimental Type Hints for Python 3.5+" category = "dev" -description = "Module for decorators, wrappers and monkey patching." -name = "wrapt" optional = false python-versions = "*" -version = "1.11.2" [[package]] -category = "dev" -description = "Makes working with XML feel like you are working with JSON" -name = "xmltodict" +name = "urllib3" +version = "1.26.4" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.12.0" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" -[[package]] -category = "dev" -description = "A formatter for Python code." -name = "yapf" -optional = false -python-versions = "*" -version = "0.29.0" +[package.extras] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +brotli = ["brotlipy (>=0.6.0)"] [[package]] +name = "watchdog" +version = "2.0.2" +description = "Filesystem events monitoring" category = "dev" -description = "Backport of pathlib-compatible object wrapper for zip files" -marker = "python_version < \"3.8\"" -name = "zipp" optional = false python-versions = ">=3.6" -version = "3.1.0" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] -testing = ["jaraco.itertools", "func-timeout"] +watchmedo = ["PyYAML (>=3.10)", "argh (>=0.24.1)"] [metadata] -content-hash = "3972a991ca394a984241d80121758465d74dcc636431ab5c34ddad4e8747a572" -python-versions = "^3.7" +lock-version = "1.1" +python-versions = "^3.8" +content-hash = "09c962123680205536d63dab0fcd982b489d6818074b4ccd4359ff87b4fe3531" [metadata.files] appdirs = [ - {file = "appdirs-1.4.3-py2.py3-none-any.whl", hash = "sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e"}, - {file = "appdirs-1.4.3.tar.gz", hash = "sha256:9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92"}, -] -arrow = [ - {file = "arrow-0.15.5-py2.py3-none-any.whl", hash = "sha256:70729bcc831da496ca3cb4b7e89472c8e2d27d398908155e0796179f6d2d41ee"}, - {file = "arrow-0.15.5.tar.gz", hash = "sha256:5390e464e2c5f76971b60ffa7ee29c598c7501a294bc9f5e6dadcb251a5d027b"}, -] -astroid = [ - {file = "astroid-2.3.3-py3-none-any.whl", hash = "sha256:840947ebfa8b58f318d42301cf8c0a20fd794a33b61cc4638e28e9e61ba32f42"}, - {file = "astroid-2.3.3.tar.gz", hash = "sha256:71ea07f44df9568a75d0f354c49143a4575d90645e9fead6dfb52c26a85ed13a"}, + {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, + {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, ] atomicwrites = [ - {file = "atomicwrites-1.3.0-py2.py3-none-any.whl", hash = "sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4"}, - {file = "atomicwrites-1.3.0.tar.gz", hash = "sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6"}, + {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, + {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, ] attrs = [ - {file = "attrs-19.3.0-py2.py3-none-any.whl", hash = "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c"}, - {file = "attrs-19.3.0.tar.gz", hash = "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"}, -] -autopep8 = [ - {file = "autopep8-1.5.tar.gz", hash = "sha256:0f592a0447acea0c2b0a9602be1e4e3d86db52badd2e3c84f0193bfd89fd3a43"}, -] -aws-sam-translator = [ - {file = "aws-sam-translator-1.22.0.tar.gz", hash = "sha256:3ba6a821eda29ca8ea1306e27a8135256d6136f1b0b29c6cbf9a107dfd1c2dd9"}, -] -aws-xray-sdk = [ - {file = "aws-xray-sdk-2.4.3.tar.gz", hash = "sha256:263a38f3920d9dc625e3acb92e6f6d300f4250b70f538bd009ce6e485676ab74"}, - {file = "aws_xray_sdk-2.4.3-py2.py3-none-any.whl", hash = "sha256:612dba6efc3704ef224ac0747b05488b8aad94e71be3ece4edbc051189d50482"}, -] -bandit = [ - {file = "bandit-1.6.2-py2.py3-none-any.whl", hash = "sha256:336620e220cf2d3115877685e264477ff9d9abaeb0afe3dc7264f55fa17a3952"}, - {file = "bandit-1.6.2.tar.gz", hash = "sha256:41e75315853507aa145d62a78a2a6c5e3240fe14ee7c601459d0df9418196065"}, -] -binaryornot = [ - {file = "binaryornot-0.4.4-py2.py3-none-any.whl", hash = "sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4"}, - {file = "binaryornot-0.4.4.tar.gz", hash = "sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061"}, + {file = "attrs-20.3.0-py2.py3-none-any.whl", hash = "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6"}, + {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, ] black = [ - {file = "black-19.10b0-py36-none-any.whl", hash = "sha256:1b30e59be925fafc1ee4565e5e08abef6b03fe455102883820fe5ee2e4734e0b"}, - {file = "black-19.10b0.tar.gz", hash = "sha256:c2edb73a08e9e0e6f65a0e6af18b059b8b1cdd5bef997d7a0b181df93dc81539"}, -] -bleach = [ - {file = "bleach-3.1.4-py2.py3-none-any.whl", hash = "sha256:cc8da25076a1fe56c3ac63671e2194458e0c4d9c7becfd52ca251650d517903c"}, - {file = "bleach-3.1.4.tar.gz", hash = "sha256:e78e426105ac07026ba098f04de8abe9b6e3e98b5befbf89b51a5ef0a4292b03"}, -] -boto = [ - {file = "boto-2.49.0-py2.py3-none-any.whl", hash = "sha256:147758d41ae7240dc989f0039f27da8ca0d53734be0eb869ef16e3adcfa462e8"}, - {file = "boto-2.49.0.tar.gz", hash = "sha256:ea0d3b40a2d852767be77ca343b58a9e3a4b00d9db440efb8da74b4e58025e5a"}, -] -boto3 = [ - {file = "boto3-1.12.30-py2.py3-none-any.whl", hash = "sha256:7f6d41d6e5b763914e867ece72b049476b75093bcb801afeae2aebd20d7f61c8"}, - {file = "boto3-1.12.30.tar.gz", hash = "sha256:b464586003bdfb9ee92463013650f5b62935a7870ed3e8a32aa9111aa142c3f7"}, -] -botocore = [ - {file = "botocore-1.15.30-py2.py3-none-any.whl", hash = "sha256:d71f22e81bb17d92a6c3aad9ff04ca79af5f053ac35f6d6f16e1f002aa0655af"}, - {file = "botocore-1.15.30.tar.gz", hash = "sha256:38eef2271ab908979ad7ec7a5cdf334c2a5a0b5e8fe37937c8a76e3ed9c18940"}, -] -certifi = [ - {file = "certifi-2019.11.28-py2.py3-none-any.whl", hash = "sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3"}, - {file = "certifi-2019.11.28.tar.gz", hash = "sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f"}, -] -cffi = [ - {file = "cffi-1.14.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1cae98a7054b5c9391eb3249b86e0e99ab1e02bb0cc0575da191aedadbdf4384"}, - {file = "cffi-1.14.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:cf16e3cf6c0a5fdd9bc10c21687e19d29ad1fe863372b5543deaec1039581a30"}, - {file = "cffi-1.14.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:f2b0fa0c01d8a0c7483afd9f31d7ecf2d71760ca24499c8697aeb5ca37dc090c"}, - {file = "cffi-1.14.0-cp27-cp27m-win32.whl", hash = "sha256:99f748a7e71ff382613b4e1acc0ac83bf7ad167fb3802e35e90d9763daba4d78"}, - {file = "cffi-1.14.0-cp27-cp27m-win_amd64.whl", hash = "sha256:c420917b188a5582a56d8b93bdd8e0f6eca08c84ff623a4c16e809152cd35793"}, - {file = "cffi-1.14.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:399aed636c7d3749bbed55bc907c3288cb43c65c4389964ad5ff849b6370603e"}, - {file = "cffi-1.14.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:cab50b8c2250b46fe738c77dbd25ce017d5e6fb35d3407606e7a4180656a5a6a"}, - {file = "cffi-1.14.0-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:001bf3242a1bb04d985d63e138230802c6c8d4db3668fb545fb5005ddf5bb5ff"}, - {file = "cffi-1.14.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:e56c744aa6ff427a607763346e4170629caf7e48ead6921745986db3692f987f"}, - {file = "cffi-1.14.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b8c78301cefcf5fd914aad35d3c04c2b21ce8629b5e4f4e45ae6812e461910fa"}, - {file = "cffi-1.14.0-cp35-cp35m-win32.whl", hash = "sha256:8c0ffc886aea5df6a1762d0019e9cb05f825d0eec1f520c51be9d198701daee5"}, - {file = "cffi-1.14.0-cp35-cp35m-win_amd64.whl", hash = "sha256:8a6c688fefb4e1cd56feb6c511984a6c4f7ec7d2a1ff31a10254f3c817054ae4"}, - {file = "cffi-1.14.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:95cd16d3dee553f882540c1ffe331d085c9e629499ceadfbda4d4fde635f4b7d"}, - {file = "cffi-1.14.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:66e41db66b47d0d8672d8ed2708ba91b2f2524ece3dee48b5dfb36be8c2f21dc"}, - {file = "cffi-1.14.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:028a579fc9aed3af38f4892bdcc7390508adabc30c6af4a6e4f611b0c680e6ac"}, - {file = "cffi-1.14.0-cp36-cp36m-win32.whl", hash = "sha256:cef128cb4d5e0b3493f058f10ce32365972c554572ff821e175dbc6f8ff6924f"}, - {file = "cffi-1.14.0-cp36-cp36m-win_amd64.whl", hash = "sha256:337d448e5a725bba2d8293c48d9353fc68d0e9e4088d62a9571def317797522b"}, - {file = "cffi-1.14.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e577934fc5f8779c554639376beeaa5657d54349096ef24abe8c74c5d9c117c3"}, - {file = "cffi-1.14.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:62ae9af2d069ea2698bf536dcfe1e4eed9090211dbaafeeedf5cb6c41b352f66"}, - {file = "cffi-1.14.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:14491a910663bf9f13ddf2bc8f60562d6bc5315c1f09c704937ef17293fb85b0"}, - {file = "cffi-1.14.0-cp37-cp37m-win32.whl", hash = "sha256:c43866529f2f06fe0edc6246eb4faa34f03fe88b64a0a9a942561c8e22f4b71f"}, - {file = "cffi-1.14.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2089ed025da3919d2e75a4d963d008330c96751127dd6f73c8dc0c65041b4c26"}, - {file = "cffi-1.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3b911c2dbd4f423b4c4fcca138cadde747abdb20d196c4a48708b8a2d32b16dd"}, - {file = "cffi-1.14.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:7e63cbcf2429a8dbfe48dcc2322d5f2220b77b2e17b7ba023d6166d84655da55"}, - {file = "cffi-1.14.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:3d311bcc4a41408cf5854f06ef2c5cab88f9fded37a3b95936c9879c1640d4c2"}, - {file = "cffi-1.14.0-cp38-cp38-win32.whl", hash = "sha256:675686925a9fb403edba0114db74e741d8181683dcf216be697d208857e04ca8"}, - {file = "cffi-1.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:00789914be39dffba161cfc5be31b55775de5ba2235fe49aa28c148236c4e06b"}, - {file = "cffi-1.14.0.tar.gz", hash = "sha256:2d384f4a127a15ba701207f7639d94106693b6cd64173d6c8988e2c25f3ac2b6"}, -] -cfn-lint = [ - {file = "cfn-lint-0.29.2.tar.gz", hash = "sha256:b41018ad7a49ec4ad07cb00646e2c052dd024db99281111cf53cbb90f72d6104"}, - {file = "cfn_lint-0.29.2-py3-none-any.whl", hash = "sha256:4a94c93fc64ecfd4602d9c2b71d8c622906f6d74f87f37393de4a9516ab36459"}, -] -chardet = [ - {file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"}, - {file = "chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"}, + {file = "black-20.8b1.tar.gz", hash = "sha256:1c02557aa099101b9d21496f8a914e9ed2222ef70336404eeeac8edba836fbea"}, ] click = [ - {file = "click-7.1.1-py2.py3-none-any.whl", hash = "sha256:e345d143d80bf5ee7534056164e5e112ea5e22716bbb1ce727941f4c8b471b9a"}, - {file = "click-7.1.1.tar.gz", hash = "sha256:8a18b4ea89d8820c5d0c7da8a64b2c324b4dabb695804dbfea19b9be9d88c0cc"}, -] -codecov = [ - {file = "codecov-2.0.22-py2.py3-none-any.whl", hash = "sha256:09fb045eb044a619cd2b9dacd7789ae8e322cb7f18196378579fd8d883e6b665"}, - {file = "codecov-2.0.22.tar.gz", hash = "sha256:aeeefa3a03cac8a78e4f988e935b51a4689bb1f17f20d4e827807ee11135f845"}, + {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, + {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, ] colorama = [ - {file = "colorama-0.4.3-py2.py3-none-any.whl", hash = "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff"}, - {file = "colorama-0.4.3.tar.gz", hash = "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"}, -] -cookiecutter = [ - {file = "cookiecutter-1.7.0-py2.py3-none-any.whl", hash = "sha256:910e6c423da42c45c2614d6676485d4872c4ed1bd9531cfff59280977f98fbf5"}, - {file = "cookiecutter-1.7.0.tar.gz", hash = "sha256:479997e1c26c51bbbaf04097ef7d82b1d91cfb03f570cb5fb5ca265c88db04ae"}, + {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, + {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, ] coverage = [ - {file = "coverage-5.0.4-cp27-cp27m-macosx_10_12_x86_64.whl", hash = "sha256:8a620767b8209f3446197c0e29ba895d75a1e272a36af0786ec70fe7834e4307"}, - {file = "coverage-5.0.4-cp27-cp27m-macosx_10_13_intel.whl", hash = "sha256:73aa6e86034dad9f00f4bbf5a666a889d17d79db73bc5af04abd6c20a014d9c8"}, - {file = "coverage-5.0.4-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:408ce64078398b2ee2ec08199ea3fcf382828d2f8a19c5a5ba2946fe5ddc6c31"}, - {file = "coverage-5.0.4-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:cda33311cb9fb9323958a69499a667bd728a39a7aa4718d7622597a44c4f1441"}, - {file = "coverage-5.0.4-cp27-cp27m-win32.whl", hash = "sha256:5f587dfd83cb669933186661a351ad6fc7166273bc3e3a1531ec5c783d997aac"}, - {file = "coverage-5.0.4-cp27-cp27m-win_amd64.whl", hash = "sha256:9fad78c13e71546a76c2f8789623eec8e499f8d2d799f4b4547162ce0a4df435"}, - {file = "coverage-5.0.4-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:2e08c32cbede4a29e2a701822291ae2bc9b5220a971bba9d1e7615312efd3037"}, - {file = "coverage-5.0.4-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:922fb9ef2c67c3ab20e22948dcfd783397e4c043a5c5fa5ff5e9df5529074b0a"}, - {file = "coverage-5.0.4-cp35-cp35m-macosx_10_12_x86_64.whl", hash = "sha256:c3fc325ce4cbf902d05a80daa47b645d07e796a80682c1c5800d6ac5045193e5"}, - {file = "coverage-5.0.4-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:046a1a742e66d065d16fb564a26c2a15867f17695e7f3d358d7b1ad8a61bca30"}, - {file = "coverage-5.0.4-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6ad6ca45e9e92c05295f638e78cd42bfaaf8ee07878c9ed73e93190b26c125f7"}, - {file = "coverage-5.0.4-cp35-cp35m-win32.whl", hash = "sha256:eda55e6e9ea258f5e4add23bcf33dc53b2c319e70806e180aecbff8d90ea24de"}, - {file = "coverage-5.0.4-cp35-cp35m-win_amd64.whl", hash = "sha256:4a8a259bf990044351baf69d3b23e575699dd60b18460c71e81dc565f5819ac1"}, - {file = "coverage-5.0.4-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:f372cdbb240e09ee855735b9d85e7f50730dcfb6296b74b95a3e5dea0615c4c1"}, - {file = "coverage-5.0.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a37c6233b28e5bc340054cf6170e7090a4e85069513320275a4dc929144dccf0"}, - {file = "coverage-5.0.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:443be7602c790960b9514567917af538cac7807a7c0c0727c4d2bbd4014920fd"}, - {file = "coverage-5.0.4-cp36-cp36m-win32.whl", hash = "sha256:165a48268bfb5a77e2d9dbb80de7ea917332a79c7adb747bd005b3a07ff8caf0"}, - {file = "coverage-5.0.4-cp36-cp36m-win_amd64.whl", hash = "sha256:0a907199566269e1cfa304325cc3b45c72ae341fbb3253ddde19fa820ded7a8b"}, - {file = "coverage-5.0.4-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:513e6526e0082c59a984448f4104c9bf346c2da9961779ede1fc458e8e8a1f78"}, - {file = "coverage-5.0.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:3844c3dab800ca8536f75ae89f3cf566848a3eb2af4d9f7b1103b4f4f7a5dad6"}, - {file = "coverage-5.0.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:641e329e7f2c01531c45c687efcec8aeca2a78a4ff26d49184dce3d53fc35014"}, - {file = "coverage-5.0.4-cp37-cp37m-win32.whl", hash = "sha256:db1d4e38c9b15be1521722e946ee24f6db95b189d1447fa9ff18dd16ba89f732"}, - {file = "coverage-5.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:62061e87071497951155cbccee487980524d7abea647a1b2a6eb6b9647df9006"}, - {file = "coverage-5.0.4-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:65a7e00c00472cd0f59ae09d2fb8a8aaae7f4a0cf54b2b74f3138d9f9ceb9cb2"}, - {file = "coverage-5.0.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1f66cf263ec77af5b8fe14ef14c5e46e2eb4a795ac495ad7c03adc72ae43fafe"}, - {file = "coverage-5.0.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:85596aa5d9aac1bf39fe39d9fa1051b0f00823982a1de5766e35d495b4a36ca9"}, - {file = "coverage-5.0.4-cp38-cp38-win32.whl", hash = "sha256:86a0ea78fd851b313b2e712266f663e13b6bc78c2fb260b079e8b67d970474b1"}, - {file = "coverage-5.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:03f630aba2b9b0d69871c2e8d23a69b7fe94a1e2f5f10df5049c0df99db639a0"}, - {file = "coverage-5.0.4-cp39-cp39-win32.whl", hash = "sha256:7c9762f80a25d8d0e4ab3cb1af5d9dffbddb3ee5d21c43e3474c84bf5ff941f7"}, - {file = "coverage-5.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:4482f69e0701139d0f2c44f3c395d1d1d37abd81bfafbf9b6efbe2542679d892"}, - {file = "coverage-5.0.4.tar.gz", hash = "sha256:1b60a95fc995649464e0cd48cecc8288bac5f4198f21d04b8229dc4097d76823"}, -] -cryptography = [ - {file = "cryptography-2.8-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:fb81c17e0ebe3358486cd8cc3ad78adbae58af12fc2bf2bc0bb84e8090fa5ce8"}, - {file = "cryptography-2.8-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:44ff04138935882fef7c686878e1c8fd80a723161ad6a98da31e14b7553170c2"}, - {file = "cryptography-2.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:369d2346db5934345787451504853ad9d342d7f721ae82d098083e1f49a582ad"}, - {file = "cryptography-2.8-cp27-cp27m-win32.whl", hash = "sha256:df6b4dca2e11865e6cfbfb708e800efb18370f5a46fd601d3755bc7f85b3a8a2"}, - {file = "cryptography-2.8-cp27-cp27m-win_amd64.whl", hash = "sha256:7f09806ed4fbea8f51585231ba742b58cbcfbfe823ea197d8c89a5e433c7e912"}, - {file = "cryptography-2.8-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:58363dbd966afb4f89b3b11dfb8ff200058fbc3b947507675c19ceb46104b48d"}, - {file = "cryptography-2.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6ec280fb24d27e3d97aa731e16207d58bd8ae94ef6eab97249a2afe4ba643d42"}, - {file = "cryptography-2.8-cp34-abi3-macosx_10_6_intel.whl", hash = "sha256:b43f53f29816ba1db8525f006fa6f49292e9b029554b3eb56a189a70f2a40879"}, - {file = "cryptography-2.8-cp34-abi3-manylinux1_x86_64.whl", hash = "sha256:7270a6c29199adc1297776937a05b59720e8a782531f1f122f2eb8467f9aab4d"}, - {file = "cryptography-2.8-cp34-abi3-manylinux2010_x86_64.whl", hash = "sha256:de96157ec73458a7f14e3d26f17f8128c959084931e8997b9e655a39c8fde9f9"}, - {file = "cryptography-2.8-cp34-cp34m-win32.whl", hash = "sha256:02079a6addc7b5140ba0825f542c0869ff4df9a69c360e339ecead5baefa843c"}, - {file = "cryptography-2.8-cp34-cp34m-win_amd64.whl", hash = "sha256:b0de590a8b0979649ebeef8bb9f54394d3a41f66c5584fff4220901739b6b2f0"}, - {file = "cryptography-2.8-cp35-cp35m-win32.whl", hash = "sha256:ecadccc7ba52193963c0475ac9f6fa28ac01e01349a2ca48509667ef41ffd2cf"}, - {file = "cryptography-2.8-cp35-cp35m-win_amd64.whl", hash = "sha256:90df0cc93e1f8d2fba8365fb59a858f51a11a394d64dbf3ef844f783844cc793"}, - {file = "cryptography-2.8-cp36-cp36m-win32.whl", hash = "sha256:1df22371fbf2004c6f64e927668734070a8953362cd8370ddd336774d6743595"}, - {file = "cryptography-2.8-cp36-cp36m-win_amd64.whl", hash = "sha256:a518c153a2b5ed6b8cc03f7ae79d5ffad7315ad4569b2d5333a13c38d64bd8d7"}, - {file = "cryptography-2.8-cp37-cp37m-win32.whl", hash = "sha256:4b1030728872c59687badcca1e225a9103440e467c17d6d1730ab3d2d64bfeff"}, - {file = "cryptography-2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:d31402aad60ed889c7e57934a03477b572a03af7794fa8fb1780f21ea8f6551f"}, - {file = "cryptography-2.8-cp38-cp38-win32.whl", hash = "sha256:73fd30c57fa2d0a1d7a49c561c40c2f79c7d6c374cc7750e9ac7c99176f6428e"}, - {file = "cryptography-2.8-cp38-cp38-win_amd64.whl", hash = "sha256:971221ed40f058f5662a604bd1ae6e4521d84e6cad0b7b170564cc34169c8f13"}, - {file = "cryptography-2.8.tar.gz", hash = "sha256:3cda1f0ed8747339bbdf71b9f38ca74c7b592f24f65cdb3ab3765e4b02871651"}, -] -decorator = [ - {file = "decorator-4.4.2-py2.py3-none-any.whl", hash = "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760"}, - {file = "decorator-4.4.2.tar.gz", hash = "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7"}, -] -docker = [ - {file = "docker-4.2.0-py2.py3-none-any.whl", hash = "sha256:1c2ddb7a047b2599d1faec00889561316c674f7099427b9c51e8cb804114b553"}, - {file = "docker-4.2.0.tar.gz", hash = "sha256:ddae66620ab5f4bce769f64bcd7934f880c8abe6aa50986298db56735d0f722e"}, -] -docutils = [ - {file = "docutils-0.15.2-py2-none-any.whl", hash = "sha256:9e4d7ecfc600058e07ba661411a2b7de2fd0fafa17d1a7f7361cd47b1175c827"}, - {file = "docutils-0.15.2-py3-none-any.whl", hash = "sha256:6c4f696463b79f1fb8ba0c594b63840ebd41f059e92b31957c46b74a4599b6d0"}, - {file = "docutils-0.15.2.tar.gz", hash = "sha256:a2aeea129088da402665e92e0b25b04b073c04b2dce4ab65caaa38b7ce2e1a99"}, -] -ecdsa = [ - {file = "ecdsa-0.15-py2.py3-none-any.whl", hash = "sha256:867ec9cf6df0b03addc8ef66b56359643cb5d0c1dc329df76ba7ecfe256c8061"}, - {file = "ecdsa-0.15.tar.gz", hash = "sha256:8f12ac317f8a1318efa75757ef0a651abe12e51fc1af8838fb91079445227277"}, -] -entrypoints = [ - {file = "entrypoints-0.3-py2.py3-none-any.whl", hash = "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19"}, - {file = "entrypoints-0.3.tar.gz", hash = "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451"}, -] -fire = [ - {file = "fire-0.3.0.tar.gz", hash = "sha256:96c372096afcf33ddbadac8a7ca5b7e829e8d7157d0030bd964bf959afde5c2c"}, -] -flake8 = [ - {file = "flake8-3.7.9-py2.py3-none-any.whl", hash = "sha256:49356e766643ad15072a789a20915d3c91dc89fd313ccd71802303fd67e4deca"}, - {file = "flake8-3.7.9.tar.gz", hash = "sha256:45681a117ecc81e870cbf1262835ae4af5e7a8b08e40b944a8a6e6b895914cfb"}, -] -future = [ - {file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"}, -] -gitdb = [ - {file = "gitdb-4.0.2-py3-none-any.whl", hash = "sha256:284a6a4554f954d6e737cddcff946404393e030b76a282c6640df8efd6b3da5e"}, - {file = "gitdb-4.0.2.tar.gz", hash = "sha256:598e0096bb3175a0aab3a0b5aedaa18a9a25c6707e0eca0695ba1a0baf1b2150"}, -] -gitpython = [ - {file = "GitPython-3.1.0-py3-none-any.whl", hash = "sha256:43da89427bdf18bf07f1164c6d415750693b4d50e28fc9b68de706245147b9dd"}, - {file = "GitPython-3.1.0.tar.gz", hash = "sha256:e426c3b587bd58c482f0b7fe6145ff4ac7ae6c82673fc656f489719abca6f4cb"}, -] -idna = [ - {file = "idna-2.8-py2.py3-none-any.whl", hash = "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"}, - {file = "idna-2.8.tar.gz", hash = "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407"}, -] -importlib-metadata = [ - {file = "importlib_metadata-1.6.0-py2.py3-none-any.whl", hash = "sha256:2a688cbaa90e0cc587f1df48bdc97a6eadccdcd9c35fb3f976a09e3b5016d90f"}, - {file = "importlib_metadata-1.6.0.tar.gz", hash = "sha256:34513a8a0c4962bc66d35b359558fd8a5e10cd472d37aec5f66858addef32c1e"}, + {file = "coverage-5.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf"}, + {file = "coverage-5.5-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b"}, + {file = "coverage-5.5-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669"}, + {file = "coverage-5.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90"}, + {file = "coverage-5.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c"}, + {file = "coverage-5.5-cp27-cp27m-win32.whl", hash = "sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a"}, + {file = "coverage-5.5-cp27-cp27m-win_amd64.whl", hash = "sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82"}, + {file = "coverage-5.5-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905"}, + {file = "coverage-5.5-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083"}, + {file = "coverage-5.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5"}, + {file = "coverage-5.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81"}, + {file = "coverage-5.5-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6"}, + {file = "coverage-5.5-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0"}, + {file = "coverage-5.5-cp310-cp310-win_amd64.whl", hash = "sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae"}, + {file = "coverage-5.5-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb"}, + {file = "coverage-5.5-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160"}, + {file = "coverage-5.5-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6"}, + {file = "coverage-5.5-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701"}, + {file = "coverage-5.5-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793"}, + {file = "coverage-5.5-cp35-cp35m-win32.whl", hash = "sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e"}, + {file = "coverage-5.5-cp35-cp35m-win_amd64.whl", hash = "sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3"}, + {file = "coverage-5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066"}, + {file = "coverage-5.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a"}, + {file = "coverage-5.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465"}, + {file = "coverage-5.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb"}, + {file = "coverage-5.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821"}, + {file = "coverage-5.5-cp36-cp36m-win32.whl", hash = "sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45"}, + {file = "coverage-5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184"}, + {file = "coverage-5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a"}, + {file = "coverage-5.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53"}, + {file = "coverage-5.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d"}, + {file = "coverage-5.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638"}, + {file = "coverage-5.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3"}, + {file = "coverage-5.5-cp37-cp37m-win32.whl", hash = "sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a"}, + {file = "coverage-5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a"}, + {file = "coverage-5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6"}, + {file = "coverage-5.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2"}, + {file = "coverage-5.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759"}, + {file = "coverage-5.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873"}, + {file = "coverage-5.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a"}, + {file = "coverage-5.5-cp38-cp38-win32.whl", hash = "sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6"}, + {file = "coverage-5.5-cp38-cp38-win_amd64.whl", hash = "sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502"}, + {file = "coverage-5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b"}, + {file = "coverage-5.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529"}, + {file = "coverage-5.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b"}, + {file = "coverage-5.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff"}, + {file = "coverage-5.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b"}, + {file = "coverage-5.5-cp39-cp39-win32.whl", hash = "sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6"}, + {file = "coverage-5.5-cp39-cp39-win_amd64.whl", hash = "sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03"}, + {file = "coverage-5.5-pp36-none-any.whl", hash = "sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079"}, + {file = "coverage-5.5-pp37-none-any.whl", hash = "sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4"}, + {file = "coverage-5.5.tar.gz", hash = "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c"}, +] +docopt = [ + {file = "docopt-0.6.2.tar.gz", hash = "sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491"}, +] +iniconfig = [ + {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, + {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] isort = [ - {file = "isort-4.3.21-py2.py3-none-any.whl", hash = "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd"}, - {file = "isort-4.3.21.tar.gz", hash = "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1"}, -] -jeepney = [ - {file = "jeepney-0.4.3-py3-none-any.whl", hash = "sha256:d6c6b49683446d2407d2fe3acb7a368a77ff063f9182fe427da15d622adc24cf"}, - {file = "jeepney-0.4.3.tar.gz", hash = "sha256:3479b861cc2b6407de5188695fa1a8d57e5072d7059322469b62628869b8e36e"}, -] -jinja2 = [ - {file = "Jinja2-2.11.1-py2.py3-none-any.whl", hash = "sha256:b0eaf100007721b5c16c1fc1eecb87409464edc10469ddc9a22a27a99123be49"}, - {file = "Jinja2-2.11.1.tar.gz", hash = "sha256:93187ffbc7808079673ef52771baa950426fd664d3aad1d0fa3e95644360e250"}, -] -jinja2-time = [ - {file = "jinja2-time-0.2.0.tar.gz", hash = "sha256:d14eaa4d315e7688daa4969f616f226614350c48730bfa1692d2caebd8c90d40"}, - {file = "jinja2_time-0.2.0-py2.py3-none-any.whl", hash = "sha256:d3eab6605e3ec8b7a0863df09cc1d23714908fa61aa6986a845c20ba488b4efa"}, -] -jmespath = [ - {file = "jmespath-0.9.5-py2.py3-none-any.whl", hash = "sha256:695cb76fa78a10663425d5b73ddc5714eb711157e52704d69be03b1a02ba4fec"}, - {file = "jmespath-0.9.5.tar.gz", hash = "sha256:cca55c8d153173e21baa59983015ad0daf603f9cb799904ff057bfb8ff8dc2d9"}, -] -jsondiff = [ - {file = "jsondiff-1.1.2.tar.gz", hash = "sha256:7e18138aecaa4a8f3b7ac7525b8466234e6378dd6cae702b982c9ed851d2ae21"}, -] -jsonpatch = [ - {file = "jsonpatch-1.25-py2.py3-none-any.whl", hash = "sha256:cc3a7241010a1fd3f50145a3b33be2c03c1e679faa19934b628bb07d0f64819e"}, - {file = "jsonpatch-1.25.tar.gz", hash = "sha256:ddc0f7628b8bfdd62e3cbfbc24ca6671b0b6265b50d186c2cf3659dc0f78fd6a"}, -] -jsonpickle = [ - {file = "jsonpickle-1.3-py2.py3-none-any.whl", hash = "sha256:efc6839cb341985f0c24f98650a4c1063a2877c236ffd3d7e1662f0c482bac93"}, - {file = "jsonpickle-1.3.tar.gz", hash = "sha256:71bca2b80ae28af4e3f86629ef247100af7f97032b5ca8d791c1f8725b411d95"}, -] -jsonpointer = [ - {file = "jsonpointer-2.0-py2.py3-none-any.whl", hash = "sha256:ff379fa021d1b81ab539f5ec467c7745beb1a5671463f9dcc2b2d458bd361c1e"}, - {file = "jsonpointer-2.0.tar.gz", hash = "sha256:c192ba86648e05fdae4f08a17ec25180a9aef5008d973407b581798a83975362"}, -] -jsonschema = [ - {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"}, - {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"}, -] -keyring = [ - {file = "keyring-21.2.0-py3-none-any.whl", hash = "sha256:8179b1cdcdcbc221456b5b74e6b7cfa06f8dd9f239eb81892166d9223d82c5ba"}, - {file = "keyring-21.2.0.tar.gz", hash = "sha256:197fd5903901030ef7b82fe247f43cfed2c157a28e7747d1cfcf4bc5e699dd03"}, -] -lazy-object-proxy = [ - {file = "lazy-object-proxy-1.4.3.tar.gz", hash = "sha256:f3900e8a5de27447acbf900b4750b0ddfd7ec1ea7fbaf11dfa911141bc522af0"}, - {file = "lazy_object_proxy-1.4.3-cp27-cp27m-macosx_10_13_x86_64.whl", hash = "sha256:a2238e9d1bb71a56cd710611a1614d1194dc10a175c1e08d75e1a7bcc250d442"}, - {file = "lazy_object_proxy-1.4.3-cp27-cp27m-win32.whl", hash = "sha256:efa1909120ce98bbb3777e8b6f92237f5d5c8ea6758efea36a473e1d38f7d3e4"}, - {file = "lazy_object_proxy-1.4.3-cp27-cp27m-win_amd64.whl", hash = "sha256:4677f594e474c91da97f489fea5b7daa17b5517190899cf213697e48d3902f5a"}, - {file = "lazy_object_proxy-1.4.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:0c4b206227a8097f05c4dbdd323c50edf81f15db3b8dc064d08c62d37e1a504d"}, - {file = "lazy_object_proxy-1.4.3-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:d945239a5639b3ff35b70a88c5f2f491913eb94871780ebfabb2568bd58afc5a"}, - {file = "lazy_object_proxy-1.4.3-cp34-cp34m-win32.whl", hash = "sha256:9651375199045a358eb6741df3e02a651e0330be090b3bc79f6d0de31a80ec3e"}, - {file = "lazy_object_proxy-1.4.3-cp34-cp34m-win_amd64.whl", hash = "sha256:eba7011090323c1dadf18b3b689845fd96a61ba0a1dfbd7f24b921398affc357"}, - {file = "lazy_object_proxy-1.4.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:48dab84ebd4831077b150572aec802f303117c8cc5c871e182447281ebf3ac50"}, - {file = "lazy_object_proxy-1.4.3-cp35-cp35m-win32.whl", hash = "sha256:ca0a928a3ddbc5725be2dd1cf895ec0a254798915fb3a36af0964a0a4149e3db"}, - {file = "lazy_object_proxy-1.4.3-cp35-cp35m-win_amd64.whl", hash = "sha256:194d092e6f246b906e8f70884e620e459fc54db3259e60cf69a4d66c3fda3449"}, - {file = "lazy_object_proxy-1.4.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:97bb5884f6f1cdce0099f86b907aa41c970c3c672ac8b9c8352789e103cf3156"}, - {file = "lazy_object_proxy-1.4.3-cp36-cp36m-win32.whl", hash = "sha256:cb2c7c57005a6804ab66f106ceb8482da55f5314b7fcb06551db1edae4ad1531"}, - {file = "lazy_object_proxy-1.4.3-cp36-cp36m-win_amd64.whl", hash = "sha256:8d859b89baf8ef7f8bc6b00aa20316483d67f0b1cbf422f5b4dc56701c8f2ffb"}, - {file = "lazy_object_proxy-1.4.3-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:1be7e4c9f96948003609aa6c974ae59830a6baecc5376c25c92d7d697e684c08"}, - {file = "lazy_object_proxy-1.4.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d74bb8693bf9cf75ac3b47a54d716bbb1a92648d5f781fc799347cfc95952383"}, - {file = "lazy_object_proxy-1.4.3-cp37-cp37m-win32.whl", hash = "sha256:9b15f3f4c0f35727d3a0fba4b770b3c4ebbb1fa907dbcc046a1d2799f3edd142"}, - {file = "lazy_object_proxy-1.4.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9254f4358b9b541e3441b007a0ea0764b9d056afdeafc1a5569eee1cc6c1b9ea"}, - {file = "lazy_object_proxy-1.4.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:a6ae12d08c0bf9909ce12385803a543bfe99b95fe01e752536a60af2b7797c62"}, - {file = "lazy_object_proxy-1.4.3-cp38-cp38-win32.whl", hash = "sha256:5541cada25cd173702dbd99f8e22434105456314462326f06dba3e180f203dfd"}, - {file = "lazy_object_proxy-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:59f79fef100b09564bc2df42ea2d8d21a64fdcda64979c0fa3db7bdaabaf6239"}, -] -livereload = [ - {file = "livereload-2.6.1-py2.py3-none-any.whl", hash = "sha256:78d55f2c268a8823ba499305dcac64e28ddeb9a92571e12d543cd304faf5817b"}, - {file = "livereload-2.6.1.tar.gz", hash = "sha256:89254f78d7529d7ea0a3417d224c34287ebfe266b05e67e51facaf82c27f0f66"}, -] -lunr = [ - {file = "lunr-0.5.6-py2.py3-none-any.whl", hash = "sha256:1208622930c915a07e6f8e8640474357826bad48534c0f57969b6fca9bffc88e"}, - {file = "lunr-0.5.6.tar.gz", hash = "sha256:7be69d7186f65784a4f2adf81e5c58efd6a9921aa95966babcb1f2f2ada75c20"}, -] -markdown = [ - {file = "Markdown-3.2.1-py2.py3-none-any.whl", hash = "sha256:e4795399163109457d4c5af2183fbe6b60326c17cfdf25ce6e7474c6624f725d"}, - {file = "Markdown-3.2.1.tar.gz", hash = "sha256:90fee683eeabe1a92e149f7ba74e5ccdc81cd397bd6c516d93a8da0ef90b6902"}, -] -markupsafe = [ - {file = "MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161"}, - {file = "MarkupSafe-1.1.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7"}, - {file = "MarkupSafe-1.1.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183"}, - {file = "MarkupSafe-1.1.1-cp27-cp27m-win32.whl", hash = "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b"}, - {file = "MarkupSafe-1.1.1-cp27-cp27m-win_amd64.whl", hash = "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e"}, - {file = "MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f"}, - {file = "MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1"}, - {file = "MarkupSafe-1.1.1-cp34-cp34m-macosx_10_6_intel.whl", hash = "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5"}, - {file = "MarkupSafe-1.1.1-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1"}, - {file = "MarkupSafe-1.1.1-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735"}, - {file = "MarkupSafe-1.1.1-cp34-cp34m-win32.whl", hash = "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21"}, - {file = "MarkupSafe-1.1.1-cp34-cp34m-win_amd64.whl", hash = "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235"}, - {file = "MarkupSafe-1.1.1-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b"}, - {file = "MarkupSafe-1.1.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f"}, - {file = "MarkupSafe-1.1.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905"}, - {file = "MarkupSafe-1.1.1-cp35-cp35m-win32.whl", hash = "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1"}, - {file = "MarkupSafe-1.1.1-cp35-cp35m-win_amd64.whl", hash = "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-win32.whl", hash = "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-win32.whl", hash = "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-win32.whl", hash = "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"}, - {file = "MarkupSafe-1.1.1.tar.gz", hash = "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b"}, -] -mccabe = [ - {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, - {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, -] -mkdocs = [ - {file = "mkdocs-1.1-py2.py3-none-any.whl", hash = "sha256:1e385a70aea8a9dedb731aea4fd5f3704b2074801c4f96f06b2920999babda8a"}, - {file = "mkdocs-1.1.tar.gz", hash = "sha256:9243291392f59e20b655e4e46210233453faf97787c2cf72176510e868143174"}, -] -mkdocs-material = [ - {file = "mkdocs-material-4.6.3.tar.gz", hash = "sha256:1d486635b03f5a2ec87325842f7b10c7ae7daa0eef76b185572eece6a6ea212c"}, - {file = "mkdocs_material-4.6.3-py2.py3-none-any.whl", hash = "sha256:7f3afa0a09c07d0b89a6a9755fdb00513aee8f0cec3538bb903325c80f66f444"}, -] -mock = [ - {file = "mock-4.0.2-py3-none-any.whl", hash = "sha256:3f9b2c0196c60d21838f307f5825a7b86b678cedc58ab9e50a8988187b4d81e0"}, - {file = "mock-4.0.2.tar.gz", hash = "sha256:dd33eb70232b6118298d516bbcecd26704689c386594f0f3c4f13867b2c56f72"}, -] -more-itertools = [ - {file = "more-itertools-8.2.0.tar.gz", hash = "sha256:b1ddb932186d8a6ac451e1d95844b382f55e12686d51ca0c68b6f61f2ab7a507"}, - {file = "more_itertools-8.2.0-py3-none-any.whl", hash = "sha256:5dd8bcf33e5f9513ffa06d5ad33d78f31e1931ac9a18f33d37e77a180d393a7c"}, -] -moto = [ - {file = "moto-1.3.14-py2.py3-none-any.whl", hash = "sha256:2b3fa22778504b45715868cad95ad458fdea7227f9005b12e522fc9c2ae0cabc"}, - {file = "moto-1.3.14.tar.gz", hash = "sha256:79aeaeed1592a24d3c488840065a3fcb3f4fa7ba40259e112482454c0e48a03a"}, -] -mypy = [ - {file = "mypy-0.761-cp35-cp35m-macosx_10_6_x86_64.whl", hash = "sha256:7f672d02fffcbace4db2b05369142e0506cdcde20cea0e07c7c2171c4fd11dd6"}, - {file = "mypy-0.761-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:87c556fb85d709dacd4b4cb6167eecc5bbb4f0a9864b69136a0d4640fdc76a36"}, - {file = "mypy-0.761-cp35-cp35m-win_amd64.whl", hash = "sha256:c6d27bd20c3ba60d5b02f20bd28e20091d6286a699174dfad515636cb09b5a72"}, - {file = "mypy-0.761-cp36-cp36m-macosx_10_6_x86_64.whl", hash = "sha256:4b9365ade157794cef9685791032521233729cb00ce76b0ddc78749abea463d2"}, - {file = "mypy-0.761-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:634aef60b4ff0f650d3e59d4374626ca6153fcaff96ec075b215b568e6ee3cb0"}, - {file = "mypy-0.761-cp36-cp36m-win_amd64.whl", hash = "sha256:53ea810ae3f83f9c9b452582261ea859828a9ed666f2e1ca840300b69322c474"}, - {file = "mypy-0.761-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:0a9a45157e532da06fe56adcfef8a74629566b607fa2c1ac0122d1ff995c748a"}, - {file = "mypy-0.761-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:7eadc91af8270455e0d73565b8964da1642fe226665dd5c9560067cd64d56749"}, - {file = "mypy-0.761-cp37-cp37m-win_amd64.whl", hash = "sha256:e2bb577d10d09a2d8822a042a23b8d62bc3b269667c9eb8e60a6edfa000211b1"}, - {file = "mypy-0.761-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c35cae79ceb20d47facfad51f952df16c2ae9f45db6cb38405a3da1cf8fc0a7"}, - {file = "mypy-0.761-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:f97a605d7c8bc2c6d1172c2f0d5a65b24142e11a58de689046e62c2d632ca8c1"}, - {file = "mypy-0.761-cp38-cp38-win_amd64.whl", hash = "sha256:a6bd44efee4dc8c3324c13785a9dc3519b3ee3a92cada42d2b57762b7053b49b"}, - {file = "mypy-0.761-py3-none-any.whl", hash = "sha256:7e396ce53cacd5596ff6d191b47ab0ea18f8e0ec04e15d69728d530e86d4c217"}, - {file = "mypy-0.761.tar.gz", hash = "sha256:85baab8d74ec601e86134afe2bcccd87820f79d2f8d5798c889507d1088287bf"}, + {file = "isort-5.8.0-py3-none-any.whl", hash = "sha256:2bb1680aad211e3c9944dbce1d4ba09a989f04e238296c87fe2139faa26d655d"}, + {file = "isort-5.8.0.tar.gz", hash = "sha256:0a943902919f65c5684ac4e0154b1ad4fac6dcaa5d9f3426b732f1c8b5419be6"}, ] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] -networkx = [ - {file = "networkx-2.4-py3-none-any.whl", hash = "sha256:cdfbf698749a5014bf2ed9db4a07a5295df1d3a53bf80bf3cbd61edf9df05fa1"}, - {file = "networkx-2.4.tar.gz", hash = "sha256:f8f4ff0b6f96e4f9b16af6b84622597b5334bf9cae8cf9b2e42e7985d5c95c64"}, -] -nltk = [ - {file = "nltk-3.4.5.win32.exe", hash = "sha256:a08bdb4b8a1c13de16743068d9eb61c8c71c2e5d642e8e08205c528035843f82"}, - {file = "nltk-3.4.5.zip", hash = "sha256:bed45551259aa2101381bbdd5df37d44ca2669c5c3dad72439fa459b29137d94"}, -] -nose = [ - {file = "nose-1.3.7-py2-none-any.whl", hash = "sha256:dadcddc0aefbf99eea214e0f1232b94f2fa9bd98fa8353711dacb112bfcbbb2a"}, - {file = "nose-1.3.7-py3-none-any.whl", hash = "sha256:9ff7c6cc443f8c51994b34a667bbcf45afd6d945be7477b52e97516fd17c53ac"}, - {file = "nose-1.3.7.tar.gz", hash = "sha256:f1bffef9cbc82628f6e7d7b40d7e255aefaa1adb6a1b1d26c69a8b79e6208a98"}, -] packaging = [ - {file = "packaging-20.3-py2.py3-none-any.whl", hash = "sha256:82f77b9bee21c1bafbf35a84905d604d5d1223801d639cf3ed140bd651c08752"}, - {file = "packaging-20.3.tar.gz", hash = "sha256:3c292b474fda1671ec57d46d739d072bfd495a4f51ad01a055121d81e952b7a3"}, + {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, + {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, ] pathspec = [ - {file = "pathspec-0.7.0-py2.py3-none-any.whl", hash = "sha256:163b0632d4e31cef212976cf57b43d9fd6b0bac6e67c26015d611a647d5e7424"}, - {file = "pathspec-0.7.0.tar.gz", hash = "sha256:562aa70af2e0d434367d9790ad37aed893de47f1693e4201fd1d3dca15d19b96"}, -] -pbr = [ - {file = "pbr-5.4.4-py2.py3-none-any.whl", hash = "sha256:61aa52a0f18b71c5cc58232d2cf8f8d09cd67fcad60b742a60124cb8d6951488"}, - {file = "pbr-5.4.4.tar.gz", hash = "sha256:139d2625547dbfa5fb0b81daebb39601c478c21956dc57e2e07b74450a8c506b"}, -] -pep8 = [ - {file = "pep8-1.7.1-py2.py3-none-any.whl", hash = "sha256:b22cfae5db09833bb9bd7c8463b53e1a9c9b39f12e304a8d0bba729c501827ee"}, - {file = "pep8-1.7.1.tar.gz", hash = "sha256:fe249b52e20498e59e0b5c5256aa52ee99fc295b26ec9eaa85776ffdb9fe6374"}, -] -pkginfo = [ - {file = "pkginfo-1.5.0.1-py2.py3-none-any.whl", hash = "sha256:a6d9e40ca61ad3ebd0b72fbadd4fba16e4c0e4df0428c041e01e06eb6ee71f32"}, - {file = "pkginfo-1.5.0.1.tar.gz", hash = "sha256:7424f2c8511c186cd5424bbf31045b77435b37a8d604990b79d4e70d741148bb"}, + {file = "pathspec-0.8.1-py2.py3-none-any.whl", hash = "sha256:aa0cb481c4041bf52ffa7b0d8fa6cd3e88a2ca4879c533c9153882ee2556790d"}, + {file = "pathspec-0.8.1.tar.gz", hash = "sha256:86379d6b86d75816baba717e64b1a3a3469deb93bb76d613c9ce79edc5cb68fd"}, ] pluggy = [ {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, ] -poyo = [ - {file = "poyo-0.5.0-py2.py3-none-any.whl", hash = "sha256:3e2ca8e33fdc3c411cd101ca395668395dd5dc7ac775b8e809e3def9f9fe041a"}, - {file = "poyo-0.5.0.tar.gz", hash = "sha256:e26956aa780c45f011ca9886f044590e2d8fd8b61db7b1c1cf4e0869f48ed4dd"}, -] py = [ - {file = "py-1.8.1-py2.py3-none-any.whl", hash = "sha256:c20fdd83a5dbc0af9efd622bee9a5564e278f6380fffcacc43ba6f43db2813b0"}, - {file = "py-1.8.1.tar.gz", hash = "sha256:5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa"}, -] -pyasn1 = [ - {file = "pyasn1-0.4.8-py2.4.egg", hash = "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3"}, - {file = "pyasn1-0.4.8-py2.5.egg", hash = "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf"}, - {file = "pyasn1-0.4.8-py2.6.egg", hash = "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00"}, - {file = "pyasn1-0.4.8-py2.7.egg", hash = "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8"}, - {file = "pyasn1-0.4.8-py2.py3-none-any.whl", hash = "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d"}, - {file = "pyasn1-0.4.8-py3.1.egg", hash = "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86"}, - {file = "pyasn1-0.4.8-py3.2.egg", hash = "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7"}, - {file = "pyasn1-0.4.8-py3.3.egg", hash = "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576"}, - {file = "pyasn1-0.4.8-py3.4.egg", hash = "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12"}, - {file = "pyasn1-0.4.8-py3.5.egg", hash = "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2"}, - {file = "pyasn1-0.4.8-py3.6.egg", hash = "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359"}, - {file = "pyasn1-0.4.8-py3.7.egg", hash = "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776"}, - {file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"}, -] -pycodestyle = [ - {file = "pycodestyle-2.5.0-py2.py3-none-any.whl", hash = "sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56"}, - {file = "pycodestyle-2.5.0.tar.gz", hash = "sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c"}, -] -pycparser = [ - {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"}, - {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"}, -] -pydoc-markdown = [ - {file = "pydoc-markdown-2.1.3.tar.gz", hash = "sha256:6f4da1a1f3eaa2ce485833b1c5d250727d0225217718d2b6f640845032c7ff0a"}, -] -pydocstyle = [ - {file = "pydocstyle-5.0.2-py3-none-any.whl", hash = "sha256:da7831660b7355307b32778c4a0dbfb137d89254ef31a2b2978f50fc0b4d7586"}, - {file = "pydocstyle-5.0.2.tar.gz", hash = "sha256:f4f5d210610c2d153fae39093d44224c17429e2ad7da12a8b419aba5c2f614b5"}, -] -pyflakes = [ - {file = "pyflakes-2.1.1-py2.py3-none-any.whl", hash = "sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0"}, - {file = "pyflakes-2.1.1.tar.gz", hash = "sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2"}, -] -pygments = [ - {file = "Pygments-2.6.1-py3-none-any.whl", hash = "sha256:ff7a40b4860b727ab48fad6360eb351cc1b33cbf9b15a0f689ca5353e9463324"}, - {file = "Pygments-2.6.1.tar.gz", hash = "sha256:647344a061c249a3b74e230c739f434d7ea4d8b1d5f3721bc0f3558049b38f44"}, -] -pylint = [ - {file = "pylint-2.4.4-py3-none-any.whl", hash = "sha256:886e6afc935ea2590b462664b161ca9a5e40168ea99e5300935f6591ad467df4"}, - {file = "pylint-2.4.4.tar.gz", hash = "sha256:3db5468ad013380e987410a8d6956226963aed94ecb5f9d3a28acca6d9ac36cd"}, -] -pymdown-extensions = [ - {file = "pymdown-extensions-6.3.tar.gz", hash = "sha256:cb879686a586b22292899771f5e5bc3382808e92aa938f71b550ecdea709419f"}, - {file = "pymdown_extensions-6.3-py2.py3-none-any.whl", hash = "sha256:66fae2683c7a1dac53184f7de57f51f8dad73f9ead2f453e94e85096cb811335"}, + {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"}, + {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, ] pyparsing = [ - {file = "pyparsing-2.4.6-py2.py3-none-any.whl", hash = "sha256:c342dccb5250c08d45fd6f8b4a559613ca603b57498511740e65cd11a2e7dcec"}, - {file = "pyparsing-2.4.6.tar.gz", hash = "sha256:4c830582a84fb022400b85429791bc551f1f4871c33f23e44f353119e92f969f"}, -] -pypiwin32 = [ - {file = "pypiwin32-223-py3-none-any.whl", hash = "sha256:67adf399debc1d5d14dffc1ab5acacb800da569754fafdc576b2a039485aa775"}, - {file = "pypiwin32-223.tar.gz", hash = "sha256:71be40c1fbd28594214ecaecb58e7aa8b708eabfa0125c8a109ebd51edbd776a"}, -] -pyrsistent = [ - {file = "pyrsistent-0.16.0.tar.gz", hash = "sha256:28669905fe725965daa16184933676547c5bb40a5153055a8dee2a4bd7933ad3"}, + {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, + {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, ] pytest = [ - {file = "pytest-5.4.1-py3-none-any.whl", hash = "sha256:0e5b30f5cb04e887b91b1ee519fa3d89049595f428c1db76e73bd7f17b09b172"}, - {file = "pytest-5.4.1.tar.gz", hash = "sha256:84dde37075b8805f3d1f392cc47e38a0e59518fb46a431cfdaf7cf1ce805f970"}, + {file = "pytest-6.2.2-py3-none-any.whl", hash = "sha256:b574b57423e818210672e07ca1fa90aaf194a4f63f3ab909a2c67ebb22913839"}, + {file = "pytest-6.2.2.tar.gz", hash = "sha256:9d1edf9e7d0b84d72ea3dbcdfd22b35fb543a5e8f2a60092dd578936bf63d7f9"}, ] pytest-cov = [ - {file = "pytest-cov-2.8.1.tar.gz", hash = "sha256:cc6742d8bac45070217169f5f72ceee1e0e55b0221f54bcf24845972d3a47f2b"}, - {file = "pytest_cov-2.8.1-py2.py3-none-any.whl", hash = "sha256:cdbdef4f870408ebdbfeb44e63e07eb18bb4619fae852f6e760645fa36172626"}, -] -pytest-isort = [ - {file = "pytest-isort-0.3.1.tar.gz", hash = "sha256:4bfee60dad1870b51700d55a85f5ceda766bd9d3d2878c1bbabee80e61b1be1a"}, - {file = "pytest_isort-0.3.1-py2.py3-none-any.whl", hash = "sha256:3be60e0de277b420ff89303ca6494320c41f7819ffa898756b90ef976e4c636a"}, -] -pytest-sugar = [ - {file = "pytest-sugar-0.9.2.tar.gz", hash = "sha256:fcd87a74b2bce5386d244b49ad60549bfbc4602527797fac167da147983f58ab"}, - {file = "pytest_sugar-0.9.2-py2.py3-none-any.whl", hash = "sha256:26cf8289fe10880cbbc130bd77398c4e6a8b936d8393b116a5c16121d95ab283"}, -] -python-dateutil = [ - {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"}, - {file = "python_dateutil-2.8.1-py2.py3-none-any.whl", hash = "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"}, -] -python-jose = [ - {file = "python-jose-3.1.0.tar.gz", hash = "sha256:8484b7fdb6962e9d242cce7680469ecf92bda95d10bbcbbeb560cacdff3abfce"}, - {file = "python_jose-3.1.0-py2.py3-none-any.whl", hash = "sha256:1ac4caf4bfebd5a70cf5bd82702ed850db69b0b6e1d0ae7368e5f99ac01c9571"}, -] -pytz = [ - {file = "pytz-2019.3-py2.py3-none-any.whl", hash = "sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d"}, - {file = "pytz-2019.3.tar.gz", hash = "sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be"}, + {file = "pytest-cov-2.11.1.tar.gz", hash = "sha256:359952d9d39b9f822d9d29324483e7ba04a3a17dd7d05aa6beb7ea01e359e5f7"}, + {file = "pytest_cov-2.11.1-py2.py3-none-any.whl", hash = "sha256:bdb9fdb0b85a7cc825269a4c56b48ccaa5c7e365054b6038772c32ddcdc969da"}, ] -pywin32 = [ - {file = "pywin32-227-cp27-cp27m-win32.whl", hash = "sha256:371fcc39416d736401f0274dd64c2302728c9e034808e37381b5e1b22be4a6b0"}, - {file = "pywin32-227-cp27-cp27m-win_amd64.whl", hash = "sha256:4cdad3e84191194ea6d0dd1b1b9bdda574ff563177d2adf2b4efec2a244fa116"}, - {file = "pywin32-227-cp35-cp35m-win32.whl", hash = "sha256:f4c5be1a293bae0076d93c88f37ee8da68136744588bc5e2be2f299a34ceb7aa"}, - {file = "pywin32-227-cp35-cp35m-win_amd64.whl", hash = "sha256:a929a4af626e530383a579431b70e512e736e9588106715215bf685a3ea508d4"}, - {file = "pywin32-227-cp36-cp36m-win32.whl", hash = "sha256:300a2db938e98c3e7e2093e4491439e62287d0d493fe07cce110db070b54c0be"}, - {file = "pywin32-227-cp36-cp36m-win_amd64.whl", hash = "sha256:9b31e009564fb95db160f154e2aa195ed66bcc4c058ed72850d047141b36f3a2"}, - {file = "pywin32-227-cp37-cp37m-win32.whl", hash = "sha256:47a3c7551376a865dd8d095a98deba954a98f326c6fe3c72d8726ca6e6b15507"}, - {file = "pywin32-227-cp37-cp37m-win_amd64.whl", hash = "sha256:31f88a89139cb2adc40f8f0e65ee56a8c585f629974f9e07622ba80199057511"}, - {file = "pywin32-227-cp38-cp38-win32.whl", hash = "sha256:7f18199fbf29ca99dff10e1f09451582ae9e372a892ff03a28528a24d55875bc"}, - {file = "pywin32-227-cp38-cp38-win_amd64.whl", hash = "sha256:7c1ae32c489dc012930787f06244426f8356e129184a02c25aef163917ce158e"}, - {file = "pywin32-227-cp39-cp39-win32.whl", hash = "sha256:c054c52ba46e7eb6b7d7dfae4dbd987a1bb48ee86debe3f245a2884ece46e295"}, - {file = "pywin32-227-cp39-cp39-win_amd64.whl", hash = "sha256:f27cec5e7f588c3d1051651830ecc00294f90728d19c3bf6916e6dba93ea357c"}, +pytest-mock = [ + {file = "pytest-mock-3.5.1.tar.gz", hash = "sha256:a1e2aba6af9560d313c642dae7e00a2a12b022b80301d9d7fc8ec6858e1dd9fc"}, + {file = "pytest_mock-3.5.1-py3-none-any.whl", hash = "sha256:379b391cfad22422ea2e252bdfc008edd08509029bcde3c25b2c0bd741e0424e"}, ] -pywin32-ctypes = [ - {file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"}, - {file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"}, +pytest-spec = [ + {file = "pytest-spec-3.1.0.tar.gz", hash = "sha256:5d94926fa60b1c6019b7b62ee5c8d30f18b25b789c548751986c8fed30e47f08"}, + {file = "pytest_spec-3.1.0-py2.py3-none-any.whl", hash = "sha256:5e1099c28478368218068a3729f255f0681f00bb0b5e340b7f174b551c78fef6"}, ] -pyyaml = [ - {file = "PyYAML-5.3.1-cp27-cp27m-win32.whl", hash = "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f"}, - {file = "PyYAML-5.3.1-cp27-cp27m-win_amd64.whl", hash = "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76"}, - {file = "PyYAML-5.3.1-cp35-cp35m-win32.whl", hash = "sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2"}, - {file = "PyYAML-5.3.1-cp35-cp35m-win_amd64.whl", hash = "sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c"}, - {file = "PyYAML-5.3.1-cp36-cp36m-win32.whl", hash = "sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2"}, - {file = "PyYAML-5.3.1-cp36-cp36m-win_amd64.whl", hash = "sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648"}, - {file = "PyYAML-5.3.1-cp37-cp37m-win32.whl", hash = "sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a"}, - {file = "PyYAML-5.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf"}, - {file = "PyYAML-5.3.1-cp38-cp38-win32.whl", hash = "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97"}, - {file = "PyYAML-5.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee"}, - {file = "PyYAML-5.3.1.tar.gz", hash = "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d"}, +pytest-testmon = [ + {file = "pytest-testmon-1.1.0.tar.gz", hash = "sha256:f88a53d28f89836509732e9dee611d66c61f5b8217201bb822a0456f2c323d19"}, ] -randomize = [ - {file = "randomize-0.14-py2.py3-none-any.whl", hash = "sha256:79c72c1465060e7d22d8fa147fa0452550db83bf0bcf8c0b0694277ebc6f6ff6"}, - {file = "randomize-0.14.tar.gz", hash = "sha256:fe977435ed8f9786c891a0299c99a710751b748d4ddc23ff85fb5eba73983b6b"}, +pytest-watch = [ + {file = "pytest-watch-4.2.0.tar.gz", hash = "sha256:06136f03d5b361718b8d0d234042f7b2f203910d8568f63df2f866b547b3d4b9"}, ] -readme-renderer = [ - {file = "readme_renderer-25.0-py2.py3-none-any.whl", hash = "sha256:1b6d8dd1673a0b293766b4106af766b6eff3654605f9c4f239e65de6076bc222"}, - {file = "readme_renderer-25.0.tar.gz", hash = "sha256:e67d64242f0174a63c3b727801a2fff4c1f38ebe5d71d95ff7ece081945a6cd4"}, +python-dateutil = [ + {file = "python-dateutil-2.5.3.tar.gz", hash = "sha256:1408fdb07c6a1fa9997567ce3fcee6a337b39a503d80699e0f213de4aa4b32ed"}, + {file = "python-dateutil-2.5.3.zip", hash = "sha256:9d94861f04ce14f9a3d835206067c889b8f1244f1415035dadcf9c10066adf04"}, + {file = "python_dateutil-2.5.3-py2.py3-none-any.whl", hash = "sha256:598499a75be2e5e18a66f12c00dd47a069de24794effeda4228bfc760f44f527"}, ] regex = [ - {file = "regex-2020.2.20-cp27-cp27m-win32.whl", hash = "sha256:99272d6b6a68c7ae4391908fc15f6b8c9a6c345a46b632d7fdb7ef6c883a2bbb"}, - {file = "regex-2020.2.20-cp27-cp27m-win_amd64.whl", hash = "sha256:974535648f31c2b712a6b2595969f8ab370834080e00ab24e5dbb9d19b8bfb74"}, - {file = "regex-2020.2.20-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5de40649d4f88a15c9489ed37f88f053c15400257eeb18425ac7ed0a4e119400"}, - {file = "regex-2020.2.20-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:82469a0c1330a4beb3d42568f82dffa32226ced006e0b063719468dcd40ffdf0"}, - {file = "regex-2020.2.20-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d58a4fa7910102500722defbde6e2816b0372a4fcc85c7e239323767c74f5cbc"}, - {file = "regex-2020.2.20-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:f1ac2dc65105a53c1c2d72b1d3e98c2464a133b4067a51a3d2477b28449709a0"}, - {file = "regex-2020.2.20-cp36-cp36m-win32.whl", hash = "sha256:8c2b7fa4d72781577ac45ab658da44c7518e6d96e2a50d04ecb0fd8f28b21d69"}, - {file = "regex-2020.2.20-cp36-cp36m-win_amd64.whl", hash = "sha256:269f0c5ff23639316b29f31df199f401e4cb87529eafff0c76828071635d417b"}, - {file = "regex-2020.2.20-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:bed7986547ce54d230fd8721aba6fd19459cdc6d315497b98686d0416efaff4e"}, - {file = "regex-2020.2.20-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:046e83a8b160aff37e7034139a336b660b01dbfe58706f9d73f5cdc6b3460242"}, - {file = "regex-2020.2.20-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:b33ebcd0222c1d77e61dbcd04a9fd139359bded86803063d3d2d197b796c63ce"}, - {file = "regex-2020.2.20-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:bba52d72e16a554d1894a0cc74041da50eea99a8483e591a9edf1025a66843ab"}, - {file = "regex-2020.2.20-cp37-cp37m-win32.whl", hash = "sha256:01b2d70cbaed11f72e57c1cfbaca71b02e3b98f739ce33f5f26f71859ad90431"}, - {file = "regex-2020.2.20-cp37-cp37m-win_amd64.whl", hash = "sha256:113309e819634f499d0006f6200700c8209a2a8bf6bd1bdc863a4d9d6776a5d1"}, - {file = "regex-2020.2.20-cp38-cp38-manylinux1_i686.whl", hash = "sha256:25f4ce26b68425b80a233ce7b6218743c71cf7297dbe02feab1d711a2bf90045"}, - {file = "regex-2020.2.20-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9b64a4cc825ec4df262050c17e18f60252cdd94742b4ba1286bcfe481f1c0f26"}, - {file = "regex-2020.2.20-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:9ff16d994309b26a1cdf666a6309c1ef51ad4f72f99d3392bcd7b7139577a1f2"}, - {file = "regex-2020.2.20-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:c7f58a0e0e13fb44623b65b01052dae8e820ed9b8b654bb6296bc9c41f571b70"}, - {file = "regex-2020.2.20-cp38-cp38-win32.whl", hash = "sha256:200539b5124bc4721247a823a47d116a7a23e62cc6695744e3eb5454a8888e6d"}, - {file = "regex-2020.2.20-cp38-cp38-win_amd64.whl", hash = "sha256:7f78f963e62a61e294adb6ff5db901b629ef78cb2a1cfce3cf4eeba80c1c67aa"}, - {file = "regex-2020.2.20.tar.gz", hash = "sha256:9e9624440d754733eddbcd4614378c18713d2d9d0dc647cf9c72f64e39671be5"}, -] -requests = [ - {file = "requests-2.23.0-py2.py3-none-any.whl", hash = "sha256:43999036bfa82904b6af1d99e4882b560e5e2c68e5c4b0aa03b655f3d7d73fee"}, - {file = "requests-2.23.0.tar.gz", hash = "sha256:b3f43d496c6daba4493e7c431722aeb7dbc6288f52a6e04e7b6023b0247817e6"}, -] -requests-toolbelt = [ - {file = "requests-toolbelt-0.9.1.tar.gz", hash = "sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0"}, - {file = "requests_toolbelt-0.9.1-py2.py3-none-any.whl", hash = "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f"}, -] -responses = [ - {file = "responses-0.10.12-py2.py3-none-any.whl", hash = "sha256:0474ce3c897fbcc1aef286117c93499882d5c440f06a805947e4b1cb5ab3d474"}, - {file = "responses-0.10.12.tar.gz", hash = "sha256:f83613479a021e233e82d52ffb3e2e0e2836d24b0cc88a0fa31978789f78d0e5"}, -] -rsa = [ - {file = "rsa-4.0-py2.py3-none-any.whl", hash = "sha256:14ba45700ff1ec9eeb206a2ce76b32814958a98e372006c8fb76ba820211be66"}, - {file = "rsa-4.0.tar.gz", hash = "sha256:1a836406405730121ae9823e19c6e806c62bbad73f890574fff50efa4122c487"}, -] -s3transfer = [ - {file = "s3transfer-0.3.3-py2.py3-none-any.whl", hash = "sha256:2482b4259524933a022d59da830f51bd746db62f047d6eb213f2f8855dcb8a13"}, - {file = "s3transfer-0.3.3.tar.gz", hash = "sha256:921a37e2aefc64145e7b73d50c71bb4f26f46e4c9f414dc648c6245ff92cf7db"}, -] -secretstorage = [ - {file = "SecretStorage-3.1.2-py3-none-any.whl", hash = "sha256:b5ec909dde94d4ae2fa26af7c089036997030f0cf0a5cb372b4cccabd81c143b"}, - {file = "SecretStorage-3.1.2.tar.gz", hash = "sha256:15da8a989b65498e29be338b3b279965f1b8f09b9668bd8010da183024c8bff6"}, + {file = "regex-2021.3.17-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b97ec5d299c10d96617cc851b2e0f81ba5d9d6248413cd374ef7f3a8871ee4a6"}, + {file = "regex-2021.3.17-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:cb4ee827857a5ad9b8ae34d3c8cc51151cb4a3fe082c12ec20ec73e63cc7c6f0"}, + {file = "regex-2021.3.17-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:633497504e2a485a70a3268d4fc403fe3063a50a50eed1039083e9471ad0101c"}, + {file = "regex-2021.3.17-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:a59a2ee329b3de764b21495d78c92ab00b4ea79acef0f7ae8c1067f773570afa"}, + {file = "regex-2021.3.17-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:f85d6f41e34f6a2d1607e312820971872944f1661a73d33e1e82d35ea3305e14"}, + {file = "regex-2021.3.17-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:4651f839dbde0816798e698626af6a2469eee6d9964824bb5386091255a1694f"}, + {file = "regex-2021.3.17-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:39c44532d0e4f1639a89e52355b949573e1e2c5116106a395642cbbae0ff9bcd"}, + {file = "regex-2021.3.17-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:3d9a7e215e02bd7646a91fb8bcba30bc55fd42a719d6b35cf80e5bae31d9134e"}, + {file = "regex-2021.3.17-cp36-cp36m-win32.whl", hash = "sha256:159fac1a4731409c830d32913f13f68346d6b8e39650ed5d704a9ce2f9ef9cb3"}, + {file = "regex-2021.3.17-cp36-cp36m-win_amd64.whl", hash = "sha256:13f50969028e81765ed2a1c5fcfdc246c245cf8d47986d5172e82ab1a0c42ee5"}, + {file = "regex-2021.3.17-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b9d8d286c53fe0cbc6d20bf3d583cabcd1499d89034524e3b94c93a5ab85ca90"}, + {file = "regex-2021.3.17-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:201e2619a77b21a7780580ab7b5ce43835e242d3e20fef50f66a8df0542e437f"}, + {file = "regex-2021.3.17-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d47d359545b0ccad29d572ecd52c9da945de7cd6cf9c0cfcb0269f76d3555689"}, + {file = "regex-2021.3.17-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:ea2f41445852c660ba7c3ebf7d70b3779b20d9ca8ba54485a17740db49f46932"}, + {file = "regex-2021.3.17-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:486a5f8e11e1f5bbfcad87f7c7745eb14796642323e7e1829a331f87a713daaa"}, + {file = "regex-2021.3.17-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:18e25e0afe1cf0f62781a150c1454b2113785401ba285c745acf10c8ca8917df"}, + {file = "regex-2021.3.17-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:a2ee026f4156789df8644d23ef423e6194fad0bc53575534101bb1de5d67e8ce"}, + {file = "regex-2021.3.17-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:4c0788010a93ace8a174d73e7c6c9d3e6e3b7ad99a453c8ee8c975ddd9965643"}, + {file = "regex-2021.3.17-cp37-cp37m-win32.whl", hash = "sha256:575a832e09d237ae5fedb825a7a5bc6a116090dd57d6417d4f3b75121c73e3be"}, + {file = "regex-2021.3.17-cp37-cp37m-win_amd64.whl", hash = "sha256:8e65e3e4c6feadf6770e2ad89ad3deb524bcb03d8dc679f381d0568c024e0deb"}, + {file = "regex-2021.3.17-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a0df9a0ad2aad49ea3c7f65edd2ffb3d5c59589b85992a6006354f6fb109bb18"}, + {file = "regex-2021.3.17-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b98bc9db003f1079caf07b610377ed1ac2e2c11acc2bea4892e28cc5b509d8d5"}, + {file = "regex-2021.3.17-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:808404898e9a765e4058bf3d7607d0629000e0a14a6782ccbb089296b76fa8fe"}, + {file = "regex-2021.3.17-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:5770a51180d85ea468234bc7987f5597803a4c3d7463e7323322fe4a1b181578"}, + {file = "regex-2021.3.17-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:976a54d44fd043d958a69b18705a910a8376196c6b6ee5f2596ffc11bff4420d"}, + {file = "regex-2021.3.17-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:63f3ca8451e5ff7133ffbec9eda641aeab2001be1a01878990f6c87e3c44b9d5"}, + {file = "regex-2021.3.17-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:bcd945175c29a672f13fce13a11893556cd440e37c1b643d6eeab1988c8b209c"}, + {file = "regex-2021.3.17-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:3d9356add82cff75413bec360c1eca3e58db4a9f5dafa1f19650958a81e3249d"}, + {file = "regex-2021.3.17-cp38-cp38-win32.whl", hash = "sha256:f5d0c921c99297354cecc5a416ee4280bd3f20fd81b9fb671ca6be71499c3fdf"}, + {file = "regex-2021.3.17-cp38-cp38-win_amd64.whl", hash = "sha256:14de88eda0976020528efc92d0a1f8830e2fb0de2ae6005a6fc4e062553031fa"}, + {file = "regex-2021.3.17-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4c2e364491406b7888c2ad4428245fc56c327e34a5dfe58fd40df272b3c3dab3"}, + {file = "regex-2021.3.17-cp39-cp39-manylinux1_i686.whl", hash = "sha256:8bd4f91f3fb1c9b1380d6894bd5b4a519409135bec14c0c80151e58394a4e88a"}, + {file = "regex-2021.3.17-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:882f53afe31ef0425b405a3f601c0009b44206ea7f55ee1c606aad3cc213a52c"}, + {file = "regex-2021.3.17-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:07ef35301b4484bce843831e7039a84e19d8d33b3f8b2f9aab86c376813d0139"}, + {file = "regex-2021.3.17-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:360a01b5fa2ad35b3113ae0c07fb544ad180603fa3b1f074f52d98c1096fa15e"}, + {file = "regex-2021.3.17-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:709f65bb2fa9825f09892617d01246002097f8f9b6dde8d1bb4083cf554701ba"}, + {file = "regex-2021.3.17-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:c66221e947d7207457f8b6f42b12f613b09efa9669f65a587a2a71f6a0e4d106"}, + {file = "regex-2021.3.17-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:c782da0e45aff131f0bed6e66fbcfa589ff2862fc719b83a88640daa01a5aff7"}, + {file = "regex-2021.3.17-cp39-cp39-win32.whl", hash = "sha256:dc9963aacb7da5177e40874585d7407c0f93fb9d7518ec58b86e562f633f36cd"}, + {file = "regex-2021.3.17-cp39-cp39-win_amd64.whl", hash = "sha256:a0d04128e005142260de3733591ddf476e4902c0c23c1af237d9acf3c96e1b38"}, + {file = "regex-2021.3.17.tar.gz", hash = "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68"}, ] six = [ - {file = "six-1.14.0-py2.py3-none-any.whl", hash = "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c"}, - {file = "six-1.14.0.tar.gz", hash = "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a"}, -] -smmap = [ - {file = "smmap-3.0.1-py2.py3-none-any.whl", hash = "sha256:5fead614cf2de17ee0707a8c6a5f2aa5a2fc6c698c70993ba42f515485ffda78"}, - {file = "smmap-3.0.1.tar.gz", hash = "sha256:171484fe62793e3626c8b05dd752eb2ca01854b0c55a1efc0dc4210fccb65446"}, -] -snowballstemmer = [ - {file = "snowballstemmer-2.0.0-py2.py3-none-any.whl", hash = "sha256:209f257d7533fdb3cb73bdbd24f436239ca3b2fa67d56f6ff88e86be08cc5ef0"}, - {file = "snowballstemmer-2.0.0.tar.gz", hash = "sha256:df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52"}, -] -sshpubkeys = [ - {file = "sshpubkeys-3.1.0-py2.py3-none-any.whl", hash = "sha256:9f73d51c2ef1e68cd7bde0825df29b3c6ec89f4ce24ebca3bf9eaa4a23a284db"}, - {file = "sshpubkeys-3.1.0.tar.gz", hash = "sha256:b388399caeeccdc145f06fd0d2665eeecc545385c60b55c282a15a022215af80"}, -] -stevedore = [ - {file = "stevedore-1.32.0-py2.py3-none-any.whl", hash = "sha256:a4e7dc759fb0f2e3e2f7d8ffe2358c19d45b9b8297f393ef1256858d82f69c9b"}, - {file = "stevedore-1.32.0.tar.gz", hash = "sha256:18afaf1d623af5950cc0f7e75e70f917784c73b652a34a12d90b309451b5500b"}, -] -termcolor = [ - {file = "termcolor-1.1.0.tar.gz", hash = "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"}, + {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, + {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, ] toml = [ - {file = "toml-0.10.0-py2.7.egg", hash = "sha256:f1db651f9657708513243e61e6cc67d101a39bad662eaa9b5546f789338e07a3"}, - {file = "toml-0.10.0-py2.py3-none-any.whl", hash = "sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e"}, - {file = "toml-0.10.0.tar.gz", hash = "sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c"}, -] -tornado = [ - {file = "tornado-6.0.4-cp35-cp35m-win32.whl", hash = "sha256:5217e601700f24e966ddab689f90b7ea4bd91ff3357c3600fa1045e26d68e55d"}, - {file = "tornado-6.0.4-cp35-cp35m-win_amd64.whl", hash = "sha256:c98232a3ac391f5faea6821b53db8db461157baa788f5d6222a193e9456e1740"}, - {file = "tornado-6.0.4-cp36-cp36m-win32.whl", hash = "sha256:5f6a07e62e799be5d2330e68d808c8ac41d4a259b9cea61da4101b83cb5dc673"}, - {file = "tornado-6.0.4-cp36-cp36m-win_amd64.whl", hash = "sha256:c952975c8ba74f546ae6de2e226ab3cc3cc11ae47baf607459a6728585bb542a"}, - {file = "tornado-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:2c027eb2a393d964b22b5c154d1a23a5f8727db6fda837118a776b29e2b8ebc6"}, - {file = "tornado-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:5618f72e947533832cbc3dec54e1dffc1747a5cb17d1fd91577ed14fa0dc081b"}, - {file = "tornado-6.0.4-cp38-cp38-win32.whl", hash = "sha256:22aed82c2ea340c3771e3babc5ef220272f6fd06b5108a53b4976d0d722bcd52"}, - {file = "tornado-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:c58d56003daf1b616336781b26d184023ea4af13ae143d9dda65e31e534940b9"}, - {file = "tornado-6.0.4.tar.gz", hash = "sha256:0fe2d45ba43b00a41cd73f8be321a44936dc1aba233dee979f17a042b83eb6dc"}, -] -tqdm = [ - {file = "tqdm-4.43.0-py2.py3-none-any.whl", hash = "sha256:0d8b5afb66e23d80433102e9bd8b5c8b65d34c2a2255b2de58d97bd2ea8170fd"}, - {file = "tqdm-4.43.0.tar.gz", hash = "sha256:f35fb121bafa030bd94e74fcfd44f3c2830039a2ddef7fc87ef1c2d205237b24"}, -] -twine = [ - {file = "twine-3.1.1-py3-none-any.whl", hash = "sha256:c1af8ca391e43b0a06bbc155f7f67db0bf0d19d284bfc88d1675da497a946124"}, - {file = "twine-3.1.1.tar.gz", hash = "sha256:d561a5e511f70275e5a485a6275ff61851c16ffcb3a95a602189161112d9f160"}, + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] typed-ast = [ - {file = "typed_ast-1.4.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3"}, - {file = "typed_ast-1.4.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:aaee9905aee35ba5905cfb3c62f3e83b3bec7b39413f0a7f19be4e547ea01ebb"}, - {file = "typed_ast-1.4.1-cp35-cp35m-win32.whl", hash = "sha256:0c2c07682d61a629b68433afb159376e24e5b2fd4641d35424e462169c0a7919"}, - {file = "typed_ast-1.4.1-cp35-cp35m-win_amd64.whl", hash = "sha256:4083861b0aa07990b619bd7ddc365eb7fa4b817e99cf5f8d9cf21a42780f6e01"}, - {file = "typed_ast-1.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:269151951236b0f9a6f04015a9004084a5ab0d5f19b57de779f908621e7d8b75"}, - {file = "typed_ast-1.4.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:24995c843eb0ad11a4527b026b4dde3da70e1f2d8806c99b7b4a7cf491612652"}, - {file = "typed_ast-1.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7"}, - {file = "typed_ast-1.4.1-cp36-cp36m-win32.whl", hash = "sha256:4e3e5da80ccbebfff202a67bf900d081906c358ccc3d5e3c8aea42fdfdfd51c1"}, - {file = "typed_ast-1.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:249862707802d40f7f29f6e1aad8d84b5aa9e44552d2cc17384b209f091276aa"}, - {file = "typed_ast-1.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8ce678dbaf790dbdb3eba24056d5364fb45944f33553dd5869b7580cdbb83614"}, - {file = "typed_ast-1.4.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:c9e348e02e4d2b4a8b2eedb48210430658df6951fa484e59de33ff773fbd4b41"}, - {file = "typed_ast-1.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:bcd3b13b56ea479b3650b82cabd6b5343a625b0ced5429e4ccad28a8973f301b"}, - {file = "typed_ast-1.4.1-cp37-cp37m-win32.whl", hash = "sha256:d5d33e9e7af3b34a40dc05f498939f0ebf187f07c385fd58d591c533ad8562fe"}, - {file = "typed_ast-1.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355"}, - {file = "typed_ast-1.4.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:d205b1b46085271b4e15f670058ce182bd1199e56b317bf2ec004b6a44f911f6"}, - {file = "typed_ast-1.4.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:6daac9731f172c2a22ade6ed0c00197ee7cc1221aa84cfdf9c31defeb059a907"}, - {file = "typed_ast-1.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:498b0f36cc7054c1fead3d7fc59d2150f4d5c6c56ba7fb150c013fbc683a8d2d"}, - {file = "typed_ast-1.4.1-cp38-cp38-win32.whl", hash = "sha256:715ff2f2df46121071622063fc7543d9b1fd19ebfc4f5c8895af64a77a8c852c"}, - {file = "typed_ast-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4"}, - {file = "typed_ast-1.4.1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:d43943ef777f9a1c42bf4e552ba23ac77a6351de620aa9acf64ad54933ad4d34"}, - {file = "typed_ast-1.4.1.tar.gz", hash = "sha256:8c8aaad94455178e3187ab22c8b01a3837f8ee50e09cf31f1ba129eb293ec30b"}, + {file = "typed_ast-1.4.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:7703620125e4fb79b64aa52427ec192822e9f45d37d4b6625ab37ef403e1df70"}, + {file = "typed_ast-1.4.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:c9aadc4924d4b5799112837b226160428524a9a45f830e0d0f184b19e4090487"}, + {file = "typed_ast-1.4.2-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:9ec45db0c766f196ae629e509f059ff05fc3148f9ffd28f3cfe75d4afb485412"}, + {file = "typed_ast-1.4.2-cp35-cp35m-win32.whl", hash = "sha256:85f95aa97a35bdb2f2f7d10ec5bbdac0aeb9dafdaf88e17492da0504de2e6400"}, + {file = "typed_ast-1.4.2-cp35-cp35m-win_amd64.whl", hash = "sha256:9044ef2df88d7f33692ae3f18d3be63dec69c4fb1b5a4a9ac950f9b4ba571606"}, + {file = "typed_ast-1.4.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c1c876fd795b36126f773db9cbb393f19808edd2637e00fd6caba0e25f2c7b64"}, + {file = "typed_ast-1.4.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5dcfc2e264bd8a1db8b11a892bd1647154ce03eeba94b461effe68790d8b8e07"}, + {file = "typed_ast-1.4.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:8db0e856712f79c45956da0c9a40ca4246abc3485ae0d7ecc86a20f5e4c09abc"}, + {file = "typed_ast-1.4.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:d003156bb6a59cda9050e983441b7fa2487f7800d76bdc065566b7d728b4581a"}, + {file = "typed_ast-1.4.2-cp36-cp36m-win32.whl", hash = "sha256:4c790331247081ea7c632a76d5b2a265e6d325ecd3179d06e9cf8d46d90dd151"}, + {file = "typed_ast-1.4.2-cp36-cp36m-win_amd64.whl", hash = "sha256:d175297e9533d8d37437abc14e8a83cbc68af93cc9c1c59c2c292ec59a0697a3"}, + {file = "typed_ast-1.4.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf54cfa843f297991b7388c281cb3855d911137223c6b6d2dd82a47ae5125a41"}, + {file = "typed_ast-1.4.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:b4fcdcfa302538f70929eb7b392f536a237cbe2ed9cba88e3bf5027b39f5f77f"}, + {file = "typed_ast-1.4.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:987f15737aba2ab5f3928c617ccf1ce412e2e321c77ab16ca5a293e7bbffd581"}, + {file = "typed_ast-1.4.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:37f48d46d733d57cc70fd5f30572d11ab8ed92da6e6b28e024e4a3edfb456e37"}, + {file = "typed_ast-1.4.2-cp37-cp37m-win32.whl", hash = "sha256:36d829b31ab67d6fcb30e185ec996e1f72b892255a745d3a82138c97d21ed1cd"}, + {file = "typed_ast-1.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:8368f83e93c7156ccd40e49a783a6a6850ca25b556c0fa0240ed0f659d2fe496"}, + {file = "typed_ast-1.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:963c80b583b0661918718b095e02303d8078950b26cc00b5e5ea9ababe0de1fc"}, + {file = "typed_ast-1.4.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e683e409e5c45d5c9082dc1daf13f6374300806240719f95dc783d1fc942af10"}, + {file = "typed_ast-1.4.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:84aa6223d71012c68d577c83f4e7db50d11d6b1399a9c779046d75e24bed74ea"}, + {file = "typed_ast-1.4.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:a38878a223bdd37c9709d07cd357bb79f4c760b29210e14ad0fb395294583787"}, + {file = "typed_ast-1.4.2-cp38-cp38-win32.whl", hash = "sha256:a2c927c49f2029291fbabd673d51a2180038f8cd5a5b2f290f78c4516be48be2"}, + {file = "typed_ast-1.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:c0c74e5579af4b977c8b932f40a5464764b2f86681327410aa028a22d2f54937"}, + {file = "typed_ast-1.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:07d49388d5bf7e863f7fa2f124b1b1d89d8aa0e2f7812faff0a5658c01c59aa1"}, + {file = "typed_ast-1.4.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:240296b27397e4e37874abb1df2a608a92df85cf3e2a04d0d4d61055c8305ba6"}, + {file = "typed_ast-1.4.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:d746a437cdbca200622385305aedd9aef68e8a645e385cc483bdc5e488f07166"}, + {file = "typed_ast-1.4.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:14bf1522cdee369e8f5581238edac09150c765ec1cb33615855889cf33dcb92d"}, + {file = "typed_ast-1.4.2-cp39-cp39-win32.whl", hash = "sha256:cc7b98bf58167b7f2db91a4327da24fb93368838eb84a44c472283778fc2446b"}, + {file = "typed_ast-1.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:7147e2a76c75f0f64c4319886e7639e490fee87c9d25cb1d4faef1d8cf83a440"}, + {file = "typed_ast-1.4.2.tar.gz", hash = "sha256:9fc0b3cb5d1720e7141d103cf4819aea239f7d136acf9ee4a69b047b7986175a"}, ] typing-extensions = [ - {file = "typing_extensions-3.7.4.1-py2-none-any.whl", hash = "sha256:910f4656f54de5993ad9304959ce9bb903f90aadc7c67a0bef07e678014e892d"}, - {file = "typing_extensions-3.7.4.1-py3-none-any.whl", hash = "sha256:cf8b63fedea4d89bab840ecbb93e75578af28f76f66c35889bd7065f5af88575"}, - {file = "typing_extensions-3.7.4.1.tar.gz", hash = "sha256:091ecc894d5e908ac75209f10d5b4f118fbdb2eb1ede6a63544054bb1edb41f2"}, + {file = "typing_extensions-3.7.4.3-py2-none-any.whl", hash = "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f"}, + {file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"}, + {file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"}, ] urllib3 = [ - {file = "urllib3-1.25.8-py2.py3-none-any.whl", hash = "sha256:2f3db8b19923a873b3e5256dc9c2dedfa883e33d87c690d9c7913e1f40673cdc"}, - {file = "urllib3-1.25.8.tar.gz", hash = "sha256:87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc"}, -] -wcwidth = [ - {file = "wcwidth-0.1.9-py2.py3-none-any.whl", hash = "sha256:cafe2186b3c009a04067022ce1dcd79cb38d8d65ee4f4791b8888d6599d1bbe1"}, - {file = "wcwidth-0.1.9.tar.gz", hash = "sha256:ee73862862a156bf77ff92b09034fc4825dd3af9cf81bc5b360668d425f3c5f1"}, -] -webencodings = [ - {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, - {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, -] -websocket-client = [ - {file = "websocket_client-0.57.0-py2.py3-none-any.whl", hash = "sha256:0fc45c961324d79c781bab301359d5a1b00b13ad1b10415a4780229ef71a5549"}, - {file = "websocket_client-0.57.0.tar.gz", hash = "sha256:d735b91d6d1692a6a181f2a8c9e0238e5f6373356f561bb9dc4c7af36f452010"}, -] -werkzeug = [ - {file = "Werkzeug-1.0.0-py2.py3-none-any.whl", hash = "sha256:6dc65cf9091cf750012f56f2cad759fa9e879f511b5ff8685e456b4e3bf90d16"}, - {file = "Werkzeug-1.0.0.tar.gz", hash = "sha256:169ba8a33788476292d04186ab33b01d6add475033dfc07215e6d219cc077096"}, -] -whichcraft = [ - {file = "whichcraft-0.6.1-py2.py3-none-any.whl", hash = "sha256:deda9266fbb22b8c64fd3ee45c050d61139cd87419765f588e37c8d23e236dd9"}, - {file = "whichcraft-0.6.1.tar.gz", hash = "sha256:acdbb91b63d6a15efbd6430d1d7b2d36e44a71697e93e19b7ded477afd9fce87"}, -] -wrapt = [ - {file = "wrapt-1.11.2.tar.gz", hash = "sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1"}, -] -xmltodict = [ - {file = "xmltodict-0.12.0-py2.py3-none-any.whl", hash = "sha256:8bbcb45cc982f48b2ca8fe7e7827c5d792f217ecf1792626f808bf41c3b86051"}, - {file = "xmltodict-0.12.0.tar.gz", hash = "sha256:50d8c638ed7ecb88d90561beedbf720c9b4e851a9fa6c47ebd64e99d166d8a21"}, -] -yapf = [ - {file = "yapf-0.29.0-py2.py3-none-any.whl", hash = "sha256:cad8a272c6001b3401de3278238fdc54997b6c2e56baa751788915f879a52fca"}, - {file = "yapf-0.29.0.tar.gz", hash = "sha256:712e23c468506bf12cadd10169f852572ecc61b266258422d45aaf4ad7ef43de"}, -] -zipp = [ - {file = "zipp-3.1.0-py3-none-any.whl", hash = "sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b"}, - {file = "zipp-3.1.0.tar.gz", hash = "sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96"}, + {file = "urllib3-1.26.4-py2.py3-none-any.whl", hash = "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df"}, + {file = "urllib3-1.26.4.tar.gz", hash = "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937"}, +] +watchdog = [ + {file = "watchdog-2.0.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:1f518a6940cde8720b8826a705c164e6b9bd6cf8c00f14269ffac51e017e06ec"}, + {file = "watchdog-2.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:74528772516228f6a015a647027057939ff0b695a0b864cb3037e8e1aabc7ca0"}, + {file = "watchdog-2.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1cd715c4fb803581ded8943f39a51f21c17375d009ca9e3398d6b20638863a70"}, + {file = "watchdog-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:41b1a773f364f232b5bc184688e8d60451745d9e0971ac60c648bd47be8f4733"}, + {file = "watchdog-2.0.2-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:035f4816daf3c62e03503c267620f3aa8fc7472df85ff3ef1e0c100ea1ed2744"}, + {file = "watchdog-2.0.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e0114e48ee981b38e328eaa0d5a625c7b4fc144b8dc7f7637749d6b5f7fefb0e"}, + {file = "watchdog-2.0.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:d2fcbc15772a82cd139c803a513c45b0fbc72a10a8a34dc2a8b429110b6f1236"}, + {file = "watchdog-2.0.2-py3-none-manylinux2014_armv7l.whl", hash = "sha256:adda34bfe6db05485c1dfcd98232bdec385f991fe16358750c2163473eefb985"}, + {file = "watchdog-2.0.2-py3-none-manylinux2014_i686.whl", hash = "sha256:a412b1914e27f67b0a10e1ee19b5d035a9f7c115a062bbbd640653d9820ba4c8"}, + {file = "watchdog-2.0.2-py3-none-manylinux2014_ppc64.whl", hash = "sha256:89102465764e453609463cf620e744da1b0aa1f9f321b05961e2e7e15b3c9d8b"}, + {file = "watchdog-2.0.2-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:3e933f3567c4521dd1a5d59fd54a522cae90bebcbeb8b74b84a2f33c90f08388"}, + {file = "watchdog-2.0.2-py3-none-manylinux2014_s390x.whl", hash = "sha256:19675b8d1f00dabe74a0e66d87980623250d9360a21612e8c27b70a4b214ceeb"}, + {file = "watchdog-2.0.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d54e187b76053982180532cb7fd31152201c438b348c456f699929f8a89e786d"}, + {file = "watchdog-2.0.2-py3-none-win32.whl", hash = "sha256:13c9ff58508dce55ba416eb0ef7af5aa5858558f2ec51112f099fd03503b670b"}, + {file = "watchdog-2.0.2-py3-none-win_amd64.whl", hash = "sha256:0f7e9de9ba84af15e9e9fc29c3b13c972daa4d2b11de29aa86b26a26bc877c06"}, + {file = "watchdog-2.0.2-py3-none-win_ia64.whl", hash = "sha256:ac6adbdf32e1d180574f9d0819e80259ae48e68727e80c3d950ed5a023714c3e"}, + {file = "watchdog-2.0.2.tar.gz", hash = "sha256:532fedd993e75554671faa36cd04c580ced3fae084254a779afbbd8aaf00566b"}, ] diff --git a/pydocmd.yml b/pydocmd.yml deleted file mode 100644 index 7cce8e07b..000000000 --- a/pydocmd.yml +++ /dev/null @@ -1,158 +0,0 @@ -site_name: "CloudEndure Python Client and CLI" -repo_name: '2ndWatch/cloudendure-python' -repo_url: 'https://github.com/2ndWatch/cloudendure-python' - -generate: - - code/cloudendure/api.md: - - cloudendure.api++ - - code/cloudendure/cloudendure.md: - - cloudendure.cloudendure++ - - code/cloudendure/config.md: - - cloudendure.config++ - - code/cloudendure/constants.md: - - cloudendure.constants++ - - code/cloudendure/events.md: - - cloudendure.events++ - - code/cloudendure/exceptions.md: - - cloudendure.exceptions++ - - code/cloudendure/models.md: - - cloudendure.models++ - - code/cloudendure/templates.md: - - cloudendure.templates++ - - code/cloudendure/utils.md: - - cloudendure.utils++ - - code/lambda/copy_ami.md: - - lambda.copy_ami++ - - code/lambda/exceptions.md: - - lambda.exceptions++ - - code/lambda/handler.md: - - lambda.handler++ - -pages: - - General: - - Home: index.md << README.md - - References: references.md << REFERENCE.md - - Changelog: changes.md << CHANGELOG.md - - Code: - - CloudEndure: - - API: code/cloudendure/api.md - - Main: code/cloudendure/cloudendure.md - - Config: code/cloudendure/config.md - - Constants: code/cloudendure/constants.md - - Events: code/cloudendure/events.md - - Exceptions: code/cloudendure/exceptions.md - - Models: code/cloudendure/models.md - - Templates: code/cloudendure/templates.md - - Utilities: code/cloudendure/utils.md - - AWS Lambda: - - Handler: code/lambda/handler.md - - Exceptions: code/lambda/exceptions.md - - Copy AMI Utils: code/lambda/copy_ami.md - - API Documentation: - - MAIN: api/API_README.md << docs/API_README.md - - AccountApi: api/AccountApi.md << docs/AccountApi.md - - ActionsApi: api/ActionsApi.md << docs/ActionsApi.md - - AuthenticationApi: api/AuthenticationApi.md << docs/AuthenticationApi.md - - BlueprintApi: api/BlueprintApi.md << docs/BlueprintApi.md - - CloudApi: api/CloudApi.md << docs/CloudApi.md - - CloudCredentialsApi: api/CloudCredentialsApi.md << docs/CloudCredentialsApi.md - - CloudEndureAccount: api/CloudEndureAccount.md << docs/CloudEndureAccount.md - - CloudEndureAccountRequest: api/CloudEndureAccountRequest.md << docs/CloudEndureAccountRequest.md - - CloudEndureAccountRequestList: api/CloudEndureAccountRequestList.md << docs/CloudEndureAccountRequestList.md - - CloudEndureAccountsList: api/CloudEndureAccountsList.md << docs/CloudEndureAccountsList.md - - CloudEndureAgentNextReplicationInitRequest: api/CloudEndureAgentNextReplicationInitRequest.md << docs/CloudEndureAgentNextReplicationInitRequest.md - - CloudEndureAllProjectFeatures: api/CloudEndureAllProjectFeatures.md << docs/CloudEndureAllProjectFeatures.md - - CloudEndureAuditLog: api/CloudEndureAuditLog.md << docs/CloudEndureAuditLog.md - - CloudEndureAuditLogChangedField: api/CloudEndureAuditLogChangedField.md << docs/CloudEndureAuditLogChangedField.md - - CloudEndureAuditLogEntry: api/CloudEndureAuditLogEntry.md << docs/CloudEndureAuditLogEntry.md - - CloudEndureAuditLogEntry: api/CloudEndureAuditLogEntry.md << docs/CloudEndureAuditLogEntry.md - - CloudEndureBandwidthThrottling: api/CloudEndureBandwidthThrottling.md << docs/CloudEndureBandwidthThrottling.md - - CloudEndureBlueprint: api/CloudEndureBlueprint.md << docs/CloudEndureBlueprint.md - - CloudEndureBlueprintList: api/CloudEndureBlueprintList.md << docs/CloudEndureBlueprintList.md - - CloudEndureCloud: api/CloudEndureCloud.md << docs/CloudEndureCloud.md - - CloudEndureCloudCredentials: api/CloudEndureCloudCredentials.md << docs/CloudEndureCloudCredentials.md - - CloudEndureCloudCredentialsList: api/CloudEndureCloudCredentialsList.md << docs/CloudEndureCloudCredentialsList.md - - CloudEndureCloudCredentialsRequest: api/CloudEndureCloudCredentialsRequest.md << docs/CloudEndureCloudCredentialsRequest.md - - CloudEndureCloudsList: api/CloudEndureCloudsList.md << docs/CloudEndureCloudsList.md - - CloudEndureComputeLocation: api/CloudEndureComputeLocation.md << docs/CloudEndureComputeLocation.md - - CloudEndureConfigurations: api/CloudEndureConfigurations.md << docs/CloudEndureConfigurations.md - - CloudEndureConfigurationsList: api/CloudEndureConfigurationsList.md << docs/CloudEndureConfigurationsList.md - - CloudEndureError: api/CloudEndureError.md << docs/CloudEndureError.md - - CloudEndureExtendedAccountInfo: api/CloudEndureExtendedAccountInfo.md << docs/CloudEndureExtendedAccountInfo.md - - CloudEndureFindFilesParameters: api/CloudEndureFindFilesParameters.md << docs/CloudEndureFindFilesParameters.md - - CloudEndureFindFilesResult: api/CloudEndureFindFilesResult.md << docs/CloudEndureFindFilesResult.md - - CloudEndureFindFilesResultPit: api/CloudEndureFindFilesResultPit.md << docs/CloudEndureFindFilesResultPit.md - - CloudEndureFindFilesResults: api/CloudEndureFindFilesResults.md << docs/CloudEndureFindFilesResults.md - - CloudEndureGcpMachinesFinanceData: api/CloudEndureGcpMachinesFinanceData.md << docs/CloudEndureGcpMachinesFinanceData.md - - CloudEndureIdentityProviderRedirectResponse: api/CloudEndureIdentityProviderRedirectResponse.md << docs/CloudEndureIdentityProviderRedirectResponse.md - - CloudEndureInitializationStep: api/CloudEndureInitializationStep.md << docs/CloudEndureInitializationStep.md - - CloudEndureJob: api/CloudEndureJob.md << docs/CloudEndureJob.md - - CloudEndureJobsList: api/CloudEndureJobsList.md << docs/CloudEndureJobsList.md - - CloudEndureKeyValueList: api/CloudEndureKeyValueList.md << docs/CloudEndureKeyValueList.md - - CloudEndureLaunchMachinesParameters: api/CloudEndureLaunchMachinesParameters.md << docs/CloudEndureLaunchMachinesParameters.md - - CloudEndureLicense: api/CloudEndureLicense.md << docs/CloudEndureLicense.md - - CloudEndureLicenseFeatures: api/CloudEndureLicenseFeatures.md << docs/CloudEndureLicenseFeatures.md - - CloudEndureLicenseList: api/CloudEndureLicenseList.md << docs/CloudEndureLicenseList.md - - CloudEndureListUsersResult: api/CloudEndureListUsersResult.md << docs/CloudEndureListUsersResult.md - - CloudEndureListUsersResults: api/CloudEndureListUsersResults.md << docs/CloudEndureListUsersResults.md - - CloudEndureLogicalLocation: api/CloudEndureLogicalLocation.md << docs/CloudEndureLogicalLocation.md - - CloudEndureMachine: api/CloudEndureMachine.md << docs/CloudEndureMachine.md - - CloudEndureMachineAndPathAndPointInTime: api/CloudEndureMachineAndPathAndPointInTime.md << docs/CloudEndureMachineAndPathAndPointInTime.md - - CloudEndureMachineAndPointInTime: api/CloudEndureMachineAndPointInTime.md << docs/CloudEndureMachineAndPointInTime.md - - CloudEndureMachineReplicationConfiguration: api/CloudEndureMachineReplicationConfiguration.md << docs/CloudEndureMachineReplicationConfiguration.md - - CloudEndureMachineSnapshotCredits: api/CloudEndureMachineSnapshotCredits.md << docs/CloudEndureMachineSnapshotCredits.md - - CloudEndureMachineThrottleTimeSeconds: api/CloudEndureMachineThrottleTimeSeconds.md << docs/CloudEndureMachineThrottleTimeSeconds.md - - CloudEndureMachinesList: api/CloudEndureMachinesList.md << docs/CloudEndureMachinesList.md - - CloudEndureMachinesListInvalidIDsAndJob: api/CloudEndureMachinesListInvalidIDsAndJob.md << docs/CloudEndureMachinesListInvalidIDsAndJob.md - - CloudEndureNetworkInterface: api/CloudEndureNetworkInterface.md << docs/CloudEndureNetworkInterface.md - - CloudEndurePointInTime: api/CloudEndurePointInTime.md << docs/CloudEndurePointInTime.md - - CloudEndurePointInTimeList: api/CloudEndurePointInTimeList.md << docs/CloudEndurePointInTimeList.md - - CloudEndureProject: api/CloudEndureProject.md << docs/CloudEndureProject.md - - CloudEndureProjectStorage: api/CloudEndureProjectStorage.md << docs/CloudEndureProjectStorage.md - - CloudEndureProjectsAndUsers: api/CloudEndureProjectsAndUsers.md << docs/CloudEndureProjectsAndUsers.md - - CloudEndureProjectsList: api/CloudEndureProjectsList.md << docs/CloudEndureProjectsList.md - - CloudEndureRecoveryPlan: api/CloudEndureRecoveryPlan.md << docs/CloudEndureRecoveryPlan.md - - CloudEndureRecoveryPlanList: api/CloudEndureRecoveryPlanList.md << docs/CloudEndureRecoveryPlanList.md - - CloudEndureRecoveryPlanStep: api/CloudEndureRecoveryPlanStep.md << docs/CloudEndureRecoveryPlanStep.md - - CloudEndureRecoveryPlanSteps: api/CloudEndureRecoveryPlanSteps.md << docs/CloudEndureRecoveryPlanSteps.md - - CloudEndureRegion: api/CloudEndureRegion.md << docs/CloudEndureRegion.md - - CloudEndureRegionsList: api/CloudEndureRegionsList.md << docs/CloudEndureRegionsList.md - - CloudEndureReplica: api/CloudEndureReplica.md << docs/CloudEndureReplica.md - - CloudEndureReplicationConfiguration: api/CloudEndureReplicationConfiguration.md << docs/CloudEndureReplicationConfiguration.md - - CloudEndureReplicationConfigurationList: api/CloudEndureReplicationConfigurationList.md << docs/CloudEndureReplicationConfigurationList.md - - CloudEndureReplicationServerConfig: api/CloudEndureReplicationServerConfig.md << docs/CloudEndureReplicationServerConfig.md - - CloudEndureRestoreFilesParameters: api/CloudEndureRestoreFilesParameters.md << docs/CloudEndureRestoreFilesParameters.md - - CloudEndureSamlSettings: api/CloudEndureSamlSettings.md << docs/CloudEndureSamlSettings.md - - CloudEndureSecurityGroup: api/CloudEndureSecurityGroup.md << docs/CloudEndureSecurityGroup.md - - CloudEndureStorageLocation: api/CloudEndureStorageLocation.md << docs/CloudEndureStorageLocation.md - - CloudEndureSubnet: api/CloudEndureSubnet.md << docs/CloudEndureSubnet.md - - CloudEndureTime: api/CloudEndureTime.md << docs/CloudEndureTime.md - - CloudEndureUpdateableScripts: api/CloudEndureUpdateableScripts.md << docs/CloudEndureUpdateableScripts.md - - CloudEndureUpgradeCounterDelay: api/CloudEndureUpgradeCounterDelay.md << docs/CloudEndureUpgradeCounterDelay.md - - CloudEndureUsage: api/CloudEndureUsage.md << docs/CloudEndureUsage.md - - CloudEndureUsageList: api/CloudEndureUsageList.md << docs/CloudEndureUsageList.md - - CloudEndureUser: api/CloudEndureUser.md << docs/CloudEndureUser.md - - CloudEndureUserReport: api/CloudEndureUserReport.md << docs/CloudEndureUserReport.md - - CloudEndureUserReports: api/CloudEndureUserReports.md << docs/CloudEndureUserReports.md - - CloudEndureUsersAndRoles: api/CloudEndureUsersAndRoles.md << docs/CloudEndureUsersAndRoles.md - - CloudEndureUsersList: api/CloudEndureUsersList.md << docs/CloudEndureUsersList.md - - CloudEndureVCenterSubnet: api/CloudEndureVCenterSubnet.md << docs/CloudEndureVCenterSubnet.md - - DefaultApi: api/DefaultApi.md << docs/DefaultApi.md - - LicensingApi: api/LicensingApi.md << docs/LicensingApi.md - - MachinesApi: api/MachinesApi.md << docs/MachinesApi.md - - ProjectApi: api/ProjectApi.md << docs/ProjectApi.md - - RecoveryPlansApi: api/RecoveryPlansApi.md << docs/RecoveryPlansApi.md - - ReplicationApi: api/ReplicationApi.md << docs/ReplicationApi.md - - UserApi: api/UserApi.md << docs/UserApi.md - - Miscellaneous: - - Security Policy: securitypolicy.md << SECURITY.md -theme: - name: material - logo: 'https://img.icons8.com/ios-filled/100/000000/cloud-connection.png' - favicon: 'https://img.icons8.com/ios-filled/50/000000/cloud-connection.png' - feature: - tabs: true - -additional_search_paths: - - cloudendure/ - - lambda/ diff --git a/pyproject.toml b/pyproject.toml index f3053cfbc..f7c41253e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,199 +1,26 @@ [tool.poetry] name = "cloudendure" -version = "0.3.5" -description = "Python wrapper and CLI for CloudEndure" -authors = ["Mark Beacom ", "Tom Warnock "] -maintainers = ["Evan Lucchesi ", "Nick Selpa "] -include = [ - "CHANGELOG.md", - "CODE_OF_CONDUCT.md", - "REFERENCE.md", - "SECURITY.md", -] -readme = "README.md" -repository = "https://github.com/2ndWatch/cloudendure-python" -homepage = "https://2ndwatch.github.io/cloudendure-python/" -classifiers = [ - "Environment :: Console", - "Environment :: MacOS X", - "Environment :: Win32 (MS Windows)", - "License :: OSI Approved :: MIT License", - "Natural Language :: English", - "Operating System :: MacOS", - "Operating System :: MacOS :: MacOS 9", - "Operating System :: MacOS :: MacOS X", - "Operating System :: Microsoft", - "Operating System :: Microsoft :: MS-DOS", - "Operating System :: Microsoft :: Windows", - "Operating System :: Microsoft :: Windows :: Windows 10", - "Operating System :: Microsoft :: Windows :: Windows 8.1", - "Operating System :: Microsoft :: Windows :: Windows 8", - "Operating System :: Microsoft :: Windows :: Windows 7", - "Operating System :: Microsoft :: Windows :: Windows Server 2008", - "Operating System :: POSIX :: Linux", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: Implementation :: CPython", - "Topic :: Internet", - "Topic :: Internet :: WWW/HTTP", - "Topic :: Internet :: WWW/HTTP :: Session", - "Topic :: Software Development :: Libraries", - "Topic :: Software Development :: Libraries :: Python Modules", - "Topic :: Software Development :: User Interfaces", - "Topic :: Utilities", -] +version = "v5.1.0" +description = "A CloudEndure client built fully on the OpenApi definition." +authors = ["Craig Monson "] +license = "MIT" [tool.poetry.dependencies] -python = "^3.7" -six = "^1.14.0" -certifi = "^2019.11.28" -python-dateutil = "^2.8.1" -setuptools = "^45.2.0" -urllib3 = "^1.25.8" -fire = "^0.3.0" -requests = "^2.23.0" -boto3 = "^1.12.30" -cookiecutter = "^1.7.0" +python = "^3.8" +python_dateutil = "~2.5.3" +setuptools = "^21.0.0" +urllib3 = "^1.25" [tool.poetry.dev-dependencies] -isort = "^4.3.21" -yapf = "^0.29.0" -pylint = "^2.4.4" -flake8 = "^3.7.9" -black = "^19.10b0" -bandit = "^1.6.2" -autopep8 = "^1.5" -pycodestyle = "^2.5.0" -pydocstyle = "^5.0.2" -pytest = "^5.3.5" -pytest-sugar = "^0.9.2" -pytest-isort = "^0.3.1" -coverage = "^5.0.3" -codecov = "^2.0.15" -pytest-cov = "^2.8.1" -mock = "^4.0.1" -responses = "^0.10.9" -twine = "^3.1.1" -mypy = "^0.761" -pep8 = "^1.7.1" -pymdown-extensions = "^6.3" -mkdocs = "^1.0.4" -mkdocs-material = "^4.6.3" -pydoc-markdown = "^2.0.5" -nose = "^1.3.7" -pluggy = "^0.13.1" -py = "^1.8.1" -randomize = "^0.14" -moto = "^1.3.14" - -[tool.poetry.scripts] -cloudendure = "cloudendure.cloudendure:main" -ce = "cloudendure.cloudendure:main" - -[tool.isort] -line_length = 120 -multi_line_output = 5 -include_trailing_comma = true -known_future_library = "future" -known_third_party = [ - "boto3", - "botocore", - "fire", - "pytest", - "requests", - "urllib3", - "six", - "yaml", -] -known_first_party = [ - "cloudendure_api", - "api", - "cloudendure", - "config", - "events", - "exceptions", - "models", - "templates", - "utils", -] -default_section = "THIRDPARTY" -indent = ' ' -sections = [ - "FUTURE", - "STDLIB", - "THIRDPARTY", - "FIRSTPARTY", - "LOCALFOLDER", -] -skip = [ - "cloudendure/cloudendure_api", -] - -[tool.yapf] -based_on_style = "pep8" -column_limit = 120 -indent_width = 4 -spaces_before_comment = 2 -ALLOW_SPLIT_BEFORE_DICT_VALUE = false -DEDENT_CLOSING_BRACKETS = true -EACH_DICT_ENTRY_ON_SEPARATE_LINE = true -COALESCE_BRACKETS = true -USE_TABS = false -ALLOW_MULTILINE_LAMBDAS = true -BLANK_LINE_BEFORE_NESTED_CLASS_OR_DEF = true -INDENT_DICTIONARY_VALUE = true -SPLIT_BEFORE_EXPRESSION_AFTER_OPENING_PAREN = true -DISABLE_ENDING_COMMA_HEURISTIC = true - -[tool.flake8] -line_length = 120 -based_on_style = "pep8" -column_limit = 120 -indent_width = 4 -spaces_before_comment = 2 -ALLOW_SPLIT_BEFORE_DICT_VALUE = false -DEDENT_CLOSING_BRACKETS = true -EACH_DICT_ENTRY_ON_SEPARATE_LINE = true -COALESCE_BRACKETS = true -USE_TABS = false -ALLOW_MULTILINE_LAMBDAS = true -BLANK_LINE_BEFORE_NESTED_CLASS_OR_DEF = true -INDENT_DICTIONARY_VALUE = true -SPLIT_BEFORE_EXPRESSION_AFTER_OPENING_PAREN = true -DISABLE_ENDING_COMMA_HEURISTIC = true - -[tool.black] -line-length = 120 -target-version = ["py38"] -exclude = ''' -( - /( - \.eggs - | \.git - | \.hg - | \.mypy_cache - | \.tox - | \.venv - | _build - | buck-out - | build - | dist - )/ - | cloudendure_api/ -) -''' - -[tool.pylint] -line_length = 120 - -[tool.portray.mkdocs.theme] -name = "material" -palette = {primary = "blue", accent = "light blue"} +pytest = "^6.2.2" +black = "^20.8b1" +pytest-watch = "^4.2.0" +pytest-spec = "^3.1.0" +pytest-testmon = "^1.0.3" +pytest-mock = "^3.5.1" +pytest-cov = "^2.11.1" +isort = "^5.8.0" [build-system] -requires = ["poetry>=0.12"] -build-backend = "poetry.masonry.api" +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" diff --git a/reference/swagger_config.json b/reference/swagger_config.json deleted file mode 100644 index 2365f9533..000000000 --- a/reference/swagger_config.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "packageName": "cloudendure_api", - "projectName": "cloudendure_api", - "packageVersion": "0.1.7", - "packageUrl": "https://github.com/2ndWatch/cloudendure-python" -} diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 767f4a103..000000000 --- a/setup.cfg +++ /dev/null @@ -1,84 +0,0 @@ -[tool:pytest] -norecursedirs = - .git - venv -python_files = - test_*.py - *_test.py - tests.py -addopts = - -rf - --isort - --cov - -[flake8] -max-line-length = 120 -exclude = .tox,.git - -[pycodestyle] -max-line-length = 120 -exclude = .tox,.git - -[pylint] -max-line-length = 120 -exclude = .tox,.git - -[coverage:run] -branch = True -source = - app -omit = - *.eggs* - *tests* - */__init__.py - -[coverage:report] -# Regexes for lines to exclude from consideration -exclude_lines = - # Have to re-enable the standard pragma - pragma: no cover - - # Don't complain about missing debug-only code: - def __repr__ - if self\.debug - - # Don't complain if tests don't hit defensive assertion code: - raise AssertionError - raise NotImplementedError - - # Don't complain if non-runnable code isn't run: - if 0: - if __name__ == .__main__.: - -ignore_errors = True - -[coverage:html] -directory = coverage_html_report - -[isort] -line_length = 120 -multi_line_output = 5 -include_trailing_comma = True -known_future_library = future -known_third_party = boto3,botocore,fire,pytest,requests,urllib3,six,yaml -known_first_party = cloudendure_api,api,cloudendure,config,events,exceptions,models,templates,utils -default_section = THIRDPARTY -indent = ' ' -sections = FUTURE,STDLIB,THIRDPARTY,FIRSTPARTY,LOCALFOLDER -skip=cloudendure/cloudendure_api - -[yapf] -based_on_style = pep8 -column_limit = 120 -indent_width = 4 -spaces_before_comment = 2 -ALLOW_SPLIT_BEFORE_DICT_VALUE = false -DEDENT_CLOSING_BRACKETS = true -EACH_DICT_ENTRY_ON_SEPARATE_LINE = true -COALESCE_BRACKETS = true -USE_TABS = false -ALLOW_MULTILINE_LAMBDAS = true -BLANK_LINE_BEFORE_NESTED_CLASS_OR_DEF = true -INDENT_DICTIONARY_VALUE = true -SPLIT_BEFORE_EXPRESSION_AFTER_OPENING_PAREN = true -DISABLE_ENDING_COMMA_HEURISTIC = true diff --git a/step/cloudwatch.tf b/step/cloudwatch.tf deleted file mode 100644 index e1b3f44d6..000000000 --- a/step/cloudwatch.tf +++ /dev/null @@ -1,36 +0,0 @@ -// resource "aws_cloudwatch_log_group" "cloudendure-rehost-migration-log-group" { -// name = "/aws/lambda/cloudendure-rehost-migration" -// retention_in_days = "1" -// } - -resource "aws_cloudwatch_event_rule" "rehost_migration_rule" { - name = "ce-rehost-migration-rule" - description = "" - event_pattern = < str: - """Handle signaling and entry into the AWS Lambda.""" - print("Received event: " + json.dumps(event, indent=2)) - - migrated_ami_id: str = event["migrated_ami_id"] - kms_id: str = event["kms_id"] - region: str = event.get("region", os.environ.get("AWS_REGION")) - role: str = event.get("role") - instance_name: str = event.get("name", "") - - sts_client = boto3.client("sts") - - print(f"Assuming role: {role}") - assumed_role: Dict[str, Any] = sts_client.assume_role(RoleArn=role, RoleSessionName="CopyImageLambda") - - credentials = assumed_role.get("Credentials") - - ec2_client = boto3.client( - "ec2", - region_name=region, - aws_access_key_id=credentials["AccessKeyId"], - aws_secret_access_key=credentials["SecretAccessKey"], - aws_session_token=credentials["SessionToken"], - ) - - try: - new_image: Dict[str, Any] = ec2_client.copy_image( - SourceImageId=migrated_ami_id, - SourceRegion=region, - Name=f"copied-{migrated_ami_id}", - Encrypted=True, - KmsKeyId=kms_id, - ) - except Exception as e: - print(e) - return "" - - MigrationStateHandler().update_state(state="IMAGE_COPYING", machine_name=instance_name) - return new_image.get("ImageId", "") diff --git a/step/lambdas/create_image.py b/step/lambdas/create_image.py deleted file mode 100644 index 732310ec0..000000000 --- a/step/lambdas/create_image.py +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -"""AWS Lambda to create an AWS image.""" -from __future__ import annotations - -import datetime -import json -from typing import Any, Dict - -import boto3 -from migrationstate import MigrationStateHandler - -print("Loading function create_image") - -ec2_resource = boto3.resource("ec2") - -# { -# "instance_id": "i-identifier", -# "kms_id": "KMS ID", -# "account": "account_number", -# "instance_status": "should be there if in loop" -# } - - -def lambda_handler(event: Dict[str, Any], context: Any) -> str: - """Handle signaling and entry into the AWS Lambda.""" - print("Received event: " + json.dumps(event, indent=2)) - - instance_id: str = event["instance_id"] - image_creation_time: str = datetime.datetime.utcnow().strftime("%Y%m%d%H%M%S") - name: str = event.get("name", "") - - instance = ec2_resource.Instance(instance_id) - - ec2_image = instance.create_image( - Name=f"{instance_id}-{image_creation_time}", Description=f"Created image for {instance_id}", - ) - - for tag in instance.tags: - ec2_image.create_tags(Tags=[{"Key": tag["Key"], "Value": tag["Value"]}]) - - instance.create_tags(Tags=[{"Key": "CloneStatus", "Value": "IMAGE_CREATED"}]) - - MigrationStateHandler().update_state(state="IMAGE_CREATING", machine_name=name) - - return ec2_image.image_id diff --git a/step/lambdas/find_instance.py b/step/lambdas/find_instance.py deleted file mode 100644 index 60bc7c13b..000000000 --- a/step/lambdas/find_instance.py +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -"""Find the passed in instance id and see if it is a CE migration""" -from __future__ import annotations - -import json -import os -from typing import Any, Dict - -import boto3 -from migrationstate import MigrationStateHandler - -print("Loading function find_instance") - -ec2_resource = boto3.resource("ec2") -sqs = boto3.client("sqs") - -# { -# "version": "0", -# "id": "7e979767-95bb-1972-0cab-a670ec5d5000", -# "detail-type": "EC2 Instance State-change Notification", -# "source": "aws.ec2", -# "account": "460535642604", -# "time": "2019-08-23T13:45:28Z", -# "region": "us-east-1", -# "resources": [ -# "arn:aws:ec2:us-east-1:460535642604:instance/i-00c758f34483a2ea2" -# ], -# "detail": { -# "instance-id": "i-00c758f34483a2ea2", -# "state": "running" -# } -# } - - -def lambda_handler(event: Dict[str, Any], context: Any) -> str: - """Handle signaling and entry into the AWS Lambda.""" - print("Received event: " + json.dumps(event, indent=2)) - - detail: Dict[str, Any] = event.get("detail", {}) - event_dict: Dict[str, Any] = {} - instance_id: str = detail.get("instance-id", "") - - if not instance_id: - event_dict["instance_id"] = "not-found" - return event_dict - - try: - instance = ec2_resource.Instance(instance_id) - - # look for tags that show it is a CE migration that has not run yet - for tag in instance.tags: - if tag["Key"] == "CloneStatus": - if tag["Value"] == "NOT_STARTED": - event_dict["instance_id"] = instance_id - else: - event_dict["instance_id"] = "not-migration" - - if tag["Key"] == "DestinationAccount": - event_dict["account"] = tag["Value"] - - if tag["Key"] == "DestinationKMS": - event_dict["kms_id"] = tag["Value"] - - if tag["Key"] == "DestinationRole": - event_dict["role"] = tag["Value"] - - if tag["Key"] == "Name": - event_dict["name"] = tag["Value"] - - except Exception as e: - print(e) - event_dict["instance_id"] = "not-found" - - MigrationStateHandler().update_state(state="INSTANCE_LAUNCHED", machine_name=event_dict.get("name")) - return event_dict diff --git a/step/lambdas/get_copy_status.py b/step/lambdas/get_copy_status.py deleted file mode 100644 index 23aafcfa9..000000000 --- a/step/lambdas/get_copy_status.py +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -"""Check the status of an AWS AMI copy.""" -from __future__ import annotations - -import json -import os -from typing import Any, Dict - -import boto3 -from migrationstate import MigrationStateHandler - -print("Loading function get_copy_status") - -# { -# "ami_id": "original AMI", -# "kms_id": "KMS GUID", -# "wait_time": timeout in seconds, -# "copy_ami": "copied AMI", -# "status": "pending if it came from the copy complete? choice" -# "region": "different region" -# } - - -def lambda_handler(event: Dict[str, Any], context: Any) -> str: - """Handle signaling and entry into the AWS Lambda.""" - print("Received event: " + json.dumps(event, indent=2)) - - copy_ami: str = event["copy_ami"] - region: str = event.get("region", os.environ.get("AWS_REGION")) - instance_name: str = event.get("name", "") - role: str = event.get("role", "") - - sts_client = boto3.client("sts") - - print(f"Assuming role: {role}") - assumed_role: Dict[str, Any] = sts_client.assume_role(RoleArn=role, RoleSessionName="GetCopyStatusLambda") - - credentials = assumed_role.get("Credentials") - - ec2_client = boto3.client( - "ec2", - region_name=region, - aws_access_key_id=credentials["AccessKeyId"], - aws_secret_access_key=credentials["SecretAccessKey"], - aws_session_token=credentials["SessionToken"], - ) - - try: - ami_state: Dict[str, Any] = ec2_client.describe_images(ImageIds=[copy_ami]) - except Exception as e: - print(e) - return "error" - - images = ami_state.get("Images") - if not images: - return "no-image-yet" - - state = images[0].get("State") - if state and state == "available": - MigrationStateHandler().update_state(state="IMAGE_COPIED", machine_name=instance_name) - - return state diff --git a/step/lambdas/get_image_status.py b/step/lambdas/get_image_status.py deleted file mode 100644 index b22627f28..000000000 --- a/step/lambdas/get_image_status.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -"""Check the state of an AWS AMI.""" -from __future__ import annotations - -import json -from typing import Any, Dict - -import boto3 -from migrationstate import MigrationStateHandler - -print("Loading function get_image_status") - -ec2_client = boto3.client("ec2") - -# { -# "instance_id": "i-identifier", -# "kms_id": "KMS ID", -# "account": "account_number", -# "instance_status": "should be there if in loop" -# "migrated_ami_id": "ami-identifier" -# } - - -def lambda_handler(event: Dict[str, Any], context: Any) -> str: - """Handle signaling and entry into the AWS Lambda.""" - print("Received event: " + json.dumps(event, indent=2)) - - migrated_ami_id: str = event["migrated_ami_id"] - instance_name: str = event.get("name", "") - - ami_state: Dict[str, Any] = ec2_client.describe_images(ImageIds=[migrated_ami_id]) - - state = ami_state["Images"][0]["State"] - if state == "available": - MigrationStateHandler().update_state(state="IMAGE_CREATED", machine_name=instance_name) - - return state diff --git a/step/lambdas/get_instance_status.py b/step/lambdas/get_instance_status.py deleted file mode 100644 index 24125ae72..000000000 --- a/step/lambdas/get_instance_status.py +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -"""Check the status of an AWS EC2 instance.""" -from __future__ import annotations - -import json -from typing import Any, Dict - -import boto3 -from migrationstate import MigrationStateHandler - -print("Loading function get_instance_status") - -ec2_client = boto3.client("ec2") - -# { -# "instance_id": "i-identifier", -# "kms_id": "KMS ID", -# "account": "account_number", -# "instance_status": "should be there if in loop" -# } - - -def lambda_handler(event: Dict[str, Any], context: Any) -> str: - """Handle signaling and entry into the AWS Lambda.""" - print("Received event: " + json.dumps(event, indent=2)) - - instance_id: str = event.get("instance_id") - instance_name: str = event.get("name", "") - state: str = "unknown" - - resp = ec2_client.describe_instances(InstanceIds=[instance_id]) - reservations = resp.get("Reservations", []) - for reservation in reservations: - for instance in reservation.get("Instances", []): - state = instance.get("State", {}).get("Name") - - # check if running - if state == "running": - resp = ec2_client.describe_instance_status(InstanceIds=[instance_id]) - status = resp.get("InstanceStatuses", [])[0] - - # check instance - if status["InstanceStatus"].get("Status", "") != "ok": - state = "instance_failed" - - # check system - if status["SystemStatus"].get("Status", "") != "ok": - state = "system_failed" - - if state == "running": - MigrationStateHandler().update_state(state="INSTANCE_READY", machine_name=instance_name) - - return state diff --git a/step/lambdas/image_cleanup.py b/step/lambdas/image_cleanup.py deleted file mode 100644 index 015d873e8..000000000 --- a/step/lambdas/image_cleanup.py +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -"""AWS Lambda to cleanup AWS images.""" -from __future__ import annotations - -import json -import os -from typing import Any, Dict, List - -import boto3 -from migrationstate import MigrationStateHandler - -print("Loading function image_cleanup") - -# { -# "ami_id": "original AMI", -# "kms_id": "KMS GUID used for copy and split AMI", -# "wait_time": wait time in seconds, -# "copy_ami": "copied AMI", -# "split_ami_id": split AMI if it passed" -# } - - -def lambda_handler(event: Dict[str, Any], context: Any) -> bool: - """Handle signaling and entry into the AWS Lambda.""" - print("Received event: " + json.dumps(event, indent=2)) - - instance_name: str = event.get("name", "") - migrated_ami: str = event.get("migrated_ami_id") - if not migrated_ami: - return False - - ec2_res = boto3.resource("ec2", os.environ.get("AWS_REGION")) - try: - # Access the image that needs to be deleted - image = ec2_res.Image(migrated_ami) - - # grab device mappings before deregistering - devices: List[Any] = image.block_device_mappings - image.deregister() - for device in devices: - if "Ebs" in device: - snap = ec2_res.Snapshot(device["Ebs"].get("SnapshotId")) - snap.delete() - except Exception as e: - print(f"Failed. AMI may not exist.\n{str(e)}") - return False - - MigrationStateHandler().update_state(state="IMAGE_READY", machine_name=instance_name) - - return True diff --git a/step/lambdas/migrationstate.py b/step/lambdas/migrationstate.py deleted file mode 100644 index 7f335b5d0..000000000 --- a/step/lambdas/migrationstate.py +++ /dev/null @@ -1,77 +0,0 @@ -# -*- coding: utf-8 -*- -"""Define Migration events.""" -from __future__ import annotations - -import json -import os -from datetime import datetime -from typing import Any, Dict, List, Tuple - -import boto3 - - -class MigrationStateHandler: - sqs = None - - def update_state(self, state: str, machine_name: str, **kwargs) -> bool: - """Send a state update.""" - sqs = boto3.client("sqs") - - print("Event queue: " + os.environ.get("event_queue")) - queue_url = os.environ.get("event_queue") - state_obj = MigrationState(state, machine_name, **kwargs) - print(sqs.send_message(QueueUrl=queue_url, MessageBody=json.dumps(state_obj.state_dict))) - - -class MigrationException(Exception): - """Define the structure of a Migration exception.""" - - pass - - -class MigrationState: - """Define the structure of a Migration state.""" - - state_dict = {} - - # states - STATE_ERRORED: str = "ERROR" - STATE_INSTANCE_LAUNCHED: str = "INSTANCE_LAUNCHED" - STATE_INSTANCE_READY: str = "INSTANCE_READY" - STATE_IMAGE_CREATING: str = "IMAGE_CREATING" - STATE_IMAGE_CREATED: str = "IMAGE_CREATED" - STATE_IMAGE_SHARED: str = "IMAGE_SHARED" - STATE_IMAGE_COPYING: str = "IMAGE_COPYING" - STATE_IMAGE_COPIED: str = "IMAGE_COPIED" - STATE_IMAGE_SPLIT: str = "IMAGE_SPLIT" - STATE_IMAGE_READY: str = "IMAGE_READY" - - STATES: List[Tuple[str]] = [ - STATE_ERRORED, - STATE_INSTANCE_LAUNCHED, - STATE_INSTANCE_READY, - STATE_IMAGE_CREATING, - STATE_IMAGE_CREATED, - STATE_IMAGE_SHARED, - STATE_IMAGE_COPYING, - STATE_IMAGE_COPIED, - STATE_IMAGE_SPLIT, - STATE_IMAGE_READY, - ] - - def __init__(self, state: str, machine_name: str = "NA", **kwargs) -> None: - """Initialize the State.""" - if state not in self.STATES: - raise MigrationException(f"State: {state} is unrecognized!") - - self.machine_name: str = machine_name.upper() - self.state: str = state - - self.state_dict: Dict[str, Any] = { - "state": self.state, - "machine_name": self.machine_name, - } - - for k, v in kwargs.items(): - setattr(self, k, v) - self.state_dict[k] = v diff --git a/step/lambdas/share_image.py b/step/lambdas/share_image.py deleted file mode 100644 index a15c639a3..000000000 --- a/step/lambdas/share_image.py +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -"""AWS Lambda to share an AWS image.""" -from __future__ import annotations - -import json -from typing import Any, Dict - -import boto3 -from migrationstate import MigrationStateHandler - -print("Loading function share_image") - -ec2_res = boto3.resource("ec2") - -# { -# "ami_id" : "ami-123456", -# "kms_id" : "GUID", -# "wait_time": 60 -# } - - -def lambda_handler(event: Dict[str, Any], context: Any) -> bool: - """Handle signaling and entry into the AWS Lambda.""" - print("Received event: " + json.dumps(event, indent=2)) - - migrated_ami_id: str = event["migrated_ami_id"] - instance_name: str = event.get("name", "") - account: str = event["account"] - - # Access the image that needs to be copied - image = ec2_res.Image(migrated_ami_id) - - try: - # Share the image with the destination account - image.modify_attribute( - ImageId=image.id, - Attribute="launchPermission", - OperationType="add", - LaunchPermission={"Add": [{"UserId": account}]}, - ) - except Exception as e: - print(e) - return False - - # We have to now share the snapshots associated with the AMI so it can be copied - devices = image.block_device_mappings - for device in devices: - if "Ebs" in device: - snapshot_id: str = device["Ebs"]["SnapshotId"] - snapshot = ec2_res.Snapshot(snapshot_id) - try: - snapshot.modify_attribute( - Attribute="createVolumePermission", - CreateVolumePermission={"Add": [{"UserId": account}]}, - OperationType="add", - ) - except Exception as e: - print(e) - return False - - MigrationStateHandler().update_state(state="IMAGE_SHARED", machine_name=instance_name) - return True diff --git a/step/lambdas/split_image.py b/step/lambdas/split_image.py deleted file mode 100644 index 76aba846f..000000000 --- a/step/lambdas/split_image.py +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -"""AWS Lambda to split a copied image.""" -from __future__ import annotations - -import json -import os -from typing import Any, Dict, List - -import boto3 -from migrationstate import MigrationStateHandler - -print("Loading function split_image") - -# { -# "copy_ami" : "ami-123456", -# "kms_id" : "GUID", -# "wait_time": 60, -# "region" : optional region -# } - - -def lambda_handler(event: Dict[str, Any], context: Any) -> str: - """Handle signaling and entry into the AWS Lambda.""" - print("Received event: " + json.dumps(event, indent=2)) - - copy_ami: str = event["copy_ami"] - region: str = event.get("region", os.environ.get("AWS_REGION")) - role: str = event.get("role") - instance_name: str = event.get("name", "") - - sts_client = boto3.client("sts") - - print(f"Assuming role: {role}") - assumed_role: Dict[str, Any] = sts_client.assume_role(RoleArn=role, RoleSessionName="SplitImageLambda") - - credentials = assumed_role.get("Credentials") - - ec2_res = boto3.resource( - "ec2", - region_name=region, - aws_access_key_id=credentials["AccessKeyId"], - aws_secret_access_key=credentials["SecretAccessKey"], - aws_session_token=credentials["SessionToken"], - ) - - try: - # Access the image that needs to be split - image = ec2_res.Image(copy_ami) - - root_drive: Dict[str, Any] = {} - drives: Dict[str, Any] = {} - - # separate the root drive from the other drives - devices: List[Any] = image.block_device_mappings - for device in devices: - if "Ebs" in device: - if device["DeviceName"] == image.root_device_name: - print(f"Found Root! {device}") - root_drive: Dict[str, Any] = device - else: - drives[device["DeviceName"]] = device["Ebs"] - - # have to remove the encrypted flag - del root_drive["Ebs"]["Encrypted"] - - # create a new AMI with only the root - response = ec2_res.register_image( - Architecture=image.architecture, - BlockDeviceMappings=[root_drive], - Name=f"root-{copy_ami}", - RootDeviceName=image.root_device_name, - VirtualizationType=image.virtualization_type, - ) - - root_ami = response.id - - for drive in drives: - print(drives[drive]) - ec2_res.create_tags( - Resources=[root_ami], Tags=[{"Key": f"Drive-{drive}", "Value": json.dumps(drives[drive])}], - ) - - # clean up original image - image.deregister() - except Exception as e: - print(e) - return "" - - MigrationStateHandler().update_state(state="IMAGE_SPLIT", machine_name=instance_name) - - return root_ami diff --git a/step/lambdas/update_status.py b/step/lambdas/update_status.py deleted file mode 100644 index 8df7eb3dd..000000000 --- a/step/lambdas/update_status.py +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -"""AWS Lambda to read from a SQS queue and pass the information to service now.""" -from __future__ import annotations - -import json -import os -from typing import Any, Dict - -import boto3 - -print("Loading function update_status") - - -def lambda_handler(event: Dict[str, Any], context: Any) -> bool: - """Handle signaling and entry into the AWS Lambda.""" - print("Received event: ", json.dumps(event, indent=2)) - - for record in event["Records"]: - payload = record["body"] - print(str(payload)) - - return True diff --git a/step/provider.tf b/step/provider.tf deleted file mode 100644 index 4602a7cd7..000000000 --- a/step/provider.tf +++ /dev/null @@ -1,4 +0,0 @@ - -provider "aws" { - region = "${var.region}" -} diff --git a/step/sqs.tf b/step/sqs.tf deleted file mode 100644 index e5dcf75c7..000000000 --- a/step/sqs.tf +++ /dev/null @@ -1,11 +0,0 @@ -resource "aws_sqs_queue" "event_queue" { - name = "cloudendure-migration-queue" - delay_seconds = 10 - message_retention_seconds = 86400 - receive_wait_time_seconds = 10 - redrive_policy = "{\"deadLetterTargetArn\":\"${aws_sqs_queue.dead_letter_queue.arn}\",\"maxReceiveCount\":4}" -} - -resource "aws_sqs_queue" "dead_letter_queue" { - name = "cloudendure-dead-letter-queue" -} \ No newline at end of file diff --git a/step/step-function.tf b/step/step-function.tf deleted file mode 100644 index e8fcd7b46..000000000 --- a/step/step-function.tf +++ /dev/null @@ -1,255 +0,0 @@ -resource "aws_sfn_state_machine" "rehost_migration" { - name = "ce-rehost-migration" - role_arn = "${aws_iam_role.iam_for_stepfunction.arn}" - - definition = < Date: Tue, 13 Jul 2021 14:54:54 -0400 Subject: [PATCH 2/8] Regenerating the client to make sure I'm up to date --- .gitignore | 7 +- .gitlab-ci.yml | 24 + .openapi-generator-ignore | 23 + .openapi-generator/FILES | 443 ++++++++++++++++++ .openapi-generator/VERSION | 1 + .travis.yml | 13 + cloudendure/__init__.py | 14 +- cloudendure/api/account_api.py | 34 +- cloudendure/api/actions_api.py | 219 ++------- cloudendure/api/authentication_api.py | 34 +- cloudendure/api/blueprint_api.py | 101 +--- cloudendure/api/cloud_api.py | 166 ++----- cloudendure/api/cloud_credentials_api.py | 116 ++--- cloudendure/api/default_api.py | 220 +++------ cloudendure/api/licensing_api.py | 75 +-- cloudendure/api/machines_api.py | 173 ++----- cloudendure/api/project_api.py | 194 ++------ cloudendure/api/recovery_plans_api.py | 135 ++---- cloudendure/api/replication_api.py | 157 ++----- cloudendure/api/user_api.py | 83 +--- cloudendure/api_client.py | 24 +- cloudendure/configuration.py | 9 +- cloudendure/exceptions.py | 2 +- cloudendure/model/account.py | 9 +- .../model/account_ce_admin_properties.py | 9 +- cloudendure/model/account_link.py | 9 +- cloudendure/model/account_link_list.py | 9 +- cloudendure/model/account_request.py | 13 +- cloudendure/model/account_request_list.py | 9 +- cloudendure/model/accounts_list.py | 9 +- .../agent_next_replication_init_request.py | 9 +- cloudendure/model/all_project_features.py | 9 +- cloudendure/model/audit_log.py | 9 +- cloudendure/model/audit_log_changed_field.py | 9 +- cloudendure/model/audit_log_entry.py | 9 +- .../audit_log_entry_participating_machines.py | 9 +- cloudendure/model/bandwidth_throttling.py | 9 +- cloudendure/model/blueprint.py | 19 +- cloudendure/model/blueprint_disks.py | 17 +- cloudendure/model/blueprint_list.py | 9 +- cloudendure/model/cloud.py | 9 +- cloudendure/model/cloud_credentials.py | 9 +- cloudendure/model/cloud_credentials_list.py | 9 +- .../model/cloud_credentials_request.py | 9 +- cloudendure/model/clouds_list.py | 9 +- cloudendure/model/compute_location.py | 9 +- cloudendure/model/configurations.py | 9 +- cloudendure/model/configurations_list.py | 9 +- cloudendure/model/cslp_item.py | 9 +- cloudendure/model/cslp_request.py | 9 +- cloudendure/model/cslp_result.py | 15 +- cloudendure/model/disk_config.py | 17 +- cloudendure/model/dynamic_configuration.py | 9 +- cloudendure/model/error.py | 9 +- cloudendure/model/extended_account_info.py | 9 +- .../model/gcp_machines_finance_data.py | 9 +- .../identity_provider_redirect_response.py | 9 +- cloudendure/model/initialization_step.py | 9 +- cloudendure/model/inline_object.py | 9 +- cloudendure/model/inline_object1.py | 9 +- cloudendure/model/inline_object10.py | 9 +- cloudendure/model/inline_object2.py | 9 +- cloudendure/model/inline_object3.py | 9 +- cloudendure/model/inline_object4.py | 9 +- cloudendure/model/inline_object5.py | 9 +- cloudendure/model/inline_object6.py | 9 +- cloudendure/model/inline_object7.py | 9 +- cloudendure/model/inline_object8.py | 9 +- cloudendure/model/inline_object9.py | 9 +- cloudendure/model/inline_response200.py | 9 +- cloudendure/model/inline_response2001.py | 9 +- cloudendure/model/inline_response2002.py | 9 +- cloudendure/model/job.py | 9 +- cloudendure/model/job_log.py | 9 +- cloudendure/model/job_target_machine.py | 9 +- cloudendure/model/jobs_list.py | 9 +- cloudendure/model/key_value_list.py | 9 +- .../model/launch_machines_parameters.py | 9 +- ...aunch_machines_parameters_debug_scripts.py | 9 +- cloudendure/model/license.py | 17 +- .../model/license_ce_admin_properties.py | 9 +- cloudendure/model/license_features.py | 9 +- cloudendure/model/license_list.py | 9 +- cloudendure/model/list_users_result.py | 9 +- cloudendure/model/list_users_results.py | 9 +- cloudendure/model/logical_location.py | 9 +- cloudendure/model/machine.py | 9 +- .../machine_and_path_and_point_in_time.py | 9 +- .../model/machine_and_point_in_time.py | 9 +- cloudendure/model/machine_license.py | 9 +- cloudendure/model/machine_life_cycle.py | 9 +- .../machine_replication_configuration.py | 9 +- cloudendure/model/machine_replication_info.py | 9 +- ...hine_replication_info_initiation_states.py | 9 +- ...eplication_info_initiation_states_items.py | 9 +- cloudendure/model/machine_snapshot_credits.py | 9 +- .../model/machine_source_properties.py | 9 +- .../model/machine_source_properties_cpu.py | 9 +- .../model/machine_source_properties_disks.py | 9 +- ...ource_properties_installed_applications.py | 9 +- ...properties_installed_applications_items.py | 9 +- ...hine_source_properties_running_services.py | 9 +- ...ource_properties_running_services_items.py | 9 +- .../model/machine_throttle_time_seconds.py | 9 +- cloudendure/model/machines_list.py | 9 +- .../machines_list_invalid_ids_and_job.py | 9 +- cloudendure/model/network_interface.py | 9 +- cloudendure/model/outpost.py | 9 +- cloudendure/model/point_in_time.py | 9 +- cloudendure/model/point_in_time_list.py | 9 +- cloudendure/model/populate_job_names.py | 9 +- cloudendure/model/populate_job_params.py | 9 +- cloudendure/model/project.py | 15 +- .../model/project_ce_admin_properties.py | 9 +- cloudendure/model/project_features.py | 9 +- cloudendure/model/project_storage.py | 9 +- .../model/project_storage_working_storage.py | 9 +- cloudendure/model/projects_and_users.py | 9 +- cloudendure/model/projects_and_users_items.py | 9 +- cloudendure/model/projects_list.py | 9 +- cloudendure/model/recovery_plan.py | 9 +- cloudendure/model/recovery_plan_list.py | 9 +- cloudendure/model/recovery_plan_step.py | 9 +- cloudendure/model/recovery_plan_steps.py | 9 +- cloudendure/model/region.py | 9 +- cloudendure/model/regions_list.py | 9 +- cloudendure/model/replica.py | 9 +- .../model/replication_configuration.py | 9 +- .../model/replication_configuration_list.py | 9 +- ...lication_configuration_replication_tags.py | 9 +- cloudendure/model/saml_settings.py | 9 +- cloudendure/model/security_group.py | 9 +- cloudendure/model/storage_location.py | 9 +- cloudendure/model/subnet.py | 9 +- cloudendure/model/time.py | 9 +- cloudendure/model/updateable_scripts.py | 9 +- .../model/updateable_scripts_result.py | 9 +- ...eable_scripts_result_on_premise_volumes.py | 9 +- cloudendure/model/upgrade_counter_delay.py | 9 +- cloudendure/model/usage.py | 9 +- cloudendure/model/usage_list.py | 9 +- cloudendure/model/user.py | 9 +- cloudendure/model/user_report.py | 9 +- .../user_report_gcp_machines_finance_data.py | 9 +- cloudendure/model/user_reports.py | 9 +- cloudendure/model/user_settings.py | 9 +- .../model/user_settings_send_notifications.py | 9 +- cloudendure/model/users_and_roles.py | 9 +- cloudendure/model/users_and_roles_items.py | 9 +- cloudendure/model/users_list.py | 9 +- cloudendure/model_utils.py | 12 +- cloudendure/models/__init__.py | 8 +- cloudendure/rest.py | 5 +- git_push.sh | 58 +++ requirements.txt | 3 + setup.cfg | 2 + setup.py | 42 ++ test-requirements.txt | 1 + tox.ini | 9 + 159 files changed, 1464 insertions(+), 2136 deletions(-) create mode 100644 .gitlab-ci.yml create mode 100644 .openapi-generator-ignore create mode 100644 .openapi-generator/FILES create mode 100644 .openapi-generator/VERSION create mode 100644 .travis.yml create mode 100644 git_push.sh create mode 100644 requirements.txt create mode 100644 setup.cfg create mode 100644 setup.py create mode 100644 test-requirements.txt create mode 100644 tox.ini diff --git a/.gitignore b/.gitignore index 5baeaaa7b..43995bd42 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ __pycache__/ # Distribution / packaging .Python env/ +build/ develop-eggs/ dist/ downloads/ @@ -63,9 +64,3 @@ target/ #Ipython Notebook .ipynb_checkpoints - -# vim saves -*.sw* -my-test.py - -.openapi-generator/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 000000000..1424ba809 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,24 @@ +# ref: https://docs.gitlab.com/ee/ci/README.html + +stages: + - test + +.tests: + stage: test + script: + - pip install -r requirements.txt + - pip install -r test-requirements.txt + - pytest --cov=cloudendure + +test-3.6: + extends: .tests + image: python:3.6-alpine +test-3.7: + extends: .tests + image: python:3.7-alpine +test-3.8: + extends: .tests + image: python:3.8-alpine +test-3.9: + extends: .tests + image: python:3.9-alpine diff --git a/.openapi-generator-ignore b/.openapi-generator-ignore new file mode 100644 index 000000000..7484ee590 --- /dev/null +++ b/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES new file mode 100644 index 000000000..d41170a18 --- /dev/null +++ b/.openapi-generator/FILES @@ -0,0 +1,443 @@ +.gitignore +.gitlab-ci.yml +.openapi-generator-ignore +.travis.yml +README.md +cloudendure/__init__.py +cloudendure/api/__init__.py +cloudendure/api/account_api.py +cloudendure/api/actions_api.py +cloudendure/api/authentication_api.py +cloudendure/api/blueprint_api.py +cloudendure/api/cloud_api.py +cloudendure/api/cloud_credentials_api.py +cloudendure/api/default_api.py +cloudendure/api/licensing_api.py +cloudendure/api/machines_api.py +cloudendure/api/project_api.py +cloudendure/api/recovery_plans_api.py +cloudendure/api/replication_api.py +cloudendure/api/user_api.py +cloudendure/api_client.py +cloudendure/apis/__init__.py +cloudendure/configuration.py +cloudendure/exceptions.py +cloudendure/model/__init__.py +cloudendure/model/account.py +cloudendure/model/account_ce_admin_properties.py +cloudendure/model/account_link.py +cloudendure/model/account_link_list.py +cloudendure/model/account_request.py +cloudendure/model/account_request_list.py +cloudendure/model/accounts_list.py +cloudendure/model/agent_next_replication_init_request.py +cloudendure/model/all_project_features.py +cloudendure/model/audit_log.py +cloudendure/model/audit_log_changed_field.py +cloudendure/model/audit_log_entry.py +cloudendure/model/audit_log_entry_participating_machines.py +cloudendure/model/bandwidth_throttling.py +cloudendure/model/blueprint.py +cloudendure/model/blueprint_disks.py +cloudendure/model/blueprint_list.py +cloudendure/model/cloud.py +cloudendure/model/cloud_credentials.py +cloudendure/model/cloud_credentials_list.py +cloudendure/model/cloud_credentials_request.py +cloudendure/model/clouds_list.py +cloudendure/model/compute_location.py +cloudendure/model/configurations.py +cloudendure/model/configurations_list.py +cloudendure/model/cslp_item.py +cloudendure/model/cslp_request.py +cloudendure/model/cslp_result.py +cloudendure/model/disk_config.py +cloudendure/model/dynamic_configuration.py +cloudendure/model/error.py +cloudendure/model/extended_account_info.py +cloudendure/model/gcp_machines_finance_data.py +cloudendure/model/identity_provider_redirect_response.py +cloudendure/model/initialization_step.py +cloudendure/model/inline_object.py +cloudendure/model/inline_object1.py +cloudendure/model/inline_object10.py +cloudendure/model/inline_object2.py +cloudendure/model/inline_object3.py +cloudendure/model/inline_object4.py +cloudendure/model/inline_object5.py +cloudendure/model/inline_object6.py +cloudendure/model/inline_object7.py +cloudendure/model/inline_object8.py +cloudendure/model/inline_object9.py +cloudendure/model/inline_response200.py +cloudendure/model/inline_response2001.py +cloudendure/model/inline_response2002.py +cloudendure/model/job.py +cloudendure/model/job_log.py +cloudendure/model/job_target_machine.py +cloudendure/model/jobs_list.py +cloudendure/model/key_value_list.py +cloudendure/model/launch_machines_parameters.py +cloudendure/model/launch_machines_parameters_debug_scripts.py +cloudendure/model/license.py +cloudendure/model/license_ce_admin_properties.py +cloudendure/model/license_features.py +cloudendure/model/license_list.py +cloudendure/model/list_users_result.py +cloudendure/model/list_users_results.py +cloudendure/model/logical_location.py +cloudendure/model/machine.py +cloudendure/model/machine_and_path_and_point_in_time.py +cloudendure/model/machine_and_point_in_time.py +cloudendure/model/machine_license.py +cloudendure/model/machine_life_cycle.py +cloudendure/model/machine_replication_configuration.py +cloudendure/model/machine_replication_info.py +cloudendure/model/machine_replication_info_initiation_states.py +cloudendure/model/machine_replication_info_initiation_states_items.py +cloudendure/model/machine_snapshot_credits.py +cloudendure/model/machine_source_properties.py +cloudendure/model/machine_source_properties_cpu.py +cloudendure/model/machine_source_properties_disks.py +cloudendure/model/machine_source_properties_installed_applications.py +cloudendure/model/machine_source_properties_installed_applications_items.py +cloudendure/model/machine_source_properties_running_services.py +cloudendure/model/machine_source_properties_running_services_items.py +cloudendure/model/machine_throttle_time_seconds.py +cloudendure/model/machines_list.py +cloudendure/model/machines_list_invalid_ids_and_job.py +cloudendure/model/network_interface.py +cloudendure/model/outpost.py +cloudendure/model/point_in_time.py +cloudendure/model/point_in_time_list.py +cloudendure/model/populate_job_names.py +cloudendure/model/populate_job_params.py +cloudendure/model/project.py +cloudendure/model/project_ce_admin_properties.py +cloudendure/model/project_features.py +cloudendure/model/project_storage.py +cloudendure/model/project_storage_working_storage.py +cloudendure/model/projects_and_users.py +cloudendure/model/projects_and_users_items.py +cloudendure/model/projects_list.py +cloudendure/model/recovery_plan.py +cloudendure/model/recovery_plan_list.py +cloudendure/model/recovery_plan_step.py +cloudendure/model/recovery_plan_steps.py +cloudendure/model/region.py +cloudendure/model/regions_list.py +cloudendure/model/replica.py +cloudendure/model/replication_configuration.py +cloudendure/model/replication_configuration_list.py +cloudendure/model/replication_configuration_replication_tags.py +cloudendure/model/saml_settings.py +cloudendure/model/security_group.py +cloudendure/model/storage_location.py +cloudendure/model/subnet.py +cloudendure/model/time.py +cloudendure/model/updateable_scripts.py +cloudendure/model/updateable_scripts_result.py +cloudendure/model/updateable_scripts_result_on_premise_volumes.py +cloudendure/model/upgrade_counter_delay.py +cloudendure/model/usage.py +cloudendure/model/usage_list.py +cloudendure/model/user.py +cloudendure/model/user_report.py +cloudendure/model/user_report_gcp_machines_finance_data.py +cloudendure/model/user_reports.py +cloudendure/model/user_settings.py +cloudendure/model/user_settings_send_notifications.py +cloudendure/model/users_and_roles.py +cloudendure/model/users_and_roles_items.py +cloudendure/model/users_list.py +cloudendure/model_utils.py +cloudendure/models/__init__.py +cloudendure/models/__init__.py +cloudendure/rest.py +docs/Account.md +docs/AccountApi.md +docs/AccountCeAdminProperties.md +docs/AccountLink.md +docs/AccountLinkList.md +docs/AccountRequest.md +docs/AccountRequestList.md +docs/AccountsList.md +docs/ActionsApi.md +docs/AgentNextReplicationInitRequest.md +docs/AllProjectFeatures.md +docs/AuditLog.md +docs/AuditLogChangedField.md +docs/AuditLogEntry.md +docs/AuditLogEntryParticipatingMachines.md +docs/AuthenticationApi.md +docs/BandwidthThrottling.md +docs/Blueprint.md +docs/BlueprintApi.md +docs/BlueprintDisks.md +docs/BlueprintList.md +docs/CSLPItem.md +docs/CSLPRequest.md +docs/CSLPResult.md +docs/Cloud.md +docs/CloudApi.md +docs/CloudCredentials.md +docs/CloudCredentialsApi.md +docs/CloudCredentialsList.md +docs/CloudCredentialsRequest.md +docs/CloudsList.md +docs/ComputeLocation.md +docs/Configurations.md +docs/ConfigurationsList.md +docs/DefaultApi.md +docs/DiskConfig.md +docs/DynamicConfiguration.md +docs/Error.md +docs/ExtendedAccountInfo.md +docs/GcpMachinesFinanceData.md +docs/IdentityProviderRedirectResponse.md +docs/InitializationStep.md +docs/InlineObject.md +docs/InlineObject1.md +docs/InlineObject10.md +docs/InlineObject2.md +docs/InlineObject3.md +docs/InlineObject4.md +docs/InlineObject5.md +docs/InlineObject6.md +docs/InlineObject7.md +docs/InlineObject8.md +docs/InlineObject9.md +docs/InlineResponse200.md +docs/InlineResponse2001.md +docs/InlineResponse2002.md +docs/Job.md +docs/JobLog.md +docs/JobTargetMachine.md +docs/JobsList.md +docs/KeyValueList.md +docs/LaunchMachinesParameters.md +docs/LaunchMachinesParametersDebugScripts.md +docs/License.md +docs/LicenseCeAdminProperties.md +docs/LicenseFeatures.md +docs/LicenseList.md +docs/LicensingApi.md +docs/ListUsersResult.md +docs/ListUsersResults.md +docs/LogicalLocation.md +docs/Machine.md +docs/MachineAndPathAndPointInTime.md +docs/MachineAndPointInTime.md +docs/MachineLicense.md +docs/MachineLifeCycle.md +docs/MachineReplicationConfiguration.md +docs/MachineReplicationInfo.md +docs/MachineReplicationInfoInitiationStates.md +docs/MachineReplicationInfoInitiationStatesItems.md +docs/MachineSnapshotCredits.md +docs/MachineSourceProperties.md +docs/MachineSourcePropertiesCpu.md +docs/MachineSourcePropertiesDisks.md +docs/MachineSourcePropertiesInstalledApplications.md +docs/MachineSourcePropertiesInstalledApplicationsItems.md +docs/MachineSourcePropertiesRunningServices.md +docs/MachineSourcePropertiesRunningServicesItems.md +docs/MachineThrottleTimeSeconds.md +docs/MachinesApi.md +docs/MachinesList.md +docs/MachinesListInvalidIDsAndJob.md +docs/NetworkInterface.md +docs/Outpost.md +docs/PointInTime.md +docs/PointInTimeList.md +docs/PopulateJobNames.md +docs/PopulateJobParams.md +docs/Project.md +docs/ProjectApi.md +docs/ProjectCeAdminProperties.md +docs/ProjectFeatures.md +docs/ProjectStorage.md +docs/ProjectStorageWorkingStorage.md +docs/ProjectsAndUsers.md +docs/ProjectsAndUsersItems.md +docs/ProjectsList.md +docs/RecoveryPlan.md +docs/RecoveryPlanList.md +docs/RecoveryPlanStep.md +docs/RecoveryPlanSteps.md +docs/RecoveryPlansApi.md +docs/Region.md +docs/RegionsList.md +docs/Replica.md +docs/ReplicationApi.md +docs/ReplicationConfiguration.md +docs/ReplicationConfigurationList.md +docs/ReplicationConfigurationReplicationTags.md +docs/SamlSettings.md +docs/SecurityGroup.md +docs/StorageLocation.md +docs/Subnet.md +docs/Time.md +docs/UpdateableScripts.md +docs/UpdateableScriptsResult.md +docs/UpdateableScriptsResultOnPremiseVolumes.md +docs/UpgradeCounterDelay.md +docs/Usage.md +docs/UsageList.md +docs/User.md +docs/UserApi.md +docs/UserReport.md +docs/UserReportGcpMachinesFinanceData.md +docs/UserReports.md +docs/UserSettings.md +docs/UserSettingsSendNotifications.md +docs/UsersAndRoles.md +docs/UsersAndRolesItems.md +docs/UsersList.md +git_push.sh +requirements.txt +setup.cfg +setup.py +test-requirements.txt +test/__init__.py +test/test_account.py +test/test_account_api.py +test/test_account_ce_admin_properties.py +test/test_account_link.py +test/test_account_link_list.py +test/test_account_request.py +test/test_account_request_list.py +test/test_accounts_list.py +test/test_actions_api.py +test/test_agent_next_replication_init_request.py +test/test_all_project_features.py +test/test_audit_log.py +test/test_audit_log_changed_field.py +test/test_audit_log_entry.py +test/test_audit_log_entry_participating_machines.py +test/test_authentication_api.py +test/test_bandwidth_throttling.py +test/test_blueprint.py +test/test_blueprint_api.py +test/test_blueprint_disks.py +test/test_blueprint_list.py +test/test_cloud.py +test/test_cloud_api.py +test/test_cloud_credentials.py +test/test_cloud_credentials_api.py +test/test_cloud_credentials_list.py +test/test_cloud_credentials_request.py +test/test_clouds_list.py +test/test_compute_location.py +test/test_configurations.py +test/test_configurations_list.py +test/test_cslp_item.py +test/test_cslp_request.py +test/test_cslp_result.py +test/test_default_api.py +test/test_disk_config.py +test/test_dynamic_configuration.py +test/test_error.py +test/test_extended_account_info.py +test/test_gcp_machines_finance_data.py +test/test_identity_provider_redirect_response.py +test/test_initialization_step.py +test/test_inline_object.py +test/test_inline_object1.py +test/test_inline_object10.py +test/test_inline_object2.py +test/test_inline_object3.py +test/test_inline_object4.py +test/test_inline_object5.py +test/test_inline_object6.py +test/test_inline_object7.py +test/test_inline_object8.py +test/test_inline_object9.py +test/test_inline_response200.py +test/test_inline_response2001.py +test/test_inline_response2002.py +test/test_job.py +test/test_job_log.py +test/test_job_target_machine.py +test/test_jobs_list.py +test/test_key_value_list.py +test/test_launch_machines_parameters.py +test/test_launch_machines_parameters_debug_scripts.py +test/test_license.py +test/test_license_ce_admin_properties.py +test/test_license_features.py +test/test_license_list.py +test/test_licensing_api.py +test/test_list_users_result.py +test/test_list_users_results.py +test/test_logical_location.py +test/test_machine.py +test/test_machine_and_path_and_point_in_time.py +test/test_machine_and_point_in_time.py +test/test_machine_license.py +test/test_machine_life_cycle.py +test/test_machine_replication_configuration.py +test/test_machine_replication_info.py +test/test_machine_replication_info_initiation_states.py +test/test_machine_replication_info_initiation_states_items.py +test/test_machine_snapshot_credits.py +test/test_machine_source_properties.py +test/test_machine_source_properties_cpu.py +test/test_machine_source_properties_disks.py +test/test_machine_source_properties_installed_applications.py +test/test_machine_source_properties_installed_applications_items.py +test/test_machine_source_properties_running_services.py +test/test_machine_source_properties_running_services_items.py +test/test_machine_throttle_time_seconds.py +test/test_machines_api.py +test/test_machines_list.py +test/test_machines_list_invalid_ids_and_job.py +test/test_network_interface.py +test/test_outpost.py +test/test_point_in_time.py +test/test_point_in_time_list.py +test/test_populate_job_names.py +test/test_populate_job_params.py +test/test_project.py +test/test_project_api.py +test/test_project_ce_admin_properties.py +test/test_project_features.py +test/test_project_storage.py +test/test_project_storage_working_storage.py +test/test_projects_and_users.py +test/test_projects_and_users_items.py +test/test_projects_list.py +test/test_recovery_plan.py +test/test_recovery_plan_list.py +test/test_recovery_plan_step.py +test/test_recovery_plan_steps.py +test/test_recovery_plans_api.py +test/test_region.py +test/test_regions_list.py +test/test_replica.py +test/test_replication_api.py +test/test_replication_configuration.py +test/test_replication_configuration_list.py +test/test_replication_configuration_replication_tags.py +test/test_saml_settings.py +test/test_security_group.py +test/test_storage_location.py +test/test_subnet.py +test/test_time.py +test/test_updateable_scripts.py +test/test_updateable_scripts_result.py +test/test_updateable_scripts_result_on_premise_volumes.py +test/test_upgrade_counter_delay.py +test/test_usage.py +test/test_usage_list.py +test/test_user.py +test/test_user_api.py +test/test_user_report.py +test/test_user_report_gcp_machines_finance_data.py +test/test_user_reports.py +test/test_user_settings.py +test/test_user_settings_send_notifications.py +test/test_users_and_roles.py +test/test_users_and_roles_items.py +test/test_users_list.py +tox.ini diff --git a/.openapi-generator/VERSION b/.openapi-generator/VERSION new file mode 100644 index 000000000..32f3eaad0 --- /dev/null +++ b/.openapi-generator/VERSION @@ -0,0 +1 @@ +5.0.1 \ No newline at end of file diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..842e3ff83 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,13 @@ +# ref: https://docs.travis-ci.com/user/languages/python +language: python +python: + - "3.6" + - "3.7" + - "3.8" + - "3.9" +# command to install dependencies +install: + - "pip install -r requirements.txt" + - "pip install -r test-requirements.txt" +# command to run tests +script: pytest --cov=cloudendure diff --git a/cloudendure/__init__.py b/cloudendure/__init__.py index 850bc2c48..9f47af521 100644 --- a/cloudendure/__init__.py +++ b/cloudendure/__init__.py @@ -19,11 +19,9 @@ from cloudendure.configuration import Configuration # import exceptions -from cloudendure.exceptions import ( - ApiAttributeError, - ApiException, - ApiKeyError, - ApiTypeError, - ApiValueError, - OpenApiException, -) +from cloudendure.exceptions import OpenApiException +from cloudendure.exceptions import ApiAttributeError +from cloudendure.exceptions import ApiTypeError +from cloudendure.exceptions import ApiValueError +from cloudendure.exceptions import ApiKeyError +from cloudendure.exceptions import ApiException diff --git a/cloudendure/api/account_api.py b/cloudendure/api/account_api.py index ace3673d4..d4728d70d 100644 --- a/cloudendure/api/account_api.py +++ b/cloudendure/api/account_api.py @@ -11,11 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient -from cloudendure.api_client import Endpoint as _Endpoint -from cloudendure.model.account import Account -from cloudendure.model_utils import ( - check_allowed_values, # noqa: F401 +from cloudendure.api_client import ApiClient, Endpoint as _Endpoint +from cloudendure.model_utils import ( # noqa: F401 + check_allowed_values, check_validations, date, datetime, @@ -23,6 +21,7 @@ none_type, validate_and_convert_types, ) +from cloudendure.model.account import Account class AccountApi(object): @@ -97,12 +96,8 @@ def __accounts_account_id_get(self, account_id, **kwargs): "servers": None, }, params_map={ - "all": [ - "account_id", - ], - "required": [ - "account_id", - ], + "all": ["account_id",], + "required": ["account_id",], "nullable": [], "enum": [], "validation": [], @@ -110,21 +105,12 @@ def __accounts_account_id_get(self, account_id, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "account_id": (str,), - }, - "attribute_map": { - "account_id": "accountId", - }, - "location_map": { - "account_id": "path", - }, + "openapi_types": {"account_id": (str,),}, + "attribute_map": {"account_id": "accountId",}, + "location_map": {"account_id": "path",}, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__accounts_account_id_get, ) diff --git a/cloudendure/api/actions_api.py b/cloudendure/api/actions_api.py index c1681da5f..33456bfc2 100644 --- a/cloudendure/api/actions_api.py +++ b/cloudendure/api/actions_api.py @@ -11,8 +11,16 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient -from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.api_client import ApiClient, Endpoint as _Endpoint +from cloudendure.model_utils import ( # noqa: F401 + check_allowed_values, + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types, +) from cloudendure.model.error import Error from cloudendure.model.inline_object3 import InlineObject3 from cloudendure.model.inline_object4 import InlineObject4 @@ -25,15 +33,6 @@ from cloudendure.model.machines_list_invalid_ids_and_job import ( MachinesListInvalidIDsAndJob, ) -from cloudendure.model_utils import ( - check_allowed_values, # noqa: F401 - check_validations, - date, - datetime, - file_type, - none_type, - validate_and_convert_types, -) class ActionsApi(object): @@ -111,30 +110,16 @@ def __projects_project_id_jobs_get(self, project_id, **kwargs): "servers": None, }, params_map={ - "all": [ - "project_id", - "offset", - "limit", - ], - "required": [ - "project_id", - ], + "all": ["project_id", "offset", "limit",], + "required": ["project_id",], "nullable": [], "enum": [], - "validation": [ - "offset", - "limit", - ], + "validation": ["offset", "limit",], }, root_map={ "validations": { - ("offset",): { - "inclusive_minimum": 0, - }, - ("limit",): { - "inclusive_maximum": 1500, - "inclusive_minimum": 0, - }, + ("offset",): {"inclusive_minimum": 0,}, + ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, }, "allowed_values": {}, "openapi_types": { @@ -154,10 +139,7 @@ def __projects_project_id_jobs_get(self, project_id, **kwargs): }, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__projects_project_id_jobs_get, ) @@ -224,14 +206,8 @@ def __projects_project_id_jobs_job_id_get(self, project_id, job_id, **kwargs): "servers": None, }, params_map={ - "all": [ - "project_id", - "job_id", - ], - "required": [ - "project_id", - "job_id", - ], + "all": ["project_id", "job_id",], + "required": ["project_id", "job_id",], "nullable": [], "enum": [], "validation": [], @@ -239,24 +215,12 @@ def __projects_project_id_jobs_job_id_get(self, project_id, job_id, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "project_id": (str,), - "job_id": (str,), - }, - "attribute_map": { - "project_id": "projectId", - "job_id": "jobId", - }, - "location_map": { - "project_id": "path", - "job_id": "path", - }, + "openapi_types": {"project_id": (str,), "job_id": (str,),}, + "attribute_map": {"project_id": "projectId", "job_id": "jobId",}, + "location_map": {"project_id": "path", "job_id": "path",}, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__projects_project_id_jobs_job_id_get, ) @@ -326,14 +290,8 @@ def __projects_project_id_launch_machines_post( "servers": None, }, params_map={ - "all": [ - "project_id", - "launch_machines", - ], - "required": [ - "project_id", - "launch_machines", - ], + "all": ["project_id", "launch_machines",], + "required": ["project_id", "launch_machines",], "nullable": [], "enum": [], "validation": [], @@ -345,13 +303,8 @@ def __projects_project_id_launch_machines_post( "project_id": (str,), "launch_machines": (LaunchMachinesParameters,), }, - "attribute_map": { - "project_id": "projectId", - }, - "location_map": { - "project_id": "path", - "launch_machines": "body", - }, + "attribute_map": {"project_id": "projectId",}, + "location_map": {"project_id": "path", "launch_machines": "body",}, "collection_format_map": {}, }, headers_map={ @@ -427,14 +380,8 @@ def __projects_project_id_move_machines_post( "servers": None, }, params_map={ - "all": [ - "project_id", - "move_machines_params", - ], - "required": [ - "project_id", - "move_machines_params", - ], + "all": ["project_id", "move_machines_params",], + "required": ["project_id", "move_machines_params",], "nullable": [], "enum": [], "validation": [], @@ -446,13 +393,8 @@ def __projects_project_id_move_machines_post( "project_id": (str,), "move_machines_params": (InlineObject4,), }, - "attribute_map": { - "project_id": "projectId", - }, - "location_map": { - "project_id": "path", - "move_machines_params": "body", - }, + "attribute_map": {"project_id": "projectId",}, + "location_map": {"project_id": "path", "move_machines_params": "body",}, "collection_format_map": {}, }, headers_map={ @@ -528,14 +470,8 @@ def __projects_project_id_pause_replication_post( "servers": None, }, params_map={ - "all": [ - "project_id", - "machine_ids", - ], - "required": [ - "project_id", - "machine_ids", - ], + "all": ["project_id", "machine_ids",], + "required": ["project_id", "machine_ids",], "nullable": [], "enum": [], "validation": [], @@ -547,13 +483,8 @@ def __projects_project_id_pause_replication_post( "project_id": (str,), "machine_ids": (InlineObject9,), }, - "attribute_map": { - "project_id": "projectId", - }, - "location_map": { - "project_id": "path", - "machine_ids": "body", - }, + "attribute_map": {"project_id": "projectId",}, + "location_map": {"project_id": "path", "machine_ids": "body",}, "collection_format_map": {}, }, headers_map={ @@ -629,14 +560,8 @@ def __projects_project_id_replicas_delete( "servers": None, }, params_map={ - "all": [ - "project_id", - "replica_ids", - ], - "required": [ - "project_id", - "replica_ids", - ], + "all": ["project_id", "replica_ids",], + "required": ["project_id", "replica_ids",], "nullable": [], "enum": [], "validation": [], @@ -648,13 +573,8 @@ def __projects_project_id_replicas_delete( "project_id": (str,), "replica_ids": (InlineObject5,), }, - "attribute_map": { - "project_id": "projectId", - }, - "location_map": { - "project_id": "path", - "replica_ids": "body", - }, + "attribute_map": {"project_id": "projectId",}, + "location_map": {"project_id": "path", "replica_ids": "body",}, "collection_format_map": {}, }, headers_map={ @@ -725,12 +645,8 @@ def __projects_project_id_reverse_replication_post(self, project_id, **kwargs): "servers": None, }, params_map={ - "all": [ - "project_id", - ], - "required": [ - "project_id", - ], + "all": ["project_id",], + "required": ["project_id",], "nullable": [], "enum": [], "validation": [], @@ -738,21 +654,12 @@ def __projects_project_id_reverse_replication_post(self, project_id, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "project_id": (str,), - }, - "attribute_map": { - "project_id": "projectId", - }, - "location_map": { - "project_id": "path", - }, + "openapi_types": {"project_id": (str,),}, + "attribute_map": {"project_id": "projectId",}, + "location_map": {"project_id": "path",}, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__projects_project_id_reverse_replication_post, ) @@ -822,14 +729,8 @@ def __projects_project_id_start_replication_post( "servers": None, }, params_map={ - "all": [ - "project_id", - "machine_ids", - ], - "required": [ - "project_id", - "machine_ids", - ], + "all": ["project_id", "machine_ids",], + "required": ["project_id", "machine_ids",], "nullable": [], "enum": [], "validation": [], @@ -841,13 +742,8 @@ def __projects_project_id_start_replication_post( "project_id": (str,), "machine_ids": (InlineObject3,), }, - "attribute_map": { - "project_id": "projectId", - }, - "location_map": { - "project_id": "path", - "machine_ids": "body", - }, + "attribute_map": {"project_id": "projectId",}, + "location_map": {"project_id": "path", "machine_ids": "body",}, "collection_format_map": {}, }, headers_map={ @@ -923,14 +819,8 @@ def __projects_project_id_stop_replication_post( "servers": None, }, params_map={ - "all": [ - "project_id", - "machine_ids", - ], - "required": [ - "project_id", - "machine_ids", - ], + "all": ["project_id", "machine_ids",], + "required": ["project_id", "machine_ids",], "nullable": [], "enum": [], "validation": [], @@ -942,13 +832,8 @@ def __projects_project_id_stop_replication_post( "project_id": (str,), "machine_ids": (InlineObject7,), }, - "attribute_map": { - "project_id": "projectId", - }, - "location_map": { - "project_id": "path", - "machine_ids": "body", - }, + "attribute_map": {"project_id": "projectId",}, + "location_map": {"project_id": "path", "machine_ids": "body",}, "collection_format_map": {}, }, headers_map={ diff --git a/cloudendure/api/authentication_api.py b/cloudendure/api/authentication_api.py index cd3e0e39c..5b9cffebc 100644 --- a/cloudendure/api/authentication_api.py +++ b/cloudendure/api/authentication_api.py @@ -11,13 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient -from cloudendure.api_client import Endpoint as _Endpoint -from cloudendure.model.error import Error -from cloudendure.model.inline_object1 import InlineObject1 -from cloudendure.model.user import User -from cloudendure.model_utils import ( - check_allowed_values, # noqa: F401 +from cloudendure.api_client import ApiClient, Endpoint as _Endpoint +from cloudendure.model_utils import ( # noqa: F401 + check_allowed_values, check_validations, date, datetime, @@ -25,6 +21,9 @@ none_type, validate_and_convert_types, ) +from cloudendure.model.error import Error +from cloudendure.model.inline_object1 import InlineObject1 +from cloudendure.model.user import User class AuthenticationApi(object): @@ -100,12 +99,8 @@ def __login_post(self, login_info, **kwargs): "servers": None, }, params_map={ - "all": [ - "login_info", - ], - "required": [ - "login_info", - ], + "all": ["login_info",], + "required": ["login_info",], "nullable": [], "enum": [], "validation": [], @@ -113,13 +108,9 @@ def __login_post(self, login_info, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "login_info": (InlineObject1,), - }, + "openapi_types": {"login_info": (InlineObject1,),}, "attribute_map": {}, - "location_map": { - "login_info": "body", - }, + "location_map": {"login_info": "body",}, "collection_format_map": {}, }, headers_map={ @@ -202,10 +193,7 @@ def __logout_post(self, **kwargs): "location_map": {}, "collection_format_map": {}, }, - headers_map={ - "accept": [], - "content_type": [], - }, + headers_map={"accept": [], "content_type": [],}, api_client=api_client, callable=__logout_post, ) diff --git a/cloudendure/api/blueprint_api.py b/cloudendure/api/blueprint_api.py index 445954cd2..8728626c5 100644 --- a/cloudendure/api/blueprint_api.py +++ b/cloudendure/api/blueprint_api.py @@ -11,12 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient -from cloudendure.api_client import Endpoint as _Endpoint -from cloudendure.model.blueprint import Blueprint -from cloudendure.model.blueprint_list import BlueprintList -from cloudendure.model_utils import ( - check_allowed_values, # noqa: F401 +from cloudendure.api_client import ApiClient, Endpoint as _Endpoint +from cloudendure.model_utils import ( # noqa: F401 + check_allowed_values, check_validations, date, datetime, @@ -24,6 +21,8 @@ none_type, validate_and_convert_types, ) +from cloudendure.model.blueprint import Blueprint +from cloudendure.model.blueprint_list import BlueprintList class BlueprintApi(object): @@ -102,14 +101,8 @@ def __projects_project_id_blueprints_blueprint_id_get( "servers": None, }, params_map={ - "all": [ - "project_id", - "blueprint_id", - ], - "required": [ - "project_id", - "blueprint_id", - ], + "all": ["project_id", "blueprint_id",], + "required": ["project_id", "blueprint_id",], "nullable": [], "enum": [], "validation": [], @@ -117,24 +110,15 @@ def __projects_project_id_blueprints_blueprint_id_get( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "project_id": (str,), - "blueprint_id": (str,), - }, + "openapi_types": {"project_id": (str,), "blueprint_id": (str,),}, "attribute_map": { "project_id": "projectId", "blueprint_id": "blueprintId", }, - "location_map": { - "project_id": "path", - "blueprint_id": "path", - }, + "location_map": {"project_id": "path", "blueprint_id": "path",}, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__projects_project_id_blueprints_blueprint_id_get, ) @@ -206,16 +190,8 @@ def __projects_project_id_blueprints_blueprint_id_patch( "servers": None, }, params_map={ - "all": [ - "project_id", - "blueprint_id", - "blueprint", - ], - "required": [ - "project_id", - "blueprint_id", - "blueprint", - ], + "all": ["project_id", "blueprint_id", "blueprint",], + "required": ["project_id", "blueprint_id", "blueprint",], "nullable": [], "enum": [], "validation": [], @@ -310,30 +286,16 @@ def __projects_project_id_blueprints_get(self, project_id, **kwargs): "servers": None, }, params_map={ - "all": [ - "project_id", - "offset", - "limit", - ], - "required": [ - "project_id", - ], + "all": ["project_id", "offset", "limit",], + "required": ["project_id",], "nullable": [], "enum": [], - "validation": [ - "offset", - "limit", - ], + "validation": ["offset", "limit",], }, root_map={ "validations": { - ("offset",): { - "inclusive_minimum": 0, - }, - ("limit",): { - "inclusive_maximum": 1500, - "inclusive_minimum": 0, - }, + ("offset",): {"inclusive_minimum": 0,}, + ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, }, "allowed_values": {}, "openapi_types": { @@ -353,10 +315,7 @@ def __projects_project_id_blueprints_get(self, project_id, **kwargs): }, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__projects_project_id_blueprints_get, ) @@ -426,14 +385,8 @@ def __projects_project_id_blueprints_post( "servers": None, }, params_map={ - "all": [ - "project_id", - "blueprint", - ], - "required": [ - "project_id", - "blueprint", - ], + "all": ["project_id", "blueprint",], + "required": ["project_id", "blueprint",], "nullable": [], "enum": [], "validation": [], @@ -441,17 +394,9 @@ def __projects_project_id_blueprints_post( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "project_id": (str,), - "blueprint": (Blueprint,), - }, - "attribute_map": { - "project_id": "projectId", - }, - "location_map": { - "project_id": "path", - "blueprint": "body", - }, + "openapi_types": {"project_id": (str,), "blueprint": (Blueprint,),}, + "attribute_map": {"project_id": "projectId",}, + "location_map": {"project_id": "path", "blueprint": "body",}, "collection_format_map": {}, }, headers_map={ diff --git a/cloudendure/api/cloud_api.py b/cloudendure/api/cloud_api.py index 3447cce8c..c6ad9e177 100644 --- a/cloudendure/api/cloud_api.py +++ b/cloudendure/api/cloud_api.py @@ -11,13 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient -from cloudendure.api_client import Endpoint as _Endpoint -from cloudendure.model.clouds_list import CloudsList -from cloudendure.model.region import Region -from cloudendure.model.regions_list import RegionsList -from cloudendure.model_utils import ( - check_allowed_values, # noqa: F401 +from cloudendure.api_client import ApiClient, Endpoint as _Endpoint +from cloudendure.model_utils import ( # noqa: F401 + check_allowed_values, check_validations, date, datetime, @@ -25,6 +21,9 @@ none_type, validate_and_convert_types, ) +from cloudendure.model.clouds_list import CloudsList +from cloudendure.model.region import Region +from cloudendure.model.regions_list import RegionsList class CloudApi(object): @@ -50,7 +49,7 @@ def __cloud_credentials_creds_id_regions_get(self, creds_id, **kwargs): >>> result = thread.get() Args: - creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". Keyword Args: offset (int): With which item to start (0 based).. [optional] if omitted the server will use the default value of 0 @@ -102,30 +101,16 @@ def __cloud_credentials_creds_id_regions_get(self, creds_id, **kwargs): "servers": None, }, params_map={ - "all": [ - "creds_id", - "offset", - "limit", - ], - "required": [ - "creds_id", - ], + "all": ["creds_id", "offset", "limit",], + "required": ["creds_id",], "nullable": [], "enum": [], - "validation": [ - "offset", - "limit", - ], + "validation": ["offset", "limit",], }, root_map={ "validations": { - ("offset",): { - "inclusive_minimum": 0, - }, - ("limit",): { - "inclusive_maximum": 1500, - "inclusive_minimum": 0, - }, + ("offset",): {"inclusive_minimum": 0,}, + ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, }, "allowed_values": {}, "openapi_types": { @@ -145,10 +130,7 @@ def __cloud_credentials_creds_id_regions_get(self, creds_id, **kwargs): }, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__cloud_credentials_creds_id_regions_get, ) @@ -165,7 +147,7 @@ def __cloud_credentials_creds_id_regions_region_id_delete( >>> result = thread.get() Args: - creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". region_id (str): Keyword Args: @@ -217,14 +199,8 @@ def __cloud_credentials_creds_id_regions_region_id_delete( "servers": None, }, params_map={ - "all": [ - "creds_id", - "region_id", - ], - "required": [ - "creds_id", - "region_id", - ], + "all": ["creds_id", "region_id",], + "required": ["creds_id", "region_id",], "nullable": [], "enum": [], "validation": [], @@ -232,24 +208,12 @@ def __cloud_credentials_creds_id_regions_region_id_delete( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "creds_id": (str,), - "region_id": (str,), - }, - "attribute_map": { - "creds_id": "credsId", - "region_id": "regionId", - }, - "location_map": { - "creds_id": "path", - "region_id": "path", - }, + "openapi_types": {"creds_id": (str,), "region_id": (str,),}, + "attribute_map": {"creds_id": "credsId", "region_id": "regionId",}, + "location_map": {"creds_id": "path", "region_id": "path",}, "collection_format_map": {}, }, - headers_map={ - "accept": [], - "content_type": [], - }, + headers_map={"accept": [], "content_type": [],}, api_client=api_client, callable=__cloud_credentials_creds_id_regions_region_id_delete, ) @@ -266,7 +230,7 @@ def __cloud_credentials_creds_id_regions_region_id_get( >>> result = thread.get() Args: - creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". region_id (str): Keyword Args: @@ -318,14 +282,8 @@ def __cloud_credentials_creds_id_regions_region_id_get( "servers": None, }, params_map={ - "all": [ - "creds_id", - "region_id", - ], - "required": [ - "creds_id", - "region_id", - ], + "all": ["creds_id", "region_id",], + "required": ["creds_id", "region_id",], "nullable": [], "enum": [], "validation": [], @@ -333,24 +291,12 @@ def __cloud_credentials_creds_id_regions_region_id_get( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "creds_id": (str,), - "region_id": (str,), - }, - "attribute_map": { - "creds_id": "credsId", - "region_id": "regionId", - }, - "location_map": { - "creds_id": "path", - "region_id": "path", - }, + "openapi_types": {"creds_id": (str,), "region_id": (str,),}, + "attribute_map": {"creds_id": "credsId", "region_id": "regionId",}, + "location_map": {"creds_id": "path", "region_id": "path",}, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__cloud_credentials_creds_id_regions_region_id_get, ) @@ -367,7 +313,7 @@ def __cloud_credentials_creds_id_regions_region_id_patch( >>> result = thread.get() Args: - creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". region_id (str): region (Region): @@ -421,16 +367,8 @@ def __cloud_credentials_creds_id_regions_region_id_patch( "servers": None, }, params_map={ - "all": [ - "creds_id", - "region_id", - "region", - ], - "required": [ - "creds_id", - "region_id", - "region", - ], + "all": ["creds_id", "region_id", "region",], + "required": ["creds_id", "region_id", "region",], "nullable": [], "enum": [], "validation": [], @@ -443,10 +381,7 @@ def __cloud_credentials_creds_id_regions_region_id_patch( "region_id": (str,), "region": (Region,), }, - "attribute_map": { - "creds_id": "credsId", - "region_id": "regionId", - }, + "attribute_map": {"creds_id": "credsId", "region_id": "regionId",}, "location_map": { "creds_id": "path", "region_id": "path", @@ -522,47 +457,24 @@ def __clouds_get(self, **kwargs): "servers": None, }, params_map={ - "all": [ - "offset", - "limit", - ], + "all": ["offset", "limit",], "required": [], "nullable": [], "enum": [], - "validation": [ - "offset", - "limit", - ], + "validation": ["offset", "limit",], }, root_map={ "validations": { - ("offset",): { - "inclusive_minimum": 0, - }, - ("limit",): { - "inclusive_maximum": 1500, - "inclusive_minimum": 0, - }, + ("offset",): {"inclusive_minimum": 0,}, + ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, }, "allowed_values": {}, - "openapi_types": { - "offset": (int,), - "limit": (int,), - }, - "attribute_map": { - "offset": "offset", - "limit": "limit", - }, - "location_map": { - "offset": "query", - "limit": "query", - }, + "openapi_types": {"offset": (int,), "limit": (int,),}, + "attribute_map": {"offset": "offset", "limit": "limit",}, + "location_map": {"offset": "query", "limit": "query",}, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__clouds_get, ) diff --git a/cloudendure/api/cloud_credentials_api.py b/cloudendure/api/cloud_credentials_api.py index 58498d2e4..e0620fd03 100644 --- a/cloudendure/api/cloud_credentials_api.py +++ b/cloudendure/api/cloud_credentials_api.py @@ -11,13 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient -from cloudendure.api_client import Endpoint as _Endpoint -from cloudendure.model.cloud_credentials import CloudCredentials -from cloudendure.model.cloud_credentials_list import CloudCredentialsList -from cloudendure.model.cloud_credentials_request import CloudCredentialsRequest -from cloudendure.model_utils import ( - check_allowed_values, # noqa: F401 +from cloudendure.api_client import ApiClient, Endpoint as _Endpoint +from cloudendure.model_utils import ( # noqa: F401 + check_allowed_values, check_validations, date, datetime, @@ -25,6 +21,9 @@ none_type, validate_and_convert_types, ) +from cloudendure.model.cloud_credentials import CloudCredentials +from cloudendure.model.cloud_credentials_list import CloudCredentialsList +from cloudendure.model.cloud_credentials_request import CloudCredentialsRequest class CloudCredentialsApi(object): @@ -49,7 +48,7 @@ def __cloud_credentials_creds_id_get(self, creds_id, **kwargs): >>> result = thread.get() Args: - creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". Keyword Args: _return_http_data_only (bool): response data without head status @@ -99,12 +98,8 @@ def __cloud_credentials_creds_id_get(self, creds_id, **kwargs): "servers": None, }, params_map={ - "all": [ - "creds_id", - ], - "required": [ - "creds_id", - ], + "all": ["creds_id",], + "required": ["creds_id",], "nullable": [], "enum": [], "validation": [], @@ -112,21 +107,12 @@ def __cloud_credentials_creds_id_get(self, creds_id, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "creds_id": (str,), - }, - "attribute_map": { - "creds_id": "credsId", - }, - "location_map": { - "creds_id": "path", - }, + "openapi_types": {"creds_id": (str,),}, + "attribute_map": {"creds_id": "credsId",}, + "location_map": {"creds_id": "path",}, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__cloud_credentials_creds_id_get, ) @@ -144,7 +130,7 @@ def __cloud_credentials_creds_id_patch( >>> result = thread.get() Args: - creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". cloud_credentials (CloudCredentialsRequest): Keyword Args: @@ -196,14 +182,8 @@ def __cloud_credentials_creds_id_patch( "servers": None, }, params_map={ - "all": [ - "creds_id", - "cloud_credentials", - ], - "required": [ - "creds_id", - "cloud_credentials", - ], + "all": ["creds_id", "cloud_credentials",], + "required": ["creds_id", "cloud_credentials",], "nullable": [], "enum": [], "validation": [], @@ -215,13 +195,8 @@ def __cloud_credentials_creds_id_patch( "creds_id": (str,), "cloud_credentials": (CloudCredentialsRequest,), }, - "attribute_map": { - "creds_id": "credsId", - }, - "location_map": { - "creds_id": "path", - "cloud_credentials": "body", - }, + "attribute_map": {"creds_id": "credsId",}, + "location_map": {"creds_id": "path", "cloud_credentials": "body",}, "collection_format_map": {}, }, headers_map={ @@ -292,47 +267,24 @@ def __cloud_credentials_get(self, **kwargs): "servers": None, }, params_map={ - "all": [ - "offset", - "limit", - ], + "all": ["offset", "limit",], "required": [], "nullable": [], "enum": [], - "validation": [ - "offset", - "limit", - ], + "validation": ["offset", "limit",], }, root_map={ "validations": { - ("offset",): { - "inclusive_minimum": 0, - }, - ("limit",): { - "inclusive_maximum": 1500, - "inclusive_minimum": 0, - }, + ("offset",): {"inclusive_minimum": 0,}, + ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, }, "allowed_values": {}, - "openapi_types": { - "offset": (int,), - "limit": (int,), - }, - "attribute_map": { - "offset": "offset", - "limit": "limit", - }, - "location_map": { - "offset": "query", - "limit": "query", - }, + "openapi_types": {"offset": (int,), "limit": (int,),}, + "attribute_map": {"offset": "offset", "limit": "limit",}, + "location_map": {"offset": "query", "limit": "query",}, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__cloud_credentials_get, ) @@ -398,12 +350,8 @@ def __cloud_credentials_post(self, cloud_credentials, **kwargs): "servers": None, }, params_map={ - "all": [ - "cloud_credentials", - ], - "required": [ - "cloud_credentials", - ], + "all": ["cloud_credentials",], + "required": ["cloud_credentials",], "nullable": [], "enum": [], "validation": [], @@ -411,13 +359,9 @@ def __cloud_credentials_post(self, cloud_credentials, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "cloud_credentials": (CloudCredentialsRequest,), - }, + "openapi_types": {"cloud_credentials": (CloudCredentialsRequest,),}, "attribute_map": {}, - "location_map": { - "cloud_credentials": "body", - }, + "location_map": {"cloud_credentials": "body",}, "collection_format_map": {}, }, headers_map={ diff --git a/cloudendure/api/default_api.py b/cloudendure/api/default_api.py index af173c55c..fe559a59e 100644 --- a/cloudendure/api/default_api.py +++ b/cloudendure/api/default_api.py @@ -11,8 +11,16 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient -from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.api_client import ApiClient, Endpoint as _Endpoint +from cloudendure.model_utils import ( # noqa: F401 + check_allowed_values, + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types, +) from cloudendure.model.audit_log import AuditLog from cloudendure.model.error import Error from cloudendure.model.extended_account_info import ExtendedAccountInfo @@ -25,15 +33,6 @@ from cloudendure.model.user import User from cloudendure.model.users_and_roles import UsersAndRoles from cloudendure.model.users_list import UsersList -from cloudendure.model_utils import ( - check_allowed_values, # noqa: F401 - check_validations, - date, - datetime, - file_type, - none_type, - validate_and_convert_types, -) class DefaultApi(object): @@ -111,14 +110,8 @@ def __accounts_account_id_access_get(self, account_id, username, **kwargs): "servers": None, }, params_map={ - "all": [ - "account_id", - "username", - ], - "required": [ - "account_id", - "username", - ], + "all": ["account_id", "username",], + "required": ["account_id", "username",], "nullable": [], "enum": [], "validation": [], @@ -126,24 +119,12 @@ def __accounts_account_id_access_get(self, account_id, username, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "account_id": (str,), - "username": (str,), - }, - "attribute_map": { - "account_id": "accountId", - "username": "username", - }, - "location_map": { - "account_id": "path", - "username": "query", - }, + "openapi_types": {"account_id": (str,), "username": (str,),}, + "attribute_map": {"account_id": "accountId", "username": "username",}, + "location_map": {"account_id": "path", "username": "query",}, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__accounts_account_id_access_get, ) @@ -219,10 +200,7 @@ def __extended_account_info_get(self, **kwargs): "location_map": {}, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__extended_account_info_get, ) @@ -288,12 +266,8 @@ def __projects_assign_users_post(self, projects_and_users, **kwargs): "servers": None, }, params_map={ - "all": [ - "projects_and_users", - ], - "required": [ - "projects_and_users", - ], + "all": ["projects_and_users",], + "required": ["projects_and_users",], "nullable": [], "enum": [], "validation": [], @@ -301,13 +275,9 @@ def __projects_assign_users_post(self, projects_and_users, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "projects_and_users": (ProjectsAndUsers,), - }, + "openapi_types": {"projects_and_users": (ProjectsAndUsers,),}, "attribute_map": {}, - "location_map": { - "projects_and_users": "body", - }, + "location_map": {"projects_and_users": "body",}, "collection_format_map": {}, }, headers_map={"accept": [], "content_type": ["application/json"]}, @@ -386,21 +356,14 @@ def __projects_project_id_audit_log_get(self, project_id, **kwargs): "to_date_time", "format", ], - "required": [ - "project_id", - ], + "required": ["project_id",], "nullable": [], "enum": [], - "validation": [ - "limit", - ], + "validation": ["limit",], }, root_map={ "validations": { - ("limit",): { - "inclusive_maximum": 1500, - "inclusive_minimum": 0, - }, + ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, }, "allowed_values": {}, "openapi_types": { @@ -498,14 +461,8 @@ def __projects_project_id_machines_machine_id_force_rescan_post( "servers": None, }, params_map={ - "all": [ - "project_id", - "machine_id", - ], - "required": [ - "project_id", - "machine_id", - ], + "all": ["project_id", "machine_id",], + "required": ["project_id", "machine_id",], "nullable": [], "enum": [], "validation": [], @@ -513,24 +470,15 @@ def __projects_project_id_machines_machine_id_force_rescan_post( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "project_id": (str,), - "machine_id": (str,), - }, + "openapi_types": {"project_id": (str,), "machine_id": (str,),}, "attribute_map": { "project_id": "projectId", "machine_id": "machineId", }, - "location_map": { - "project_id": "path", - "machine_id": "path", - }, + "location_map": {"project_id": "path", "machine_id": "path",}, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__projects_project_id_machines_machine_id_force_rescan_post, ) @@ -596,12 +544,8 @@ def __projects_project_id_storage_get(self, project_id, **kwargs): "servers": None, }, params_map={ - "all": [ - "project_id", - ], - "required": [ - "project_id", - ], + "all": ["project_id",], + "required": ["project_id",], "nullable": [], "enum": [], "validation": [], @@ -609,21 +553,12 @@ def __projects_project_id_storage_get(self, project_id, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "project_id": (str,), - }, - "attribute_map": { - "project_id": "projectId", - }, - "location_map": { - "project_id": "path", - }, + "openapi_types": {"project_id": (str,),}, + "attribute_map": {"project_id": "projectId",}, + "location_map": {"project_id": "path",}, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__projects_project_id_storage_get, ) @@ -689,12 +624,8 @@ def __projects_remove_users_post(self, projects_and_users, **kwargs): "servers": None, }, params_map={ - "all": [ - "projects_and_users", - ], - "required": [ - "projects_and_users", - ], + "all": ["projects_and_users",], + "required": ["projects_and_users",], "nullable": [], "enum": [], "validation": [], @@ -702,13 +633,9 @@ def __projects_remove_users_post(self, projects_and_users, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "projects_and_users": (ProjectsAndUsers,), - }, + "openapi_types": {"projects_and_users": (ProjectsAndUsers,),}, "attribute_map": {}, - "location_map": { - "projects_and_users": "body", - }, + "location_map": {"projects_and_users": "body",}, "collection_format_map": {}, }, headers_map={"accept": [], "content_type": ["application/json"]}, @@ -788,10 +715,7 @@ def __replace_api_token_post(self, **kwargs): "location_map": {}, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__replace_api_token_post, ) @@ -856,12 +780,8 @@ def __set_password_post(self, set_password_params, **kwargs): "servers": None, }, params_map={ - "all": [ - "set_password_params", - ], - "required": [ - "set_password_params", - ], + "all": ["set_password_params",], + "required": ["set_password_params",], "nullable": [], "enum": [], "validation": [], @@ -869,13 +789,9 @@ def __set_password_post(self, set_password_params, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "set_password_params": (InlineObject2,), - }, + "openapi_types": {"set_password_params": (InlineObject2,),}, "attribute_map": {}, - "location_map": { - "set_password_params": "body", - }, + "location_map": {"set_password_params": "body",}, "collection_format_map": {}, }, headers_map={ @@ -946,12 +862,8 @@ def __users_assign_roles_post(self, users_and_roles, **kwargs): "servers": None, }, params_map={ - "all": [ - "users_and_roles", - ], - "required": [ - "users_and_roles", - ], + "all": ["users_and_roles",], + "required": ["users_and_roles",], "nullable": [], "enum": [], "validation": [], @@ -959,13 +871,9 @@ def __users_assign_roles_post(self, users_and_roles, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "users_and_roles": (UsersAndRoles,), - }, + "openapi_types": {"users_and_roles": (UsersAndRoles,),}, "attribute_map": {}, - "location_map": { - "users_and_roles": "body", - }, + "location_map": {"users_and_roles": "body",}, "collection_format_map": {}, }, headers_map={ @@ -1036,12 +944,8 @@ def __users_post(self, users_params, **kwargs): "servers": None, }, params_map={ - "all": [ - "users_params", - ], - "required": [ - "users_params", - ], + "all": ["users_params",], + "required": ["users_params",], "nullable": [], "enum": [], "validation": [], @@ -1049,13 +953,9 @@ def __users_post(self, users_params, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "users_params": (InlineObject6,), - }, + "openapi_types": {"users_params": (InlineObject6,),}, "attribute_map": {}, - "location_map": { - "users_params": "body", - }, + "location_map": {"users_params": "body",}, "collection_format_map": {}, }, headers_map={ @@ -1126,12 +1026,8 @@ def __users_revoke_roles_post(self, users_and_roles, **kwargs): "servers": None, }, params_map={ - "all": [ - "users_and_roles", - ], - "required": [ - "users_and_roles", - ], + "all": ["users_and_roles",], + "required": ["users_and_roles",], "nullable": [], "enum": [], "validation": [], @@ -1139,13 +1035,9 @@ def __users_revoke_roles_post(self, users_and_roles, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "users_and_roles": (UsersAndRoles,), - }, + "openapi_types": {"users_and_roles": (UsersAndRoles,),}, "attribute_map": {}, - "location_map": { - "users_and_roles": "body", - }, + "location_map": {"users_and_roles": "body",}, "collection_format_map": {}, }, headers_map={ diff --git a/cloudendure/api/licensing_api.py b/cloudendure/api/licensing_api.py index 06acdeb33..d43df0005 100644 --- a/cloudendure/api/licensing_api.py +++ b/cloudendure/api/licensing_api.py @@ -11,12 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient -from cloudendure.api_client import Endpoint as _Endpoint -from cloudendure.model.license import License -from cloudendure.model.license_list import LicenseList -from cloudendure.model_utils import ( - check_allowed_values, # noqa: F401 +from cloudendure.api_client import ApiClient, Endpoint as _Endpoint +from cloudendure.model_utils import ( # noqa: F401 + check_allowed_values, check_validations, date, datetime, @@ -24,6 +21,8 @@ none_type, validate_and_convert_types, ) +from cloudendure.model.license import License +from cloudendure.model.license_list import LicenseList class LicensingApi(object): @@ -98,47 +97,24 @@ def __licenses_get(self, **kwargs): "servers": None, }, params_map={ - "all": [ - "offset", - "limit", - ], + "all": ["offset", "limit",], "required": [], "nullable": [], "enum": [], - "validation": [ - "offset", - "limit", - ], + "validation": ["offset", "limit",], }, root_map={ "validations": { - ("offset",): { - "inclusive_minimum": 0, - }, - ("limit",): { - "inclusive_maximum": 1500, - "inclusive_minimum": 0, - }, + ("offset",): {"inclusive_minimum": 0,}, + ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, }, "allowed_values": {}, - "openapi_types": { - "offset": (int,), - "limit": (int,), - }, - "attribute_map": { - "offset": "offset", - "limit": "limit", - }, - "location_map": { - "offset": "query", - "limit": "query", - }, + "openapi_types": {"offset": (int,), "limit": (int,),}, + "attribute_map": {"offset": "offset", "limit": "limit",}, + "location_map": {"offset": "query", "limit": "query",}, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__licenses_get, ) @@ -203,12 +179,8 @@ def __licenses_license_id_get(self, license_id, **kwargs): "servers": None, }, params_map={ - "all": [ - "license_id", - ], - "required": [ - "license_id", - ], + "all": ["license_id",], + "required": ["license_id",], "nullable": [], "enum": [], "validation": [], @@ -216,21 +188,12 @@ def __licenses_license_id_get(self, license_id, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "license_id": (str,), - }, - "attribute_map": { - "license_id": "licenseId", - }, - "location_map": { - "license_id": "path", - }, + "openapi_types": {"license_id": (str,),}, + "attribute_map": {"license_id": "licenseId",}, + "location_map": {"license_id": "path",}, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__licenses_license_id_get, ) diff --git a/cloudendure/api/machines_api.py b/cloudendure/api/machines_api.py index 007b57bc7..168f8d788 100644 --- a/cloudendure/api/machines_api.py +++ b/cloudendure/api/machines_api.py @@ -11,15 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient -from cloudendure.api_client import Endpoint as _Endpoint -from cloudendure.model.error import Error -from cloudendure.model.inline_object8 import InlineObject8 -from cloudendure.model.machine import Machine -from cloudendure.model.machines_list import MachinesList -from cloudendure.model.replica import Replica -from cloudendure.model_utils import ( - check_allowed_values, # noqa: F401 +from cloudendure.api_client import ApiClient, Endpoint as _Endpoint +from cloudendure.model_utils import ( # noqa: F401 + check_allowed_values, check_validations, date, datetime, @@ -27,6 +21,11 @@ none_type, validate_and_convert_types, ) +from cloudendure.model.error import Error +from cloudendure.model.inline_object8 import InlineObject8 +from cloudendure.model.machine import Machine +from cloudendure.model.machines_list import MachinesList +from cloudendure.model.replica import Replica class MachinesApi(object): @@ -106,14 +105,8 @@ def __projects_project_id_machines_delete( "servers": None, }, params_map={ - "all": [ - "project_id", - "machine_ids", - ], - "required": [ - "project_id", - "machine_ids", - ], + "all": ["project_id", "machine_ids",], + "required": ["project_id", "machine_ids",], "nullable": [], "enum": [], "validation": [], @@ -125,13 +118,8 @@ def __projects_project_id_machines_delete( "project_id": (str,), "machine_ids": (InlineObject8,), }, - "attribute_map": { - "project_id": "projectId", - }, - "location_map": { - "project_id": "path", - "machine_ids": "body", - }, + "attribute_map": {"project_id": "projectId",}, + "location_map": {"project_id": "path", "machine_ids": "body",}, "collection_format_map": {}, }, headers_map={"accept": [], "content_type": ["application/json"]}, @@ -204,32 +192,16 @@ def __projects_project_id_machines_get(self, project_id, **kwargs): "servers": None, }, params_map={ - "all": [ - "project_id", - "offset", - "limit", - "all", - "types", - ], - "required": [ - "project_id", - ], + "all": ["project_id", "offset", "limit", "all", "types",], + "required": ["project_id",], "nullable": [], "enum": [], - "validation": [ - "offset", - "limit", - ], + "validation": ["offset", "limit",], }, root_map={ "validations": { - ("offset",): { - "inclusive_minimum": 0, - }, - ("limit",): { - "inclusive_maximum": 1500, - "inclusive_minimum": 0, - }, + ("offset",): {"inclusive_minimum": 0,}, + ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, }, "allowed_values": {}, "openapi_types": { @@ -255,10 +227,7 @@ def __projects_project_id_machines_get(self, project_id, **kwargs): }, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__projects_project_id_machines_get, ) @@ -328,14 +297,8 @@ def __projects_project_id_machines_machine_id_delete( "servers": None, }, params_map={ - "all": [ - "project_id", - "machine_id", - ], - "required": [ - "project_id", - "machine_id", - ], + "all": ["project_id", "machine_id",], + "required": ["project_id", "machine_id",], "nullable": [], "enum": [], "validation": [], @@ -343,24 +306,15 @@ def __projects_project_id_machines_machine_id_delete( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "project_id": (str,), - "machine_id": (str,), - }, + "openapi_types": {"project_id": (str,), "machine_id": (str,),}, "attribute_map": { "project_id": "projectId", "machine_id": "machineId", }, - "location_map": { - "project_id": "path", - "machine_id": "path", - }, + "location_map": {"project_id": "path", "machine_id": "path",}, "collection_format_map": {}, }, - headers_map={ - "accept": [], - "content_type": [], - }, + headers_map={"accept": [], "content_type": [],}, api_client=api_client, callable=__projects_project_id_machines_machine_id_delete, ) @@ -429,14 +383,8 @@ def __projects_project_id_machines_machine_id_get( "servers": None, }, params_map={ - "all": [ - "project_id", - "machine_id", - ], - "required": [ - "project_id", - "machine_id", - ], + "all": ["project_id", "machine_id",], + "required": ["project_id", "machine_id",], "nullable": [], "enum": [], "validation": [], @@ -444,24 +392,15 @@ def __projects_project_id_machines_machine_id_get( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "project_id": (str,), - "machine_id": (str,), - }, + "openapi_types": {"project_id": (str,), "machine_id": (str,),}, "attribute_map": { "project_id": "projectId", "machine_id": "machineId", }, - "location_map": { - "project_id": "path", - "machine_id": "path", - }, + "location_map": {"project_id": "path", "machine_id": "path",}, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__projects_project_id_machines_machine_id_get, ) @@ -532,16 +471,8 @@ def __projects_project_id_machines_machine_id_patch( "servers": None, }, params_map={ - "all": [ - "project_id", - "machine_id", - "machine", - ], - "required": [ - "project_id", - "machine_id", - "machine", - ], + "all": ["project_id", "machine_id", "machine",], + "required": ["project_id", "machine_id", "machine",], "nullable": [], "enum": [], "validation": [], @@ -637,14 +568,8 @@ def __projects_project_id_machines_patch( "servers": None, }, params_map={ - "all": [ - "project_id", - "machines_list", - ], - "required": [ - "project_id", - "machines_list", - ], + "all": ["project_id", "machines_list",], + "required": ["project_id", "machines_list",], "nullable": [], "enum": [], "validation": [], @@ -656,13 +581,8 @@ def __projects_project_id_machines_patch( "project_id": (str,), "machines_list": (MachinesList,), }, - "attribute_map": { - "project_id": "projectId", - }, - "location_map": { - "project_id": "path", - "machines_list": "body", - }, + "attribute_map": {"project_id": "projectId",}, + "location_map": {"project_id": "path", "machines_list": "body",}, "collection_format_map": {}, }, headers_map={ @@ -737,14 +657,8 @@ def __projects_project_id_replicas_replica_id_get( "servers": None, }, params_map={ - "all": [ - "project_id", - "replica_id", - ], - "required": [ - "project_id", - "replica_id", - ], + "all": ["project_id", "replica_id",], + "required": ["project_id", "replica_id",], "nullable": [], "enum": [], "validation": [], @@ -752,24 +666,15 @@ def __projects_project_id_replicas_replica_id_get( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "project_id": (str,), - "replica_id": (str,), - }, + "openapi_types": {"project_id": (str,), "replica_id": (str,),}, "attribute_map": { "project_id": "projectId", "replica_id": "replicaId", }, - "location_map": { - "project_id": "path", - "replica_id": "path", - }, + "location_map": {"project_id": "path", "replica_id": "path",}, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__projects_project_id_replicas_replica_id_get, ) diff --git a/cloudendure/api/project_api.py b/cloudendure/api/project_api.py index 5e550c776..4d20aa5b2 100644 --- a/cloudendure/api/project_api.py +++ b/cloudendure/api/project_api.py @@ -11,15 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient -from cloudendure.api_client import Endpoint as _Endpoint -from cloudendure.model.cloud_credentials_request import CloudCredentialsRequest -from cloudendure.model.error import Error -from cloudendure.model.inline_response200 import InlineResponse200 -from cloudendure.model.project import Project -from cloudendure.model.projects_list import ProjectsList -from cloudendure.model_utils import ( - check_allowed_values, # noqa: F401 +from cloudendure.api_client import ApiClient, Endpoint as _Endpoint +from cloudendure.model_utils import ( # noqa: F401 + check_allowed_values, check_validations, date, datetime, @@ -27,6 +21,11 @@ none_type, validate_and_convert_types, ) +from cloudendure.model.cloud_credentials_request import CloudCredentialsRequest +from cloudendure.model.error import Error +from cloudendure.model.inline_response200 import InlineResponse200 +from cloudendure.model.project import Project +from cloudendure.model.projects_list import ProjectsList class ProjectApi(object): @@ -101,47 +100,24 @@ def __projects_get(self, **kwargs): "servers": None, }, params_map={ - "all": [ - "offset", - "limit", - ], + "all": ["offset", "limit",], "required": [], "nullable": [], "enum": [], - "validation": [ - "offset", - "limit", - ], + "validation": ["offset", "limit",], }, root_map={ "validations": { - ("offset",): { - "inclusive_minimum": 0, - }, - ("limit",): { - "inclusive_maximum": 1500, - "inclusive_minimum": 0, - }, + ("offset",): {"inclusive_minimum": 0,}, + ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, }, "allowed_values": {}, - "openapi_types": { - "offset": (int,), - "limit": (int,), - }, - "attribute_map": { - "offset": "offset", - "limit": "limit", - }, - "location_map": { - "offset": "query", - "limit": "query", - }, + "openapi_types": {"offset": (int,), "limit": (int,),}, + "attribute_map": {"offset": "offset", "limit": "limit",}, + "location_map": {"offset": "query", "limit": "query",}, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__projects_get, ) @@ -207,12 +183,8 @@ def __projects_post(self, project, **kwargs): "servers": None, }, params_map={ - "all": [ - "project", - ], - "required": [ - "project", - ], + "all": ["project",], + "required": ["project",], "nullable": [], "enum": [], "validation": [], @@ -220,13 +192,9 @@ def __projects_post(self, project, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "project": (Project,), - }, + "openapi_types": {"project": (Project,),}, "attribute_map": {}, - "location_map": { - "project": "body", - }, + "location_map": {"project": "body",}, "collection_format_map": {}, }, headers_map={ @@ -297,12 +265,8 @@ def __projects_project_id_delete(self, project_id, **kwargs): "servers": None, }, params_map={ - "all": [ - "project_id", - ], - "required": [ - "project_id", - ], + "all": ["project_id",], + "required": ["project_id",], "nullable": [], "enum": [], "validation": [], @@ -310,21 +274,12 @@ def __projects_project_id_delete(self, project_id, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "project_id": (str,), - }, - "attribute_map": { - "project_id": "projectId", - }, - "location_map": { - "project_id": "path", - }, + "openapi_types": {"project_id": (str,),}, + "attribute_map": {"project_id": "projectId",}, + "location_map": {"project_id": "path",}, "collection_format_map": {}, }, - headers_map={ - "accept": [], - "content_type": [], - }, + headers_map={"accept": [], "content_type": [],}, api_client=api_client, callable=__projects_project_id_delete, ) @@ -389,12 +344,8 @@ def __projects_project_id_get(self, project_id, **kwargs): "servers": None, }, params_map={ - "all": [ - "project_id", - ], - "required": [ - "project_id", - ], + "all": ["project_id",], + "required": ["project_id",], "nullable": [], "enum": [], "validation": [], @@ -402,21 +353,12 @@ def __projects_project_id_get(self, project_id, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "project_id": (str,), - }, - "attribute_map": { - "project_id": "projectId", - }, - "location_map": { - "project_id": "path", - }, + "openapi_types": {"project_id": (str,),}, + "attribute_map": {"project_id": "projectId",}, + "location_map": {"project_id": "path",}, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__projects_project_id_get, ) @@ -484,14 +426,8 @@ def __projects_project_id_patch(self, project_id, project, **kwargs): "servers": None, }, params_map={ - "all": [ - "project_id", - "project", - ], - "required": [ - "project_id", - "project", - ], + "all": ["project_id", "project",], + "required": ["project_id", "project",], "nullable": [], "enum": [], "validation": [], @@ -499,17 +435,9 @@ def __projects_project_id_patch(self, project_id, project, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "project_id": (str,), - "project": (Project,), - }, - "attribute_map": { - "project_id": "projectId", - }, - "location_map": { - "project_id": "path", - "project": "body", - }, + "openapi_types": {"project_id": (str,), "project": (Project,),}, + "attribute_map": {"project_id": "projectId",}, + "location_map": {"project_id": "path", "project": "body",}, "collection_format_map": {}, }, headers_map={ @@ -583,30 +511,16 @@ def __projects_project_id_tags_get(self, project_id, **kwargs): "servers": None, }, params_map={ - "all": [ - "project_id", - "offset", - "limit", - ], - "required": [ - "project_id", - ], + "all": ["project_id", "offset", "limit",], + "required": ["project_id",], "nullable": [], "enum": [], - "validation": [ - "offset", - "limit", - ], + "validation": ["offset", "limit",], }, root_map={ "validations": { - ("offset",): { - "inclusive_minimum": 0, - }, - ("limit",): { - "inclusive_maximum": 1500, - "inclusive_minimum": 0, - }, + ("offset",): {"inclusive_minimum": 0,}, + ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, }, "allowed_values": {}, "openapi_types": { @@ -626,10 +540,7 @@ def __projects_project_id_tags_get(self, project_id, **kwargs): }, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__projects_project_id_tags_get, ) @@ -699,14 +610,8 @@ def __projects_project_id_target_cloud_credentials_post( "servers": None, }, params_map={ - "all": [ - "project_id", - "cloud_credentials", - ], - "required": [ - "project_id", - "cloud_credentials", - ], + "all": ["project_id", "cloud_credentials",], + "required": ["project_id", "cloud_credentials",], "nullable": [], "enum": [], "validation": [], @@ -718,13 +623,8 @@ def __projects_project_id_target_cloud_credentials_post( "project_id": (str,), "cloud_credentials": (CloudCredentialsRequest,), }, - "attribute_map": { - "project_id": "projectId", - }, - "location_map": { - "project_id": "path", - "cloud_credentials": "body", - }, + "attribute_map": {"project_id": "projectId",}, + "location_map": {"project_id": "path", "cloud_credentials": "body",}, "collection_format_map": {}, }, headers_map={ diff --git a/cloudendure/api/recovery_plans_api.py b/cloudendure/api/recovery_plans_api.py index 893941e26..2150c2378 100644 --- a/cloudendure/api/recovery_plans_api.py +++ b/cloudendure/api/recovery_plans_api.py @@ -11,14 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient -from cloudendure.api_client import Endpoint as _Endpoint -from cloudendure.model.inline_object10 import InlineObject10 -from cloudendure.model.job import Job -from cloudendure.model.recovery_plan import RecoveryPlan -from cloudendure.model.recovery_plan_list import RecoveryPlanList -from cloudendure.model_utils import ( - check_allowed_values, # noqa: F401 +from cloudendure.api_client import ApiClient, Endpoint as _Endpoint +from cloudendure.model_utils import ( # noqa: F401 + check_allowed_values, check_validations, date, datetime, @@ -26,6 +21,10 @@ none_type, validate_and_convert_types, ) +from cloudendure.model.inline_object10 import InlineObject10 +from cloudendure.model.job import Job +from cloudendure.model.recovery_plan import RecoveryPlan +from cloudendure.model.recovery_plan_list import RecoveryPlanList class RecoveryPlansApi(object): @@ -100,12 +99,8 @@ def __projects_project_id_recovery_plans_get(self, project_id, **kwargs): "servers": None, }, params_map={ - "all": [ - "project_id", - ], - "required": [ - "project_id", - ], + "all": ["project_id",], + "required": ["project_id",], "nullable": [], "enum": [], "validation": [], @@ -113,21 +108,12 @@ def __projects_project_id_recovery_plans_get(self, project_id, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "project_id": (str,), - }, - "attribute_map": { - "project_id": "projectId", - }, - "location_map": { - "project_id": "path", - }, + "openapi_types": {"project_id": (str,),}, + "attribute_map": {"project_id": "projectId",}, + "location_map": {"project_id": "path",}, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__projects_project_id_recovery_plans_get, ) @@ -196,14 +182,8 @@ def __projects_project_id_recovery_plans_post( "servers": None, }, params_map={ - "all": [ - "project_id", - "recovery_plan", - ], - "required": [ - "project_id", - "recovery_plan", - ], + "all": ["project_id", "recovery_plan",], + "required": ["project_id", "recovery_plan",], "nullable": [], "enum": [], "validation": [], @@ -215,13 +195,8 @@ def __projects_project_id_recovery_plans_post( "project_id": (str,), "recovery_plan": (RecoveryPlan,), }, - "attribute_map": { - "project_id": "projectId", - }, - "location_map": { - "project_id": "path", - "recovery_plan": "body", - }, + "attribute_map": {"project_id": "projectId",}, + "location_map": {"project_id": "path", "recovery_plan": "body",}, "collection_format_map": {}, }, headers_map={ @@ -296,14 +271,8 @@ def __projects_project_id_recovery_plans_recovery_plan_id_delete( "servers": None, }, params_map={ - "all": [ - "project_id", - "recovery_plan_id", - ], - "required": [ - "project_id", - "recovery_plan_id", - ], + "all": ["project_id", "recovery_plan_id",], + "required": ["project_id", "recovery_plan_id",], "nullable": [], "enum": [], "validation": [], @@ -311,24 +280,15 @@ def __projects_project_id_recovery_plans_recovery_plan_id_delete( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "project_id": (str,), - "recovery_plan_id": (str,), - }, + "openapi_types": {"project_id": (str,), "recovery_plan_id": (str,),}, "attribute_map": { "project_id": "projectId", "recovery_plan_id": "recoveryPlanId", }, - "location_map": { - "project_id": "path", - "recovery_plan_id": "path", - }, + "location_map": {"project_id": "path", "recovery_plan_id": "path",}, "collection_format_map": {}, }, - headers_map={ - "accept": [], - "content_type": [], - }, + headers_map={"accept": [], "content_type": [],}, api_client=api_client, callable=__projects_project_id_recovery_plans_recovery_plan_id_delete, ) @@ -397,14 +357,8 @@ def __projects_project_id_recovery_plans_recovery_plan_id_get( "servers": None, }, params_map={ - "all": [ - "project_id", - "recovery_plan_id", - ], - "required": [ - "project_id", - "recovery_plan_id", - ], + "all": ["project_id", "recovery_plan_id",], + "required": ["project_id", "recovery_plan_id",], "nullable": [], "enum": [], "validation": [], @@ -412,24 +366,15 @@ def __projects_project_id_recovery_plans_recovery_plan_id_get( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "project_id": (str,), - "recovery_plan_id": (str,), - }, + "openapi_types": {"project_id": (str,), "recovery_plan_id": (str,),}, "attribute_map": { "project_id": "projectId", "recovery_plan_id": "recoveryPlanId", }, - "location_map": { - "project_id": "path", - "recovery_plan_id": "path", - }, + "location_map": {"project_id": "path", "recovery_plan_id": "path",}, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__projects_project_id_recovery_plans_recovery_plan_id_get, ) @@ -500,16 +445,8 @@ def __projects_project_id_recovery_plans_recovery_plan_id_patch( "servers": None, }, params_map={ - "all": [ - "project_id", - "recovery_plan_id", - "recovery_plan", - ], - "required": [ - "project_id", - "recovery_plan_id", - "recovery_plan", - ], + "all": ["project_id", "recovery_plan_id", "recovery_plan",], + "required": ["project_id", "recovery_plan_id", "recovery_plan",], "nullable": [], "enum": [], "validation": [], @@ -605,14 +542,8 @@ def __projects_project_id_run_recovery_plan_post( "servers": None, }, params_map={ - "all": [ - "project_id", - "init_recovery_plan_params", - ], - "required": [ - "project_id", - "init_recovery_plan_params", - ], + "all": ["project_id", "init_recovery_plan_params",], + "required": ["project_id", "init_recovery_plan_params",], "nullable": [], "enum": [], "validation": [], @@ -624,9 +555,7 @@ def __projects_project_id_run_recovery_plan_post( "project_id": (str,), "init_recovery_plan_params": (InlineObject10,), }, - "attribute_map": { - "project_id": "projectId", - }, + "attribute_map": {"project_id": "projectId",}, "location_map": { "project_id": "path", "init_recovery_plan_params": "body", diff --git a/cloudendure/api/replication_api.py b/cloudendure/api/replication_api.py index 70f0b73b8..d7000a255 100644 --- a/cloudendure/api/replication_api.py +++ b/cloudendure/api/replication_api.py @@ -11,17 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient -from cloudendure.api_client import Endpoint as _Endpoint -from cloudendure.model.bandwidth_throttling import BandwidthThrottling -from cloudendure.model.error import Error -from cloudendure.model.point_in_time_list import PointInTimeList -from cloudendure.model.replication_configuration import ReplicationConfiguration -from cloudendure.model.replication_configuration_list import ( - ReplicationConfigurationList, -) -from cloudendure.model_utils import ( - check_allowed_values, # noqa: F401 +from cloudendure.api_client import ApiClient, Endpoint as _Endpoint +from cloudendure.model_utils import ( # noqa: F401 + check_allowed_values, check_validations, date, datetime, @@ -29,6 +21,13 @@ none_type, validate_and_convert_types, ) +from cloudendure.model.bandwidth_throttling import BandwidthThrottling +from cloudendure.model.error import Error +from cloudendure.model.point_in_time_list import PointInTimeList +from cloudendure.model.replication_configuration import ReplicationConfiguration +from cloudendure.model.replication_configuration_list import ( + ReplicationConfigurationList, +) class ReplicationApi(object): @@ -107,14 +106,8 @@ def __projects_project_id_machines_machine_id_bandwidth_throttling_get( "servers": None, }, params_map={ - "all": [ - "project_id", - "machine_id", - ], - "required": [ - "project_id", - "machine_id", - ], + "all": ["project_id", "machine_id",], + "required": ["project_id", "machine_id",], "nullable": [], "enum": [], "validation": [], @@ -122,24 +115,15 @@ def __projects_project_id_machines_machine_id_bandwidth_throttling_get( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "project_id": (str,), - "machine_id": (str,), - }, + "openapi_types": {"project_id": (str,), "machine_id": (str,),}, "attribute_map": { "project_id": "projectId", "machine_id": "machineId", }, - "location_map": { - "project_id": "path", - "machine_id": "path", - }, + "location_map": {"project_id": "path", "machine_id": "path",}, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__projects_project_id_machines_machine_id_bandwidth_throttling_get, ) @@ -210,16 +194,8 @@ def __projects_project_id_machines_machine_id_bandwidth_throttling_patch( "servers": None, }, params_map={ - "all": [ - "project_id", - "machine_id", - "bandwidth_throttling", - ], - "required": [ - "project_id", - "machine_id", - "bandwidth_throttling", - ], + "all": ["project_id", "machine_id", "bandwidth_throttling",], + "required": ["project_id", "machine_id", "bandwidth_throttling",], "nullable": [], "enum": [], "validation": [], @@ -316,14 +292,8 @@ def __projects_project_id_machines_machine_id_delete( "servers": None, }, params_map={ - "all": [ - "project_id", - "machine_id", - ], - "required": [ - "project_id", - "machine_id", - ], + "all": ["project_id", "machine_id",], + "required": ["project_id", "machine_id",], "nullable": [], "enum": [], "validation": [], @@ -331,24 +301,15 @@ def __projects_project_id_machines_machine_id_delete( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "project_id": (str,), - "machine_id": (str,), - }, + "openapi_types": {"project_id": (str,), "machine_id": (str,),}, "attribute_map": { "project_id": "projectId", "machine_id": "machineId", }, - "location_map": { - "project_id": "path", - "machine_id": "path", - }, + "location_map": {"project_id": "path", "machine_id": "path",}, "collection_format_map": {}, }, - headers_map={ - "accept": [], - "content_type": [], - }, + headers_map={"accept": [], "content_type": [],}, api_client=api_client, callable=__projects_project_id_machines_machine_id_delete, ) @@ -420,32 +381,16 @@ def __projects_project_id_machines_machine_id_pointsintime_get( "servers": None, }, params_map={ - "all": [ - "project_id", - "machine_id", - "offset", - "limit", - ], - "required": [ - "project_id", - "machine_id", - ], + "all": ["project_id", "machine_id", "offset", "limit",], + "required": ["project_id", "machine_id",], "nullable": [], "enum": [], - "validation": [ - "offset", - "limit", - ], + "validation": ["offset", "limit",], }, root_map={ "validations": { - ("offset",): { - "inclusive_minimum": 0, - }, - ("limit",): { - "inclusive_maximum": 1500, - "inclusive_minimum": 0, - }, + ("offset",): {"inclusive_minimum": 0,}, + ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, }, "allowed_values": {}, "openapi_types": { @@ -468,10 +413,7 @@ def __projects_project_id_machines_machine_id_pointsintime_get( }, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__projects_project_id_machines_machine_id_pointsintime_get, ) @@ -541,30 +483,16 @@ def __projects_project_id_replication_configurations_get( "servers": None, }, params_map={ - "all": [ - "project_id", - "offset", - "limit", - ], - "required": [ - "project_id", - ], + "all": ["project_id", "offset", "limit",], + "required": ["project_id",], "nullable": [], "enum": [], - "validation": [ - "offset", - "limit", - ], + "validation": ["offset", "limit",], }, root_map={ "validations": { - ("offset",): { - "inclusive_minimum": 0, - }, - ("limit",): { - "inclusive_maximum": 1500, - "inclusive_minimum": 0, - }, + ("offset",): {"inclusive_minimum": 0,}, + ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, }, "allowed_values": {}, "openapi_types": { @@ -584,10 +512,7 @@ def __projects_project_id_replication_configurations_get( }, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__projects_project_id_replication_configurations_get, ) @@ -657,14 +582,8 @@ def __projects_project_id_replication_configurations_post( "servers": None, }, params_map={ - "all": [ - "project_id", - "replication_configuration", - ], - "required": [ - "project_id", - "replication_configuration", - ], + "all": ["project_id", "replication_configuration",], + "required": ["project_id", "replication_configuration",], "nullable": [], "enum": [], "validation": [], @@ -676,9 +595,7 @@ def __projects_project_id_replication_configurations_post( "project_id": (str,), "replication_configuration": (ReplicationConfiguration,), }, - "attribute_map": { - "project_id": "projectId", - }, + "attribute_map": {"project_id": "projectId",}, "location_map": { "project_id": "path", "replication_configuration": "body", diff --git a/cloudendure/api/user_api.py b/cloudendure/api/user_api.py index 6d395e395..0204cc3de 100644 --- a/cloudendure/api/user_api.py +++ b/cloudendure/api/user_api.py @@ -11,13 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient -from cloudendure.api_client import Endpoint as _Endpoint -from cloudendure.model.error import Error -from cloudendure.model.inline_object import InlineObject -from cloudendure.model.user import User -from cloudendure.model_utils import ( - check_allowed_values, # noqa: F401 +from cloudendure.api_client import ApiClient, Endpoint as _Endpoint +from cloudendure.model_utils import ( # noqa: F401 + check_allowed_values, check_validations, date, datetime, @@ -25,6 +21,9 @@ none_type, validate_and_convert_types, ) +from cloudendure.model.error import Error +from cloudendure.model.inline_object import InlineObject +from cloudendure.model.user import User class UserApi(object): @@ -99,12 +98,8 @@ def __change_password_post(self, password_params, **kwargs): "servers": None, }, params_map={ - "all": [ - "password_params", - ], - "required": [ - "password_params", - ], + "all": ["password_params",], + "required": ["password_params",], "nullable": [], "enum": [], "validation": [], @@ -112,13 +107,9 @@ def __change_password_post(self, password_params, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "password_params": (InlineObject,), - }, + "openapi_types": {"password_params": (InlineObject,),}, "attribute_map": {}, - "location_map": { - "password_params": "body", - }, + "location_map": {"password_params": "body",}, "collection_format_map": {}, }, headers_map={ @@ -201,10 +192,7 @@ def __me_get(self, **kwargs): "location_map": {}, "collection_format_map": {}, }, - headers_map={ - "accept": ["application/json"], - "content_type": [], - }, + headers_map={"accept": ["application/json"], "content_type": [],}, api_client=api_client, callable=__me_get, ) @@ -269,12 +257,8 @@ def __users_user_id_delete(self, user_id, **kwargs): "servers": None, }, params_map={ - "all": [ - "user_id", - ], - "required": [ - "user_id", - ], + "all": ["user_id",], + "required": ["user_id",], "nullable": [], "enum": [], "validation": [], @@ -282,21 +266,12 @@ def __users_user_id_delete(self, user_id, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "user_id": (str,), - }, - "attribute_map": { - "user_id": "userId", - }, - "location_map": { - "user_id": "path", - }, + "openapi_types": {"user_id": (str,),}, + "attribute_map": {"user_id": "userId",}, + "location_map": {"user_id": "path",}, "collection_format_map": {}, }, - headers_map={ - "accept": [], - "content_type": [], - }, + headers_map={"accept": [], "content_type": [],}, api_client=api_client, callable=__users_user_id_delete, ) @@ -364,14 +339,8 @@ def __users_user_id_patch(self, user_id, user, **kwargs): "servers": None, }, params_map={ - "all": [ - "user_id", - "user", - ], - "required": [ - "user_id", - "user", - ], + "all": ["user_id", "user",], + "required": ["user_id", "user",], "nullable": [], "enum": [], "validation": [], @@ -379,17 +348,9 @@ def __users_user_id_patch(self, user_id, user, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": { - "user_id": (str,), - "user": (User,), - }, - "attribute_map": { - "user_id": "userId", - }, - "location_map": { - "user_id": "path", - "user": "body", - }, + "openapi_types": {"user_id": (str,), "user": (User,),}, + "attribute_map": {"user_id": "userId",}, + "location_map": {"user_id": "path", "user": "body",}, "collection_format_map": {}, }, headers_map={ diff --git a/cloudendure/api_client.py b/cloudendure/api_client.py index 0d4cca0f8..960c6fe90 100644 --- a/cloudendure/api_client.py +++ b/cloudendure/api_client.py @@ -8,25 +8,25 @@ """ -import atexit -import io import json +import atexit import mimetypes +from multiprocessing.pool import ThreadPool +import io import os import re import typing -from multiprocessing.pool import ThreadPool from urllib.parse import quote - from urllib3.fields import RequestField + from cloudendure import rest from cloudendure.configuration import Configuration -from cloudendure.exceptions import ApiException, ApiTypeError, ApiValueError +from cloudendure.exceptions import ApiTypeError, ApiValueError, ApiException from cloudendure.model_utils import ( - ModelComposed, ModelNormal, ModelSimple, + ModelComposed, check_allowed_values, check_validations, date, @@ -101,7 +101,7 @@ def close(self): @property def pool(self): """Create thread pool on first request - avoids instantiating unused threadpool for blocking clients. + avoids instantiating unused threadpool for blocking clients. """ if self._pool is None: atexit.register(self.close) @@ -857,7 +857,7 @@ def __gather_params(self, kwargs): return params def __call__(self, *args, **kwargs): - """This method is invoked when endpoints are called + """ This method is invoked when endpoints are called Example: api_instance = AccountApi() @@ -880,11 +880,9 @@ def call_with_http_info(self, **kwargs): if kwargs["_host_index"] is None else kwargs["_host_index"] ) - server_variables = ( - self.api_client.configuration.server_operation_variables.get( - self.settings["operation_id"], - self.api_client.configuration.server_variables, - ) + server_variables = self.api_client.configuration.server_operation_variables.get( + self.settings["operation_id"], + self.api_client.configuration.server_variables, ) _host = self.api_client.configuration.get_host_from_settings( index, variables=server_variables, servers=self.settings["servers"] diff --git a/cloudendure/configuration.py b/cloudendure/configuration.py index dffcea332..4ff4d8ef8 100644 --- a/cloudendure/configuration.py +++ b/cloudendure/configuration.py @@ -12,12 +12,12 @@ import logging import multiprocessing import sys -from http import client as http_client - import urllib3 +from http import client as http_client from cloudendure.exceptions import ApiValueError + JSON_SCHEMA_VALIDATION_KEYWORDS = { "multipleOf", "maximum", @@ -81,7 +81,7 @@ class Configuration(object): :param server_operation_variables: Mapping from operation ID to a mapping with string values to replace variables in templated server configuration. The validation of enums is performed for variables with defined enum values before. - :param ssl_ca_cert: str - the path to a file of concatenated CA certificates + :param ssl_ca_cert: str - the path to a file of concatenated CA certificates in PEM format """ @@ -104,7 +104,8 @@ def __init__( server_operation_variables=None, ssl_ca_cert=None, ): - """Constructor""" + """Constructor + """ self._base_path = ( "https://console.cloudendure.com/api/latest" if host is None else host ) diff --git a/cloudendure/exceptions.py b/cloudendure/exceptions.py index f6ae4d7cf..7776ad886 100644 --- a/cloudendure/exceptions.py +++ b/cloudendure/exceptions.py @@ -14,7 +14,7 @@ class OpenApiException(Exception): class ApiTypeError(OpenApiException, TypeError): def __init__(self, msg, path_to_item=None, valid_classes=None, key_type=None): - """Raises an exception for TypeErrors + """ Raises an exception for TypeErrors Args: msg (str): the exception message diff --git a/cloudendure/model/account.py b/cloudendure/model/account.py index 1fccf0c67..29f569ea2 100644 --- a/cloudendure/model/account.py +++ b/cloudendure/model/account.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -205,10 +205,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/account_ce_admin_properties.py b/cloudendure/model/account_ce_admin_properties.py index 2c8db643b..b3aeb7eed 100644 --- a/cloudendure/model/account_ce_admin_properties.py +++ b/cloudendure/model/account_ce_admin_properties.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -162,10 +162,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/account_link.py b/cloudendure/model/account_link.py index 0914e9b3e..71eabf645 100644 --- a/cloudendure/model/account_link.py +++ b/cloudendure/model/account_link.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -150,10 +150,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/account_link_list.py b/cloudendure/model/account_link_list.py index 08442d0dd..ec39eb6f7 100644 --- a/cloudendure/model/account_link_list.py +++ b/cloudendure/model/account_link_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -148,10 +148,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/account_request.py b/cloudendure/model/account_request.py index 19ab9803c..5c423b43d 100644 --- a/cloudendure/model/account_request.py +++ b/cloudendure/model/account_request.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -52,9 +52,7 @@ class AccountRequest(ModelNormal): """ allowed_values = { - ("flow",): { - "MIGRATION_REGISTER": "MIGRATION_REGISTER", - }, + ("flow",): {"MIGRATION_REGISTER": "MIGRATION_REGISTER",}, ("request_type",): { "REGISTER": "REGISTER", "RESET_PASSWORD": "RESET_PASSWORD", @@ -170,10 +168,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/account_request_list.py b/cloudendure/model/account_request_list.py index 172ab1532..60314ff1c 100644 --- a/cloudendure/model/account_request_list.py +++ b/cloudendure/model/account_request_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -148,10 +148,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/accounts_list.py b/cloudendure/model/accounts_list.py index d3a7184d7..6d3e9dac3 100644 --- a/cloudendure/model/accounts_list.py +++ b/cloudendure/model/accounts_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -148,10 +148,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/agent_next_replication_init_request.py b/cloudendure/model/agent_next_replication_init_request.py index b77e7bdff..d13ae3434 100644 --- a/cloudendure/model/agent_next_replication_init_request.py +++ b/cloudendure/model/agent_next_replication_init_request.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -141,10 +141,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/all_project_features.py b/cloudendure/model/all_project_features.py index 46ab53e70..b6dc06abb 100644 --- a/cloudendure/model/all_project_features.py +++ b/cloudendure/model/all_project_features.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -268,10 +268,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/audit_log.py b/cloudendure/model/audit_log.py index 94c4463d8..101f29550 100644 --- a/cloudendure/model/audit_log.py +++ b/cloudendure/model/audit_log.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -151,10 +151,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/audit_log_changed_field.py b/cloudendure/model/audit_log_changed_field.py index 26f87438c..44e26639c 100644 --- a/cloudendure/model/audit_log_changed_field.py +++ b/cloudendure/model/audit_log_changed_field.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -147,10 +147,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/audit_log_entry.py b/cloudendure/model/audit_log_entry.py index 472b0ee58..4a741d79e 100644 --- a/cloudendure/model/audit_log_entry.py +++ b/cloudendure/model/audit_log_entry.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -172,10 +172,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/audit_log_entry_participating_machines.py b/cloudendure/model/audit_log_entry_participating_machines.py index 18661f32e..9b1cffddb 100644 --- a/cloudendure/model/audit_log_entry_participating_machines.py +++ b/cloudendure/model/audit_log_entry_participating_machines.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -147,10 +147,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/bandwidth_throttling.py b/cloudendure/model/bandwidth_throttling.py index 0a595b338..24a9f3c64 100644 --- a/cloudendure/model/bandwidth_throttling.py +++ b/cloudendure/model/bandwidth_throttling.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -141,10 +141,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/blueprint.py b/cloudendure/model/blueprint.py index f95f220ce..a142c6fc1 100644 --- a/cloudendure/model/blueprint.py +++ b/cloudendure/model/blueprint.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -69,14 +69,8 @@ class Blueprint(ModelNormal): "DONT_ALLOCATE": "DONT_ALLOCATE", "AS_SUBNET": "AS_SUBNET", }, - ("security_group_action",): { - "FROM_POLICY": "FROM_POLICY", - }, - ("tenancy",): { - "SHARED": "SHARED", - "DEDICATED": "DEDICATED", - "HOST": "HOST", - }, + ("security_group_action",): {"FROM_POLICY": "FROM_POLICY",}, + ("tenancy",): {"SHARED": "SHARED", "DEDICATED": "DEDICATED", "HOST": "HOST",}, ("private_ip_action",): { "CREATE_NEW": "CREATE_NEW", "COPY_ORIGIN": "COPY_ORIGIN", @@ -282,10 +276,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/blueprint_disks.py b/cloudendure/model/blueprint_disks.py index c4a4475df..f8959c2cc 100644 --- a/cloudendure/model/blueprint_disks.py +++ b/cloudendure/model/blueprint_disks.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -65,12 +65,8 @@ class BlueprintDisks(ModelNormal): } validations = { - ("iops",): { - "inclusive_minimum": 0, - }, - ("throughput",): { - "inclusive_minimum": 0, - }, + ("iops",): {"inclusive_minimum": 0,}, + ("throughput",): {"inclusive_minimum": 0,}, } additional_properties_type = None @@ -168,10 +164,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/blueprint_list.py b/cloudendure/model/blueprint_list.py index ba0d62928..16bf1b361 100644 --- a/cloudendure/model/blueprint_list.py +++ b/cloudendure/model/blueprint_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -148,10 +148,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/cloud.py b/cloudendure/model/cloud.py index ce5297779..acf07e9dc 100644 --- a/cloudendure/model/cloud.py +++ b/cloudendure/model/cloud.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -163,10 +163,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/cloud_credentials.py b/cloudendure/model/cloud_credentials.py index c7b34bf11..b091c347e 100644 --- a/cloudendure/model/cloud_credentials.py +++ b/cloudendure/model/cloud_credentials.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -153,10 +153,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/cloud_credentials_list.py b/cloudendure/model/cloud_credentials_list.py index c5af41bc9..5b73a75e0 100644 --- a/cloudendure/model/cloud_credentials_list.py +++ b/cloudendure/model/cloud_credentials_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -148,10 +148,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/cloud_credentials_request.py b/cloudendure/model/cloud_credentials_request.py index 7419e5432..21040833e 100644 --- a/cloudendure/model/cloud_credentials_request.py +++ b/cloudendure/model/cloud_credentials_request.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -164,10 +164,7 @@ def __init__(self, cloud_id, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/clouds_list.py b/cloudendure/model/clouds_list.py index 958ea33bc..b4f295311 100644 --- a/cloudendure/model/clouds_list.py +++ b/cloudendure/model/clouds_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -148,10 +148,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/compute_location.py b/cloudendure/model/compute_location.py index fc0c80f73..a732aa7f1 100644 --- a/cloudendure/model/compute_location.py +++ b/cloudendure/model/compute_location.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -147,10 +147,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/configurations.py b/cloudendure/model/configurations.py index e9744de1d..862ad6f52 100644 --- a/cloudendure/model/configurations.py +++ b/cloudendure/model/configurations.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -144,10 +144,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/configurations_list.py b/cloudendure/model/configurations_list.py index a45f49b3d..1819605f0 100644 --- a/cloudendure/model/configurations_list.py +++ b/cloudendure/model/configurations_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -148,10 +148,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/cslp_item.py b/cloudendure/model/cslp_item.py index b010ad055..efbd23d18 100644 --- a/cloudendure/model/cslp_item.py +++ b/cloudendure/model/cslp_item.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -159,10 +159,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/cslp_request.py b/cloudendure/model/cslp_request.py index 36057d613..764f1d193 100644 --- a/cloudendure/model/cslp_request.py +++ b/cloudendure/model/cslp_request.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -160,10 +160,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/cslp_result.py b/cloudendure/model/cslp_result.py index 86cd79ca5..fe353714c 100644 --- a/cloudendure/model/cslp_result.py +++ b/cloudendure/model/cslp_result.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -58,11 +58,7 @@ class CSLPResult(ModelNormal): """ allowed_values = { - ("error_level",): { - "INFO": "INFO", - "WARNING": "WARNING", - "ERROR": "ERROR", - }, + ("error_level",): {"INFO": "INFO", "WARNING": "WARNING", "ERROR": "ERROR",}, } validations = {} @@ -160,10 +156,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/disk_config.py b/cloudendure/model/disk_config.py index 4d7f8d14b..97a8daca0 100644 --- a/cloudendure/model/disk_config.py +++ b/cloudendure/model/disk_config.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -65,12 +65,8 @@ class DiskConfig(ModelNormal): } validations = { - ("iops",): { - "inclusive_minimum": 0, - }, - ("throughput",): { - "inclusive_minimum": 0, - }, + ("iops",): {"inclusive_minimum": 0,}, + ("throughput",): {"inclusive_minimum": 0,}, } additional_properties_type = None @@ -173,10 +169,7 @@ def __init__(self, type, name, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/dynamic_configuration.py b/cloudendure/model/dynamic_configuration.py index 524f558f3..670f53d56 100644 --- a/cloudendure/model/dynamic_configuration.py +++ b/cloudendure/model/dynamic_configuration.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -141,10 +141,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/error.py b/cloudendure/model/error.py index 96b68eccf..c6e5bae82 100644 --- a/cloudendure/model/error.py +++ b/cloudendure/model/error.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -144,10 +144,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/extended_account_info.py b/cloudendure/model/extended_account_info.py index b32ec7086..38942d5e4 100644 --- a/cloudendure/model/extended_account_info.py +++ b/cloudendure/model/extended_account_info.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -186,10 +186,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/gcp_machines_finance_data.py b/cloudendure/model/gcp_machines_finance_data.py index a327e86bd..a88ced030 100644 --- a/cloudendure/model/gcp_machines_finance_data.py +++ b/cloudendure/model/gcp_machines_finance_data.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -162,10 +162,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/identity_provider_redirect_response.py b/cloudendure/model/identity_provider_redirect_response.py index 6e0e4076f..a4a30e992 100644 --- a/cloudendure/model/identity_provider_redirect_response.py +++ b/cloudendure/model/identity_provider_redirect_response.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -141,10 +141,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/initialization_step.py b/cloudendure/model/initialization_step.py index 99ecd96ca..a1ca2cbf9 100644 --- a/cloudendure/model/initialization_step.py +++ b/cloudendure/model/initialization_step.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -180,10 +180,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_object.py b/cloudendure/model/inline_object.py index 2750b1c3c..34313e74a 100644 --- a/cloudendure/model/inline_object.py +++ b/cloudendure/model/inline_object.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -146,10 +146,7 @@ def __init__(self, new_password, old_password, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_object1.py b/cloudendure/model/inline_object1.py index 023a0e6c5..9c68b1c60 100644 --- a/cloudendure/model/inline_object1.py +++ b/cloudendure/model/inline_object1.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -159,10 +159,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_object10.py b/cloudendure/model/inline_object10.py index 6fb9e5d3d..f89122c85 100644 --- a/cloudendure/model/inline_object10.py +++ b/cloudendure/model/inline_object10.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -156,10 +156,7 @@ def __init__(self, recovery_plan_id, execution_mode, *args, **kwargs): # noqa: if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_object2.py b/cloudendure/model/inline_object2.py index fe8df3a4a..bafc696cb 100644 --- a/cloudendure/model/inline_object2.py +++ b/cloudendure/model/inline_object2.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -144,10 +144,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_object3.py b/cloudendure/model/inline_object3.py index 8344a279c..336cf67fd 100644 --- a/cloudendure/model/inline_object3.py +++ b/cloudendure/model/inline_object3.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -141,10 +141,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_object4.py b/cloudendure/model/inline_object4.py index 2443f9243..efd76b1c7 100644 --- a/cloudendure/model/inline_object4.py +++ b/cloudendure/model/inline_object4.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -144,10 +144,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_object5.py b/cloudendure/model/inline_object5.py index 532ebd8af..ef60fb364 100644 --- a/cloudendure/model/inline_object5.py +++ b/cloudendure/model/inline_object5.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -141,10 +141,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_object6.py b/cloudendure/model/inline_object6.py index ac50b2cc7..046fa60df 100644 --- a/cloudendure/model/inline_object6.py +++ b/cloudendure/model/inline_object6.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -143,10 +143,7 @@ def __init__(self, username, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_object7.py b/cloudendure/model/inline_object7.py index 4e4b064c5..3b9b701f9 100644 --- a/cloudendure/model/inline_object7.py +++ b/cloudendure/model/inline_object7.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -144,10 +144,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_object8.py b/cloudendure/model/inline_object8.py index c78d23ada..4991cdaee 100644 --- a/cloudendure/model/inline_object8.py +++ b/cloudendure/model/inline_object8.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -141,10 +141,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_object9.py b/cloudendure/model/inline_object9.py index 134fa1fc5..f7e63dc6c 100644 --- a/cloudendure/model/inline_object9.py +++ b/cloudendure/model/inline_object9.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -141,10 +141,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_response200.py b/cloudendure/model/inline_response200.py index 6c56c77f9..eb0464926 100644 --- a/cloudendure/model/inline_response200.py +++ b/cloudendure/model/inline_response200.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -141,10 +141,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_response2001.py b/cloudendure/model/inline_response2001.py index 699605401..2927925ad 100644 --- a/cloudendure/model/inline_response2001.py +++ b/cloudendure/model/inline_response2001.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -141,10 +141,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_response2002.py b/cloudendure/model/inline_response2002.py index 0d9a73b8f..138e91e84 100644 --- a/cloudendure/model/inline_response2002.py +++ b/cloudendure/model/inline_response2002.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -141,10 +141,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/job.py b/cloudendure/model/job.py index 84bc65bbb..2cd29f9a4 100644 --- a/cloudendure/model/job.py +++ b/cloudendure/model/job.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -193,10 +193,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/job_log.py b/cloudendure/model/job_log.py index 488d57416..b9cc7758e 100644 --- a/cloudendure/model/job_log.py +++ b/cloudendure/model/job_log.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -144,10 +144,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/job_target_machine.py b/cloudendure/model/job_target_machine.py index 27b90d646..523068fe1 100644 --- a/cloudendure/model/job_target_machine.py +++ b/cloudendure/model/job_target_machine.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -153,10 +153,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/jobs_list.py b/cloudendure/model/jobs_list.py index a30086db1..23bad2560 100644 --- a/cloudendure/model/jobs_list.py +++ b/cloudendure/model/jobs_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -148,10 +148,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/key_value_list.py b/cloudendure/model/key_value_list.py index a4a223d6b..ab408c56e 100644 --- a/cloudendure/model/key_value_list.py +++ b/cloudendure/model/key_value_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -152,10 +152,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/launch_machines_parameters.py b/cloudendure/model/launch_machines_parameters.py index 637646247..a85f5d47f 100644 --- a/cloudendure/model/launch_machines_parameters.py +++ b/cloudendure/model/launch_machines_parameters.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -169,10 +169,7 @@ def __init__(self, launch_type, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/launch_machines_parameters_debug_scripts.py b/cloudendure/model/launch_machines_parameters_debug_scripts.py index 7ba9475c0..1ea41572a 100644 --- a/cloudendure/model/launch_machines_parameters_debug_scripts.py +++ b/cloudendure/model/launch_machines_parameters_debug_scripts.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -144,10 +144,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/license.py b/cloudendure/model/license.py index 0cef3178f..d3c213330 100644 --- a/cloudendure/model/license.py +++ b/cloudendure/model/license.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -69,12 +69,8 @@ class License(ModelNormal): } validations = { - ("count",): { - "inclusive_minimum": 0, - }, - ("used",): { - "inclusive_minimum": 0, - }, + ("count",): {"inclusive_minimum": 0,}, + ("used",): {"inclusive_minimum": 0,}, } additional_properties_type = None @@ -185,10 +181,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/license_ce_admin_properties.py b/cloudendure/model/license_ce_admin_properties.py index b5da54324..0747e58e5 100644 --- a/cloudendure/model/license_ce_admin_properties.py +++ b/cloudendure/model/license_ce_admin_properties.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -150,10 +150,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/license_features.py b/cloudendure/model/license_features.py index 8b477e837..7f9b259e9 100644 --- a/cloudendure/model/license_features.py +++ b/cloudendure/model/license_features.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -144,10 +144,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/license_list.py b/cloudendure/model/license_list.py index 81faa9486..67b08f1ef 100644 --- a/cloudendure/model/license_list.py +++ b/cloudendure/model/license_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -148,10 +148,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/list_users_result.py b/cloudendure/model/list_users_result.py index 01e9d5b6b..ace8f0029 100644 --- a/cloudendure/model/list_users_result.py +++ b/cloudendure/model/list_users_result.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -153,10 +153,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/list_users_results.py b/cloudendure/model/list_users_results.py index aa80eda79..9fcc18e29 100644 --- a/cloudendure/model/list_users_results.py +++ b/cloudendure/model/list_users_results.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -148,10 +148,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/logical_location.py b/cloudendure/model/logical_location.py index ee20d975f..b97a0b12c 100644 --- a/cloudendure/model/logical_location.py +++ b/cloudendure/model/logical_location.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -144,10 +144,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine.py b/cloudendure/model/machine.py index 08372729c..487fa2aab 100644 --- a/cloudendure/model/machine.py +++ b/cloudendure/model/machine.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -204,10 +204,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_and_path_and_point_in_time.py b/cloudendure/model/machine_and_path_and_point_in_time.py index f7f10987b..ef415b1c7 100644 --- a/cloudendure/model/machine_and_path_and_point_in_time.py +++ b/cloudendure/model/machine_and_path_and_point_in_time.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -149,10 +149,7 @@ def __init__(self, machine_id, file_path, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_and_point_in_time.py b/cloudendure/model/machine_and_point_in_time.py index 5a0a064ab..81b5c3b54 100644 --- a/cloudendure/model/machine_and_point_in_time.py +++ b/cloudendure/model/machine_and_point_in_time.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -146,10 +146,7 @@ def __init__(self, machine_id, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_license.py b/cloudendure/model/machine_license.py index 893d87316..49fb374c9 100644 --- a/cloudendure/model/machine_license.py +++ b/cloudendure/model/machine_license.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -144,10 +144,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_life_cycle.py b/cloudendure/model/machine_life_cycle.py index 29cfff9f9..ae30f48f4 100644 --- a/cloudendure/model/machine_life_cycle.py +++ b/cloudendure/model/machine_life_cycle.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -168,10 +168,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_replication_configuration.py b/cloudendure/model/machine_replication_configuration.py index 2027fa248..292f33baa 100644 --- a/cloudendure/model/machine_replication_configuration.py +++ b/cloudendure/model/machine_replication_configuration.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -250,10 +250,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_replication_info.py b/cloudendure/model/machine_replication_info.py index 7251e7cd2..02922fe2a 100644 --- a/cloudendure/model/machine_replication_info.py +++ b/cloudendure/model/machine_replication_info.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -181,10 +181,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_replication_info_initiation_states.py b/cloudendure/model/machine_replication_info_initiation_states.py index a7b1a027c..933c317fc 100644 --- a/cloudendure/model/machine_replication_info_initiation_states.py +++ b/cloudendure/model/machine_replication_info_initiation_states.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -155,10 +155,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_replication_info_initiation_states_items.py b/cloudendure/model/machine_replication_info_initiation_states_items.py index e74019bdb..6e57f3d47 100644 --- a/cloudendure/model/machine_replication_info_initiation_states_items.py +++ b/cloudendure/model/machine_replication_info_initiation_states_items.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -151,10 +151,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_snapshot_credits.py b/cloudendure/model/machine_snapshot_credits.py index 5150320f4..27b552739 100644 --- a/cloudendure/model/machine_snapshot_credits.py +++ b/cloudendure/model/machine_snapshot_credits.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -141,10 +141,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_source_properties.py b/cloudendure/model/machine_source_properties.py index cead9707a..a00d95649 100644 --- a/cloudendure/model/machine_source_properties.py +++ b/cloudendure/model/machine_source_properties.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -195,10 +195,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_source_properties_cpu.py b/cloudendure/model/machine_source_properties_cpu.py index 55584fb93..f261b5c01 100644 --- a/cloudendure/model/machine_source_properties_cpu.py +++ b/cloudendure/model/machine_source_properties_cpu.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -144,10 +144,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_source_properties_disks.py b/cloudendure/model/machine_source_properties_disks.py index e4ae19374..30b1834e1 100644 --- a/cloudendure/model/machine_source_properties_disks.py +++ b/cloudendure/model/machine_source_properties_disks.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -149,10 +149,7 @@ def __init__(self, is_protected, name, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_source_properties_installed_applications.py b/cloudendure/model/machine_source_properties_installed_applications.py index 1c9f38047..c4b9a884d 100644 --- a/cloudendure/model/machine_source_properties_installed_applications.py +++ b/cloudendure/model/machine_source_properties_installed_applications.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -157,10 +157,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_source_properties_installed_applications_items.py b/cloudendure/model/machine_source_properties_installed_applications_items.py index 03627fe91..c6a183943 100644 --- a/cloudendure/model/machine_source_properties_installed_applications_items.py +++ b/cloudendure/model/machine_source_properties_installed_applications_items.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -141,10 +141,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_source_properties_running_services.py b/cloudendure/model/machine_source_properties_running_services.py index 0f7972b8e..79beb78aa 100644 --- a/cloudendure/model/machine_source_properties_running_services.py +++ b/cloudendure/model/machine_source_properties_running_services.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -155,10 +155,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_source_properties_running_services_items.py b/cloudendure/model/machine_source_properties_running_services_items.py index 177e127e5..4b7f373b8 100644 --- a/cloudendure/model/machine_source_properties_running_services_items.py +++ b/cloudendure/model/machine_source_properties_running_services_items.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -141,10 +141,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_throttle_time_seconds.py b/cloudendure/model/machine_throttle_time_seconds.py index 674bbde13..020659337 100644 --- a/cloudendure/model/machine_throttle_time_seconds.py +++ b/cloudendure/model/machine_throttle_time_seconds.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -141,10 +141,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machines_list.py b/cloudendure/model/machines_list.py index 862dcf764..2ee963aa2 100644 --- a/cloudendure/model/machines_list.py +++ b/cloudendure/model/machines_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -148,10 +148,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machines_list_invalid_ids_and_job.py b/cloudendure/model/machines_list_invalid_ids_and_job.py index 12252d59e..3584b2c09 100644 --- a/cloudendure/model/machines_list_invalid_ids_and_job.py +++ b/cloudendure/model/machines_list_invalid_ids_and_job.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -156,10 +156,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/network_interface.py b/cloudendure/model/network_interface.py index 0653a663c..2bada542f 100644 --- a/cloudendure/model/network_interface.py +++ b/cloudendure/model/network_interface.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -147,10 +147,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/outpost.py b/cloudendure/model/outpost.py index dd449e8fa..615982a11 100644 --- a/cloudendure/model/outpost.py +++ b/cloudendure/model/outpost.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -147,10 +147,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/point_in_time.py b/cloudendure/model/point_in_time.py index bdc66c3da..3536264f4 100644 --- a/cloudendure/model/point_in_time.py +++ b/cloudendure/model/point_in_time.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -144,10 +144,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/point_in_time_list.py b/cloudendure/model/point_in_time_list.py index 0c0fee227..7a8351a50 100644 --- a/cloudendure/model/point_in_time_list.py +++ b/cloudendure/model/point_in_time_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -148,10 +148,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/populate_job_names.py b/cloudendure/model/populate_job_names.py index 9632bb381..a363238d9 100644 --- a/cloudendure/model/populate_job_names.py +++ b/cloudendure/model/populate_job_names.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -141,10 +141,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/populate_job_params.py b/cloudendure/model/populate_job_params.py index ea4fc6caa..0ac1a4ae8 100644 --- a/cloudendure/model/populate_job_params.py +++ b/cloudendure/model/populate_job_params.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -146,10 +146,7 @@ def __init__(self, job_name, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/project.py b/cloudendure/model/project.py index ff40df72f..baa752f6f 100644 --- a/cloudendure/model/project.py +++ b/cloudendure/model/project.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -60,11 +60,7 @@ class Project(ModelNormal): """ allowed_values = { - ("type",): { - "MIGRATION": "MIGRATION", - "DR": "DR", - "BACKUP": "BACKUP", - }, + ("type",): {"MIGRATION": "MIGRATION", "DR": "DR", "BACKUP": "BACKUP",}, } validations = {} @@ -201,10 +197,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/project_ce_admin_properties.py b/cloudendure/model/project_ce_admin_properties.py index 5e52f06eb..3a2164926 100644 --- a/cloudendure/model/project_ce_admin_properties.py +++ b/cloudendure/model/project_ce_admin_properties.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -144,10 +144,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/project_features.py b/cloudendure/model/project_features.py index c4b3827f0..199a0db15 100644 --- a/cloudendure/model/project_features.py +++ b/cloudendure/model/project_features.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -165,10 +165,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/project_storage.py b/cloudendure/model/project_storage.py index 28c442034..f3739b5b6 100644 --- a/cloudendure/model/project_storage.py +++ b/cloudendure/model/project_storage.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -162,10 +162,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/project_storage_working_storage.py b/cloudendure/model/project_storage_working_storage.py index accc4a3a2..8e39ae9ec 100644 --- a/cloudendure/model/project_storage_working_storage.py +++ b/cloudendure/model/project_storage_working_storage.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -144,10 +144,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/projects_and_users.py b/cloudendure/model/projects_and_users.py index 7bf430453..3041c04d4 100644 --- a/cloudendure/model/projects_and_users.py +++ b/cloudendure/model/projects_and_users.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -148,10 +148,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/projects_and_users_items.py b/cloudendure/model/projects_and_users_items.py index 1c87b0935..81b020746 100644 --- a/cloudendure/model/projects_and_users_items.py +++ b/cloudendure/model/projects_and_users_items.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -144,10 +144,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/projects_list.py b/cloudendure/model/projects_list.py index 7ed9aa99c..b0c4005de 100644 --- a/cloudendure/model/projects_list.py +++ b/cloudendure/model/projects_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -148,10 +148,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/recovery_plan.py b/cloudendure/model/recovery_plan.py index 80327df4b..4d338b2a7 100644 --- a/cloudendure/model/recovery_plan.py +++ b/cloudendure/model/recovery_plan.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -154,10 +154,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/recovery_plan_list.py b/cloudendure/model/recovery_plan_list.py index d5dd89ec2..c9545e5fe 100644 --- a/cloudendure/model/recovery_plan_list.py +++ b/cloudendure/model/recovery_plan_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -148,10 +148,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/recovery_plan_step.py b/cloudendure/model/recovery_plan_step.py index 940f130b0..21d598dc4 100644 --- a/cloudendure/model/recovery_plan_step.py +++ b/cloudendure/model/recovery_plan_step.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -147,10 +147,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/recovery_plan_steps.py b/cloudendure/model/recovery_plan_steps.py index ff4a4f107..2e18b7655 100644 --- a/cloudendure/model/recovery_plan_steps.py +++ b/cloudendure/model/recovery_plan_steps.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -148,10 +148,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/region.py b/cloudendure/model/region.py index ee7313b2d..df2517f8a 100644 --- a/cloudendure/model/region.py +++ b/cloudendure/model/region.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -223,10 +223,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/regions_list.py b/cloudendure/model/regions_list.py index 23612dfb1..8ebb4d3c6 100644 --- a/cloudendure/model/regions_list.py +++ b/cloudendure/model/regions_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -148,10 +148,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/replica.py b/cloudendure/model/replica.py index 0dbce5dc8..a3ebecfe6 100644 --- a/cloudendure/model/replica.py +++ b/cloudendure/model/replica.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -171,10 +171,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/replication_configuration.py b/cloudendure/model/replication_configuration.py index 67b7aefce..b6f7ae86e 100644 --- a/cloudendure/model/replication_configuration.py +++ b/cloudendure/model/replication_configuration.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -248,10 +248,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/replication_configuration_list.py b/cloudendure/model/replication_configuration_list.py index 52d8101eb..3a2866c85 100644 --- a/cloudendure/model/replication_configuration_list.py +++ b/cloudendure/model/replication_configuration_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -148,10 +148,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/replication_configuration_replication_tags.py b/cloudendure/model/replication_configuration_replication_tags.py index 8cef1e7b3..7acfa9d71 100644 --- a/cloudendure/model/replication_configuration_replication_tags.py +++ b/cloudendure/model/replication_configuration_replication_tags.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -144,10 +144,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/saml_settings.py b/cloudendure/model/saml_settings.py index 4c264a8f2..31f8f23b5 100644 --- a/cloudendure/model/saml_settings.py +++ b/cloudendure/model/saml_settings.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -147,10 +147,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/security_group.py b/cloudendure/model/security_group.py index 5edfbfee8..165f5d3bd 100644 --- a/cloudendure/model/security_group.py +++ b/cloudendure/model/security_group.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -147,10 +147,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/storage_location.py b/cloudendure/model/storage_location.py index 15692f2a5..17b63ffdb 100644 --- a/cloudendure/model/storage_location.py +++ b/cloudendure/model/storage_location.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -144,10 +144,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/subnet.py b/cloudendure/model/subnet.py index f7cc563f2..11506d532 100644 --- a/cloudendure/model/subnet.py +++ b/cloudendure/model/subnet.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -150,10 +150,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/time.py b/cloudendure/model/time.py index b2d031956..5c74ecf24 100644 --- a/cloudendure/model/time.py +++ b/cloudendure/model/time.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -141,10 +141,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/updateable_scripts.py b/cloudendure/model/updateable_scripts.py index ce24716f4..ad85bc0e5 100644 --- a/cloudendure/model/updateable_scripts.py +++ b/cloudendure/model/updateable_scripts.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -151,10 +151,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/updateable_scripts_result.py b/cloudendure/model/updateable_scripts_result.py index 2676b2f79..f53350b64 100644 --- a/cloudendure/model/updateable_scripts_result.py +++ b/cloudendure/model/updateable_scripts_result.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -196,10 +196,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/updateable_scripts_result_on_premise_volumes.py b/cloudendure/model/updateable_scripts_result_on_premise_volumes.py index e0e5d42fb..5756e4b77 100644 --- a/cloudendure/model/updateable_scripts_result_on_premise_volumes.py +++ b/cloudendure/model/updateable_scripts_result_on_premise_volumes.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -147,10 +147,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/upgrade_counter_delay.py b/cloudendure/model/upgrade_counter_delay.py index d43c4332c..68208e934 100644 --- a/cloudendure/model/upgrade_counter_delay.py +++ b/cloudendure/model/upgrade_counter_delay.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -141,10 +141,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/usage.py b/cloudendure/model/usage.py index eb3f99fee..49ae19d8d 100644 --- a/cloudendure/model/usage.py +++ b/cloudendure/model/usage.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -150,10 +150,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/usage_list.py b/cloudendure/model/usage_list.py index 21a449bb5..0198f803c 100644 --- a/cloudendure/model/usage_list.py +++ b/cloudendure/model/usage_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -148,10 +148,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/user.py b/cloudendure/model/user.py index 7afb4fa72..870bd36e7 100644 --- a/cloudendure/model/user.py +++ b/cloudendure/model/user.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -188,10 +188,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/user_report.py b/cloudendure/model/user_report.py index 29b8fff74..49c96a0b7 100644 --- a/cloudendure/model/user_report.py +++ b/cloudendure/model/user_report.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -179,10 +179,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/user_report_gcp_machines_finance_data.py b/cloudendure/model/user_report_gcp_machines_finance_data.py index 17e4b91ba..43250e95b 100644 --- a/cloudendure/model/user_report_gcp_machines_finance_data.py +++ b/cloudendure/model/user_report_gcp_machines_finance_data.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -148,10 +148,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/user_reports.py b/cloudendure/model/user_reports.py index 8b76fa8de..181c803ee 100644 --- a/cloudendure/model/user_reports.py +++ b/cloudendure/model/user_reports.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -148,10 +148,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/user_settings.py b/cloudendure/model/user_settings.py index c13389da1..4b22c7d87 100644 --- a/cloudendure/model/user_settings.py +++ b/cloudendure/model/user_settings.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -150,10 +150,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/user_settings_send_notifications.py b/cloudendure/model/user_settings_send_notifications.py index bcc6c6184..967f7e2fe 100644 --- a/cloudendure/model/user_settings_send_notifications.py +++ b/cloudendure/model/user_settings_send_notifications.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -144,10 +144,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/users_and_roles.py b/cloudendure/model/users_and_roles.py index b4a7e58ff..8971233a2 100644 --- a/cloudendure/model/users_and_roles.py +++ b/cloudendure/model/users_and_roles.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -148,10 +148,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/users_and_roles_items.py b/cloudendure/model/users_and_roles_items.py index 3847c0e4c..0b485e1f9 100644 --- a/cloudendure/model/users_and_roles_items.py +++ b/cloudendure/model/users_and_roles_items.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -151,10 +151,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/users_list.py b/cloudendure/model/users_list.py index c983843c0..f76bf9844 100644 --- a/cloudendure/model/users_list.py +++ b/cloudendure/model/users_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( +from cloudendure.model_utils import ( # noqa: F401 ApiTypeError, - ModelComposed, # noqa: F401 + ModelComposed, ModelNormal, ModelSimple, cached_property, @@ -148,10 +148,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % ( - args, - self.__class__.__name__, - ), + % (args, self.__class__.__name__,), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model_utils.py b/cloudendure/model_utils.py index 342efdabf..8cdf747c5 100644 --- a/cloudendure/model_utils.py +++ b/cloudendure/model_utils.py @@ -8,19 +8,19 @@ """ +from datetime import date, datetime # noqa: F401 import inspect import io import os import pprint import re import tempfile -from datetime import date, datetime # noqa: F401 from dateutil.parser import parse from cloudendure.exceptions import ( - ApiAttributeError, ApiKeyError, + ApiAttributeError, ApiTypeError, ApiValueError, ) @@ -1573,17 +1573,15 @@ def type_error_message( msg = ( "Invalid type for variable '{0}'. Required {1} type {2} and " "passed type was {3}".format( - var_name, - key_or_value, - valid_classes_phrase, - type(var_value).__name__, + var_name, key_or_value, valid_classes_phrase, type(var_value).__name__, ) ) return msg def get_valid_classes_phrase(input_classes): - """Returns a string phrase describing what types are allowed""" + """Returns a string phrase describing what types are allowed + """ all_classes = list(input_classes) all_classes = sorted(all_classes, key=lambda cls: cls.__name__) all_class_names = [cls.__name__ for cls in all_classes] diff --git a/cloudendure/models/__init__.py b/cloudendure/models/__init__.py index d0dadd2e3..456801498 100644 --- a/cloudendure/models/__init__.py +++ b/cloudendure/models/__init__.py @@ -30,6 +30,9 @@ from cloudendure.model.blueprint import Blueprint from cloudendure.model.blueprint_disks import BlueprintDisks from cloudendure.model.blueprint_list import BlueprintList +from cloudendure.model.cslp_item import CSLPItem +from cloudendure.model.cslp_request import CSLPRequest +from cloudendure.model.cslp_result import CSLPResult from cloudendure.model.cloud import Cloud from cloudendure.model.cloud_credentials import CloudCredentials from cloudendure.model.cloud_credentials_list import CloudCredentialsList @@ -38,9 +41,6 @@ from cloudendure.model.compute_location import ComputeLocation from cloudendure.model.configurations import Configurations from cloudendure.model.configurations_list import ConfigurationsList -from cloudendure.model.cslp_item import CSLPItem -from cloudendure.model.cslp_request import CSLPRequest -from cloudendure.model.cslp_result import CSLPResult from cloudendure.model.disk_config import DiskConfig from cloudendure.model.dynamic_configuration import DynamicConfiguration from cloudendure.model.error import Error @@ -52,6 +52,7 @@ from cloudendure.model.initialization_step import InitializationStep from cloudendure.model.inline_object import InlineObject from cloudendure.model.inline_object1 import InlineObject1 +from cloudendure.model.inline_object10 import InlineObject10 from cloudendure.model.inline_object2 import InlineObject2 from cloudendure.model.inline_object3 import InlineObject3 from cloudendure.model.inline_object4 import InlineObject4 @@ -60,7 +61,6 @@ from cloudendure.model.inline_object7 import InlineObject7 from cloudendure.model.inline_object8 import InlineObject8 from cloudendure.model.inline_object9 import InlineObject9 -from cloudendure.model.inline_object10 import InlineObject10 from cloudendure.model.inline_response200 import InlineResponse200 from cloudendure.model.inline_response2001 import InlineResponse2001 from cloudendure.model.inline_response2002 import InlineResponse2002 diff --git a/cloudendure/rest.py b/cloudendure/rest.py index 236a2504d..44c06a3fb 100644 --- a/cloudendure/rest.py +++ b/cloudendure/rest.py @@ -19,13 +19,14 @@ from cloudendure.exceptions import ( ApiException, - ApiValueError, + UnauthorizedException, ForbiddenException, NotFoundException, ServiceException, - UnauthorizedException, + ApiValueError, ) + logger = logging.getLogger(__name__) diff --git a/git_push.sh b/git_push.sh new file mode 100644 index 000000000..7f6eddd0e --- /dev/null +++ b/git_push.sh @@ -0,0 +1,58 @@ +#!/bin/sh +# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/ +# +# Usage example: /bin/sh ./git_push.sh wing328 openapi-pestore-perl "minor update" "gitlab.com" + +git_user_id=$1 +git_repo_id=$2 +release_note=$3 +git_host=$4 + +if [ "$git_host" = "" ]; then + git_host="github.com" + echo "[INFO] No command line input provided. Set \$git_host to $git_host" +fi + +if [ "$git_user_id" = "" ]; then + git_user_id="craigmonson" + echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id" +fi + +if [ "$git_repo_id" = "" ]; then + git_repo_id="2ndWatch/python-cloudendure" + echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id" +fi + +if [ "$release_note" = "" ]; then + release_note="Minor update" + echo "[INFO] No command line input provided. Set \$release_note to $release_note" +fi + +# Initialize the local directory as a Git repository +git init + +# Adds the files in the local repository and stages them for commit. +git add . + +# Commits the tracked changes and prepares them to be pushed to a remote repository. +git commit -m "$release_note" + +# Sets the new remote +git_remote=`git remote` +if [ "$git_remote" = "" ]; then # git remote not defined + + if [ "$GIT_TOKEN" = "" ]; then + echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment." + git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git + else + git remote add origin https://${git_user_id}:${GIT_TOKEN}@${git_host}/${git_user_id}/${git_repo_id}.git + fi + +fi + +git pull origin master + +# Pushes (Forces) the changes in the local repository up to the remote repository +echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git" +git push origin master 2>&1 | grep -v 'To https' + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..96947f604 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +python_dateutil >= 2.5.3 +setuptools >= 21.0.0 +urllib3 >= 1.25.3 diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 000000000..11433ee87 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,2 @@ +[flake8] +max-line-length=99 diff --git a/setup.py b/setup.py new file mode 100644 index 000000000..4c81d5d48 --- /dev/null +++ b/setup.py @@ -0,0 +1,42 @@ +""" + CloudEndure API documentation + + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + + The version of the OpenAPI document: 5 + Generated by: https://openapi-generator.tech +""" + + +from setuptools import setup, find_packages # noqa: H301 + +NAME = "cloudendure" +VERSION = "1.0.0" +# To install the library, run the following +# +# python setup.py install +# +# prerequisite: setuptools +# http://pypi.python.org/pypi/setuptools + +REQUIRES = [ + "urllib3 >= 1.25.3", + "python-dateutil", +] + +setup( + name=NAME, + version=VERSION, + description="CloudEndure API documentation", + author="Support", + author_email="team@openapitools.org", + url="", + keywords=["OpenAPI", "OpenAPI-Generator", "CloudEndure API documentation"], + python_requires=">=3.6", + install_requires=REQUIRES, + packages=find_packages(exclude=["test", "tests"]), + include_package_data=True, + long_description="""\ + © 2021 CloudEndure All rights reserved # General Request authentication in CloudEndure's API is done using session cookies. A session cookie is returned upon successful execution of the \"login\" method. This value must then be provided within the request headers of all subsequent API requests. ## Errors Some errors are not specifically written in every method since they may always return. Those are: 1) 401 (Unauthorized) - for unauthenticated requests. 2) 405 (Method Not Allowed) - for using a method that is not supported (POST instead of GET). 3) 403 (Forbidden) - request is authenticated, but the user is not allowed to access. 4) 422 (Unprocessable Entity) - for invalid input. ## Formats All strings with date-time format are according to RFC3339. All strings with \"duration\" format are according to ISO8601. For example, a full day duration can be specified with \"PNNNND\". # noqa: E501 + """ +) diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 000000000..bb4f22bb7 --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1 @@ +pytest-cov>=2.8.1 diff --git a/tox.ini b/tox.ini new file mode 100644 index 000000000..e8c33305d --- /dev/null +++ b/tox.ini @@ -0,0 +1,9 @@ +[tox] +envlist = py3 + +[testenv] +deps=-r{toxinidir}/requirements.txt + -r{toxinidir}/test-requirements.txt + +commands= + pytest --cov=cloudendure From f28b2c96a48832b6d7e40089c5d9fc90e3ff513c Mon Sep 17 00:00:00 2001 From: Craig Monson Date: Tue, 13 Jul 2021 14:58:30 -0400 Subject: [PATCH 3/8] Deleting unnecessary files --- .gitlab-ci.yml | 24 --------------------- git_push.sh | 58 -------------------------------------------------- 2 files changed, 82 deletions(-) delete mode 100644 .gitlab-ci.yml delete mode 100644 git_push.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index 1424ba809..000000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,24 +0,0 @@ -# ref: https://docs.gitlab.com/ee/ci/README.html - -stages: - - test - -.tests: - stage: test - script: - - pip install -r requirements.txt - - pip install -r test-requirements.txt - - pytest --cov=cloudendure - -test-3.6: - extends: .tests - image: python:3.6-alpine -test-3.7: - extends: .tests - image: python:3.7-alpine -test-3.8: - extends: .tests - image: python:3.8-alpine -test-3.9: - extends: .tests - image: python:3.9-alpine diff --git a/git_push.sh b/git_push.sh deleted file mode 100644 index 7f6eddd0e..000000000 --- a/git_push.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/sh -# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/ -# -# Usage example: /bin/sh ./git_push.sh wing328 openapi-pestore-perl "minor update" "gitlab.com" - -git_user_id=$1 -git_repo_id=$2 -release_note=$3 -git_host=$4 - -if [ "$git_host" = "" ]; then - git_host="github.com" - echo "[INFO] No command line input provided. Set \$git_host to $git_host" -fi - -if [ "$git_user_id" = "" ]; then - git_user_id="craigmonson" - echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id" -fi - -if [ "$git_repo_id" = "" ]; then - git_repo_id="2ndWatch/python-cloudendure" - echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id" -fi - -if [ "$release_note" = "" ]; then - release_note="Minor update" - echo "[INFO] No command line input provided. Set \$release_note to $release_note" -fi - -# Initialize the local directory as a Git repository -git init - -# Adds the files in the local repository and stages them for commit. -git add . - -# Commits the tracked changes and prepares them to be pushed to a remote repository. -git commit -m "$release_note" - -# Sets the new remote -git_remote=`git remote` -if [ "$git_remote" = "" ]; then # git remote not defined - - if [ "$GIT_TOKEN" = "" ]; then - echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment." - git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git - else - git remote add origin https://${git_user_id}:${GIT_TOKEN}@${git_host}/${git_user_id}/${git_repo_id}.git - fi - -fi - -git pull origin master - -# Pushes (Forces) the changes in the local repository up to the remote repository -echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git" -git push origin master 2>&1 | grep -v 'To https' - From e833e8a315c61d17c5568a007caa7129ee00c7e0 Mon Sep 17 00:00:00 2001 From: Craig Monson Date: Tue, 13 Jul 2021 15:00:35 -0400 Subject: [PATCH 4/8] More cleanup --- .gitignore | 5 + .openapi-generator/FILES | 443 ------------------------------------- .openapi-generator/VERSION | 1 - 3 files changed, 5 insertions(+), 444 deletions(-) delete mode 100644 .openapi-generator/FILES delete mode 100644 .openapi-generator/VERSION diff --git a/.gitignore b/.gitignore index 43995bd42..4dba79a71 100644 --- a/.gitignore +++ b/.gitignore @@ -64,3 +64,8 @@ target/ #Ipython Notebook .ipynb_checkpoints + +.openapi-generator/* + +.gitlab-ci.yml +git_push.sh diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES deleted file mode 100644 index d41170a18..000000000 --- a/.openapi-generator/FILES +++ /dev/null @@ -1,443 +0,0 @@ -.gitignore -.gitlab-ci.yml -.openapi-generator-ignore -.travis.yml -README.md -cloudendure/__init__.py -cloudendure/api/__init__.py -cloudendure/api/account_api.py -cloudendure/api/actions_api.py -cloudendure/api/authentication_api.py -cloudendure/api/blueprint_api.py -cloudendure/api/cloud_api.py -cloudendure/api/cloud_credentials_api.py -cloudendure/api/default_api.py -cloudendure/api/licensing_api.py -cloudendure/api/machines_api.py -cloudendure/api/project_api.py -cloudendure/api/recovery_plans_api.py -cloudendure/api/replication_api.py -cloudendure/api/user_api.py -cloudendure/api_client.py -cloudendure/apis/__init__.py -cloudendure/configuration.py -cloudendure/exceptions.py -cloudendure/model/__init__.py -cloudendure/model/account.py -cloudendure/model/account_ce_admin_properties.py -cloudendure/model/account_link.py -cloudendure/model/account_link_list.py -cloudendure/model/account_request.py -cloudendure/model/account_request_list.py -cloudendure/model/accounts_list.py -cloudendure/model/agent_next_replication_init_request.py -cloudendure/model/all_project_features.py -cloudendure/model/audit_log.py -cloudendure/model/audit_log_changed_field.py -cloudendure/model/audit_log_entry.py -cloudendure/model/audit_log_entry_participating_machines.py -cloudendure/model/bandwidth_throttling.py -cloudendure/model/blueprint.py -cloudendure/model/blueprint_disks.py -cloudendure/model/blueprint_list.py -cloudendure/model/cloud.py -cloudendure/model/cloud_credentials.py -cloudendure/model/cloud_credentials_list.py -cloudendure/model/cloud_credentials_request.py -cloudendure/model/clouds_list.py -cloudendure/model/compute_location.py -cloudendure/model/configurations.py -cloudendure/model/configurations_list.py -cloudendure/model/cslp_item.py -cloudendure/model/cslp_request.py -cloudendure/model/cslp_result.py -cloudendure/model/disk_config.py -cloudendure/model/dynamic_configuration.py -cloudendure/model/error.py -cloudendure/model/extended_account_info.py -cloudendure/model/gcp_machines_finance_data.py -cloudendure/model/identity_provider_redirect_response.py -cloudendure/model/initialization_step.py -cloudendure/model/inline_object.py -cloudendure/model/inline_object1.py -cloudendure/model/inline_object10.py -cloudendure/model/inline_object2.py -cloudendure/model/inline_object3.py -cloudendure/model/inline_object4.py -cloudendure/model/inline_object5.py -cloudendure/model/inline_object6.py -cloudendure/model/inline_object7.py -cloudendure/model/inline_object8.py -cloudendure/model/inline_object9.py -cloudendure/model/inline_response200.py -cloudendure/model/inline_response2001.py -cloudendure/model/inline_response2002.py -cloudendure/model/job.py -cloudendure/model/job_log.py -cloudendure/model/job_target_machine.py -cloudendure/model/jobs_list.py -cloudendure/model/key_value_list.py -cloudendure/model/launch_machines_parameters.py -cloudendure/model/launch_machines_parameters_debug_scripts.py -cloudendure/model/license.py -cloudendure/model/license_ce_admin_properties.py -cloudendure/model/license_features.py -cloudendure/model/license_list.py -cloudendure/model/list_users_result.py -cloudendure/model/list_users_results.py -cloudendure/model/logical_location.py -cloudendure/model/machine.py -cloudendure/model/machine_and_path_and_point_in_time.py -cloudendure/model/machine_and_point_in_time.py -cloudendure/model/machine_license.py -cloudendure/model/machine_life_cycle.py -cloudendure/model/machine_replication_configuration.py -cloudendure/model/machine_replication_info.py -cloudendure/model/machine_replication_info_initiation_states.py -cloudendure/model/machine_replication_info_initiation_states_items.py -cloudendure/model/machine_snapshot_credits.py -cloudendure/model/machine_source_properties.py -cloudendure/model/machine_source_properties_cpu.py -cloudendure/model/machine_source_properties_disks.py -cloudendure/model/machine_source_properties_installed_applications.py -cloudendure/model/machine_source_properties_installed_applications_items.py -cloudendure/model/machine_source_properties_running_services.py -cloudendure/model/machine_source_properties_running_services_items.py -cloudendure/model/machine_throttle_time_seconds.py -cloudendure/model/machines_list.py -cloudendure/model/machines_list_invalid_ids_and_job.py -cloudendure/model/network_interface.py -cloudendure/model/outpost.py -cloudendure/model/point_in_time.py -cloudendure/model/point_in_time_list.py -cloudendure/model/populate_job_names.py -cloudendure/model/populate_job_params.py -cloudendure/model/project.py -cloudendure/model/project_ce_admin_properties.py -cloudendure/model/project_features.py -cloudendure/model/project_storage.py -cloudendure/model/project_storage_working_storage.py -cloudendure/model/projects_and_users.py -cloudendure/model/projects_and_users_items.py -cloudendure/model/projects_list.py -cloudendure/model/recovery_plan.py -cloudendure/model/recovery_plan_list.py -cloudendure/model/recovery_plan_step.py -cloudendure/model/recovery_plan_steps.py -cloudendure/model/region.py -cloudendure/model/regions_list.py -cloudendure/model/replica.py -cloudendure/model/replication_configuration.py -cloudendure/model/replication_configuration_list.py -cloudendure/model/replication_configuration_replication_tags.py -cloudendure/model/saml_settings.py -cloudendure/model/security_group.py -cloudendure/model/storage_location.py -cloudendure/model/subnet.py -cloudendure/model/time.py -cloudendure/model/updateable_scripts.py -cloudendure/model/updateable_scripts_result.py -cloudendure/model/updateable_scripts_result_on_premise_volumes.py -cloudendure/model/upgrade_counter_delay.py -cloudendure/model/usage.py -cloudendure/model/usage_list.py -cloudendure/model/user.py -cloudendure/model/user_report.py -cloudendure/model/user_report_gcp_machines_finance_data.py -cloudendure/model/user_reports.py -cloudendure/model/user_settings.py -cloudendure/model/user_settings_send_notifications.py -cloudendure/model/users_and_roles.py -cloudendure/model/users_and_roles_items.py -cloudendure/model/users_list.py -cloudendure/model_utils.py -cloudendure/models/__init__.py -cloudendure/models/__init__.py -cloudendure/rest.py -docs/Account.md -docs/AccountApi.md -docs/AccountCeAdminProperties.md -docs/AccountLink.md -docs/AccountLinkList.md -docs/AccountRequest.md -docs/AccountRequestList.md -docs/AccountsList.md -docs/ActionsApi.md -docs/AgentNextReplicationInitRequest.md -docs/AllProjectFeatures.md -docs/AuditLog.md -docs/AuditLogChangedField.md -docs/AuditLogEntry.md -docs/AuditLogEntryParticipatingMachines.md -docs/AuthenticationApi.md -docs/BandwidthThrottling.md -docs/Blueprint.md -docs/BlueprintApi.md -docs/BlueprintDisks.md -docs/BlueprintList.md -docs/CSLPItem.md -docs/CSLPRequest.md -docs/CSLPResult.md -docs/Cloud.md -docs/CloudApi.md -docs/CloudCredentials.md -docs/CloudCredentialsApi.md -docs/CloudCredentialsList.md -docs/CloudCredentialsRequest.md -docs/CloudsList.md -docs/ComputeLocation.md -docs/Configurations.md -docs/ConfigurationsList.md -docs/DefaultApi.md -docs/DiskConfig.md -docs/DynamicConfiguration.md -docs/Error.md -docs/ExtendedAccountInfo.md -docs/GcpMachinesFinanceData.md -docs/IdentityProviderRedirectResponse.md -docs/InitializationStep.md -docs/InlineObject.md -docs/InlineObject1.md -docs/InlineObject10.md -docs/InlineObject2.md -docs/InlineObject3.md -docs/InlineObject4.md -docs/InlineObject5.md -docs/InlineObject6.md -docs/InlineObject7.md -docs/InlineObject8.md -docs/InlineObject9.md -docs/InlineResponse200.md -docs/InlineResponse2001.md -docs/InlineResponse2002.md -docs/Job.md -docs/JobLog.md -docs/JobTargetMachine.md -docs/JobsList.md -docs/KeyValueList.md -docs/LaunchMachinesParameters.md -docs/LaunchMachinesParametersDebugScripts.md -docs/License.md -docs/LicenseCeAdminProperties.md -docs/LicenseFeatures.md -docs/LicenseList.md -docs/LicensingApi.md -docs/ListUsersResult.md -docs/ListUsersResults.md -docs/LogicalLocation.md -docs/Machine.md -docs/MachineAndPathAndPointInTime.md -docs/MachineAndPointInTime.md -docs/MachineLicense.md -docs/MachineLifeCycle.md -docs/MachineReplicationConfiguration.md -docs/MachineReplicationInfo.md -docs/MachineReplicationInfoInitiationStates.md -docs/MachineReplicationInfoInitiationStatesItems.md -docs/MachineSnapshotCredits.md -docs/MachineSourceProperties.md -docs/MachineSourcePropertiesCpu.md -docs/MachineSourcePropertiesDisks.md -docs/MachineSourcePropertiesInstalledApplications.md -docs/MachineSourcePropertiesInstalledApplicationsItems.md -docs/MachineSourcePropertiesRunningServices.md -docs/MachineSourcePropertiesRunningServicesItems.md -docs/MachineThrottleTimeSeconds.md -docs/MachinesApi.md -docs/MachinesList.md -docs/MachinesListInvalidIDsAndJob.md -docs/NetworkInterface.md -docs/Outpost.md -docs/PointInTime.md -docs/PointInTimeList.md -docs/PopulateJobNames.md -docs/PopulateJobParams.md -docs/Project.md -docs/ProjectApi.md -docs/ProjectCeAdminProperties.md -docs/ProjectFeatures.md -docs/ProjectStorage.md -docs/ProjectStorageWorkingStorage.md -docs/ProjectsAndUsers.md -docs/ProjectsAndUsersItems.md -docs/ProjectsList.md -docs/RecoveryPlan.md -docs/RecoveryPlanList.md -docs/RecoveryPlanStep.md -docs/RecoveryPlanSteps.md -docs/RecoveryPlansApi.md -docs/Region.md -docs/RegionsList.md -docs/Replica.md -docs/ReplicationApi.md -docs/ReplicationConfiguration.md -docs/ReplicationConfigurationList.md -docs/ReplicationConfigurationReplicationTags.md -docs/SamlSettings.md -docs/SecurityGroup.md -docs/StorageLocation.md -docs/Subnet.md -docs/Time.md -docs/UpdateableScripts.md -docs/UpdateableScriptsResult.md -docs/UpdateableScriptsResultOnPremiseVolumes.md -docs/UpgradeCounterDelay.md -docs/Usage.md -docs/UsageList.md -docs/User.md -docs/UserApi.md -docs/UserReport.md -docs/UserReportGcpMachinesFinanceData.md -docs/UserReports.md -docs/UserSettings.md -docs/UserSettingsSendNotifications.md -docs/UsersAndRoles.md -docs/UsersAndRolesItems.md -docs/UsersList.md -git_push.sh -requirements.txt -setup.cfg -setup.py -test-requirements.txt -test/__init__.py -test/test_account.py -test/test_account_api.py -test/test_account_ce_admin_properties.py -test/test_account_link.py -test/test_account_link_list.py -test/test_account_request.py -test/test_account_request_list.py -test/test_accounts_list.py -test/test_actions_api.py -test/test_agent_next_replication_init_request.py -test/test_all_project_features.py -test/test_audit_log.py -test/test_audit_log_changed_field.py -test/test_audit_log_entry.py -test/test_audit_log_entry_participating_machines.py -test/test_authentication_api.py -test/test_bandwidth_throttling.py -test/test_blueprint.py -test/test_blueprint_api.py -test/test_blueprint_disks.py -test/test_blueprint_list.py -test/test_cloud.py -test/test_cloud_api.py -test/test_cloud_credentials.py -test/test_cloud_credentials_api.py -test/test_cloud_credentials_list.py -test/test_cloud_credentials_request.py -test/test_clouds_list.py -test/test_compute_location.py -test/test_configurations.py -test/test_configurations_list.py -test/test_cslp_item.py -test/test_cslp_request.py -test/test_cslp_result.py -test/test_default_api.py -test/test_disk_config.py -test/test_dynamic_configuration.py -test/test_error.py -test/test_extended_account_info.py -test/test_gcp_machines_finance_data.py -test/test_identity_provider_redirect_response.py -test/test_initialization_step.py -test/test_inline_object.py -test/test_inline_object1.py -test/test_inline_object10.py -test/test_inline_object2.py -test/test_inline_object3.py -test/test_inline_object4.py -test/test_inline_object5.py -test/test_inline_object6.py -test/test_inline_object7.py -test/test_inline_object8.py -test/test_inline_object9.py -test/test_inline_response200.py -test/test_inline_response2001.py -test/test_inline_response2002.py -test/test_job.py -test/test_job_log.py -test/test_job_target_machine.py -test/test_jobs_list.py -test/test_key_value_list.py -test/test_launch_machines_parameters.py -test/test_launch_machines_parameters_debug_scripts.py -test/test_license.py -test/test_license_ce_admin_properties.py -test/test_license_features.py -test/test_license_list.py -test/test_licensing_api.py -test/test_list_users_result.py -test/test_list_users_results.py -test/test_logical_location.py -test/test_machine.py -test/test_machine_and_path_and_point_in_time.py -test/test_machine_and_point_in_time.py -test/test_machine_license.py -test/test_machine_life_cycle.py -test/test_machine_replication_configuration.py -test/test_machine_replication_info.py -test/test_machine_replication_info_initiation_states.py -test/test_machine_replication_info_initiation_states_items.py -test/test_machine_snapshot_credits.py -test/test_machine_source_properties.py -test/test_machine_source_properties_cpu.py -test/test_machine_source_properties_disks.py -test/test_machine_source_properties_installed_applications.py -test/test_machine_source_properties_installed_applications_items.py -test/test_machine_source_properties_running_services.py -test/test_machine_source_properties_running_services_items.py -test/test_machine_throttle_time_seconds.py -test/test_machines_api.py -test/test_machines_list.py -test/test_machines_list_invalid_ids_and_job.py -test/test_network_interface.py -test/test_outpost.py -test/test_point_in_time.py -test/test_point_in_time_list.py -test/test_populate_job_names.py -test/test_populate_job_params.py -test/test_project.py -test/test_project_api.py -test/test_project_ce_admin_properties.py -test/test_project_features.py -test/test_project_storage.py -test/test_project_storage_working_storage.py -test/test_projects_and_users.py -test/test_projects_and_users_items.py -test/test_projects_list.py -test/test_recovery_plan.py -test/test_recovery_plan_list.py -test/test_recovery_plan_step.py -test/test_recovery_plan_steps.py -test/test_recovery_plans_api.py -test/test_region.py -test/test_regions_list.py -test/test_replica.py -test/test_replication_api.py -test/test_replication_configuration.py -test/test_replication_configuration_list.py -test/test_replication_configuration_replication_tags.py -test/test_saml_settings.py -test/test_security_group.py -test/test_storage_location.py -test/test_subnet.py -test/test_time.py -test/test_updateable_scripts.py -test/test_updateable_scripts_result.py -test/test_updateable_scripts_result_on_premise_volumes.py -test/test_upgrade_counter_delay.py -test/test_usage.py -test/test_usage_list.py -test/test_user.py -test/test_user_api.py -test/test_user_report.py -test/test_user_report_gcp_machines_finance_data.py -test/test_user_reports.py -test/test_user_settings.py -test/test_user_settings_send_notifications.py -test/test_users_and_roles.py -test/test_users_and_roles_items.py -test/test_users_list.py -tox.ini diff --git a/.openapi-generator/VERSION b/.openapi-generator/VERSION deleted file mode 100644 index 32f3eaad0..000000000 --- a/.openapi-generator/VERSION +++ /dev/null @@ -1 +0,0 @@ -5.0.1 \ No newline at end of file From e628d7788c1d99c72448cd4ba7a4c9a05d665ba4 Mon Sep 17 00:00:00 2001 From: Craig Monson Date: Wed, 14 Jul 2021 11:00:29 -0400 Subject: [PATCH 5/8] Fixing isort and black linting, and the lint build --- .github/workflows/lint-python.yml | 28 +++++++----------- Makefile | 12 ++++++-- cloudendure/__init__.py | 14 +++++---- cloudendure/api/account_api.py | 9 +++--- cloudendure/api/actions_api.py | 21 +++++++------- cloudendure/api/authentication_api.py | 13 +++++---- cloudendure/api/blueprint_api.py | 11 +++---- cloudendure/api/cloud_api.py | 13 +++++---- cloudendure/api/cloud_credentials_api.py | 13 +++++---- cloudendure/api/default_api.py | 21 +++++++------- cloudendure/api/licensing_api.py | 11 +++---- cloudendure/api/machines_api.py | 17 ++++++----- cloudendure/api/project_api.py | 17 ++++++----- cloudendure/api/recovery_plans_api.py | 15 +++++----- cloudendure/api/replication_api.py | 21 +++++++------- cloudendure/api/user_api.py | 13 +++++---- cloudendure/api_client.py | 12 ++++---- cloudendure/configuration.py | 4 +-- cloudendure/model/account.py | 4 +-- .../model/account_ce_admin_properties.py | 4 +-- cloudendure/model/account_link.py | 4 +-- cloudendure/model/account_link_list.py | 4 +-- cloudendure/model/account_request.py | 4 +-- cloudendure/model/account_request_list.py | 4 +-- cloudendure/model/accounts_list.py | 4 +-- .../agent_next_replication_init_request.py | 4 +-- cloudendure/model/all_project_features.py | 4 +-- cloudendure/model/audit_log.py | 4 +-- cloudendure/model/audit_log_changed_field.py | 4 +-- cloudendure/model/audit_log_entry.py | 4 +-- .../audit_log_entry_participating_machines.py | 4 +-- cloudendure/model/bandwidth_throttling.py | 4 +-- cloudendure/model/blueprint.py | 4 +-- cloudendure/model/blueprint_disks.py | 4 +-- cloudendure/model/blueprint_list.py | 4 +-- cloudendure/model/cloud.py | 4 +-- cloudendure/model/cloud_credentials.py | 4 +-- cloudendure/model/cloud_credentials_list.py | 4 +-- .../model/cloud_credentials_request.py | 4 +-- cloudendure/model/clouds_list.py | 4 +-- cloudendure/model/compute_location.py | 4 +-- cloudendure/model/configurations.py | 4 +-- cloudendure/model/configurations_list.py | 4 +-- cloudendure/model/cslp_item.py | 4 +-- cloudendure/model/cslp_request.py | 4 +-- cloudendure/model/cslp_result.py | 4 +-- cloudendure/model/disk_config.py | 4 +-- cloudendure/model/dynamic_configuration.py | 4 +-- cloudendure/model/error.py | 4 +-- cloudendure/model/extended_account_info.py | 4 +-- .../model/gcp_machines_finance_data.py | 4 +-- .../identity_provider_redirect_response.py | 4 +-- cloudendure/model/initialization_step.py | 4 +-- cloudendure/model/inline_object.py | 4 +-- cloudendure/model/inline_object1.py | 4 +-- cloudendure/model/inline_object10.py | 4 +-- cloudendure/model/inline_object2.py | 4 +-- cloudendure/model/inline_object3.py | 4 +-- cloudendure/model/inline_object4.py | 4 +-- cloudendure/model/inline_object5.py | 4 +-- cloudendure/model/inline_object6.py | 4 +-- cloudendure/model/inline_object7.py | 4 +-- cloudendure/model/inline_object8.py | 4 +-- cloudendure/model/inline_object9.py | 4 +-- cloudendure/model/inline_response200.py | 4 +-- cloudendure/model/inline_response2001.py | 4 +-- cloudendure/model/inline_response2002.py | 4 +-- cloudendure/model/job.py | 4 +-- cloudendure/model/job_log.py | 4 +-- cloudendure/model/job_target_machine.py | 4 +-- cloudendure/model/jobs_list.py | 4 +-- cloudendure/model/key_value_list.py | 4 +-- .../model/launch_machines_parameters.py | 4 +-- ...aunch_machines_parameters_debug_scripts.py | 4 +-- cloudendure/model/license.py | 4 +-- .../model/license_ce_admin_properties.py | 4 +-- cloudendure/model/license_features.py | 4 +-- cloudendure/model/license_list.py | 4 +-- cloudendure/model/list_users_result.py | 4 +-- cloudendure/model/list_users_results.py | 4 +-- cloudendure/model/logical_location.py | 4 +-- cloudendure/model/machine.py | 4 +-- .../machine_and_path_and_point_in_time.py | 4 +-- .../model/machine_and_point_in_time.py | 4 +-- cloudendure/model/machine_license.py | 4 +-- cloudendure/model/machine_life_cycle.py | 4 +-- .../machine_replication_configuration.py | 4 +-- cloudendure/model/machine_replication_info.py | 4 +-- ...hine_replication_info_initiation_states.py | 4 +-- ...eplication_info_initiation_states_items.py | 4 +-- cloudendure/model/machine_snapshot_credits.py | 4 +-- .../model/machine_source_properties.py | 4 +-- .../model/machine_source_properties_cpu.py | 4 +-- .../model/machine_source_properties_disks.py | 4 +-- ...ource_properties_installed_applications.py | 4 +-- ...properties_installed_applications_items.py | 4 +-- ...hine_source_properties_running_services.py | 4 +-- ...ource_properties_running_services_items.py | 4 +-- .../model/machine_throttle_time_seconds.py | 4 +-- cloudendure/model/machines_list.py | 4 +-- .../machines_list_invalid_ids_and_job.py | 4 +-- cloudendure/model/network_interface.py | 4 +-- cloudendure/model/outpost.py | 4 +-- cloudendure/model/point_in_time.py | 4 +-- cloudendure/model/point_in_time_list.py | 4 +-- cloudendure/model/populate_job_names.py | 4 +-- cloudendure/model/populate_job_params.py | 4 +-- cloudendure/model/project.py | 4 +-- .../model/project_ce_admin_properties.py | 4 +-- cloudendure/model/project_features.py | 4 +-- cloudendure/model/project_storage.py | 4 +-- .../model/project_storage_working_storage.py | 4 +-- cloudendure/model/projects_and_users.py | 4 +-- cloudendure/model/projects_and_users_items.py | 4 +-- cloudendure/model/projects_list.py | 4 +-- cloudendure/model/recovery_plan.py | 4 +-- cloudendure/model/recovery_plan_list.py | 4 +-- cloudendure/model/recovery_plan_step.py | 4 +-- cloudendure/model/recovery_plan_steps.py | 4 +-- cloudendure/model/region.py | 4 +-- cloudendure/model/regions_list.py | 4 +-- cloudendure/model/replica.py | 4 +-- .../model/replication_configuration.py | 4 +-- .../model/replication_configuration_list.py | 4 +-- ...lication_configuration_replication_tags.py | 4 +-- cloudendure/model/saml_settings.py | 4 +-- cloudendure/model/security_group.py | 4 +-- cloudendure/model/storage_location.py | 4 +-- cloudendure/model/subnet.py | 4 +-- cloudendure/model/time.py | 4 +-- cloudendure/model/updateable_scripts.py | 4 +-- .../model/updateable_scripts_result.py | 4 +-- ...eable_scripts_result_on_premise_volumes.py | 4 +-- cloudendure/model/upgrade_counter_delay.py | 4 +-- cloudendure/model/usage.py | 4 +-- cloudendure/model/usage_list.py | 4 +-- cloudendure/model/user.py | 4 +-- cloudendure/model/user_report.py | 4 +-- .../user_report_gcp_machines_finance_data.py | 4 +-- cloudendure/model/user_reports.py | 4 +-- cloudendure/model/user_settings.py | 4 +-- .../model/user_settings_send_notifications.py | 4 +-- cloudendure/model/users_and_roles.py | 4 +-- cloudendure/model/users_and_roles_items.py | 4 +-- cloudendure/model/users_list.py | 4 +-- cloudendure/model_utils.py | 4 +-- cloudendure/models/__init__.py | 8 ++--- cloudendure/rest.py | 5 ++-- test/test_account.py | 9 +++--- test/test_account_api.py | 2 +- test/test_account_ce_admin_properties.py | 2 +- test/test_account_link.py | 2 +- test/test_account_link_list.py | 5 ++-- test/test_account_request.py | 2 +- test/test_account_request_list.py | 5 ++-- test/test_accounts_list.py | 5 ++-- test/test_actions_api.py | 2 +- ...est_agent_next_replication_init_request.py | 6 ++-- test/test_all_project_features.py | 7 +++-- test/test_audit_log.py | 7 +++-- test/test_audit_log_changed_field.py | 2 +- test/test_audit_log_entry.py | 11 ++++--- ..._audit_log_entry_participating_machines.py | 6 ++-- test/test_authentication_api.py | 2 +- test/test_bandwidth_throttling.py | 2 +- test/test_blueprint.py | 15 ++++++---- test/test_blueprint_api.py | 2 +- test/test_blueprint_disks.py | 2 +- test/test_blueprint_list.py | 5 ++-- test/test_cloud.py | 2 +- test/test_cloud_api.py | 2 +- test/test_cloud_credentials.py | 2 +- test/test_cloud_credentials_api.py | 2 +- test/test_cloud_credentials_list.py | 5 ++-- test/test_cloud_credentials_request.py | 2 +- test/test_clouds_list.py | 5 ++-- test/test_compute_location.py | 2 +- test/test_configurations.py | 2 +- test/test_configurations_list.py | 5 ++-- test/test_cslp_item.py | 2 +- test/test_cslp_request.py | 5 ++-- test/test_cslp_result.py | 5 ++-- test/test_default_api.py | 2 +- test/test_disk_config.py | 2 +- test/test_dynamic_configuration.py | 2 +- test/test_error.py | 2 +- test/test_extended_account_info.py | 23 ++++++++------- test/test_gcp_machines_finance_data.py | 2 +- ...est_identity_provider_redirect_response.py | 6 ++-- test/test_initialization_step.py | 2 +- test/test_inline_object.py | 2 +- test/test_inline_object1.py | 2 +- test/test_inline_object10.py | 2 +- test/test_inline_object2.py | 2 +- test/test_inline_object3.py | 2 +- test/test_inline_object4.py | 2 +- test/test_inline_object5.py | 2 +- test/test_inline_object6.py | 2 +- test/test_inline_object7.py | 2 +- test/test_inline_object8.py | 2 +- test/test_inline_object9.py | 2 +- test/test_inline_response200.py | 2 +- test/test_inline_response2001.py | 2 +- test/test_inline_response2002.py | 2 +- test/test_job.py | 9 +++--- test/test_job_log.py | 2 +- test/test_job_target_machine.py | 2 +- test/test_jobs_list.py | 5 ++-- test/test_key_value_list.py | 11 +++++-- test/test_launch_machines_parameters.py | 13 +++++---- ...aunch_machines_parameters_debug_scripts.py | 6 ++-- test/test_license.py | 9 +++--- test/test_license_ce_admin_properties.py | 2 +- test/test_license_features.py | 2 +- test/test_license_list.py | 5 ++-- test/test_licensing_api.py | 2 +- test/test_list_users_result.py | 2 +- test/test_list_users_results.py | 5 ++-- test/test_logical_location.py | 2 +- test/test_machine.py | 21 ++++++++------ ...test_machine_and_path_and_point_in_time.py | 6 ++-- test/test_machine_and_point_in_time.py | 2 +- test/test_machine_license.py | 2 +- test/test_machine_life_cycle.py | 2 +- .../test_machine_replication_configuration.py | 17 +++++++---- test/test_machine_replication_info.py | 11 +++++-- ...hine_replication_info_initiation_states.py | 15 +++++++--- ...eplication_info_initiation_states_items.py | 9 ++++-- test/test_machine_snapshot_credits.py | 2 +- test/test_machine_source_properties.py | 29 +++++++++++++------ test/test_machine_source_properties_cpu.py | 2 +- test/test_machine_source_properties_disks.py | 6 ++-- ...ource_properties_installed_applications.py | 15 +++++++--- ...properties_installed_applications_items.py | 6 ++-- ...hine_source_properties_running_services.py | 15 +++++++--- ...ource_properties_running_services_items.py | 6 ++-- test/test_machine_throttle_time_seconds.py | 2 +- test/test_machines_api.py | 2 +- test/test_machines_list.py | 5 ++-- .../test_machines_list_invalid_ids_and_job.py | 11 ++++--- test/test_network_interface.py | 2 +- test/test_outpost.py | 2 +- test/test_point_in_time.py | 2 +- test/test_point_in_time_list.py | 5 ++-- test/test_populate_job_names.py | 2 +- test/test_populate_job_params.py | 2 +- test/test_project.py | 9 +++--- test/test_project_api.py | 2 +- test/test_project_ce_admin_properties.py | 2 +- test/test_project_features.py | 2 +- test/test_project_storage.py | 9 ++++-- test/test_project_storage_working_storage.py | 6 ++-- test/test_projects_and_users.py | 7 +++-- test/test_projects_and_users_items.py | 2 +- test/test_projects_list.py | 5 ++-- test/test_recovery_plan.py | 7 +++-- test/test_recovery_plan_list.py | 5 ++-- test/test_recovery_plan_step.py | 2 +- test/test_recovery_plan_steps.py | 5 ++-- test/test_recovery_plans_api.py | 2 +- test/test_region.py | 19 ++++++------ test/test_regions_list.py | 5 ++-- test/test_replica.py | 2 +- test/test_replication_api.py | 6 ++-- test/test_replication_configuration.py | 11 +++++-- test/test_replication_configuration_list.py | 9 ++++-- ...lication_configuration_replication_tags.py | 6 ++-- test/test_saml_settings.py | 2 +- test/test_security_group.py | 2 +- test/test_storage_location.py | 2 +- test/test_subnet.py | 2 +- test/test_time.py | 2 +- test/test_updateable_scripts.py | 7 +++-- test/test_updateable_scripts_result.py | 11 +++++-- ...eable_scripts_result_on_premise_volumes.py | 6 ++-- test/test_upgrade_counter_delay.py | 2 +- test/test_usage.py | 2 +- test/test_usage_list.py | 5 ++-- test/test_user.py | 7 +++-- test/test_user_api.py | 2 +- test/test_user_report.py | 9 ++++-- ...t_user_report_gcp_machines_finance_data.py | 9 ++++-- test/test_user_reports.py | 5 ++-- test/test_user_settings.py | 9 ++++-- test/test_user_settings_send_notifications.py | 6 ++-- test/test_users_and_roles.py | 7 +++-- test/test_users_and_roles_items.py | 2 +- test/test_users_list.py | 5 ++-- 288 files changed, 839 insertions(+), 667 deletions(-) diff --git a/.github/workflows/lint-python.yml b/.github/workflows/lint-python.yml index 15bc4891a..b8c9780c3 100644 --- a/.github/workflows/lint-python.yml +++ b/.github/workflows/lint-python.yml @@ -12,26 +12,20 @@ jobs: max-parallel: 4 matrix: python-version: ['3.8'] + poetry-version: ['1.1.7'] steps: - - uses: actions/checkout@v1 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v1 + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} architecture: x64 - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install setuptools wheel twine - curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python - source $HOME/.poetry/env - poetry export -f requirements.txt -o requirements.txt --dev - pip install -r requirements.txt + - name: Run image + uses: abatilo/actions-poetry@v2.0.0 + with: + poetry-version: ${{ matrix.poetry-version }} + - name: Get dependencies + run: poetry install - name: Check python imports with isort - run: | - isort --version-number - isort -rc --check-only --quiet . + run: make isort-test - name: Lint with Black - run: | - black --version - black --check . + run: make black-test diff --git a/Makefile b/Makefile index c691c3aa4..9313607f4 100644 --- a/Makefile +++ b/Makefile @@ -22,11 +22,19 @@ test: ## execute pytest in the poetry environment .PHONY: isort isort: ## run isort (order import statements) on our py code - poetry run isort tests/ cloudendure/ + poetry run isort -rc test/ cloudendure/ + +.PHONY: isort-test +isort-test: ## run isort to test import linting + poetry run isort -rc --check-only --quiet test/ cloudendure/ .PHONY: black black: ## run black (linter) agaist our python code - poetry run black cloudendure/ + poetry run black test/ cloudendure/ + +.PHONY: black-test +black-test: ## run black to test linting + poetry run black --check test/ cloudendure/ .PHONY: lint lint: isort black ## run isort and black against our python code diff --git a/cloudendure/__init__.py b/cloudendure/__init__.py index 9f47af521..850bc2c48 100644 --- a/cloudendure/__init__.py +++ b/cloudendure/__init__.py @@ -19,9 +19,11 @@ from cloudendure.configuration import Configuration # import exceptions -from cloudendure.exceptions import OpenApiException -from cloudendure.exceptions import ApiAttributeError -from cloudendure.exceptions import ApiTypeError -from cloudendure.exceptions import ApiValueError -from cloudendure.exceptions import ApiKeyError -from cloudendure.exceptions import ApiException +from cloudendure.exceptions import ( + ApiAttributeError, + ApiException, + ApiKeyError, + ApiTypeError, + ApiValueError, + OpenApiException, +) diff --git a/cloudendure/api/account_api.py b/cloudendure/api/account_api.py index d4728d70d..4c892e6ea 100644 --- a/cloudendure/api/account_api.py +++ b/cloudendure/api/account_api.py @@ -11,9 +11,11 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient, Endpoint as _Endpoint -from cloudendure.model_utils import ( # noqa: F401 - check_allowed_values, +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.model.account import Account +from cloudendure.model_utils import check_allowed_values # noqa: F401 +from cloudendure.model_utils import ( check_validations, date, datetime, @@ -21,7 +23,6 @@ none_type, validate_and_convert_types, ) -from cloudendure.model.account import Account class AccountApi(object): diff --git a/cloudendure/api/actions_api.py b/cloudendure/api/actions_api.py index 33456bfc2..f78071bad 100644 --- a/cloudendure/api/actions_api.py +++ b/cloudendure/api/actions_api.py @@ -11,16 +11,8 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient, Endpoint as _Endpoint -from cloudendure.model_utils import ( # noqa: F401 - check_allowed_values, - check_validations, - date, - datetime, - file_type, - none_type, - validate_and_convert_types, -) +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint from cloudendure.model.error import Error from cloudendure.model.inline_object3 import InlineObject3 from cloudendure.model.inline_object4 import InlineObject4 @@ -33,6 +25,15 @@ from cloudendure.model.machines_list_invalid_ids_and_job import ( MachinesListInvalidIDsAndJob, ) +from cloudendure.model_utils import check_allowed_values # noqa: F401 +from cloudendure.model_utils import ( + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types, +) class ActionsApi(object): diff --git a/cloudendure/api/authentication_api.py b/cloudendure/api/authentication_api.py index 5b9cffebc..5ce10950e 100644 --- a/cloudendure/api/authentication_api.py +++ b/cloudendure/api/authentication_api.py @@ -11,9 +11,13 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient, Endpoint as _Endpoint -from cloudendure.model_utils import ( # noqa: F401 - check_allowed_values, +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.model.error import Error +from cloudendure.model.inline_object1 import InlineObject1 +from cloudendure.model.user import User +from cloudendure.model_utils import check_allowed_values # noqa: F401 +from cloudendure.model_utils import ( check_validations, date, datetime, @@ -21,9 +25,6 @@ none_type, validate_and_convert_types, ) -from cloudendure.model.error import Error -from cloudendure.model.inline_object1 import InlineObject1 -from cloudendure.model.user import User class AuthenticationApi(object): diff --git a/cloudendure/api/blueprint_api.py b/cloudendure/api/blueprint_api.py index 8728626c5..588e8bbdd 100644 --- a/cloudendure/api/blueprint_api.py +++ b/cloudendure/api/blueprint_api.py @@ -11,9 +11,12 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient, Endpoint as _Endpoint -from cloudendure.model_utils import ( # noqa: F401 - check_allowed_values, +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.model.blueprint import Blueprint +from cloudendure.model.blueprint_list import BlueprintList +from cloudendure.model_utils import check_allowed_values # noqa: F401 +from cloudendure.model_utils import ( check_validations, date, datetime, @@ -21,8 +24,6 @@ none_type, validate_and_convert_types, ) -from cloudendure.model.blueprint import Blueprint -from cloudendure.model.blueprint_list import BlueprintList class BlueprintApi(object): diff --git a/cloudendure/api/cloud_api.py b/cloudendure/api/cloud_api.py index c6ad9e177..a01febbf0 100644 --- a/cloudendure/api/cloud_api.py +++ b/cloudendure/api/cloud_api.py @@ -11,9 +11,13 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient, Endpoint as _Endpoint -from cloudendure.model_utils import ( # noqa: F401 - check_allowed_values, +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.model.clouds_list import CloudsList +from cloudendure.model.region import Region +from cloudendure.model.regions_list import RegionsList +from cloudendure.model_utils import check_allowed_values # noqa: F401 +from cloudendure.model_utils import ( check_validations, date, datetime, @@ -21,9 +25,6 @@ none_type, validate_and_convert_types, ) -from cloudendure.model.clouds_list import CloudsList -from cloudendure.model.region import Region -from cloudendure.model.regions_list import RegionsList class CloudApi(object): diff --git a/cloudendure/api/cloud_credentials_api.py b/cloudendure/api/cloud_credentials_api.py index e0620fd03..8855303fa 100644 --- a/cloudendure/api/cloud_credentials_api.py +++ b/cloudendure/api/cloud_credentials_api.py @@ -11,9 +11,13 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient, Endpoint as _Endpoint -from cloudendure.model_utils import ( # noqa: F401 - check_allowed_values, +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.model.cloud_credentials import CloudCredentials +from cloudendure.model.cloud_credentials_list import CloudCredentialsList +from cloudendure.model.cloud_credentials_request import CloudCredentialsRequest +from cloudendure.model_utils import check_allowed_values # noqa: F401 +from cloudendure.model_utils import ( check_validations, date, datetime, @@ -21,9 +25,6 @@ none_type, validate_and_convert_types, ) -from cloudendure.model.cloud_credentials import CloudCredentials -from cloudendure.model.cloud_credentials_list import CloudCredentialsList -from cloudendure.model.cloud_credentials_request import CloudCredentialsRequest class CloudCredentialsApi(object): diff --git a/cloudendure/api/default_api.py b/cloudendure/api/default_api.py index fe559a59e..7c73102c0 100644 --- a/cloudendure/api/default_api.py +++ b/cloudendure/api/default_api.py @@ -11,16 +11,8 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient, Endpoint as _Endpoint -from cloudendure.model_utils import ( # noqa: F401 - check_allowed_values, - check_validations, - date, - datetime, - file_type, - none_type, - validate_and_convert_types, -) +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint from cloudendure.model.audit_log import AuditLog from cloudendure.model.error import Error from cloudendure.model.extended_account_info import ExtendedAccountInfo @@ -33,6 +25,15 @@ from cloudendure.model.user import User from cloudendure.model.users_and_roles import UsersAndRoles from cloudendure.model.users_list import UsersList +from cloudendure.model_utils import check_allowed_values # noqa: F401 +from cloudendure.model_utils import ( + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types, +) class DefaultApi(object): diff --git a/cloudendure/api/licensing_api.py b/cloudendure/api/licensing_api.py index d43df0005..e5094c04a 100644 --- a/cloudendure/api/licensing_api.py +++ b/cloudendure/api/licensing_api.py @@ -11,9 +11,12 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient, Endpoint as _Endpoint -from cloudendure.model_utils import ( # noqa: F401 - check_allowed_values, +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.model.license import License +from cloudendure.model.license_list import LicenseList +from cloudendure.model_utils import check_allowed_values # noqa: F401 +from cloudendure.model_utils import ( check_validations, date, datetime, @@ -21,8 +24,6 @@ none_type, validate_and_convert_types, ) -from cloudendure.model.license import License -from cloudendure.model.license_list import LicenseList class LicensingApi(object): diff --git a/cloudendure/api/machines_api.py b/cloudendure/api/machines_api.py index 168f8d788..dfe7600e7 100644 --- a/cloudendure/api/machines_api.py +++ b/cloudendure/api/machines_api.py @@ -11,9 +11,15 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient, Endpoint as _Endpoint -from cloudendure.model_utils import ( # noqa: F401 - check_allowed_values, +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.model.error import Error +from cloudendure.model.inline_object8 import InlineObject8 +from cloudendure.model.machine import Machine +from cloudendure.model.machines_list import MachinesList +from cloudendure.model.replica import Replica +from cloudendure.model_utils import check_allowed_values # noqa: F401 +from cloudendure.model_utils import ( check_validations, date, datetime, @@ -21,11 +27,6 @@ none_type, validate_and_convert_types, ) -from cloudendure.model.error import Error -from cloudendure.model.inline_object8 import InlineObject8 -from cloudendure.model.machine import Machine -from cloudendure.model.machines_list import MachinesList -from cloudendure.model.replica import Replica class MachinesApi(object): diff --git a/cloudendure/api/project_api.py b/cloudendure/api/project_api.py index 4d20aa5b2..05fb32679 100644 --- a/cloudendure/api/project_api.py +++ b/cloudendure/api/project_api.py @@ -11,9 +11,15 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient, Endpoint as _Endpoint -from cloudendure.model_utils import ( # noqa: F401 - check_allowed_values, +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.model.cloud_credentials_request import CloudCredentialsRequest +from cloudendure.model.error import Error +from cloudendure.model.inline_response200 import InlineResponse200 +from cloudendure.model.project import Project +from cloudendure.model.projects_list import ProjectsList +from cloudendure.model_utils import check_allowed_values # noqa: F401 +from cloudendure.model_utils import ( check_validations, date, datetime, @@ -21,11 +27,6 @@ none_type, validate_and_convert_types, ) -from cloudendure.model.cloud_credentials_request import CloudCredentialsRequest -from cloudendure.model.error import Error -from cloudendure.model.inline_response200 import InlineResponse200 -from cloudendure.model.project import Project -from cloudendure.model.projects_list import ProjectsList class ProjectApi(object): diff --git a/cloudendure/api/recovery_plans_api.py b/cloudendure/api/recovery_plans_api.py index 2150c2378..23b9283bf 100644 --- a/cloudendure/api/recovery_plans_api.py +++ b/cloudendure/api/recovery_plans_api.py @@ -11,9 +11,14 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient, Endpoint as _Endpoint -from cloudendure.model_utils import ( # noqa: F401 - check_allowed_values, +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.model.inline_object10 import InlineObject10 +from cloudendure.model.job import Job +from cloudendure.model.recovery_plan import RecoveryPlan +from cloudendure.model.recovery_plan_list import RecoveryPlanList +from cloudendure.model_utils import check_allowed_values # noqa: F401 +from cloudendure.model_utils import ( check_validations, date, datetime, @@ -21,10 +26,6 @@ none_type, validate_and_convert_types, ) -from cloudendure.model.inline_object10 import InlineObject10 -from cloudendure.model.job import Job -from cloudendure.model.recovery_plan import RecoveryPlan -from cloudendure.model.recovery_plan_list import RecoveryPlanList class RecoveryPlansApi(object): diff --git a/cloudendure/api/replication_api.py b/cloudendure/api/replication_api.py index d7000a255..3957bc1f1 100644 --- a/cloudendure/api/replication_api.py +++ b/cloudendure/api/replication_api.py @@ -11,16 +11,8 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient, Endpoint as _Endpoint -from cloudendure.model_utils import ( # noqa: F401 - check_allowed_values, - check_validations, - date, - datetime, - file_type, - none_type, - validate_and_convert_types, -) +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint from cloudendure.model.bandwidth_throttling import BandwidthThrottling from cloudendure.model.error import Error from cloudendure.model.point_in_time_list import PointInTimeList @@ -28,6 +20,15 @@ from cloudendure.model.replication_configuration_list import ( ReplicationConfigurationList, ) +from cloudendure.model_utils import check_allowed_values # noqa: F401 +from cloudendure.model_utils import ( + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types, +) class ReplicationApi(object): diff --git a/cloudendure/api/user_api.py b/cloudendure/api/user_api.py index 0204cc3de..3d7455396 100644 --- a/cloudendure/api/user_api.py +++ b/cloudendure/api/user_api.py @@ -11,9 +11,13 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.api_client import ApiClient, Endpoint as _Endpoint -from cloudendure.model_utils import ( # noqa: F401 - check_allowed_values, +from cloudendure.api_client import ApiClient +from cloudendure.api_client import Endpoint as _Endpoint +from cloudendure.model.error import Error +from cloudendure.model.inline_object import InlineObject +from cloudendure.model.user import User +from cloudendure.model_utils import check_allowed_values # noqa: F401 +from cloudendure.model_utils import ( check_validations, date, datetime, @@ -21,9 +25,6 @@ none_type, validate_and_convert_types, ) -from cloudendure.model.error import Error -from cloudendure.model.inline_object import InlineObject -from cloudendure.model.user import User class UserApi(object): diff --git a/cloudendure/api_client.py b/cloudendure/api_client.py index 960c6fe90..a91d133d5 100644 --- a/cloudendure/api_client.py +++ b/cloudendure/api_client.py @@ -8,25 +8,25 @@ """ -import json import atexit -import mimetypes -from multiprocessing.pool import ThreadPool import io +import json +import mimetypes import os import re import typing +from multiprocessing.pool import ThreadPool from urllib.parse import quote -from urllib3.fields import RequestField +from urllib3.fields import RequestField from cloudendure import rest from cloudendure.configuration import Configuration -from cloudendure.exceptions import ApiTypeError, ApiValueError, ApiException +from cloudendure.exceptions import ApiException, ApiTypeError, ApiValueError from cloudendure.model_utils import ( + ModelComposed, ModelNormal, ModelSimple, - ModelComposed, check_allowed_values, check_validations, date, diff --git a/cloudendure/configuration.py b/cloudendure/configuration.py index 4ff4d8ef8..bcc463b6f 100644 --- a/cloudendure/configuration.py +++ b/cloudendure/configuration.py @@ -12,12 +12,12 @@ import logging import multiprocessing import sys +from http import client as http_client + import urllib3 -from http import client as http_client from cloudendure.exceptions import ApiValueError - JSON_SCHEMA_VALIDATION_KEYWORDS = { "multipleOf", "maximum", diff --git a/cloudendure/model/account.py b/cloudendure/model/account.py index 29f569ea2..7a241acf8 100644 --- a/cloudendure/model/account.py +++ b/cloudendure/model/account.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/account_ce_admin_properties.py b/cloudendure/model/account_ce_admin_properties.py index b3aeb7eed..b0a5bb40c 100644 --- a/cloudendure/model/account_ce_admin_properties.py +++ b/cloudendure/model/account_ce_admin_properties.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/account_link.py b/cloudendure/model/account_link.py index 71eabf645..903e1784b 100644 --- a/cloudendure/model/account_link.py +++ b/cloudendure/model/account_link.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/account_link_list.py b/cloudendure/model/account_link_list.py index ec39eb6f7..c2d03e40d 100644 --- a/cloudendure/model/account_link_list.py +++ b/cloudendure/model/account_link_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/account_request.py b/cloudendure/model/account_request.py index 5c423b43d..a7343253f 100644 --- a/cloudendure/model/account_request.py +++ b/cloudendure/model/account_request.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/account_request_list.py b/cloudendure/model/account_request_list.py index 60314ff1c..c68ec6302 100644 --- a/cloudendure/model/account_request_list.py +++ b/cloudendure/model/account_request_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/accounts_list.py b/cloudendure/model/accounts_list.py index 6d3e9dac3..19ec780ed 100644 --- a/cloudendure/model/accounts_list.py +++ b/cloudendure/model/accounts_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/agent_next_replication_init_request.py b/cloudendure/model/agent_next_replication_init_request.py index d13ae3434..79fe84ef7 100644 --- a/cloudendure/model/agent_next_replication_init_request.py +++ b/cloudendure/model/agent_next_replication_init_request.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/all_project_features.py b/cloudendure/model/all_project_features.py index b6dc06abb..67863375a 100644 --- a/cloudendure/model/all_project_features.py +++ b/cloudendure/model/all_project_features.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/audit_log.py b/cloudendure/model/audit_log.py index 101f29550..480d65914 100644 --- a/cloudendure/model/audit_log.py +++ b/cloudendure/model/audit_log.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/audit_log_changed_field.py b/cloudendure/model/audit_log_changed_field.py index 44e26639c..78e562c92 100644 --- a/cloudendure/model/audit_log_changed_field.py +++ b/cloudendure/model/audit_log_changed_field.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/audit_log_entry.py b/cloudendure/model/audit_log_entry.py index 4a741d79e..cea01480a 100644 --- a/cloudendure/model/audit_log_entry.py +++ b/cloudendure/model/audit_log_entry.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/audit_log_entry_participating_machines.py b/cloudendure/model/audit_log_entry_participating_machines.py index 9b1cffddb..2915b0359 100644 --- a/cloudendure/model/audit_log_entry_participating_machines.py +++ b/cloudendure/model/audit_log_entry_participating_machines.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/bandwidth_throttling.py b/cloudendure/model/bandwidth_throttling.py index 24a9f3c64..3b8d97831 100644 --- a/cloudendure/model/bandwidth_throttling.py +++ b/cloudendure/model/bandwidth_throttling.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/blueprint.py b/cloudendure/model/blueprint.py index a142c6fc1..10f08fd9e 100644 --- a/cloudendure/model/blueprint.py +++ b/cloudendure/model/blueprint.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/blueprint_disks.py b/cloudendure/model/blueprint_disks.py index f8959c2cc..53b1b91e9 100644 --- a/cloudendure/model/blueprint_disks.py +++ b/cloudendure/model/blueprint_disks.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/blueprint_list.py b/cloudendure/model/blueprint_list.py index 16bf1b361..c172f72a9 100644 --- a/cloudendure/model/blueprint_list.py +++ b/cloudendure/model/blueprint_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/cloud.py b/cloudendure/model/cloud.py index acf07e9dc..bfbea7f4a 100644 --- a/cloudendure/model/cloud.py +++ b/cloudendure/model/cloud.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/cloud_credentials.py b/cloudendure/model/cloud_credentials.py index b091c347e..70e051494 100644 --- a/cloudendure/model/cloud_credentials.py +++ b/cloudendure/model/cloud_credentials.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/cloud_credentials_list.py b/cloudendure/model/cloud_credentials_list.py index 5b73a75e0..8c0c7df12 100644 --- a/cloudendure/model/cloud_credentials_list.py +++ b/cloudendure/model/cloud_credentials_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/cloud_credentials_request.py b/cloudendure/model/cloud_credentials_request.py index 21040833e..3842ca5d8 100644 --- a/cloudendure/model/cloud_credentials_request.py +++ b/cloudendure/model/cloud_credentials_request.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/clouds_list.py b/cloudendure/model/clouds_list.py index b4f295311..326d35cf6 100644 --- a/cloudendure/model/clouds_list.py +++ b/cloudendure/model/clouds_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/compute_location.py b/cloudendure/model/compute_location.py index a732aa7f1..e74b8556d 100644 --- a/cloudendure/model/compute_location.py +++ b/cloudendure/model/compute_location.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/configurations.py b/cloudendure/model/configurations.py index 862ad6f52..310a6e887 100644 --- a/cloudendure/model/configurations.py +++ b/cloudendure/model/configurations.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/configurations_list.py b/cloudendure/model/configurations_list.py index 1819605f0..654738dce 100644 --- a/cloudendure/model/configurations_list.py +++ b/cloudendure/model/configurations_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/cslp_item.py b/cloudendure/model/cslp_item.py index efbd23d18..5aa2b3687 100644 --- a/cloudendure/model/cslp_item.py +++ b/cloudendure/model/cslp_item.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/cslp_request.py b/cloudendure/model/cslp_request.py index 764f1d193..21484c81f 100644 --- a/cloudendure/model/cslp_request.py +++ b/cloudendure/model/cslp_request.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/cslp_result.py b/cloudendure/model/cslp_result.py index fe353714c..d93081ec4 100644 --- a/cloudendure/model/cslp_result.py +++ b/cloudendure/model/cslp_result.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/disk_config.py b/cloudendure/model/disk_config.py index 97a8daca0..5ec9cb67c 100644 --- a/cloudendure/model/disk_config.py +++ b/cloudendure/model/disk_config.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/dynamic_configuration.py b/cloudendure/model/dynamic_configuration.py index 670f53d56..445ebe831 100644 --- a/cloudendure/model/dynamic_configuration.py +++ b/cloudendure/model/dynamic_configuration.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/error.py b/cloudendure/model/error.py index c6e5bae82..a6d108a81 100644 --- a/cloudendure/model/error.py +++ b/cloudendure/model/error.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/extended_account_info.py b/cloudendure/model/extended_account_info.py index 38942d5e4..bcc49d2e3 100644 --- a/cloudendure/model/extended_account_info.py +++ b/cloudendure/model/extended_account_info.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/gcp_machines_finance_data.py b/cloudendure/model/gcp_machines_finance_data.py index a88ced030..dbb9d76a0 100644 --- a/cloudendure/model/gcp_machines_finance_data.py +++ b/cloudendure/model/gcp_machines_finance_data.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/identity_provider_redirect_response.py b/cloudendure/model/identity_provider_redirect_response.py index a4a30e992..c76998353 100644 --- a/cloudendure/model/identity_provider_redirect_response.py +++ b/cloudendure/model/identity_provider_redirect_response.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/initialization_step.py b/cloudendure/model/initialization_step.py index a1ca2cbf9..c8dfcab03 100644 --- a/cloudendure/model/initialization_step.py +++ b/cloudendure/model/initialization_step.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/inline_object.py b/cloudendure/model/inline_object.py index 34313e74a..026feda8d 100644 --- a/cloudendure/model/inline_object.py +++ b/cloudendure/model/inline_object.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/inline_object1.py b/cloudendure/model/inline_object1.py index 9c68b1c60..e9469b937 100644 --- a/cloudendure/model/inline_object1.py +++ b/cloudendure/model/inline_object1.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/inline_object10.py b/cloudendure/model/inline_object10.py index f89122c85..d9bcb8b50 100644 --- a/cloudendure/model/inline_object10.py +++ b/cloudendure/model/inline_object10.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/inline_object2.py b/cloudendure/model/inline_object2.py index bafc696cb..7127d60cf 100644 --- a/cloudendure/model/inline_object2.py +++ b/cloudendure/model/inline_object2.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/inline_object3.py b/cloudendure/model/inline_object3.py index 336cf67fd..f68de6167 100644 --- a/cloudendure/model/inline_object3.py +++ b/cloudendure/model/inline_object3.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/inline_object4.py b/cloudendure/model/inline_object4.py index efd76b1c7..dda626593 100644 --- a/cloudendure/model/inline_object4.py +++ b/cloudendure/model/inline_object4.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/inline_object5.py b/cloudendure/model/inline_object5.py index ef60fb364..27b631b98 100644 --- a/cloudendure/model/inline_object5.py +++ b/cloudendure/model/inline_object5.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/inline_object6.py b/cloudendure/model/inline_object6.py index 046fa60df..8d9540d1f 100644 --- a/cloudendure/model/inline_object6.py +++ b/cloudendure/model/inline_object6.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/inline_object7.py b/cloudendure/model/inline_object7.py index 3b9b701f9..5064906b2 100644 --- a/cloudendure/model/inline_object7.py +++ b/cloudendure/model/inline_object7.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/inline_object8.py b/cloudendure/model/inline_object8.py index 4991cdaee..691fea821 100644 --- a/cloudendure/model/inline_object8.py +++ b/cloudendure/model/inline_object8.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/inline_object9.py b/cloudendure/model/inline_object9.py index f7e63dc6c..01424283c 100644 --- a/cloudendure/model/inline_object9.py +++ b/cloudendure/model/inline_object9.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/inline_response200.py b/cloudendure/model/inline_response200.py index eb0464926..b0ddfa127 100644 --- a/cloudendure/model/inline_response200.py +++ b/cloudendure/model/inline_response200.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/inline_response2001.py b/cloudendure/model/inline_response2001.py index 2927925ad..d63ec918a 100644 --- a/cloudendure/model/inline_response2001.py +++ b/cloudendure/model/inline_response2001.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/inline_response2002.py b/cloudendure/model/inline_response2002.py index 138e91e84..c2dca04d7 100644 --- a/cloudendure/model/inline_response2002.py +++ b/cloudendure/model/inline_response2002.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/job.py b/cloudendure/model/job.py index 2cd29f9a4..22b0b30ee 100644 --- a/cloudendure/model/job.py +++ b/cloudendure/model/job.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/job_log.py b/cloudendure/model/job_log.py index b9cc7758e..66cfded0c 100644 --- a/cloudendure/model/job_log.py +++ b/cloudendure/model/job_log.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/job_target_machine.py b/cloudendure/model/job_target_machine.py index 523068fe1..6b6256674 100644 --- a/cloudendure/model/job_target_machine.py +++ b/cloudendure/model/job_target_machine.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/jobs_list.py b/cloudendure/model/jobs_list.py index 23bad2560..668016e32 100644 --- a/cloudendure/model/jobs_list.py +++ b/cloudendure/model/jobs_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/key_value_list.py b/cloudendure/model/key_value_list.py index ab408c56e..21d567eff 100644 --- a/cloudendure/model/key_value_list.py +++ b/cloudendure/model/key_value_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/launch_machines_parameters.py b/cloudendure/model/launch_machines_parameters.py index a85f5d47f..31d53bcfe 100644 --- a/cloudendure/model/launch_machines_parameters.py +++ b/cloudendure/model/launch_machines_parameters.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/launch_machines_parameters_debug_scripts.py b/cloudendure/model/launch_machines_parameters_debug_scripts.py index 1ea41572a..29aa03f75 100644 --- a/cloudendure/model/launch_machines_parameters_debug_scripts.py +++ b/cloudendure/model/launch_machines_parameters_debug_scripts.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/license.py b/cloudendure/model/license.py index d3c213330..a58c204ac 100644 --- a/cloudendure/model/license.py +++ b/cloudendure/model/license.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/license_ce_admin_properties.py b/cloudendure/model/license_ce_admin_properties.py index 0747e58e5..5c6c7ed27 100644 --- a/cloudendure/model/license_ce_admin_properties.py +++ b/cloudendure/model/license_ce_admin_properties.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/license_features.py b/cloudendure/model/license_features.py index 7f9b259e9..c6df17530 100644 --- a/cloudendure/model/license_features.py +++ b/cloudendure/model/license_features.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/license_list.py b/cloudendure/model/license_list.py index 67b08f1ef..2733e05f4 100644 --- a/cloudendure/model/license_list.py +++ b/cloudendure/model/license_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/list_users_result.py b/cloudendure/model/list_users_result.py index ace8f0029..37c74dd68 100644 --- a/cloudendure/model/list_users_result.py +++ b/cloudendure/model/list_users_result.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/list_users_results.py b/cloudendure/model/list_users_results.py index 9fcc18e29..3ad4c6d9c 100644 --- a/cloudendure/model/list_users_results.py +++ b/cloudendure/model/list_users_results.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/logical_location.py b/cloudendure/model/logical_location.py index b97a0b12c..ea361e633 100644 --- a/cloudendure/model/logical_location.py +++ b/cloudendure/model/logical_location.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/machine.py b/cloudendure/model/machine.py index 487fa2aab..af6202b37 100644 --- a/cloudendure/model/machine.py +++ b/cloudendure/model/machine.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/machine_and_path_and_point_in_time.py b/cloudendure/model/machine_and_path_and_point_in_time.py index ef415b1c7..92958f81a 100644 --- a/cloudendure/model/machine_and_path_and_point_in_time.py +++ b/cloudendure/model/machine_and_path_and_point_in_time.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/machine_and_point_in_time.py b/cloudendure/model/machine_and_point_in_time.py index 81b5c3b54..27fc4f799 100644 --- a/cloudendure/model/machine_and_point_in_time.py +++ b/cloudendure/model/machine_and_point_in_time.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/machine_license.py b/cloudendure/model/machine_license.py index 49fb374c9..3e9b027e8 100644 --- a/cloudendure/model/machine_license.py +++ b/cloudendure/model/machine_license.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/machine_life_cycle.py b/cloudendure/model/machine_life_cycle.py index ae30f48f4..a756b8d83 100644 --- a/cloudendure/model/machine_life_cycle.py +++ b/cloudendure/model/machine_life_cycle.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/machine_replication_configuration.py b/cloudendure/model/machine_replication_configuration.py index 292f33baa..4ed85ae56 100644 --- a/cloudendure/model/machine_replication_configuration.py +++ b/cloudendure/model/machine_replication_configuration.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/machine_replication_info.py b/cloudendure/model/machine_replication_info.py index 02922fe2a..2f0ffa201 100644 --- a/cloudendure/model/machine_replication_info.py +++ b/cloudendure/model/machine_replication_info.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/machine_replication_info_initiation_states.py b/cloudendure/model/machine_replication_info_initiation_states.py index 933c317fc..d5136cd96 100644 --- a/cloudendure/model/machine_replication_info_initiation_states.py +++ b/cloudendure/model/machine_replication_info_initiation_states.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/machine_replication_info_initiation_states_items.py b/cloudendure/model/machine_replication_info_initiation_states_items.py index 6e57f3d47..b08495b4d 100644 --- a/cloudendure/model/machine_replication_info_initiation_states_items.py +++ b/cloudendure/model/machine_replication_info_initiation_states_items.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/machine_snapshot_credits.py b/cloudendure/model/machine_snapshot_credits.py index 27b552739..e88b2039b 100644 --- a/cloudendure/model/machine_snapshot_credits.py +++ b/cloudendure/model/machine_snapshot_credits.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/machine_source_properties.py b/cloudendure/model/machine_source_properties.py index a00d95649..23b8219ea 100644 --- a/cloudendure/model/machine_source_properties.py +++ b/cloudendure/model/machine_source_properties.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/machine_source_properties_cpu.py b/cloudendure/model/machine_source_properties_cpu.py index f261b5c01..5cc2fc550 100644 --- a/cloudendure/model/machine_source_properties_cpu.py +++ b/cloudendure/model/machine_source_properties_cpu.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/machine_source_properties_disks.py b/cloudendure/model/machine_source_properties_disks.py index 30b1834e1..6b5d7aede 100644 --- a/cloudendure/model/machine_source_properties_disks.py +++ b/cloudendure/model/machine_source_properties_disks.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/machine_source_properties_installed_applications.py b/cloudendure/model/machine_source_properties_installed_applications.py index c4b9a884d..a33b92011 100644 --- a/cloudendure/model/machine_source_properties_installed_applications.py +++ b/cloudendure/model/machine_source_properties_installed_applications.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/machine_source_properties_installed_applications_items.py b/cloudendure/model/machine_source_properties_installed_applications_items.py index c6a183943..4578d80a3 100644 --- a/cloudendure/model/machine_source_properties_installed_applications_items.py +++ b/cloudendure/model/machine_source_properties_installed_applications_items.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/machine_source_properties_running_services.py b/cloudendure/model/machine_source_properties_running_services.py index 79beb78aa..eb449caaf 100644 --- a/cloudendure/model/machine_source_properties_running_services.py +++ b/cloudendure/model/machine_source_properties_running_services.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/machine_source_properties_running_services_items.py b/cloudendure/model/machine_source_properties_running_services_items.py index 4b7f373b8..56c03a2a6 100644 --- a/cloudendure/model/machine_source_properties_running_services_items.py +++ b/cloudendure/model/machine_source_properties_running_services_items.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/machine_throttle_time_seconds.py b/cloudendure/model/machine_throttle_time_seconds.py index 020659337..0ce4c69a7 100644 --- a/cloudendure/model/machine_throttle_time_seconds.py +++ b/cloudendure/model/machine_throttle_time_seconds.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/machines_list.py b/cloudendure/model/machines_list.py index 2ee963aa2..df15b4245 100644 --- a/cloudendure/model/machines_list.py +++ b/cloudendure/model/machines_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/machines_list_invalid_ids_and_job.py b/cloudendure/model/machines_list_invalid_ids_and_job.py index 3584b2c09..7b9319b56 100644 --- a/cloudendure/model/machines_list_invalid_ids_and_job.py +++ b/cloudendure/model/machines_list_invalid_ids_and_job.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/network_interface.py b/cloudendure/model/network_interface.py index 2bada542f..a20b308f6 100644 --- a/cloudendure/model/network_interface.py +++ b/cloudendure/model/network_interface.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/outpost.py b/cloudendure/model/outpost.py index 615982a11..bc683d6a2 100644 --- a/cloudendure/model/outpost.py +++ b/cloudendure/model/outpost.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/point_in_time.py b/cloudendure/model/point_in_time.py index 3536264f4..e84ebe431 100644 --- a/cloudendure/model/point_in_time.py +++ b/cloudendure/model/point_in_time.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/point_in_time_list.py b/cloudendure/model/point_in_time_list.py index 7a8351a50..5f3861830 100644 --- a/cloudendure/model/point_in_time_list.py +++ b/cloudendure/model/point_in_time_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/populate_job_names.py b/cloudendure/model/populate_job_names.py index a363238d9..5ecd3d595 100644 --- a/cloudendure/model/populate_job_names.py +++ b/cloudendure/model/populate_job_names.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/populate_job_params.py b/cloudendure/model/populate_job_params.py index 0ac1a4ae8..dee6fb016 100644 --- a/cloudendure/model/populate_job_params.py +++ b/cloudendure/model/populate_job_params.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/project.py b/cloudendure/model/project.py index baa752f6f..48b4524a7 100644 --- a/cloudendure/model/project.py +++ b/cloudendure/model/project.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/project_ce_admin_properties.py b/cloudendure/model/project_ce_admin_properties.py index 3a2164926..232d3640d 100644 --- a/cloudendure/model/project_ce_admin_properties.py +++ b/cloudendure/model/project_ce_admin_properties.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/project_features.py b/cloudendure/model/project_features.py index 199a0db15..4871100d5 100644 --- a/cloudendure/model/project_features.py +++ b/cloudendure/model/project_features.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/project_storage.py b/cloudendure/model/project_storage.py index f3739b5b6..2165281cf 100644 --- a/cloudendure/model/project_storage.py +++ b/cloudendure/model/project_storage.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/project_storage_working_storage.py b/cloudendure/model/project_storage_working_storage.py index 8e39ae9ec..09a5454b7 100644 --- a/cloudendure/model/project_storage_working_storage.py +++ b/cloudendure/model/project_storage_working_storage.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/projects_and_users.py b/cloudendure/model/projects_and_users.py index 3041c04d4..1442384a7 100644 --- a/cloudendure/model/projects_and_users.py +++ b/cloudendure/model/projects_and_users.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/projects_and_users_items.py b/cloudendure/model/projects_and_users_items.py index 81b020746..ff6b15693 100644 --- a/cloudendure/model/projects_and_users_items.py +++ b/cloudendure/model/projects_and_users_items.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/projects_list.py b/cloudendure/model/projects_list.py index b0c4005de..1f818a5d5 100644 --- a/cloudendure/model/projects_list.py +++ b/cloudendure/model/projects_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/recovery_plan.py b/cloudendure/model/recovery_plan.py index 4d338b2a7..2ff7b213f 100644 --- a/cloudendure/model/recovery_plan.py +++ b/cloudendure/model/recovery_plan.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/recovery_plan_list.py b/cloudendure/model/recovery_plan_list.py index c9545e5fe..6e789075d 100644 --- a/cloudendure/model/recovery_plan_list.py +++ b/cloudendure/model/recovery_plan_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/recovery_plan_step.py b/cloudendure/model/recovery_plan_step.py index 21d598dc4..553e8ebca 100644 --- a/cloudendure/model/recovery_plan_step.py +++ b/cloudendure/model/recovery_plan_step.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/recovery_plan_steps.py b/cloudendure/model/recovery_plan_steps.py index 2e18b7655..feefc6ec7 100644 --- a/cloudendure/model/recovery_plan_steps.py +++ b/cloudendure/model/recovery_plan_steps.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/region.py b/cloudendure/model/region.py index df2517f8a..7ecf39386 100644 --- a/cloudendure/model/region.py +++ b/cloudendure/model/region.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/regions_list.py b/cloudendure/model/regions_list.py index 8ebb4d3c6..62d0ead70 100644 --- a/cloudendure/model/regions_list.py +++ b/cloudendure/model/regions_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/replica.py b/cloudendure/model/replica.py index a3ebecfe6..87307f5e0 100644 --- a/cloudendure/model/replica.py +++ b/cloudendure/model/replica.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/replication_configuration.py b/cloudendure/model/replication_configuration.py index b6f7ae86e..0b0efbb14 100644 --- a/cloudendure/model/replication_configuration.py +++ b/cloudendure/model/replication_configuration.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/replication_configuration_list.py b/cloudendure/model/replication_configuration_list.py index 3a2866c85..65d922d84 100644 --- a/cloudendure/model/replication_configuration_list.py +++ b/cloudendure/model/replication_configuration_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/replication_configuration_replication_tags.py b/cloudendure/model/replication_configuration_replication_tags.py index 7acfa9d71..fcb8957ce 100644 --- a/cloudendure/model/replication_configuration_replication_tags.py +++ b/cloudendure/model/replication_configuration_replication_tags.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/saml_settings.py b/cloudendure/model/saml_settings.py index 31f8f23b5..b85602d16 100644 --- a/cloudendure/model/saml_settings.py +++ b/cloudendure/model/saml_settings.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/security_group.py b/cloudendure/model/security_group.py index 165f5d3bd..090dd450e 100644 --- a/cloudendure/model/security_group.py +++ b/cloudendure/model/security_group.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/storage_location.py b/cloudendure/model/storage_location.py index 17b63ffdb..3a07e4103 100644 --- a/cloudendure/model/storage_location.py +++ b/cloudendure/model/storage_location.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/subnet.py b/cloudendure/model/subnet.py index 11506d532..83b388eb0 100644 --- a/cloudendure/model/subnet.py +++ b/cloudendure/model/subnet.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/time.py b/cloudendure/model/time.py index 5c74ecf24..79c9cf7e4 100644 --- a/cloudendure/model/time.py +++ b/cloudendure/model/time.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/updateable_scripts.py b/cloudendure/model/updateable_scripts.py index ad85bc0e5..ee9698d46 100644 --- a/cloudendure/model/updateable_scripts.py +++ b/cloudendure/model/updateable_scripts.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/updateable_scripts_result.py b/cloudendure/model/updateable_scripts_result.py index f53350b64..b36230583 100644 --- a/cloudendure/model/updateable_scripts_result.py +++ b/cloudendure/model/updateable_scripts_result.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/updateable_scripts_result_on_premise_volumes.py b/cloudendure/model/updateable_scripts_result_on_premise_volumes.py index 5756e4b77..8d3610eea 100644 --- a/cloudendure/model/updateable_scripts_result_on_premise_volumes.py +++ b/cloudendure/model/updateable_scripts_result_on_premise_volumes.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/upgrade_counter_delay.py b/cloudendure/model/upgrade_counter_delay.py index 68208e934..f818b22dc 100644 --- a/cloudendure/model/upgrade_counter_delay.py +++ b/cloudendure/model/upgrade_counter_delay.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/usage.py b/cloudendure/model/usage.py index 49ae19d8d..b9d547bd5 100644 --- a/cloudendure/model/usage.py +++ b/cloudendure/model/usage.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/usage_list.py b/cloudendure/model/usage_list.py index 0198f803c..022cd028f 100644 --- a/cloudendure/model/usage_list.py +++ b/cloudendure/model/usage_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/user.py b/cloudendure/model/user.py index 870bd36e7..a750deac9 100644 --- a/cloudendure/model/user.py +++ b/cloudendure/model/user.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/user_report.py b/cloudendure/model/user_report.py index 49c96a0b7..48e380c62 100644 --- a/cloudendure/model/user_report.py +++ b/cloudendure/model/user_report.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/user_report_gcp_machines_finance_data.py b/cloudendure/model/user_report_gcp_machines_finance_data.py index 43250e95b..8f0eed1a0 100644 --- a/cloudendure/model/user_report_gcp_machines_finance_data.py +++ b/cloudendure/model/user_report_gcp_machines_finance_data.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/user_reports.py b/cloudendure/model/user_reports.py index 181c803ee..29e47daf4 100644 --- a/cloudendure/model/user_reports.py +++ b/cloudendure/model/user_reports.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/user_settings.py b/cloudendure/model/user_settings.py index 4b22c7d87..c615d8f42 100644 --- a/cloudendure/model/user_settings.py +++ b/cloudendure/model/user_settings.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/user_settings_send_notifications.py b/cloudendure/model/user_settings_send_notifications.py index 967f7e2fe..4545238fd 100644 --- a/cloudendure/model/user_settings_send_notifications.py +++ b/cloudendure/model/user_settings_send_notifications.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/users_and_roles.py b/cloudendure/model/users_and_roles.py index 8971233a2..85660899a 100644 --- a/cloudendure/model/users_and_roles.py +++ b/cloudendure/model/users_and_roles.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/users_and_roles_items.py b/cloudendure/model/users_and_roles_items.py index 0b485e1f9..9b906006f 100644 --- a/cloudendure/model/users_and_roles_items.py +++ b/cloudendure/model/users_and_roles_items.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model/users_list.py b/cloudendure/model/users_list.py index f76bf9844..2920c0651 100644 --- a/cloudendure/model/users_list.py +++ b/cloudendure/model/users_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 -from cloudendure.model_utils import ( # noqa: F401 +from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, + ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, diff --git a/cloudendure/model_utils.py b/cloudendure/model_utils.py index 8cdf747c5..c36ce1e43 100644 --- a/cloudendure/model_utils.py +++ b/cloudendure/model_utils.py @@ -8,19 +8,19 @@ """ -from datetime import date, datetime # noqa: F401 import inspect import io import os import pprint import re import tempfile +from datetime import date, datetime # noqa: F401 from dateutil.parser import parse from cloudendure.exceptions import ( - ApiKeyError, ApiAttributeError, + ApiKeyError, ApiTypeError, ApiValueError, ) diff --git a/cloudendure/models/__init__.py b/cloudendure/models/__init__.py index 456801498..d0dadd2e3 100644 --- a/cloudendure/models/__init__.py +++ b/cloudendure/models/__init__.py @@ -30,9 +30,6 @@ from cloudendure.model.blueprint import Blueprint from cloudendure.model.blueprint_disks import BlueprintDisks from cloudendure.model.blueprint_list import BlueprintList -from cloudendure.model.cslp_item import CSLPItem -from cloudendure.model.cslp_request import CSLPRequest -from cloudendure.model.cslp_result import CSLPResult from cloudendure.model.cloud import Cloud from cloudendure.model.cloud_credentials import CloudCredentials from cloudendure.model.cloud_credentials_list import CloudCredentialsList @@ -41,6 +38,9 @@ from cloudendure.model.compute_location import ComputeLocation from cloudendure.model.configurations import Configurations from cloudendure.model.configurations_list import ConfigurationsList +from cloudendure.model.cslp_item import CSLPItem +from cloudendure.model.cslp_request import CSLPRequest +from cloudendure.model.cslp_result import CSLPResult from cloudendure.model.disk_config import DiskConfig from cloudendure.model.dynamic_configuration import DynamicConfiguration from cloudendure.model.error import Error @@ -52,7 +52,6 @@ from cloudendure.model.initialization_step import InitializationStep from cloudendure.model.inline_object import InlineObject from cloudendure.model.inline_object1 import InlineObject1 -from cloudendure.model.inline_object10 import InlineObject10 from cloudendure.model.inline_object2 import InlineObject2 from cloudendure.model.inline_object3 import InlineObject3 from cloudendure.model.inline_object4 import InlineObject4 @@ -61,6 +60,7 @@ from cloudendure.model.inline_object7 import InlineObject7 from cloudendure.model.inline_object8 import InlineObject8 from cloudendure.model.inline_object9 import InlineObject9 +from cloudendure.model.inline_object10 import InlineObject10 from cloudendure.model.inline_response200 import InlineResponse200 from cloudendure.model.inline_response2001 import InlineResponse2001 from cloudendure.model.inline_response2002 import InlineResponse2002 diff --git a/cloudendure/rest.py b/cloudendure/rest.py index 44c06a3fb..236a2504d 100644 --- a/cloudendure/rest.py +++ b/cloudendure/rest.py @@ -19,14 +19,13 @@ from cloudendure.exceptions import ( ApiException, - UnauthorizedException, + ApiValueError, ForbiddenException, NotFoundException, ServiceException, - ApiValueError, + UnauthorizedException, ) - logger = logging.getLogger(__name__) diff --git a/test/test_account.py b/test/test_account.py index cede3eeaf..abd6d92df 100644 --- a/test/test_account.py +++ b/test/test_account.py @@ -12,11 +12,12 @@ import unittest import cloudendure +from cloudendure.model.account import Account from cloudendure.model.account_ce_admin_properties import AccountCeAdminProperties from cloudendure.model.saml_settings import SamlSettings -globals()['AccountCeAdminProperties'] = AccountCeAdminProperties -globals()['SamlSettings'] = SamlSettings -from cloudendure.model.account import Account + +globals()["AccountCeAdminProperties"] = AccountCeAdminProperties +globals()["SamlSettings"] = SamlSettings class TestAccount(unittest.TestCase): @@ -35,5 +36,5 @@ def testAccount(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_account_api.py b/test/test_account_api.py index d68982b77..cf5620d9c 100644 --- a/test/test_account_api.py +++ b/test/test_account_api.py @@ -31,5 +31,5 @@ def test_accounts_account_id_get(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_account_ce_admin_properties.py b/test/test_account_ce_admin_properties.py index 15a1a21e3..be799c7b1 100644 --- a/test/test_account_ce_admin_properties.py +++ b/test/test_account_ce_admin_properties.py @@ -31,5 +31,5 @@ def testAccountCeAdminProperties(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_account_link.py b/test/test_account_link.py index 5ef213072..20699c434 100644 --- a/test/test_account_link.py +++ b/test/test_account_link.py @@ -31,5 +31,5 @@ def testAccountLink(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_account_link_list.py b/test/test_account_link_list.py index 99a61574b..64687dd4e 100644 --- a/test/test_account_link_list.py +++ b/test/test_account_link_list.py @@ -13,9 +13,10 @@ import cloudendure from cloudendure.model.account_link import AccountLink -globals()['AccountLink'] = AccountLink from cloudendure.model.account_link_list import AccountLinkList +globals()["AccountLink"] = AccountLink + class TestAccountLinkList(unittest.TestCase): """AccountLinkList unit test stubs""" @@ -33,5 +34,5 @@ def testAccountLinkList(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_account_request.py b/test/test_account_request.py index cc4b6da90..88282f2cc 100644 --- a/test/test_account_request.py +++ b/test/test_account_request.py @@ -31,5 +31,5 @@ def testAccountRequest(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_account_request_list.py b/test/test_account_request_list.py index 8079e956d..6fba95266 100644 --- a/test/test_account_request_list.py +++ b/test/test_account_request_list.py @@ -13,9 +13,10 @@ import cloudendure from cloudendure.model.account_request import AccountRequest -globals()['AccountRequest'] = AccountRequest from cloudendure.model.account_request_list import AccountRequestList +globals()["AccountRequest"] = AccountRequest + class TestAccountRequestList(unittest.TestCase): """AccountRequestList unit test stubs""" @@ -33,5 +34,5 @@ def testAccountRequestList(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_accounts_list.py b/test/test_accounts_list.py index 1768fde58..66e34a2d6 100644 --- a/test/test_accounts_list.py +++ b/test/test_accounts_list.py @@ -13,9 +13,10 @@ import cloudendure from cloudendure.model.account import Account -globals()['Account'] = Account from cloudendure.model.accounts_list import AccountsList +globals()["Account"] = Account + class TestAccountsList(unittest.TestCase): """AccountsList unit test stubs""" @@ -33,5 +34,5 @@ def testAccountsList(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_actions_api.py b/test/test_actions_api.py index 327201831..17d977000 100644 --- a/test/test_actions_api.py +++ b/test/test_actions_api.py @@ -87,5 +87,5 @@ def test_projects_project_id_stop_replication_post(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_agent_next_replication_init_request.py b/test/test_agent_next_replication_init_request.py index 5ec8c8eaa..a4419316b 100644 --- a/test/test_agent_next_replication_init_request.py +++ b/test/test_agent_next_replication_init_request.py @@ -12,7 +12,9 @@ import unittest import cloudendure -from cloudendure.model.agent_next_replication_init_request import AgentNextReplicationInitRequest +from cloudendure.model.agent_next_replication_init_request import ( + AgentNextReplicationInitRequest, +) class TestAgentNextReplicationInitRequest(unittest.TestCase): @@ -31,5 +33,5 @@ def testAgentNextReplicationInitRequest(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_all_project_features.py b/test/test_all_project_features.py index e5b7da615..a28cbf432 100644 --- a/test/test_all_project_features.py +++ b/test/test_all_project_features.py @@ -12,9 +12,10 @@ import unittest import cloudendure -from cloudendure.model.project_ce_admin_properties import ProjectCeAdminProperties -globals()['ProjectCeAdminProperties'] = ProjectCeAdminProperties from cloudendure.model.all_project_features import AllProjectFeatures +from cloudendure.model.project_ce_admin_properties import ProjectCeAdminProperties + +globals()["ProjectCeAdminProperties"] = ProjectCeAdminProperties class TestAllProjectFeatures(unittest.TestCase): @@ -33,5 +34,5 @@ def testAllProjectFeatures(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_audit_log.py b/test/test_audit_log.py index 2d93de8b6..85212ee0f 100644 --- a/test/test_audit_log.py +++ b/test/test_audit_log.py @@ -12,9 +12,10 @@ import unittest import cloudendure -from cloudendure.model.audit_log_entry import AuditLogEntry -globals()['AuditLogEntry'] = AuditLogEntry from cloudendure.model.audit_log import AuditLog +from cloudendure.model.audit_log_entry import AuditLogEntry + +globals()["AuditLogEntry"] = AuditLogEntry class TestAuditLog(unittest.TestCase): @@ -33,5 +34,5 @@ def testAuditLog(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_audit_log_changed_field.py b/test/test_audit_log_changed_field.py index 52b292e61..bb5bdf4a2 100644 --- a/test/test_audit_log_changed_field.py +++ b/test/test_audit_log_changed_field.py @@ -31,5 +31,5 @@ def testAuditLogChangedField(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_audit_log_entry.py b/test/test_audit_log_entry.py index efd8d03c6..a55c93c40 100644 --- a/test/test_audit_log_entry.py +++ b/test/test_audit_log_entry.py @@ -13,10 +13,13 @@ import cloudendure from cloudendure.model.audit_log_changed_field import AuditLogChangedField -from cloudendure.model.audit_log_entry_participating_machines import AuditLogEntryParticipatingMachines -globals()['AuditLogChangedField'] = AuditLogChangedField -globals()['AuditLogEntryParticipatingMachines'] = AuditLogEntryParticipatingMachines from cloudendure.model.audit_log_entry import AuditLogEntry +from cloudendure.model.audit_log_entry_participating_machines import ( + AuditLogEntryParticipatingMachines, +) + +globals()["AuditLogChangedField"] = AuditLogChangedField +globals()["AuditLogEntryParticipatingMachines"] = AuditLogEntryParticipatingMachines class TestAuditLogEntry(unittest.TestCase): @@ -35,5 +38,5 @@ def testAuditLogEntry(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_audit_log_entry_participating_machines.py b/test/test_audit_log_entry_participating_machines.py index 5f5b2de40..71a78a18f 100644 --- a/test/test_audit_log_entry_participating_machines.py +++ b/test/test_audit_log_entry_participating_machines.py @@ -12,7 +12,9 @@ import unittest import cloudendure -from cloudendure.model.audit_log_entry_participating_machines import AuditLogEntryParticipatingMachines +from cloudendure.model.audit_log_entry_participating_machines import ( + AuditLogEntryParticipatingMachines, +) class TestAuditLogEntryParticipatingMachines(unittest.TestCase): @@ -31,5 +33,5 @@ def testAuditLogEntryParticipatingMachines(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_authentication_api.py b/test/test_authentication_api.py index 1f94bd440..97b5458a9 100644 --- a/test/test_authentication_api.py +++ b/test/test_authentication_api.py @@ -38,5 +38,5 @@ def test_logout_post(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_bandwidth_throttling.py b/test/test_bandwidth_throttling.py index 98497b570..ed7c42e6a 100644 --- a/test/test_bandwidth_throttling.py +++ b/test/test_bandwidth_throttling.py @@ -31,5 +31,5 @@ def testBandwidthThrottling(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_blueprint.py b/test/test_blueprint.py index 8ac249a11..777abfbe9 100644 --- a/test/test_blueprint.py +++ b/test/test_blueprint.py @@ -12,11 +12,16 @@ import unittest import cloudendure -from cloudendure.model.blueprint_disks import BlueprintDisks -from cloudendure.model.replication_configuration_replication_tags import ReplicationConfigurationReplicationTags -globals()['BlueprintDisks'] = BlueprintDisks -globals()['ReplicationConfigurationReplicationTags'] = ReplicationConfigurationReplicationTags from cloudendure.model.blueprint import Blueprint +from cloudendure.model.blueprint_disks import BlueprintDisks +from cloudendure.model.replication_configuration_replication_tags import ( + ReplicationConfigurationReplicationTags, +) + +globals()["BlueprintDisks"] = BlueprintDisks +globals()[ + "ReplicationConfigurationReplicationTags" +] = ReplicationConfigurationReplicationTags class TestBlueprint(unittest.TestCase): @@ -35,5 +40,5 @@ def testBlueprint(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_blueprint_api.py b/test/test_blueprint_api.py index dab59b251..a13b4a342 100644 --- a/test/test_blueprint_api.py +++ b/test/test_blueprint_api.py @@ -52,5 +52,5 @@ def test_projects_project_id_blueprints_post(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_blueprint_disks.py b/test/test_blueprint_disks.py index b5fe10d36..f5fb3af7f 100644 --- a/test/test_blueprint_disks.py +++ b/test/test_blueprint_disks.py @@ -31,5 +31,5 @@ def testBlueprintDisks(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_blueprint_list.py b/test/test_blueprint_list.py index a4bbf83da..efb546541 100644 --- a/test/test_blueprint_list.py +++ b/test/test_blueprint_list.py @@ -13,9 +13,10 @@ import cloudendure from cloudendure.model.blueprint import Blueprint -globals()['Blueprint'] = Blueprint from cloudendure.model.blueprint_list import BlueprintList +globals()["Blueprint"] = Blueprint + class TestBlueprintList(unittest.TestCase): """BlueprintList unit test stubs""" @@ -33,5 +34,5 @@ def testBlueprintList(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_cloud.py b/test/test_cloud.py index 1c59711fa..aa690ea43 100644 --- a/test/test_cloud.py +++ b/test/test_cloud.py @@ -31,5 +31,5 @@ def testCloud(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_cloud_api.py b/test/test_cloud_api.py index 9d6e514ab..e9df3ffc6 100644 --- a/test/test_cloud_api.py +++ b/test/test_cloud_api.py @@ -59,5 +59,5 @@ def test_clouds_get(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_cloud_credentials.py b/test/test_cloud_credentials.py index 433ed5c83..72c88783a 100644 --- a/test/test_cloud_credentials.py +++ b/test/test_cloud_credentials.py @@ -31,5 +31,5 @@ def testCloudCredentials(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_cloud_credentials_api.py b/test/test_cloud_credentials_api.py index 1ae82ebf3..06b5afcd5 100644 --- a/test/test_cloud_credentials_api.py +++ b/test/test_cloud_credentials_api.py @@ -52,5 +52,5 @@ def test_cloud_credentials_post(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_cloud_credentials_list.py b/test/test_cloud_credentials_list.py index 8f6b2470a..4169fb804 100644 --- a/test/test_cloud_credentials_list.py +++ b/test/test_cloud_credentials_list.py @@ -13,9 +13,10 @@ import cloudendure from cloudendure.model.cloud_credentials import CloudCredentials -globals()['CloudCredentials'] = CloudCredentials from cloudendure.model.cloud_credentials_list import CloudCredentialsList +globals()["CloudCredentials"] = CloudCredentials + class TestCloudCredentialsList(unittest.TestCase): """CloudCredentialsList unit test stubs""" @@ -33,5 +34,5 @@ def testCloudCredentialsList(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_cloud_credentials_request.py b/test/test_cloud_credentials_request.py index a9c4d3cbd..f158b7d57 100644 --- a/test/test_cloud_credentials_request.py +++ b/test/test_cloud_credentials_request.py @@ -31,5 +31,5 @@ def testCloudCredentialsRequest(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_clouds_list.py b/test/test_clouds_list.py index a3762d444..26a2fb017 100644 --- a/test/test_clouds_list.py +++ b/test/test_clouds_list.py @@ -13,9 +13,10 @@ import cloudendure from cloudendure.model.cloud import Cloud -globals()['Cloud'] = Cloud from cloudendure.model.clouds_list import CloudsList +globals()["Cloud"] = Cloud + class TestCloudsList(unittest.TestCase): """CloudsList unit test stubs""" @@ -33,5 +34,5 @@ def testCloudsList(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_compute_location.py b/test/test_compute_location.py index 71172bfaf..980aeee35 100644 --- a/test/test_compute_location.py +++ b/test/test_compute_location.py @@ -31,5 +31,5 @@ def testComputeLocation(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_configurations.py b/test/test_configurations.py index fa49b4aab..7c673b44b 100644 --- a/test/test_configurations.py +++ b/test/test_configurations.py @@ -31,5 +31,5 @@ def testConfigurations(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_configurations_list.py b/test/test_configurations_list.py index 8b63b1511..9a3c5c448 100644 --- a/test/test_configurations_list.py +++ b/test/test_configurations_list.py @@ -13,9 +13,10 @@ import cloudendure from cloudendure.model.configurations import Configurations -globals()['Configurations'] = Configurations from cloudendure.model.configurations_list import ConfigurationsList +globals()["Configurations"] = Configurations + class TestConfigurationsList(unittest.TestCase): """ConfigurationsList unit test stubs""" @@ -33,5 +34,5 @@ def testConfigurationsList(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_cslp_item.py b/test/test_cslp_item.py index f1a2ef31f..117acedf3 100644 --- a/test/test_cslp_item.py +++ b/test/test_cslp_item.py @@ -31,5 +31,5 @@ def testCSLPItem(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_cslp_request.py b/test/test_cslp_request.py index d466642d4..8dff98d61 100644 --- a/test/test_cslp_request.py +++ b/test/test_cslp_request.py @@ -13,9 +13,10 @@ import cloudendure from cloudendure.model.cslp_item import CSLPItem -globals()['CSLPItem'] = CSLPItem from cloudendure.model.cslp_request import CSLPRequest +globals()["CSLPItem"] = CSLPItem + class TestCSLPRequest(unittest.TestCase): """CSLPRequest unit test stubs""" @@ -33,5 +34,5 @@ def testCSLPRequest(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_cslp_result.py b/test/test_cslp_result.py index 212a0ba9c..1377c82b7 100644 --- a/test/test_cslp_result.py +++ b/test/test_cslp_result.py @@ -13,9 +13,10 @@ import cloudendure from cloudendure.model.cslp_item import CSLPItem -globals()['CSLPItem'] = CSLPItem from cloudendure.model.cslp_result import CSLPResult +globals()["CSLPItem"] = CSLPItem + class TestCSLPResult(unittest.TestCase): """CSLPResult unit test stubs""" @@ -33,5 +34,5 @@ def testCSLPResult(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_default_api.py b/test/test_default_api.py index 0961e1776..afe4d343b 100644 --- a/test/test_default_api.py +++ b/test/test_default_api.py @@ -108,5 +108,5 @@ def test_users_revoke_roles_post(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_disk_config.py b/test/test_disk_config.py index c1a6b5a36..f8b21e0f4 100644 --- a/test/test_disk_config.py +++ b/test/test_disk_config.py @@ -31,5 +31,5 @@ def testDiskConfig(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_dynamic_configuration.py b/test/test_dynamic_configuration.py index 170043f7c..602307a31 100644 --- a/test/test_dynamic_configuration.py +++ b/test/test_dynamic_configuration.py @@ -31,5 +31,5 @@ def testDynamicConfiguration(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_error.py b/test/test_error.py index 80247043b..ceb09c320 100644 --- a/test/test_error.py +++ b/test/test_error.py @@ -31,5 +31,5 @@ def testError(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_extended_account_info.py b/test/test_extended_account_info.py index 57ff2c6ad..8683251b6 100644 --- a/test/test_extended_account_info.py +++ b/test/test_extended_account_info.py @@ -14,19 +14,22 @@ import cloudendure from cloudendure.model.account import Account from cloudendure.model.clouds_list import CloudsList +from cloudendure.model.extended_account_info import ExtendedAccountInfo from cloudendure.model.projects_list import ProjectsList from cloudendure.model.region import Region -from cloudendure.model.replication_configuration_list import ReplicationConfigurationList +from cloudendure.model.replication_configuration_list import ( + ReplicationConfigurationList, +) from cloudendure.model.time import Time from cloudendure.model.user import User -globals()['Account'] = Account -globals()['CloudsList'] = CloudsList -globals()['ProjectsList'] = ProjectsList -globals()['Region'] = Region -globals()['ReplicationConfigurationList'] = ReplicationConfigurationList -globals()['Time'] = Time -globals()['User'] = User -from cloudendure.model.extended_account_info import ExtendedAccountInfo + +globals()["Account"] = Account +globals()["CloudsList"] = CloudsList +globals()["ProjectsList"] = ProjectsList +globals()["Region"] = Region +globals()["ReplicationConfigurationList"] = ReplicationConfigurationList +globals()["Time"] = Time +globals()["User"] = User class TestExtendedAccountInfo(unittest.TestCase): @@ -45,5 +48,5 @@ def testExtendedAccountInfo(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_gcp_machines_finance_data.py b/test/test_gcp_machines_finance_data.py index 6a8fd53df..66641c8e1 100644 --- a/test/test_gcp_machines_finance_data.py +++ b/test/test_gcp_machines_finance_data.py @@ -31,5 +31,5 @@ def testGcpMachinesFinanceData(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_identity_provider_redirect_response.py b/test/test_identity_provider_redirect_response.py index b093dbae1..3dcfad2ff 100644 --- a/test/test_identity_provider_redirect_response.py +++ b/test/test_identity_provider_redirect_response.py @@ -12,7 +12,9 @@ import unittest import cloudendure -from cloudendure.model.identity_provider_redirect_response import IdentityProviderRedirectResponse +from cloudendure.model.identity_provider_redirect_response import ( + IdentityProviderRedirectResponse, +) class TestIdentityProviderRedirectResponse(unittest.TestCase): @@ -31,5 +33,5 @@ def testIdentityProviderRedirectResponse(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_initialization_step.py b/test/test_initialization_step.py index 4e0982b81..ca6d2170f 100644 --- a/test/test_initialization_step.py +++ b/test/test_initialization_step.py @@ -31,5 +31,5 @@ def testInitializationStep(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_inline_object.py b/test/test_inline_object.py index 100f85c8a..4d62679da 100644 --- a/test/test_inline_object.py +++ b/test/test_inline_object.py @@ -31,5 +31,5 @@ def testInlineObject(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_inline_object1.py b/test/test_inline_object1.py index 2f6922692..85cee98a1 100644 --- a/test/test_inline_object1.py +++ b/test/test_inline_object1.py @@ -31,5 +31,5 @@ def testInlineObject1(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_inline_object10.py b/test/test_inline_object10.py index 15e83db61..1a0133c6f 100644 --- a/test/test_inline_object10.py +++ b/test/test_inline_object10.py @@ -31,5 +31,5 @@ def testInlineObject10(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_inline_object2.py b/test/test_inline_object2.py index 4d585cd84..ba71f9cd9 100644 --- a/test/test_inline_object2.py +++ b/test/test_inline_object2.py @@ -31,5 +31,5 @@ def testInlineObject2(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_inline_object3.py b/test/test_inline_object3.py index 257fbbb81..c05d04644 100644 --- a/test/test_inline_object3.py +++ b/test/test_inline_object3.py @@ -31,5 +31,5 @@ def testInlineObject3(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_inline_object4.py b/test/test_inline_object4.py index f057c00dd..e4a0039e9 100644 --- a/test/test_inline_object4.py +++ b/test/test_inline_object4.py @@ -31,5 +31,5 @@ def testInlineObject4(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_inline_object5.py b/test/test_inline_object5.py index 9c37eda3a..fcc6d1a2a 100644 --- a/test/test_inline_object5.py +++ b/test/test_inline_object5.py @@ -31,5 +31,5 @@ def testInlineObject5(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_inline_object6.py b/test/test_inline_object6.py index ac96960b0..b4114df0a 100644 --- a/test/test_inline_object6.py +++ b/test/test_inline_object6.py @@ -31,5 +31,5 @@ def testInlineObject6(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_inline_object7.py b/test/test_inline_object7.py index 394c29f70..eae0ce4a9 100644 --- a/test/test_inline_object7.py +++ b/test/test_inline_object7.py @@ -31,5 +31,5 @@ def testInlineObject7(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_inline_object8.py b/test/test_inline_object8.py index 6fc04ffe0..54faeb4ce 100644 --- a/test/test_inline_object8.py +++ b/test/test_inline_object8.py @@ -31,5 +31,5 @@ def testInlineObject8(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_inline_object9.py b/test/test_inline_object9.py index 5dbed10a0..55957e243 100644 --- a/test/test_inline_object9.py +++ b/test/test_inline_object9.py @@ -31,5 +31,5 @@ def testInlineObject9(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_inline_response200.py b/test/test_inline_response200.py index 100c30c33..df4b6a05f 100644 --- a/test/test_inline_response200.py +++ b/test/test_inline_response200.py @@ -31,5 +31,5 @@ def testInlineResponse200(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_inline_response2001.py b/test/test_inline_response2001.py index 810044bb4..74ab7c363 100644 --- a/test/test_inline_response2001.py +++ b/test/test_inline_response2001.py @@ -31,5 +31,5 @@ def testInlineResponse2001(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_inline_response2002.py b/test/test_inline_response2002.py index 7fec0f15e..cef979aad 100644 --- a/test/test_inline_response2002.py +++ b/test/test_inline_response2002.py @@ -31,5 +31,5 @@ def testInlineResponse2002(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_job.py b/test/test_job.py index 9a6c899af..b992cd3cc 100644 --- a/test/test_job.py +++ b/test/test_job.py @@ -12,11 +12,12 @@ import unittest import cloudendure +from cloudendure.model.job import Job from cloudendure.model.job_log import JobLog from cloudendure.model.job_target_machine import JobTargetMachine -globals()['JobLog'] = JobLog -globals()['JobTargetMachine'] = JobTargetMachine -from cloudendure.model.job import Job + +globals()["JobLog"] = JobLog +globals()["JobTargetMachine"] = JobTargetMachine class TestJob(unittest.TestCase): @@ -35,5 +36,5 @@ def testJob(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_job_log.py b/test/test_job_log.py index 16e2bea27..05bbd9547 100644 --- a/test/test_job_log.py +++ b/test/test_job_log.py @@ -31,5 +31,5 @@ def testJobLog(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_job_target_machine.py b/test/test_job_target_machine.py index 2ecb98676..1963d8b34 100644 --- a/test/test_job_target_machine.py +++ b/test/test_job_target_machine.py @@ -31,5 +31,5 @@ def testJobTargetMachine(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_jobs_list.py b/test/test_jobs_list.py index 5d2621ac2..9c1e8db11 100644 --- a/test/test_jobs_list.py +++ b/test/test_jobs_list.py @@ -13,9 +13,10 @@ import cloudendure from cloudendure.model.job import Job -globals()['Job'] = Job from cloudendure.model.jobs_list import JobsList +globals()["Job"] = Job + class TestJobsList(unittest.TestCase): """JobsList unit test stubs""" @@ -33,5 +34,5 @@ def testJobsList(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_key_value_list.py b/test/test_key_value_list.py index ed562bb8e..1db736ff8 100644 --- a/test/test_key_value_list.py +++ b/test/test_key_value_list.py @@ -12,9 +12,14 @@ import unittest import cloudendure -from cloudendure.model.replication_configuration_replication_tags import ReplicationConfigurationReplicationTags -globals()['ReplicationConfigurationReplicationTags'] = ReplicationConfigurationReplicationTags from cloudendure.model.key_value_list import KeyValueList +from cloudendure.model.replication_configuration_replication_tags import ( + ReplicationConfigurationReplicationTags, +) + +globals()[ + "ReplicationConfigurationReplicationTags" +] = ReplicationConfigurationReplicationTags class TestKeyValueList(unittest.TestCase): @@ -33,5 +38,5 @@ def testKeyValueList(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_launch_machines_parameters.py b/test/test_launch_machines_parameters.py index 565a01952..470db1f87 100644 --- a/test/test_launch_machines_parameters.py +++ b/test/test_launch_machines_parameters.py @@ -12,11 +12,14 @@ import unittest import cloudendure -from cloudendure.model.launch_machines_parameters_debug_scripts import LaunchMachinesParametersDebugScripts -from cloudendure.model.machine_and_point_in_time import MachineAndPointInTime -globals()['LaunchMachinesParametersDebugScripts'] = LaunchMachinesParametersDebugScripts -globals()['MachineAndPointInTime'] = MachineAndPointInTime from cloudendure.model.launch_machines_parameters import LaunchMachinesParameters +from cloudendure.model.launch_machines_parameters_debug_scripts import ( + LaunchMachinesParametersDebugScripts, +) +from cloudendure.model.machine_and_point_in_time import MachineAndPointInTime + +globals()["LaunchMachinesParametersDebugScripts"] = LaunchMachinesParametersDebugScripts +globals()["MachineAndPointInTime"] = MachineAndPointInTime class TestLaunchMachinesParameters(unittest.TestCase): @@ -35,5 +38,5 @@ def testLaunchMachinesParameters(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_launch_machines_parameters_debug_scripts.py b/test/test_launch_machines_parameters_debug_scripts.py index 99ff2cec3..97d1a713e 100644 --- a/test/test_launch_machines_parameters_debug_scripts.py +++ b/test/test_launch_machines_parameters_debug_scripts.py @@ -12,7 +12,9 @@ import unittest import cloudendure -from cloudendure.model.launch_machines_parameters_debug_scripts import LaunchMachinesParametersDebugScripts +from cloudendure.model.launch_machines_parameters_debug_scripts import ( + LaunchMachinesParametersDebugScripts, +) class TestLaunchMachinesParametersDebugScripts(unittest.TestCase): @@ -31,5 +33,5 @@ def testLaunchMachinesParametersDebugScripts(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_license.py b/test/test_license.py index f13ca55a4..86986ec89 100644 --- a/test/test_license.py +++ b/test/test_license.py @@ -12,11 +12,12 @@ import unittest import cloudendure +from cloudendure.model.license import License from cloudendure.model.license_ce_admin_properties import LicenseCeAdminProperties from cloudendure.model.license_features import LicenseFeatures -globals()['LicenseCeAdminProperties'] = LicenseCeAdminProperties -globals()['LicenseFeatures'] = LicenseFeatures -from cloudendure.model.license import License + +globals()["LicenseCeAdminProperties"] = LicenseCeAdminProperties +globals()["LicenseFeatures"] = LicenseFeatures class TestLicense(unittest.TestCase): @@ -35,5 +36,5 @@ def testLicense(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_license_ce_admin_properties.py b/test/test_license_ce_admin_properties.py index 6f7c27c45..b83aa722f 100644 --- a/test/test_license_ce_admin_properties.py +++ b/test/test_license_ce_admin_properties.py @@ -31,5 +31,5 @@ def testLicenseCeAdminProperties(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_license_features.py b/test/test_license_features.py index 6b1135d26..4af2190d2 100644 --- a/test/test_license_features.py +++ b/test/test_license_features.py @@ -31,5 +31,5 @@ def testLicenseFeatures(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_license_list.py b/test/test_license_list.py index 21268185b..f9791959a 100644 --- a/test/test_license_list.py +++ b/test/test_license_list.py @@ -13,9 +13,10 @@ import cloudendure from cloudendure.model.license import License -globals()['License'] = License from cloudendure.model.license_list import LicenseList +globals()["License"] = License + class TestLicenseList(unittest.TestCase): """LicenseList unit test stubs""" @@ -33,5 +34,5 @@ def testLicenseList(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_licensing_api.py b/test/test_licensing_api.py index 9fb7ac32e..8c0132271 100644 --- a/test/test_licensing_api.py +++ b/test/test_licensing_api.py @@ -38,5 +38,5 @@ def test_licenses_license_id_get(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_list_users_result.py b/test/test_list_users_result.py index 29f4816de..688b847e4 100644 --- a/test/test_list_users_result.py +++ b/test/test_list_users_result.py @@ -31,5 +31,5 @@ def testListUsersResult(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_list_users_results.py b/test/test_list_users_results.py index 39c517b19..2a3082f8f 100644 --- a/test/test_list_users_results.py +++ b/test/test_list_users_results.py @@ -13,9 +13,10 @@ import cloudendure from cloudendure.model.list_users_result import ListUsersResult -globals()['ListUsersResult'] = ListUsersResult from cloudendure.model.list_users_results import ListUsersResults +globals()["ListUsersResult"] = ListUsersResult + class TestListUsersResults(unittest.TestCase): """ListUsersResults unit test stubs""" @@ -33,5 +34,5 @@ def testListUsersResults(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_logical_location.py b/test/test_logical_location.py index a8d9c79be..39a8121bd 100644 --- a/test/test_logical_location.py +++ b/test/test_logical_location.py @@ -31,5 +31,5 @@ def testLogicalLocation(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_machine.py b/test/test_machine.py index ba94e5e01..dead578bd 100644 --- a/test/test_machine.py +++ b/test/test_machine.py @@ -12,19 +12,22 @@ import unittest import cloudendure +from cloudendure.model.machine import Machine from cloudendure.model.machine_license import MachineLicense from cloudendure.model.machine_life_cycle import MachineLifeCycle -from cloudendure.model.machine_replication_configuration import MachineReplicationConfiguration +from cloudendure.model.machine_replication_configuration import ( + MachineReplicationConfiguration, +) from cloudendure.model.machine_replication_info import MachineReplicationInfo from cloudendure.model.machine_source_properties import MachineSourceProperties from cloudendure.model.point_in_time import PointInTime -globals()['MachineLicense'] = MachineLicense -globals()['MachineLifeCycle'] = MachineLifeCycle -globals()['MachineReplicationConfiguration'] = MachineReplicationConfiguration -globals()['MachineReplicationInfo'] = MachineReplicationInfo -globals()['MachineSourceProperties'] = MachineSourceProperties -globals()['PointInTime'] = PointInTime -from cloudendure.model.machine import Machine + +globals()["MachineLicense"] = MachineLicense +globals()["MachineLifeCycle"] = MachineLifeCycle +globals()["MachineReplicationConfiguration"] = MachineReplicationConfiguration +globals()["MachineReplicationInfo"] = MachineReplicationInfo +globals()["MachineSourceProperties"] = MachineSourceProperties +globals()["PointInTime"] = PointInTime class TestMachine(unittest.TestCase): @@ -43,5 +46,5 @@ def testMachine(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_machine_and_path_and_point_in_time.py b/test/test_machine_and_path_and_point_in_time.py index 2162ac482..f6d313d9a 100644 --- a/test/test_machine_and_path_and_point_in_time.py +++ b/test/test_machine_and_path_and_point_in_time.py @@ -12,7 +12,9 @@ import unittest import cloudendure -from cloudendure.model.machine_and_path_and_point_in_time import MachineAndPathAndPointInTime +from cloudendure.model.machine_and_path_and_point_in_time import ( + MachineAndPathAndPointInTime, +) class TestMachineAndPathAndPointInTime(unittest.TestCase): @@ -31,5 +33,5 @@ def testMachineAndPathAndPointInTime(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_machine_and_point_in_time.py b/test/test_machine_and_point_in_time.py index 9528e695e..bbbfaf33a 100644 --- a/test/test_machine_and_point_in_time.py +++ b/test/test_machine_and_point_in_time.py @@ -31,5 +31,5 @@ def testMachineAndPointInTime(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_machine_license.py b/test/test_machine_license.py index ba0af8900..e93f7fb66 100644 --- a/test/test_machine_license.py +++ b/test/test_machine_license.py @@ -31,5 +31,5 @@ def testMachineLicense(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_machine_life_cycle.py b/test/test_machine_life_cycle.py index 3704f3519..c3b53f899 100644 --- a/test/test_machine_life_cycle.py +++ b/test/test_machine_life_cycle.py @@ -31,5 +31,5 @@ def testMachineLifeCycle(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_machine_replication_configuration.py b/test/test_machine_replication_configuration.py index e16a2803a..d382149e4 100644 --- a/test/test_machine_replication_configuration.py +++ b/test/test_machine_replication_configuration.py @@ -13,10 +13,17 @@ import cloudendure from cloudendure.model.disk_config import DiskConfig -from cloudendure.model.replication_configuration_replication_tags import ReplicationConfigurationReplicationTags -globals()['DiskConfig'] = DiskConfig -globals()['ReplicationConfigurationReplicationTags'] = ReplicationConfigurationReplicationTags -from cloudendure.model.machine_replication_configuration import MachineReplicationConfiguration +from cloudendure.model.machine_replication_configuration import ( + MachineReplicationConfiguration, +) +from cloudendure.model.replication_configuration_replication_tags import ( + ReplicationConfigurationReplicationTags, +) + +globals()["DiskConfig"] = DiskConfig +globals()[ + "ReplicationConfigurationReplicationTags" +] = ReplicationConfigurationReplicationTags class TestMachineReplicationConfiguration(unittest.TestCase): @@ -35,5 +42,5 @@ def testMachineReplicationConfiguration(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_machine_replication_info.py b/test/test_machine_replication_info.py index 5890b94d0..636cdc9ec 100644 --- a/test/test_machine_replication_info.py +++ b/test/test_machine_replication_info.py @@ -12,9 +12,14 @@ import unittest import cloudendure -from cloudendure.model.machine_replication_info_initiation_states import MachineReplicationInfoInitiationStates -globals()['MachineReplicationInfoInitiationStates'] = MachineReplicationInfoInitiationStates from cloudendure.model.machine_replication_info import MachineReplicationInfo +from cloudendure.model.machine_replication_info_initiation_states import ( + MachineReplicationInfoInitiationStates, +) + +globals()[ + "MachineReplicationInfoInitiationStates" +] = MachineReplicationInfoInitiationStates class TestMachineReplicationInfo(unittest.TestCase): @@ -33,5 +38,5 @@ def testMachineReplicationInfo(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_machine_replication_info_initiation_states.py b/test/test_machine_replication_info_initiation_states.py index f54c3a95d..a650f06a6 100644 --- a/test/test_machine_replication_info_initiation_states.py +++ b/test/test_machine_replication_info_initiation_states.py @@ -12,9 +12,16 @@ import unittest import cloudendure -from cloudendure.model.machine_replication_info_initiation_states_items import MachineReplicationInfoInitiationStatesItems -globals()['MachineReplicationInfoInitiationStatesItems'] = MachineReplicationInfoInitiationStatesItems -from cloudendure.model.machine_replication_info_initiation_states import MachineReplicationInfoInitiationStates +from cloudendure.model.machine_replication_info_initiation_states import ( + MachineReplicationInfoInitiationStates, +) +from cloudendure.model.machine_replication_info_initiation_states_items import ( + MachineReplicationInfoInitiationStatesItems, +) + +globals()[ + "MachineReplicationInfoInitiationStatesItems" +] = MachineReplicationInfoInitiationStatesItems class TestMachineReplicationInfoInitiationStates(unittest.TestCase): @@ -33,5 +40,5 @@ def testMachineReplicationInfoInitiationStates(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_machine_replication_info_initiation_states_items.py b/test/test_machine_replication_info_initiation_states_items.py index 10c6cf8c3..4b170e830 100644 --- a/test/test_machine_replication_info_initiation_states_items.py +++ b/test/test_machine_replication_info_initiation_states_items.py @@ -13,8 +13,11 @@ import cloudendure from cloudendure.model.initialization_step import InitializationStep -globals()['InitializationStep'] = InitializationStep -from cloudendure.model.machine_replication_info_initiation_states_items import MachineReplicationInfoInitiationStatesItems +from cloudendure.model.machine_replication_info_initiation_states_items import ( + MachineReplicationInfoInitiationStatesItems, +) + +globals()["InitializationStep"] = InitializationStep class TestMachineReplicationInfoInitiationStatesItems(unittest.TestCase): @@ -33,5 +36,5 @@ def testMachineReplicationInfoInitiationStatesItems(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_machine_snapshot_credits.py b/test/test_machine_snapshot_credits.py index d6ed6ae31..14d1ea8c2 100644 --- a/test/test_machine_snapshot_credits.py +++ b/test/test_machine_snapshot_credits.py @@ -31,5 +31,5 @@ def testMachineSnapshotCredits(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_machine_source_properties.py b/test/test_machine_source_properties.py index c4bd18a4b..c4f3e1dcf 100644 --- a/test/test_machine_source_properties.py +++ b/test/test_machine_source_properties.py @@ -12,15 +12,26 @@ import unittest import cloudendure -from cloudendure.model.machine_source_properties_cpu import MachineSourcePropertiesCpu -from cloudendure.model.machine_source_properties_disks import MachineSourcePropertiesDisks -from cloudendure.model.machine_source_properties_installed_applications import MachineSourcePropertiesInstalledApplications -from cloudendure.model.machine_source_properties_running_services import MachineSourcePropertiesRunningServices -globals()['MachineSourcePropertiesCpu'] = MachineSourcePropertiesCpu -globals()['MachineSourcePropertiesDisks'] = MachineSourcePropertiesDisks -globals()['MachineSourcePropertiesInstalledApplications'] = MachineSourcePropertiesInstalledApplications -globals()['MachineSourcePropertiesRunningServices'] = MachineSourcePropertiesRunningServices from cloudendure.model.machine_source_properties import MachineSourceProperties +from cloudendure.model.machine_source_properties_cpu import MachineSourcePropertiesCpu +from cloudendure.model.machine_source_properties_disks import ( + MachineSourcePropertiesDisks, +) +from cloudendure.model.machine_source_properties_installed_applications import ( + MachineSourcePropertiesInstalledApplications, +) +from cloudendure.model.machine_source_properties_running_services import ( + MachineSourcePropertiesRunningServices, +) + +globals()["MachineSourcePropertiesCpu"] = MachineSourcePropertiesCpu +globals()["MachineSourcePropertiesDisks"] = MachineSourcePropertiesDisks +globals()[ + "MachineSourcePropertiesInstalledApplications" +] = MachineSourcePropertiesInstalledApplications +globals()[ + "MachineSourcePropertiesRunningServices" +] = MachineSourcePropertiesRunningServices class TestMachineSourceProperties(unittest.TestCase): @@ -39,5 +50,5 @@ def testMachineSourceProperties(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_machine_source_properties_cpu.py b/test/test_machine_source_properties_cpu.py index 5bc6d2e9a..17fc86970 100644 --- a/test/test_machine_source_properties_cpu.py +++ b/test/test_machine_source_properties_cpu.py @@ -31,5 +31,5 @@ def testMachineSourcePropertiesCpu(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_machine_source_properties_disks.py b/test/test_machine_source_properties_disks.py index c6b78d65d..1bb384117 100644 --- a/test/test_machine_source_properties_disks.py +++ b/test/test_machine_source_properties_disks.py @@ -12,7 +12,9 @@ import unittest import cloudendure -from cloudendure.model.machine_source_properties_disks import MachineSourcePropertiesDisks +from cloudendure.model.machine_source_properties_disks import ( + MachineSourcePropertiesDisks, +) class TestMachineSourcePropertiesDisks(unittest.TestCase): @@ -31,5 +33,5 @@ def testMachineSourcePropertiesDisks(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_machine_source_properties_installed_applications.py b/test/test_machine_source_properties_installed_applications.py index 25f9e82fa..8ef0fe644 100644 --- a/test/test_machine_source_properties_installed_applications.py +++ b/test/test_machine_source_properties_installed_applications.py @@ -12,9 +12,16 @@ import unittest import cloudendure -from cloudendure.model.machine_source_properties_installed_applications_items import MachineSourcePropertiesInstalledApplicationsItems -globals()['MachineSourcePropertiesInstalledApplicationsItems'] = MachineSourcePropertiesInstalledApplicationsItems -from cloudendure.model.machine_source_properties_installed_applications import MachineSourcePropertiesInstalledApplications +from cloudendure.model.machine_source_properties_installed_applications import ( + MachineSourcePropertiesInstalledApplications, +) +from cloudendure.model.machine_source_properties_installed_applications_items import ( + MachineSourcePropertiesInstalledApplicationsItems, +) + +globals()[ + "MachineSourcePropertiesInstalledApplicationsItems" +] = MachineSourcePropertiesInstalledApplicationsItems class TestMachineSourcePropertiesInstalledApplications(unittest.TestCase): @@ -33,5 +40,5 @@ def testMachineSourcePropertiesInstalledApplications(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_machine_source_properties_installed_applications_items.py b/test/test_machine_source_properties_installed_applications_items.py index 4198c8dc5..e6e3729dd 100644 --- a/test/test_machine_source_properties_installed_applications_items.py +++ b/test/test_machine_source_properties_installed_applications_items.py @@ -12,7 +12,9 @@ import unittest import cloudendure -from cloudendure.model.machine_source_properties_installed_applications_items import MachineSourcePropertiesInstalledApplicationsItems +from cloudendure.model.machine_source_properties_installed_applications_items import ( + MachineSourcePropertiesInstalledApplicationsItems, +) class TestMachineSourcePropertiesInstalledApplicationsItems(unittest.TestCase): @@ -31,5 +33,5 @@ def testMachineSourcePropertiesInstalledApplicationsItems(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_machine_source_properties_running_services.py b/test/test_machine_source_properties_running_services.py index d469bff53..a1f1ac7b4 100644 --- a/test/test_machine_source_properties_running_services.py +++ b/test/test_machine_source_properties_running_services.py @@ -12,9 +12,16 @@ import unittest import cloudendure -from cloudendure.model.machine_source_properties_running_services_items import MachineSourcePropertiesRunningServicesItems -globals()['MachineSourcePropertiesRunningServicesItems'] = MachineSourcePropertiesRunningServicesItems -from cloudendure.model.machine_source_properties_running_services import MachineSourcePropertiesRunningServices +from cloudendure.model.machine_source_properties_running_services import ( + MachineSourcePropertiesRunningServices, +) +from cloudendure.model.machine_source_properties_running_services_items import ( + MachineSourcePropertiesRunningServicesItems, +) + +globals()[ + "MachineSourcePropertiesRunningServicesItems" +] = MachineSourcePropertiesRunningServicesItems class TestMachineSourcePropertiesRunningServices(unittest.TestCase): @@ -33,5 +40,5 @@ def testMachineSourcePropertiesRunningServices(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_machine_source_properties_running_services_items.py b/test/test_machine_source_properties_running_services_items.py index b240c79d2..f11e53409 100644 --- a/test/test_machine_source_properties_running_services_items.py +++ b/test/test_machine_source_properties_running_services_items.py @@ -12,7 +12,9 @@ import unittest import cloudendure -from cloudendure.model.machine_source_properties_running_services_items import MachineSourcePropertiesRunningServicesItems +from cloudendure.model.machine_source_properties_running_services_items import ( + MachineSourcePropertiesRunningServicesItems, +) class TestMachineSourcePropertiesRunningServicesItems(unittest.TestCase): @@ -31,5 +33,5 @@ def testMachineSourcePropertiesRunningServicesItems(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_machine_throttle_time_seconds.py b/test/test_machine_throttle_time_seconds.py index 230fb4420..712b68b96 100644 --- a/test/test_machine_throttle_time_seconds.py +++ b/test/test_machine_throttle_time_seconds.py @@ -31,5 +31,5 @@ def testMachineThrottleTimeSeconds(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_machines_api.py b/test/test_machines_api.py index 53b95a92a..d1015d670 100644 --- a/test/test_machines_api.py +++ b/test/test_machines_api.py @@ -73,5 +73,5 @@ def test_projects_project_id_replicas_replica_id_get(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_machines_list.py b/test/test_machines_list.py index 4190c1962..328dc6da0 100644 --- a/test/test_machines_list.py +++ b/test/test_machines_list.py @@ -13,9 +13,10 @@ import cloudendure from cloudendure.model.machine import Machine -globals()['Machine'] = Machine from cloudendure.model.machines_list import MachinesList +globals()["Machine"] = Machine + class TestMachinesList(unittest.TestCase): """MachinesList unit test stubs""" @@ -33,5 +34,5 @@ def testMachinesList(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_machines_list_invalid_ids_and_job.py b/test/test_machines_list_invalid_ids_and_job.py index de9ecc259..cf1ec4ecb 100644 --- a/test/test_machines_list_invalid_ids_and_job.py +++ b/test/test_machines_list_invalid_ids_and_job.py @@ -14,9 +14,12 @@ import cloudendure from cloudendure.model.job import Job from cloudendure.model.machine import Machine -globals()['Job'] = Job -globals()['Machine'] = Machine -from cloudendure.model.machines_list_invalid_ids_and_job import MachinesListInvalidIDsAndJob +from cloudendure.model.machines_list_invalid_ids_and_job import ( + MachinesListInvalidIDsAndJob, +) + +globals()["Job"] = Job +globals()["Machine"] = Machine class TestMachinesListInvalidIDsAndJob(unittest.TestCase): @@ -35,5 +38,5 @@ def testMachinesListInvalidIDsAndJob(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_network_interface.py b/test/test_network_interface.py index bbd5f5383..b3d81c8c0 100644 --- a/test/test_network_interface.py +++ b/test/test_network_interface.py @@ -31,5 +31,5 @@ def testNetworkInterface(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_outpost.py b/test/test_outpost.py index ab3379d72..7490718c8 100644 --- a/test/test_outpost.py +++ b/test/test_outpost.py @@ -31,5 +31,5 @@ def testOutpost(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_point_in_time.py b/test/test_point_in_time.py index bd24ac152..04c7ee069 100644 --- a/test/test_point_in_time.py +++ b/test/test_point_in_time.py @@ -31,5 +31,5 @@ def testPointInTime(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_point_in_time_list.py b/test/test_point_in_time_list.py index f212a807c..1c1756df0 100644 --- a/test/test_point_in_time_list.py +++ b/test/test_point_in_time_list.py @@ -13,9 +13,10 @@ import cloudendure from cloudendure.model.point_in_time import PointInTime -globals()['PointInTime'] = PointInTime from cloudendure.model.point_in_time_list import PointInTimeList +globals()["PointInTime"] = PointInTime + class TestPointInTimeList(unittest.TestCase): """PointInTimeList unit test stubs""" @@ -33,5 +34,5 @@ def testPointInTimeList(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_populate_job_names.py b/test/test_populate_job_names.py index 292fa64ea..aac016795 100644 --- a/test/test_populate_job_names.py +++ b/test/test_populate_job_names.py @@ -31,5 +31,5 @@ def testPopulateJobNames(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_populate_job_params.py b/test/test_populate_job_params.py index 9839a9b68..847dcc9d4 100644 --- a/test/test_populate_job_params.py +++ b/test/test_populate_job_params.py @@ -31,5 +31,5 @@ def testPopulateJobParams(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_project.py b/test/test_project.py index 5021242c9..bd445fa82 100644 --- a/test/test_project.py +++ b/test/test_project.py @@ -12,11 +12,12 @@ import unittest import cloudendure +from cloudendure.model.project import Project from cloudendure.model.project_ce_admin_properties import ProjectCeAdminProperties from cloudendure.model.project_features import ProjectFeatures -globals()['ProjectCeAdminProperties'] = ProjectCeAdminProperties -globals()['ProjectFeatures'] = ProjectFeatures -from cloudendure.model.project import Project + +globals()["ProjectCeAdminProperties"] = ProjectCeAdminProperties +globals()["ProjectFeatures"] = ProjectFeatures class TestProject(unittest.TestCase): @@ -35,5 +36,5 @@ def testProject(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_project_api.py b/test/test_project_api.py index d081c6ca8..9a6f8894a 100644 --- a/test/test_project_api.py +++ b/test/test_project_api.py @@ -73,5 +73,5 @@ def test_projects_project_id_target_cloud_credentials_post(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_project_ce_admin_properties.py b/test/test_project_ce_admin_properties.py index c47d75481..b22c69ce8 100644 --- a/test/test_project_ce_admin_properties.py +++ b/test/test_project_ce_admin_properties.py @@ -31,5 +31,5 @@ def testProjectCeAdminProperties(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_project_features.py b/test/test_project_features.py index 0f8de158a..994d7f634 100644 --- a/test/test_project_features.py +++ b/test/test_project_features.py @@ -31,5 +31,5 @@ def testProjectFeatures(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_project_storage.py b/test/test_project_storage.py index 26acf4cfd..6b3c293bd 100644 --- a/test/test_project_storage.py +++ b/test/test_project_storage.py @@ -12,9 +12,12 @@ import unittest import cloudendure -from cloudendure.model.project_storage_working_storage import ProjectStorageWorkingStorage -globals()['ProjectStorageWorkingStorage'] = ProjectStorageWorkingStorage from cloudendure.model.project_storage import ProjectStorage +from cloudendure.model.project_storage_working_storage import ( + ProjectStorageWorkingStorage, +) + +globals()["ProjectStorageWorkingStorage"] = ProjectStorageWorkingStorage class TestProjectStorage(unittest.TestCase): @@ -33,5 +36,5 @@ def testProjectStorage(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_project_storage_working_storage.py b/test/test_project_storage_working_storage.py index 36097236f..9ec60a7f6 100644 --- a/test/test_project_storage_working_storage.py +++ b/test/test_project_storage_working_storage.py @@ -12,7 +12,9 @@ import unittest import cloudendure -from cloudendure.model.project_storage_working_storage import ProjectStorageWorkingStorage +from cloudendure.model.project_storage_working_storage import ( + ProjectStorageWorkingStorage, +) class TestProjectStorageWorkingStorage(unittest.TestCase): @@ -31,5 +33,5 @@ def testProjectStorageWorkingStorage(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_projects_and_users.py b/test/test_projects_and_users.py index d1ef92fc9..4929fc274 100644 --- a/test/test_projects_and_users.py +++ b/test/test_projects_and_users.py @@ -12,9 +12,10 @@ import unittest import cloudendure -from cloudendure.model.projects_and_users_items import ProjectsAndUsersItems -globals()['ProjectsAndUsersItems'] = ProjectsAndUsersItems from cloudendure.model.projects_and_users import ProjectsAndUsers +from cloudendure.model.projects_and_users_items import ProjectsAndUsersItems + +globals()["ProjectsAndUsersItems"] = ProjectsAndUsersItems class TestProjectsAndUsers(unittest.TestCase): @@ -33,5 +34,5 @@ def testProjectsAndUsers(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_projects_and_users_items.py b/test/test_projects_and_users_items.py index 1725ec8ce..db12510a8 100644 --- a/test/test_projects_and_users_items.py +++ b/test/test_projects_and_users_items.py @@ -31,5 +31,5 @@ def testProjectsAndUsersItems(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_projects_list.py b/test/test_projects_list.py index 64ccaa778..505035702 100644 --- a/test/test_projects_list.py +++ b/test/test_projects_list.py @@ -13,9 +13,10 @@ import cloudendure from cloudendure.model.project import Project -globals()['Project'] = Project from cloudendure.model.projects_list import ProjectsList +globals()["Project"] = Project + class TestProjectsList(unittest.TestCase): """ProjectsList unit test stubs""" @@ -33,5 +34,5 @@ def testProjectsList(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_recovery_plan.py b/test/test_recovery_plan.py index 1636caca3..0393ff838 100644 --- a/test/test_recovery_plan.py +++ b/test/test_recovery_plan.py @@ -12,9 +12,10 @@ import unittest import cloudendure -from cloudendure.model.recovery_plan_steps import RecoveryPlanSteps -globals()['RecoveryPlanSteps'] = RecoveryPlanSteps from cloudendure.model.recovery_plan import RecoveryPlan +from cloudendure.model.recovery_plan_steps import RecoveryPlanSteps + +globals()["RecoveryPlanSteps"] = RecoveryPlanSteps class TestRecoveryPlan(unittest.TestCase): @@ -33,5 +34,5 @@ def testRecoveryPlan(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_recovery_plan_list.py b/test/test_recovery_plan_list.py index c44305da7..53168c13b 100644 --- a/test/test_recovery_plan_list.py +++ b/test/test_recovery_plan_list.py @@ -13,9 +13,10 @@ import cloudendure from cloudendure.model.recovery_plan import RecoveryPlan -globals()['RecoveryPlan'] = RecoveryPlan from cloudendure.model.recovery_plan_list import RecoveryPlanList +globals()["RecoveryPlan"] = RecoveryPlan + class TestRecoveryPlanList(unittest.TestCase): """RecoveryPlanList unit test stubs""" @@ -33,5 +34,5 @@ def testRecoveryPlanList(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_recovery_plan_step.py b/test/test_recovery_plan_step.py index 622a226d6..4f96bbfda 100644 --- a/test/test_recovery_plan_step.py +++ b/test/test_recovery_plan_step.py @@ -31,5 +31,5 @@ def testRecoveryPlanStep(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_recovery_plan_steps.py b/test/test_recovery_plan_steps.py index 63242e348..82e3ba769 100644 --- a/test/test_recovery_plan_steps.py +++ b/test/test_recovery_plan_steps.py @@ -13,9 +13,10 @@ import cloudendure from cloudendure.model.recovery_plan_step import RecoveryPlanStep -globals()['RecoveryPlanStep'] = RecoveryPlanStep from cloudendure.model.recovery_plan_steps import RecoveryPlanSteps +globals()["RecoveryPlanStep"] = RecoveryPlanStep + class TestRecoveryPlanSteps(unittest.TestCase): """RecoveryPlanSteps unit test stubs""" @@ -33,5 +34,5 @@ def testRecoveryPlanSteps(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_recovery_plans_api.py b/test/test_recovery_plans_api.py index ea3167c44..68800585d 100644 --- a/test/test_recovery_plans_api.py +++ b/test/test_recovery_plans_api.py @@ -66,5 +66,5 @@ def test_projects_project_id_run_recovery_plan_post(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_region.py b/test/test_region.py index 246f70384..be62970f8 100644 --- a/test/test_region.py +++ b/test/test_region.py @@ -16,17 +16,18 @@ from cloudendure.model.logical_location import LogicalLocation from cloudendure.model.network_interface import NetworkInterface from cloudendure.model.outpost import Outpost +from cloudendure.model.region import Region from cloudendure.model.security_group import SecurityGroup from cloudendure.model.storage_location import StorageLocation from cloudendure.model.subnet import Subnet -globals()['ComputeLocation'] = ComputeLocation -globals()['LogicalLocation'] = LogicalLocation -globals()['NetworkInterface'] = NetworkInterface -globals()['Outpost'] = Outpost -globals()['SecurityGroup'] = SecurityGroup -globals()['StorageLocation'] = StorageLocation -globals()['Subnet'] = Subnet -from cloudendure.model.region import Region + +globals()["ComputeLocation"] = ComputeLocation +globals()["LogicalLocation"] = LogicalLocation +globals()["NetworkInterface"] = NetworkInterface +globals()["Outpost"] = Outpost +globals()["SecurityGroup"] = SecurityGroup +globals()["StorageLocation"] = StorageLocation +globals()["Subnet"] = Subnet class TestRegion(unittest.TestCase): @@ -45,5 +46,5 @@ def testRegion(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_regions_list.py b/test/test_regions_list.py index cdfe2a3c1..bfb4d3dcd 100644 --- a/test/test_regions_list.py +++ b/test/test_regions_list.py @@ -13,9 +13,10 @@ import cloudendure from cloudendure.model.region import Region -globals()['Region'] = Region from cloudendure.model.regions_list import RegionsList +globals()["Region"] = Region + class TestRegionsList(unittest.TestCase): """RegionsList unit test stubs""" @@ -33,5 +34,5 @@ def testRegionsList(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_replica.py b/test/test_replica.py index 2c119b2c6..da7680b41 100644 --- a/test/test_replica.py +++ b/test/test_replica.py @@ -31,5 +31,5 @@ def testReplica(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_replication_api.py b/test/test_replication_api.py index 07724f769..e7347207b 100644 --- a/test/test_replication_api.py +++ b/test/test_replication_api.py @@ -65,7 +65,9 @@ def test_projects_project_id_replication_configurations_post(self): """ pass - def test_projects_project_id_replication_configurations_replication_configuration_id_patch(self): + def test_projects_project_id_replication_configurations_replication_configuration_id_patch( + self, + ): """Test case for projects_project_id_replication_configurations_replication_configuration_id_patch Modify Replication Configuration # noqa: E501 @@ -73,5 +75,5 @@ def test_projects_project_id_replication_configurations_replication_configuratio pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_replication_configuration.py b/test/test_replication_configuration.py index 385ba4d16..c92c77245 100644 --- a/test/test_replication_configuration.py +++ b/test/test_replication_configuration.py @@ -12,9 +12,14 @@ import unittest import cloudendure -from cloudendure.model.replication_configuration_replication_tags import ReplicationConfigurationReplicationTags -globals()['ReplicationConfigurationReplicationTags'] = ReplicationConfigurationReplicationTags from cloudendure.model.replication_configuration import ReplicationConfiguration +from cloudendure.model.replication_configuration_replication_tags import ( + ReplicationConfigurationReplicationTags, +) + +globals()[ + "ReplicationConfigurationReplicationTags" +] = ReplicationConfigurationReplicationTags class TestReplicationConfiguration(unittest.TestCase): @@ -33,5 +38,5 @@ def testReplicationConfiguration(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_replication_configuration_list.py b/test/test_replication_configuration_list.py index bf68dfabc..93420da3f 100644 --- a/test/test_replication_configuration_list.py +++ b/test/test_replication_configuration_list.py @@ -13,8 +13,11 @@ import cloudendure from cloudendure.model.replication_configuration import ReplicationConfiguration -globals()['ReplicationConfiguration'] = ReplicationConfiguration -from cloudendure.model.replication_configuration_list import ReplicationConfigurationList +from cloudendure.model.replication_configuration_list import ( + ReplicationConfigurationList, +) + +globals()["ReplicationConfiguration"] = ReplicationConfiguration class TestReplicationConfigurationList(unittest.TestCase): @@ -33,5 +36,5 @@ def testReplicationConfigurationList(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_replication_configuration_replication_tags.py b/test/test_replication_configuration_replication_tags.py index 3321ad255..a52cb82ba 100644 --- a/test/test_replication_configuration_replication_tags.py +++ b/test/test_replication_configuration_replication_tags.py @@ -12,7 +12,9 @@ import unittest import cloudendure -from cloudendure.model.replication_configuration_replication_tags import ReplicationConfigurationReplicationTags +from cloudendure.model.replication_configuration_replication_tags import ( + ReplicationConfigurationReplicationTags, +) class TestReplicationConfigurationReplicationTags(unittest.TestCase): @@ -31,5 +33,5 @@ def testReplicationConfigurationReplicationTags(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_saml_settings.py b/test/test_saml_settings.py index 57a737fc3..b39a33813 100644 --- a/test/test_saml_settings.py +++ b/test/test_saml_settings.py @@ -31,5 +31,5 @@ def testSamlSettings(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_security_group.py b/test/test_security_group.py index acc8006e8..27412568e 100644 --- a/test/test_security_group.py +++ b/test/test_security_group.py @@ -31,5 +31,5 @@ def testSecurityGroup(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_storage_location.py b/test/test_storage_location.py index 6805944e9..c9cd4afbb 100644 --- a/test/test_storage_location.py +++ b/test/test_storage_location.py @@ -31,5 +31,5 @@ def testStorageLocation(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_subnet.py b/test/test_subnet.py index 9059a4d4b..4d4007af8 100644 --- a/test/test_subnet.py +++ b/test/test_subnet.py @@ -31,5 +31,5 @@ def testSubnet(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_time.py b/test/test_time.py index b4e5ae585..55bedadf3 100644 --- a/test/test_time.py +++ b/test/test_time.py @@ -31,5 +31,5 @@ def testTime(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_updateable_scripts.py b/test/test_updateable_scripts.py index 31385c0ee..c51cdc4a0 100644 --- a/test/test_updateable_scripts.py +++ b/test/test_updateable_scripts.py @@ -12,9 +12,10 @@ import unittest import cloudendure -from cloudendure.model.updateable_scripts_result import UpdateableScriptsResult -globals()['UpdateableScriptsResult'] = UpdateableScriptsResult from cloudendure.model.updateable_scripts import UpdateableScripts +from cloudendure.model.updateable_scripts_result import UpdateableScriptsResult + +globals()["UpdateableScriptsResult"] = UpdateableScriptsResult class TestUpdateableScripts(unittest.TestCase): @@ -33,5 +34,5 @@ def testUpdateableScripts(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_updateable_scripts_result.py b/test/test_updateable_scripts_result.py index 7db34bd83..5f1797935 100644 --- a/test/test_updateable_scripts_result.py +++ b/test/test_updateable_scripts_result.py @@ -12,9 +12,14 @@ import unittest import cloudendure -from cloudendure.model.updateable_scripts_result_on_premise_volumes import UpdateableScriptsResultOnPremiseVolumes -globals()['UpdateableScriptsResultOnPremiseVolumes'] = UpdateableScriptsResultOnPremiseVolumes from cloudendure.model.updateable_scripts_result import UpdateableScriptsResult +from cloudendure.model.updateable_scripts_result_on_premise_volumes import ( + UpdateableScriptsResultOnPremiseVolumes, +) + +globals()[ + "UpdateableScriptsResultOnPremiseVolumes" +] = UpdateableScriptsResultOnPremiseVolumes class TestUpdateableScriptsResult(unittest.TestCase): @@ -33,5 +38,5 @@ def testUpdateableScriptsResult(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_updateable_scripts_result_on_premise_volumes.py b/test/test_updateable_scripts_result_on_premise_volumes.py index ec63d3c90..5f9f13900 100644 --- a/test/test_updateable_scripts_result_on_premise_volumes.py +++ b/test/test_updateable_scripts_result_on_premise_volumes.py @@ -12,7 +12,9 @@ import unittest import cloudendure -from cloudendure.model.updateable_scripts_result_on_premise_volumes import UpdateableScriptsResultOnPremiseVolumes +from cloudendure.model.updateable_scripts_result_on_premise_volumes import ( + UpdateableScriptsResultOnPremiseVolumes, +) class TestUpdateableScriptsResultOnPremiseVolumes(unittest.TestCase): @@ -31,5 +33,5 @@ def testUpdateableScriptsResultOnPremiseVolumes(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_upgrade_counter_delay.py b/test/test_upgrade_counter_delay.py index c6acef5d1..d7806370e 100644 --- a/test/test_upgrade_counter_delay.py +++ b/test/test_upgrade_counter_delay.py @@ -31,5 +31,5 @@ def testUpgradeCounterDelay(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_usage.py b/test/test_usage.py index 9323cb298..ddcabb482 100644 --- a/test/test_usage.py +++ b/test/test_usage.py @@ -31,5 +31,5 @@ def testUsage(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_usage_list.py b/test/test_usage_list.py index 70bb4953f..a0cd0b02e 100644 --- a/test/test_usage_list.py +++ b/test/test_usage_list.py @@ -13,9 +13,10 @@ import cloudendure from cloudendure.model.usage import Usage -globals()['Usage'] = Usage from cloudendure.model.usage_list import UsageList +globals()["Usage"] = Usage + class TestUsageList(unittest.TestCase): """UsageList unit test stubs""" @@ -33,5 +34,5 @@ def testUsageList(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_user.py b/test/test_user.py index 6e11730b3..f09be787e 100644 --- a/test/test_user.py +++ b/test/test_user.py @@ -12,9 +12,10 @@ import unittest import cloudendure -from cloudendure.model.user_settings import UserSettings -globals()['UserSettings'] = UserSettings from cloudendure.model.user import User +from cloudendure.model.user_settings import UserSettings + +globals()["UserSettings"] = UserSettings class TestUser(unittest.TestCase): @@ -33,5 +34,5 @@ def testUser(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_user_api.py b/test/test_user_api.py index 08f3ffb64..53d7861bd 100644 --- a/test/test_user_api.py +++ b/test/test_user_api.py @@ -52,5 +52,5 @@ def test_users_user_id_patch(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_user_report.py b/test/test_user_report.py index 83e62b235..420a48d1d 100644 --- a/test/test_user_report.py +++ b/test/test_user_report.py @@ -12,9 +12,12 @@ import unittest import cloudendure -from cloudendure.model.user_report_gcp_machines_finance_data import UserReportGcpMachinesFinanceData -globals()['UserReportGcpMachinesFinanceData'] = UserReportGcpMachinesFinanceData from cloudendure.model.user_report import UserReport +from cloudendure.model.user_report_gcp_machines_finance_data import ( + UserReportGcpMachinesFinanceData, +) + +globals()["UserReportGcpMachinesFinanceData"] = UserReportGcpMachinesFinanceData class TestUserReport(unittest.TestCase): @@ -33,5 +36,5 @@ def testUserReport(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_user_report_gcp_machines_finance_data.py b/test/test_user_report_gcp_machines_finance_data.py index 7bc494824..c02f2618c 100644 --- a/test/test_user_report_gcp_machines_finance_data.py +++ b/test/test_user_report_gcp_machines_finance_data.py @@ -13,8 +13,11 @@ import cloudendure from cloudendure.model.gcp_machines_finance_data import GcpMachinesFinanceData -globals()['GcpMachinesFinanceData'] = GcpMachinesFinanceData -from cloudendure.model.user_report_gcp_machines_finance_data import UserReportGcpMachinesFinanceData +from cloudendure.model.user_report_gcp_machines_finance_data import ( + UserReportGcpMachinesFinanceData, +) + +globals()["GcpMachinesFinanceData"] = GcpMachinesFinanceData class TestUserReportGcpMachinesFinanceData(unittest.TestCase): @@ -33,5 +36,5 @@ def testUserReportGcpMachinesFinanceData(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_user_reports.py b/test/test_user_reports.py index 430304305..3bb9e61b2 100644 --- a/test/test_user_reports.py +++ b/test/test_user_reports.py @@ -13,9 +13,10 @@ import cloudendure from cloudendure.model.user_report import UserReport -globals()['UserReport'] = UserReport from cloudendure.model.user_reports import UserReports +globals()["UserReport"] = UserReport + class TestUserReports(unittest.TestCase): """UserReports unit test stubs""" @@ -33,5 +34,5 @@ def testUserReports(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_user_settings.py b/test/test_user_settings.py index 1747c1fe7..16c4f54a2 100644 --- a/test/test_user_settings.py +++ b/test/test_user_settings.py @@ -12,9 +12,12 @@ import unittest import cloudendure -from cloudendure.model.user_settings_send_notifications import UserSettingsSendNotifications -globals()['UserSettingsSendNotifications'] = UserSettingsSendNotifications from cloudendure.model.user_settings import UserSettings +from cloudendure.model.user_settings_send_notifications import ( + UserSettingsSendNotifications, +) + +globals()["UserSettingsSendNotifications"] = UserSettingsSendNotifications class TestUserSettings(unittest.TestCase): @@ -33,5 +36,5 @@ def testUserSettings(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_user_settings_send_notifications.py b/test/test_user_settings_send_notifications.py index f2387ae2e..12ecf4433 100644 --- a/test/test_user_settings_send_notifications.py +++ b/test/test_user_settings_send_notifications.py @@ -12,7 +12,9 @@ import unittest import cloudendure -from cloudendure.model.user_settings_send_notifications import UserSettingsSendNotifications +from cloudendure.model.user_settings_send_notifications import ( + UserSettingsSendNotifications, +) class TestUserSettingsSendNotifications(unittest.TestCase): @@ -31,5 +33,5 @@ def testUserSettingsSendNotifications(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_users_and_roles.py b/test/test_users_and_roles.py index 7cb0ee8f1..4dabc2243 100644 --- a/test/test_users_and_roles.py +++ b/test/test_users_and_roles.py @@ -12,9 +12,10 @@ import unittest import cloudendure -from cloudendure.model.users_and_roles_items import UsersAndRolesItems -globals()['UsersAndRolesItems'] = UsersAndRolesItems from cloudendure.model.users_and_roles import UsersAndRoles +from cloudendure.model.users_and_roles_items import UsersAndRolesItems + +globals()["UsersAndRolesItems"] = UsersAndRolesItems class TestUsersAndRoles(unittest.TestCase): @@ -33,5 +34,5 @@ def testUsersAndRoles(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_users_and_roles_items.py b/test/test_users_and_roles_items.py index 94436e62b..fa3273802 100644 --- a/test/test_users_and_roles_items.py +++ b/test/test_users_and_roles_items.py @@ -31,5 +31,5 @@ def testUsersAndRolesItems(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/test/test_users_list.py b/test/test_users_list.py index ad02a1e3d..602374502 100644 --- a/test/test_users_list.py +++ b/test/test_users_list.py @@ -13,9 +13,10 @@ import cloudendure from cloudendure.model.user import User -globals()['User'] = User from cloudendure.model.users_list import UsersList +globals()["User"] = User + class TestUsersList(unittest.TestCase): """UsersList unit test stubs""" @@ -33,5 +34,5 @@ def testUsersList(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() From 3a72a1616b3ce6a7a16736a8de082bfa0da8fd96 Mon Sep 17 00:00:00 2001 From: Craig Monson Date: Wed, 14 Jul 2021 11:15:14 -0400 Subject: [PATCH 6/8] Updating black / isort to NOT fight against each other, re-linting --- Makefile | 4 +- cloudendure/api/account_api.py | 25 ++- cloudendure/api/actions_api.py | 198 +++++++++++++---- cloudendure/api/authentication_api.py | 21 +- cloudendure/api/blueprint_api.py | 90 ++++++-- cloudendure/api/cloud_api.py | 153 +++++++++++--- cloudendure/api/cloud_credentials_api.py | 103 ++++++--- cloudendure/api/default_api.py | 199 ++++++++++++++---- cloudendure/api/licensing_api.py | 64 ++++-- cloudendure/api/machines_api.py | 156 +++++++++++--- cloudendure/api/project_api.py | 177 ++++++++++++---- cloudendure/api/recovery_plans_api.py | 120 ++++++++--- cloudendure/api/replication_api.py | 136 +++++++++--- cloudendure/api/user_api.py | 70 ++++-- cloudendure/api_client.py | 12 +- cloudendure/configuration.py | 5 +- cloudendure/exceptions.py | 2 +- cloudendure/model/account.py | 7 +- .../model/account_ce_admin_properties.py | 7 +- cloudendure/model/account_link.py | 7 +- cloudendure/model/account_link_list.py | 7 +- cloudendure/model/account_request.py | 11 +- cloudendure/model/account_request_list.py | 7 +- cloudendure/model/accounts_list.py | 7 +- .../agent_next_replication_init_request.py | 7 +- cloudendure/model/all_project_features.py | 7 +- cloudendure/model/audit_log.py | 7 +- cloudendure/model/audit_log_changed_field.py | 7 +- cloudendure/model/audit_log_entry.py | 7 +- .../audit_log_entry_participating_machines.py | 7 +- cloudendure/model/bandwidth_throttling.py | 7 +- cloudendure/model/blueprint.py | 17 +- cloudendure/model/blueprint_disks.py | 15 +- cloudendure/model/blueprint_list.py | 7 +- cloudendure/model/cloud.py | 7 +- cloudendure/model/cloud_credentials.py | 7 +- cloudendure/model/cloud_credentials_list.py | 7 +- .../model/cloud_credentials_request.py | 7 +- cloudendure/model/clouds_list.py | 7 +- cloudendure/model/compute_location.py | 7 +- cloudendure/model/configurations.py | 7 +- cloudendure/model/configurations_list.py | 7 +- cloudendure/model/cslp_item.py | 7 +- cloudendure/model/cslp_request.py | 7 +- cloudendure/model/cslp_result.py | 13 +- cloudendure/model/disk_config.py | 15 +- cloudendure/model/dynamic_configuration.py | 7 +- cloudendure/model/error.py | 7 +- cloudendure/model/extended_account_info.py | 7 +- .../model/gcp_machines_finance_data.py | 7 +- .../identity_provider_redirect_response.py | 7 +- cloudendure/model/initialization_step.py | 7 +- cloudendure/model/inline_object.py | 7 +- cloudendure/model/inline_object1.py | 7 +- cloudendure/model/inline_object10.py | 7 +- cloudendure/model/inline_object2.py | 7 +- cloudendure/model/inline_object3.py | 7 +- cloudendure/model/inline_object4.py | 7 +- cloudendure/model/inline_object5.py | 7 +- cloudendure/model/inline_object6.py | 7 +- cloudendure/model/inline_object7.py | 7 +- cloudendure/model/inline_object8.py | 7 +- cloudendure/model/inline_object9.py | 7 +- cloudendure/model/inline_response200.py | 7 +- cloudendure/model/inline_response2001.py | 7 +- cloudendure/model/inline_response2002.py | 7 +- cloudendure/model/job.py | 7 +- cloudendure/model/job_log.py | 7 +- cloudendure/model/job_target_machine.py | 7 +- cloudendure/model/jobs_list.py | 7 +- cloudendure/model/key_value_list.py | 7 +- .../model/launch_machines_parameters.py | 7 +- ...aunch_machines_parameters_debug_scripts.py | 7 +- cloudendure/model/license.py | 15 +- .../model/license_ce_admin_properties.py | 7 +- cloudendure/model/license_features.py | 7 +- cloudendure/model/license_list.py | 7 +- cloudendure/model/list_users_result.py | 7 +- cloudendure/model/list_users_results.py | 7 +- cloudendure/model/logical_location.py | 7 +- cloudendure/model/machine.py | 7 +- .../machine_and_path_and_point_in_time.py | 7 +- .../model/machine_and_point_in_time.py | 7 +- cloudendure/model/machine_license.py | 7 +- cloudendure/model/machine_life_cycle.py | 7 +- .../machine_replication_configuration.py | 7 +- cloudendure/model/machine_replication_info.py | 7 +- ...hine_replication_info_initiation_states.py | 7 +- ...eplication_info_initiation_states_items.py | 7 +- cloudendure/model/machine_snapshot_credits.py | 7 +- .../model/machine_source_properties.py | 7 +- .../model/machine_source_properties_cpu.py | 7 +- .../model/machine_source_properties_disks.py | 7 +- ...ource_properties_installed_applications.py | 7 +- ...properties_installed_applications_items.py | 7 +- ...hine_source_properties_running_services.py | 7 +- ...ource_properties_running_services_items.py | 7 +- .../model/machine_throttle_time_seconds.py | 7 +- cloudendure/model/machines_list.py | 7 +- .../machines_list_invalid_ids_and_job.py | 7 +- cloudendure/model/network_interface.py | 7 +- cloudendure/model/outpost.py | 7 +- cloudendure/model/point_in_time.py | 7 +- cloudendure/model/point_in_time_list.py | 7 +- cloudendure/model/populate_job_names.py | 7 +- cloudendure/model/populate_job_params.py | 7 +- cloudendure/model/project.py | 13 +- .../model/project_ce_admin_properties.py | 7 +- cloudendure/model/project_features.py | 7 +- cloudendure/model/project_storage.py | 7 +- .../model/project_storage_working_storage.py | 7 +- cloudendure/model/projects_and_users.py | 7 +- cloudendure/model/projects_and_users_items.py | 7 +- cloudendure/model/projects_list.py | 7 +- cloudendure/model/recovery_plan.py | 7 +- cloudendure/model/recovery_plan_list.py | 7 +- cloudendure/model/recovery_plan_step.py | 7 +- cloudendure/model/recovery_plan_steps.py | 7 +- cloudendure/model/region.py | 7 +- cloudendure/model/regions_list.py | 7 +- cloudendure/model/replica.py | 7 +- .../model/replication_configuration.py | 7 +- .../model/replication_configuration_list.py | 7 +- ...lication_configuration_replication_tags.py | 7 +- cloudendure/model/saml_settings.py | 7 +- cloudendure/model/security_group.py | 7 +- cloudendure/model/storage_location.py | 7 +- cloudendure/model/subnet.py | 7 +- cloudendure/model/time.py | 7 +- cloudendure/model/updateable_scripts.py | 7 +- .../model/updateable_scripts_result.py | 7 +- ...eable_scripts_result_on_premise_volumes.py | 7 +- cloudendure/model/upgrade_counter_delay.py | 7 +- cloudendure/model/usage.py | 7 +- cloudendure/model/usage_list.py | 7 +- cloudendure/model/user.py | 7 +- cloudendure/model/user_report.py | 7 +- .../user_report_gcp_machines_finance_data.py | 7 +- cloudendure/model/user_reports.py | 7 +- cloudendure/model/user_settings.py | 7 +- .../model/user_settings_send_notifications.py | 7 +- cloudendure/model/users_and_roles.py | 7 +- cloudendure/model/users_and_roles_items.py | 7 +- cloudendure/model/users_list.py | 7 +- cloudendure/model_utils.py | 8 +- poetry.lock | 9 +- 146 files changed, 1882 insertions(+), 609 deletions(-) diff --git a/Makefile b/Makefile index 9313607f4..ffac52f4d 100644 --- a/Makefile +++ b/Makefile @@ -22,11 +22,11 @@ test: ## execute pytest in the poetry environment .PHONY: isort isort: ## run isort (order import statements) on our py code - poetry run isort -rc test/ cloudendure/ + poetry run isort --profile=black test/ cloudendure/ .PHONY: isort-test isort-test: ## run isort to test import linting - poetry run isort -rc --check-only --quiet test/ cloudendure/ + poetry run isort --profile=black --check-only --quiet test/ cloudendure/ .PHONY: black black: ## run black (linter) agaist our python code diff --git a/cloudendure/api/account_api.py b/cloudendure/api/account_api.py index 4c892e6ea..a5259f7e3 100644 --- a/cloudendure/api/account_api.py +++ b/cloudendure/api/account_api.py @@ -97,8 +97,12 @@ def __accounts_account_id_get(self, account_id, **kwargs): "servers": None, }, params_map={ - "all": ["account_id",], - "required": ["account_id",], + "all": [ + "account_id", + ], + "required": [ + "account_id", + ], "nullable": [], "enum": [], "validation": [], @@ -106,12 +110,21 @@ def __accounts_account_id_get(self, account_id, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"account_id": (str,),}, - "attribute_map": {"account_id": "accountId",}, - "location_map": {"account_id": "path",}, + "openapi_types": { + "account_id": (str,), + }, + "attribute_map": { + "account_id": "accountId", + }, + "location_map": { + "account_id": "path", + }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__accounts_account_id_get, ) diff --git a/cloudendure/api/actions_api.py b/cloudendure/api/actions_api.py index f78071bad..702547f07 100644 --- a/cloudendure/api/actions_api.py +++ b/cloudendure/api/actions_api.py @@ -111,16 +111,30 @@ def __projects_project_id_jobs_get(self, project_id, **kwargs): "servers": None, }, params_map={ - "all": ["project_id", "offset", "limit",], - "required": ["project_id",], + "all": [ + "project_id", + "offset", + "limit", + ], + "required": [ + "project_id", + ], "nullable": [], "enum": [], - "validation": ["offset", "limit",], + "validation": [ + "offset", + "limit", + ], }, root_map={ "validations": { - ("offset",): {"inclusive_minimum": 0,}, - ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, + ("offset",): { + "inclusive_minimum": 0, + }, + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, }, "allowed_values": {}, "openapi_types": { @@ -140,7 +154,10 @@ def __projects_project_id_jobs_get(self, project_id, **kwargs): }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__projects_project_id_jobs_get, ) @@ -207,8 +224,14 @@ def __projects_project_id_jobs_job_id_get(self, project_id, job_id, **kwargs): "servers": None, }, params_map={ - "all": ["project_id", "job_id",], - "required": ["project_id", "job_id",], + "all": [ + "project_id", + "job_id", + ], + "required": [ + "project_id", + "job_id", + ], "nullable": [], "enum": [], "validation": [], @@ -216,12 +239,24 @@ def __projects_project_id_jobs_job_id_get(self, project_id, job_id, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"project_id": (str,), "job_id": (str,),}, - "attribute_map": {"project_id": "projectId", "job_id": "jobId",}, - "location_map": {"project_id": "path", "job_id": "path",}, + "openapi_types": { + "project_id": (str,), + "job_id": (str,), + }, + "attribute_map": { + "project_id": "projectId", + "job_id": "jobId", + }, + "location_map": { + "project_id": "path", + "job_id": "path", + }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__projects_project_id_jobs_job_id_get, ) @@ -291,8 +326,14 @@ def __projects_project_id_launch_machines_post( "servers": None, }, params_map={ - "all": ["project_id", "launch_machines",], - "required": ["project_id", "launch_machines",], + "all": [ + "project_id", + "launch_machines", + ], + "required": [ + "project_id", + "launch_machines", + ], "nullable": [], "enum": [], "validation": [], @@ -304,8 +345,13 @@ def __projects_project_id_launch_machines_post( "project_id": (str,), "launch_machines": (LaunchMachinesParameters,), }, - "attribute_map": {"project_id": "projectId",}, - "location_map": {"project_id": "path", "launch_machines": "body",}, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "launch_machines": "body", + }, "collection_format_map": {}, }, headers_map={ @@ -381,8 +427,14 @@ def __projects_project_id_move_machines_post( "servers": None, }, params_map={ - "all": ["project_id", "move_machines_params",], - "required": ["project_id", "move_machines_params",], + "all": [ + "project_id", + "move_machines_params", + ], + "required": [ + "project_id", + "move_machines_params", + ], "nullable": [], "enum": [], "validation": [], @@ -394,8 +446,13 @@ def __projects_project_id_move_machines_post( "project_id": (str,), "move_machines_params": (InlineObject4,), }, - "attribute_map": {"project_id": "projectId",}, - "location_map": {"project_id": "path", "move_machines_params": "body",}, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "move_machines_params": "body", + }, "collection_format_map": {}, }, headers_map={ @@ -471,8 +528,14 @@ def __projects_project_id_pause_replication_post( "servers": None, }, params_map={ - "all": ["project_id", "machine_ids",], - "required": ["project_id", "machine_ids",], + "all": [ + "project_id", + "machine_ids", + ], + "required": [ + "project_id", + "machine_ids", + ], "nullable": [], "enum": [], "validation": [], @@ -484,8 +547,13 @@ def __projects_project_id_pause_replication_post( "project_id": (str,), "machine_ids": (InlineObject9,), }, - "attribute_map": {"project_id": "projectId",}, - "location_map": {"project_id": "path", "machine_ids": "body",}, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "machine_ids": "body", + }, "collection_format_map": {}, }, headers_map={ @@ -561,8 +629,14 @@ def __projects_project_id_replicas_delete( "servers": None, }, params_map={ - "all": ["project_id", "replica_ids",], - "required": ["project_id", "replica_ids",], + "all": [ + "project_id", + "replica_ids", + ], + "required": [ + "project_id", + "replica_ids", + ], "nullable": [], "enum": [], "validation": [], @@ -574,8 +648,13 @@ def __projects_project_id_replicas_delete( "project_id": (str,), "replica_ids": (InlineObject5,), }, - "attribute_map": {"project_id": "projectId",}, - "location_map": {"project_id": "path", "replica_ids": "body",}, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "replica_ids": "body", + }, "collection_format_map": {}, }, headers_map={ @@ -646,8 +725,12 @@ def __projects_project_id_reverse_replication_post(self, project_id, **kwargs): "servers": None, }, params_map={ - "all": ["project_id",], - "required": ["project_id",], + "all": [ + "project_id", + ], + "required": [ + "project_id", + ], "nullable": [], "enum": [], "validation": [], @@ -655,12 +738,21 @@ def __projects_project_id_reverse_replication_post(self, project_id, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"project_id": (str,),}, - "attribute_map": {"project_id": "projectId",}, - "location_map": {"project_id": "path",}, + "openapi_types": { + "project_id": (str,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__projects_project_id_reverse_replication_post, ) @@ -730,8 +822,14 @@ def __projects_project_id_start_replication_post( "servers": None, }, params_map={ - "all": ["project_id", "machine_ids",], - "required": ["project_id", "machine_ids",], + "all": [ + "project_id", + "machine_ids", + ], + "required": [ + "project_id", + "machine_ids", + ], "nullable": [], "enum": [], "validation": [], @@ -743,8 +841,13 @@ def __projects_project_id_start_replication_post( "project_id": (str,), "machine_ids": (InlineObject3,), }, - "attribute_map": {"project_id": "projectId",}, - "location_map": {"project_id": "path", "machine_ids": "body",}, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "machine_ids": "body", + }, "collection_format_map": {}, }, headers_map={ @@ -820,8 +923,14 @@ def __projects_project_id_stop_replication_post( "servers": None, }, params_map={ - "all": ["project_id", "machine_ids",], - "required": ["project_id", "machine_ids",], + "all": [ + "project_id", + "machine_ids", + ], + "required": [ + "project_id", + "machine_ids", + ], "nullable": [], "enum": [], "validation": [], @@ -833,8 +942,13 @@ def __projects_project_id_stop_replication_post( "project_id": (str,), "machine_ids": (InlineObject7,), }, - "attribute_map": {"project_id": "projectId",}, - "location_map": {"project_id": "path", "machine_ids": "body",}, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "machine_ids": "body", + }, "collection_format_map": {}, }, headers_map={ diff --git a/cloudendure/api/authentication_api.py b/cloudendure/api/authentication_api.py index 5ce10950e..73740ea2e 100644 --- a/cloudendure/api/authentication_api.py +++ b/cloudendure/api/authentication_api.py @@ -100,8 +100,12 @@ def __login_post(self, login_info, **kwargs): "servers": None, }, params_map={ - "all": ["login_info",], - "required": ["login_info",], + "all": [ + "login_info", + ], + "required": [ + "login_info", + ], "nullable": [], "enum": [], "validation": [], @@ -109,9 +113,13 @@ def __login_post(self, login_info, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"login_info": (InlineObject1,),}, + "openapi_types": { + "login_info": (InlineObject1,), + }, "attribute_map": {}, - "location_map": {"login_info": "body",}, + "location_map": { + "login_info": "body", + }, "collection_format_map": {}, }, headers_map={ @@ -194,7 +202,10 @@ def __logout_post(self, **kwargs): "location_map": {}, "collection_format_map": {}, }, - headers_map={"accept": [], "content_type": [],}, + headers_map={ + "accept": [], + "content_type": [], + }, api_client=api_client, callable=__logout_post, ) diff --git a/cloudendure/api/blueprint_api.py b/cloudendure/api/blueprint_api.py index 588e8bbdd..8a6d5f503 100644 --- a/cloudendure/api/blueprint_api.py +++ b/cloudendure/api/blueprint_api.py @@ -102,8 +102,14 @@ def __projects_project_id_blueprints_blueprint_id_get( "servers": None, }, params_map={ - "all": ["project_id", "blueprint_id",], - "required": ["project_id", "blueprint_id",], + "all": [ + "project_id", + "blueprint_id", + ], + "required": [ + "project_id", + "blueprint_id", + ], "nullable": [], "enum": [], "validation": [], @@ -111,15 +117,24 @@ def __projects_project_id_blueprints_blueprint_id_get( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"project_id": (str,), "blueprint_id": (str,),}, + "openapi_types": { + "project_id": (str,), + "blueprint_id": (str,), + }, "attribute_map": { "project_id": "projectId", "blueprint_id": "blueprintId", }, - "location_map": {"project_id": "path", "blueprint_id": "path",}, + "location_map": { + "project_id": "path", + "blueprint_id": "path", + }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__projects_project_id_blueprints_blueprint_id_get, ) @@ -191,8 +206,16 @@ def __projects_project_id_blueprints_blueprint_id_patch( "servers": None, }, params_map={ - "all": ["project_id", "blueprint_id", "blueprint",], - "required": ["project_id", "blueprint_id", "blueprint",], + "all": [ + "project_id", + "blueprint_id", + "blueprint", + ], + "required": [ + "project_id", + "blueprint_id", + "blueprint", + ], "nullable": [], "enum": [], "validation": [], @@ -287,16 +310,30 @@ def __projects_project_id_blueprints_get(self, project_id, **kwargs): "servers": None, }, params_map={ - "all": ["project_id", "offset", "limit",], - "required": ["project_id",], + "all": [ + "project_id", + "offset", + "limit", + ], + "required": [ + "project_id", + ], "nullable": [], "enum": [], - "validation": ["offset", "limit",], + "validation": [ + "offset", + "limit", + ], }, root_map={ "validations": { - ("offset",): {"inclusive_minimum": 0,}, - ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, + ("offset",): { + "inclusive_minimum": 0, + }, + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, }, "allowed_values": {}, "openapi_types": { @@ -316,7 +353,10 @@ def __projects_project_id_blueprints_get(self, project_id, **kwargs): }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__projects_project_id_blueprints_get, ) @@ -386,8 +426,14 @@ def __projects_project_id_blueprints_post( "servers": None, }, params_map={ - "all": ["project_id", "blueprint",], - "required": ["project_id", "blueprint",], + "all": [ + "project_id", + "blueprint", + ], + "required": [ + "project_id", + "blueprint", + ], "nullable": [], "enum": [], "validation": [], @@ -395,9 +441,17 @@ def __projects_project_id_blueprints_post( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"project_id": (str,), "blueprint": (Blueprint,),}, - "attribute_map": {"project_id": "projectId",}, - "location_map": {"project_id": "path", "blueprint": "body",}, + "openapi_types": { + "project_id": (str,), + "blueprint": (Blueprint,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "blueprint": "body", + }, "collection_format_map": {}, }, headers_map={ diff --git a/cloudendure/api/cloud_api.py b/cloudendure/api/cloud_api.py index a01febbf0..4deb94d3e 100644 --- a/cloudendure/api/cloud_api.py +++ b/cloudendure/api/cloud_api.py @@ -50,7 +50,7 @@ def __cloud_credentials_creds_id_regions_get(self, creds_id, **kwargs): >>> result = thread.get() Args: - creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". Keyword Args: offset (int): With which item to start (0 based).. [optional] if omitted the server will use the default value of 0 @@ -102,16 +102,30 @@ def __cloud_credentials_creds_id_regions_get(self, creds_id, **kwargs): "servers": None, }, params_map={ - "all": ["creds_id", "offset", "limit",], - "required": ["creds_id",], + "all": [ + "creds_id", + "offset", + "limit", + ], + "required": [ + "creds_id", + ], "nullable": [], "enum": [], - "validation": ["offset", "limit",], + "validation": [ + "offset", + "limit", + ], }, root_map={ "validations": { - ("offset",): {"inclusive_minimum": 0,}, - ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, + ("offset",): { + "inclusive_minimum": 0, + }, + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, }, "allowed_values": {}, "openapi_types": { @@ -131,7 +145,10 @@ def __cloud_credentials_creds_id_regions_get(self, creds_id, **kwargs): }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__cloud_credentials_creds_id_regions_get, ) @@ -148,7 +165,7 @@ def __cloud_credentials_creds_id_regions_region_id_delete( >>> result = thread.get() Args: - creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". region_id (str): Keyword Args: @@ -200,8 +217,14 @@ def __cloud_credentials_creds_id_regions_region_id_delete( "servers": None, }, params_map={ - "all": ["creds_id", "region_id",], - "required": ["creds_id", "region_id",], + "all": [ + "creds_id", + "region_id", + ], + "required": [ + "creds_id", + "region_id", + ], "nullable": [], "enum": [], "validation": [], @@ -209,12 +232,24 @@ def __cloud_credentials_creds_id_regions_region_id_delete( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"creds_id": (str,), "region_id": (str,),}, - "attribute_map": {"creds_id": "credsId", "region_id": "regionId",}, - "location_map": {"creds_id": "path", "region_id": "path",}, + "openapi_types": { + "creds_id": (str,), + "region_id": (str,), + }, + "attribute_map": { + "creds_id": "credsId", + "region_id": "regionId", + }, + "location_map": { + "creds_id": "path", + "region_id": "path", + }, "collection_format_map": {}, }, - headers_map={"accept": [], "content_type": [],}, + headers_map={ + "accept": [], + "content_type": [], + }, api_client=api_client, callable=__cloud_credentials_creds_id_regions_region_id_delete, ) @@ -231,7 +266,7 @@ def __cloud_credentials_creds_id_regions_region_id_get( >>> result = thread.get() Args: - creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". region_id (str): Keyword Args: @@ -283,8 +318,14 @@ def __cloud_credentials_creds_id_regions_region_id_get( "servers": None, }, params_map={ - "all": ["creds_id", "region_id",], - "required": ["creds_id", "region_id",], + "all": [ + "creds_id", + "region_id", + ], + "required": [ + "creds_id", + "region_id", + ], "nullable": [], "enum": [], "validation": [], @@ -292,12 +333,24 @@ def __cloud_credentials_creds_id_regions_region_id_get( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"creds_id": (str,), "region_id": (str,),}, - "attribute_map": {"creds_id": "credsId", "region_id": "regionId",}, - "location_map": {"creds_id": "path", "region_id": "path",}, + "openapi_types": { + "creds_id": (str,), + "region_id": (str,), + }, + "attribute_map": { + "creds_id": "credsId", + "region_id": "regionId", + }, + "location_map": { + "creds_id": "path", + "region_id": "path", + }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__cloud_credentials_creds_id_regions_region_id_get, ) @@ -314,7 +367,7 @@ def __cloud_credentials_creds_id_regions_region_id_patch( >>> result = thread.get() Args: - creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". region_id (str): region (Region): @@ -368,8 +421,16 @@ def __cloud_credentials_creds_id_regions_region_id_patch( "servers": None, }, params_map={ - "all": ["creds_id", "region_id", "region",], - "required": ["creds_id", "region_id", "region",], + "all": [ + "creds_id", + "region_id", + "region", + ], + "required": [ + "creds_id", + "region_id", + "region", + ], "nullable": [], "enum": [], "validation": [], @@ -382,7 +443,10 @@ def __cloud_credentials_creds_id_regions_region_id_patch( "region_id": (str,), "region": (Region,), }, - "attribute_map": {"creds_id": "credsId", "region_id": "regionId",}, + "attribute_map": { + "creds_id": "credsId", + "region_id": "regionId", + }, "location_map": { "creds_id": "path", "region_id": "path", @@ -458,24 +522,47 @@ def __clouds_get(self, **kwargs): "servers": None, }, params_map={ - "all": ["offset", "limit",], + "all": [ + "offset", + "limit", + ], "required": [], "nullable": [], "enum": [], - "validation": ["offset", "limit",], + "validation": [ + "offset", + "limit", + ], }, root_map={ "validations": { - ("offset",): {"inclusive_minimum": 0,}, - ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, + ("offset",): { + "inclusive_minimum": 0, + }, + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, }, "allowed_values": {}, - "openapi_types": {"offset": (int,), "limit": (int,),}, - "attribute_map": {"offset": "offset", "limit": "limit",}, - "location_map": {"offset": "query", "limit": "query",}, + "openapi_types": { + "offset": (int,), + "limit": (int,), + }, + "attribute_map": { + "offset": "offset", + "limit": "limit", + }, + "location_map": { + "offset": "query", + "limit": "query", + }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__clouds_get, ) diff --git a/cloudendure/api/cloud_credentials_api.py b/cloudendure/api/cloud_credentials_api.py index 8855303fa..b0cdefcac 100644 --- a/cloudendure/api/cloud_credentials_api.py +++ b/cloudendure/api/cloud_credentials_api.py @@ -49,7 +49,7 @@ def __cloud_credentials_creds_id_get(self, creds_id, **kwargs): >>> result = thread.get() Args: - creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". Keyword Args: _return_http_data_only (bool): response data without head status @@ -99,8 +99,12 @@ def __cloud_credentials_creds_id_get(self, creds_id, **kwargs): "servers": None, }, params_map={ - "all": ["creds_id",], - "required": ["creds_id",], + "all": [ + "creds_id", + ], + "required": [ + "creds_id", + ], "nullable": [], "enum": [], "validation": [], @@ -108,12 +112,21 @@ def __cloud_credentials_creds_id_get(self, creds_id, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"creds_id": (str,),}, - "attribute_map": {"creds_id": "credsId",}, - "location_map": {"creds_id": "path",}, + "openapi_types": { + "creds_id": (str,), + }, + "attribute_map": { + "creds_id": "credsId", + }, + "location_map": { + "creds_id": "path", + }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__cloud_credentials_creds_id_get, ) @@ -131,7 +144,7 @@ def __cloud_credentials_creds_id_patch( >>> result = thread.get() Args: - creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". + creds_id (str): UUID of the credentials to use. In case of on-premise, you should use the null UUID \"00000000-0000-0000-0000-000000000000\". cloud_credentials (CloudCredentialsRequest): Keyword Args: @@ -183,8 +196,14 @@ def __cloud_credentials_creds_id_patch( "servers": None, }, params_map={ - "all": ["creds_id", "cloud_credentials",], - "required": ["creds_id", "cloud_credentials",], + "all": [ + "creds_id", + "cloud_credentials", + ], + "required": [ + "creds_id", + "cloud_credentials", + ], "nullable": [], "enum": [], "validation": [], @@ -196,8 +215,13 @@ def __cloud_credentials_creds_id_patch( "creds_id": (str,), "cloud_credentials": (CloudCredentialsRequest,), }, - "attribute_map": {"creds_id": "credsId",}, - "location_map": {"creds_id": "path", "cloud_credentials": "body",}, + "attribute_map": { + "creds_id": "credsId", + }, + "location_map": { + "creds_id": "path", + "cloud_credentials": "body", + }, "collection_format_map": {}, }, headers_map={ @@ -268,24 +292,47 @@ def __cloud_credentials_get(self, **kwargs): "servers": None, }, params_map={ - "all": ["offset", "limit",], + "all": [ + "offset", + "limit", + ], "required": [], "nullable": [], "enum": [], - "validation": ["offset", "limit",], + "validation": [ + "offset", + "limit", + ], }, root_map={ "validations": { - ("offset",): {"inclusive_minimum": 0,}, - ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, + ("offset",): { + "inclusive_minimum": 0, + }, + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, }, "allowed_values": {}, - "openapi_types": {"offset": (int,), "limit": (int,),}, - "attribute_map": {"offset": "offset", "limit": "limit",}, - "location_map": {"offset": "query", "limit": "query",}, + "openapi_types": { + "offset": (int,), + "limit": (int,), + }, + "attribute_map": { + "offset": "offset", + "limit": "limit", + }, + "location_map": { + "offset": "query", + "limit": "query", + }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__cloud_credentials_get, ) @@ -351,8 +398,12 @@ def __cloud_credentials_post(self, cloud_credentials, **kwargs): "servers": None, }, params_map={ - "all": ["cloud_credentials",], - "required": ["cloud_credentials",], + "all": [ + "cloud_credentials", + ], + "required": [ + "cloud_credentials", + ], "nullable": [], "enum": [], "validation": [], @@ -360,9 +411,13 @@ def __cloud_credentials_post(self, cloud_credentials, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"cloud_credentials": (CloudCredentialsRequest,),}, + "openapi_types": { + "cloud_credentials": (CloudCredentialsRequest,), + }, "attribute_map": {}, - "location_map": {"cloud_credentials": "body",}, + "location_map": { + "cloud_credentials": "body", + }, "collection_format_map": {}, }, headers_map={ diff --git a/cloudendure/api/default_api.py b/cloudendure/api/default_api.py index 7c73102c0..2e674b24a 100644 --- a/cloudendure/api/default_api.py +++ b/cloudendure/api/default_api.py @@ -111,8 +111,14 @@ def __accounts_account_id_access_get(self, account_id, username, **kwargs): "servers": None, }, params_map={ - "all": ["account_id", "username",], - "required": ["account_id", "username",], + "all": [ + "account_id", + "username", + ], + "required": [ + "account_id", + "username", + ], "nullable": [], "enum": [], "validation": [], @@ -120,12 +126,24 @@ def __accounts_account_id_access_get(self, account_id, username, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"account_id": (str,), "username": (str,),}, - "attribute_map": {"account_id": "accountId", "username": "username",}, - "location_map": {"account_id": "path", "username": "query",}, + "openapi_types": { + "account_id": (str,), + "username": (str,), + }, + "attribute_map": { + "account_id": "accountId", + "username": "username", + }, + "location_map": { + "account_id": "path", + "username": "query", + }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__accounts_account_id_access_get, ) @@ -201,7 +219,10 @@ def __extended_account_info_get(self, **kwargs): "location_map": {}, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__extended_account_info_get, ) @@ -267,8 +288,12 @@ def __projects_assign_users_post(self, projects_and_users, **kwargs): "servers": None, }, params_map={ - "all": ["projects_and_users",], - "required": ["projects_and_users",], + "all": [ + "projects_and_users", + ], + "required": [ + "projects_and_users", + ], "nullable": [], "enum": [], "validation": [], @@ -276,9 +301,13 @@ def __projects_assign_users_post(self, projects_and_users, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"projects_and_users": (ProjectsAndUsers,),}, + "openapi_types": { + "projects_and_users": (ProjectsAndUsers,), + }, "attribute_map": {}, - "location_map": {"projects_and_users": "body",}, + "location_map": { + "projects_and_users": "body", + }, "collection_format_map": {}, }, headers_map={"accept": [], "content_type": ["application/json"]}, @@ -357,14 +386,21 @@ def __projects_project_id_audit_log_get(self, project_id, **kwargs): "to_date_time", "format", ], - "required": ["project_id",], + "required": [ + "project_id", + ], "nullable": [], "enum": [], - "validation": ["limit",], + "validation": [ + "limit", + ], }, root_map={ "validations": { - ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, }, "allowed_values": {}, "openapi_types": { @@ -462,8 +498,14 @@ def __projects_project_id_machines_machine_id_force_rescan_post( "servers": None, }, params_map={ - "all": ["project_id", "machine_id",], - "required": ["project_id", "machine_id",], + "all": [ + "project_id", + "machine_id", + ], + "required": [ + "project_id", + "machine_id", + ], "nullable": [], "enum": [], "validation": [], @@ -471,15 +513,24 @@ def __projects_project_id_machines_machine_id_force_rescan_post( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"project_id": (str,), "machine_id": (str,),}, + "openapi_types": { + "project_id": (str,), + "machine_id": (str,), + }, "attribute_map": { "project_id": "projectId", "machine_id": "machineId", }, - "location_map": {"project_id": "path", "machine_id": "path",}, + "location_map": { + "project_id": "path", + "machine_id": "path", + }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__projects_project_id_machines_machine_id_force_rescan_post, ) @@ -545,8 +596,12 @@ def __projects_project_id_storage_get(self, project_id, **kwargs): "servers": None, }, params_map={ - "all": ["project_id",], - "required": ["project_id",], + "all": [ + "project_id", + ], + "required": [ + "project_id", + ], "nullable": [], "enum": [], "validation": [], @@ -554,12 +609,21 @@ def __projects_project_id_storage_get(self, project_id, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"project_id": (str,),}, - "attribute_map": {"project_id": "projectId",}, - "location_map": {"project_id": "path",}, + "openapi_types": { + "project_id": (str,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__projects_project_id_storage_get, ) @@ -625,8 +689,12 @@ def __projects_remove_users_post(self, projects_and_users, **kwargs): "servers": None, }, params_map={ - "all": ["projects_and_users",], - "required": ["projects_and_users",], + "all": [ + "projects_and_users", + ], + "required": [ + "projects_and_users", + ], "nullable": [], "enum": [], "validation": [], @@ -634,9 +702,13 @@ def __projects_remove_users_post(self, projects_and_users, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"projects_and_users": (ProjectsAndUsers,),}, + "openapi_types": { + "projects_and_users": (ProjectsAndUsers,), + }, "attribute_map": {}, - "location_map": {"projects_and_users": "body",}, + "location_map": { + "projects_and_users": "body", + }, "collection_format_map": {}, }, headers_map={"accept": [], "content_type": ["application/json"]}, @@ -716,7 +788,10 @@ def __replace_api_token_post(self, **kwargs): "location_map": {}, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__replace_api_token_post, ) @@ -781,8 +856,12 @@ def __set_password_post(self, set_password_params, **kwargs): "servers": None, }, params_map={ - "all": ["set_password_params",], - "required": ["set_password_params",], + "all": [ + "set_password_params", + ], + "required": [ + "set_password_params", + ], "nullable": [], "enum": [], "validation": [], @@ -790,9 +869,13 @@ def __set_password_post(self, set_password_params, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"set_password_params": (InlineObject2,),}, + "openapi_types": { + "set_password_params": (InlineObject2,), + }, "attribute_map": {}, - "location_map": {"set_password_params": "body",}, + "location_map": { + "set_password_params": "body", + }, "collection_format_map": {}, }, headers_map={ @@ -863,8 +946,12 @@ def __users_assign_roles_post(self, users_and_roles, **kwargs): "servers": None, }, params_map={ - "all": ["users_and_roles",], - "required": ["users_and_roles",], + "all": [ + "users_and_roles", + ], + "required": [ + "users_and_roles", + ], "nullable": [], "enum": [], "validation": [], @@ -872,9 +959,13 @@ def __users_assign_roles_post(self, users_and_roles, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"users_and_roles": (UsersAndRoles,),}, + "openapi_types": { + "users_and_roles": (UsersAndRoles,), + }, "attribute_map": {}, - "location_map": {"users_and_roles": "body",}, + "location_map": { + "users_and_roles": "body", + }, "collection_format_map": {}, }, headers_map={ @@ -945,8 +1036,12 @@ def __users_post(self, users_params, **kwargs): "servers": None, }, params_map={ - "all": ["users_params",], - "required": ["users_params",], + "all": [ + "users_params", + ], + "required": [ + "users_params", + ], "nullable": [], "enum": [], "validation": [], @@ -954,9 +1049,13 @@ def __users_post(self, users_params, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"users_params": (InlineObject6,),}, + "openapi_types": { + "users_params": (InlineObject6,), + }, "attribute_map": {}, - "location_map": {"users_params": "body",}, + "location_map": { + "users_params": "body", + }, "collection_format_map": {}, }, headers_map={ @@ -1027,8 +1126,12 @@ def __users_revoke_roles_post(self, users_and_roles, **kwargs): "servers": None, }, params_map={ - "all": ["users_and_roles",], - "required": ["users_and_roles",], + "all": [ + "users_and_roles", + ], + "required": [ + "users_and_roles", + ], "nullable": [], "enum": [], "validation": [], @@ -1036,9 +1139,13 @@ def __users_revoke_roles_post(self, users_and_roles, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"users_and_roles": (UsersAndRoles,),}, + "openapi_types": { + "users_and_roles": (UsersAndRoles,), + }, "attribute_map": {}, - "location_map": {"users_and_roles": "body",}, + "location_map": { + "users_and_roles": "body", + }, "collection_format_map": {}, }, headers_map={ diff --git a/cloudendure/api/licensing_api.py b/cloudendure/api/licensing_api.py index e5094c04a..e3e7bc0ed 100644 --- a/cloudendure/api/licensing_api.py +++ b/cloudendure/api/licensing_api.py @@ -98,24 +98,47 @@ def __licenses_get(self, **kwargs): "servers": None, }, params_map={ - "all": ["offset", "limit",], + "all": [ + "offset", + "limit", + ], "required": [], "nullable": [], "enum": [], - "validation": ["offset", "limit",], + "validation": [ + "offset", + "limit", + ], }, root_map={ "validations": { - ("offset",): {"inclusive_minimum": 0,}, - ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, + ("offset",): { + "inclusive_minimum": 0, + }, + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, }, "allowed_values": {}, - "openapi_types": {"offset": (int,), "limit": (int,),}, - "attribute_map": {"offset": "offset", "limit": "limit",}, - "location_map": {"offset": "query", "limit": "query",}, + "openapi_types": { + "offset": (int,), + "limit": (int,), + }, + "attribute_map": { + "offset": "offset", + "limit": "limit", + }, + "location_map": { + "offset": "query", + "limit": "query", + }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__licenses_get, ) @@ -180,8 +203,12 @@ def __licenses_license_id_get(self, license_id, **kwargs): "servers": None, }, params_map={ - "all": ["license_id",], - "required": ["license_id",], + "all": [ + "license_id", + ], + "required": [ + "license_id", + ], "nullable": [], "enum": [], "validation": [], @@ -189,12 +216,21 @@ def __licenses_license_id_get(self, license_id, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"license_id": (str,),}, - "attribute_map": {"license_id": "licenseId",}, - "location_map": {"license_id": "path",}, + "openapi_types": { + "license_id": (str,), + }, + "attribute_map": { + "license_id": "licenseId", + }, + "location_map": { + "license_id": "path", + }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__licenses_license_id_get, ) diff --git a/cloudendure/api/machines_api.py b/cloudendure/api/machines_api.py index dfe7600e7..c22883f81 100644 --- a/cloudendure/api/machines_api.py +++ b/cloudendure/api/machines_api.py @@ -106,8 +106,14 @@ def __projects_project_id_machines_delete( "servers": None, }, params_map={ - "all": ["project_id", "machine_ids",], - "required": ["project_id", "machine_ids",], + "all": [ + "project_id", + "machine_ids", + ], + "required": [ + "project_id", + "machine_ids", + ], "nullable": [], "enum": [], "validation": [], @@ -119,8 +125,13 @@ def __projects_project_id_machines_delete( "project_id": (str,), "machine_ids": (InlineObject8,), }, - "attribute_map": {"project_id": "projectId",}, - "location_map": {"project_id": "path", "machine_ids": "body",}, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "machine_ids": "body", + }, "collection_format_map": {}, }, headers_map={"accept": [], "content_type": ["application/json"]}, @@ -193,16 +204,32 @@ def __projects_project_id_machines_get(self, project_id, **kwargs): "servers": None, }, params_map={ - "all": ["project_id", "offset", "limit", "all", "types",], - "required": ["project_id",], + "all": [ + "project_id", + "offset", + "limit", + "all", + "types", + ], + "required": [ + "project_id", + ], "nullable": [], "enum": [], - "validation": ["offset", "limit",], + "validation": [ + "offset", + "limit", + ], }, root_map={ "validations": { - ("offset",): {"inclusive_minimum": 0,}, - ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, + ("offset",): { + "inclusive_minimum": 0, + }, + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, }, "allowed_values": {}, "openapi_types": { @@ -228,7 +255,10 @@ def __projects_project_id_machines_get(self, project_id, **kwargs): }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__projects_project_id_machines_get, ) @@ -298,8 +328,14 @@ def __projects_project_id_machines_machine_id_delete( "servers": None, }, params_map={ - "all": ["project_id", "machine_id",], - "required": ["project_id", "machine_id",], + "all": [ + "project_id", + "machine_id", + ], + "required": [ + "project_id", + "machine_id", + ], "nullable": [], "enum": [], "validation": [], @@ -307,15 +343,24 @@ def __projects_project_id_machines_machine_id_delete( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"project_id": (str,), "machine_id": (str,),}, + "openapi_types": { + "project_id": (str,), + "machine_id": (str,), + }, "attribute_map": { "project_id": "projectId", "machine_id": "machineId", }, - "location_map": {"project_id": "path", "machine_id": "path",}, + "location_map": { + "project_id": "path", + "machine_id": "path", + }, "collection_format_map": {}, }, - headers_map={"accept": [], "content_type": [],}, + headers_map={ + "accept": [], + "content_type": [], + }, api_client=api_client, callable=__projects_project_id_machines_machine_id_delete, ) @@ -384,8 +429,14 @@ def __projects_project_id_machines_machine_id_get( "servers": None, }, params_map={ - "all": ["project_id", "machine_id",], - "required": ["project_id", "machine_id",], + "all": [ + "project_id", + "machine_id", + ], + "required": [ + "project_id", + "machine_id", + ], "nullable": [], "enum": [], "validation": [], @@ -393,15 +444,24 @@ def __projects_project_id_machines_machine_id_get( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"project_id": (str,), "machine_id": (str,),}, + "openapi_types": { + "project_id": (str,), + "machine_id": (str,), + }, "attribute_map": { "project_id": "projectId", "machine_id": "machineId", }, - "location_map": {"project_id": "path", "machine_id": "path",}, + "location_map": { + "project_id": "path", + "machine_id": "path", + }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__projects_project_id_machines_machine_id_get, ) @@ -472,8 +532,16 @@ def __projects_project_id_machines_machine_id_patch( "servers": None, }, params_map={ - "all": ["project_id", "machine_id", "machine",], - "required": ["project_id", "machine_id", "machine",], + "all": [ + "project_id", + "machine_id", + "machine", + ], + "required": [ + "project_id", + "machine_id", + "machine", + ], "nullable": [], "enum": [], "validation": [], @@ -569,8 +637,14 @@ def __projects_project_id_machines_patch( "servers": None, }, params_map={ - "all": ["project_id", "machines_list",], - "required": ["project_id", "machines_list",], + "all": [ + "project_id", + "machines_list", + ], + "required": [ + "project_id", + "machines_list", + ], "nullable": [], "enum": [], "validation": [], @@ -582,8 +656,13 @@ def __projects_project_id_machines_patch( "project_id": (str,), "machines_list": (MachinesList,), }, - "attribute_map": {"project_id": "projectId",}, - "location_map": {"project_id": "path", "machines_list": "body",}, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "machines_list": "body", + }, "collection_format_map": {}, }, headers_map={ @@ -658,8 +737,14 @@ def __projects_project_id_replicas_replica_id_get( "servers": None, }, params_map={ - "all": ["project_id", "replica_id",], - "required": ["project_id", "replica_id",], + "all": [ + "project_id", + "replica_id", + ], + "required": [ + "project_id", + "replica_id", + ], "nullable": [], "enum": [], "validation": [], @@ -667,15 +752,24 @@ def __projects_project_id_replicas_replica_id_get( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"project_id": (str,), "replica_id": (str,),}, + "openapi_types": { + "project_id": (str,), + "replica_id": (str,), + }, "attribute_map": { "project_id": "projectId", "replica_id": "replicaId", }, - "location_map": {"project_id": "path", "replica_id": "path",}, + "location_map": { + "project_id": "path", + "replica_id": "path", + }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__projects_project_id_replicas_replica_id_get, ) diff --git a/cloudendure/api/project_api.py b/cloudendure/api/project_api.py index 05fb32679..e00475bd9 100644 --- a/cloudendure/api/project_api.py +++ b/cloudendure/api/project_api.py @@ -101,24 +101,47 @@ def __projects_get(self, **kwargs): "servers": None, }, params_map={ - "all": ["offset", "limit",], + "all": [ + "offset", + "limit", + ], "required": [], "nullable": [], "enum": [], - "validation": ["offset", "limit",], + "validation": [ + "offset", + "limit", + ], }, root_map={ "validations": { - ("offset",): {"inclusive_minimum": 0,}, - ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, + ("offset",): { + "inclusive_minimum": 0, + }, + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, }, "allowed_values": {}, - "openapi_types": {"offset": (int,), "limit": (int,),}, - "attribute_map": {"offset": "offset", "limit": "limit",}, - "location_map": {"offset": "query", "limit": "query",}, + "openapi_types": { + "offset": (int,), + "limit": (int,), + }, + "attribute_map": { + "offset": "offset", + "limit": "limit", + }, + "location_map": { + "offset": "query", + "limit": "query", + }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__projects_get, ) @@ -184,8 +207,12 @@ def __projects_post(self, project, **kwargs): "servers": None, }, params_map={ - "all": ["project",], - "required": ["project",], + "all": [ + "project", + ], + "required": [ + "project", + ], "nullable": [], "enum": [], "validation": [], @@ -193,9 +220,13 @@ def __projects_post(self, project, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"project": (Project,),}, + "openapi_types": { + "project": (Project,), + }, "attribute_map": {}, - "location_map": {"project": "body",}, + "location_map": { + "project": "body", + }, "collection_format_map": {}, }, headers_map={ @@ -266,8 +297,12 @@ def __projects_project_id_delete(self, project_id, **kwargs): "servers": None, }, params_map={ - "all": ["project_id",], - "required": ["project_id",], + "all": [ + "project_id", + ], + "required": [ + "project_id", + ], "nullable": [], "enum": [], "validation": [], @@ -275,12 +310,21 @@ def __projects_project_id_delete(self, project_id, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"project_id": (str,),}, - "attribute_map": {"project_id": "projectId",}, - "location_map": {"project_id": "path",}, + "openapi_types": { + "project_id": (str,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + }, "collection_format_map": {}, }, - headers_map={"accept": [], "content_type": [],}, + headers_map={ + "accept": [], + "content_type": [], + }, api_client=api_client, callable=__projects_project_id_delete, ) @@ -345,8 +389,12 @@ def __projects_project_id_get(self, project_id, **kwargs): "servers": None, }, params_map={ - "all": ["project_id",], - "required": ["project_id",], + "all": [ + "project_id", + ], + "required": [ + "project_id", + ], "nullable": [], "enum": [], "validation": [], @@ -354,12 +402,21 @@ def __projects_project_id_get(self, project_id, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"project_id": (str,),}, - "attribute_map": {"project_id": "projectId",}, - "location_map": {"project_id": "path",}, + "openapi_types": { + "project_id": (str,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__projects_project_id_get, ) @@ -427,8 +484,14 @@ def __projects_project_id_patch(self, project_id, project, **kwargs): "servers": None, }, params_map={ - "all": ["project_id", "project",], - "required": ["project_id", "project",], + "all": [ + "project_id", + "project", + ], + "required": [ + "project_id", + "project", + ], "nullable": [], "enum": [], "validation": [], @@ -436,9 +499,17 @@ def __projects_project_id_patch(self, project_id, project, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"project_id": (str,), "project": (Project,),}, - "attribute_map": {"project_id": "projectId",}, - "location_map": {"project_id": "path", "project": "body",}, + "openapi_types": { + "project_id": (str,), + "project": (Project,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "project": "body", + }, "collection_format_map": {}, }, headers_map={ @@ -512,16 +583,30 @@ def __projects_project_id_tags_get(self, project_id, **kwargs): "servers": None, }, params_map={ - "all": ["project_id", "offset", "limit",], - "required": ["project_id",], + "all": [ + "project_id", + "offset", + "limit", + ], + "required": [ + "project_id", + ], "nullable": [], "enum": [], - "validation": ["offset", "limit",], + "validation": [ + "offset", + "limit", + ], }, root_map={ "validations": { - ("offset",): {"inclusive_minimum": 0,}, - ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, + ("offset",): { + "inclusive_minimum": 0, + }, + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, }, "allowed_values": {}, "openapi_types": { @@ -541,7 +626,10 @@ def __projects_project_id_tags_get(self, project_id, **kwargs): }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__projects_project_id_tags_get, ) @@ -611,8 +699,14 @@ def __projects_project_id_target_cloud_credentials_post( "servers": None, }, params_map={ - "all": ["project_id", "cloud_credentials",], - "required": ["project_id", "cloud_credentials",], + "all": [ + "project_id", + "cloud_credentials", + ], + "required": [ + "project_id", + "cloud_credentials", + ], "nullable": [], "enum": [], "validation": [], @@ -624,8 +718,13 @@ def __projects_project_id_target_cloud_credentials_post( "project_id": (str,), "cloud_credentials": (CloudCredentialsRequest,), }, - "attribute_map": {"project_id": "projectId",}, - "location_map": {"project_id": "path", "cloud_credentials": "body",}, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "cloud_credentials": "body", + }, "collection_format_map": {}, }, headers_map={ diff --git a/cloudendure/api/recovery_plans_api.py b/cloudendure/api/recovery_plans_api.py index 23b9283bf..208586083 100644 --- a/cloudendure/api/recovery_plans_api.py +++ b/cloudendure/api/recovery_plans_api.py @@ -100,8 +100,12 @@ def __projects_project_id_recovery_plans_get(self, project_id, **kwargs): "servers": None, }, params_map={ - "all": ["project_id",], - "required": ["project_id",], + "all": [ + "project_id", + ], + "required": [ + "project_id", + ], "nullable": [], "enum": [], "validation": [], @@ -109,12 +113,21 @@ def __projects_project_id_recovery_plans_get(self, project_id, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"project_id": (str,),}, - "attribute_map": {"project_id": "projectId",}, - "location_map": {"project_id": "path",}, + "openapi_types": { + "project_id": (str,), + }, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__projects_project_id_recovery_plans_get, ) @@ -183,8 +196,14 @@ def __projects_project_id_recovery_plans_post( "servers": None, }, params_map={ - "all": ["project_id", "recovery_plan",], - "required": ["project_id", "recovery_plan",], + "all": [ + "project_id", + "recovery_plan", + ], + "required": [ + "project_id", + "recovery_plan", + ], "nullable": [], "enum": [], "validation": [], @@ -196,8 +215,13 @@ def __projects_project_id_recovery_plans_post( "project_id": (str,), "recovery_plan": (RecoveryPlan,), }, - "attribute_map": {"project_id": "projectId",}, - "location_map": {"project_id": "path", "recovery_plan": "body",}, + "attribute_map": { + "project_id": "projectId", + }, + "location_map": { + "project_id": "path", + "recovery_plan": "body", + }, "collection_format_map": {}, }, headers_map={ @@ -272,8 +296,14 @@ def __projects_project_id_recovery_plans_recovery_plan_id_delete( "servers": None, }, params_map={ - "all": ["project_id", "recovery_plan_id",], - "required": ["project_id", "recovery_plan_id",], + "all": [ + "project_id", + "recovery_plan_id", + ], + "required": [ + "project_id", + "recovery_plan_id", + ], "nullable": [], "enum": [], "validation": [], @@ -281,15 +311,24 @@ def __projects_project_id_recovery_plans_recovery_plan_id_delete( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"project_id": (str,), "recovery_plan_id": (str,),}, + "openapi_types": { + "project_id": (str,), + "recovery_plan_id": (str,), + }, "attribute_map": { "project_id": "projectId", "recovery_plan_id": "recoveryPlanId", }, - "location_map": {"project_id": "path", "recovery_plan_id": "path",}, + "location_map": { + "project_id": "path", + "recovery_plan_id": "path", + }, "collection_format_map": {}, }, - headers_map={"accept": [], "content_type": [],}, + headers_map={ + "accept": [], + "content_type": [], + }, api_client=api_client, callable=__projects_project_id_recovery_plans_recovery_plan_id_delete, ) @@ -358,8 +397,14 @@ def __projects_project_id_recovery_plans_recovery_plan_id_get( "servers": None, }, params_map={ - "all": ["project_id", "recovery_plan_id",], - "required": ["project_id", "recovery_plan_id",], + "all": [ + "project_id", + "recovery_plan_id", + ], + "required": [ + "project_id", + "recovery_plan_id", + ], "nullable": [], "enum": [], "validation": [], @@ -367,15 +412,24 @@ def __projects_project_id_recovery_plans_recovery_plan_id_get( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"project_id": (str,), "recovery_plan_id": (str,),}, + "openapi_types": { + "project_id": (str,), + "recovery_plan_id": (str,), + }, "attribute_map": { "project_id": "projectId", "recovery_plan_id": "recoveryPlanId", }, - "location_map": {"project_id": "path", "recovery_plan_id": "path",}, + "location_map": { + "project_id": "path", + "recovery_plan_id": "path", + }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__projects_project_id_recovery_plans_recovery_plan_id_get, ) @@ -446,8 +500,16 @@ def __projects_project_id_recovery_plans_recovery_plan_id_patch( "servers": None, }, params_map={ - "all": ["project_id", "recovery_plan_id", "recovery_plan",], - "required": ["project_id", "recovery_plan_id", "recovery_plan",], + "all": [ + "project_id", + "recovery_plan_id", + "recovery_plan", + ], + "required": [ + "project_id", + "recovery_plan_id", + "recovery_plan", + ], "nullable": [], "enum": [], "validation": [], @@ -543,8 +605,14 @@ def __projects_project_id_run_recovery_plan_post( "servers": None, }, params_map={ - "all": ["project_id", "init_recovery_plan_params",], - "required": ["project_id", "init_recovery_plan_params",], + "all": [ + "project_id", + "init_recovery_plan_params", + ], + "required": [ + "project_id", + "init_recovery_plan_params", + ], "nullable": [], "enum": [], "validation": [], @@ -556,7 +624,9 @@ def __projects_project_id_run_recovery_plan_post( "project_id": (str,), "init_recovery_plan_params": (InlineObject10,), }, - "attribute_map": {"project_id": "projectId",}, + "attribute_map": { + "project_id": "projectId", + }, "location_map": { "project_id": "path", "init_recovery_plan_params": "body", diff --git a/cloudendure/api/replication_api.py b/cloudendure/api/replication_api.py index 3957bc1f1..8d046d4e1 100644 --- a/cloudendure/api/replication_api.py +++ b/cloudendure/api/replication_api.py @@ -107,8 +107,14 @@ def __projects_project_id_machines_machine_id_bandwidth_throttling_get( "servers": None, }, params_map={ - "all": ["project_id", "machine_id",], - "required": ["project_id", "machine_id",], + "all": [ + "project_id", + "machine_id", + ], + "required": [ + "project_id", + "machine_id", + ], "nullable": [], "enum": [], "validation": [], @@ -116,15 +122,24 @@ def __projects_project_id_machines_machine_id_bandwidth_throttling_get( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"project_id": (str,), "machine_id": (str,),}, + "openapi_types": { + "project_id": (str,), + "machine_id": (str,), + }, "attribute_map": { "project_id": "projectId", "machine_id": "machineId", }, - "location_map": {"project_id": "path", "machine_id": "path",}, + "location_map": { + "project_id": "path", + "machine_id": "path", + }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__projects_project_id_machines_machine_id_bandwidth_throttling_get, ) @@ -195,8 +210,16 @@ def __projects_project_id_machines_machine_id_bandwidth_throttling_patch( "servers": None, }, params_map={ - "all": ["project_id", "machine_id", "bandwidth_throttling",], - "required": ["project_id", "machine_id", "bandwidth_throttling",], + "all": [ + "project_id", + "machine_id", + "bandwidth_throttling", + ], + "required": [ + "project_id", + "machine_id", + "bandwidth_throttling", + ], "nullable": [], "enum": [], "validation": [], @@ -293,8 +316,14 @@ def __projects_project_id_machines_machine_id_delete( "servers": None, }, params_map={ - "all": ["project_id", "machine_id",], - "required": ["project_id", "machine_id",], + "all": [ + "project_id", + "machine_id", + ], + "required": [ + "project_id", + "machine_id", + ], "nullable": [], "enum": [], "validation": [], @@ -302,15 +331,24 @@ def __projects_project_id_machines_machine_id_delete( root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"project_id": (str,), "machine_id": (str,),}, + "openapi_types": { + "project_id": (str,), + "machine_id": (str,), + }, "attribute_map": { "project_id": "projectId", "machine_id": "machineId", }, - "location_map": {"project_id": "path", "machine_id": "path",}, + "location_map": { + "project_id": "path", + "machine_id": "path", + }, "collection_format_map": {}, }, - headers_map={"accept": [], "content_type": [],}, + headers_map={ + "accept": [], + "content_type": [], + }, api_client=api_client, callable=__projects_project_id_machines_machine_id_delete, ) @@ -382,16 +420,32 @@ def __projects_project_id_machines_machine_id_pointsintime_get( "servers": None, }, params_map={ - "all": ["project_id", "machine_id", "offset", "limit",], - "required": ["project_id", "machine_id",], + "all": [ + "project_id", + "machine_id", + "offset", + "limit", + ], + "required": [ + "project_id", + "machine_id", + ], "nullable": [], "enum": [], - "validation": ["offset", "limit",], + "validation": [ + "offset", + "limit", + ], }, root_map={ "validations": { - ("offset",): {"inclusive_minimum": 0,}, - ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, + ("offset",): { + "inclusive_minimum": 0, + }, + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, }, "allowed_values": {}, "openapi_types": { @@ -414,7 +468,10 @@ def __projects_project_id_machines_machine_id_pointsintime_get( }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__projects_project_id_machines_machine_id_pointsintime_get, ) @@ -484,16 +541,30 @@ def __projects_project_id_replication_configurations_get( "servers": None, }, params_map={ - "all": ["project_id", "offset", "limit",], - "required": ["project_id",], + "all": [ + "project_id", + "offset", + "limit", + ], + "required": [ + "project_id", + ], "nullable": [], "enum": [], - "validation": ["offset", "limit",], + "validation": [ + "offset", + "limit", + ], }, root_map={ "validations": { - ("offset",): {"inclusive_minimum": 0,}, - ("limit",): {"inclusive_maximum": 1500, "inclusive_minimum": 0,}, + ("offset",): { + "inclusive_minimum": 0, + }, + ("limit",): { + "inclusive_maximum": 1500, + "inclusive_minimum": 0, + }, }, "allowed_values": {}, "openapi_types": { @@ -513,7 +584,10 @@ def __projects_project_id_replication_configurations_get( }, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__projects_project_id_replication_configurations_get, ) @@ -583,8 +657,14 @@ def __projects_project_id_replication_configurations_post( "servers": None, }, params_map={ - "all": ["project_id", "replication_configuration",], - "required": ["project_id", "replication_configuration",], + "all": [ + "project_id", + "replication_configuration", + ], + "required": [ + "project_id", + "replication_configuration", + ], "nullable": [], "enum": [], "validation": [], @@ -596,7 +676,9 @@ def __projects_project_id_replication_configurations_post( "project_id": (str,), "replication_configuration": (ReplicationConfiguration,), }, - "attribute_map": {"project_id": "projectId",}, + "attribute_map": { + "project_id": "projectId", + }, "location_map": { "project_id": "path", "replication_configuration": "body", diff --git a/cloudendure/api/user_api.py b/cloudendure/api/user_api.py index 3d7455396..a8c6d7c06 100644 --- a/cloudendure/api/user_api.py +++ b/cloudendure/api/user_api.py @@ -99,8 +99,12 @@ def __change_password_post(self, password_params, **kwargs): "servers": None, }, params_map={ - "all": ["password_params",], - "required": ["password_params",], + "all": [ + "password_params", + ], + "required": [ + "password_params", + ], "nullable": [], "enum": [], "validation": [], @@ -108,9 +112,13 @@ def __change_password_post(self, password_params, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"password_params": (InlineObject,),}, + "openapi_types": { + "password_params": (InlineObject,), + }, "attribute_map": {}, - "location_map": {"password_params": "body",}, + "location_map": { + "password_params": "body", + }, "collection_format_map": {}, }, headers_map={ @@ -193,7 +201,10 @@ def __me_get(self, **kwargs): "location_map": {}, "collection_format_map": {}, }, - headers_map={"accept": ["application/json"], "content_type": [],}, + headers_map={ + "accept": ["application/json"], + "content_type": [], + }, api_client=api_client, callable=__me_get, ) @@ -258,8 +269,12 @@ def __users_user_id_delete(self, user_id, **kwargs): "servers": None, }, params_map={ - "all": ["user_id",], - "required": ["user_id",], + "all": [ + "user_id", + ], + "required": [ + "user_id", + ], "nullable": [], "enum": [], "validation": [], @@ -267,12 +282,21 @@ def __users_user_id_delete(self, user_id, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"user_id": (str,),}, - "attribute_map": {"user_id": "userId",}, - "location_map": {"user_id": "path",}, + "openapi_types": { + "user_id": (str,), + }, + "attribute_map": { + "user_id": "userId", + }, + "location_map": { + "user_id": "path", + }, "collection_format_map": {}, }, - headers_map={"accept": [], "content_type": [],}, + headers_map={ + "accept": [], + "content_type": [], + }, api_client=api_client, callable=__users_user_id_delete, ) @@ -340,8 +364,14 @@ def __users_user_id_patch(self, user_id, user, **kwargs): "servers": None, }, params_map={ - "all": ["user_id", "user",], - "required": ["user_id", "user",], + "all": [ + "user_id", + "user", + ], + "required": [ + "user_id", + "user", + ], "nullable": [], "enum": [], "validation": [], @@ -349,9 +379,17 @@ def __users_user_id_patch(self, user_id, user, **kwargs): root_map={ "validations": {}, "allowed_values": {}, - "openapi_types": {"user_id": (str,), "user": (User,),}, - "attribute_map": {"user_id": "userId",}, - "location_map": {"user_id": "path", "user": "body",}, + "openapi_types": { + "user_id": (str,), + "user": (User,), + }, + "attribute_map": { + "user_id": "userId", + }, + "location_map": { + "user_id": "path", + "user": "body", + }, "collection_format_map": {}, }, headers_map={ diff --git a/cloudendure/api_client.py b/cloudendure/api_client.py index a91d133d5..0d4cca0f8 100644 --- a/cloudendure/api_client.py +++ b/cloudendure/api_client.py @@ -101,7 +101,7 @@ def close(self): @property def pool(self): """Create thread pool on first request - avoids instantiating unused threadpool for blocking clients. + avoids instantiating unused threadpool for blocking clients. """ if self._pool is None: atexit.register(self.close) @@ -857,7 +857,7 @@ def __gather_params(self, kwargs): return params def __call__(self, *args, **kwargs): - """ This method is invoked when endpoints are called + """This method is invoked when endpoints are called Example: api_instance = AccountApi() @@ -880,9 +880,11 @@ def call_with_http_info(self, **kwargs): if kwargs["_host_index"] is None else kwargs["_host_index"] ) - server_variables = self.api_client.configuration.server_operation_variables.get( - self.settings["operation_id"], - self.api_client.configuration.server_variables, + server_variables = ( + self.api_client.configuration.server_operation_variables.get( + self.settings["operation_id"], + self.api_client.configuration.server_variables, + ) ) _host = self.api_client.configuration.get_host_from_settings( index, variables=server_variables, servers=self.settings["servers"] diff --git a/cloudendure/configuration.py b/cloudendure/configuration.py index bcc463b6f..dffcea332 100644 --- a/cloudendure/configuration.py +++ b/cloudendure/configuration.py @@ -81,7 +81,7 @@ class Configuration(object): :param server_operation_variables: Mapping from operation ID to a mapping with string values to replace variables in templated server configuration. The validation of enums is performed for variables with defined enum values before. - :param ssl_ca_cert: str - the path to a file of concatenated CA certificates + :param ssl_ca_cert: str - the path to a file of concatenated CA certificates in PEM format """ @@ -104,8 +104,7 @@ def __init__( server_operation_variables=None, ssl_ca_cert=None, ): - """Constructor - """ + """Constructor""" self._base_path = ( "https://console.cloudendure.com/api/latest" if host is None else host ) diff --git a/cloudendure/exceptions.py b/cloudendure/exceptions.py index 7776ad886..f6ae4d7cf 100644 --- a/cloudendure/exceptions.py +++ b/cloudendure/exceptions.py @@ -14,7 +14,7 @@ class OpenApiException(Exception): class ApiTypeError(OpenApiException, TypeError): def __init__(self, msg, path_to_item=None, valid_classes=None, key_type=None): - """ Raises an exception for TypeErrors + """Raises an exception for TypeErrors Args: msg (str): the exception message diff --git a/cloudendure/model/account.py b/cloudendure/model/account.py index 7a241acf8..f4e2d6920 100644 --- a/cloudendure/model/account.py +++ b/cloudendure/model/account.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -205,7 +205,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/account_ce_admin_properties.py b/cloudendure/model/account_ce_admin_properties.py index b0a5bb40c..1f406e789 100644 --- a/cloudendure/model/account_ce_admin_properties.py +++ b/cloudendure/model/account_ce_admin_properties.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -162,7 +162,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/account_link.py b/cloudendure/model/account_link.py index 903e1784b..e6e81ef47 100644 --- a/cloudendure/model/account_link.py +++ b/cloudendure/model/account_link.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -150,7 +150,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/account_link_list.py b/cloudendure/model/account_link_list.py index c2d03e40d..a32612edd 100644 --- a/cloudendure/model/account_link_list.py +++ b/cloudendure/model/account_link_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -148,7 +148,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/account_request.py b/cloudendure/model/account_request.py index a7343253f..cf2d5d42c 100644 --- a/cloudendure/model/account_request.py +++ b/cloudendure/model/account_request.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -52,7 +52,9 @@ class AccountRequest(ModelNormal): """ allowed_values = { - ("flow",): {"MIGRATION_REGISTER": "MIGRATION_REGISTER",}, + ("flow",): { + "MIGRATION_REGISTER": "MIGRATION_REGISTER", + }, ("request_type",): { "REGISTER": "REGISTER", "RESET_PASSWORD": "RESET_PASSWORD", @@ -168,7 +170,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/account_request_list.py b/cloudendure/model/account_request_list.py index c68ec6302..ae8423ff4 100644 --- a/cloudendure/model/account_request_list.py +++ b/cloudendure/model/account_request_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -148,7 +148,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/accounts_list.py b/cloudendure/model/accounts_list.py index 19ec780ed..5efb0267a 100644 --- a/cloudendure/model/accounts_list.py +++ b/cloudendure/model/accounts_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -148,7 +148,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/agent_next_replication_init_request.py b/cloudendure/model/agent_next_replication_init_request.py index 79fe84ef7..0f0595761 100644 --- a/cloudendure/model/agent_next_replication_init_request.py +++ b/cloudendure/model/agent_next_replication_init_request.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -141,7 +141,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/all_project_features.py b/cloudendure/model/all_project_features.py index 67863375a..3ebcad5ae 100644 --- a/cloudendure/model/all_project_features.py +++ b/cloudendure/model/all_project_features.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -268,7 +268,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/audit_log.py b/cloudendure/model/audit_log.py index 480d65914..98a9d0c0a 100644 --- a/cloudendure/model/audit_log.py +++ b/cloudendure/model/audit_log.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -151,7 +151,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/audit_log_changed_field.py b/cloudendure/model/audit_log_changed_field.py index 78e562c92..9c32b4c85 100644 --- a/cloudendure/model/audit_log_changed_field.py +++ b/cloudendure/model/audit_log_changed_field.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -147,7 +147,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/audit_log_entry.py b/cloudendure/model/audit_log_entry.py index cea01480a..6e956851c 100644 --- a/cloudendure/model/audit_log_entry.py +++ b/cloudendure/model/audit_log_entry.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -172,7 +172,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/audit_log_entry_participating_machines.py b/cloudendure/model/audit_log_entry_participating_machines.py index 2915b0359..312e13e82 100644 --- a/cloudendure/model/audit_log_entry_participating_machines.py +++ b/cloudendure/model/audit_log_entry_participating_machines.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -147,7 +147,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/bandwidth_throttling.py b/cloudendure/model/bandwidth_throttling.py index 3b8d97831..9f15d11a6 100644 --- a/cloudendure/model/bandwidth_throttling.py +++ b/cloudendure/model/bandwidth_throttling.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -141,7 +141,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/blueprint.py b/cloudendure/model/blueprint.py index 10f08fd9e..1b749d8fd 100644 --- a/cloudendure/model/blueprint.py +++ b/cloudendure/model/blueprint.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -69,8 +69,14 @@ class Blueprint(ModelNormal): "DONT_ALLOCATE": "DONT_ALLOCATE", "AS_SUBNET": "AS_SUBNET", }, - ("security_group_action",): {"FROM_POLICY": "FROM_POLICY",}, - ("tenancy",): {"SHARED": "SHARED", "DEDICATED": "DEDICATED", "HOST": "HOST",}, + ("security_group_action",): { + "FROM_POLICY": "FROM_POLICY", + }, + ("tenancy",): { + "SHARED": "SHARED", + "DEDICATED": "DEDICATED", + "HOST": "HOST", + }, ("private_ip_action",): { "CREATE_NEW": "CREATE_NEW", "COPY_ORIGIN": "COPY_ORIGIN", @@ -276,7 +282,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/blueprint_disks.py b/cloudendure/model/blueprint_disks.py index 53b1b91e9..a09c9a24b 100644 --- a/cloudendure/model/blueprint_disks.py +++ b/cloudendure/model/blueprint_disks.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -65,8 +65,12 @@ class BlueprintDisks(ModelNormal): } validations = { - ("iops",): {"inclusive_minimum": 0,}, - ("throughput",): {"inclusive_minimum": 0,}, + ("iops",): { + "inclusive_minimum": 0, + }, + ("throughput",): { + "inclusive_minimum": 0, + }, } additional_properties_type = None @@ -164,7 +168,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/blueprint_list.py b/cloudendure/model/blueprint_list.py index c172f72a9..774793154 100644 --- a/cloudendure/model/blueprint_list.py +++ b/cloudendure/model/blueprint_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -148,7 +148,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/cloud.py b/cloudendure/model/cloud.py index bfbea7f4a..e2d872a96 100644 --- a/cloudendure/model/cloud.py +++ b/cloudendure/model/cloud.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -163,7 +163,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/cloud_credentials.py b/cloudendure/model/cloud_credentials.py index 70e051494..7056d3c42 100644 --- a/cloudendure/model/cloud_credentials.py +++ b/cloudendure/model/cloud_credentials.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -153,7 +153,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/cloud_credentials_list.py b/cloudendure/model/cloud_credentials_list.py index 8c0c7df12..72580a717 100644 --- a/cloudendure/model/cloud_credentials_list.py +++ b/cloudendure/model/cloud_credentials_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -148,7 +148,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/cloud_credentials_request.py b/cloudendure/model/cloud_credentials_request.py index 3842ca5d8..6383c6cc3 100644 --- a/cloudendure/model/cloud_credentials_request.py +++ b/cloudendure/model/cloud_credentials_request.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -164,7 +164,10 @@ def __init__(self, cloud_id, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/clouds_list.py b/cloudendure/model/clouds_list.py index 326d35cf6..622a58bc7 100644 --- a/cloudendure/model/clouds_list.py +++ b/cloudendure/model/clouds_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -148,7 +148,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/compute_location.py b/cloudendure/model/compute_location.py index e74b8556d..f39898187 100644 --- a/cloudendure/model/compute_location.py +++ b/cloudendure/model/compute_location.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -147,7 +147,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/configurations.py b/cloudendure/model/configurations.py index 310a6e887..89b687eff 100644 --- a/cloudendure/model/configurations.py +++ b/cloudendure/model/configurations.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -144,7 +144,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/configurations_list.py b/cloudendure/model/configurations_list.py index 654738dce..e37603e97 100644 --- a/cloudendure/model/configurations_list.py +++ b/cloudendure/model/configurations_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -148,7 +148,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/cslp_item.py b/cloudendure/model/cslp_item.py index 5aa2b3687..155b60f04 100644 --- a/cloudendure/model/cslp_item.py +++ b/cloudendure/model/cslp_item.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -159,7 +159,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/cslp_request.py b/cloudendure/model/cslp_request.py index 21484c81f..0c343dc62 100644 --- a/cloudendure/model/cslp_request.py +++ b/cloudendure/model/cslp_request.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -160,7 +160,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/cslp_result.py b/cloudendure/model/cslp_result.py index d93081ec4..388ac4d9a 100644 --- a/cloudendure/model/cslp_result.py +++ b/cloudendure/model/cslp_result.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -58,7 +58,11 @@ class CSLPResult(ModelNormal): """ allowed_values = { - ("error_level",): {"INFO": "INFO", "WARNING": "WARNING", "ERROR": "ERROR",}, + ("error_level",): { + "INFO": "INFO", + "WARNING": "WARNING", + "ERROR": "ERROR", + }, } validations = {} @@ -156,7 +160,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/disk_config.py b/cloudendure/model/disk_config.py index 5ec9cb67c..44f52520d 100644 --- a/cloudendure/model/disk_config.py +++ b/cloudendure/model/disk_config.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -65,8 +65,12 @@ class DiskConfig(ModelNormal): } validations = { - ("iops",): {"inclusive_minimum": 0,}, - ("throughput",): {"inclusive_minimum": 0,}, + ("iops",): { + "inclusive_minimum": 0, + }, + ("throughput",): { + "inclusive_minimum": 0, + }, } additional_properties_type = None @@ -169,7 +173,10 @@ def __init__(self, type, name, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/dynamic_configuration.py b/cloudendure/model/dynamic_configuration.py index 445ebe831..3a8fd859e 100644 --- a/cloudendure/model/dynamic_configuration.py +++ b/cloudendure/model/dynamic_configuration.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -141,7 +141,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/error.py b/cloudendure/model/error.py index a6d108a81..5359c2718 100644 --- a/cloudendure/model/error.py +++ b/cloudendure/model/error.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -144,7 +144,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/extended_account_info.py b/cloudendure/model/extended_account_info.py index bcc49d2e3..c2066529c 100644 --- a/cloudendure/model/extended_account_info.py +++ b/cloudendure/model/extended_account_info.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -186,7 +186,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/gcp_machines_finance_data.py b/cloudendure/model/gcp_machines_finance_data.py index dbb9d76a0..acc2d6bc7 100644 --- a/cloudendure/model/gcp_machines_finance_data.py +++ b/cloudendure/model/gcp_machines_finance_data.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -162,7 +162,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/identity_provider_redirect_response.py b/cloudendure/model/identity_provider_redirect_response.py index c76998353..9dba3fdac 100644 --- a/cloudendure/model/identity_provider_redirect_response.py +++ b/cloudendure/model/identity_provider_redirect_response.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -141,7 +141,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/initialization_step.py b/cloudendure/model/initialization_step.py index c8dfcab03..eb0c48bff 100644 --- a/cloudendure/model/initialization_step.py +++ b/cloudendure/model/initialization_step.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -180,7 +180,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_object.py b/cloudendure/model/inline_object.py index 026feda8d..af4f58882 100644 --- a/cloudendure/model/inline_object.py +++ b/cloudendure/model/inline_object.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -146,7 +146,10 @@ def __init__(self, new_password, old_password, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_object1.py b/cloudendure/model/inline_object1.py index e9469b937..be1eb47b9 100644 --- a/cloudendure/model/inline_object1.py +++ b/cloudendure/model/inline_object1.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -159,7 +159,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_object10.py b/cloudendure/model/inline_object10.py index d9bcb8b50..319511af0 100644 --- a/cloudendure/model/inline_object10.py +++ b/cloudendure/model/inline_object10.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -156,7 +156,10 @@ def __init__(self, recovery_plan_id, execution_mode, *args, **kwargs): # noqa: if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_object2.py b/cloudendure/model/inline_object2.py index 7127d60cf..85d23d2f9 100644 --- a/cloudendure/model/inline_object2.py +++ b/cloudendure/model/inline_object2.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -144,7 +144,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_object3.py b/cloudendure/model/inline_object3.py index f68de6167..e96302a0d 100644 --- a/cloudendure/model/inline_object3.py +++ b/cloudendure/model/inline_object3.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -141,7 +141,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_object4.py b/cloudendure/model/inline_object4.py index dda626593..7e7a25432 100644 --- a/cloudendure/model/inline_object4.py +++ b/cloudendure/model/inline_object4.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -144,7 +144,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_object5.py b/cloudendure/model/inline_object5.py index 27b631b98..c3fd2d9bb 100644 --- a/cloudendure/model/inline_object5.py +++ b/cloudendure/model/inline_object5.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -141,7 +141,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_object6.py b/cloudendure/model/inline_object6.py index 8d9540d1f..811436c57 100644 --- a/cloudendure/model/inline_object6.py +++ b/cloudendure/model/inline_object6.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -143,7 +143,10 @@ def __init__(self, username, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_object7.py b/cloudendure/model/inline_object7.py index 5064906b2..8f3bd6623 100644 --- a/cloudendure/model/inline_object7.py +++ b/cloudendure/model/inline_object7.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -144,7 +144,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_object8.py b/cloudendure/model/inline_object8.py index 691fea821..101d4f08c 100644 --- a/cloudendure/model/inline_object8.py +++ b/cloudendure/model/inline_object8.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -141,7 +141,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_object9.py b/cloudendure/model/inline_object9.py index 01424283c..a4ed9a695 100644 --- a/cloudendure/model/inline_object9.py +++ b/cloudendure/model/inline_object9.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -141,7 +141,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_response200.py b/cloudendure/model/inline_response200.py index b0ddfa127..1a2a9418f 100644 --- a/cloudendure/model/inline_response200.py +++ b/cloudendure/model/inline_response200.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -141,7 +141,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_response2001.py b/cloudendure/model/inline_response2001.py index d63ec918a..7794cb132 100644 --- a/cloudendure/model/inline_response2001.py +++ b/cloudendure/model/inline_response2001.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -141,7 +141,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/inline_response2002.py b/cloudendure/model/inline_response2002.py index c2dca04d7..07dd03ca7 100644 --- a/cloudendure/model/inline_response2002.py +++ b/cloudendure/model/inline_response2002.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -141,7 +141,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/job.py b/cloudendure/model/job.py index 22b0b30ee..747eb42fe 100644 --- a/cloudendure/model/job.py +++ b/cloudendure/model/job.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -193,7 +193,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/job_log.py b/cloudendure/model/job_log.py index 66cfded0c..9c73bdbac 100644 --- a/cloudendure/model/job_log.py +++ b/cloudendure/model/job_log.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -144,7 +144,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/job_target_machine.py b/cloudendure/model/job_target_machine.py index 6b6256674..33724475f 100644 --- a/cloudendure/model/job_target_machine.py +++ b/cloudendure/model/job_target_machine.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -153,7 +153,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/jobs_list.py b/cloudendure/model/jobs_list.py index 668016e32..e4fe8b419 100644 --- a/cloudendure/model/jobs_list.py +++ b/cloudendure/model/jobs_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -148,7 +148,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/key_value_list.py b/cloudendure/model/key_value_list.py index 21d567eff..5681145ce 100644 --- a/cloudendure/model/key_value_list.py +++ b/cloudendure/model/key_value_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -152,7 +152,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/launch_machines_parameters.py b/cloudendure/model/launch_machines_parameters.py index 31d53bcfe..bafdf9ca3 100644 --- a/cloudendure/model/launch_machines_parameters.py +++ b/cloudendure/model/launch_machines_parameters.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -169,7 +169,10 @@ def __init__(self, launch_type, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/launch_machines_parameters_debug_scripts.py b/cloudendure/model/launch_machines_parameters_debug_scripts.py index 29aa03f75..65c9b96b0 100644 --- a/cloudendure/model/launch_machines_parameters_debug_scripts.py +++ b/cloudendure/model/launch_machines_parameters_debug_scripts.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -144,7 +144,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/license.py b/cloudendure/model/license.py index a58c204ac..6bb4fafb6 100644 --- a/cloudendure/model/license.py +++ b/cloudendure/model/license.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -69,8 +69,12 @@ class License(ModelNormal): } validations = { - ("count",): {"inclusive_minimum": 0,}, - ("used",): {"inclusive_minimum": 0,}, + ("count",): { + "inclusive_minimum": 0, + }, + ("used",): { + "inclusive_minimum": 0, + }, } additional_properties_type = None @@ -181,7 +185,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/license_ce_admin_properties.py b/cloudendure/model/license_ce_admin_properties.py index 5c6c7ed27..ad8203bbe 100644 --- a/cloudendure/model/license_ce_admin_properties.py +++ b/cloudendure/model/license_ce_admin_properties.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -150,7 +150,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/license_features.py b/cloudendure/model/license_features.py index c6df17530..cc19ea3d9 100644 --- a/cloudendure/model/license_features.py +++ b/cloudendure/model/license_features.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -144,7 +144,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/license_list.py b/cloudendure/model/license_list.py index 2733e05f4..67a6c4dbe 100644 --- a/cloudendure/model/license_list.py +++ b/cloudendure/model/license_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -148,7 +148,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/list_users_result.py b/cloudendure/model/list_users_result.py index 37c74dd68..0a5767ea7 100644 --- a/cloudendure/model/list_users_result.py +++ b/cloudendure/model/list_users_result.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -153,7 +153,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/list_users_results.py b/cloudendure/model/list_users_results.py index 3ad4c6d9c..635d4fb62 100644 --- a/cloudendure/model/list_users_results.py +++ b/cloudendure/model/list_users_results.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -148,7 +148,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/logical_location.py b/cloudendure/model/logical_location.py index ea361e633..62cbb4468 100644 --- a/cloudendure/model/logical_location.py +++ b/cloudendure/model/logical_location.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -144,7 +144,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine.py b/cloudendure/model/machine.py index af6202b37..7bbcc7f58 100644 --- a/cloudendure/model/machine.py +++ b/cloudendure/model/machine.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -204,7 +204,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_and_path_and_point_in_time.py b/cloudendure/model/machine_and_path_and_point_in_time.py index 92958f81a..b0f0b137e 100644 --- a/cloudendure/model/machine_and_path_and_point_in_time.py +++ b/cloudendure/model/machine_and_path_and_point_in_time.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -149,7 +149,10 @@ def __init__(self, machine_id, file_path, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_and_point_in_time.py b/cloudendure/model/machine_and_point_in_time.py index 27fc4f799..1c54ff6ff 100644 --- a/cloudendure/model/machine_and_point_in_time.py +++ b/cloudendure/model/machine_and_point_in_time.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -146,7 +146,10 @@ def __init__(self, machine_id, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_license.py b/cloudendure/model/machine_license.py index 3e9b027e8..844a72ca8 100644 --- a/cloudendure/model/machine_license.py +++ b/cloudendure/model/machine_license.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -144,7 +144,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_life_cycle.py b/cloudendure/model/machine_life_cycle.py index a756b8d83..ea4f4544f 100644 --- a/cloudendure/model/machine_life_cycle.py +++ b/cloudendure/model/machine_life_cycle.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -168,7 +168,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_replication_configuration.py b/cloudendure/model/machine_replication_configuration.py index 4ed85ae56..418a2d3d7 100644 --- a/cloudendure/model/machine_replication_configuration.py +++ b/cloudendure/model/machine_replication_configuration.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -250,7 +250,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_replication_info.py b/cloudendure/model/machine_replication_info.py index 2f0ffa201..7772f7552 100644 --- a/cloudendure/model/machine_replication_info.py +++ b/cloudendure/model/machine_replication_info.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -181,7 +181,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_replication_info_initiation_states.py b/cloudendure/model/machine_replication_info_initiation_states.py index d5136cd96..5745c38fb 100644 --- a/cloudendure/model/machine_replication_info_initiation_states.py +++ b/cloudendure/model/machine_replication_info_initiation_states.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -155,7 +155,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_replication_info_initiation_states_items.py b/cloudendure/model/machine_replication_info_initiation_states_items.py index b08495b4d..513f65cc8 100644 --- a/cloudendure/model/machine_replication_info_initiation_states_items.py +++ b/cloudendure/model/machine_replication_info_initiation_states_items.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -151,7 +151,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_snapshot_credits.py b/cloudendure/model/machine_snapshot_credits.py index e88b2039b..9f95e6b80 100644 --- a/cloudendure/model/machine_snapshot_credits.py +++ b/cloudendure/model/machine_snapshot_credits.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -141,7 +141,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_source_properties.py b/cloudendure/model/machine_source_properties.py index 23b8219ea..3ce3c5592 100644 --- a/cloudendure/model/machine_source_properties.py +++ b/cloudendure/model/machine_source_properties.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -195,7 +195,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_source_properties_cpu.py b/cloudendure/model/machine_source_properties_cpu.py index 5cc2fc550..05d704485 100644 --- a/cloudendure/model/machine_source_properties_cpu.py +++ b/cloudendure/model/machine_source_properties_cpu.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -144,7 +144,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_source_properties_disks.py b/cloudendure/model/machine_source_properties_disks.py index 6b5d7aede..59ae4b06d 100644 --- a/cloudendure/model/machine_source_properties_disks.py +++ b/cloudendure/model/machine_source_properties_disks.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -149,7 +149,10 @@ def __init__(self, is_protected, name, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_source_properties_installed_applications.py b/cloudendure/model/machine_source_properties_installed_applications.py index a33b92011..c3104d011 100644 --- a/cloudendure/model/machine_source_properties_installed_applications.py +++ b/cloudendure/model/machine_source_properties_installed_applications.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -157,7 +157,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_source_properties_installed_applications_items.py b/cloudendure/model/machine_source_properties_installed_applications_items.py index 4578d80a3..723971554 100644 --- a/cloudendure/model/machine_source_properties_installed_applications_items.py +++ b/cloudendure/model/machine_source_properties_installed_applications_items.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -141,7 +141,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_source_properties_running_services.py b/cloudendure/model/machine_source_properties_running_services.py index eb449caaf..3e1e43be1 100644 --- a/cloudendure/model/machine_source_properties_running_services.py +++ b/cloudendure/model/machine_source_properties_running_services.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -155,7 +155,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_source_properties_running_services_items.py b/cloudendure/model/machine_source_properties_running_services_items.py index 56c03a2a6..b1d756698 100644 --- a/cloudendure/model/machine_source_properties_running_services_items.py +++ b/cloudendure/model/machine_source_properties_running_services_items.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -141,7 +141,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machine_throttle_time_seconds.py b/cloudendure/model/machine_throttle_time_seconds.py index 0ce4c69a7..1f71d6540 100644 --- a/cloudendure/model/machine_throttle_time_seconds.py +++ b/cloudendure/model/machine_throttle_time_seconds.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -141,7 +141,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machines_list.py b/cloudendure/model/machines_list.py index df15b4245..a23c98577 100644 --- a/cloudendure/model/machines_list.py +++ b/cloudendure/model/machines_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -148,7 +148,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/machines_list_invalid_ids_and_job.py b/cloudendure/model/machines_list_invalid_ids_and_job.py index 7b9319b56..5ac2cb6ad 100644 --- a/cloudendure/model/machines_list_invalid_ids_and_job.py +++ b/cloudendure/model/machines_list_invalid_ids_and_job.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -156,7 +156,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/network_interface.py b/cloudendure/model/network_interface.py index a20b308f6..90e9a16a0 100644 --- a/cloudendure/model/network_interface.py +++ b/cloudendure/model/network_interface.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -147,7 +147,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/outpost.py b/cloudendure/model/outpost.py index bc683d6a2..33e4b7644 100644 --- a/cloudendure/model/outpost.py +++ b/cloudendure/model/outpost.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -147,7 +147,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/point_in_time.py b/cloudendure/model/point_in_time.py index e84ebe431..e79db2909 100644 --- a/cloudendure/model/point_in_time.py +++ b/cloudendure/model/point_in_time.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -144,7 +144,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/point_in_time_list.py b/cloudendure/model/point_in_time_list.py index 5f3861830..4748a80aa 100644 --- a/cloudendure/model/point_in_time_list.py +++ b/cloudendure/model/point_in_time_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -148,7 +148,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/populate_job_names.py b/cloudendure/model/populate_job_names.py index 5ecd3d595..2ef5ff03e 100644 --- a/cloudendure/model/populate_job_names.py +++ b/cloudendure/model/populate_job_names.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -141,7 +141,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/populate_job_params.py b/cloudendure/model/populate_job_params.py index dee6fb016..7fd575acd 100644 --- a/cloudendure/model/populate_job_params.py +++ b/cloudendure/model/populate_job_params.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -146,7 +146,10 @@ def __init__(self, job_name, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/project.py b/cloudendure/model/project.py index 48b4524a7..06e352346 100644 --- a/cloudendure/model/project.py +++ b/cloudendure/model/project.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -60,7 +60,11 @@ class Project(ModelNormal): """ allowed_values = { - ("type",): {"MIGRATION": "MIGRATION", "DR": "DR", "BACKUP": "BACKUP",}, + ("type",): { + "MIGRATION": "MIGRATION", + "DR": "DR", + "BACKUP": "BACKUP", + }, } validations = {} @@ -197,7 +201,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/project_ce_admin_properties.py b/cloudendure/model/project_ce_admin_properties.py index 232d3640d..a02cc6541 100644 --- a/cloudendure/model/project_ce_admin_properties.py +++ b/cloudendure/model/project_ce_admin_properties.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -144,7 +144,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/project_features.py b/cloudendure/model/project_features.py index 4871100d5..b72d94b46 100644 --- a/cloudendure/model/project_features.py +++ b/cloudendure/model/project_features.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -165,7 +165,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/project_storage.py b/cloudendure/model/project_storage.py index 2165281cf..e3e360d72 100644 --- a/cloudendure/model/project_storage.py +++ b/cloudendure/model/project_storage.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -162,7 +162,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/project_storage_working_storage.py b/cloudendure/model/project_storage_working_storage.py index 09a5454b7..be757bf86 100644 --- a/cloudendure/model/project_storage_working_storage.py +++ b/cloudendure/model/project_storage_working_storage.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -144,7 +144,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/projects_and_users.py b/cloudendure/model/projects_and_users.py index 1442384a7..676335cc6 100644 --- a/cloudendure/model/projects_and_users.py +++ b/cloudendure/model/projects_and_users.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -148,7 +148,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/projects_and_users_items.py b/cloudendure/model/projects_and_users_items.py index ff6b15693..3d703b8b6 100644 --- a/cloudendure/model/projects_and_users_items.py +++ b/cloudendure/model/projects_and_users_items.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -144,7 +144,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/projects_list.py b/cloudendure/model/projects_list.py index 1f818a5d5..71be4a11d 100644 --- a/cloudendure/model/projects_list.py +++ b/cloudendure/model/projects_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -148,7 +148,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/recovery_plan.py b/cloudendure/model/recovery_plan.py index 2ff7b213f..6bd2674b9 100644 --- a/cloudendure/model/recovery_plan.py +++ b/cloudendure/model/recovery_plan.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -154,7 +154,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/recovery_plan_list.py b/cloudendure/model/recovery_plan_list.py index 6e789075d..819b35729 100644 --- a/cloudendure/model/recovery_plan_list.py +++ b/cloudendure/model/recovery_plan_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -148,7 +148,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/recovery_plan_step.py b/cloudendure/model/recovery_plan_step.py index 553e8ebca..7b8d3947e 100644 --- a/cloudendure/model/recovery_plan_step.py +++ b/cloudendure/model/recovery_plan_step.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -147,7 +147,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/recovery_plan_steps.py b/cloudendure/model/recovery_plan_steps.py index feefc6ec7..34f5e9cb6 100644 --- a/cloudendure/model/recovery_plan_steps.py +++ b/cloudendure/model/recovery_plan_steps.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -148,7 +148,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/region.py b/cloudendure/model/region.py index 7ecf39386..8d3cd43f2 100644 --- a/cloudendure/model/region.py +++ b/cloudendure/model/region.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -223,7 +223,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/regions_list.py b/cloudendure/model/regions_list.py index 62d0ead70..2a8c4b26f 100644 --- a/cloudendure/model/regions_list.py +++ b/cloudendure/model/regions_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -148,7 +148,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/replica.py b/cloudendure/model/replica.py index 87307f5e0..3269c6548 100644 --- a/cloudendure/model/replica.py +++ b/cloudendure/model/replica.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -171,7 +171,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/replication_configuration.py b/cloudendure/model/replication_configuration.py index 0b0efbb14..f60d84ef7 100644 --- a/cloudendure/model/replication_configuration.py +++ b/cloudendure/model/replication_configuration.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -248,7 +248,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/replication_configuration_list.py b/cloudendure/model/replication_configuration_list.py index 65d922d84..89dd49d12 100644 --- a/cloudendure/model/replication_configuration_list.py +++ b/cloudendure/model/replication_configuration_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -148,7 +148,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/replication_configuration_replication_tags.py b/cloudendure/model/replication_configuration_replication_tags.py index fcb8957ce..6209e7fe8 100644 --- a/cloudendure/model/replication_configuration_replication_tags.py +++ b/cloudendure/model/replication_configuration_replication_tags.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -144,7 +144,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/saml_settings.py b/cloudendure/model/saml_settings.py index b85602d16..0fb2cff0a 100644 --- a/cloudendure/model/saml_settings.py +++ b/cloudendure/model/saml_settings.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -147,7 +147,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/security_group.py b/cloudendure/model/security_group.py index 090dd450e..20dca8d45 100644 --- a/cloudendure/model/security_group.py +++ b/cloudendure/model/security_group.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -147,7 +147,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/storage_location.py b/cloudendure/model/storage_location.py index 3a07e4103..067995514 100644 --- a/cloudendure/model/storage_location.py +++ b/cloudendure/model/storage_location.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -144,7 +144,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/subnet.py b/cloudendure/model/subnet.py index 83b388eb0..b42e39040 100644 --- a/cloudendure/model/subnet.py +++ b/cloudendure/model/subnet.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -150,7 +150,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/time.py b/cloudendure/model/time.py index 79c9cf7e4..af356c216 100644 --- a/cloudendure/model/time.py +++ b/cloudendure/model/time.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -141,7 +141,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/updateable_scripts.py b/cloudendure/model/updateable_scripts.py index ee9698d46..bdc7172c7 100644 --- a/cloudendure/model/updateable_scripts.py +++ b/cloudendure/model/updateable_scripts.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -151,7 +151,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/updateable_scripts_result.py b/cloudendure/model/updateable_scripts_result.py index b36230583..c11ddc8e7 100644 --- a/cloudendure/model/updateable_scripts_result.py +++ b/cloudendure/model/updateable_scripts_result.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -196,7 +196,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/updateable_scripts_result_on_premise_volumes.py b/cloudendure/model/updateable_scripts_result_on_premise_volumes.py index 8d3610eea..b2fcdc524 100644 --- a/cloudendure/model/updateable_scripts_result_on_premise_volumes.py +++ b/cloudendure/model/updateable_scripts_result_on_premise_volumes.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -147,7 +147,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/upgrade_counter_delay.py b/cloudendure/model/upgrade_counter_delay.py index f818b22dc..2d601b8e7 100644 --- a/cloudendure/model/upgrade_counter_delay.py +++ b/cloudendure/model/upgrade_counter_delay.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -141,7 +141,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/usage.py b/cloudendure/model/usage.py index b9d547bd5..2047d6a81 100644 --- a/cloudendure/model/usage.py +++ b/cloudendure/model/usage.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -150,7 +150,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/usage_list.py b/cloudendure/model/usage_list.py index 022cd028f..d5288f24d 100644 --- a/cloudendure/model/usage_list.py +++ b/cloudendure/model/usage_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -148,7 +148,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/user.py b/cloudendure/model/user.py index a750deac9..3c1cdfef0 100644 --- a/cloudendure/model/user.py +++ b/cloudendure/model/user.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -188,7 +188,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/user_report.py b/cloudendure/model/user_report.py index 48e380c62..6b362436f 100644 --- a/cloudendure/model/user_report.py +++ b/cloudendure/model/user_report.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -179,7 +179,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/user_report_gcp_machines_finance_data.py b/cloudendure/model/user_report_gcp_machines_finance_data.py index 8f0eed1a0..0833490ef 100644 --- a/cloudendure/model/user_report_gcp_machines_finance_data.py +++ b/cloudendure/model/user_report_gcp_machines_finance_data.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -148,7 +148,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/user_reports.py b/cloudendure/model/user_reports.py index 29e47daf4..d7e73b105 100644 --- a/cloudendure/model/user_reports.py +++ b/cloudendure/model/user_reports.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -148,7 +148,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/user_settings.py b/cloudendure/model/user_settings.py index c615d8f42..50b8a3b23 100644 --- a/cloudendure/model/user_settings.py +++ b/cloudendure/model/user_settings.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -150,7 +150,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/user_settings_send_notifications.py b/cloudendure/model/user_settings_send_notifications.py index 4545238fd..08aaa29cc 100644 --- a/cloudendure/model/user_settings_send_notifications.py +++ b/cloudendure/model/user_settings_send_notifications.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -144,7 +144,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/users_and_roles.py b/cloudendure/model/users_and_roles.py index 85660899a..7ba11db59 100644 --- a/cloudendure/model/users_and_roles.py +++ b/cloudendure/model/users_and_roles.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -148,7 +148,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/users_and_roles_items.py b/cloudendure/model/users_and_roles_items.py index 9b906006f..c6052b72e 100644 --- a/cloudendure/model/users_and_roles_items.py +++ b/cloudendure/model/users_and_roles_items.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -151,7 +151,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model/users_list.py b/cloudendure/model/users_list.py index 2920c0651..28d32d83c 100644 --- a/cloudendure/model/users_list.py +++ b/cloudendure/model/users_list.py @@ -11,9 +11,9 @@ import re # noqa: F401 import sys # noqa: F401 +from cloudendure.model_utils import ModelComposed # noqa: F401 from cloudendure.model_utils import ( ApiTypeError, - ModelComposed, # noqa: F401 ModelNormal, ModelSimple, cached_property, @@ -148,7 +148,10 @@ def __init__(self, *args, **kwargs): # noqa: E501 if args: raise ApiTypeError( "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." - % (args, self.__class__.__name__,), + % ( + args, + self.__class__.__name__, + ), path_to_item=_path_to_item, valid_classes=(self.__class__,), ) diff --git a/cloudendure/model_utils.py b/cloudendure/model_utils.py index c36ce1e43..342efdabf 100644 --- a/cloudendure/model_utils.py +++ b/cloudendure/model_utils.py @@ -1573,15 +1573,17 @@ def type_error_message( msg = ( "Invalid type for variable '{0}'. Required {1} type {2} and " "passed type was {3}".format( - var_name, key_or_value, valid_classes_phrase, type(var_value).__name__, + var_name, + key_or_value, + valid_classes_phrase, + type(var_value).__name__, ) ) return msg def get_valid_classes_phrase(input_classes): - """Returns a string phrase describing what types are allowed - """ + """Returns a string phrase describing what types are allowed""" all_classes = list(input_classes) all_classes = sorted(all_classes, key=lambda cls: cls.__name__) all_class_names = [cls.__name__ for cls in all_classes] diff --git a/poetry.lock b/poetry.lock index 76b666c4b..4c75c1107 100644 --- a/poetry.lock +++ b/poetry.lock @@ -95,16 +95,17 @@ python-versions = "*" [[package]] name = "isort" -version = "5.8.0" +version = "5.9.2" description = "A Python utility / library to sort Python imports." category = "dev" optional = false -python-versions = ">=3.6,<4.0" +python-versions = ">=3.6.1,<4.0" [package.extras] pipfile_deprecated_finder = ["pipreqs", "requirementslib"] requirements_deprecated_finder = ["pipreqs", "pip-api"] colors = ["colorama (>=0.4.3,<0.5.0)"] +plugins = ["setuptools"] [[package]] name = "mypy-extensions" @@ -413,8 +414,8 @@ iniconfig = [ {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] isort = [ - {file = "isort-5.8.0-py3-none-any.whl", hash = "sha256:2bb1680aad211e3c9944dbce1d4ba09a989f04e238296c87fe2139faa26d655d"}, - {file = "isort-5.8.0.tar.gz", hash = "sha256:0a943902919f65c5684ac4e0154b1ad4fac6dcaa5d9f3426b732f1c8b5419be6"}, + {file = "isort-5.9.2-py3-none-any.whl", hash = "sha256:eed17b53c3e7912425579853d078a0832820f023191561fcee9d7cae424e0813"}, + {file = "isort-5.9.2.tar.gz", hash = "sha256:f65ce5bd4cbc6abdfbe29afc2f0245538ab358c14590912df638033f157d555e"}, ] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, From 476d1d6eb7387a1beae5f1962fa2fbd60a412187 Mon Sep 17 00:00:00 2001 From: Craig Monson Date: Wed, 14 Jul 2021 13:52:29 -0400 Subject: [PATCH 7/8] Fixing up gh actions --- .github/workflows/gh-pages.yml | 33 +++++---------------- .github/workflows/pypi-publish.yml | 46 +++++++++++++----------------- Makefile | 8 +++++- 3 files changed, 34 insertions(+), 53 deletions(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index d8ad06573..b792a2051 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -6,31 +6,12 @@ on: - master jobs: - build-deploy: + deploy-docs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 - - name: Set up Python - uses: actions/setup-python@v1 - if: github.event.deleted == false - with: - python-version: '3.8' - architecture: 'x64' - - name: Install dependencies - if: success() - run: | - python -m pip install --upgrade pip - curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python - source $HOME/.poetry/env - poetry export -f requirements.txt -o requirements.txt --dev - pip install -r requirements.txt - - name: Build with MkDocs - if: success() - run: pydocmd build - - name: Deploy to GitHub Pages - uses: docker://peaceiris/gh-pages:latest - if: success() - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} - PUBLISH_BRANCH: gh-pages - PUBLISH_DIR: ./_build/site + - uses: actions/checkout@v2 + - uses: peaceiris/actions-gh-pages@v3 + if: github.ref == 'refs/heads/main' + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: . diff --git a/.github/workflows/pypi-publish.yml b/.github/workflows/pypi-publish.yml index 87092933a..4e819d2e0 100644 --- a/.github/workflows/pypi-publish.yml +++ b/.github/workflows/pypi-publish.yml @@ -1,32 +1,26 @@ -name: PyPi Publish - on: push: - branches: - - master - + tags: + - * jobs: - build-deploy: + build: runs-on: ubuntu-latest + strategy: + max-parallel: 4 + matrix: + python-version: ['3.8'] + poetry-version: ['1.1.7'] steps: - - uses: actions/checkout@v1 - - name: Set up Python - uses: actions/setup-python@v1 - if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 with: - python-version: '3.8' - architecture: 'x64' - - name: Install dependencies - if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') - run: | - python -m pip install --upgrade pip - curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python - source $HOME/.poetry/env - poetry export -f requirements.txt -o requirements.txt --dev - pip install -r requirements.txt - - name: Build and publish the pypi package - if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') - run: python3 setup.py upload - env: - TWINE_USER: __token__ - TWINE_PASS: ${{ secrets.pypi_token }} + python-version: ${{ matrix.python-version }} + architecture: x64 + - name: Run image + uses: abatilo/actions-poetry@v2.0.0 + with: + poetry-version: ${{ matrix.poetry-version }} + - name: Get dependencies + run: poetry install + - name: publish + run: make publish PYPI_TOKEN="${{ secrets.PYPI_TOKEN }}" diff --git a/Makefile b/Makefile index ffac52f4d..6d5860d1c 100644 --- a/Makefile +++ b/Makefile @@ -80,10 +80,16 @@ clean-api: ## get rid of unnecessary files build: ## build the packages poetry build +.PHONY: publish +publish: build ## build and publish to pypi using the $PYPI_TOKEN for authentication + poetry publish --username "__token__" --password "$(PYPI_TOKEN)" --dry-run + .PHONY: tag tag: ## tag this repo with $TAG (and mark the pyproject version as the same) + git checkout main + git pull poetry version $(TAG) git commit -am "Bumping version to $(TAG)" git push - git tag -a $(TAG) -m "Rebuilding and Retagging to $(TAG)" + git tag -a $(TAG) -m "Tagging for release. $(TAG)" git push --tags From 27504052fe5e6ecb3242588dccdc556a26488454 Mon Sep 17 00:00:00 2001 From: Craig Monson Date: Wed, 14 Jul 2021 13:56:09 -0400 Subject: [PATCH 8/8] Fixing security hole re: token --- .github/workflows/pypi-publish.yml | 3 ++- Makefile | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pypi-publish.yml b/.github/workflows/pypi-publish.yml index 4e819d2e0..20f204b28 100644 --- a/.github/workflows/pypi-publish.yml +++ b/.github/workflows/pypi-publish.yml @@ -23,4 +23,5 @@ jobs: - name: Get dependencies run: poetry install - name: publish - run: make publish PYPI_TOKEN="${{ secrets.PYPI_TOKEN }}" + env: PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} + run: make publish diff --git a/Makefile b/Makefile index 6d5860d1c..f6b12bdae 100644 --- a/Makefile +++ b/Makefile @@ -82,7 +82,7 @@ build: ## build the packages .PHONY: publish publish: build ## build and publish to pypi using the $PYPI_TOKEN for authentication - poetry publish --username "__token__" --password "$(PYPI_TOKEN)" --dry-run + poetry publish --username "__token__" --password "$(PYPI_TOKEN)" .PHONY: tag tag: ## tag this repo with $TAG (and mark the pyproject version as the same)