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.
Files changed (482) hide show
  1. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/PKG-INFO +1 -1
  2. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/pyproject.toml +1 -1
  3. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/__init__.py +1 -1
  4. zscaler_sdk_python-1.9.10/zscaler/errors/__init__.py +26 -0
  5. zscaler_sdk_python-1.9.10/zscaler/errors/graphql_error.py +207 -0
  6. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/errors/response_checker.py +28 -1
  7. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/oneapi_client.py +41 -2
  8. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/request_executor.py +9 -1
  9. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/legacy.py +10 -2
  10. zscaler_sdk_python-1.9.10/zscaler/zinsights/__init__.py +21 -0
  11. zscaler_sdk_python-1.9.10/zscaler/zinsights/cyber_security.py +220 -0
  12. zscaler_sdk_python-1.9.10/zscaler/zinsights/firewall.py +291 -0
  13. zscaler_sdk_python-1.9.10/zscaler/zinsights/iot.py +135 -0
  14. zscaler_sdk_python-1.9.10/zscaler/zinsights/models/__init__.py +19 -0
  15. zscaler_sdk_python-1.9.10/zscaler/zinsights/models/common.py +325 -0
  16. zscaler_sdk_python-1.9.10/zscaler/zinsights/models/enums.py +164 -0
  17. zscaler_sdk_python-1.9.10/zscaler/zinsights/models/inputs.py +453 -0
  18. zscaler_sdk_python-1.9.10/zscaler/zinsights/saas_security.py +126 -0
  19. zscaler_sdk_python-1.9.10/zscaler/zinsights/shadow_it.py +315 -0
  20. zscaler_sdk_python-1.9.10/zscaler/zinsights/web_traffic.py +476 -0
  21. zscaler_sdk_python-1.9.10/zscaler/zinsights/zinsights_service.py +78 -0
  22. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/legacy.py +7 -2
  23. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/legacy.py +10 -2
  24. zscaler_sdk_python-1.9.8/zscaler/zwa/__init__.py +0 -0
  25. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/LICENSE.md +0 -0
  26. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/README.md +0 -0
  27. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/api_client.py +0 -0
  28. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/cache/__init__.py +0 -0
  29. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/cache/cache.py +0 -0
  30. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/cache/no_op_cache.py +0 -0
  31. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/cache/zscaler_cache.py +0 -0
  32. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/config/__init__.py +0 -0
  33. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/config/config_setter.py +0 -0
  34. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/config/config_validator.py +0 -0
  35. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/constants.py +0 -0
  36. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/error_messages.py +0 -0
  37. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/errors/error.py +0 -0
  38. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/errors/http_error.py +0 -0
  39. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/errors/zscaler_api_error.py +0 -0
  40. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/exceptions/__init__.py +0 -0
  41. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/exceptions/exceptions.py +0 -0
  42. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/helpers.py +0 -0
  43. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/logger.py +0 -0
  44. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/oneapi_collection.py +0 -0
  45. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/oneapi_http_client.py +0 -0
  46. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/oneapi_oauth_client.py +0 -0
  47. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/oneapi_object.py +0 -0
  48. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/oneapi_response.py +0 -0
  49. {zscaler_sdk_python-1.9.8/zscaler/errors → zscaler_sdk_python-1.9.10/zscaler/ratelimiter}/__init__.py +0 -0
  50. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ratelimiter/ratelimiter.py +0 -0
  51. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/types.py +0 -0
  52. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/user_agent.py +0 -0
  53. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/utils.py +0 -0
  54. {zscaler_sdk_python-1.9.8/zscaler/ratelimiter → zscaler_sdk_python-1.9.10/zscaler/zcc}/__init__.py +0 -0
  55. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/admin_user.py +0 -0
  56. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/company.py +0 -0
  57. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/devices.py +0 -0
  58. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/entitlements.py +0 -0
  59. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/fail_open_policy.py +0 -0
  60. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/forwarding_profile.py +0 -0
  61. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/legacy.py +0 -0
  62. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/admin_roles.py +0 -0
  63. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/admin_user.py +0 -0
  64. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/devices.py +0 -0
  65. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/failopenpolicy.py +0 -0
  66. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/forwardingprofile.py +0 -0
  67. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/getcompanyinfo.py +0 -0
  68. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/manage_pass.py +0 -0
  69. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/secrets_otp.py +0 -0
  70. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/secrets_passwords.py +0 -0
  71. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/trustednetworks.py +0 -0
  72. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/webappservice.py +0 -0
  73. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/webpolicy.py +0 -0
  74. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/webprivacy.py +0 -0
  75. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/zdxgroupentitlements.py +0 -0
  76. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/models/zpagroupentitlements.py +0 -0
  77. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/secrets.py +0 -0
  78. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/trusted_networks.py +0 -0
  79. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/web_app_service.py +0 -0
  80. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/web_policy.py +0 -0
  81. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/web_privacy.py +0 -0
  82. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zcc/zcc_service.py +0 -0
  83. {zscaler_sdk_python-1.9.8/zscaler/zcc → zscaler_sdk_python-1.9.10/zscaler/zdx}/__init__.py +0 -0
  84. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/admin.py +0 -0
  85. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/alerts.py +0 -0
  86. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/apps.py +0 -0
  87. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/devices.py +0 -0
  88. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/inventory.py +0 -0
  89. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/legacy.py +0 -0
  90. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/models/administration.py +0 -0
  91. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/models/alerts.py +0 -0
  92. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/models/application_users.py +0 -0
  93. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/models/applications.py +0 -0
  94. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/models/call_quality_metrics.py +0 -0
  95. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/models/common.py +0 -0
  96. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/models/devices.py +0 -0
  97. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/models/snapshot.py +0 -0
  98. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/models/software_inventory.py +0 -0
  99. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/models/troubleshooting.py +0 -0
  100. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/models/users.py +0 -0
  101. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/snapshot.py +0 -0
  102. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/troubleshooting.py +0 -0
  103. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/users.py +0 -0
  104. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zdx/zdx_service.py +0 -0
  105. {zscaler_sdk_python-1.9.8/zscaler/zdx → zscaler_sdk_python-1.9.10/zscaler/zeasm}/__init__.py +0 -0
  106. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zeasm/findings.py +0 -0
  107. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zeasm/lookalike_domains.py +0 -0
  108. {zscaler_sdk_python-1.9.8/zscaler/zeasm → zscaler_sdk_python-1.9.10/zscaler/zeasm/models}/__init__.py +0 -0
  109. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zeasm/models/common.py +0 -0
  110. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zeasm/models/findings.py +0 -0
  111. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zeasm/models/lookalike_domains.py +0 -0
  112. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zeasm/models/organizations.py +0 -0
  113. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zeasm/organizations.py +0 -0
  114. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zeasm/zeasm_service.py +0 -0
  115. {zscaler_sdk_python-1.9.8/zscaler/zeasm/models → zscaler_sdk_python-1.9.10/zscaler/zia}/__init__.py +0 -0
  116. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/activate.py +0 -0
  117. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/admin_roles.py +0 -0
  118. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/admin_users.py +0 -0
  119. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/advanced_settings.py +0 -0
  120. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/alert_subscriptions.py +0 -0
  121. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/apptotal.py +0 -0
  122. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/atp_policy.py +0 -0
  123. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/audit_logs.py +0 -0
  124. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/authentication_settings.py +0 -0
  125. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/bandwidth_classes.py +0 -0
  126. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/bandwidth_control_rules.py +0 -0
  127. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/browser_control_settings.py +0 -0
  128. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/casb_dlp_rules.py +0 -0
  129. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/casb_malware_rules.py +0 -0
  130. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/cloud_app_instances.py +0 -0
  131. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/cloud_applications.py +0 -0
  132. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/cloud_browser_isolation.py +0 -0
  133. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/cloud_firewall.py +0 -0
  134. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/cloud_firewall_dns.py +0 -0
  135. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/cloud_firewall_ips.py +0 -0
  136. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/cloud_firewall_rules.py +0 -0
  137. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/cloud_nss.py +0 -0
  138. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/cloud_to_cloud_ir.py +0 -0
  139. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/cloudappcontrol.py +0 -0
  140. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/dedicated_ip_gateways.py +0 -0
  141. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/device_management.py +0 -0
  142. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/dlp_dictionary.py +0 -0
  143. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/dlp_engine.py +0 -0
  144. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/dlp_resources.py +0 -0
  145. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/dlp_templates.py +0 -0
  146. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/dlp_web_rules.py +0 -0
  147. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/dns_gatways.py +0 -0
  148. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/end_user_notification.py +0 -0
  149. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/file_type_control_rule.py +0 -0
  150. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/forwarding_control.py +0 -0
  151. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/ftp_control_policy.py +0 -0
  152. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/gre_tunnel.py +0 -0
  153. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/intermediate_certificates.py +0 -0
  154. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/iot_report.py +0 -0
  155. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/ipv6_config.py +0 -0
  156. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/locations.py +0 -0
  157. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/malware_protection_policy.py +0 -0
  158. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/mobile_threat_settings.py +0 -0
  159. {zscaler_sdk_python-1.9.8/zscaler/zia → zscaler_sdk_python-1.9.10/zscaler/zia/models}/__init__.py +0 -0
  160. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/activation.py +0 -0
  161. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/admin_roles.py +0 -0
  162. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/admin_users.py +0 -0
  163. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/advanced_settings.py +0 -0
  164. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/advanced_threat_settings.py +0 -0
  165. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/alert_subscriptions.py +0 -0
  166. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/apptotal.py +0 -0
  167. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/authentication_settings.py +0 -0
  168. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/bandwidth_classes.py +0 -0
  169. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/bandwidth_control_rules.py +0 -0
  170. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/browser_control_settings.py +0 -0
  171. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/casb_dlp_rules.py +0 -0
  172. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/casb_malware_rules.py +0 -0
  173. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_app_instances.py +0 -0
  174. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_app_policy.py +0 -0
  175. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_browser_isolation.py +0 -0
  176. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_firewall_app_services.py +0 -0
  177. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_firewall_destination_groups.py +0 -0
  178. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_firewall_dns_rules.py +0 -0
  179. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_firewall_ips_rules.py +0 -0
  180. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_firewall_nw_application_groups.py +0 -0
  181. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_firewall_nw_applications.py +0 -0
  182. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_firewall_nw_service.py +0 -0
  183. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_firewall_nw_service_groups.py +0 -0
  184. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_firewall_rules.py +0 -0
  185. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_firewall_source_groups.py +0 -0
  186. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_firewall_time_windows.py +0 -0
  187. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_nss.py +0 -0
  188. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloud_to_cloud_ir.py +0 -0
  189. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/cloudappcontrol.py +0 -0
  190. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/common.py +0 -0
  191. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/dedicated_ip_gateways.py +0 -0
  192. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/device_groups.py +0 -0
  193. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/devices.py +0 -0
  194. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/dlp_dictionary.py +0 -0
  195. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/dlp_engine.py +0 -0
  196. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/dlp_resources.py +0 -0
  197. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/dlp_templates.py +0 -0
  198. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/dlp_web_rules.py +0 -0
  199. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/dns_gateways.py +0 -0
  200. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/endusernotification.py +0 -0
  201. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/filetyperules.py +0 -0
  202. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/forwarding_control_policy.py +0 -0
  203. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/ftp_control_policy.py +0 -0
  204. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/gre_recommended_list.py +0 -0
  205. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/gre_tunnel_info.py +0 -0
  206. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/gre_tunnels.py +0 -0
  207. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/gre_vips.py +0 -0
  208. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/intermediate_certificates.py +0 -0
  209. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/iotreport.py +0 -0
  210. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/ipv6_config.py +0 -0
  211. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/location_group.py +0 -0
  212. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/location_management.py +0 -0
  213. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/malware_protection_settings.py +0 -0
  214. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/mobile_threat_settings.py +0 -0
  215. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/nat_control_policy.py +0 -0
  216. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/nss_servers.py +0 -0
  217. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/organization_information.py +0 -0
  218. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/pac_files.py +0 -0
  219. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/proxies.py +0 -0
  220. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/proxy_gateways.py +0 -0
  221. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/remoteassistance.py +0 -0
  222. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/risk_profiles.py +0 -0
  223. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/rule_labels.py +0 -0
  224. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/saas_security_api.py +0 -0
  225. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/sandboxrules.py +0 -0
  226. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/security_policy_settings.py +0 -0
  227. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/shadow_it_report.py +0 -0
  228. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/ssl_inspection_rules.py +0 -0
  229. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/subclouds.py +0 -0
  230. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/system_audit.py +0 -0
  231. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/tenancy_restriction_profile.py +0 -0
  232. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/time_intervals.py +0 -0
  233. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/traffic_capture.py +0 -0
  234. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/traffic_datacenters.py +0 -0
  235. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/traffic_dc_exclusions.py +0 -0
  236. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/traffic_extranet.py +0 -0
  237. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/traffic_static_ip.py +0 -0
  238. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/traffic_vpn_credentials.py +0 -0
  239. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/url_filter_cloud_app_settings.py +0 -0
  240. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/url_filtering_rules.py +0 -0
  241. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/urlcategory.py +0 -0
  242. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/user_management.py +0 -0
  243. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/vzen_clusters.py +0 -0
  244. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/vzen_nodes.py +0 -0
  245. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/workload_groups.py +0 -0
  246. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/models/zpa_gateway.py +0 -0
  247. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/nat_control_policy.py +0 -0
  248. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/nss_servers.py +0 -0
  249. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/organization_information.py +0 -0
  250. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/pac_files.py +0 -0
  251. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/policy_export.py +0 -0
  252. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/proxies.py +0 -0
  253. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/remote_assistance.py +0 -0
  254. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/risk_profiles.py +0 -0
  255. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/rule_labels.py +0 -0
  256. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/saas_security_api.py +0 -0
  257. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/sandbox.py +0 -0
  258. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/sandbox_rules.py +0 -0
  259. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/security_policy_settings.py +0 -0
  260. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/shadow_it_report.py +0 -0
  261. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/ssl_inspection_rules.py +0 -0
  262. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/sub_clouds.py +0 -0
  263. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/system_audit.py +0 -0
  264. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/tenancy_restriction_profile.py +0 -0
  265. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/time_intervals.py +0 -0
  266. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/traffic_capture.py +0 -0
  267. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/traffic_datacenters.py +0 -0
  268. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/traffic_extranet.py +0 -0
  269. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/traffic_static_ip.py +0 -0
  270. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/traffic_vpn_credentials.py +0 -0
  271. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/url_categories.py +0 -0
  272. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/url_filtering.py +0 -0
  273. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/user_management.py +0 -0
  274. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/vzen_clusters.py +0 -0
  275. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/vzen_nodes.py +0 -0
  276. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/workload_groups.py +0 -0
  277. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/zia_service.py +0 -0
  278. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zia/zpa_gateway.py +0 -0
  279. {zscaler_sdk_python-1.9.8/zscaler/zia/models → zscaler_sdk_python-1.9.10/zscaler/zidentity}/__init__.py +0 -0
  280. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/api_client.py +0 -0
  281. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/groups.py +0 -0
  282. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/models/api_client.py +0 -0
  283. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/models/common.py +0 -0
  284. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/models/groups.py +0 -0
  285. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/models/resource_servers.py +0 -0
  286. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/models/user_entitlement.py +0 -0
  287. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/models/users.py +0 -0
  288. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/resource_servers.py +0 -0
  289. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/user_entitlement.py +0 -0
  290. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/users.py +0 -0
  291. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zidentity/zidentity_service.py +0 -0
  292. {zscaler_sdk_python-1.9.8/zscaler/zidentity → zscaler_sdk_python-1.9.10/zscaler/zpa}/__init__.py +0 -0
  293. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/admin_sso_controller.py +0 -0
  294. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/administrator_controller.py +0 -0
  295. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/api_keys.py +0 -0
  296. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/app_connector_groups.py +0 -0
  297. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/app_connector_schedule.py +0 -0
  298. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/app_connectors.py +0 -0
  299. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/app_protection.py +0 -0
  300. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/app_segment_by_type.py +0 -0
  301. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/app_segments_ba.py +0 -0
  302. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/app_segments_ba_v2.py +0 -0
  303. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/app_segments_inspection.py +0 -0
  304. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/app_segments_pra.py +0 -0
  305. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/application_segment.py +0 -0
  306. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/branch_connector_group.py +0 -0
  307. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/branch_connectors.py +0 -0
  308. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/browser_protection.py +0 -0
  309. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/c2c_ip_ranges.py +0 -0
  310. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/cbi_banner.py +0 -0
  311. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/cbi_certificate.py +0 -0
  312. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/cbi_profile.py +0 -0
  313. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/cbi_region.py +0 -0
  314. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/cbi_zpa_profile.py +0 -0
  315. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/certificates.py +0 -0
  316. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/client_settings.py +0 -0
  317. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/cloud_connector_controller.py +0 -0
  318. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/cloud_connector_groups.py +0 -0
  319. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/config_override_controller.py +0 -0
  320. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/customer_controller.py +0 -0
  321. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/customer_domain.py +0 -0
  322. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/customer_dr_tool.py +0 -0
  323. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/customer_version_profile.py +0 -0
  324. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/emergency_access.py +0 -0
  325. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/enrollment_certificates.py +0 -0
  326. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/extranet_resource.py +0 -0
  327. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/idp.py +0 -0
  328. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/location_controller.py +0 -0
  329. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/lss.py +0 -0
  330. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/machine_groups.py +0 -0
  331. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/managed_browser_profile.py +0 -0
  332. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/microtenants.py +0 -0
  333. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/administrator_controller.py +0 -0
  334. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/api_keys.py +0 -0
  335. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/app_connector_groups.py +0 -0
  336. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/app_connector_schedule.py +0 -0
  337. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/app_connectors.py +0 -0
  338. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/app_protection_predefined_controls.py +0 -0
  339. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/app_protection_profile.py +0 -0
  340. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/application_segment.py +0 -0
  341. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/application_segment_lb.py +0 -0
  342. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/application_servers.py +0 -0
  343. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/branch_connectors.py +0 -0
  344. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/browser_protection.py +0 -0
  345. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/c2c_ip_ranges.py +0 -0
  346. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/cbi_banner.py +0 -0
  347. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/cbi_certificate.py +0 -0
  348. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/cbi_profile.py +0 -0
  349. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/cbi_region.py +0 -0
  350. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/cbi_zpa_profile.py +0 -0
  351. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/certificates.py +0 -0
  352. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/client_settings.py +0 -0
  353. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/cloud_connector_controller.py +0 -0
  354. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/cloud_connector_groups.py +0 -0
  355. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/common.py +0 -0
  356. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/config_override_controller.py +0 -0
  357. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/customer_controller.py +0 -0
  358. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/customer_domain.py +0 -0
  359. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/customer_dr_tool.py +0 -0
  360. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/customer_version_profile.py +0 -0
  361. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/emergency_access.py +0 -0
  362. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/enrollment_certificates.py +0 -0
  363. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/idp.py +0 -0
  364. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/lss.py +0 -0
  365. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/machine_groups.py +0 -0
  366. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/managed_browser_profile.py +0 -0
  367. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/microtenants.py +0 -0
  368. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/npn_client_controller.py +0 -0
  369. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/oauth2_user_code.py +0 -0
  370. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/policyset_controller_v1.py +0 -0
  371. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/policyset_controller_v2.py +0 -0
  372. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/posture_profiles.py +0 -0
  373. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/pra_approval.py +0 -0
  374. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/pra_console.py +0 -0
  375. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/pra_cred_pool_controller.py +0 -0
  376. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/pra_credential.py +0 -0
  377. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/pra_portal.py +0 -0
  378. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/private_cloud_controller.py +0 -0
  379. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/private_cloud_group.py +0 -0
  380. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/provisioning_keys.py +0 -0
  381. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/role_controller.py +0 -0
  382. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/saml_attributes.py +0 -0
  383. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/scim_attributes.py +0 -0
  384. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/scim_groups.py +0 -0
  385. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/segment_group.py +0 -0
  386. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/server_group.py +0 -0
  387. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/service_edge_groups.py +0 -0
  388. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/service_edge_schedule.py +0 -0
  389. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/service_edges.py +0 -0
  390. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/stepup_auth_level.py +0 -0
  391. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/trusted_network.py +0 -0
  392. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/user_portal_aup.py +0 -0
  393. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/user_portal_controller.py +0 -0
  394. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/user_portal_link.py +0 -0
  395. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/models/zia_customer_config.py +0 -0
  396. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/npn_client_controller.py +0 -0
  397. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/oauth2_user_code.py +0 -0
  398. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/policies.py +0 -0
  399. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/posture_profiles.py +0 -0
  400. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/pra_approval.py +0 -0
  401. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/pra_console.py +0 -0
  402. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/pra_credential.py +0 -0
  403. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/pra_credential_pool.py +0 -0
  404. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/pra_portal.py +0 -0
  405. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/private_cloud_controller.py +0 -0
  406. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/private_cloud_group.py +0 -0
  407. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/provisioning.py +0 -0
  408. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/role_controller.py +0 -0
  409. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/saml_attributes.py +0 -0
  410. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/scim_attributes.py +0 -0
  411. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/scim_groups.py +0 -0
  412. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/segment_groups.py +0 -0
  413. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/server_groups.py +0 -0
  414. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/servers.py +0 -0
  415. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/service_edge_group.py +0 -0
  416. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/service_edge_schedule.py +0 -0
  417. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/service_edges.py +0 -0
  418. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/stepup_auth_level.py +0 -0
  419. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/trusted_networks.py +0 -0
  420. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/user_portal_aup.py +0 -0
  421. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/user_portal_controller.py +0 -0
  422. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/user_portal_link.py +0 -0
  423. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/workload_tag_group.py +0 -0
  424. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/zia_customer_config.py +0 -0
  425. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zpa/zpa_service.py +0 -0
  426. {zscaler_sdk_python-1.9.8/zscaler/zpa → zscaler_sdk_python-1.9.10/zscaler/ztw}/__init__.py +0 -0
  427. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/account_details.py +0 -0
  428. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/account_groups.py +0 -0
  429. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/activation.py +0 -0
  430. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/admin_roles.py +0 -0
  431. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/admin_users.py +0 -0
  432. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/api_keys.py +0 -0
  433. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/discovery_service.py +0 -0
  434. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/ec_groups.py +0 -0
  435. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/forwarding_gateways.py +0 -0
  436. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/forwarding_rules.py +0 -0
  437. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/ip_destination_groups.py +0 -0
  438. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/ip_groups.py +0 -0
  439. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/ip_source_groups.py +0 -0
  440. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/location_management.py +0 -0
  441. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/location_template.py +0 -0
  442. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/account_groups.py +0 -0
  443. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/activation.py +0 -0
  444. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/admin_roles.py +0 -0
  445. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/admin_users.py +0 -0
  446. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/api_keys.py +0 -0
  447. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/common.py +0 -0
  448. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/discovery_service.py +0 -0
  449. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/ec_group_vm.py +0 -0
  450. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/ecgroup.py +0 -0
  451. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/forwarding_gateways.py +0 -0
  452. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/forwarding_rules.py +0 -0
  453. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/ip_destination_groups.py +0 -0
  454. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/ip_groups.py +0 -0
  455. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/ip_source_groups.py +0 -0
  456. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/location_management.py +0 -0
  457. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/location_templates.py +0 -0
  458. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/nw_service.py +0 -0
  459. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/nw_service_groups.py +0 -0
  460. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/provisioning_url.py +0 -0
  461. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/public_cloud_info.py +0 -0
  462. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/traffic_vpn_credentials.py +0 -0
  463. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/models/zpa_resources.py +0 -0
  464. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/nw_service.py +0 -0
  465. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/nw_service_groups.py +0 -0
  466. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/provisioning_url.py +0 -0
  467. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/public_cloud_info.py +0 -0
  468. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/ztw/ztw_service.py +0 -0
  469. {zscaler_sdk_python-1.9.8/zscaler/ztw → zscaler_sdk_python-1.9.10/zscaler/zwa}/__init__.py +0 -0
  470. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/audit_logs.py +0 -0
  471. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/dlp_incidents.py +0 -0
  472. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/legacy.py +0 -0
  473. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/models/audit_logs.py +0 -0
  474. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/models/change_history.py +0 -0
  475. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/models/common.py +0 -0
  476. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/models/generated_tickets.py +0 -0
  477. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/models/incident_details.py +0 -0
  478. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/models/incident_evidence.py +0 -0
  479. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/models/incident_group_search.py +0 -0
  480. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/models/incident_search.py +0 -0
  481. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/models/incident_trigger.py +0 -0
  482. {zscaler_sdk_python-1.9.8 → zscaler_sdk_python-1.9.10}/zscaler/zwa/zwa_service.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: zscaler-sdk-python
3
- Version: 1.9.8
3
+ Version: 1.9.10
4
4
  Summary: Official Python SDK for the Zscaler Products
5
5
  Home-page: https://github.com/zscaler/zscaler-sdk-python
6
6
  License: MIT
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "zscaler-sdk-python"
3
- version = "1.9.8"
3
+ version = "1.9.10"
4
4
  description = "Official Python SDK for the Zscaler Products"
5
5
  authors = ["Zscaler, Inc. <devrel@zscaler.com>"]
6
6
  license = "MIT"
@@ -29,7 +29,7 @@ __license__ = "MIT"
29
29
  __contributors__ = [
30
30
  "William Guilherme",
31
31
  ]
32
- __version__ = "1.9.8"
32
+ __version__ = "1.9.10"
33
33
 
34
34
 
35
35
  from zscaler.oneapi_client import Client as ZscalerClient # noqa
@@ -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 ZIA and ZPA clients
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
- sleep_time = int(resp.headers.get("Retry-After", 2))
488
- logger.warning(f"Rate limit exceeded. Retrying in {sleep_time} seconds.")
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)