zscaler-sdk-python 1.9.8__tar.gz → 1.9.10__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.8 → zscaler_sdk_python-1.9.10}/PKG-INFO +1 -1
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/pyproject.toml +1 -1
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/__init__.py +1 -1
- zscaler_sdk_python-1.9.10/zscaler/errors/__init__.py +26 -0
- zscaler_sdk_python-1.9.10/zscaler/errors/graphql_error.py +207 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/errors/response_checker.py +28 -1
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/oneapi_client.py +41 -2
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/request_executor.py +9 -1
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/legacy.py +10 -2
- zscaler_sdk_python-1.9.10/zscaler/zinsights/__init__.py +21 -0
- zscaler_sdk_python-1.9.10/zscaler/zinsights/cyber_security.py +220 -0
- zscaler_sdk_python-1.9.10/zscaler/zinsights/firewall.py +291 -0
- zscaler_sdk_python-1.9.10/zscaler/zinsights/iot.py +135 -0
- zscaler_sdk_python-1.9.10/zscaler/zinsights/models/__init__.py +19 -0
- zscaler_sdk_python-1.9.10/zscaler/zinsights/models/common.py +325 -0
- zscaler_sdk_python-1.9.10/zscaler/zinsights/models/enums.py +164 -0
- zscaler_sdk_python-1.9.10/zscaler/zinsights/models/inputs.py +453 -0
- zscaler_sdk_python-1.9.10/zscaler/zinsights/saas_security.py +126 -0
- zscaler_sdk_python-1.9.10/zscaler/zinsights/shadow_it.py +315 -0
- zscaler_sdk_python-1.9.10/zscaler/zinsights/web_traffic.py +476 -0
- zscaler_sdk_python-1.9.10/zscaler/zinsights/zinsights_service.py +78 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/legacy.py +7 -2
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/legacy.py +10 -2
- zscaler_sdk_python-1.9.8/zscaler/zwa/__init__.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/LICENSE.md +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/README.md +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/api_client.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/cache/__init__.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/cache/cache.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/cache/no_op_cache.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/cache/zscaler_cache.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/config/__init__.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/config/config_setter.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/config/config_validator.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/constants.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/error_messages.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/errors/error.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/errors/http_error.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/errors/zscaler_api_error.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/exceptions/__init__.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/exceptions/exceptions.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/helpers.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/logger.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/oneapi_collection.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/oneapi_http_client.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/oneapi_oauth_client.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/oneapi_object.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/oneapi_response.py +0 -0
- {zscaler_sdk_python-1.9.8/zscaler/errors → zscaler_sdk_python-1.9.10/zscaler/ratelimiter}/__init__.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ratelimiter/ratelimiter.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/types.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/user_agent.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/utils.py +0 -0
- {zscaler_sdk_python-1.9.8/zscaler/ratelimiter → zscaler_sdk_python-1.9.10/zscaler/zcc}/__init__.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/admin_user.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/company.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/devices.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/entitlements.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/fail_open_policy.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/forwarding_profile.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/legacy.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/admin_roles.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/admin_user.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/devices.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/failopenpolicy.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/forwardingprofile.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/getcompanyinfo.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/manage_pass.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/secrets_otp.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/secrets_passwords.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/trustednetworks.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/webappservice.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/webpolicy.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/webprivacy.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/zdxgroupentitlements.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/zpagroupentitlements.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/secrets.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/trusted_networks.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/web_app_service.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/web_policy.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/web_privacy.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/zcc_service.py +0 -0
- {zscaler_sdk_python-1.9.8/zscaler/zcc → zscaler_sdk_python-1.9.10/zscaler/zdx}/__init__.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/admin.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/alerts.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/apps.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/devices.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/inventory.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/legacy.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/models/administration.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/models/alerts.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/models/application_users.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/models/applications.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/models/call_quality_metrics.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/models/common.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/models/devices.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/models/snapshot.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/models/software_inventory.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/models/troubleshooting.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/models/users.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/snapshot.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/troubleshooting.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/users.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/zdx_service.py +0 -0
- {zscaler_sdk_python-1.9.8/zscaler/zdx → zscaler_sdk_python-1.9.10/zscaler/zeasm}/__init__.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zeasm/findings.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zeasm/lookalike_domains.py +0 -0
- {zscaler_sdk_python-1.9.8/zscaler/zeasm → zscaler_sdk_python-1.9.10/zscaler/zeasm/models}/__init__.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zeasm/models/common.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zeasm/models/findings.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zeasm/models/lookalike_domains.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zeasm/models/organizations.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zeasm/organizations.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zeasm/zeasm_service.py +0 -0
- {zscaler_sdk_python-1.9.8/zscaler/zeasm/models → zscaler_sdk_python-1.9.10/zscaler/zia}/__init__.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/activate.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/admin_roles.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/admin_users.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/advanced_settings.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/alert_subscriptions.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/apptotal.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/atp_policy.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/audit_logs.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/authentication_settings.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/bandwidth_classes.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/bandwidth_control_rules.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/browser_control_settings.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/casb_dlp_rules.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/casb_malware_rules.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/cloud_app_instances.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/cloud_applications.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/cloud_browser_isolation.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/cloud_firewall.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/cloud_firewall_dns.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/cloud_firewall_ips.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/cloud_firewall_rules.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/cloud_nss.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/cloud_to_cloud_ir.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/cloudappcontrol.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/dedicated_ip_gateways.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/device_management.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/dlp_dictionary.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/dlp_engine.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/dlp_resources.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/dlp_templates.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/dlp_web_rules.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/dns_gatways.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/end_user_notification.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/file_type_control_rule.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/forwarding_control.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/ftp_control_policy.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/gre_tunnel.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/intermediate_certificates.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/iot_report.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/ipv6_config.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/locations.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/malware_protection_policy.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/mobile_threat_settings.py +0 -0
- {zscaler_sdk_python-1.9.8/zscaler/zia → zscaler_sdk_python-1.9.10/zscaler/zia/models}/__init__.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/activation.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/admin_roles.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/admin_users.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/advanced_settings.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/advanced_threat_settings.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/alert_subscriptions.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/apptotal.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/authentication_settings.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/bandwidth_classes.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/bandwidth_control_rules.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/browser_control_settings.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/casb_dlp_rules.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/casb_malware_rules.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_app_instances.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_app_policy.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_browser_isolation.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_firewall_app_services.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_firewall_destination_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_firewall_dns_rules.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_firewall_ips_rules.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_firewall_nw_application_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_firewall_nw_applications.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_firewall_nw_service.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_firewall_nw_service_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_firewall_rules.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_firewall_source_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_firewall_time_windows.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_nss.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_to_cloud_ir.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloudappcontrol.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/common.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/dedicated_ip_gateways.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/device_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/devices.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/dlp_dictionary.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/dlp_engine.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/dlp_resources.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/dlp_templates.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/dlp_web_rules.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/dns_gateways.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/endusernotification.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/filetyperules.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/forwarding_control_policy.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/ftp_control_policy.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/gre_recommended_list.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/gre_tunnel_info.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/gre_tunnels.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/gre_vips.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/intermediate_certificates.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/iotreport.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/ipv6_config.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/location_group.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/location_management.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/malware_protection_settings.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/mobile_threat_settings.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/nat_control_policy.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/nss_servers.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/organization_information.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/pac_files.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/proxies.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/proxy_gateways.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/remoteassistance.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/risk_profiles.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/rule_labels.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/saas_security_api.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/sandboxrules.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/security_policy_settings.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/shadow_it_report.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/ssl_inspection_rules.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/subclouds.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/system_audit.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/tenancy_restriction_profile.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/time_intervals.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/traffic_capture.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/traffic_datacenters.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/traffic_dc_exclusions.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/traffic_extranet.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/traffic_static_ip.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/traffic_vpn_credentials.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/url_filter_cloud_app_settings.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/url_filtering_rules.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/urlcategory.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/user_management.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/vzen_clusters.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/vzen_nodes.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/workload_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/zpa_gateway.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/nat_control_policy.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/nss_servers.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/organization_information.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/pac_files.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/policy_export.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/proxies.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/remote_assistance.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/risk_profiles.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/rule_labels.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/saas_security_api.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/sandbox.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/sandbox_rules.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/security_policy_settings.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/shadow_it_report.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/ssl_inspection_rules.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/sub_clouds.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/system_audit.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/tenancy_restriction_profile.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/time_intervals.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/traffic_capture.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/traffic_datacenters.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/traffic_extranet.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/traffic_static_ip.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/traffic_vpn_credentials.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/url_categories.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/url_filtering.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/user_management.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/vzen_clusters.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/vzen_nodes.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/workload_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/zia_service.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/zpa_gateway.py +0 -0
- {zscaler_sdk_python-1.9.8/zscaler/zia/models → zscaler_sdk_python-1.9.10/zscaler/zidentity}/__init__.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/api_client.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/models/api_client.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/models/common.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/models/groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/models/resource_servers.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/models/user_entitlement.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/models/users.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/resource_servers.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/user_entitlement.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/users.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/zidentity_service.py +0 -0
- {zscaler_sdk_python-1.9.8/zscaler/zidentity → zscaler_sdk_python-1.9.10/zscaler/zpa}/__init__.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/admin_sso_controller.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/administrator_controller.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/api_keys.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/app_connector_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/app_connector_schedule.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/app_connectors.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/app_protection.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/app_segment_by_type.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/app_segments_ba.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/app_segments_ba_v2.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/app_segments_inspection.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/app_segments_pra.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/application_segment.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/branch_connector_group.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/branch_connectors.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/browser_protection.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/c2c_ip_ranges.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/cbi_banner.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/cbi_certificate.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/cbi_profile.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/cbi_region.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/cbi_zpa_profile.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/certificates.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/client_settings.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/cloud_connector_controller.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/cloud_connector_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/config_override_controller.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/customer_controller.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/customer_domain.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/customer_dr_tool.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/customer_version_profile.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/emergency_access.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/enrollment_certificates.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/extranet_resource.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/idp.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/location_controller.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/lss.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/machine_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/managed_browser_profile.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/microtenants.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/administrator_controller.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/api_keys.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/app_connector_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/app_connector_schedule.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/app_connectors.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/app_protection_predefined_controls.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/app_protection_profile.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/application_segment.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/application_segment_lb.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/application_servers.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/branch_connectors.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/browser_protection.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/c2c_ip_ranges.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/cbi_banner.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/cbi_certificate.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/cbi_profile.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/cbi_region.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/cbi_zpa_profile.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/certificates.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/client_settings.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/cloud_connector_controller.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/cloud_connector_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/common.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/config_override_controller.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/customer_controller.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/customer_domain.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/customer_dr_tool.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/customer_version_profile.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/emergency_access.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/enrollment_certificates.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/idp.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/lss.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/machine_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/managed_browser_profile.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/microtenants.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/npn_client_controller.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/oauth2_user_code.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/policyset_controller_v1.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/policyset_controller_v2.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/posture_profiles.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/pra_approval.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/pra_console.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/pra_cred_pool_controller.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/pra_credential.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/pra_portal.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/private_cloud_controller.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/private_cloud_group.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/provisioning_keys.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/role_controller.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/saml_attributes.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/scim_attributes.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/scim_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/segment_group.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/server_group.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/service_edge_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/service_edge_schedule.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/service_edges.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/stepup_auth_level.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/trusted_network.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/user_portal_aup.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/user_portal_controller.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/user_portal_link.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/zia_customer_config.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/npn_client_controller.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/oauth2_user_code.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/policies.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/posture_profiles.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/pra_approval.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/pra_console.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/pra_credential.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/pra_credential_pool.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/pra_portal.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/private_cloud_controller.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/private_cloud_group.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/provisioning.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/role_controller.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/saml_attributes.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/scim_attributes.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/scim_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/segment_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/server_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/servers.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/service_edge_group.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/service_edge_schedule.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/service_edges.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/stepup_auth_level.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/trusted_networks.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/user_portal_aup.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/user_portal_controller.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/user_portal_link.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/workload_tag_group.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/zia_customer_config.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/zpa_service.py +0 -0
- {zscaler_sdk_python-1.9.8/zscaler/zpa → zscaler_sdk_python-1.9.10/zscaler/ztw}/__init__.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/account_details.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/account_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/activation.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/admin_roles.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/admin_users.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/api_keys.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/discovery_service.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/ec_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/forwarding_gateways.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/forwarding_rules.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/ip_destination_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/ip_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/ip_source_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/location_management.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/location_template.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/account_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/activation.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/admin_roles.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/admin_users.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/api_keys.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/common.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/discovery_service.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/ec_group_vm.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/ecgroup.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/forwarding_gateways.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/forwarding_rules.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/ip_destination_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/ip_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/ip_source_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/location_management.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/location_templates.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/nw_service.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/nw_service_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/provisioning_url.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/public_cloud_info.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/traffic_vpn_credentials.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/zpa_resources.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/nw_service.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/nw_service_groups.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/provisioning_url.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/public_cloud_info.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/ztw_service.py +0 -0
- {zscaler_sdk_python-1.9.8/zscaler/ztw → zscaler_sdk_python-1.9.10/zscaler/zwa}/__init__.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/audit_logs.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/dlp_incidents.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/legacy.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/models/audit_logs.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/models/change_history.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/models/common.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/models/generated_tickets.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/models/incident_details.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/models/incident_evidence.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/models/incident_group_search.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/models/incident_search.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/models/incident_trigger.py +0 -0
- {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/zwa_service.py +0 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Zscaler SDK Error Classes
|
|
3
|
+
|
|
4
|
+
This module provides error handling for all Zscaler API responses.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from zscaler.errors.error import Error
|
|
8
|
+
from zscaler.errors.http_error import HTTPError
|
|
9
|
+
from zscaler.errors.zscaler_api_error import ZscalerAPIError
|
|
10
|
+
from zscaler.errors.graphql_error import (
|
|
11
|
+
GraphQLAPIError,
|
|
12
|
+
GraphQLErrorDetail,
|
|
13
|
+
GraphQLErrorLocation,
|
|
14
|
+
is_graphql_error_response,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
__all__ = [
|
|
18
|
+
"Error",
|
|
19
|
+
"HTTPError",
|
|
20
|
+
"ZscalerAPIError",
|
|
21
|
+
"GraphQLAPIError",
|
|
22
|
+
"GraphQLErrorDetail",
|
|
23
|
+
"GraphQLErrorLocation",
|
|
24
|
+
"is_graphql_error_response",
|
|
25
|
+
]
|
|
26
|
+
|
|
@@ -0,0 +1,207 @@
|
|
|
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 Dict, Any, List, Optional, Union
|
|
18
|
+
from dataclasses import dataclass, field
|
|
19
|
+
import json
|
|
20
|
+
import requests
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@dataclass
|
|
24
|
+
class GraphQLErrorLocation:
|
|
25
|
+
"""Represents a location in a GraphQL query where an error occurred."""
|
|
26
|
+
line: int
|
|
27
|
+
column: int
|
|
28
|
+
|
|
29
|
+
@classmethod
|
|
30
|
+
def from_dict(cls, data: Dict[str, int]) -> "GraphQLErrorLocation":
|
|
31
|
+
return cls(
|
|
32
|
+
line=data.get("line", 0),
|
|
33
|
+
column=data.get("column", 0)
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
@dataclass
|
|
38
|
+
class GraphQLErrorDetail:
|
|
39
|
+
"""Represents a single GraphQL error from the errors array."""
|
|
40
|
+
message: str
|
|
41
|
+
locations: List[GraphQLErrorLocation] = field(default_factory=list)
|
|
42
|
+
path: List[str] = field(default_factory=list)
|
|
43
|
+
extensions: Dict[str, Any] = field(default_factory=dict)
|
|
44
|
+
|
|
45
|
+
@classmethod
|
|
46
|
+
def from_dict(cls, data: Dict[str, Any]) -> "GraphQLErrorDetail":
|
|
47
|
+
locations = [
|
|
48
|
+
GraphQLErrorLocation.from_dict(loc)
|
|
49
|
+
for loc in data.get("locations", [])
|
|
50
|
+
]
|
|
51
|
+
return cls(
|
|
52
|
+
message=data.get("message", "Unknown GraphQL error"),
|
|
53
|
+
locations=locations,
|
|
54
|
+
path=data.get("path", []),
|
|
55
|
+
extensions=data.get("extensions", {})
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
@property
|
|
59
|
+
def classification(self) -> Optional[str]:
|
|
60
|
+
"""Get the error classification from extensions."""
|
|
61
|
+
return self.extensions.get("classification")
|
|
62
|
+
|
|
63
|
+
def __str__(self) -> str:
|
|
64
|
+
parts = [self.message]
|
|
65
|
+
if self.path:
|
|
66
|
+
parts.append(f"Path: {'.'.join(str(p) for p in self.path)}")
|
|
67
|
+
if self.classification:
|
|
68
|
+
parts.append(f"Classification: {self.classification}")
|
|
69
|
+
return " | ".join(parts)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class GraphQLAPIError(Exception):
|
|
73
|
+
"""
|
|
74
|
+
Exception for GraphQL API errors from Z-Insights.
|
|
75
|
+
|
|
76
|
+
GraphQL APIs return errors in a different format than REST:
|
|
77
|
+
{
|
|
78
|
+
"errors": [
|
|
79
|
+
{
|
|
80
|
+
"message": "...",
|
|
81
|
+
"locations": [{"line": 1, "column": 1}],
|
|
82
|
+
"path": ["query", "field"],
|
|
83
|
+
"extensions": {"classification": "BAD_REQUEST"}
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"data": {...}
|
|
87
|
+
}
|
|
88
|
+
"""
|
|
89
|
+
|
|
90
|
+
def __init__(
|
|
91
|
+
self,
|
|
92
|
+
url: str,
|
|
93
|
+
response_details: requests.Response,
|
|
94
|
+
response_body: Union[Dict[str, Any], str],
|
|
95
|
+
service_type: str = "zins"
|
|
96
|
+
) -> None:
|
|
97
|
+
self.url: str = url
|
|
98
|
+
self.status_code: int = response_details.status_code
|
|
99
|
+
self.service_type: str = service_type
|
|
100
|
+
self.headers: Dict[str, Any] = dict(response_details.headers)
|
|
101
|
+
|
|
102
|
+
# Parse the response body
|
|
103
|
+
if isinstance(response_body, str):
|
|
104
|
+
try:
|
|
105
|
+
response_body = json.loads(response_body)
|
|
106
|
+
except json.JSONDecodeError:
|
|
107
|
+
response_body = {"errors": [{"message": response_body}]}
|
|
108
|
+
|
|
109
|
+
# Extract GraphQL errors
|
|
110
|
+
raw_errors = response_body.get("errors", [])
|
|
111
|
+
self.errors: List[GraphQLErrorDetail] = [
|
|
112
|
+
GraphQLErrorDetail.from_dict(err) for err in raw_errors
|
|
113
|
+
]
|
|
114
|
+
|
|
115
|
+
# Store the data portion (may be partial)
|
|
116
|
+
self.data: Optional[Dict[str, Any]] = response_body.get("data")
|
|
117
|
+
|
|
118
|
+
# Build the error message
|
|
119
|
+
if self.errors:
|
|
120
|
+
self.error_message = self.errors[0].message
|
|
121
|
+
self.classification = self.errors[0].classification
|
|
122
|
+
self.path = self.errors[0].path
|
|
123
|
+
else:
|
|
124
|
+
self.error_message = "Unknown GraphQL error"
|
|
125
|
+
self.classification = None
|
|
126
|
+
self.path = []
|
|
127
|
+
|
|
128
|
+
# Construct the full message
|
|
129
|
+
message_parts = [f"GraphQL Error"]
|
|
130
|
+
if self.status_code != 200:
|
|
131
|
+
message_parts.append(f"HTTP {self.status_code}")
|
|
132
|
+
if self.classification:
|
|
133
|
+
message_parts.append(f"[{self.classification}]")
|
|
134
|
+
message_parts.append(self.error_message)
|
|
135
|
+
|
|
136
|
+
self.message = " - ".join(message_parts)
|
|
137
|
+
super().__init__(self.message)
|
|
138
|
+
|
|
139
|
+
@property
|
|
140
|
+
def is_bad_request(self) -> bool:
|
|
141
|
+
"""Check if the error is a BAD_REQUEST classification."""
|
|
142
|
+
return self.classification == "BAD_REQUEST"
|
|
143
|
+
|
|
144
|
+
@property
|
|
145
|
+
def is_validation_error(self) -> bool:
|
|
146
|
+
"""Check if the error is a validation error."""
|
|
147
|
+
return self.classification in ["BAD_REQUEST", "VALIDATION_ERROR"]
|
|
148
|
+
|
|
149
|
+
@property
|
|
150
|
+
def is_authorization_error(self) -> bool:
|
|
151
|
+
"""Check if the error is an authorization error."""
|
|
152
|
+
return self.classification in ["UNAUTHORIZED", "FORBIDDEN"]
|
|
153
|
+
|
|
154
|
+
@property
|
|
155
|
+
def all_error_messages(self) -> List[str]:
|
|
156
|
+
"""Get all error messages from the errors array."""
|
|
157
|
+
return [err.message for err in self.errors]
|
|
158
|
+
|
|
159
|
+
def __str__(self) -> str:
|
|
160
|
+
error_payload = {
|
|
161
|
+
"service": self.service_type,
|
|
162
|
+
"status": self.status_code,
|
|
163
|
+
"url": self.url,
|
|
164
|
+
"errors": [
|
|
165
|
+
{
|
|
166
|
+
"message": err.message,
|
|
167
|
+
"path": err.path,
|
|
168
|
+
"classification": err.classification
|
|
169
|
+
}
|
|
170
|
+
for err in self.errors
|
|
171
|
+
]
|
|
172
|
+
}
|
|
173
|
+
return json.dumps(error_payload, indent=2)
|
|
174
|
+
|
|
175
|
+
def __repr__(self) -> str:
|
|
176
|
+
return f"GraphQLAPIError({self.message})"
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def is_graphql_error_response(response_body: Union[Dict[str, Any], str]) -> bool:
|
|
180
|
+
"""
|
|
181
|
+
Check if a response body contains GraphQL errors.
|
|
182
|
+
|
|
183
|
+
GraphQL can return HTTP 200 with errors in the body, so we need
|
|
184
|
+
to check the response structure, not just the status code.
|
|
185
|
+
|
|
186
|
+
Args:
|
|
187
|
+
response_body: The response body (dict or JSON string)
|
|
188
|
+
|
|
189
|
+
Returns:
|
|
190
|
+
True if the response contains GraphQL errors
|
|
191
|
+
"""
|
|
192
|
+
if isinstance(response_body, str):
|
|
193
|
+
try:
|
|
194
|
+
response_body = json.loads(response_body)
|
|
195
|
+
except json.JSONDecodeError:
|
|
196
|
+
return False
|
|
197
|
+
|
|
198
|
+
if not isinstance(response_body, dict):
|
|
199
|
+
return False
|
|
200
|
+
|
|
201
|
+
# GraphQL error responses have an "errors" array
|
|
202
|
+
errors = response_body.get("errors")
|
|
203
|
+
if errors and isinstance(errors, list) and len(errors) > 0:
|
|
204
|
+
return True
|
|
205
|
+
|
|
206
|
+
return False
|
|
207
|
+
|
|
@@ -4,6 +4,7 @@ import json
|
|
|
4
4
|
import logging
|
|
5
5
|
from zscaler.errors.http_error import HTTPError
|
|
6
6
|
from zscaler.errors.zscaler_api_error import ZscalerAPIError
|
|
7
|
+
from zscaler.errors.graphql_error import GraphQLAPIError, is_graphql_error_response
|
|
7
8
|
from zscaler.exceptions import HTTPException, ZscalerAPIException
|
|
8
9
|
from zscaler.exceptions import exceptions
|
|
9
10
|
|
|
@@ -11,7 +12,7 @@ logger = logging.getLogger(__name__)
|
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
# @staticmethod
|
|
14
|
-
def check_response_for_error(url, response_details, response_body):
|
|
15
|
+
def check_response_for_error(url, response_details, response_body, service_type: str = ""):
|
|
15
16
|
"""
|
|
16
17
|
Checks HTTP response for errors in the response body.
|
|
17
18
|
|
|
@@ -19,6 +20,7 @@ def check_response_for_error(url, response_details, response_body):
|
|
|
19
20
|
url (str): URL of the response
|
|
20
21
|
response_details (requests.Response): Response object with details
|
|
21
22
|
response_body (str): Response body in JSON or plain string
|
|
23
|
+
service_type (str): The service type (e.g., 'zins' for GraphQL)
|
|
22
24
|
|
|
23
25
|
Returns:
|
|
24
26
|
Tuple(dict or None, error or None)
|
|
@@ -43,6 +45,29 @@ def check_response_for_error(url, response_details, response_body):
|
|
|
43
45
|
# ✅ Only now we are confident it's safe to access .status_code
|
|
44
46
|
status_code = response_details.status_code
|
|
45
47
|
|
|
48
|
+
# Check for GraphQL errors (can return HTTP 200 with errors in body)
|
|
49
|
+
# GraphQL APIs like Z-Insights return errors in the response body
|
|
50
|
+
if is_graphql_error_response(formatted_response):
|
|
51
|
+
try:
|
|
52
|
+
# Determine service type from URL if not provided
|
|
53
|
+
if not service_type and "/zins" in url:
|
|
54
|
+
service_type = "zins"
|
|
55
|
+
|
|
56
|
+
error = GraphQLAPIError(url, response_details, formatted_response, service_type)
|
|
57
|
+
logger.debug(f"GraphQL error detected: {error.message}")
|
|
58
|
+
if exceptions.raise_exception:
|
|
59
|
+
raise ZscalerAPIException(error)
|
|
60
|
+
return None, error
|
|
61
|
+
except ZscalerAPIException:
|
|
62
|
+
raise
|
|
63
|
+
except Exception as e:
|
|
64
|
+
logger.exception("Failed to construct GraphQLAPIError.")
|
|
65
|
+
generic_error = HTTPError(url, response_details, formatted_response)
|
|
66
|
+
if exceptions.raise_exception:
|
|
67
|
+
raise HTTPException(str(generic_error)) from e
|
|
68
|
+
return None, generic_error
|
|
69
|
+
|
|
70
|
+
# Standard REST API response handling
|
|
46
71
|
if 200 <= status_code < 300:
|
|
47
72
|
return formatted_response, None
|
|
48
73
|
|
|
@@ -52,6 +77,8 @@ def check_response_for_error(url, response_details, response_body):
|
|
|
52
77
|
raise ZscalerAPIException(error)
|
|
53
78
|
return None, error
|
|
54
79
|
|
|
80
|
+
except ZscalerAPIException:
|
|
81
|
+
raise
|
|
55
82
|
except Exception as e:
|
|
56
83
|
logger.exception("Failed to construct ZscalerAPIError.")
|
|
57
84
|
generic_error = HTTPError(url, response_details, formatted_response)
|
|
@@ -185,7 +185,7 @@ class Client:
|
|
|
185
185
|
)
|
|
186
186
|
# self.logger.debug("Request executor initialized.")
|
|
187
187
|
|
|
188
|
-
# Lazy load
|
|
188
|
+
# Lazy load service clients
|
|
189
189
|
self._zcc = None
|
|
190
190
|
self._ztw = None
|
|
191
191
|
self._zia = None
|
|
@@ -193,7 +193,8 @@ class Client:
|
|
|
193
193
|
self._zpa = None
|
|
194
194
|
self._zdx = None
|
|
195
195
|
self._zidentity = None
|
|
196
|
-
self._zeasm= None
|
|
196
|
+
self._zeasm = None
|
|
197
|
+
self._zins = None # Z-Insights (GraphQL Analytics API)
|
|
197
198
|
# self.logger.debug("Client initialized successfully.")
|
|
198
199
|
|
|
199
200
|
def authenticate(self):
|
|
@@ -271,6 +272,44 @@ class Client:
|
|
|
271
272
|
self._zeasm = ZEASMService(self._request_executor)
|
|
272
273
|
return self._zeasm
|
|
273
274
|
|
|
275
|
+
@property
|
|
276
|
+
def zinsights(self):
|
|
277
|
+
"""
|
|
278
|
+
Z-Insights Analytics Service (GraphQL API).
|
|
279
|
+
|
|
280
|
+
Provides access to Zscaler analytics data including:
|
|
281
|
+
- WEB_TRAFFIC: Web traffic analytics and reports
|
|
282
|
+
- CYBER_SECURITY: Security incidents and threat data
|
|
283
|
+
- ZERO_TRUST_FIREWALL: Firewall traffic and policy data
|
|
284
|
+
- IOT: IoT device visibility and statistics
|
|
285
|
+
- SHADOW_IT: Shadow IT discovery and application data
|
|
286
|
+
- SAAS_SECURITY: CASB and SaaS security data
|
|
287
|
+
|
|
288
|
+
Note: Z-Insights only supports OneAPI authentication.
|
|
289
|
+
Legacy client authentication is not supported.
|
|
290
|
+
|
|
291
|
+
Example:
|
|
292
|
+
with ZscalerClient(config) as client:
|
|
293
|
+
response, error = client.zinsights.graphql.execute(
|
|
294
|
+
query='{ WEB_TRAFFIC { ... } }'
|
|
295
|
+
)
|
|
296
|
+
"""
|
|
297
|
+
if self.use_legacy_client:
|
|
298
|
+
raise RuntimeError(
|
|
299
|
+
"Z-Insights (zinsights) does not support legacy client authentication. "
|
|
300
|
+
"Please use OneAPI authentication with clientId and clientSecret."
|
|
301
|
+
)
|
|
302
|
+
if self._zins is None:
|
|
303
|
+
from zscaler.zinsights.zinsights_service import ZInsightsService
|
|
304
|
+
self._zins = ZInsightsService(self._request_executor)
|
|
305
|
+
return self._zins
|
|
306
|
+
|
|
307
|
+
# Alias for backward compatibility
|
|
308
|
+
@property
|
|
309
|
+
def zins(self):
|
|
310
|
+
"""Alias for zinsights property."""
|
|
311
|
+
return self.zinsights
|
|
312
|
+
|
|
274
313
|
def __enter__(self):
|
|
275
314
|
"""
|
|
276
315
|
Automatically create and set session within context manager.
|
|
@@ -156,6 +156,12 @@ class RequestExecutor:
|
|
|
156
156
|
else:
|
|
157
157
|
return f"https://{self.vanity_domain}-admin.zslogin.net/admin/api/v1"
|
|
158
158
|
|
|
159
|
+
# Special handling for Z-Insights (zins) GraphQL API
|
|
160
|
+
if "/zins" in endpoint:
|
|
161
|
+
if self.cloud and self.cloud != "production":
|
|
162
|
+
return f"https://api.{self.cloud}.zsapi.net"
|
|
163
|
+
return self.BASE_URL
|
|
164
|
+
|
|
159
165
|
if self.cloud and self.cloud != "production":
|
|
160
166
|
return f"https://api.{self.cloud}.zsapi.net"
|
|
161
167
|
return self.BASE_URL
|
|
@@ -182,6 +188,8 @@ class RequestExecutor:
|
|
|
182
188
|
return "admin"
|
|
183
189
|
elif "/easm/easm-ui/v1" in url:
|
|
184
190
|
return "zeasm"
|
|
191
|
+
elif "/zins" in url:
|
|
192
|
+
return "zins"
|
|
185
193
|
if self.use_legacy_client:
|
|
186
194
|
url = self.remove_oneapi_endpoint_prefix(url)
|
|
187
195
|
# Recheck for service type after removing the prefix
|
|
@@ -202,7 +210,7 @@ class RequestExecutor:
|
|
|
202
210
|
raise ValueError(f"Unsupported service: {url}")
|
|
203
211
|
|
|
204
212
|
def remove_oneapi_endpoint_prefix(self, endpoint: str) -> str:
|
|
205
|
-
prefixes = ["admin", "/zia", "/zpa", "/zcc", "/ztw", "/zdx", "/zwa"]
|
|
213
|
+
prefixes = ["admin", "/zia", "/zpa", "/zcc", "/ztw", "/zdx", "/zwa", "/zins"]
|
|
206
214
|
for prefix in prefixes:
|
|
207
215
|
if endpoint.startswith(prefix):
|
|
208
216
|
return endpoint[len(prefix) :]
|
|
@@ -484,8 +484,16 @@ class LegacyZIAClientHelper:
|
|
|
484
484
|
)
|
|
485
485
|
|
|
486
486
|
if resp.status_code == 429:
|
|
487
|
-
|
|
488
|
-
|
|
487
|
+
# ZIA returns "Retry-After": "0 seconds" (with " seconds" suffix)
|
|
488
|
+
retry_after = resp.headers.get("Retry-After", "2")
|
|
489
|
+
# Strip " seconds" suffix if present
|
|
490
|
+
if isinstance(retry_after, str):
|
|
491
|
+
retry_after = retry_after.replace(" seconds", "").replace("seconds", "").strip()
|
|
492
|
+
sleep_time = int(retry_after) if retry_after else 2
|
|
493
|
+
# ZIA rate limit is 1/second, so wait at least 1 second
|
|
494
|
+
sleep_time = max(sleep_time, 1)
|
|
495
|
+
logger.warning(f"Rate limit exceeded (429). Retrying in {sleep_time} seconds. "
|
|
496
|
+
f"(Attempt {attempts + 1}/5)")
|
|
489
497
|
sleep(sleep_time)
|
|
490
498
|
attempts += 1
|
|
491
499
|
continue
|
|
@@ -0,0 +1,21 @@
|
|
|
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 zscaler.zinsights.zinsights_service import ZInsightsService
|
|
18
|
+
|
|
19
|
+
__all__ = [
|
|
20
|
+
"ZInsightsService",
|
|
21
|
+
]
|
|
@@ -0,0 +1,220 @@
|
|
|
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, List
|
|
18
|
+
|
|
19
|
+
from zscaler.api_client import APIClient
|
|
20
|
+
from zscaler.request_executor import RequestExecutor
|
|
21
|
+
from zscaler.utils import format_url
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class CyberSecurityAPI(APIClient):
|
|
25
|
+
"""
|
|
26
|
+
A Client object for the Z-Insights CYBER_SECURITY domain.
|
|
27
|
+
|
|
28
|
+
Cybersecurity Insights provides a unified real-time visibility into critical
|
|
29
|
+
security incidents and policy actions to understand the security efficacy of
|
|
30
|
+
layered defense across Malware Protection, Advanced Threat Protection (ATP),
|
|
31
|
+
Sandbox, Firewall, and Isolation for your organization.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
_zinsights_base_endpoint = "/zins/graphql"
|
|
35
|
+
|
|
36
|
+
def __init__(self, request_executor: RequestExecutor) -> None:
|
|
37
|
+
super().__init__()
|
|
38
|
+
self._request_executor = request_executor
|
|
39
|
+
|
|
40
|
+
def get_incidents(
|
|
41
|
+
self,
|
|
42
|
+
start_time: int,
|
|
43
|
+
end_time: int,
|
|
44
|
+
categorize_by: List[str] = None,
|
|
45
|
+
limit: Optional[int] = None,
|
|
46
|
+
) -> tuple:
|
|
47
|
+
"""
|
|
48
|
+
Get cybersecurity incidents data grouped by category.
|
|
49
|
+
|
|
50
|
+
Note: This query returns nested entries. Each entry may have sub-entries.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
start_time: Start time in epoch milliseconds.
|
|
54
|
+
end_time: End time in epoch milliseconds.
|
|
55
|
+
categorize_by: List of categories to group by. Options:
|
|
56
|
+
- THREAT_CATEGORY_ID
|
|
57
|
+
- APP_ID
|
|
58
|
+
- USER_ID
|
|
59
|
+
- TIME
|
|
60
|
+
- SRC_COUNTRY
|
|
61
|
+
Default: ["THREAT_CATEGORY_ID"]
|
|
62
|
+
limit: Maximum number of entries to return.
|
|
63
|
+
|
|
64
|
+
Returns:
|
|
65
|
+
tuple: (entries_list, response, error)
|
|
66
|
+
|
|
67
|
+
Examples:
|
|
68
|
+
>>> entries, _, err = client.zinsights.cyber_security.get_incidents(
|
|
69
|
+
... start_time=start_time,
|
|
70
|
+
... end_time=end_time,
|
|
71
|
+
... categorize_by=["THREAT_CATEGORY_ID"],
|
|
72
|
+
... limit=10
|
|
73
|
+
... )
|
|
74
|
+
"""
|
|
75
|
+
if categorize_by is None:
|
|
76
|
+
categorize_by = ["THREAT_CATEGORY_ID"]
|
|
77
|
+
|
|
78
|
+
query = """
|
|
79
|
+
query CyberSecurityIncidents(
|
|
80
|
+
$startTime: Long!, $endTime: Long!,
|
|
81
|
+
$categorizeBy: [IncidentsGroupBy!]!, $limit: Int
|
|
82
|
+
) {
|
|
83
|
+
CYBER_SECURITY {
|
|
84
|
+
incidents(
|
|
85
|
+
categorize_by: $categorizeBy,
|
|
86
|
+
start_time: $startTime,
|
|
87
|
+
end_time: $endTime
|
|
88
|
+
) {
|
|
89
|
+
obfuscated
|
|
90
|
+
entries(limit: $limit) {
|
|
91
|
+
name
|
|
92
|
+
total
|
|
93
|
+
entries(limit: $limit) {
|
|
94
|
+
name
|
|
95
|
+
total
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
"""
|
|
102
|
+
|
|
103
|
+
variables = {
|
|
104
|
+
"startTime": start_time,
|
|
105
|
+
"endTime": end_time,
|
|
106
|
+
"categorizeBy": categorize_by,
|
|
107
|
+
"limit": limit,
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
body = {
|
|
111
|
+
"query": query,
|
|
112
|
+
"variables": variables,
|
|
113
|
+
"operationName": "CyberSecurityIncidents",
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
http_method = "POST"
|
|
117
|
+
api_url = format_url(self._zinsights_base_endpoint)
|
|
118
|
+
|
|
119
|
+
request, error = self._request_executor.create_request(http_method, api_url, body, {})
|
|
120
|
+
if error:
|
|
121
|
+
return (None, None, error)
|
|
122
|
+
|
|
123
|
+
response, error = self._request_executor.execute(request)
|
|
124
|
+
if error:
|
|
125
|
+
return (None, response, error)
|
|
126
|
+
|
|
127
|
+
try:
|
|
128
|
+
body = response.get_body() if response else {}
|
|
129
|
+
# GraphQL responses have data wrapped in "data" key
|
|
130
|
+
data = body.get("data", {}) if isinstance(body, dict) else {}
|
|
131
|
+
entries = data.get("CYBER_SECURITY", {}).get("incidents", {}).get("entries", [])
|
|
132
|
+
return (entries, response, None)
|
|
133
|
+
except Exception as ex:
|
|
134
|
+
return (None, response, ex)
|
|
135
|
+
|
|
136
|
+
def get_incidents_by_location(
|
|
137
|
+
self,
|
|
138
|
+
start_time: int,
|
|
139
|
+
end_time: int,
|
|
140
|
+
categorize_by: str = "LOCATION_ID",
|
|
141
|
+
limit: Optional[int] = None,
|
|
142
|
+
) -> tuple:
|
|
143
|
+
"""
|
|
144
|
+
Get cybersecurity incidents grouped by location or other dimension.
|
|
145
|
+
|
|
146
|
+
Args:
|
|
147
|
+
start_time: Start time in epoch milliseconds.
|
|
148
|
+
end_time: End time in epoch milliseconds.
|
|
149
|
+
categorize_by: Category to group by. Options:
|
|
150
|
+
- LOCATION_ID (default)
|
|
151
|
+
- APP_ID
|
|
152
|
+
- USER_ID
|
|
153
|
+
- DEPARTMENT_ID
|
|
154
|
+
limit: Maximum number of entries to return.
|
|
155
|
+
|
|
156
|
+
Returns:
|
|
157
|
+
tuple: (entries_list, response, error)
|
|
158
|
+
|
|
159
|
+
Examples:
|
|
160
|
+
>>> entries, _, err = client.zinsights.cyber_security.get_incidents_by_location(
|
|
161
|
+
... start_time=start_time,
|
|
162
|
+
... end_time=end_time,
|
|
163
|
+
... categorize_by="LOCATION_ID",
|
|
164
|
+
... limit=10
|
|
165
|
+
... )
|
|
166
|
+
"""
|
|
167
|
+
query = """
|
|
168
|
+
query CyberSecurityByLocation(
|
|
169
|
+
$startTime: Long!, $endTime: Long!,
|
|
170
|
+
$categorizeBy: IncidentsWithIdGroupBy!, $limit: Int
|
|
171
|
+
) {
|
|
172
|
+
CYBER_SECURITY {
|
|
173
|
+
cyber_security_location(
|
|
174
|
+
categorize_by: $categorizeBy,
|
|
175
|
+
start_time: $startTime,
|
|
176
|
+
end_time: $endTime
|
|
177
|
+
) {
|
|
178
|
+
obfuscated
|
|
179
|
+
entries(limit: $limit) {
|
|
180
|
+
id
|
|
181
|
+
name
|
|
182
|
+
total
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
"""
|
|
188
|
+
|
|
189
|
+
variables = {
|
|
190
|
+
"startTime": start_time,
|
|
191
|
+
"endTime": end_time,
|
|
192
|
+
"categorizeBy": categorize_by,
|
|
193
|
+
"limit": limit,
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
body = {
|
|
197
|
+
"query": query,
|
|
198
|
+
"variables": variables,
|
|
199
|
+
"operationName": "CyberSecurityByLocation",
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
http_method = "POST"
|
|
203
|
+
api_url = format_url(self._zinsights_base_endpoint)
|
|
204
|
+
|
|
205
|
+
request, error = self._request_executor.create_request(http_method, api_url, body, {})
|
|
206
|
+
if error:
|
|
207
|
+
return (None, None, error)
|
|
208
|
+
|
|
209
|
+
response, error = self._request_executor.execute(request)
|
|
210
|
+
if error:
|
|
211
|
+
return (None, response, error)
|
|
212
|
+
|
|
213
|
+
try:
|
|
214
|
+
body = response.get_body() if response else {}
|
|
215
|
+
# GraphQL responses have data wrapped in "data" key
|
|
216
|
+
data = body.get("data", {}) if isinstance(body, dict) else {}
|
|
217
|
+
entries = data.get("CYBER_SECURITY", {}).get("cyber_security_location", {}).get("entries", [])
|
|
218
|
+
return (entries, response, None)
|
|
219
|
+
except Exception as ex:
|
|
220
|
+
return (None, response, ex)
|