zscaler-sdk-python 1.9.24__tar.gz → 1.9.26__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/PKG-INFO +1 -1
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/pyproject.toml +1 -1
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/__init__.py +1 -1
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/errors/zscaler_api_error.py +10 -2
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/helpers.py +8 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/request_executor.py +10 -1
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/utils.py +6 -1
- zscaler_sdk_python-1.9.26/zscaler/zcc/_field_introspect.py +181 -0
- zscaler_sdk_python-1.9.26/zscaler/zcc/_serialize.py +156 -0
- zscaler_sdk_python-1.9.26/zscaler/zcc/application_profiles.py +246 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/company.py +3 -3
- zscaler_sdk_python-1.9.26/zscaler/zcc/custom_ip_base_apps.py +124 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/forwarding_profile.py +6 -2
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/legacy.py +93 -16
- zscaler_sdk_python-1.9.26/zscaler/zcc/models/application_profiles.py +1014 -0
- zscaler_sdk_python-1.9.26/zscaler/zcc/models/company_info.py +1513 -0
- zscaler_sdk_python-1.9.26/zscaler/zcc/models/custom_ip_base_apps.py +126 -0
- zscaler_sdk_python-1.9.26/zscaler/zcc/models/forwardingprofile.py +490 -0
- zscaler_sdk_python-1.9.26/zscaler/zcc/models/predefined_ip_based_apps.py +132 -0
- zscaler_sdk_python-1.9.26/zscaler/zcc/models/process_based_apps.py +77 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/models/webpolicy.py +40 -33
- zscaler_sdk_python-1.9.26/zscaler/zcc/predefined_ip_based_apps.py +124 -0
- zscaler_sdk_python-1.9.26/zscaler/zcc/process_based_apps.py +124 -0
- zscaler_sdk_python-1.9.26/zscaler/zcc/web_policy.py +506 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/zcc_service.py +36 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/advanced_settings.py +3 -6
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/pac_files.py +1 -3
- zscaler_sdk_python-1.9.24/zscaler/zcc/models/forwardingprofile.py +0 -344
- zscaler_sdk_python-1.9.24/zscaler/zcc/models/getcompanyinfo.py +0 -1393
- zscaler_sdk_python-1.9.24/zscaler/zcc/web_policy.py +0 -206
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/LICENSE.md +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/README.md +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/api_client.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/cache/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/cache/cache.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/cache/no_op_cache.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/cache/zscaler_cache.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/config/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/config/config_setter.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/config/config_validator.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/constants.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/error_messages.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/errors/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/errors/error.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/errors/graphql_error.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/errors/http_error.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/errors/response_checker.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/exceptions/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/exceptions/exceptions.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/logger.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/oneapi_client.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/oneapi_collection.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/oneapi_http_client.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/oneapi_oauth_client.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/oneapi_object.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/oneapi_response.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ratelimiter/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ratelimiter/ratelimiter.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/types.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/user_agent.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zaiguard/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zaiguard/legacy.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zaiguard/models/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zaiguard/models/policy_detection.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zaiguard/policy_detection.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zaiguard/zaiguard_service.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zbi/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zbi/custom_apps.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zbi/models/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zbi/models/custom_apps.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zbi/models/report_configs.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zbi/report_configs.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zbi/reports.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zbi/zbi_service.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/admin_user.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/devices.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/entitlements.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/fail_open_policy.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/models/admin_roles.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/models/admin_user.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/models/devices.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/models/failopenpolicy.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/models/manage_pass.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/models/secrets_otp.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/models/secrets_passwords.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/models/trustednetworks.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/models/webappservice.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/models/webprivacy.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/models/zdxgroupentitlements.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/models/zpagroupentitlements.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/secrets.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/trusted_networks.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/web_app_service.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zcc/web_privacy.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zdx/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zdx/admin.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zdx/alerts.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zdx/apps.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zdx/devices.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zdx/inventory.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zdx/legacy.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zdx/models/administration.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zdx/models/alerts.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zdx/models/application_users.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zdx/models/applications.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zdx/models/call_quality_metrics.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zdx/models/common.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zdx/models/devices.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zdx/models/snapshot.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zdx/models/software_inventory.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zdx/models/troubleshooting.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zdx/models/users.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zdx/snapshot.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zdx/troubleshooting.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zdx/users.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zdx/zdx_service.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zeasm/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zeasm/findings.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zeasm/lookalike_domains.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zeasm/models/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zeasm/models/common.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zeasm/models/findings.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zeasm/models/lookalike_domains.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zeasm/models/organizations.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zeasm/organizations.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zeasm/zeasm_service.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/activate.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/admin_roles.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/admin_users.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/advanced_settings.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/alert_subscriptions.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/apptotal.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/atp_policy.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/audit_logs.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/authentication_settings.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/bandwidth_classes.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/bandwidth_control_rules.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/browser_control_settings.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/casb_dlp_rules.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/casb_malware_rules.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/cloud_app_instances.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/cloud_applications.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/cloud_browser_isolation.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/cloud_firewall.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/cloud_firewall_dns.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/cloud_firewall_ips.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/cloud_firewall_rules.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/cloud_nss.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/cloud_to_cloud_ir.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/cloudappcontrol.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/custom_file_types.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/dedicated_ip_gateways.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/device_management.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/dlp_dictionary.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/dlp_engine.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/dlp_resources.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/dlp_templates.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/dlp_web_rules.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/dns_gatways.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/end_user_notification.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/file_type_control_rule.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/forwarding_control.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/ftp_control_policy.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/gre_tunnel.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/intermediate_certificates.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/iot_report.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/ipv6_config.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/legacy.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/locations.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/malware_protection_policy.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/mobile_threat_settings.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/activation.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/admin_roles.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/admin_users.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/advanced_threat_settings.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/alert_subscriptions.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/apptotal.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/authentication_settings.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/bandwidth_classes.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/bandwidth_control_rules.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/browser_control_settings.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/casb_dlp_rules.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/casb_malware_rules.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/cloud_app_instances.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/cloud_app_policy.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/cloud_browser_isolation.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/cloud_firewall_app_services.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/cloud_firewall_destination_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/cloud_firewall_dns_rules.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/cloud_firewall_ips_rules.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/cloud_firewall_nw_application_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/cloud_firewall_nw_applications.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/cloud_firewall_nw_service.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/cloud_firewall_nw_service_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/cloud_firewall_rules.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/cloud_firewall_source_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/cloud_firewall_time_windows.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/cloud_nss.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/cloud_to_cloud_ir.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/cloudappcontrol.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/common.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/custom_file_types.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/dedicated_ip_gateways.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/device_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/devices.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/dlp_dictionary.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/dlp_engine.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/dlp_resources.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/dlp_templates.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/dlp_web_rules.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/dns_gateways.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/endusernotification.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/filetyperules.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/forwarding_control_policy.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/ftp_control_policy.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/gre_recommended_list.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/gre_tunnel_info.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/gre_tunnels.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/gre_vips.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/intermediate_certificates.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/iotreport.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/ipv6_config.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/location_group.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/location_management.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/malware_protection_settings.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/mobile_threat_settings.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/nat_control_policy.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/nss_servers.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/organization_information.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/proxies.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/proxy_gateways.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/remoteassistance.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/risk_profiles.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/rule_labels.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/saas_security_api.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/sandbox.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/sandboxrules.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/security_policy_settings.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/shadow_it_report.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/ssl_inspection_rules.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/subclouds.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/system_audit.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/tenancy_restriction_profile.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/time_intervals.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/traffic_capture.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/traffic_datacenters.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/traffic_dc_exclusions.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/traffic_extranet.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/traffic_static_ip.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/traffic_vpn_credentials.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/url_filter_cloud_app_settings.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/url_filtering_rules.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/urlcategory.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/user_management.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/vzen_clusters.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/vzen_nodes.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/workload_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/models/zpa_gateway.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/nat_control_policy.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/nss_servers.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/organization_information.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/pac_files.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/policy_export.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/proxies.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/remote_assistance.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/risk_profiles.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/rule_labels.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/saas_security_api.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/sandbox.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/sandbox_rules.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/security_policy_settings.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/shadow_it_report.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/ssl_inspection_rules.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/sub_clouds.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/system_audit.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/tenancy_restriction_profile.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/time_intervals.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/traffic_capture.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/traffic_datacenters.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/traffic_extranet.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/traffic_static_ip.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/traffic_vpn_credentials.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/url_categories.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/url_filtering.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/user_management.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/vzen_clusters.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/vzen_nodes.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/workload_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/zia_service.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zia/zpa_gateway.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zid/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zid/api_client.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zid/groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zid/models/api_client.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zid/models/common.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zid/models/groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zid/models/resource_servers.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zid/models/user_entitlement.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zid/models/users.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zid/resource_servers.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zid/user_entitlement.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zid/users.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zid/zid_service.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zins/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zins/cyber_security.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zins/firewall.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zins/iot.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zins/models/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zins/models/common.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zins/models/enums.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zins/models/inputs.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zins/saas_security.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zins/shadow_it.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zins/web_traffic.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zins/zins_service.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zms/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zms/agent_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zms/agents.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zms/app_catalog.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zms/app_zones.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zms/models/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zms/models/common.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zms/models/enums.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zms/models/inputs.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zms/nonces.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zms/policy_rules.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zms/resource_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zms/resources.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zms/tags.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zms/zms_service.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/admin_sso_controller.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/administrator_controller.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/api_keys.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/app_connector_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/app_connector_schedule.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/app_connectors.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/app_protection.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/app_segment_by_type.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/app_segments_ba.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/app_segments_ba_v2.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/app_segments_inspection.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/app_segments_pra.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/application_segment.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/branch_connector_group.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/branch_connectors.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/browser_protection.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/c2c_ip_ranges.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/cbi_banner.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/cbi_certificate.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/cbi_profile.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/cbi_region.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/cbi_zpa_profile.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/certificates.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/client_settings.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/cloud_connector_controller.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/cloud_connector_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/config_override_controller.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/customer_controller.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/customer_domain.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/customer_dr_tool.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/customer_version_profile.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/emergency_access.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/enrollment_certificates.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/extranet_resource.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/idp.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/legacy.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/location_controller.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/lss.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/machine_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/managed_browser_profile.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/microtenants.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/administrator_controller.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/api_keys.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/app_connector_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/app_connector_schedule.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/app_connectors.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/app_protection_predefined_controls.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/app_protection_profile.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/application_segment.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/application_segment_lb.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/application_servers.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/branch_connectors.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/browser_protection.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/c2c_ip_ranges.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/cbi_banner.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/cbi_certificate.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/cbi_profile.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/cbi_region.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/cbi_zpa_profile.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/certificates.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/client_settings.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/cloud_connector_controller.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/cloud_connector_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/common.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/config_override_controller.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/customer_controller.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/customer_domain.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/customer_dr_tool.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/customer_version_profile.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/emergency_access.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/enrollment_certificates.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/idp.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/lss.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/machine_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/managed_browser_profile.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/microtenants.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/npn_client_controller.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/oauth2_user_code.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/policyset_controller_v1.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/policyset_controller_v2.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/posture_profiles.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/pra_approval.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/pra_console.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/pra_cred_pool_controller.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/pra_credential.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/pra_portal.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/private_cloud_controller.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/private_cloud_group.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/provisioning_keys.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/role_controller.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/saml_attributes.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/scim_attributes.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/scim_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/segment_group.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/server_group.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/service_edge_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/service_edge_schedule.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/service_edges.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/stepup_auth_level.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/tag_group.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/tag_key.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/tag_namespace.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/trusted_network.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/user_portal_aup.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/user_portal_controller.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/user_portal_link.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/models/zia_customer_config.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/npn_client_controller.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/oauth2_user_code.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/policies.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/posture_profiles.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/pra_approval.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/pra_console.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/pra_credential.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/pra_credential_pool.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/pra_portal.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/private_cloud_controller.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/private_cloud_group.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/provisioning.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/role_controller.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/saml_attributes.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/scim_attributes.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/scim_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/segment_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/server_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/servers.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/service_edge_group.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/service_edge_schedule.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/service_edges.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/stepup_auth_level.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/tag_group.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/tag_key.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/tag_namespace.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/trusted_networks.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/user_portal_aup.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/user_portal_controller.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/user_portal_link.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/workload_tag_group.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/zia_customer_config.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zpa/zpa_service.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/alarms.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/api_key.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/app_connector_config.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/devices.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/groups_router.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/legacy.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/logs.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/models/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/models/alarms.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/models/api_key.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/models/app_connector_config.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/models/common.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/models/devices.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/models/groups_router.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/models/logs.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/models/policy_comments.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/models/ransomware_kill.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/models/site.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/models/site2site_vpn.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/models/template_router.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/policy_comments.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/ransomware_kill.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/site.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/site2site_vpn.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/template_router.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztb/ztb_service.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/account_details.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/account_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/activation.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/admin_roles.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/admin_users.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/api_keys.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/discovery_service.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/ec_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/forwarding_gateways.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/forwarding_rules.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/ip_destination_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/ip_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/ip_source_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/legacy.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/location_management.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/location_template.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/models/account_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/models/activation.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/models/admin_roles.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/models/admin_users.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/models/api_keys.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/models/common.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/models/discovery_service.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/models/ec_group_vm.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/models/ecgroup.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/models/forwarding_gateways.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/models/forwarding_rules.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/models/ip_destination_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/models/ip_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/models/ip_source_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/models/location_management.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/models/location_templates.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/models/nw_service.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/models/nw_service_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/models/provisioning_url.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/models/public_cloud_info.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/models/traffic_vpn_credentials.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/models/workload_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/models/zpa_resources.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/nw_service.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/nw_service_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/provisioning_url.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/public_cloud_info.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/workload_groups.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/ztw/ztw_service.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zwa/__init__.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zwa/audit_logs.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zwa/dlp_incidents.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zwa/legacy.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zwa/models/audit_logs.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zwa/models/change_history.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zwa/models/common.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zwa/models/generated_tickets.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zwa/models/incident_details.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zwa/models/incident_evidence.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zwa/models/incident_group_search.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zwa/models/incident_search.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zwa/models/incident_trigger.py +0 -0
- {zscaler_sdk_python-1.9.24 → zscaler_sdk_python-1.9.26}/zscaler/zwa/zwa_service.py +0 -0
|
@@ -17,10 +17,18 @@ class ZscalerAPIError(Exception):
|
|
|
17
17
|
response_body = {"message": str(response_body)}
|
|
18
18
|
|
|
19
19
|
self.error_code: Optional[Union[str, int]] = (
|
|
20
|
-
response_body.get("code")
|
|
20
|
+
response_body.get("code")
|
|
21
|
+
or response_body.get("id")
|
|
22
|
+
or response_body.get("errorCode")
|
|
23
|
+
# ZCC error envelope: {"title": "INVALID_FIELD_VALUE", "errorCode": null, ...}
|
|
24
|
+
or response_body.get("title")
|
|
21
25
|
)
|
|
22
26
|
self.error_message: Optional[str] = (
|
|
23
|
-
response_body.get("message")
|
|
27
|
+
response_body.get("message")
|
|
28
|
+
or response_body.get("reason")
|
|
29
|
+
or response_body.get("errorDetails")
|
|
30
|
+
# ZCC error envelope: {"errorMessage": "Policy with policyId: ...", ...}
|
|
31
|
+
or response_body.get("errorMessage")
|
|
24
32
|
)
|
|
25
33
|
self.params: List[Any] = response_body.get("params", [])
|
|
26
34
|
self.path: Optional[str] = response_body.get("path")
|
|
@@ -288,6 +288,14 @@ def to_lower_camel_case(string):
|
|
|
288
288
|
"predefined_adp_controls": "predefinedADPControls",
|
|
289
289
|
"runtime_os": "runtimeOS",
|
|
290
290
|
"default_csp": "defaultCSP",
|
|
291
|
+
# ZCC WebPolicy: API expects this top-level key in snake_case.
|
|
292
|
+
"exit_password": "exit_password",
|
|
293
|
+
# ZCC WebPolicy / PolicyExtension: keys with embedded uppercase
|
|
294
|
+
# acronyms (WPAD, ZPA, TRP) the heuristic camel-casing cannot
|
|
295
|
+
# produce on its own.
|
|
296
|
+
"override_wpad": "overrideWPAD",
|
|
297
|
+
"instant_force_zpa_reauth_state_update": "instantForceZPAReauthStateUpdate",
|
|
298
|
+
"support_zpa_search_domains_in_trp": "supportZPASearchDomainsInTRP",
|
|
291
299
|
}
|
|
292
300
|
|
|
293
301
|
if string in FIELD_EXCEPTIONS:
|
|
@@ -358,9 +358,18 @@ class RequestExecutor:
|
|
|
358
358
|
# Special handling for ZCC service - use selective conversion
|
|
359
359
|
if "/zcc/" in endpoint and body:
|
|
360
360
|
from zscaler.helpers import convert_keys_to_camel_case_selective
|
|
361
|
+
from zscaler.zcc._serialize import _ZccWireBody
|
|
361
362
|
from zscaler.zcc.models.webpolicy import WebPolicy
|
|
362
363
|
|
|
363
|
-
#
|
|
364
|
+
# If the API client method already serialized the body via the
|
|
365
|
+
# model-driven ``zcc_to_wire`` helper, every key is already in
|
|
366
|
+
# the exact wire form declared by the schema. Skip any further
|
|
367
|
+
# conversion to preserve the model's intent verbatim.
|
|
368
|
+
if isinstance(body, _ZccWireBody):
|
|
369
|
+
return dict(body)
|
|
370
|
+
|
|
371
|
+
# Legacy path for ZCC endpoints that have not yet been migrated
|
|
372
|
+
# to the model-driven serializer.
|
|
364
373
|
body = convert_keys_to_camel_case_selective(body, WebPolicy.SNAKE_CASE_KEYS)
|
|
365
374
|
return body
|
|
366
375
|
|
|
@@ -847,7 +847,12 @@ def zcc_param_mapper(func):
|
|
|
847
847
|
raw_device_type = query_params.get("device_type") or body.get("device_type")
|
|
848
848
|
|
|
849
849
|
if raw_device_type:
|
|
850
|
-
|
|
850
|
+
# Accept str ("windows"), int (3, matching the API's numeric
|
|
851
|
+
# device_type code), or a list of either. Scalars get wrapped
|
|
852
|
+
# into a single-element list so the comprehension below can
|
|
853
|
+
# iterate uniformly.
|
|
854
|
+
if isinstance(raw_device_type, (str, int)):
|
|
855
|
+
raw_device_type = [raw_device_type]
|
|
851
856
|
mapped = [
|
|
852
857
|
str(zcc_param_map["os"].get(dt.lower()) if isinstance(dt, str) else dt)
|
|
853
858
|
for dt in raw_device_type
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"""
|
|
2
|
+
ZCC-only model introspection.
|
|
3
|
+
|
|
4
|
+
This module derives the wire-level field mapping for any ZCC ZscalerObject
|
|
5
|
+
subclass directly from its existing ``request_format`` and ``__init__``
|
|
6
|
+
implementations. It does not modify or require any change to the model
|
|
7
|
+
classes themselves.
|
|
8
|
+
|
|
9
|
+
The serializer in ``_serialize.py`` uses the maps produced here to convert
|
|
10
|
+
user-supplied snake_case bodies into the exact key casing the ZCC API
|
|
11
|
+
expects, without relying on the heuristic snake-to-camel converter or its
|
|
12
|
+
hand-maintained ``FIELD_EXCEPTIONS`` table.
|
|
13
|
+
|
|
14
|
+
This module applies to ZCC only and does not affect other services.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
19
|
+
import ast
|
|
20
|
+
import inspect
|
|
21
|
+
import sys
|
|
22
|
+
import textwrap
|
|
23
|
+
from functools import lru_cache
|
|
24
|
+
from typing import Any, Dict, Set, Type
|
|
25
|
+
|
|
26
|
+
from zscaler.oneapi_object import ZscalerObject
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class _AttrTracer:
|
|
30
|
+
"""Sentinel that records the snake_case attribute name accessed on the tracer."""
|
|
31
|
+
|
|
32
|
+
__slots__ = ("name",)
|
|
33
|
+
|
|
34
|
+
def __init__(self, name: str) -> None:
|
|
35
|
+
self.name = name
|
|
36
|
+
|
|
37
|
+
def __repr__(self) -> str: # pragma: no cover - debugging aid only
|
|
38
|
+
return f"_AttrTracer({self.name!r})"
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _make_tracer(cls: Type[ZscalerObject]):
|
|
42
|
+
"""
|
|
43
|
+
Return an instance that masquerades as ``cls`` and records every attribute
|
|
44
|
+
access. Used to introspect ``cls.request_format`` without running the
|
|
45
|
+
real ``__init__`` logic.
|
|
46
|
+
|
|
47
|
+
A dynamic subclass is required because ``request_format`` calls
|
|
48
|
+
``super()`` (zero-arg form) which validates that ``self`` is an instance
|
|
49
|
+
of the enclosing class.
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
accessed: Dict[str, _AttrTracer] = {}
|
|
53
|
+
|
|
54
|
+
class _Tracer(cls): # type: ignore[misc, valid-type]
|
|
55
|
+
# ``__getattr__`` only fires on missing attribute lookup, so it does
|
|
56
|
+
# not interfere with method dispatch or ``super()`` resolution.
|
|
57
|
+
def __getattr__(self, name: str):
|
|
58
|
+
if name not in accessed:
|
|
59
|
+
accessed[name] = _AttrTracer(name)
|
|
60
|
+
return accessed[name]
|
|
61
|
+
|
|
62
|
+
inst = _Tracer.__new__(_Tracer)
|
|
63
|
+
return inst, accessed
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
@lru_cache(maxsize=None)
|
|
67
|
+
def field_map(cls: Type[ZscalerObject]) -> Dict[str, str]:
|
|
68
|
+
"""
|
|
69
|
+
Return ``{snake_case_attr -> wire_key}`` for ``cls`` by tracing its
|
|
70
|
+
``request_format`` method.
|
|
71
|
+
|
|
72
|
+
Only entries whose value is a direct ``self.<attr>`` reference are
|
|
73
|
+
captured. Literal/computed values (rare in current ZCC models) are
|
|
74
|
+
intentionally skipped because they are not user-controllable and have
|
|
75
|
+
no snake_case form.
|
|
76
|
+
"""
|
|
77
|
+
|
|
78
|
+
tracer, _ = _make_tracer(cls)
|
|
79
|
+
raw = cls.request_format(tracer) # type: ignore[arg-type]
|
|
80
|
+
return {value.name: key for key, value in raw.items() if isinstance(value, _AttrTracer)}
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
@lru_cache(maxsize=None)
|
|
84
|
+
def wire_keys(cls: Type[ZscalerObject]) -> Set[str]:
|
|
85
|
+
"""Return the set of wire-level keys declared by ``cls.request_format``."""
|
|
86
|
+
return set(field_map(cls).values())
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def _extract_nested_class_name(value_node: ast.AST) -> str | None:
|
|
90
|
+
"""
|
|
91
|
+
Extract the name of a likely nested model class from the RHS of an
|
|
92
|
+
``Assign`` node in a model's ``__init__``.
|
|
93
|
+
|
|
94
|
+
Recognized patterns (matching the conventions used throughout
|
|
95
|
+
``zscaler/zcc/models``):
|
|
96
|
+
|
|
97
|
+
* ``self.x = NestedClass(config[...])``
|
|
98
|
+
* ``self.x = ZscalerCollection.form_list(..., NestedClass)``
|
|
99
|
+
* Either of the above wrapped in a conditional expression
|
|
100
|
+
(``A if cond else B``).
|
|
101
|
+
"""
|
|
102
|
+
|
|
103
|
+
if isinstance(value_node, ast.Call):
|
|
104
|
+
func = value_node.func
|
|
105
|
+
if isinstance(func, ast.Name):
|
|
106
|
+
return func.id
|
|
107
|
+
if (
|
|
108
|
+
isinstance(func, ast.Attribute)
|
|
109
|
+
and isinstance(func.value, ast.Name)
|
|
110
|
+
and func.value.id == "ZscalerCollection"
|
|
111
|
+
and func.attr == "form_list"
|
|
112
|
+
and value_node.args
|
|
113
|
+
):
|
|
114
|
+
last = value_node.args[-1]
|
|
115
|
+
if isinstance(last, ast.Name):
|
|
116
|
+
return last.id
|
|
117
|
+
return None
|
|
118
|
+
|
|
119
|
+
if isinstance(value_node, ast.IfExp):
|
|
120
|
+
for branch in (value_node.body, value_node.orelse):
|
|
121
|
+
name = _extract_nested_class_name(branch)
|
|
122
|
+
if name is not None:
|
|
123
|
+
return name
|
|
124
|
+
|
|
125
|
+
return None
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
@lru_cache(maxsize=None)
|
|
129
|
+
def nested_types(cls: Type[ZscalerObject]) -> Dict[str, Type[ZscalerObject]]:
|
|
130
|
+
"""
|
|
131
|
+
Inspect ``cls.__init__`` and return ``{snake_case_attr -> NestedClass}``
|
|
132
|
+
for every attribute whose value is constructed from another
|
|
133
|
+
``ZscalerObject`` subclass.
|
|
134
|
+
|
|
135
|
+
This drives recursive serialization: when a nested attribute is present
|
|
136
|
+
in the user's body, the serializer uses the corresponding nested class
|
|
137
|
+
as the schema for that sub-tree.
|
|
138
|
+
"""
|
|
139
|
+
|
|
140
|
+
try:
|
|
141
|
+
source = textwrap.dedent(inspect.getsource(cls.__init__))
|
|
142
|
+
except (OSError, TypeError):
|
|
143
|
+
return {}
|
|
144
|
+
|
|
145
|
+
try:
|
|
146
|
+
tree = ast.parse(source)
|
|
147
|
+
except SyntaxError:
|
|
148
|
+
return {}
|
|
149
|
+
|
|
150
|
+
module = sys.modules.get(cls.__module__)
|
|
151
|
+
if module is None:
|
|
152
|
+
return {}
|
|
153
|
+
|
|
154
|
+
if not tree.body or not isinstance(tree.body[0], ast.FunctionDef):
|
|
155
|
+
return {}
|
|
156
|
+
|
|
157
|
+
result: Dict[str, Type[ZscalerObject]] = {}
|
|
158
|
+
for node in ast.walk(tree.body[0]):
|
|
159
|
+
if not isinstance(node, ast.Assign) or len(node.targets) != 1:
|
|
160
|
+
continue
|
|
161
|
+
target = node.targets[0]
|
|
162
|
+
if not (isinstance(target, ast.Attribute) and isinstance(target.value, ast.Name) and target.value.id == "self"):
|
|
163
|
+
continue
|
|
164
|
+
attr_name = target.attr
|
|
165
|
+
if attr_name in result:
|
|
166
|
+
continue
|
|
167
|
+
class_name = _extract_nested_class_name(node.value)
|
|
168
|
+
if class_name is None:
|
|
169
|
+
continue
|
|
170
|
+
candidate = getattr(module, class_name, None)
|
|
171
|
+
if isinstance(candidate, type) and issubclass(candidate, ZscalerObject) and candidate is not ZscalerObject:
|
|
172
|
+
result[attr_name] = candidate
|
|
173
|
+
|
|
174
|
+
return result
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def reset_caches() -> None:
|
|
178
|
+
"""Clear all introspection caches. Intended for tests only."""
|
|
179
|
+
field_map.cache_clear()
|
|
180
|
+
wire_keys.cache_clear()
|
|
181
|
+
nested_types.cache_clear()
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"""
|
|
2
|
+
ZCC-only request body serializer.
|
|
3
|
+
|
|
4
|
+
This module converts a user-supplied request body (typically containing
|
|
5
|
+
snake_case keys) into the exact wire-key casing declared by a ZCC model
|
|
6
|
+
class via its ``request_format`` method.
|
|
7
|
+
|
|
8
|
+
Design goals:
|
|
9
|
+
|
|
10
|
+
* The model class is the single source of truth for wire keys.
|
|
11
|
+
* No reliance on heuristic snake-to-camel conversion or hand-maintained
|
|
12
|
+
``FIELD_EXCEPTIONS`` tables.
|
|
13
|
+
* Per-class scoping: the same snake_case attribute can map to different
|
|
14
|
+
wire keys depending on which model class it belongs to (e.g.
|
|
15
|
+
``WindowsPolicy.disable_password`` -> ``disable_password`` (snake on
|
|
16
|
+
the wire) vs ``LinuxPolicy.disable_password`` -> ``disablePassword``).
|
|
17
|
+
* camelCase wire keys passed by the user are accepted as-is; unknown keys
|
|
18
|
+
pass through unchanged so we never silently drop or mangle data.
|
|
19
|
+
|
|
20
|
+
This module applies to ZCC only and must not be used by other services.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
from __future__ import annotations
|
|
24
|
+
|
|
25
|
+
from typing import Any, Type
|
|
26
|
+
|
|
27
|
+
from zscaler.helpers import convert_keys_to_camel_case_selective, to_lower_camel_case
|
|
28
|
+
from zscaler.oneapi_object import ZscalerObject
|
|
29
|
+
|
|
30
|
+
from ._field_introspect import field_map, nested_types, wire_keys
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _legacy_snake_preserve_keys() -> "set[str]":
|
|
34
|
+
"""
|
|
35
|
+
The set of snake_case keys the legacy ZCC converter has historically
|
|
36
|
+
preserved on the wire (currently ``WebPolicy.SNAKE_CASE_KEYS``).
|
|
37
|
+
|
|
38
|
+
Treated as a transitional fallback: any key listed here passes through
|
|
39
|
+
the serializer unchanged when the per-class model does not declare it.
|
|
40
|
+
Sourced lazily to avoid a circular import at module load time.
|
|
41
|
+
"""
|
|
42
|
+
from zscaler.zcc.models.webpolicy import WebPolicy
|
|
43
|
+
|
|
44
|
+
return WebPolicy.SNAKE_CASE_KEYS
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class _ZccWireBody(dict):
|
|
48
|
+
"""
|
|
49
|
+
Marker dict subclass indicating that the body has already been
|
|
50
|
+
serialized into ZCC wire form by :func:`zcc_to_wire`.
|
|
51
|
+
|
|
52
|
+
The request executor checks ``isinstance(body, _ZccWireBody)`` to skip
|
|
53
|
+
its legacy ``convert_keys_to_camel_case_selective`` step for ZCC
|
|
54
|
+
endpoints.
|
|
55
|
+
|
|
56
|
+
Acts as a regular dict for ``json.dumps`` and downstream consumers.
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def _resolve_wire_key(provided_key: str, fmap: "dict[str, str]", wkeys: "set[str]") -> str:
|
|
61
|
+
"""Return the wire-form key for ``provided_key``.
|
|
62
|
+
|
|
63
|
+
Resolution order (model first, legacy behaviour as a strict superset):
|
|
64
|
+
|
|
65
|
+
1. Snake_case attribute name declared by the model -> use the wire
|
|
66
|
+
key declared in ``request_format``.
|
|
67
|
+
2. Wire-form key already declared by the model -> keep as-is.
|
|
68
|
+
3. Snake_case key listed in the legacy ``WebPolicy.SNAKE_CASE_KEYS``
|
|
69
|
+
set -> preserve as snake_case. This covers fields the API expects
|
|
70
|
+
in snake_case but the SDK model has not yet incorporated (e.g.
|
|
71
|
+
top-level ``allowed_apps``, ``bypass_mms_apps``).
|
|
72
|
+
4. Otherwise -> fall back to ``to_lower_camel_case`` (which honours
|
|
73
|
+
the existing ``FIELD_EXCEPTIONS`` table). Already-camelCase keys
|
|
74
|
+
pass through unchanged because the converter is a no-op for
|
|
75
|
+
strings without an underscore.
|
|
76
|
+
"""
|
|
77
|
+
if provided_key in fmap:
|
|
78
|
+
return fmap[provided_key]
|
|
79
|
+
if provided_key in wkeys:
|
|
80
|
+
return provided_key
|
|
81
|
+
if provided_key in _legacy_snake_preserve_keys():
|
|
82
|
+
return provided_key
|
|
83
|
+
return to_lower_camel_case(provided_key)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def _resolve_nested_cls(
|
|
87
|
+
provided_key: str,
|
|
88
|
+
nested: "dict[str, Type[ZscalerObject]]",
|
|
89
|
+
fmap: "dict[str, str]",
|
|
90
|
+
) -> "Type[ZscalerObject] | None":
|
|
91
|
+
"""
|
|
92
|
+
Look up the nested model class for ``provided_key`` (which may be the
|
|
93
|
+
snake_case attribute name or the wire-form key). Returns ``None`` when
|
|
94
|
+
the key does not designate a nested structure.
|
|
95
|
+
"""
|
|
96
|
+
if provided_key in nested:
|
|
97
|
+
return nested[provided_key]
|
|
98
|
+
for snake_name, wire_name in fmap.items():
|
|
99
|
+
if wire_name == provided_key and snake_name in nested:
|
|
100
|
+
return nested[snake_name]
|
|
101
|
+
return None
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def zcc_to_wire(body: Any, schema_cls: Type[ZscalerObject]) -> Any:
|
|
105
|
+
"""
|
|
106
|
+
Convert ``body`` to the exact wire shape declared by ``schema_cls``.
|
|
107
|
+
|
|
108
|
+
Args:
|
|
109
|
+
body: The user's request body. May be a dict, a list of dicts, a
|
|
110
|
+
``ZscalerObject`` instance, or a primitive. Non-dict / non-list
|
|
111
|
+
primitives are returned unchanged.
|
|
112
|
+
schema_cls: The ZCC model class that defines the wire shape. Must
|
|
113
|
+
be a subclass of :class:`ZscalerObject`.
|
|
114
|
+
|
|
115
|
+
Returns:
|
|
116
|
+
A :class:`_ZccWireBody` dict (for dict inputs), a list (for list
|
|
117
|
+
inputs whose elements are dicts), or the original value otherwise.
|
|
118
|
+
"""
|
|
119
|
+
if isinstance(body, ZscalerObject):
|
|
120
|
+
body = body.request_format()
|
|
121
|
+
|
|
122
|
+
if isinstance(body, list):
|
|
123
|
+
return [zcc_to_wire(item, schema_cls) if isinstance(item, dict) else item for item in body]
|
|
124
|
+
|
|
125
|
+
if not isinstance(body, dict):
|
|
126
|
+
return body
|
|
127
|
+
|
|
128
|
+
fmap = field_map(schema_cls)
|
|
129
|
+
nested = nested_types(schema_cls)
|
|
130
|
+
wkeys = wire_keys(schema_cls)
|
|
131
|
+
|
|
132
|
+
snake_preserve = _legacy_snake_preserve_keys()
|
|
133
|
+
|
|
134
|
+
out = _ZccWireBody()
|
|
135
|
+
for raw_key, value in body.items():
|
|
136
|
+
wire_key = _resolve_wire_key(raw_key, fmap, wkeys)
|
|
137
|
+
nested_cls = _resolve_nested_cls(raw_key, nested, fmap)
|
|
138
|
+
|
|
139
|
+
if nested_cls is not None:
|
|
140
|
+
# Schema-aware recursion: the model declares a class for this
|
|
141
|
+
# sub-tree, so use it as the schema for the recursive call.
|
|
142
|
+
if isinstance(value, dict):
|
|
143
|
+
value = zcc_to_wire(value, nested_cls)
|
|
144
|
+
elif isinstance(value, list):
|
|
145
|
+
value = [zcc_to_wire(item, nested_cls) if isinstance(item, dict) else item for item in value]
|
|
146
|
+
elif isinstance(value, (dict, list)) and not isinstance(value, _ZccWireBody):
|
|
147
|
+
# No sub-schema declared. Fall back to the legacy ZCC converter
|
|
148
|
+
# for this subtree so containers like ``endToEndDiagnostics``,
|
|
149
|
+
# ``generateCliPasswordContract`` and ``locationRulesetPolicies``
|
|
150
|
+
# still get their child keys correctly cased (offTrusted,
|
|
151
|
+
# vpnTrusted, allowZpaDisableWithoutPassword, etc.).
|
|
152
|
+
value = convert_keys_to_camel_case_selective(value, snake_preserve)
|
|
153
|
+
|
|
154
|
+
out[wire_key] = value
|
|
155
|
+
|
|
156
|
+
return out
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Copyright (c) 2023, Zscaler Inc.
|
|
3
|
+
|
|
4
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
5
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
6
|
+
copyright notice and this permission notice appear in all copies.
|
|
7
|
+
|
|
8
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
9
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
10
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
11
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
12
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
13
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
14
|
+
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
from typing import Optional
|
|
18
|
+
from zscaler.api_client import APIClient
|
|
19
|
+
from zscaler.request_executor import RequestExecutor
|
|
20
|
+
from zscaler.zcc.models.application_profiles import ApplicationProfile
|
|
21
|
+
from zscaler.utils import format_url, zcc_param_mapper
|
|
22
|
+
from zscaler.types import APIResult
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class ApplicationProfilesAPI(APIClient):
|
|
26
|
+
|
|
27
|
+
def __init__(self, request_executor: "RequestExecutor") -> None:
|
|
28
|
+
super().__init__()
|
|
29
|
+
self._request_executor: RequestExecutor = request_executor
|
|
30
|
+
self._zcc_base_endpoint = "/zcc/papi/public/v1"
|
|
31
|
+
|
|
32
|
+
@zcc_param_mapper
|
|
33
|
+
def get_application_profiles(self, query_params: Optional[dict] = None) -> APIResult[dict]:
|
|
34
|
+
"""
|
|
35
|
+
Retrieves the paginated list of application profiles.
|
|
36
|
+
|
|
37
|
+
The ``device_type`` filter accepts a friendly OS name (``ios``,
|
|
38
|
+
``android``, ``windows``, ``macos``, ``linux``); the
|
|
39
|
+
:func:`zscaler.utils.zcc_param_mapper` decorator converts it to the
|
|
40
|
+
numeric ``deviceType`` value the API expects.
|
|
41
|
+
|
|
42
|
+
Args:
|
|
43
|
+
query_params (dict, optional): A dictionary containing supported filters.
|
|
44
|
+
|
|
45
|
+
``[query_params.page]`` {str}: Specifies the page offset.
|
|
46
|
+
|
|
47
|
+
``[query_params.page_size]`` {str}: Specifies the page size. The default size is 50.
|
|
48
|
+
|
|
49
|
+
``[query_params.search]`` {str}: The search string used to match against the policies.
|
|
50
|
+
|
|
51
|
+
``[query_params.search_type]`` {str}: The search string used to match against the search type.
|
|
52
|
+
This is enabled only for filename, name, policyToken, ruleset, or groups.
|
|
53
|
+
|
|
54
|
+
``[query_params.device_type]`` {str}: Friendly device type filter.
|
|
55
|
+
One of ``ios``, ``android``, ``windows``, ``macos``, ``linux``.
|
|
56
|
+
|
|
57
|
+
Returns:
|
|
58
|
+
:obj:`list`: Retrieves the list of application profile policies.
|
|
59
|
+
|
|
60
|
+
Examples:
|
|
61
|
+
Prints all application profile policies:
|
|
62
|
+
|
|
63
|
+
>>> profile_list, _, err = client.zcc.application_profiles.get_application_profiles()
|
|
64
|
+
>>> if err:
|
|
65
|
+
... print(f"Error listing application profiles: {err}")
|
|
66
|
+
... return
|
|
67
|
+
... for profile in profile_list:
|
|
68
|
+
... print(profile.as_dict())
|
|
69
|
+
|
|
70
|
+
Filter by device type:
|
|
71
|
+
|
|
72
|
+
>>> profile_list, _, err = client.zcc.application_profiles.get_application_profiles(
|
|
73
|
+
... query_params={"device_type": "android"}
|
|
74
|
+
... )
|
|
75
|
+
"""
|
|
76
|
+
http_method = "get".upper()
|
|
77
|
+
api_url = format_url(f"""
|
|
78
|
+
{self._zcc_base_endpoint}
|
|
79
|
+
/application-profiles
|
|
80
|
+
""")
|
|
81
|
+
|
|
82
|
+
query_params = query_params or {}
|
|
83
|
+
body = {}
|
|
84
|
+
headers = {}
|
|
85
|
+
|
|
86
|
+
request, error = self._request_executor.create_request(http_method, api_url, body, headers, params=query_params)
|
|
87
|
+
|
|
88
|
+
if error:
|
|
89
|
+
return (None, None, error)
|
|
90
|
+
|
|
91
|
+
response, error = self._request_executor.execute(request)
|
|
92
|
+
if error:
|
|
93
|
+
return (None, response, error)
|
|
94
|
+
|
|
95
|
+
try:
|
|
96
|
+
response_body = response.get_body() or {}
|
|
97
|
+
items = response_body.get("policies", []) or []
|
|
98
|
+
result = [ApplicationProfile(item) for item in items if isinstance(item, dict)]
|
|
99
|
+
except Exception as error:
|
|
100
|
+
return (None, response, error)
|
|
101
|
+
return (result, response, None)
|
|
102
|
+
|
|
103
|
+
def get_application_profile(self, profile_id: str) -> APIResult[dict]:
|
|
104
|
+
"""
|
|
105
|
+
Retrieves the list of policies for application profiles.
|
|
106
|
+
|
|
107
|
+
Args:
|
|
108
|
+
profile_id (str): The unique identifier of the application profile.
|
|
109
|
+
|
|
110
|
+
Returns:
|
|
111
|
+
:obj:`list`: Retrieves the list of application profile policies.
|
|
112
|
+
|
|
113
|
+
Examples:
|
|
114
|
+
Prints all application profile policies:
|
|
115
|
+
|
|
116
|
+
>>> profile, _, err = client.zcc.application_profiles.get_application_profile('1234567890')
|
|
117
|
+
>>> if err:
|
|
118
|
+
... print(f"Error listing application profile: {err}")
|
|
119
|
+
... return
|
|
120
|
+
... print(profile.as_dict())
|
|
121
|
+
"""
|
|
122
|
+
http_method = "get".upper()
|
|
123
|
+
api_url = format_url(f"""
|
|
124
|
+
{self._zcc_base_endpoint}
|
|
125
|
+
/application-profiles/{profile_id}
|
|
126
|
+
""")
|
|
127
|
+
|
|
128
|
+
body = {}
|
|
129
|
+
headers = {}
|
|
130
|
+
|
|
131
|
+
request, error = self._request_executor.create_request(http_method, api_url, body, headers)
|
|
132
|
+
if error:
|
|
133
|
+
return (None, None, error)
|
|
134
|
+
|
|
135
|
+
response, error = self._request_executor.execute(request)
|
|
136
|
+
if error:
|
|
137
|
+
return (None, response, error)
|
|
138
|
+
|
|
139
|
+
try:
|
|
140
|
+
result = ApplicationProfile(self.form_response_body(response.get_body()))
|
|
141
|
+
except Exception as error:
|
|
142
|
+
return (None, response, error)
|
|
143
|
+
return (result, response, None)
|
|
144
|
+
|
|
145
|
+
@zcc_param_mapper
|
|
146
|
+
def update_application_profile(self, profile_id: str, **kwargs) -> APIResult[dict]:
|
|
147
|
+
"""
|
|
148
|
+
Update the properties of the application profile using profile ID.
|
|
149
|
+
|
|
150
|
+
Only the following allowlisted properties can be updated. For array
|
|
151
|
+
or comma-separated string values, include existing values along with
|
|
152
|
+
the new values.
|
|
153
|
+
|
|
154
|
+
Args:
|
|
155
|
+
profile_id (str): The unique identifier of the application profile.
|
|
156
|
+
|
|
157
|
+
Keyword Args:
|
|
158
|
+
packet_tunnel_exclude_list (str): Hosts/IPs excluded from the packet tunnel.
|
|
159
|
+
packet_tunnel_exclude_list_for_ipv6 (str): IPv6 hosts/IPs excluded.
|
|
160
|
+
packet_tunnel_include_list (str): Hosts/IPs included in the packet tunnel.
|
|
161
|
+
packet_tunnel_include_list_for_ipv6 (str): IPv6 hosts/IPs included.
|
|
162
|
+
vpn_gateways (str): VPN gateways list.
|
|
163
|
+
source_port_based_bypasses (str): Source-port based bypass list.
|
|
164
|
+
disable_parallel_ipv4_and_ipv6 (int): Disable parallel IPv4/IPv6.
|
|
165
|
+
dns_priority_ordering_for_trusted_dns_criteria (int): DNS priority order
|
|
166
|
+
for trusted DNS criteria.
|
|
167
|
+
use_default_adapter_for_dns (str): Use default adapter for DNS.
|
|
168
|
+
update_dns_search_order (int): Update DNS search order.
|
|
169
|
+
disable_dns_route_exclusion (int): Disable DNS route exclusion.
|
|
170
|
+
enforce_split_dns (int): Enforce split DNS.
|
|
171
|
+
bypass_dns_traffic_using_udp_proxy (int): Bypass DNS traffic via UDP proxy.
|
|
172
|
+
truncate_large_udpdns_response (int): Truncate large UDP DNS responses.
|
|
173
|
+
prioritize_dns_exclusions (int): Prioritize DNS exclusions.
|
|
174
|
+
packet_tunnel_dns_exclude_list (str): DNS hosts excluded from packet tunnel.
|
|
175
|
+
packet_tunnel_dns_include_list (str): DNS hosts included in packet tunnel.
|
|
176
|
+
dns_priority_ordering (int): DNS priority ordering.
|
|
177
|
+
custom_dns (str): Custom DNS configuration.
|
|
178
|
+
app_service_ids (list[str]): App service IDs.
|
|
179
|
+
bypass_app_ids (list[str]): Bypass app IDs.
|
|
180
|
+
bypass_custom_app_ids (list[str]): Bypass custom app IDs.
|
|
181
|
+
groups (list): Group objects associated with the profile.
|
|
182
|
+
group_all (int): Apply policy to all groups.
|
|
183
|
+
user_ids (list[str]): User IDs associated with the profile.
|
|
184
|
+
logout_password (str): Logout password.
|
|
185
|
+
uninstall_password (str): Uninstall password.
|
|
186
|
+
disable_password (str): Disable password.
|
|
187
|
+
exit_password (str): Exit password.
|
|
188
|
+
zdx_disable_password (str): ZDX disable password.
|
|
189
|
+
zd_disable_password (str): ZD disable password.
|
|
190
|
+
zpa_disable_password (str): ZPA disable password.
|
|
191
|
+
zdp_disable_password (str): ZDP disable password.
|
|
192
|
+
zcc_revert_password (str): ZCC revert password.
|
|
193
|
+
zcc_fail_close_settings_exit_uninstall_password (str): ZCC fail-close
|
|
194
|
+
exit/uninstall password.
|
|
195
|
+
device_type (str): Device type.
|
|
196
|
+
|
|
197
|
+
Returns:
|
|
198
|
+
tuple: A tuple containing the Update Application Profile, response, and error.
|
|
199
|
+
|
|
200
|
+
Examples:
|
|
201
|
+
Update an existing Application Profile:
|
|
202
|
+
|
|
203
|
+
>>> updated_profile, response, error = (
|
|
204
|
+
... client.zcc.application_profiles.update_application_profile(
|
|
205
|
+
... profile_id='1234567890',
|
|
206
|
+
... enforce_split_dns=1,
|
|
207
|
+
... custom_dns='8.8.8.8,1.1.1.1',
|
|
208
|
+
... bypass_app_ids=['111', '222'],
|
|
209
|
+
... group_all=1,
|
|
210
|
+
... )
|
|
211
|
+
... )
|
|
212
|
+
>>> if error:
|
|
213
|
+
... print(f"Error updating application profile: {error}")
|
|
214
|
+
... return
|
|
215
|
+
... print(f"Application profile updated successfully: {updated_profile.as_dict()}")
|
|
216
|
+
"""
|
|
217
|
+
http_method = "patch".upper()
|
|
218
|
+
api_url = format_url(f"""
|
|
219
|
+
{self._zcc_base_endpoint}
|
|
220
|
+
/application-profiles/{profile_id}
|
|
221
|
+
""")
|
|
222
|
+
|
|
223
|
+
body = {}
|
|
224
|
+
body.update(kwargs)
|
|
225
|
+
|
|
226
|
+
# The PATCH endpoint requires the body to identify the policy being
|
|
227
|
+
# updated. Always inject policyId derived from the URL parameter so
|
|
228
|
+
# callers cannot omit it by accident.
|
|
229
|
+
try:
|
|
230
|
+
body["policyId"] = int(profile_id)
|
|
231
|
+
except (TypeError, ValueError):
|
|
232
|
+
body["policyId"] = profile_id
|
|
233
|
+
|
|
234
|
+
request, error = self._request_executor.create_request(http_method, api_url, body, {}, {})
|
|
235
|
+
if error:
|
|
236
|
+
return (None, None, error)
|
|
237
|
+
|
|
238
|
+
response, error = self._request_executor.execute(request)
|
|
239
|
+
if error:
|
|
240
|
+
return (None, response, error)
|
|
241
|
+
|
|
242
|
+
try:
|
|
243
|
+
result = ApplicationProfile(self.form_response_body(response.get_body()))
|
|
244
|
+
except Exception as error:
|
|
245
|
+
return (None, response, error)
|
|
246
|
+
return (result, response, None)
|