catalystwan 0.40.1.dev6__py3-none-any.whl → 2.0.0a0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- catalystwan/core/__init__.py +2 -0
- catalystwan/core/abstractions.py +26 -0
- catalystwan/{apigw_auth.py → core/apigw_auth.py} +29 -14
- catalystwan/core/client.py +71 -0
- catalystwan/core/encoder.py +12 -0
- catalystwan/{exceptions.py → core/exceptions.py} +29 -9
- catalystwan/core/loader.py +37 -0
- catalystwan/{__init__.py → core/metadata.py} +9 -22
- catalystwan/core/models/deserialize.py +203 -0
- catalystwan/core/models/serialize.py +137 -0
- catalystwan/core/request_adapter.py +246 -0
- catalystwan/{request_limiter.py → core/request_limiter.py} +1 -2
- catalystwan/{response.py → core/response.py} +38 -85
- catalystwan/{session.py → core/session.py} +84 -101
- catalystwan/core/types.py +33 -0
- catalystwan/{version.py → core/version.py} +3 -5
- catalystwan/{vmanage_auth.py → core/vmanage_auth.py} +46 -21
- catalystwan-2.0.0a0.dist-info/METADATA +327 -0
- catalystwan-2.0.0a0.dist-info/RECORD +24 -0
- {catalystwan-0.40.1.dev6.dist-info → catalystwan-2.0.0a0.dist-info}/WHEEL +2 -1
- catalystwan-2.0.0a0.dist-info/top_level.txt +1 -0
- catalystwan/abstractions.py +0 -77
- catalystwan/api/admin_tech_api.py +0 -176
- catalystwan/api/administration.py +0 -434
- catalystwan/api/alarms_api.py +0 -186
- catalystwan/api/api_container.py +0 -73
- catalystwan/api/basic_api.py +0 -338
- catalystwan/api/builders/__init__.py +0 -14
- catalystwan/api/builders/feature_profiles/application_priority.py +0 -58
- catalystwan/api/builders/feature_profiles/builder_factory.py +0 -59
- catalystwan/api/builders/feature_profiles/cli.py +0 -76
- catalystwan/api/builders/feature_profiles/other.py +0 -79
- catalystwan/api/builders/feature_profiles/report.py +0 -137
- catalystwan/api/builders/feature_profiles/service.py +0 -213
- catalystwan/api/builders/feature_profiles/system.py +0 -80
- catalystwan/api/builders/feature_profiles/transport.py +0 -214
- catalystwan/api/builders/feature_profiles/uc_voice.py +0 -287
- catalystwan/api/config_device_inventory_api.py +0 -58
- catalystwan/api/config_group_api.py +0 -150
- catalystwan/api/configuration_groups/parcel.py +0 -206
- catalystwan/api/dashboard_api.py +0 -215
- catalystwan/api/device_action_api.py +0 -216
- catalystwan/api/feature_profile_api.py +0 -2401
- catalystwan/api/logs_api.py +0 -63
- catalystwan/api/monitoring_status_api.py +0 -76
- catalystwan/api/mtt_aaa_api.py +0 -197
- catalystwan/api/omp_api.py +0 -124
- catalystwan/api/packet_capture_api.py +0 -152
- catalystwan/api/parcel_api.py +0 -42
- catalystwan/api/partition_manager_api.py +0 -143
- catalystwan/api/policy_api.py +0 -1163
- catalystwan/api/resource_pool_api.py +0 -74
- catalystwan/api/software_action_api.py +0 -269
- catalystwan/api/speedtest_api.py +0 -153
- catalystwan/api/task_status_api.py +0 -171
- catalystwan/api/template_api.py +0 -761
- catalystwan/api/templates/README.md +0 -101
- catalystwan/api/templates/bool_str.py +0 -6
- catalystwan/api/templates/cli_template.py +0 -236
- catalystwan/api/templates/device_template/device_template.py +0 -181
- catalystwan/api/templates/device_variable.py +0 -7
- catalystwan/api/templates/feature_template.py +0 -133
- catalystwan/api/templates/feature_template_field.py +0 -175
- catalystwan/api/templates/feature_template_payload.py +0 -17
- catalystwan/api/templates/models/aaa_model.py +0 -387
- catalystwan/api/templates/models/cisco_aaa_model.py +0 -331
- catalystwan/api/templates/models/cisco_banner_model.py +0 -27
- catalystwan/api/templates/models/cisco_bfd_model.py +0 -61
- catalystwan/api/templates/models/cisco_bgp_model.py +0 -510
- catalystwan/api/templates/models/cisco_logging_model.py +0 -122
- catalystwan/api/templates/models/cisco_ntp_model.py +0 -60
- catalystwan/api/templates/models/cisco_omp_model.py +0 -121
- catalystwan/api/templates/models/cisco_ospf.py +0 -241
- catalystwan/api/templates/models/cisco_ospfv3.py +0 -498
- catalystwan/api/templates/models/cisco_secure_internet_gateway.py +0 -385
- catalystwan/api/templates/models/cisco_snmp_model.py +0 -102
- catalystwan/api/templates/models/cisco_system.py +0 -318
- catalystwan/api/templates/models/cisco_vpn_interface_model.py +0 -822
- catalystwan/api/templates/models/cisco_vpn_model.py +0 -603
- catalystwan/api/templates/models/cli_template.py +0 -18
- catalystwan/api/templates/models/omp_vsmart_model.py +0 -73
- catalystwan/api/templates/models/security_vsmart_model.py +0 -28
- catalystwan/api/templates/models/supported.py +0 -42
- catalystwan/api/templates/models/system_vsmart_model.py +0 -182
- catalystwan/api/templates/models/vpn_vsmart_interface_model.py +0 -198
- catalystwan/api/templates/models/vpn_vsmart_model.py +0 -124
- catalystwan/api/templates/payloads/aaa/aaa_model.py +0 -91
- catalystwan/api/templates/payloads/aaa/feature/aaa.json.j2 +0 -373
- catalystwan/api/templates/payloads/aaa/feature/accounting.json.j2 +0 -40
- catalystwan/api/templates/payloads/aaa/feature/radius.json.j2 +0 -107
- catalystwan/api/templates/payloads/aaa/feature/tacacs.json.j2 +0 -95
- catalystwan/api/templates/payloads/aaa/feature/user.json.j2 +0 -60
- catalystwan/api/templates/payloads/cisco_vpn/cisco_vpn_model.py +0 -92
- catalystwan/api/templates/payloads/cisco_vpn/feature/cisco_vpn.json.j2 +0 -224
- catalystwan/api/templates/payloads/cisco_vpn/feature/dns.json.j2 +0 -86
- catalystwan/api/templates/payloads/cisco_vpn/feature/ipv4route.json.j2 +0 -59
- catalystwan/api/templates/payloads/cisco_vpn/feature/ipv6route.json.j2 +0 -58
- catalystwan/api/templates/payloads/cisco_vpn/feature/mapping.json.j2 +0 -24
- catalystwan/api/templates/payloads/tenant/tenant.json.j2 +0 -127
- catalystwan/api/templates/payloads/tenant/tenant_model.py +0 -43
- catalystwan/api/tenant_backup_restore_api.py +0 -154
- catalystwan/api/tenant_management_api.py +0 -127
- catalystwan/api/tenant_migration_api.py +0 -121
- catalystwan/api/versions_utils.py +0 -414
- catalystwan/api/virtual_image_action_api.py +0 -200
- catalystwan/dataclasses.py +0 -493
- catalystwan/endpoints/__init__.py +0 -606
- catalystwan/endpoints/administration_user_and_group.py +0 -341
- catalystwan/endpoints/api_gateway.py +0 -24
- catalystwan/endpoints/certificate_management_device.py +0 -137
- catalystwan/endpoints/certificate_management_vmanage.py +0 -48
- catalystwan/endpoints/client.py +0 -96
- catalystwan/endpoints/cluster_management.py +0 -130
- catalystwan/endpoints/configuration/device/software_update.py +0 -31
- catalystwan/endpoints/configuration/disaster_recovery.py +0 -305
- catalystwan/endpoints/configuration/feature_profile/sdwan/application_priority.py +0 -107
- catalystwan/endpoints/configuration/feature_profile/sdwan/cli.py +0 -60
- catalystwan/endpoints/configuration/feature_profile/sdwan/dns_security.py +0 -83
- catalystwan/endpoints/configuration/feature_profile/sdwan/embedded_security.py +0 -88
- catalystwan/endpoints/configuration/feature_profile/sdwan/other.py +0 -62
- catalystwan/endpoints/configuration/feature_profile/sdwan/policy_object.py +0 -105
- catalystwan/endpoints/configuration/feature_profile/sdwan/service.py +0 -137
- catalystwan/endpoints/configuration/feature_profile/sdwan/sig_security.py +0 -88
- catalystwan/endpoints/configuration/feature_profile/sdwan/system.py +0 -205
- catalystwan/endpoints/configuration/feature_profile/sdwan/topology.py +0 -93
- catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py +0 -214
- catalystwan/endpoints/configuration/feature_profile/sdwan/uc_voice.py +0 -77
- catalystwan/endpoints/configuration/network_hierarchy.py +0 -32
- catalystwan/endpoints/configuration/policy/abstractions.py +0 -49
- catalystwan/endpoints/configuration/policy/definition/access_control_list.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/aip.py +0 -52
- catalystwan/endpoints/configuration/policy/definition/amp.py +0 -52
- catalystwan/endpoints/configuration/policy/definition/app_route.py +0 -50
- catalystwan/endpoints/configuration/policy/definition/cflowd.py +0 -46
- catalystwan/endpoints/configuration/policy/definition/control.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/device_access.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py +0 -59
- catalystwan/endpoints/configuration/policy/definition/dial_peer.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/dns_security.py +0 -50
- catalystwan/endpoints/configuration/policy/definition/fxo_port.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/fxs_did_port.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/fxs_port.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/intrusion_prevention.py +0 -52
- catalystwan/endpoints/configuration/policy/definition/mesh.py +0 -53
- catalystwan/endpoints/configuration/policy/definition/pri_isdn_port.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/qos_map.py +0 -53
- catalystwan/endpoints/configuration/policy/definition/rewrite.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/route_policy.py +0 -50
- catalystwan/endpoints/configuration/policy/definition/rule_set.py +0 -53
- catalystwan/endpoints/configuration/policy/definition/security_group.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/srst_phone_profile.py +0 -59
- catalystwan/endpoints/configuration/policy/definition/ssl_decryption.py +0 -50
- catalystwan/endpoints/configuration/policy/definition/ssl_decryption_utd_profile.py +0 -52
- catalystwan/endpoints/configuration/policy/definition/traffic_data.py +0 -58
- catalystwan/endpoints/configuration/policy/definition/url_filtering.py +0 -50
- catalystwan/endpoints/configuration/policy/definition/vpn_membership.py +0 -57
- catalystwan/endpoints/configuration/policy/definition/vpn_qos_map.py +0 -50
- catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py +0 -57
- catalystwan/endpoints/configuration/policy/list/app.py +0 -48
- catalystwan/endpoints/configuration/policy/list/app_probe.py +0 -52
- catalystwan/endpoints/configuration/policy/list/as_path.py +0 -48
- catalystwan/endpoints/configuration/policy/list/class_map.py +0 -48
- catalystwan/endpoints/configuration/policy/list/color.py +0 -48
- catalystwan/endpoints/configuration/policy/list/community.py +0 -48
- catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py +0 -52
- catalystwan/endpoints/configuration/policy/list/data_prefix.py +0 -48
- catalystwan/endpoints/configuration/policy/list/expanded_community.py +0 -52
- catalystwan/endpoints/configuration/policy/list/extended_community.py +0 -52
- catalystwan/endpoints/configuration/policy/list/fax_protocol.py +0 -48
- catalystwan/endpoints/configuration/policy/list/fqdn.py +0 -48
- catalystwan/endpoints/configuration/policy/list/geo_location.py +0 -48
- catalystwan/endpoints/configuration/policy/list/identity.py +0 -48
- catalystwan/endpoints/configuration/policy/list/ips_signature.py +0 -52
- catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py +0 -48
- catalystwan/endpoints/configuration/policy/list/local_app.py +0 -48
- catalystwan/endpoints/configuration/policy/list/local_domain.py +0 -48
- catalystwan/endpoints/configuration/policy/list/media_profile.py +0 -52
- catalystwan/endpoints/configuration/policy/list/mirror.py +0 -48
- catalystwan/endpoints/configuration/policy/list/modem_pass_through.py +0 -52
- catalystwan/endpoints/configuration/policy/list/policer.py +0 -48
- catalystwan/endpoints/configuration/policy/list/port.py +0 -48
- catalystwan/endpoints/configuration/policy/list/preferred_color_group.py +0 -52
- catalystwan/endpoints/configuration/policy/list/prefix.py +0 -49
- catalystwan/endpoints/configuration/policy/list/protocol_name.py +0 -52
- catalystwan/endpoints/configuration/policy/list/region.py +0 -47
- catalystwan/endpoints/configuration/policy/list/scalable_group_tag.py +0 -52
- catalystwan/endpoints/configuration/policy/list/site.py +0 -52
- catalystwan/endpoints/configuration/policy/list/sla.py +0 -48
- catalystwan/endpoints/configuration/policy/list/supervisory_disconnect.py +0 -52
- catalystwan/endpoints/configuration/policy/list/threat_grid_api_key.py +0 -52
- catalystwan/endpoints/configuration/policy/list/tloc.py +0 -48
- catalystwan/endpoints/configuration/policy/list/translation_profile.py +0 -52
- catalystwan/endpoints/configuration/policy/list/translation_rules.py +0 -52
- catalystwan/endpoints/configuration/policy/list/trunkgroup.py +0 -48
- catalystwan/endpoints/configuration/policy/list/umbrella_data.py +0 -52
- catalystwan/endpoints/configuration/policy/list/url_allow_list.py +0 -48
- catalystwan/endpoints/configuration/policy/list/url_block_list.py +0 -48
- catalystwan/endpoints/configuration/policy/list/vpn.py +0 -50
- catalystwan/endpoints/configuration/policy/list/zone.py +0 -48
- catalystwan/endpoints/configuration/policy/security_template.py +0 -55
- catalystwan/endpoints/configuration/policy/vedge_template.py +0 -52
- catalystwan/endpoints/configuration/policy/voice_template.py +0 -39
- catalystwan/endpoints/configuration/policy/vsmart_template.py +0 -79
- catalystwan/endpoints/configuration/policy_group.py +0 -30
- catalystwan/endpoints/configuration/software_actions.py +0 -201
- catalystwan/endpoints/configuration/topology_group.py +0 -51
- catalystwan/endpoints/configuration_dashboard_status.py +0 -127
- catalystwan/endpoints/configuration_device_actions.py +0 -385
- catalystwan/endpoints/configuration_device_inventory.py +0 -309
- catalystwan/endpoints/configuration_device_template.py +0 -39
- catalystwan/endpoints/configuration_feature_profile.py +0 -135
- catalystwan/endpoints/configuration_general_template.py +0 -31
- catalystwan/endpoints/configuration_group.py +0 -197
- catalystwan/endpoints/configuration_settings.py +0 -749
- catalystwan/endpoints/configuration_template_master.py +0 -48
- catalystwan/endpoints/endpoints_container.py +0 -279
- catalystwan/endpoints/misc.py +0 -21
- catalystwan/endpoints/monitoring/device_details.py +0 -246
- catalystwan/endpoints/monitoring/security_policy.py +0 -12
- catalystwan/endpoints/monitoring/server_info.py +0 -12
- catalystwan/endpoints/monitoring/status.py +0 -76
- catalystwan/endpoints/real_time_monitoring/reboot_history.py +0 -35
- catalystwan/endpoints/sdavc_cloud_connector.py +0 -43
- catalystwan/endpoints/tenant_backup_restore.py +0 -40
- catalystwan/endpoints/tenant_management.py +0 -215
- catalystwan/endpoints/tenant_migration.py +0 -102
- catalystwan/endpoints/troubleshooting_tools/device_connectivity.py +0 -128
- catalystwan/endpoints/url_monitoring.py +0 -26
- catalystwan/integration_tests/__init__.py +0 -0
- catalystwan/integration_tests/base.py +0 -81
- catalystwan/integration_tests/feature_profile/sdwan/__init__.py +0 -0
- catalystwan/integration_tests/feature_profile/sdwan/policy/__init__.py +0 -0
- catalystwan/integration_tests/feature_profile/sdwan/policy/base.py +0 -33
- catalystwan/integration_tests/feature_profile/sdwan/policy/test_extended_community.py +0 -33
- catalystwan/integration_tests/feature_profile/sdwan/policy/test_security_app_list.py +0 -32
- catalystwan/integration_tests/feature_profile/sdwan/test_application_priority.py +0 -433
- catalystwan/integration_tests/feature_profile/sdwan/test_cli.py +0 -54
- catalystwan/integration_tests/feature_profile/sdwan/test_dns_security.py +0 -106
- catalystwan/integration_tests/feature_profile/sdwan/test_other.py +0 -49
- catalystwan/integration_tests/feature_profile/sdwan/test_service.py +0 -1078
- catalystwan/integration_tests/feature_profile/sdwan/test_sig_security.py +0 -322
- catalystwan/integration_tests/feature_profile/sdwan/test_ssl_decryption.py +0 -85
- catalystwan/integration_tests/feature_profile/sdwan/test_system.py +0 -368
- catalystwan/integration_tests/feature_profile/sdwan/test_transport.py +0 -1700
- catalystwan/integration_tests/feature_profile/sdwan/topology/test_topology.py +0 -93
- catalystwan/integration_tests/profile_builder/__init__.py +0 -0
- catalystwan/integration_tests/profile_builder/test_pb_service.py +0 -78
- catalystwan/integration_tests/profile_builder/test_pb_transport.py +0 -56
- catalystwan/integration_tests/profile_builder/test_pb_uc_voice.py +0 -277
- catalystwan/integration_tests/test_data/__init__.py +0 -117
- catalystwan/integration_tests/test_find_template_values.py +0 -38
- catalystwan/integration_tests/test_network_hierarchy.py +0 -82
- catalystwan/integration_tests/test_settings.py +0 -30
- catalystwan/logging.conf +0 -37
- catalystwan/models/common.py +0 -1508
- catalystwan/models/configuration/common.py +0 -11
- catalystwan/models/configuration/feature_profile/README.md +0 -344
- catalystwan/models/configuration/feature_profile/builder.py +0 -22
- catalystwan/models/configuration/feature_profile/common.py +0 -749
- catalystwan/models/configuration/feature_profile/parcel.py +0 -232
- catalystwan/models/configuration/feature_profile/sdwan/acl/__init__.py +0 -13
- catalystwan/models/configuration/feature_profile/sdwan/acl/ipv4acl.py +0 -298
- catalystwan/models/configuration/feature_profile/sdwan/acl/ipv6acl.py +0 -344
- catalystwan/models/configuration/feature_profile/sdwan/application_priority/__init__.py +0 -215
- catalystwan/models/configuration/feature_profile/sdwan/application_priority/policy_settings.py +0 -31
- catalystwan/models/configuration/feature_profile/sdwan/application_priority/qos_policy.py +0 -102
- catalystwan/models/configuration/feature_profile/sdwan/application_priority/traffic_policy.py +0 -1054
- catalystwan/models/configuration/feature_profile/sdwan/cli/__init__.py +0 -23
- catalystwan/models/configuration/feature_profile/sdwan/cli/config.py +0 -18
- catalystwan/models/configuration/feature_profile/sdwan/cli/full_config.py +0 -15
- catalystwan/models/configuration/feature_profile/sdwan/dns_security/__init__.py +0 -13
- catalystwan/models/configuration/feature_profile/sdwan/dns_security/dns.py +0 -107
- catalystwan/models/configuration/feature_profile/sdwan/embedded_security/__init__.py +0 -23
- catalystwan/models/configuration/feature_profile/sdwan/embedded_security/ngfirewall.py +0 -915
- catalystwan/models/configuration/feature_profile/sdwan/embedded_security/policy.py +0 -171
- catalystwan/models/configuration/feature_profile/sdwan/other/__init__.py +0 -23
- catalystwan/models/configuration/feature_profile/sdwan/other/thousandeyes.py +0 -147
- catalystwan/models/configuration/feature_profile/sdwan/other/ucse.py +0 -110
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/__init__.py +0 -175
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/app_probe.py +0 -56
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/application_list.py +0 -31
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/as_path.py +0 -22
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/color_list.py +0 -21
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/data_prefix.py +0 -35
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/expanded_community_list.py +0 -25
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/extended_community.py +0 -34
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/fowarding_class.py +0 -26
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_data_prefix.py +0 -28
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_prefix_list.py +0 -38
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/mirror.py +0 -27
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/policer.py +0 -42
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefered_group_color.py +0 -83
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefix_list.py +0 -28
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/sla_class.py +0 -130
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/standard_community.py +0 -30
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/tloc_list.py +0 -44
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/aip.py +0 -64
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/amp.py +0 -79
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/application_list.py +0 -31
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/data_prefix.py +0 -22
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/fqdn.py +0 -24
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/geolocation_list.py +0 -32
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/identity.py +0 -30
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/intrusion_prevention.py +0 -58
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ips_signature.py +0 -44
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/local_domain.py +0 -24
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/protocol_list.py +0 -21
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/scalable_group_tag.py +0 -26
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/security_port.py +0 -45
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ssl_decryption.py +0 -126
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ssl_decryption_profile.py +0 -165
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url.py +0 -32
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url_filtering.py +0 -148
- catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/zone.py +0 -44
- catalystwan/models/configuration/feature_profile/sdwan/routing/__init__.py +0 -26
- catalystwan/models/configuration/feature_profile/sdwan/routing/bgp.py +0 -594
- catalystwan/models/configuration/feature_profile/sdwan/routing/ospf.py +0 -170
- catalystwan/models/configuration/feature_profile/sdwan/routing/ospfv3.py +0 -298
- catalystwan/models/configuration/feature_profile/sdwan/service/__init__.py +0 -85
- catalystwan/models/configuration/feature_profile/sdwan/service/appqoe.py +0 -270
- catalystwan/models/configuration/feature_profile/sdwan/service/dhcp_server.py +0 -127
- catalystwan/models/configuration/feature_profile/sdwan/service/eigrp.py +0 -103
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/common.py +0 -33
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/ethernet.py +0 -275
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/gre.py +0 -136
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/ipsec.py +0 -119
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/multilink.py +0 -101
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/svi.py +0 -172
- catalystwan/models/configuration/feature_profile/sdwan/service/lan/vpn.py +0 -624
- catalystwan/models/configuration/feature_profile/sdwan/service/multicast.py +0 -242
- catalystwan/models/configuration/feature_profile/sdwan/service/object_tracker.py +0 -84
- catalystwan/models/configuration/feature_profile/sdwan/service/route_policy.py +0 -419
- catalystwan/models/configuration/feature_profile/sdwan/service/service_insertion_attachment.py +0 -184
- catalystwan/models/configuration/feature_profile/sdwan/service/switchport.py +0 -112
- catalystwan/models/configuration/feature_profile/sdwan/service/tracker.py +0 -92
- catalystwan/models/configuration/feature_profile/sdwan/service/wireless_lan.py +0 -216
- catalystwan/models/configuration/feature_profile/sdwan/sig_security/__init__.py +0 -19
- catalystwan/models/configuration/feature_profile/sdwan/sig_security/sig_security.py +0 -379
- catalystwan/models/configuration/feature_profile/sdwan/system/__init__.py +0 -59
- catalystwan/models/configuration/feature_profile/sdwan/system/aaa.py +0 -406
- catalystwan/models/configuration/feature_profile/sdwan/system/banner.py +0 -30
- catalystwan/models/configuration/feature_profile/sdwan/system/basic.py +0 -290
- catalystwan/models/configuration/feature_profile/sdwan/system/bfd.py +0 -69
- catalystwan/models/configuration/feature_profile/sdwan/system/device_access.py +0 -157
- catalystwan/models/configuration/feature_profile/sdwan/system/device_access_ipv6.py +0 -157
- catalystwan/models/configuration/feature_profile/sdwan/system/global_parcel.py +0 -149
- catalystwan/models/configuration/feature_profile/sdwan/system/logging_parcel.py +0 -162
- catalystwan/models/configuration/feature_profile/sdwan/system/mrf.py +0 -75
- catalystwan/models/configuration/feature_profile/sdwan/system/ntp.py +0 -103
- catalystwan/models/configuration/feature_profile/sdwan/system/omp.py +0 -111
- catalystwan/models/configuration/feature_profile/sdwan/system/security.py +0 -179
- catalystwan/models/configuration/feature_profile/sdwan/system/snmp.py +0 -173
- catalystwan/models/configuration/feature_profile/sdwan/topology/__init__.py +0 -29
- catalystwan/models/configuration/feature_profile/sdwan/topology/custom_control.py +0 -425
- catalystwan/models/configuration/feature_profile/sdwan/topology/hubspoke.py +0 -60
- catalystwan/models/configuration/feature_profile/sdwan/topology/mesh.py +0 -23
- catalystwan/models/configuration/feature_profile/sdwan/transport/__init__.py +0 -93
- catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_controller.py +0 -58
- catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_profile.py +0 -71
- catalystwan/models/configuration/feature_profile/sdwan/transport/gps.py +0 -37
- catalystwan/models/configuration/feature_profile/sdwan/transport/management/ethernet.py +0 -121
- catalystwan/models/configuration/feature_profile/sdwan/transport/t1e1controller.py +0 -124
- catalystwan/models/configuration/feature_profile/sdwan/transport/vpn.py +0 -285
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/cellular.py +0 -166
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/ethernet.py +0 -281
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/gre.py +0 -46
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/ipsec.py +0 -98
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/multilink.py +0 -219
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/protocol_over.py +0 -405
- catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/t1e1serial.py +0 -195
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/__init__.py +0 -62
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/analog_interface.py +0 -436
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/call_routing.py +0 -179
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/digital_interface.py +0 -329
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/dsp_farm.py +0 -193
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/media_profile.py +0 -25
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/server_group.py +0 -51
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/srst.py +0 -86
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/supervisory_disconnect.py +0 -68
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/translation_profile.py +0 -42
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/translation_rule.py +0 -31
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/trunk_group.py +0 -26
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_global.py +0 -55
- catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_tenant.py +0 -40
- catalystwan/models/configuration/network_hierarchy/__init__.py +0 -22
- catalystwan/models/configuration/network_hierarchy/cflowd.py +0 -120
- catalystwan/models/configuration/network_hierarchy/node.py +0 -88
- catalystwan/models/configuration/policy_group.py +0 -74
- catalystwan/models/configuration/profile_type.py +0 -5
- catalystwan/models/configuration/topology_group.py +0 -52
- catalystwan/models/device_inventory.py +0 -30
- catalystwan/models/feature_profile_parcel.py +0 -15
- catalystwan/models/misc/application_protocols.py +0 -29
- catalystwan/models/monitoring/security_policy.py +0 -16
- catalystwan/models/monitoring/server_info.py +0 -12
- catalystwan/models/policy/__init__.py +0 -392
- catalystwan/models/policy/centralized.py +0 -265
- catalystwan/models/policy/definition/access_control_list.py +0 -193
- catalystwan/models/policy/definition/access_control_list_ipv6.py +0 -187
- catalystwan/models/policy/definition/aip.py +0 -60
- catalystwan/models/policy/definition/amp.py +0 -65
- catalystwan/models/policy/definition/app_route.py +0 -246
- catalystwan/models/policy/definition/cflowd.py +0 -95
- catalystwan/models/policy/definition/control.py +0 -366
- catalystwan/models/policy/definition/device_access.py +0 -117
- catalystwan/models/policy/definition/device_access_ipv6.py +0 -115
- catalystwan/models/policy/definition/dial_peer.py +0 -60
- catalystwan/models/policy/definition/dns_security.py +0 -130
- catalystwan/models/policy/definition/fxo_port.py +0 -63
- catalystwan/models/policy/definition/fxs_did_port.py +0 -58
- catalystwan/models/policy/definition/fxs_port.py +0 -56
- catalystwan/models/policy/definition/hub_and_spoke.py +0 -87
- catalystwan/models/policy/definition/intrusion_prevention.py +0 -55
- catalystwan/models/policy/definition/mesh.py +0 -47
- catalystwan/models/policy/definition/pri_isdn_port.py +0 -48
- catalystwan/models/policy/definition/qos_map.py +0 -111
- catalystwan/models/policy/definition/rewrite.py +0 -47
- catalystwan/models/policy/definition/route_policy.py +0 -187
- catalystwan/models/policy/definition/rule_set.py +0 -270
- catalystwan/models/policy/definition/security_group.py +0 -93
- catalystwan/models/policy/definition/srst_phone_profile.py +0 -37
- catalystwan/models/policy/definition/ssl_decryption.py +0 -209
- catalystwan/models/policy/definition/ssl_decryption_utd_profile.py +0 -87
- catalystwan/models/policy/definition/traffic_data.py +0 -496
- catalystwan/models/policy/definition/url_filtering.py +0 -70
- catalystwan/models/policy/definition/vpn_membership.py +0 -42
- catalystwan/models/policy/definition/vpn_qos_map.py +0 -46
- catalystwan/models/policy/definition/zone_based_firewall.py +0 -301
- catalystwan/models/policy/list/app.py +0 -44
- catalystwan/models/policy/list/app_probe.py +0 -42
- catalystwan/models/policy/list/as_path.py +0 -30
- catalystwan/models/policy/list/class_map.py +0 -30
- catalystwan/models/policy/list/color.py +0 -28
- catalystwan/models/policy/list/communities.py +0 -83
- catalystwan/models/policy/list/data_ipv6_prefix.py +0 -30
- catalystwan/models/policy/list/data_prefix.py +0 -30
- catalystwan/models/policy/list/fax_protocol.py +0 -45
- catalystwan/models/policy/list/fqdn.py +0 -24
- catalystwan/models/policy/list/geo_location.py +0 -33
- catalystwan/models/policy/list/identity.py +0 -29
- catalystwan/models/policy/list/ips_signature.py +0 -27
- catalystwan/models/policy/list/ipv6_prefix.py +0 -33
- catalystwan/models/policy/list/local_app.py +0 -45
- catalystwan/models/policy/list/local_domain.py +0 -36
- catalystwan/models/policy/list/media_profile.py +0 -44
- catalystwan/models/policy/list/mirror.py +0 -27
- catalystwan/models/policy/list/modem_pass_through.py +0 -27
- catalystwan/models/policy/list/policer.py +0 -39
- catalystwan/models/policy/list/port.py +0 -33
- catalystwan/models/policy/list/preferred_color_group.py +0 -82
- catalystwan/models/policy/list/prefix.py +0 -33
- catalystwan/models/policy/list/protocol_name.py +0 -26
- catalystwan/models/policy/list/region.py +0 -45
- catalystwan/models/policy/list/scalable_group_tag.py +0 -30
- catalystwan/models/policy/list/site.py +0 -34
- catalystwan/models/policy/list/sla.py +0 -77
- catalystwan/models/policy/list/supervisory_disconnect.py +0 -62
- catalystwan/models/policy/list/threat_grid_api_key.py +0 -32
- catalystwan/models/policy/list/tloc.py +0 -32
- catalystwan/models/policy/list/translation_profile.py +0 -32
- catalystwan/models/policy/list/translation_rules.py +0 -29
- catalystwan/models/policy/list/trunkgroup.py +0 -56
- catalystwan/models/policy/list/umbrella_data.py +0 -30
- catalystwan/models/policy/list/url.py +0 -39
- catalystwan/models/policy/list/vpn.py +0 -40
- catalystwan/models/policy/list/zone.py +0 -45
- catalystwan/models/policy/localized.py +0 -154
- catalystwan/models/policy/policy.py +0 -100
- catalystwan/models/policy/policy_definition.py +0 -1624
- catalystwan/models/policy/policy_list.py +0 -47
- catalystwan/models/policy/security.py +0 -279
- catalystwan/models/policy/voice.py +0 -71
- catalystwan/models/settings.py +0 -41
- catalystwan/models/templates.py +0 -79
- catalystwan/models/tenant.py +0 -105
- catalystwan/models/url_monitoring.py +0 -28
- catalystwan/tests/__init__.py +0 -0
- catalystwan/tests/builders/uc_voice.py +0 -85
- catalystwan/tests/models/__init__.py +0 -0
- catalystwan/tests/templates/__init__.py +0 -0
- catalystwan/tests/templates/definitions/__init__.py +0 -0
- catalystwan/tests/templates/definitions/aaa_basic.json +0 -96
- catalystwan/tests/templates/definitions/aaa_complex.json +0 -464
- catalystwan/tests/templates/definitions/basic/__init__.py +0 -0
- catalystwan/tests/templates/definitions/basic/alias.json +0 -7
- catalystwan/tests/templates/definitions/basic/basic.json +0 -7
- catalystwan/tests/templates/definitions/basic/basic_no_value.json +0 -7
- catalystwan/tests/templates/definitions/basic/children.json +0 -39
- catalystwan/tests/templates/definitions/basic/children_nested.json +0 -72
- catalystwan/tests/templates/definitions/basic/children_nested_datapath.json +0 -72
- catalystwan/tests/templates/definitions/basic/data_path.json +0 -13
- catalystwan/tests/templates/definitions/cisco_aaa.json +0 -178
- catalystwan/tests/templates/definitions/cisco_aaa_complex.json +0 -361
- catalystwan/tests/templates/definitions/cisco_banner.json +0 -20
- catalystwan/tests/templates/definitions/cisco_bfd.json +0 -90
- catalystwan/tests/templates/definitions/cisco_logging_complex.json +0 -268
- catalystwan/tests/templates/definitions/cisco_ntp_complex.json +0 -143
- catalystwan/tests/templates/definitions/cisco_omp_complex.json +0 -175
- catalystwan/tests/templates/definitions/cisco_ospf_complex.json +0 -302
- catalystwan/tests/templates/definitions/cisco_sig.json +0 -405
- catalystwan/tests/templates/definitions/cisco_snmp_complex.json +0 -258
- catalystwan/tests/templates/definitions/cisco_system_complex.json +0 -502
- catalystwan/tests/templates/definitions/cisco_vpn_basic.json +0 -17
- catalystwan/tests/templates/definitions/cisco_vpn_complex.json +0 -1081
- catalystwan/tests/templates/definitions/cisco_vpn_interface_complex.json +0 -821
- catalystwan/tests/templates/definitions/default_cisco_system.json +0 -184
- catalystwan/tests/templates/definitions/omp_vsmart_1.json +0 -26
- catalystwan/tests/templates/definitions/omp_vsmart_2.json +0 -48
- catalystwan/tests/templates/definitions/omp_vsmart_3.json +0 -71
- catalystwan/tests/templates/definitions/omp_vsmart_complex.json +0 -73
- catalystwan/tests/templates/definitions/security_vsmart_complex.json +0 -24
- catalystwan/tests/templates/definitions/system_vsmart_complex.json +0 -193
- catalystwan/tests/templates/definitions/vpn_vsmart_basic.json +0 -17
- catalystwan/tests/templates/definitions/vpn_vsmart_complex.json +0 -179
- catalystwan/tests/templates/definitions/vpn_vsmart_interface_basic.json +0 -42
- catalystwan/tests/templates/definitions/vpn_vsmart_interface_complex.json +0 -208
- catalystwan/tests/templates/models/__init__.py +0 -53
- catalystwan/tests/templates/models/aaa.py +0 -106
- catalystwan/tests/templates/models/cisco_aaa.py +0 -124
- catalystwan/tests/templates/models/cisco_banner.py +0 -7
- catalystwan/tests/templates/models/cisco_bfd.py +0 -15
- catalystwan/tests/templates/models/cisco_logging.py +0 -65
- catalystwan/tests/templates/models/cisco_ntp.py +0 -17
- catalystwan/tests/templates/models/cisco_omp.py +0 -37
- catalystwan/tests/templates/models/cisco_ospf.py +0 -60
- catalystwan/tests/templates/models/cisco_secure_internet_gateway.py +0 -95
- catalystwan/tests/templates/models/cisco_snmp.py +0 -40
- catalystwan/tests/templates/models/cisco_system.py +0 -113
- catalystwan/tests/templates/models/cisco_vpn.py +0 -240
- catalystwan/tests/templates/models/cisco_vpn_interface.py +0 -200
- catalystwan/tests/templates/models/omp_vsmart.py +0 -53
- catalystwan/tests/templates/models/security_vsmart.py +0 -11
- catalystwan/tests/templates/models/system_vsmart.py +0 -37
- catalystwan/tests/templates/models/vpn_vsmart.py +0 -32
- catalystwan/tests/templates/models/vpn_vsmart_interface.py +0 -54
- catalystwan/tests/templates/schemas/aaa.json +0 -1096
- catalystwan/tests/templates/schemas/basic/alias.json +0 -24
- catalystwan/tests/templates/schemas/basic/basic.json +0 -23
- catalystwan/tests/templates/schemas/basic/children.json +0 -59
- catalystwan/tests/templates/schemas/basic/children_nested.json +0 -112
- catalystwan/tests/templates/schemas/basic/children_nested_datapath.json +0 -112
- catalystwan/tests/templates/schemas/basic/data_path.json +0 -29
- catalystwan/tests/templates/schemas/cedge_aaa.json +0 -1185
- catalystwan/tests/templates/schemas/cisco_banner.json +0 -44
- catalystwan/tests/templates/schemas/cisco_bfd.json +0 -266
- catalystwan/tests/templates/schemas/cisco_logging.json +0 -577
- catalystwan/tests/templates/schemas/cisco_ntp.json +0 -265
- catalystwan/tests/templates/schemas/cisco_omp.json +0 -479
- catalystwan/tests/templates/schemas/cisco_ospf.json +0 -908
- catalystwan/tests/templates/schemas/cisco_secure_internet_gateway.json +0 -1520
- catalystwan/tests/templates/schemas/cisco_snmp.json +0 -561
- catalystwan/tests/templates/schemas/cisco_system.json +0 -3099
- catalystwan/tests/templates/schemas/cisco_vpn.json +0 -2504
- catalystwan/tests/templates/schemas/cisco_vpn_interface.json +0 -3348
- catalystwan/tests/templates/schemas/omp-vsmart.json +0 -222
- catalystwan/tests/templates/schemas/security-vsmart.json +0 -58
- catalystwan/tests/templates/schemas/system-vsmart.json +0 -2585
- catalystwan/tests/templates/schemas/vpn-vsmart-interface.json +0 -859
- catalystwan/tests/templates/schemas/vpn-vsmart.json +0 -445
- catalystwan/tests/templates/test_chose_model.py +0 -32
- catalystwan/tests/templates/test_deserialize_model.py +0 -69
- catalystwan/tests/templates/test_find_template_values.py +0 -193
- catalystwan/tests/templates/test_find_template_values_2.py +0 -193
- catalystwan/tests/templates/test_generate_payload.py +0 -137
- catalystwan/tests/templates/test_serialize_model.py +0 -52
- catalystwan/tests/test_admin_tech_api.py +0 -198
- catalystwan/tests/test_administration.py +0 -470
- catalystwan/tests/test_alarms_api.py +0 -251
- catalystwan/tests/test_cli_template.py +0 -218
- catalystwan/tests/test_creation_tools.py +0 -155
- catalystwan/tests/test_device_action_api.py +0 -117
- catalystwan/tests/test_devices_api.py +0 -674
- catalystwan/tests/test_endpoints.py +0 -907
- catalystwan/tests/test_feature_profile_api.py +0 -282
- catalystwan/tests/test_feature_template_field.py +0 -33
- catalystwan/tests/test_logs_api.py +0 -40
- catalystwan/tests/test_models_common.py +0 -53
- catalystwan/tests/test_monitoring_security_policy.py +0 -65
- catalystwan/tests/test_monitoring_server_info.py +0 -49
- catalystwan/tests/test_monitoring_status_api.py +0 -118
- catalystwan/tests/test_mtt_aaa_api.py +0 -293
- catalystwan/tests/test_omp_api.py +0 -438
- catalystwan/tests/test_packet_capture.py +0 -125
- catalystwan/tests/test_partition_manager_api.py +0 -121
- catalystwan/tests/test_response.py +0 -183
- catalystwan/tests/test_session.py +0 -102
- catalystwan/tests/test_software_action_api.py +0 -154
- catalystwan/tests/test_speed_test_api.py +0 -143
- catalystwan/tests/test_task_status_api.py +0 -381
- catalystwan/tests/test_templates.py +0 -405
- catalystwan/tests/test_tenant_backup_restore_api.py +0 -88
- catalystwan/tests/test_tenant_management_api.py +0 -153
- catalystwan/tests/test_tenant_migration_api.py +0 -102
- catalystwan/tests/test_typed_list.py +0 -426
- catalystwan/tests/test_url_monitoring.py +0 -80
- catalystwan/tests/test_version.py +0 -99
- catalystwan/tests/test_version_utils.py +0 -240
- catalystwan/tests/test_vmanage_auth.py +0 -149
- catalystwan/typed_list.py +0 -288
- catalystwan/utils/__init__.py +0 -0
- catalystwan/utils/alarm_status.py +0 -16
- catalystwan/utils/certificate_status.py +0 -13
- catalystwan/utils/colors.py +0 -12
- catalystwan/utils/config_status.py +0 -8
- catalystwan/utils/creation_tools.py +0 -136
- catalystwan/utils/dashboard.py +0 -255
- catalystwan/utils/device_model.py +0 -322
- catalystwan/utils/dict.py +0 -61
- catalystwan/utils/feature_template/choose_model.py +0 -30
- catalystwan/utils/feature_template/find_template_values.py +0 -111
- catalystwan/utils/model.py +0 -45
- catalystwan/utils/operation_status.py +0 -22
- catalystwan/utils/persona.py +0 -5
- catalystwan/utils/personality.py +0 -10
- catalystwan/utils/pydantic_field.py +0 -12
- catalystwan/utils/reachability.py +0 -14
- catalystwan/utils/session_type.py +0 -17
- catalystwan/utils/template_type.py +0 -8
- catalystwan/utils/type_check.py +0 -22
- catalystwan/utils/upgrades_helper.py +0 -95
- catalystwan/utils/validate_status.py +0 -8
- catalystwan/workflows/backup_restore_device_templates.py +0 -467
- catalystwan/workflows/tenant_migration.py +0 -203
- catalystwan-0.40.1.dev6.dist-info/METADATA +0 -539
- catalystwan-0.40.1.dev6.dist-info/RECORD +0 -618
- /catalystwan/{api → core/models}/__init__.py +0 -0
- /catalystwan/{api/builders/feature_profiles/__init__.py → core/py.typed} +0 -0
- {catalystwan-0.40.1.dev6.dist-info → catalystwan-2.0.0a0.dist-info}/LICENSE +0 -0
|
@@ -1,24 +1,14 @@
|
|
|
1
|
-
# Copyright 2024 Cisco Systems, Inc. and its affiliates
|
|
2
|
-
|
|
3
1
|
from __future__ import annotations
|
|
4
2
|
|
|
5
3
|
import logging
|
|
6
4
|
from enum import Enum
|
|
7
|
-
from functools import cached_property
|
|
8
|
-
from pathlib import Path
|
|
9
5
|
from time import monotonic, sleep
|
|
10
|
-
from typing import
|
|
6
|
+
from typing import Callable, List, Optional, Union
|
|
11
7
|
from urllib.parse import urljoin, urlparse, urlunparse
|
|
12
8
|
|
|
13
|
-
from
|
|
14
|
-
from
|
|
15
|
-
from
|
|
16
|
-
|
|
17
|
-
from catalystwan import USER_AGENT
|
|
18
|
-
from catalystwan.apigw_auth import ApiGwAuth, ApiGwLogin, LoginMode
|
|
19
|
-
from catalystwan.endpoints import APIEndpointClient
|
|
20
|
-
from catalystwan.endpoints.client import AboutInfo, ServerInfo
|
|
21
|
-
from catalystwan.exceptions import (
|
|
9
|
+
from catalystwan.abc import SessionInterface, SessionType
|
|
10
|
+
from catalystwan.core.apigw_auth import ApiGwAuth, ApiGwLogin, LoginMode
|
|
11
|
+
from catalystwan.core.exceptions import (
|
|
22
12
|
DefaultPasswordError,
|
|
23
13
|
ManagerHTTPError,
|
|
24
14
|
ManagerReadyTimeout,
|
|
@@ -26,18 +16,14 @@ from catalystwan.exceptions import (
|
|
|
26
16
|
SessionNotCreatedError,
|
|
27
17
|
TenantSubdomainNotFound,
|
|
28
18
|
)
|
|
29
|
-
from catalystwan.
|
|
30
|
-
from catalystwan.request_limiter import RequestLimiter
|
|
31
|
-
from catalystwan.response import ManagerResponse, response_history_debug
|
|
32
|
-
from catalystwan.
|
|
33
|
-
from catalystwan.
|
|
34
|
-
from
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
if TYPE_CHECKING:
|
|
39
|
-
from catalystwan.api.api_container import APIContainer
|
|
40
|
-
from catalystwan.endpoints.endpoints_container import APIEndpointContainter
|
|
19
|
+
from catalystwan.core.metadata import USER_AGENT
|
|
20
|
+
from catalystwan.core.request_limiter import RequestLimiter
|
|
21
|
+
from catalystwan.core.response import ManagerResponse, response_history_debug
|
|
22
|
+
from catalystwan.core.version import NullVersion, parse_api_version
|
|
23
|
+
from catalystwan.core.vmanage_auth import create_vmanage_auth, vManageAuth
|
|
24
|
+
from packaging.version import Version # type: ignore
|
|
25
|
+
from requests import PreparedRequest, Request, Response, Session, get, head
|
|
26
|
+
from requests.exceptions import ConnectionError, HTTPError, RequestException
|
|
41
27
|
|
|
42
28
|
|
|
43
29
|
class UserMode(str, Enum):
|
|
@@ -70,14 +56,31 @@ def determine_session_type(
|
|
|
70
56
|
tenancy_mode: Optional[str], user_mode: Optional[str], view_mode: Optional[str]
|
|
71
57
|
) -> SessionType:
|
|
72
58
|
modes_map = {
|
|
73
|
-
(
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
59
|
+
(
|
|
60
|
+
TenancyMode.SINGLE_TENANT,
|
|
61
|
+
UserMode.TENANT,
|
|
62
|
+
ViewMode.TENANT,
|
|
63
|
+
): SessionType.SINGLE_TENANT,
|
|
64
|
+
(
|
|
65
|
+
TenancyMode.MULTI_TENANT,
|
|
66
|
+
UserMode.PROVIDER,
|
|
67
|
+
ViewMode.PROVIDER,
|
|
68
|
+
): SessionType.PROVIDER,
|
|
69
|
+
(
|
|
70
|
+
TenancyMode.MULTI_TENANT,
|
|
71
|
+
UserMode.PROVIDER,
|
|
72
|
+
ViewMode.TENANT,
|
|
73
|
+
): SessionType.PROVIDER_AS_TENANT,
|
|
74
|
+
(
|
|
75
|
+
TenancyMode.MULTI_TENANT,
|
|
76
|
+
UserMode.TENANT,
|
|
77
|
+
ViewMode.TENANT,
|
|
78
|
+
): SessionType.TENANT,
|
|
77
79
|
}
|
|
78
80
|
try:
|
|
79
81
|
return modes_map.get(
|
|
80
|
-
(TenancyMode(tenancy_mode), UserMode(user_mode), ViewMode(view_mode)),
|
|
82
|
+
(TenancyMode(tenancy_mode), UserMode(user_mode), ViewMode(view_mode)),
|
|
83
|
+
SessionType.NOT_DEFINED,
|
|
81
84
|
)
|
|
82
85
|
except ValueError:
|
|
83
86
|
return SessionType.NOT_DEFINED
|
|
@@ -145,7 +148,12 @@ def create_apigw_session(
|
|
|
145
148
|
),
|
|
146
149
|
logger=logger,
|
|
147
150
|
)
|
|
148
|
-
session_ = ManagerSession(
|
|
151
|
+
session_ = ManagerSession(
|
|
152
|
+
base_url=create_base_url(url, port),
|
|
153
|
+
auth=auth,
|
|
154
|
+
subdomain=subdomain,
|
|
155
|
+
logger=logger,
|
|
156
|
+
)
|
|
149
157
|
session_.state = ManagerSessionState.LOGIN
|
|
150
158
|
return session_
|
|
151
159
|
|
|
@@ -200,7 +208,7 @@ class ManagerResponseAdapter(Session):
|
|
|
200
208
|
return ManagerResponse(super().delete(url, *args, **kwargs))
|
|
201
209
|
|
|
202
210
|
|
|
203
|
-
class ManagerSession(ManagerResponseAdapter,
|
|
211
|
+
class ManagerSession(ManagerResponseAdapter, SessionInterface):
|
|
204
212
|
"""Base class for API sessions for vManage client.
|
|
205
213
|
|
|
206
214
|
Defines methods and handles session connectivity available for provider, provider as tenant, and tenant.
|
|
@@ -257,20 +265,6 @@ class ManagerSession(ManagerResponseAdapter, APIEndpointClient):
|
|
|
257
265
|
self._last_request: Optional[PreparedRequest] = None
|
|
258
266
|
self._limiter: RequestLimiter = request_limiter or RequestLimiter()
|
|
259
267
|
|
|
260
|
-
@cached_property
|
|
261
|
-
def api(self) -> APIContainer:
|
|
262
|
-
from catalystwan.api.api_container import APIContainer
|
|
263
|
-
|
|
264
|
-
self._api = APIContainer(self)
|
|
265
|
-
return self._api
|
|
266
|
-
|
|
267
|
-
@cached_property
|
|
268
|
-
def endpoints(self) -> APIEndpointContainter:
|
|
269
|
-
from catalystwan.endpoints.endpoints_container import APIEndpointContainter
|
|
270
|
-
|
|
271
|
-
self._endpoints = APIEndpointContainter(self)
|
|
272
|
-
return self._endpoints
|
|
273
|
-
|
|
274
268
|
@property
|
|
275
269
|
def state(self) -> ManagerSessionState:
|
|
276
270
|
return self._state
|
|
@@ -328,20 +322,21 @@ class ManagerSession(ManagerResponseAdapter, APIEndpointClient):
|
|
|
328
322
|
self._auth.clear(self._last_request)
|
|
329
323
|
self.auth = self._auth
|
|
330
324
|
|
|
331
|
-
def _fetch_server_info(self) ->
|
|
325
|
+
def _fetch_server_info(self) -> dict:
|
|
332
326
|
try:
|
|
333
|
-
server_info = self.server()
|
|
327
|
+
server_info = self.get("dataservice/client/server").json()["data"]
|
|
334
328
|
except DefaultPasswordError:
|
|
335
|
-
server_info =
|
|
329
|
+
server_info = {}
|
|
336
330
|
|
|
337
331
|
return server_info
|
|
338
332
|
|
|
339
|
-
def _finalize_login(self, server_info:
|
|
340
|
-
self.server_name = server_info.server
|
|
333
|
+
def _finalize_login(self, server_info: dict) -> None:
|
|
334
|
+
self.server_name = server_info.get("server")
|
|
335
|
+
self.platform_version = server_info.get("platformVersion") # type: ignore[assignment]
|
|
341
336
|
|
|
342
|
-
tenancy_mode = server_info.
|
|
343
|
-
user_mode = server_info.
|
|
344
|
-
view_mode = server_info.
|
|
337
|
+
tenancy_mode = server_info.get("tenancyMode")
|
|
338
|
+
user_mode = server_info.get("userMode")
|
|
339
|
+
view_mode = server_info.get("viewMode")
|
|
345
340
|
|
|
346
341
|
self._session_type = determine_session_type(tenancy_mode, user_mode, view_mode)
|
|
347
342
|
|
|
@@ -427,7 +422,9 @@ class ManagerSession(ManagerResponseAdapter, APIEndpointClient):
|
|
|
427
422
|
def request(self, method, url, *args, **kwargs) -> ManagerResponse:
|
|
428
423
|
full_url = self.get_full_url(url)
|
|
429
424
|
_kwargs = dict(kwargs)
|
|
430
|
-
if
|
|
425
|
+
if (
|
|
426
|
+
self.request_timeout is not None
|
|
427
|
+
): # do not modify user provided kwargs unless property is set
|
|
431
428
|
_kwargs.update(timeout=self.request_timeout)
|
|
432
429
|
try:
|
|
433
430
|
with self._limiter:
|
|
@@ -437,11 +434,15 @@ class ManagerSession(ManagerResponseAdapter, APIEndpointClient):
|
|
|
437
434
|
self.state = ManagerSessionState.WAIT_SERVER_READY_AFTER_RESTART
|
|
438
435
|
except RequestException as exception:
|
|
439
436
|
self.logger.debug(self.response_trace(exception.response, exception.request))
|
|
440
|
-
if self.state == ManagerSessionState.RESTART_IMMINENT and isinstance(
|
|
437
|
+
if self.state == ManagerSessionState.RESTART_IMMINENT and isinstance(
|
|
438
|
+
exception, ConnectionError
|
|
439
|
+
):
|
|
441
440
|
self.state = ManagerSessionState.WAIT_SERVER_READY_AFTER_RESTART
|
|
442
441
|
return self.request(method, url, *args, **_kwargs)
|
|
443
442
|
self.logger.debug(exception)
|
|
444
|
-
raise ManagerRequestException(
|
|
443
|
+
raise ManagerRequestException(
|
|
444
|
+
*exception.args, request=exception.request, response=exception.response
|
|
445
|
+
)
|
|
445
446
|
|
|
446
447
|
self._last_request = response.request
|
|
447
448
|
if response.jsessionid_expired and self.state in [
|
|
@@ -452,7 +453,9 @@ class ManagerSession(ManagerResponseAdapter, APIEndpointClient):
|
|
|
452
453
|
if self.state == ManagerSessionState.LOGIN_IN_PROGRESS:
|
|
453
454
|
self.state = ManagerSessionState.AUTH_SYNC
|
|
454
455
|
else:
|
|
455
|
-
self.logger.warning(
|
|
456
|
+
self.logger.warning(
|
|
457
|
+
"Logging to session. Reason: expired JSESSIONID detected in response headers"
|
|
458
|
+
)
|
|
456
459
|
self.state = ManagerSessionState.LOGIN
|
|
457
460
|
return self.request(method, url, *args, **_kwargs)
|
|
458
461
|
|
|
@@ -464,7 +467,9 @@ class ManagerSession(ManagerResponseAdapter, APIEndpointClient):
|
|
|
464
467
|
if self.state == ManagerSessionState.LOGIN_IN_PROGRESS:
|
|
465
468
|
self.state = ManagerSessionState.AUTH_SYNC
|
|
466
469
|
else:
|
|
467
|
-
self.logger.warning(
|
|
470
|
+
self.logger.warning(
|
|
471
|
+
"Logging to API GW session. Reason: unauthorized detected in response headers"
|
|
472
|
+
)
|
|
468
473
|
self.state = ManagerSessionState.LOGIN
|
|
469
474
|
return self.request(method, url, *args, **_kwargs)
|
|
470
475
|
|
|
@@ -476,67 +481,45 @@ class ManagerSession(ManagerResponseAdapter, APIEndpointClient):
|
|
|
476
481
|
except HTTPError as error:
|
|
477
482
|
self.logger.debug(error)
|
|
478
483
|
error_info = response.get_error_info()
|
|
479
|
-
raise ManagerHTTPError(
|
|
484
|
+
raise ManagerHTTPError(
|
|
485
|
+
*error.args,
|
|
486
|
+
error_info=error_info,
|
|
487
|
+
request=error.request,
|
|
488
|
+
response=error.response,
|
|
489
|
+
)
|
|
480
490
|
return response
|
|
481
491
|
|
|
482
492
|
def get_full_url(self, url_path: str) -> str:
|
|
483
493
|
"""Returns base API url plus given url path."""
|
|
484
494
|
return urljoin(self.base_url, url_path)
|
|
485
495
|
|
|
486
|
-
def about(self) -> AboutInfo:
|
|
487
|
-
return self.endpoints.client.about()
|
|
488
|
-
|
|
489
|
-
def server(self) -> ServerInfo:
|
|
490
|
-
server_info = self.endpoints.client.server()
|
|
491
|
-
self.platform_version = server_info.platform_version
|
|
492
|
-
return server_info
|
|
493
|
-
|
|
494
|
-
def get_data(self, url: str) -> Any:
|
|
495
|
-
return self.get_json(url)["data"]
|
|
496
|
-
|
|
497
|
-
def get_json(self, url: str) -> Any:
|
|
498
|
-
response = self.get(url)
|
|
499
|
-
return response.json()
|
|
500
|
-
|
|
501
|
-
def get_file(self, url: str, filename: Path) -> Response:
|
|
502
|
-
"""Get a file using session get.
|
|
503
|
-
|
|
504
|
-
Args:
|
|
505
|
-
url: dataservice api.
|
|
506
|
-
filename: Filename to write download file to.
|
|
507
|
-
|
|
508
|
-
Returns:
|
|
509
|
-
http response.
|
|
510
|
-
|
|
511
|
-
Example usage:
|
|
512
|
-
response = self.session.get_file(url, filename)
|
|
513
|
-
|
|
514
|
-
"""
|
|
515
|
-
with self.get(url) as response:
|
|
516
|
-
with open(filename, "wb") as file:
|
|
517
|
-
file.write(response.content)
|
|
518
|
-
return response
|
|
519
|
-
|
|
520
496
|
def get_tenant_id(self) -> str:
|
|
521
497
|
"""Gets tenant UUID for its subdomain.
|
|
522
498
|
|
|
523
499
|
Returns:
|
|
524
500
|
Tenant UUID.
|
|
525
501
|
"""
|
|
526
|
-
tenants =
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
502
|
+
tenants: List[dict] = list(
|
|
503
|
+
filter(
|
|
504
|
+
lambda x: x["subdomain"] == self.subdomain,
|
|
505
|
+
self.get("dataservice/tenant").json(),
|
|
506
|
+
)
|
|
507
|
+
)
|
|
508
|
+
try:
|
|
509
|
+
tenant = tenants[0]
|
|
510
|
+
except IndexError:
|
|
511
|
+
tenant = None
|
|
512
|
+
if tenant is None or tenant.get("tenantId") is None:
|
|
530
513
|
raise TenantSubdomainNotFound(f"Tenant ID for sub-domain: {self.subdomain} not found")
|
|
531
514
|
|
|
532
|
-
return tenant
|
|
515
|
+
return tenant["tenantId"]
|
|
533
516
|
|
|
534
517
|
def logout(self) -> None:
|
|
535
518
|
if self._added_to_auth:
|
|
536
519
|
self._auth.decrease_session_count()
|
|
537
520
|
self._auth.logout(self)
|
|
538
521
|
|
|
539
|
-
def close(self) -> None:
|
|
522
|
+
def close(self, *args) -> None:
|
|
540
523
|
"""Closes the ManagerSession.
|
|
541
524
|
|
|
542
525
|
This method is overrided from requests.Session.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
from dataclasses import Field
|
|
2
|
+
from typing import Any, ClassVar, Dict, Literal, Protocol, Union
|
|
3
|
+
|
|
4
|
+
from typing_extensions import Annotated
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def is_variable(s: Any):
|
|
8
|
+
return isinstance(s, str) and s.startswith(r"{{") and s.endswith(r"}}")
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def to_variable(s: str):
|
|
12
|
+
if is_variable(s):
|
|
13
|
+
return s
|
|
14
|
+
return r"{{" + s + r"}}"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
Variable = Annotated[str, is_variable, to_variable]
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class AliasPath(list): ...
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def get_alias(alias: Union[str, AliasPath, None]):
|
|
24
|
+
if isinstance(alias, AliasPath):
|
|
25
|
+
return alias[-1]
|
|
26
|
+
return alias
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
MODEL_TYPES = Literal["base", "feature_template", "parcel"]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class DataclassInstance(Protocol):
|
|
33
|
+
__dataclass_fields__: ClassVar[Dict[str, Field]]
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
# Copyright 2023 Cisco Systems, Inc. and its affiliates
|
|
2
|
-
|
|
3
1
|
import re
|
|
4
2
|
|
|
5
|
-
from packaging._structures import NegativeInfinity
|
|
6
|
-
from packaging.version import InvalidVersion, Version
|
|
3
|
+
from packaging._structures import NegativeInfinity
|
|
4
|
+
from packaging.version import InvalidVersion, Version
|
|
7
5
|
|
|
8
6
|
|
|
9
7
|
class NullVersion(Version):
|
|
@@ -16,7 +14,7 @@ class NullVersion(Version):
|
|
|
16
14
|
def __init__(self):
|
|
17
15
|
"""Initialize a NullVersion object."""
|
|
18
16
|
super().__init__("0")
|
|
19
|
-
self._key = (
|
|
17
|
+
self._key = ( # type: ignore
|
|
20
18
|
NegativeInfinity,
|
|
21
19
|
NegativeInfinity,
|
|
22
20
|
NegativeInfinity,
|
|
@@ -1,23 +1,20 @@
|
|
|
1
|
-
# Copyright 2022 Cisco Systems, Inc. and its affiliates
|
|
2
|
-
|
|
3
1
|
import logging
|
|
4
2
|
from http.cookies import SimpleCookie
|
|
5
3
|
from threading import RLock
|
|
6
4
|
from typing import Optional
|
|
7
5
|
from urllib.parse import urlparse
|
|
8
6
|
|
|
7
|
+
from catalystwan.abc import SessionInterface
|
|
8
|
+
from catalystwan.core.abstractions import AuthProtocol
|
|
9
|
+
from catalystwan.core.exceptions import CatalystwanException, TenantSubdomainNotFound
|
|
10
|
+
from catalystwan.core.metadata import USER_AGENT
|
|
11
|
+
from catalystwan.core.response import auth_response_debug
|
|
12
|
+
from catalystwan.core.version import NullVersion
|
|
9
13
|
from packaging.version import Version # type: ignore
|
|
10
14
|
from requests import PreparedRequest, Response, get, post
|
|
11
15
|
from requests.auth import AuthBase
|
|
12
16
|
from requests.cookies import RequestsCookieJar, merge_cookies
|
|
13
17
|
|
|
14
|
-
from catalystwan import USER_AGENT
|
|
15
|
-
from catalystwan.abstractions import APIEndpointClient, AuthProtocol
|
|
16
|
-
from catalystwan.exceptions import CatalystwanException, TenantSubdomainNotFound
|
|
17
|
-
from catalystwan.models.tenant import Tenant
|
|
18
|
-
from catalystwan.response import ManagerResponse, auth_response_debug
|
|
19
|
-
from catalystwan.version import NullVersion
|
|
20
|
-
|
|
21
18
|
|
|
22
19
|
class UnauthorizedAccessError(CatalystwanException):
|
|
23
20
|
"""Exception raised for wrong username/password or when user not authorized to access vManage.
|
|
@@ -71,7 +68,13 @@ class vManageAuth(AuthBase, AuthProtocol):
|
|
|
71
68
|
2. Get a cross-site request forgery prevention token, which is required for most POST operations.
|
|
72
69
|
"""
|
|
73
70
|
|
|
74
|
-
def __init__(
|
|
71
|
+
def __init__(
|
|
72
|
+
self,
|
|
73
|
+
username: str,
|
|
74
|
+
password: str,
|
|
75
|
+
logger: Optional[logging.Logger] = None,
|
|
76
|
+
verify: bool = False,
|
|
77
|
+
):
|
|
75
78
|
self.username = username
|
|
76
79
|
self.password = password
|
|
77
80
|
self.xsrftoken: Optional[str] = None
|
|
@@ -108,8 +111,13 @@ class vManageAuth(AuthBase, AuthProtocol):
|
|
|
108
111
|
"j_password": self.password,
|
|
109
112
|
}
|
|
110
113
|
url = self._base_url + "/j_security_check"
|
|
111
|
-
headers = {
|
|
112
|
-
|
|
114
|
+
headers = {
|
|
115
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
116
|
+
"User-Agent": USER_AGENT,
|
|
117
|
+
}
|
|
118
|
+
response: Response = post(
|
|
119
|
+
url=url, headers=headers, data=security_payload, verify=self.verify
|
|
120
|
+
)
|
|
113
121
|
self.sync_cookies(response.cookies)
|
|
114
122
|
self.logger.debug(auth_response_debug(response, str(self)))
|
|
115
123
|
if response.text != "" or not isinstance(self.jsessionid, str) or self.jsessionid == "":
|
|
@@ -132,11 +140,13 @@ class vManageAuth(AuthBase, AuthProtocol):
|
|
|
132
140
|
return response.text
|
|
133
141
|
|
|
134
142
|
def authenticate(self, request: PreparedRequest):
|
|
135
|
-
self._base_url =
|
|
143
|
+
self._base_url = (
|
|
144
|
+
f"{str(urlparse(request.url).scheme)}://{str(urlparse(request.url).netloc)}" # noqa: E231
|
|
145
|
+
)
|
|
136
146
|
self.get_jsessionid()
|
|
137
147
|
self.xsrftoken = self.get_xsrftoken()
|
|
138
148
|
|
|
139
|
-
def logout(self, client:
|
|
149
|
+
def logout(self, client: SessionInterface) -> None:
|
|
140
150
|
with self.lock:
|
|
141
151
|
if self.session_count > 1:
|
|
142
152
|
# Other sessions still use the auth, unregister and return
|
|
@@ -151,11 +161,17 @@ class vManageAuth(AuthBase, AuthProtocol):
|
|
|
151
161
|
headers = {"x-xsrf-token": self.xsrftoken, "User-Agent": USER_AGENT}
|
|
152
162
|
if version >= Version("20.12"):
|
|
153
163
|
response = post(
|
|
154
|
-
f"{self._base_url}/logout",
|
|
164
|
+
f"{self._base_url}/logout",
|
|
165
|
+
headers=headers,
|
|
166
|
+
cookies=self.cookies,
|
|
167
|
+
verify=self.verify,
|
|
155
168
|
)
|
|
156
169
|
else:
|
|
157
170
|
response = get(
|
|
158
|
-
f"{self._base_url}/logout",
|
|
171
|
+
f"{self._base_url}/logout",
|
|
172
|
+
headers=headers,
|
|
173
|
+
cookies=self.cookies,
|
|
174
|
+
verify=self.verify,
|
|
159
175
|
)
|
|
160
176
|
self.logger.debug(auth_response_debug(response, str(self)))
|
|
161
177
|
if response.status_code != 200:
|
|
@@ -225,7 +241,11 @@ class vSessionAuth(vManageAuth):
|
|
|
225
241
|
|
|
226
242
|
def get_tenantid(self) -> str:
|
|
227
243
|
url = self._base_url + "/dataservice/tenant"
|
|
228
|
-
headers = {
|
|
244
|
+
headers = {
|
|
245
|
+
"Content-Type": "application/json",
|
|
246
|
+
"User-Agent": USER_AGENT,
|
|
247
|
+
"x-xsrf-token": self.xsrftoken,
|
|
248
|
+
}
|
|
229
249
|
response: Response = get(
|
|
230
250
|
url=url,
|
|
231
251
|
cookies=self.cookies,
|
|
@@ -234,15 +254,20 @@ class vSessionAuth(vManageAuth):
|
|
|
234
254
|
)
|
|
235
255
|
self.sync_cookies(response.cookies)
|
|
236
256
|
self.logger.debug(auth_response_debug(response, str(self)))
|
|
237
|
-
tenants =
|
|
238
|
-
tenant = tenants.
|
|
257
|
+
tenants = response.json()
|
|
258
|
+
tenant = next((t for t in tenants if t.get("subDomain") == self.subdomain), None)
|
|
259
|
+
|
|
239
260
|
if not tenant or not tenant.tenant_id:
|
|
240
261
|
raise TenantSubdomainNotFound(f"Tenant ID for sub-domain: {self.subdomain} not found")
|
|
241
|
-
return tenant
|
|
262
|
+
return tenant["tenantId"]
|
|
242
263
|
|
|
243
264
|
def get_vsessionid(self, tenantid: str) -> str:
|
|
244
265
|
url = self._base_url + f"/dataservice/tenant/{tenantid}/vsessionid"
|
|
245
|
-
headers = {
|
|
266
|
+
headers = {
|
|
267
|
+
"Content-Type": "application/json",
|
|
268
|
+
"User-Agent": USER_AGENT,
|
|
269
|
+
"x-xsrf-token": self.xsrftoken,
|
|
270
|
+
}
|
|
246
271
|
response: Response = post(
|
|
247
272
|
url=url,
|
|
248
273
|
cookies=self.cookies,
|