zscaler-sdk-python 1.7.9__tar.gz → 1.8.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/PKG-INFO +1 -1
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/pyproject.toml +1 -1
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/__init__.py +1 -1
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/errors/zscaler_api_error.py +10 -1
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/helpers.py +33 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/oneapi_response.py +0 -3
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/request_executor.py +36 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/utils.py +98 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/devices.py +99 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/models/webpolicy.py +502 -15
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/web_policy.py +4 -3
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/cloud_firewall_rules.py +7 -7
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/intermediate_certificates.py +42 -5
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/legacy.py +34 -11
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/location_management.py +2 -3
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/saas_security_api.py +96 -0
- zscaler_sdk_python-1.8.1/zscaler/zia/models/vzen_nodes.py +111 -0
- zscaler_sdk_python-1.8.1/zscaler/zia/models/workload_groups.py +209 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/rule_labels.py +1 -3
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/saas_security_api.py +60 -0
- zscaler_sdk_python-1.8.1/zscaler/zia/vzen_nodes.py +376 -0
- zscaler_sdk_python-1.8.1/zscaler/zia/workload_groups.py +391 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/zia_service.py +10 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/application_segment.py +114 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/application_segment.py +63 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/common.py +52 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/policyset_controller_v1.py +10 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/policyset_controller_v2.py +10 -0
- zscaler_sdk_python-1.7.9/zscaler/zia/models/workload_groups.py +0 -72
- zscaler_sdk_python-1.7.9/zscaler/zia/workload_groups.py +0 -90
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/LICENSE.md +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/README.md +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/api_client.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/cache/__init__.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/cache/cache.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/cache/no_op_cache.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/cache/zscaler_cache.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/config/__init__.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/config/config_setter.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/config/config_validator.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/constants.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/error_messages.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/errors/__init__.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/errors/error.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/errors/http_error.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/errors/response_checker.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/exceptions/__init__.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/exceptions/exceptions.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/logger.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/oneapi_client.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/oneapi_collection.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/oneapi_http_client.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/oneapi_oauth_client.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/oneapi_object.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ratelimiter/__init__.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ratelimiter/ratelimiter.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/user_agent.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/__init__.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/admin_user.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/company.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/entitlements.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/fail_open_policy.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/forwarding_profile.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/legacy.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/models/admin_roles.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/models/admin_user.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/models/devices.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/models/failopenpolicy.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/models/forwardingprofile.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/models/getcompanyinfo.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/models/manage_pass.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/models/secrets_otp.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/models/secrets_passwords.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/models/trustednetworks.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/models/webappservice.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/models/webprivacy.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/models/zdxgroupentitlements.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/models/zpagroupentitlements.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/secrets.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/trusted_networks.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/web_app_service.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/web_privacy.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zcc/zcc_service.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zdx/__init__.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zdx/admin.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zdx/alerts.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zdx/apps.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zdx/devices.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zdx/inventory.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zdx/legacy.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zdx/models/administration.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zdx/models/alerts.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zdx/models/application_users.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zdx/models/applications.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zdx/models/call_quality_metrics.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zdx/models/common.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zdx/models/devices.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zdx/models/snapshot.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zdx/models/software_inventory.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zdx/models/troubleshooting.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zdx/models/users.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zdx/snapshot.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zdx/troubleshooting.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zdx/users.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zdx/zdx_service.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/__init__.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/activate.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/admin_roles.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/admin_users.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/advanced_settings.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/alert_subscriptions.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/apptotal.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/atp_policy.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/audit_logs.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/authentication_settings.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/bandwidth_classes.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/bandwidth_control_rules.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/browser_control_settings.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/casb_dlp_rules.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/casb_malware_rules.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/cloud_app_instances.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/cloud_applications.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/cloud_browser_isolation.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/cloud_firewall.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/cloud_firewall_dns.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/cloud_firewall_ips.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/cloud_nss.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/cloud_to_cloud_ir.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/cloudappcontrol.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/dedicated_ip_gateways.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/device_management.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/dlp_dictionary.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/dlp_engine.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/dlp_resources.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/dlp_templates.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/dlp_web_rules.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/dns_gatways.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/end_user_notification.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/file_type_control_rule.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/forwarding_control.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/ftp_control_policy.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/gre_tunnel.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/iot_report.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/ipv6_config.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/locations.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/malware_protection_policy.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/mobile_threat_settings.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/__init__.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/activation.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/admin_roles.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/admin_users.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/advanced_settings.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/advanced_threat_settings.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/alert_subscriptions.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/apptotal.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/authentication_settings.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/bandwidth_classes.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/bandwidth_control_rules.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/browser_control_settings.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/casb_dlp_rules.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/casb_malware_rules.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/cloud_app_instances.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/cloud_app_policy.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/cloud_browser_isolation.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/cloud_firewall_app_services.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/cloud_firewall_destination_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/cloud_firewall_dns_rules.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/cloud_firewall_ips_rules.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/cloud_firewall_nw_application_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/cloud_firewall_nw_applications.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/cloud_firewall_nw_service.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/cloud_firewall_nw_service_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/cloud_firewall_rules.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/cloud_firewall_source_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/cloud_firewall_time_windows.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/cloud_nss.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/cloud_to_cloud_ir.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/cloudappcontrol.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/common.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/dedicated_ip_gateways.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/device_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/devices.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/dlp_dictionary.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/dlp_engine.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/dlp_resources.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/dlp_templates.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/dlp_web_rules.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/dns_gateways.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/endusernotification.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/filetyperules.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/forwarding_control_policy.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/ftp_control_policy.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/gre_recommended_list.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/gre_tunnel_info.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/gre_tunnels.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/gre_vips.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/intermediate_certificates.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/iotreport.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/ipv6_config.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/location_group.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/malware_protection_settings.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/mobile_threat_settings.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/nat_control_policy.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/nss_servers.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/organization_information.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/pac_files.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/proxies.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/proxy_gateways.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/remoteassistance.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/risk_profiles.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/rule_labels.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/sandboxrules.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/security_policy_settings.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/shadow_it_report.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/ssl_inspection_rules.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/subclouds.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/system_audit.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/tenancy_restriction_profile.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/time_intervals.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/traffic_datacenters.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/traffic_dc_exclusions.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/traffic_extranet.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/traffic_static_ip.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/traffic_vpn_credentials.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/url_filter_cloud_app_settings.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/url_filtering_rules.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/urlcategory.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/user_management.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/vzen_clusters.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/models/zpa_gateway.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/nat_control_policy.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/nss_servers.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/organization_information.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/pac_files.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/policy_export.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/proxies.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/remote_assistance.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/risk_profiles.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/sandbox.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/sandbox_rules.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/security_policy_settings.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/shadow_it_report.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/ssl_inspection_rules.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/sub_clouds.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/system_audit.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/tenancy_restriction_profile.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/time_intervals.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/traffic_datacenters.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/traffic_extranet.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/traffic_static_ip.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/traffic_vpn_credentials.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/url_categories.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/url_filtering.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/user_management.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/vzen_clusters.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zia/zpa_gateway.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zidentity/__init__.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zidentity/api_client.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zidentity/groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zidentity/models/api_client.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zidentity/models/common.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zidentity/models/groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zidentity/models/resource_servers.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zidentity/models/user_entitlement.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zidentity/models/users.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zidentity/resource_servers.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zidentity/user_entitlement.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zidentity/users.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zidentity/zidentity_service.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/__init__.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/admin_sso_controller.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/administrator_controller.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/api_keys.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/app_connector_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/app_connector_schedule.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/app_connectors.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/app_protection.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/app_segment_by_type.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/app_segments_ba.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/app_segments_ba_v2.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/app_segments_inspection.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/app_segments_pra.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/c2c_ip_ranges.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/cbi_banner.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/cbi_certificate.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/cbi_profile.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/cbi_region.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/cbi_zpa_profile.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/certificates.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/client_settings.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/cloud_connector_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/config_override_controller.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/customer_controller.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/customer_domain.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/customer_version_profile.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/emergency_access.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/enrollment_certificates.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/idp.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/legacy.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/lss.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/machine_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/microtenants.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/administrator_controller.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/api_keys.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/app_connector_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/app_connector_schedule.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/app_connectors.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/app_protection_predefined_controls.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/app_protection_profile.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/application_segment_lb.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/application_servers.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/c2c_ip_ranges.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/cbi_banner.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/cbi_certificate.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/cbi_profile.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/cbi_region.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/cbi_zpa_profile.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/certificates.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/client_settings.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/cloud_connector_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/config_override_controller.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/customer_controller.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/customer_domain.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/customer_version_profile.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/emergency_access.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/enrollment_certificates.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/idp.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/lss.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/machine_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/microtenants.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/npn_client_controller.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/posture_profiles.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/pra_approval.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/pra_console.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/pra_cred_pool_controller.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/pra_credential.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/pra_portal.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/private_cloud_controller.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/private_cloud_group.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/provisioning_keys.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/role_controller.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/saml_attributes.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/scim_attributes.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/scim_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/segment_group.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/server_group.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/service_edge_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/service_edge_schedule.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/service_edges.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/trusted_network.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/user_portal_controller.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/models/user_portal_link.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/npn_client_controller.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/policies.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/posture_profiles.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/pra_approval.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/pra_console.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/pra_credential.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/pra_credential_pool.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/pra_portal.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/private_cloud_controller.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/private_cloud_group.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/provisioning.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/role_controller.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/saml_attributes.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/scim_attributes.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/scim_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/segment_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/server_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/servers.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/service_edge_group.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/service_edge_schedule.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/service_edges.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/trusted_networks.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/user_portal_controller.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/user_portal_link.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zpa/zpa_service.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/__init__.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/account_details.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/activation.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/admin_roles.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/admin_users.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/api_keys.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/ec_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/forwarding_gateways.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/forwarding_rules.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/ip_destination_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/ip_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/ip_source_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/legacy.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/location_management.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/location_template.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/models/activation.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/models/admin_roles.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/models/admin_users.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/models/api_keys.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/models/common.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/models/ec_group_vm.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/models/ecgroup.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/models/forwarding_gateways.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/models/forwarding_rules.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/models/ip_destination_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/models/ip_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/models/ip_source_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/models/location_management.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/models/location_templates.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/models/nw_service.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/models/nw_service_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/models/provisioning_url.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/models/traffic_vpn_credentials.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/models/zpa_resources.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/nw_service.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/nw_service_groups.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/provisioning_url.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/ztw/ztw_service.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zwa/__init__.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zwa/audit_logs.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zwa/dlp_incidents.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zwa/legacy.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zwa/models/audit_logs.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zwa/models/change_history.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zwa/models/common.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zwa/models/generated_tickets.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zwa/models/incident_details.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zwa/models/incident_evidence.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zwa/models/incident_group_search.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zwa/models/incident_search.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zwa/models/incident_trigger.py +0 -0
- {zscaler_sdk_python-1.7.9 → zscaler_sdk_python-1.8.1}/zscaler/zwa/zwa_service.py +0 -0
|
@@ -23,7 +23,16 @@ class ZscalerAPIError(Exception):
|
|
|
23
23
|
if self.error_message:
|
|
24
24
|
message_parts.append(self.error_message)
|
|
25
25
|
if self.params:
|
|
26
|
-
|
|
26
|
+
# Handle mixed types in params (lists and strings) safely
|
|
27
|
+
param_strings = []
|
|
28
|
+
for param in self.params:
|
|
29
|
+
if isinstance(param, list):
|
|
30
|
+
# Flatten lists and join with commas
|
|
31
|
+
param_strings.append(', '.join(str(item) for item in param))
|
|
32
|
+
else:
|
|
33
|
+
# Convert non-list items to strings
|
|
34
|
+
param_strings.append(str(param))
|
|
35
|
+
message_parts.append(f"Parameters: {', '.join(param_strings)}")
|
|
27
36
|
|
|
28
37
|
self.message = " ".join(message_parts)
|
|
29
38
|
super().__init__(self.message) # ✅ This is what makes it raise-able
|
|
@@ -314,3 +314,36 @@ def convert_keys_to_camel_case(data):
|
|
|
314
314
|
return [convert_keys_to_camel_case(item) for item in data]
|
|
315
315
|
else:
|
|
316
316
|
return data
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
def convert_keys_to_camel_case_selective(data, preserve_snake_case_keys=None):
|
|
320
|
+
"""
|
|
321
|
+
Recursively convert keys to camelCase while preserving specific snake_case keys.
|
|
322
|
+
This function allows users to use snake_case for all attributes, and only converts
|
|
323
|
+
to camelCase if the attribute is NOT in the preserve_snake_case_keys set.
|
|
324
|
+
|
|
325
|
+
Args:
|
|
326
|
+
data: Dictionary or list to convert
|
|
327
|
+
preserve_snake_case_keys: Set of keys that should remain in snake_case
|
|
328
|
+
|
|
329
|
+
Returns:
|
|
330
|
+
Converted data with selective key preservation
|
|
331
|
+
"""
|
|
332
|
+
if preserve_snake_case_keys is None:
|
|
333
|
+
preserve_snake_case_keys = set()
|
|
334
|
+
|
|
335
|
+
if isinstance(data, dict):
|
|
336
|
+
result = {}
|
|
337
|
+
for k, v in data.items():
|
|
338
|
+
# Check if this key should be preserved in snake_case
|
|
339
|
+
if k in preserve_snake_case_keys:
|
|
340
|
+
# Keep as snake_case
|
|
341
|
+
result[k] = convert_keys_to_camel_case_selective(v, preserve_snake_case_keys)
|
|
342
|
+
else:
|
|
343
|
+
# Convert to camelCase
|
|
344
|
+
result[to_lower_camel_case(k)] = convert_keys_to_camel_case_selective(v, preserve_snake_case_keys)
|
|
345
|
+
return result
|
|
346
|
+
elif isinstance(data, list):
|
|
347
|
+
return [convert_keys_to_camel_case_selective(item, preserve_snake_case_keys) for item in data]
|
|
348
|
+
else:
|
|
349
|
+
return data
|
|
@@ -66,9 +66,6 @@ class ZscalerAPIResponse:
|
|
|
66
66
|
if end_time:
|
|
67
67
|
self._params["endTime"] = end_time
|
|
68
68
|
|
|
69
|
-
# If service is ZPA and user did not specify a pagesize, set it to max=500 by default
|
|
70
|
-
if self._service_type.upper() == "ZPA" and "pagesize" not in self._params:
|
|
71
|
-
self._params["pagesize"] = self.SERVICE_PAGE_LIMITS["ZPA"]["max"]
|
|
72
69
|
|
|
73
70
|
# If service is ZIA, ensure the pagination parameter is "pageSize" in camelCase
|
|
74
71
|
if self._service_type == "zia":
|
|
@@ -119,6 +119,10 @@ class RequestExecutor:
|
|
|
119
119
|
|
|
120
120
|
exceptions.raise_exception = self._config["client"].get("raiseException", False)
|
|
121
121
|
self._custom_headers = {}
|
|
122
|
+
|
|
123
|
+
# Track whether any mutations (POST/PUT/DELETE) have occurred during this session
|
|
124
|
+
# This is used to determine if deauthentication is needed for ZIA/ZTW services
|
|
125
|
+
self._mutations_occurred = False
|
|
122
126
|
|
|
123
127
|
def get_base_url(self, endpoint: str) -> str:
|
|
124
128
|
"""
|
|
@@ -302,6 +306,14 @@ class RequestExecutor:
|
|
|
302
306
|
if "/zdx/" in endpoint:
|
|
303
307
|
return body # Do not convert ZDX requests to camelCase
|
|
304
308
|
|
|
309
|
+
# Special handling for ZCC service - use selective conversion
|
|
310
|
+
if "/zcc/" in endpoint and body:
|
|
311
|
+
from zscaler.helpers import convert_keys_to_camel_case_selective
|
|
312
|
+
from zscaler.zcc.models.webpolicy import WebPolicy
|
|
313
|
+
# Use the WebPolicy's snake_case keys for selective conversion
|
|
314
|
+
body = convert_keys_to_camel_case_selective(body, WebPolicy.SNAKE_CASE_KEYS)
|
|
315
|
+
return body
|
|
316
|
+
|
|
305
317
|
# Preserve existing logic for other services
|
|
306
318
|
if body:
|
|
307
319
|
body = convert_keys_to_camel_case(body)
|
|
@@ -513,6 +525,13 @@ class RequestExecutor:
|
|
|
513
525
|
logger.warning("Request Timeout exceeded.")
|
|
514
526
|
return None, None, None, Exception("Request Timeout exceeded.")
|
|
515
527
|
|
|
528
|
+
# Track mutations (POST/PUT/DELETE) for ZIA/ZTW deauthentication logic
|
|
529
|
+
if request["method"].upper() in ["POST", "PUT", "DELETE"]:
|
|
530
|
+
self._mutations_occurred = True
|
|
531
|
+
logger.debug(f"Mutation detected: {request['method']} request to {request['url']}")
|
|
532
|
+
else:
|
|
533
|
+
logger.debug(f"Non-mutation request: {request['method']} request to {request['url']} (mutations_occurred={self._mutations_occurred})")
|
|
534
|
+
|
|
516
535
|
# Perform the actual HTTP request
|
|
517
536
|
response, error = self._http_client.send_request(request)
|
|
518
537
|
|
|
@@ -632,11 +651,23 @@ class RequestExecutor:
|
|
|
632
651
|
logger.debug("Getting custom headers.")
|
|
633
652
|
return self._custom_headers
|
|
634
653
|
|
|
654
|
+
def has_mutations_occurred(self):
|
|
655
|
+
"""
|
|
656
|
+
Check if any mutations (POST/PUT/DELETE) have occurred during this session.
|
|
657
|
+
|
|
658
|
+
Returns:
|
|
659
|
+
bool: True if mutations occurred, False otherwise.
|
|
660
|
+
"""
|
|
661
|
+
return self._mutations_occurred
|
|
662
|
+
|
|
635
663
|
def deauthenticate(self, service_type=None):
|
|
636
664
|
"""
|
|
637
665
|
Deauthenticate from Zscaler services that support session-based authentication.
|
|
638
666
|
Currently supports ZIA and ZTW services.
|
|
639
667
|
|
|
668
|
+
For ZIA service, deauthentication is only performed if mutations (POST/PUT/DELETE)
|
|
669
|
+
have occurred during the session. GET-only sessions do not require deauthentication.
|
|
670
|
+
|
|
640
671
|
Args:
|
|
641
672
|
service_type (str, optional): The service type to deauthenticate from.
|
|
642
673
|
If None, will attempt to determine from the current configuration.
|
|
@@ -648,6 +679,11 @@ class RequestExecutor:
|
|
|
648
679
|
logger.debug(f"Deauthentication not supported for service: {service_type}")
|
|
649
680
|
return False
|
|
650
681
|
|
|
682
|
+
# For ZIA service, only deauthenticate if mutations occurred
|
|
683
|
+
if service_type.lower() == "zia" and not self._mutations_occurred:
|
|
684
|
+
logger.debug("ZIA service: No mutations occurred during session, skipping deauthentication")
|
|
685
|
+
return True
|
|
686
|
+
|
|
651
687
|
try:
|
|
652
688
|
# Determine the base URL and endpoint based on service type
|
|
653
689
|
if service_type.lower() == "zia":
|
|
@@ -819,6 +819,60 @@ def format_url(base_string):
|
|
|
819
819
|
|
|
820
820
|
# return wrapper
|
|
821
821
|
|
|
822
|
+
def validate_and_format_date(date_str: str) -> str:
|
|
823
|
+
"""
|
|
824
|
+
Validates and formats date string for ZCC API.
|
|
825
|
+
Accepts various date formats and returns ZCC API format (YYYY-MM-DD HH:MM:SS GMT).
|
|
826
|
+
|
|
827
|
+
Args:
|
|
828
|
+
date_str (str): Date string in various formats
|
|
829
|
+
|
|
830
|
+
Returns:
|
|
831
|
+
str: Date in ZCC API format (YYYY-MM-DD HH:MM:SS GMT)
|
|
832
|
+
|
|
833
|
+
Raises:
|
|
834
|
+
ValueError: If date format is invalid
|
|
835
|
+
"""
|
|
836
|
+
if not date_str:
|
|
837
|
+
raise ValueError("Date string cannot be empty")
|
|
838
|
+
|
|
839
|
+
try:
|
|
840
|
+
# Try to parse the date string
|
|
841
|
+
parsed_date = parser.parse(date_str)
|
|
842
|
+
|
|
843
|
+
# If no timezone info, assume UTC
|
|
844
|
+
if parsed_date.tzinfo is None:
|
|
845
|
+
parsed_date = pytz.UTC.localize(parsed_date)
|
|
846
|
+
|
|
847
|
+
# Convert to ZCC API format: YYYY-MM-DD HH:MM:SS GMT
|
|
848
|
+
return parsed_date.strftime("%Y-%m-%d %H:%M:%S GMT")
|
|
849
|
+
except (ValueError, TypeError) as e:
|
|
850
|
+
raise ValueError(f"Invalid date format: {date_str}. Expected formats: YYYY-MM-DD, YYYY-MM-DD HH:MM:SS, YYYY-MM-DDTHH:MM:SS, etc. Error: {e}")
|
|
851
|
+
|
|
852
|
+
|
|
853
|
+
def validate_time_zone(time_zone_str: str) -> str:
|
|
854
|
+
"""
|
|
855
|
+
Validates time zone string against IANA Time Zone database.
|
|
856
|
+
|
|
857
|
+
Args:
|
|
858
|
+
time_zone_str (str): IANA time zone string
|
|
859
|
+
|
|
860
|
+
Returns:
|
|
861
|
+
str: Validated time zone string
|
|
862
|
+
|
|
863
|
+
Raises:
|
|
864
|
+
ValueError: If time zone is invalid
|
|
865
|
+
"""
|
|
866
|
+
if not time_zone_str:
|
|
867
|
+
raise ValueError("Time zone cannot be empty")
|
|
868
|
+
|
|
869
|
+
# Check if it's a valid IANA time zone
|
|
870
|
+
if time_zone_str not in pytz.all_timezones:
|
|
871
|
+
raise ValueError(f"Invalid time zone: {time_zone_str}. Please use a valid IANA time zone (e.g., 'America/New_York', 'UTC', 'Europe/London')")
|
|
872
|
+
|
|
873
|
+
return time_zone_str
|
|
874
|
+
|
|
875
|
+
|
|
822
876
|
def zcc_param_mapper(func):
|
|
823
877
|
@wraps(func)
|
|
824
878
|
def wrapper(self, *args, **kwargs):
|
|
@@ -873,10 +927,54 @@ def zcc_param_mapper(func):
|
|
|
873
927
|
else:
|
|
874
928
|
mapped_params["registrationTypes"] = ",".join(mapped)
|
|
875
929
|
|
|
930
|
+
# Handle date parameters
|
|
931
|
+
start_date = (
|
|
932
|
+
query_params.get("start_date") or
|
|
933
|
+
query_params.get("startDate") or
|
|
934
|
+
body.get("start_date") or
|
|
935
|
+
body.get("startDate")
|
|
936
|
+
)
|
|
937
|
+
|
|
938
|
+
if start_date:
|
|
939
|
+
try:
|
|
940
|
+
mapped_params["startDate"] = validate_and_format_date(start_date)
|
|
941
|
+
except ValueError as e:
|
|
942
|
+
raise ValueError(f"Invalid start_date: {e}")
|
|
943
|
+
|
|
944
|
+
end_date = (
|
|
945
|
+
query_params.get("end_date") or
|
|
946
|
+
query_params.get("endDate") or
|
|
947
|
+
body.get("end_date") or
|
|
948
|
+
body.get("endDate")
|
|
949
|
+
)
|
|
950
|
+
|
|
951
|
+
if end_date:
|
|
952
|
+
try:
|
|
953
|
+
mapped_params["endDate"] = validate_and_format_date(end_date)
|
|
954
|
+
except ValueError as e:
|
|
955
|
+
raise ValueError(f"Invalid end_date: {e}")
|
|
956
|
+
|
|
957
|
+
# Handle time zone parameter
|
|
958
|
+
time_zone = (
|
|
959
|
+
query_params.get("time_zone") or
|
|
960
|
+
query_params.get("Time-Zone") or
|
|
961
|
+
body.get("time_zone") or
|
|
962
|
+
body.get("Time-Zone")
|
|
963
|
+
)
|
|
964
|
+
|
|
965
|
+
if time_zone:
|
|
966
|
+
try:
|
|
967
|
+
mapped_params["Time-Zone"] = validate_time_zone(time_zone)
|
|
968
|
+
except ValueError as e:
|
|
969
|
+
raise ValueError(f"Invalid time_zone: {e}")
|
|
970
|
+
|
|
876
971
|
# Clean aliases
|
|
877
972
|
for key in [
|
|
878
973
|
"os_type", "os_types",
|
|
879
974
|
"registration_type", "registration_types",
|
|
975
|
+
"start_date", "startDate",
|
|
976
|
+
"end_date", "endDate",
|
|
977
|
+
"time_zone", "Time-Zone",
|
|
880
978
|
]:
|
|
881
979
|
query_params.pop(key, None)
|
|
882
980
|
kwargs.pop(key, None)
|
|
@@ -209,6 +209,104 @@ class DevicesAPI(APIClient):
|
|
|
209
209
|
|
|
210
210
|
return filename
|
|
211
211
|
|
|
212
|
+
@zcc_param_mapper
|
|
213
|
+
def download_disable_reasons(self, query_params=None, filename: str = None):
|
|
214
|
+
"""
|
|
215
|
+
Downloads or exports a report as a CSV file showing the disable reasons of devices.
|
|
216
|
+
|
|
217
|
+
Args:
|
|
218
|
+
query_params (dict, optional): A dictionary containing supported filters.
|
|
219
|
+
|
|
220
|
+
``[query_params.os_types]`` {list}: Filter by OS type. Valid values:
|
|
221
|
+
ios, android, windows, macos, linux.
|
|
222
|
+
|
|
223
|
+
``[query_params.start_date]`` {str}: Start date for the report. Accepts various formats:
|
|
224
|
+
YYYY-MM-DD, YYYY-MM-DD HH:MM:SS, YYYY-MM-DDTHH:MM:SS, etc. Will be converted to ZCC API format.
|
|
225
|
+
|
|
226
|
+
``[query_params.end_date]`` {str}: End date for the report. Accepts various formats:
|
|
227
|
+
YYYY-MM-DD, YYYY-MM-DD HH:MM:SS, YYYY-MM-DDTHH:MM:SS, etc. Will be converted to ZCC API format.
|
|
228
|
+
|
|
229
|
+
``[query_params.time_zone]`` {str}: IANA time zone for date interpretation.
|
|
230
|
+
Examples: 'America/New_York', 'UTC', 'Europe/London'.
|
|
231
|
+
|
|
232
|
+
filename (str, optional): Custom filename for the CSV file. Defaults to timestamped name.
|
|
233
|
+
|
|
234
|
+
Returns:
|
|
235
|
+
str: Path to the downloaded CSV file.
|
|
236
|
+
|
|
237
|
+
Examples:
|
|
238
|
+
Download disable reasons report for Windows devices:
|
|
239
|
+
|
|
240
|
+
>>> try:
|
|
241
|
+
... filename = client.zcc.devices.download_disable_reasons(
|
|
242
|
+
... query_params={
|
|
243
|
+
... "os_types": ["windows"],
|
|
244
|
+
... "start_date": "2024-01-01",
|
|
245
|
+
... "end_date": "2024-01-31",
|
|
246
|
+
... "time_zone": "America/New_York"
|
|
247
|
+
... },
|
|
248
|
+
... filename="disable_reasons_jan2024.csv"
|
|
249
|
+
... )
|
|
250
|
+
... print(f"Disable reasons report downloaded successfully: {filename}")
|
|
251
|
+
... except Exception as e:
|
|
252
|
+
... print(f"Error during download: {e}")
|
|
253
|
+
|
|
254
|
+
Download disable reasons for all devices with specific date range:
|
|
255
|
+
|
|
256
|
+
>>> try:
|
|
257
|
+
... filename = client.zcc.devices.download_disable_reasons(
|
|
258
|
+
... query_params={
|
|
259
|
+
... "start_date": "2024-01-01 00:00:00",
|
|
260
|
+
... "end_date": "2024-01-31 23:59:59",
|
|
261
|
+
... "time_zone": "UTC"
|
|
262
|
+
... }
|
|
263
|
+
... )
|
|
264
|
+
... print(f"Report downloaded: {filename}")
|
|
265
|
+
... except Exception as e:
|
|
266
|
+
... print(f"Error: {e}")
|
|
267
|
+
"""
|
|
268
|
+
query_params = query_params or {}
|
|
269
|
+
|
|
270
|
+
if not filename:
|
|
271
|
+
filename = f"zcc-disable-reasons-{datetime.now().strftime('%Y%m%d-%H_%M_%S')}.csv"
|
|
272
|
+
|
|
273
|
+
# The zcc_param_mapper decorator handles parameter mapping and validation
|
|
274
|
+
# We just need to pass the query_params through
|
|
275
|
+
params = query_params.copy()
|
|
276
|
+
|
|
277
|
+
http_method = "get".upper()
|
|
278
|
+
api_url = format_url(f"{self._zcc_base_endpoint}/downloadDisableReasons")
|
|
279
|
+
|
|
280
|
+
# Prepare headers - include Time-Zone if provided
|
|
281
|
+
headers = {"Accept": "*/*"}
|
|
282
|
+
if "Time-Zone" in params:
|
|
283
|
+
headers["Time-Zone"] = params.pop("Time-Zone")
|
|
284
|
+
|
|
285
|
+
request, error = self._request_executor.create_request(
|
|
286
|
+
http_method,
|
|
287
|
+
api_url,
|
|
288
|
+
params=params,
|
|
289
|
+
headers=headers
|
|
290
|
+
)
|
|
291
|
+
|
|
292
|
+
if error:
|
|
293
|
+
raise Exception("Error creating request for downloading disable reasons report.")
|
|
294
|
+
|
|
295
|
+
response, error = self._request_executor.execute(request, return_raw_response=True)
|
|
296
|
+
if error:
|
|
297
|
+
raise error
|
|
298
|
+
if response is None:
|
|
299
|
+
raise Exception("No response received when downloading disable reasons report.")
|
|
300
|
+
|
|
301
|
+
content_type = response.headers.get("Content-Type", "").lower()
|
|
302
|
+
if not content_type.startswith("application/octet-stream") and not response.text.startswith('"User","Device type"'):
|
|
303
|
+
raise Exception("Invalid response content type or unexpected response format.")
|
|
304
|
+
|
|
305
|
+
with open(filename, "wb") as f:
|
|
306
|
+
f.write(response.content)
|
|
307
|
+
|
|
308
|
+
return filename
|
|
309
|
+
|
|
212
310
|
@zcc_param_mapper
|
|
213
311
|
def list_devices(self, query_params=None) -> tuple:
|
|
214
312
|
"""
|
|
@@ -624,3 +722,4 @@ class DevicesAPI(APIClient):
|
|
|
624
722
|
return None, response, error
|
|
625
723
|
|
|
626
724
|
return result, response, None
|
|
725
|
+
|