zscaler-sdk-python 1.7.4__tar.gz → 1.7.6__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 (426) hide show
  1. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/PKG-INFO +1 -1
  2. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/pyproject.toml +1 -1
  3. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/__init__.py +1 -1
  4. zscaler_sdk_python-1.7.6/zscaler/oneapi_oauth_client.py +444 -0
  5. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/request_executor.py +10 -6
  6. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/dlp_web_rules.py +3 -1
  7. zscaler_sdk_python-1.7.4/zscaler/oneapi_oauth_client.py +0 -240
  8. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/LICENSE.md +0 -0
  9. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/README.md +0 -0
  10. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/api_client.py +0 -0
  11. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/cache/__init__.py +0 -0
  12. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/cache/cache.py +0 -0
  13. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/cache/no_op_cache.py +0 -0
  14. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/cache/zscaler_cache.py +0 -0
  15. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/config/__init__.py +0 -0
  16. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/config/config_setter.py +0 -0
  17. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/config/config_validator.py +0 -0
  18. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/constants.py +0 -0
  19. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/error_messages.py +0 -0
  20. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/errors/__init__.py +0 -0
  21. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/errors/error.py +0 -0
  22. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/errors/http_error.py +0 -0
  23. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/errors/response_checker.py +0 -0
  24. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/errors/zscaler_api_error.py +0 -0
  25. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/exceptions/__init__.py +0 -0
  26. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/exceptions/exceptions.py +0 -0
  27. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/helpers.py +0 -0
  28. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/logger.py +0 -0
  29. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/oneapi_client.py +0 -0
  30. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/oneapi_collection.py +0 -0
  31. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/oneapi_http_client.py +0 -0
  32. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/oneapi_object.py +0 -0
  33. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/oneapi_response.py +0 -0
  34. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ratelimiter/__init__.py +0 -0
  35. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ratelimiter/ratelimiter.py +0 -0
  36. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/user_agent.py +0 -0
  37. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/utils.py +0 -0
  38. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/__init__.py +0 -0
  39. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/admin_user.py +0 -0
  40. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/company.py +0 -0
  41. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/devices.py +0 -0
  42. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/entitlements.py +0 -0
  43. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/fail_open_policy.py +0 -0
  44. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/forwarding_profile.py +0 -0
  45. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/legacy.py +0 -0
  46. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/models/admin_roles.py +0 -0
  47. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/models/admin_user.py +0 -0
  48. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/models/devices.py +0 -0
  49. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/models/failopenpolicy.py +0 -0
  50. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/models/forwardingprofile.py +0 -0
  51. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/models/getcompanyinfo.py +0 -0
  52. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/models/manage_pass.py +0 -0
  53. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/models/secrets_otp.py +0 -0
  54. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/models/secrets_passwords.py +0 -0
  55. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/models/trustednetworks.py +0 -0
  56. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/models/webappservice.py +0 -0
  57. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/models/webpolicy.py +0 -0
  58. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/models/webprivacy.py +0 -0
  59. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/models/zdxgroupentitlements.py +0 -0
  60. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/models/zpagroupentitlements.py +0 -0
  61. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/secrets.py +0 -0
  62. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/trusted_networks.py +0 -0
  63. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/web_app_service.py +0 -0
  64. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/web_policy.py +0 -0
  65. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/web_privacy.py +0 -0
  66. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zcc/zcc_service.py +0 -0
  67. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zdx/__init__.py +0 -0
  68. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zdx/admin.py +0 -0
  69. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zdx/alerts.py +0 -0
  70. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zdx/apps.py +0 -0
  71. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zdx/devices.py +0 -0
  72. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zdx/inventory.py +0 -0
  73. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zdx/legacy.py +0 -0
  74. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zdx/models/administration.py +0 -0
  75. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zdx/models/alerts.py +0 -0
  76. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zdx/models/application_users.py +0 -0
  77. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zdx/models/applications.py +0 -0
  78. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zdx/models/call_quality_metrics.py +0 -0
  79. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zdx/models/common.py +0 -0
  80. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zdx/models/devices.py +0 -0
  81. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zdx/models/snapshot.py +0 -0
  82. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zdx/models/software_inventory.py +0 -0
  83. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zdx/models/troubleshooting.py +0 -0
  84. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zdx/models/users.py +0 -0
  85. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zdx/snapshot.py +0 -0
  86. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zdx/troubleshooting.py +0 -0
  87. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zdx/users.py +0 -0
  88. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zdx/zdx_service.py +0 -0
  89. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/__init__.py +0 -0
  90. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/activate.py +0 -0
  91. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/admin_roles.py +0 -0
  92. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/admin_users.py +0 -0
  93. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/advanced_settings.py +0 -0
  94. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/alert_subscriptions.py +0 -0
  95. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/apptotal.py +0 -0
  96. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/atp_policy.py +0 -0
  97. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/audit_logs.py +0 -0
  98. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/authentication_settings.py +0 -0
  99. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/bandwidth_classes.py +0 -0
  100. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/bandwidth_control_rules.py +0 -0
  101. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/browser_control_settings.py +0 -0
  102. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/casb_dlp_rules.py +0 -0
  103. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/casb_malware_rules.py +0 -0
  104. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/cloud_app_instances.py +0 -0
  105. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/cloud_applications.py +0 -0
  106. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/cloud_browser_isolation.py +0 -0
  107. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/cloud_firewall.py +0 -0
  108. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/cloud_firewall_dns.py +0 -0
  109. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/cloud_firewall_ips.py +0 -0
  110. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/cloud_firewall_rules.py +0 -0
  111. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/cloud_nss.py +0 -0
  112. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/cloud_to_cloud_ir.py +0 -0
  113. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/cloudappcontrol.py +0 -0
  114. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/dedicated_ip_gateways.py +0 -0
  115. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/device_management.py +0 -0
  116. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/dlp_dictionary.py +0 -0
  117. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/dlp_engine.py +0 -0
  118. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/dlp_resources.py +0 -0
  119. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/dlp_templates.py +0 -0
  120. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/dlp_web_rules.py +0 -0
  121. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/dns_gatways.py +0 -0
  122. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/end_user_notification.py +0 -0
  123. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/file_type_control_rule.py +0 -0
  124. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/forwarding_control.py +0 -0
  125. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/ftp_control_policy.py +0 -0
  126. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/gre_tunnel.py +0 -0
  127. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/intermediate_certificates.py +0 -0
  128. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/iot_report.py +0 -0
  129. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/ipv6_config.py +0 -0
  130. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/legacy.py +0 -0
  131. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/locations.py +0 -0
  132. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/malware_protection_policy.py +0 -0
  133. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/mobile_threat_settings.py +0 -0
  134. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/__init__.py +0 -0
  135. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/activation.py +0 -0
  136. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/admin_roles.py +0 -0
  137. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/admin_users.py +0 -0
  138. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/advanced_settings.py +0 -0
  139. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/advanced_threat_settings.py +0 -0
  140. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/alert_subscriptions.py +0 -0
  141. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/apptotal.py +0 -0
  142. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/authentication_settings.py +0 -0
  143. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/bandwidth_classes.py +0 -0
  144. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/bandwidth_control_rules.py +0 -0
  145. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/browser_control_settings.py +0 -0
  146. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/casb_dlp_rules.py +0 -0
  147. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/casb_malware_rules.py +0 -0
  148. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/cloud_app_instances.py +0 -0
  149. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/cloud_app_policy.py +0 -0
  150. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/cloud_browser_isolation.py +0 -0
  151. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/cloud_firewall_app_services.py +0 -0
  152. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/cloud_firewall_destination_groups.py +0 -0
  153. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/cloud_firewall_dns_rules.py +0 -0
  154. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/cloud_firewall_ips_rules.py +0 -0
  155. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/cloud_firewall_nw_application_groups.py +0 -0
  156. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/cloud_firewall_nw_applications.py +0 -0
  157. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/cloud_firewall_nw_service.py +0 -0
  158. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/cloud_firewall_nw_service_groups.py +0 -0
  159. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/cloud_firewall_rules.py +0 -0
  160. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/cloud_firewall_source_groups.py +0 -0
  161. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/cloud_firewall_time_windows.py +0 -0
  162. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/cloud_nss.py +0 -0
  163. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/cloud_to_cloud_ir.py +0 -0
  164. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/cloudappcontrol.py +0 -0
  165. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/common.py +0 -0
  166. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/dedicated_ip_gateways.py +0 -0
  167. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/device_groups.py +0 -0
  168. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/devices.py +0 -0
  169. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/dlp_dictionary.py +0 -0
  170. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/dlp_engine.py +0 -0
  171. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/dlp_resources.py +0 -0
  172. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/dlp_templates.py +0 -0
  173. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/dns_gateways.py +0 -0
  174. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/endusernotification.py +0 -0
  175. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/filetyperules.py +0 -0
  176. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/forwarding_control_policy.py +0 -0
  177. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/ftp_control_policy.py +0 -0
  178. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/gre_recommended_list.py +0 -0
  179. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/gre_tunnel_info.py +0 -0
  180. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/gre_tunnels.py +0 -0
  181. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/gre_vips.py +0 -0
  182. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/intermediate_certificates.py +0 -0
  183. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/iotreport.py +0 -0
  184. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/ipv6_config.py +0 -0
  185. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/location_group.py +0 -0
  186. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/location_management.py +0 -0
  187. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/malware_protection_settings.py +0 -0
  188. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/mobile_threat_settings.py +0 -0
  189. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/nat_control_policy.py +0 -0
  190. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/nss_servers.py +0 -0
  191. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/organization_information.py +0 -0
  192. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/pac_files.py +0 -0
  193. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/proxies.py +0 -0
  194. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/proxy_gateways.py +0 -0
  195. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/remoteassistance.py +0 -0
  196. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/risk_profiles.py +0 -0
  197. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/rule_labels.py +0 -0
  198. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/saas_security_api.py +0 -0
  199. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/sandboxrules.py +0 -0
  200. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/security_policy_settings.py +0 -0
  201. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/shadow_it_report.py +0 -0
  202. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/ssl_inspection_rules.py +0 -0
  203. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/subclouds.py +0 -0
  204. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/system_audit.py +0 -0
  205. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/tenancy_restriction_profile.py +0 -0
  206. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/time_intervals.py +0 -0
  207. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/traffic_datacenters.py +0 -0
  208. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/traffic_dc_exclusions.py +0 -0
  209. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/traffic_extranet.py +0 -0
  210. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/traffic_static_ip.py +0 -0
  211. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/traffic_vpn_credentials.py +0 -0
  212. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/url_filter_cloud_app_settings.py +0 -0
  213. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/url_filtering_rules.py +0 -0
  214. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/urlcategory.py +0 -0
  215. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/user_management.py +0 -0
  216. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/vzen_clusters.py +0 -0
  217. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/workload_groups.py +0 -0
  218. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/models/zpa_gateway.py +0 -0
  219. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/nat_control_policy.py +0 -0
  220. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/nss_servers.py +0 -0
  221. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/organization_information.py +0 -0
  222. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/pac_files.py +0 -0
  223. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/policy_export.py +0 -0
  224. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/proxies.py +0 -0
  225. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/remote_assistance.py +0 -0
  226. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/risk_profiles.py +0 -0
  227. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/rule_labels.py +0 -0
  228. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/saas_security_api.py +0 -0
  229. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/sandbox.py +0 -0
  230. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/sandbox_rules.py +0 -0
  231. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/security_policy_settings.py +0 -0
  232. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/shadow_it_report.py +0 -0
  233. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/ssl_inspection_rules.py +0 -0
  234. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/sub_clouds.py +0 -0
  235. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/system_audit.py +0 -0
  236. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/tenancy_restriction_profile.py +0 -0
  237. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/time_intervals.py +0 -0
  238. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/traffic_datacenters.py +0 -0
  239. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/traffic_extranet.py +0 -0
  240. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/traffic_static_ip.py +0 -0
  241. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/traffic_vpn_credentials.py +0 -0
  242. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/url_categories.py +0 -0
  243. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/url_filtering.py +0 -0
  244. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/user_management.py +0 -0
  245. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/vzen_clusters.py +0 -0
  246. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/workload_groups.py +0 -0
  247. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/zia_service.py +0 -0
  248. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zia/zpa_gateway.py +0 -0
  249. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zidentity/__init__.py +0 -0
  250. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zidentity/api_client.py +0 -0
  251. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zidentity/groups.py +0 -0
  252. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zidentity/models/api_client.py +0 -0
  253. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zidentity/models/common.py +0 -0
  254. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zidentity/models/groups.py +0 -0
  255. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zidentity/models/resource_servers.py +0 -0
  256. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zidentity/models/user_entitlement.py +0 -0
  257. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zidentity/models/users.py +0 -0
  258. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zidentity/resource_servers.py +0 -0
  259. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zidentity/user_entitlement.py +0 -0
  260. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zidentity/users.py +0 -0
  261. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zidentity/zidentity_service.py +0 -0
  262. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/__init__.py +0 -0
  263. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/admin_sso_controller.py +0 -0
  264. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/administrator_controller.py +0 -0
  265. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/api_keys.py +0 -0
  266. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/app_connector_groups.py +0 -0
  267. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/app_connector_schedule.py +0 -0
  268. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/app_connectors.py +0 -0
  269. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/app_protection.py +0 -0
  270. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/app_segment_by_type.py +0 -0
  271. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/app_segments_ba.py +0 -0
  272. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/app_segments_ba_v2.py +0 -0
  273. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/app_segments_inspection.py +0 -0
  274. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/app_segments_pra.py +0 -0
  275. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/application_segment.py +0 -0
  276. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/c2c_ip_ranges.py +0 -0
  277. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/cbi_banner.py +0 -0
  278. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/cbi_certificate.py +0 -0
  279. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/cbi_profile.py +0 -0
  280. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/cbi_region.py +0 -0
  281. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/cbi_zpa_profile.py +0 -0
  282. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/certificates.py +0 -0
  283. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/client_settings.py +0 -0
  284. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/cloud_connector_groups.py +0 -0
  285. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/config_override_controller.py +0 -0
  286. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/customer_controller.py +0 -0
  287. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/customer_domain.py +0 -0
  288. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/customer_version_profile.py +0 -0
  289. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/emergency_access.py +0 -0
  290. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/enrollment_certificates.py +0 -0
  291. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/idp.py +0 -0
  292. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/legacy.py +0 -0
  293. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/lss.py +0 -0
  294. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/machine_groups.py +0 -0
  295. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/microtenants.py +0 -0
  296. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/administrator_controller.py +0 -0
  297. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/api_keys.py +0 -0
  298. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/app_connector_groups.py +0 -0
  299. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/app_connector_schedule.py +0 -0
  300. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/app_connectors.py +0 -0
  301. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/app_protection_predefined_controls.py +0 -0
  302. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/app_protection_profile.py +0 -0
  303. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/application_segment.py +0 -0
  304. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/application_segment_lb.py +0 -0
  305. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/application_servers.py +0 -0
  306. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/c2c_ip_ranges.py +0 -0
  307. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/cbi_banner.py +0 -0
  308. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/cbi_certificate.py +0 -0
  309. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/cbi_profile.py +0 -0
  310. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/cbi_region.py +0 -0
  311. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/cbi_zpa_profile.py +0 -0
  312. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/certificates.py +0 -0
  313. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/client_settings.py +0 -0
  314. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/cloud_connector_groups.py +0 -0
  315. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/common.py +0 -0
  316. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/config_override_controller.py +0 -0
  317. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/customer_controller.py +0 -0
  318. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/customer_domain.py +0 -0
  319. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/customer_version_profile.py +0 -0
  320. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/emergency_access.py +0 -0
  321. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/enrollment_certificates.py +0 -0
  322. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/idp.py +0 -0
  323. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/lss.py +0 -0
  324. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/machine_groups.py +0 -0
  325. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/microtenants.py +0 -0
  326. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/npn_client_controller.py +0 -0
  327. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/policyset_controller_v1.py +0 -0
  328. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/policyset_controller_v2.py +0 -0
  329. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/posture_profiles.py +0 -0
  330. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/pra_approval.py +0 -0
  331. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/pra_console.py +0 -0
  332. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/pra_cred_pool_controller.py +0 -0
  333. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/pra_credential.py +0 -0
  334. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/pra_portal.py +0 -0
  335. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/private_cloud_controller.py +0 -0
  336. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/private_cloud_group.py +0 -0
  337. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/provisioning_keys.py +0 -0
  338. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/role_controller.py +0 -0
  339. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/saml_attributes.py +0 -0
  340. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/scim_attributes.py +0 -0
  341. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/scim_groups.py +0 -0
  342. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/segment_group.py +0 -0
  343. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/server_group.py +0 -0
  344. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/service_edge_groups.py +0 -0
  345. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/service_edge_schedule.py +0 -0
  346. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/service_edges.py +0 -0
  347. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/trusted_network.py +0 -0
  348. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/user_portal_controller.py +0 -0
  349. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/models/user_portal_link.py +0 -0
  350. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/npn_client_controller.py +0 -0
  351. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/policies.py +0 -0
  352. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/posture_profiles.py +0 -0
  353. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/pra_approval.py +0 -0
  354. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/pra_console.py +0 -0
  355. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/pra_credential.py +0 -0
  356. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/pra_credential_pool.py +0 -0
  357. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/pra_portal.py +0 -0
  358. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/private_cloud_controller.py +0 -0
  359. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/private_cloud_group.py +0 -0
  360. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/provisioning.py +0 -0
  361. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/role_controller.py +0 -0
  362. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/saml_attributes.py +0 -0
  363. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/scim_attributes.py +0 -0
  364. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/scim_groups.py +0 -0
  365. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/segment_groups.py +0 -0
  366. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/server_groups.py +0 -0
  367. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/servers.py +0 -0
  368. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/service_edge_group.py +0 -0
  369. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/service_edge_schedule.py +0 -0
  370. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/service_edges.py +0 -0
  371. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/trusted_networks.py +0 -0
  372. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/user_portal_controller.py +0 -0
  373. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/user_portal_link.py +0 -0
  374. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zpa/zpa_service.py +0 -0
  375. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/__init__.py +0 -0
  376. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/account_details.py +0 -0
  377. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/activation.py +0 -0
  378. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/admin_roles.py +0 -0
  379. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/admin_users.py +0 -0
  380. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/api_keys.py +0 -0
  381. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/ec_groups.py +0 -0
  382. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/forwarding_gateways.py +0 -0
  383. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/forwarding_rules.py +0 -0
  384. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/ip_destination_groups.py +0 -0
  385. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/ip_groups.py +0 -0
  386. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/ip_source_groups.py +0 -0
  387. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/legacy.py +0 -0
  388. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/location_management.py +0 -0
  389. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/location_template.py +0 -0
  390. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/models/activation.py +0 -0
  391. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/models/admin_roles.py +0 -0
  392. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/models/admin_users.py +0 -0
  393. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/models/api_keys.py +0 -0
  394. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/models/common.py +0 -0
  395. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/models/ec_group_vm.py +0 -0
  396. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/models/ecgroup.py +0 -0
  397. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/models/forwarding_gateways.py +0 -0
  398. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/models/forwarding_rules.py +0 -0
  399. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/models/ip_destination_groups.py +0 -0
  400. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/models/ip_groups.py +0 -0
  401. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/models/ip_source_groups.py +0 -0
  402. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/models/location_management.py +0 -0
  403. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/models/location_templates.py +0 -0
  404. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/models/nw_service.py +0 -0
  405. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/models/nw_service_groups.py +0 -0
  406. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/models/provisioning_url.py +0 -0
  407. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/models/traffic_vpn_credentials.py +0 -0
  408. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/models/zpa_resources.py +0 -0
  409. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/nw_service.py +0 -0
  410. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/nw_service_groups.py +0 -0
  411. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/provisioning_url.py +0 -0
  412. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/ztw/ztw_service.py +0 -0
  413. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zwa/__init__.py +0 -0
  414. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zwa/audit_logs.py +0 -0
  415. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zwa/dlp_incidents.py +0 -0
  416. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zwa/legacy.py +0 -0
  417. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zwa/models/audit_logs.py +0 -0
  418. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zwa/models/change_history.py +0 -0
  419. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zwa/models/common.py +0 -0
  420. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zwa/models/generated_tickets.py +0 -0
  421. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zwa/models/incident_details.py +0 -0
  422. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zwa/models/incident_evidence.py +0 -0
  423. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zwa/models/incident_group_search.py +0 -0
  424. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zwa/models/incident_search.py +0 -0
  425. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/zscaler/zwa/models/incident_trigger.py +0 -0
  426. {zscaler_sdk_python-1.7.4 → zscaler_sdk_python-1.7.6}/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.7.4
3
+ Version: 1.7.6
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.7.4"
3
+ version = "1.7.6"
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.7.4"
32
+ __version__ = "1.7.6"
33
33
 
34
34
 
35
35
  from zscaler.oneapi_client import Client as ZscalerClient # noqa
@@ -0,0 +1,444 @@
1
+ import logging
2
+ import json
3
+ import requests
4
+ import jwt
5
+ import time
6
+ from cryptography.hazmat.backends import default_backend
7
+ from cryptography.hazmat.primitives import serialization
8
+ from zscaler.user_agent import UserAgent
9
+ from zscaler.oneapi_http_client import HTTPClient
10
+ from zscaler.errors.response_checker import check_response_for_error
11
+
12
+ logger = logging.getLogger(__name__)
13
+
14
+
15
+ class OAuth:
16
+ """
17
+ This class contains the OAuth actions for the Zscaler Client.
18
+ """
19
+
20
+ _instance = None
21
+ _last_config = None
22
+
23
+ def __new__(cls, request_executor, config):
24
+ if cls._instance is None or cls._last_config != config:
25
+ cls._instance = super(OAuth, cls).__new__(cls)
26
+ cls._last_config = config
27
+ cls._instance.__init__(request_executor, config)
28
+ return cls._instance
29
+
30
+ def __init__(self, request_executor, config):
31
+ if not hasattr(self, "_initialized"):
32
+ self._request_executor = request_executor
33
+ self._config = config
34
+ self._access_token = None
35
+ self._token_expires_at = None
36
+ self._token_issued_at = None
37
+
38
+ # Initialize cache based on config
39
+ self._cache = self._initialize_cache()
40
+ self._cache_key = self._generate_cache_key()
41
+ # No buffer needed - simple expiration check
42
+ # logging.debug("OAuth instance created with provided configuration.")
43
+ self._initialized = True
44
+
45
+ def _initialize_cache(self):
46
+ """
47
+ Initialize cache based on configuration.
48
+
49
+ Returns:
50
+ Cache instance or None if caching is disabled
51
+ """
52
+ cache_config = self._config.get("cache", {})
53
+
54
+ # If cache is already a cache instance, return it
55
+ if hasattr(cache_config, 'get') and hasattr(cache_config, 'add'):
56
+ return cache_config
57
+
58
+ # If cache is a dict with enabled flag
59
+ if isinstance(cache_config, dict) and cache_config.get("enabled", False):
60
+ from zscaler.cache.zscaler_cache import ZscalerCache
61
+
62
+ # Get TTL and TTI from config
63
+ ttl = cache_config.get("defaultTtl", 3600) # Default 1 hour
64
+ tti = cache_config.get("defaultTti", 1800) # Default 30 minutes
65
+
66
+ return ZscalerCache(ttl=ttl, tti=tti)
67
+
68
+ return None
69
+
70
+ def _generate_cache_key(self):
71
+ """
72
+ Generate a unique cache key for this OAuth instance.
73
+
74
+ Returns:
75
+ str: Unique cache key based on client configuration
76
+ """
77
+ # Handle legacy client configurations that don't have OneAPI OAuth fields
78
+ client_config = self._config.get("client", {})
79
+
80
+ # For legacy clients, use alternative identifiers
81
+ if "clientId" not in client_config:
82
+ # Legacy clients might have username, api_key, etc.
83
+ username = client_config.get("username", "unknown")
84
+ api_key = client_config.get("api_key", "unknown")
85
+ cloud = client_config.get("cloud", "production").lower()
86
+ return f"oauth_token_legacy_{username}_{api_key}_{cloud}"
87
+
88
+ # For OneAPI clients, use the standard fields
89
+ client_id = client_config["clientId"]
90
+ vanity_domain = client_config["vanityDomain"]
91
+ cloud = client_config.get("cloud", "PRODUCTION").lower()
92
+ return f"oauth_token_{client_id}_{vanity_domain}_{cloud}"
93
+
94
+ def _get_cached_token(self):
95
+ """
96
+ Retrieve token from cache if available and enabled.
97
+
98
+ Returns:
99
+ dict: Cached token data or None if not available
100
+ """
101
+ if not self._cache or not self._cache_enabled():
102
+ return None
103
+
104
+ try:
105
+ cached_data = self._cache.get(self._cache_key)
106
+ if cached_data and isinstance(cached_data, dict):
107
+ logger.debug("Retrieved token from cache")
108
+ return cached_data
109
+ except Exception as e:
110
+ logger.warning(f"Failed to retrieve token from cache: {e}")
111
+
112
+ return None
113
+
114
+ def _cache_token(self, access_token, expires_at):
115
+ """
116
+ Cache the token if caching is enabled.
117
+
118
+ Args:
119
+ access_token (str): The access token to cache
120
+ expires_at (float): Token expiration timestamp
121
+ """
122
+ if not self._cache or not self._cache_enabled():
123
+ return
124
+
125
+ try:
126
+ token_data = {
127
+ 'access_token': access_token,
128
+ 'expires_at': expires_at,
129
+ 'issued_at': time.time()
130
+ }
131
+
132
+ # Store token data directly (not as tuple)
133
+ self._cache.add(self._cache_key, token_data)
134
+ logger.debug("Token cached successfully")
135
+ except Exception as e:
136
+ logger.warning(f"Failed to cache token: {e}")
137
+
138
+ def _cache_enabled(self):
139
+ """
140
+ Check if caching is enabled in the configuration.
141
+
142
+ Returns:
143
+ bool: True if caching is enabled
144
+ """
145
+ return self._cache is not None
146
+
147
+ def _is_token_expired(self, token_data=None):
148
+ """
149
+ Check if the current token is expired.
150
+
151
+ Args:
152
+ token_data (dict, optional): Token data to check. If None, uses instance data.
153
+
154
+ Returns:
155
+ bool: True if token is expired
156
+ """
157
+ if token_data:
158
+ # Check cached token data
159
+ expires_at = token_data.get('expires_at')
160
+ if not expires_at:
161
+ return True
162
+ return time.time() >= expires_at
163
+ else:
164
+ # Check instance token data
165
+ if not self._token_expires_at:
166
+ return True
167
+ return time.time() >= self._token_expires_at
168
+
169
+ def authenticate(self):
170
+ """
171
+ Main authentication function. Determines which authentication
172
+ method to use (Client Secret or JWT Private Key) and retrieves the
173
+ OAuth access token.
174
+
175
+ Returns:
176
+ str: OAuth access token.
177
+ """
178
+ # Check if this is a legacy client configuration
179
+ client_config = self._config.get("client", {})
180
+ if "clientId" not in client_config:
181
+ logging.error("OAuth authentication not available for legacy client configurations.")
182
+ raise ValueError("OAuth authentication not available for legacy client configurations. Use legacy authentication methods instead.")
183
+
184
+ # logging.debug("Starting authentication process.")
185
+ client_id = client_config["clientId"]
186
+ client_secret = client_config.get("clientSecret", "")
187
+ private_key = client_config.get("privateKey", "")
188
+
189
+ if not client_id or (not client_secret and not private_key):
190
+ logging.error("No valid client credentials provided.")
191
+ raise ValueError("No valid client credentials provided")
192
+
193
+ # Determine whether to authenticate with client secret or JWT
194
+ if private_key:
195
+ logging.info("Authenticating using JWT private key.")
196
+ response = self._authenticate_with_private_key(client_id, private_key)
197
+ else:
198
+ # logging.info("Authenticating using client secret.")
199
+ response = self._authenticate_with_client_secret(client_id, client_secret)
200
+
201
+ # logging.debug("Authentication process completed.")
202
+ return response
203
+
204
+ def _authenticate_with_client_secret(self, client_id, client_secret):
205
+ """
206
+ Authenticate using client ID and client secret.
207
+
208
+ Args:
209
+ client_id (str): Client ID for authentication.
210
+ client_secret (str): Client secret for authentication.
211
+
212
+ Returns:
213
+ str: OAuth access token.
214
+ """
215
+ # logging.debug("Preparing to authenticate with client secret.")
216
+ vanity_domain = self._config["client"]["vanityDomain"]
217
+ cloud = self._config["client"].get("cloud", "PRODUCTION").lower()
218
+ auth_url = self._get_auth_url(vanity_domain, cloud)
219
+
220
+ # Prepare form data (like in the Go SDK)
221
+ form_data = {
222
+ "grant_type": "client_credentials",
223
+ "client_id": client_id,
224
+ "client_secret": client_secret,
225
+ "audience": "https://api.zscaler.com",
226
+ }
227
+
228
+ user_agent = UserAgent().get_user_agent_string()
229
+ headers = {
230
+ "Accept": "application/json",
231
+ "Content-Type": "application/x-www-form-urlencoded",
232
+ "User-Agent": user_agent,
233
+ }
234
+
235
+ # logging.debug(f"Sending authentication request to {auth_url}.")
236
+ # Synchronous HTTP request (with form data in the body)
237
+ response = requests.post(auth_url, data=form_data, headers=headers)
238
+
239
+ if response.status_code >= 300:
240
+ logging.error(f"Error authenticating: {response.status_code}, {response.text}")
241
+ raise Exception(f"Error authenticating: {response.status_code}, {response.text}")
242
+
243
+ # logging.debug("Authentication with client secret successful.")
244
+ return response
245
+
246
+ def _authenticate_with_private_key(self, client_id, private_key):
247
+ """
248
+ Authenticate using client ID and JWT private key.
249
+
250
+ Args:
251
+ client_id (str): Client ID for authentication.
252
+ private_key (str): Path to the private key file, JWK JSON string, or raw private key.
253
+
254
+ Returns:
255
+ str: OAuth access token.
256
+ """
257
+ logging.debug("Preparing to authenticate with JWT private key.")
258
+ vanity_domain = self._config["client"]["vanityDomain"]
259
+ cloud = self._config["client"].get("cloud", "PRODUCTION").lower()
260
+ auth_url = self._get_auth_url(vanity_domain, cloud)
261
+
262
+ # **Step 1: Determine the Private Key Type**
263
+ if private_key.strip().startswith("{"):
264
+ # **JWK JSON Format**
265
+ logging.info("Using JWK JSON format for private key.")
266
+ jwk_key = json.loads(private_key.strip()) # Convert JWK string to dict
267
+ private_key_obj = jwt.algorithms.RSAAlgorithm.from_jwk(json.dumps(jwk_key))
268
+
269
+ elif "BEGIN PRIVATE KEY" in private_key:
270
+ # **Raw PEM Private Key**
271
+ logging.info("Using raw PEM private key.")
272
+ private_key_obj = serialization.load_pem_private_key(
273
+ private_key.encode(), password=None, backend=default_backend()
274
+ )
275
+
276
+ else:
277
+ # **Assume it's a file path and read the private key**
278
+ logging.info("Using private key from file.")
279
+ with open(private_key, "rb") as key_file:
280
+ private_key_obj = serialization.load_pem_private_key(key_file.read(), password=None, backend=default_backend())
281
+
282
+ # **Step 2: Create JWT for Client Assertion**
283
+ now = int(time.time())
284
+ payload = {
285
+ "iss": client_id,
286
+ "sub": client_id,
287
+ "aud": "https://api.zscaler.com",
288
+ "exp": now + 600, # 10 minutes expiration
289
+ }
290
+
291
+ # **Generate the JWT assertion using the private key**
292
+ assertion = jwt.encode(payload, private_key_obj, algorithm="RS256")
293
+
294
+ # **Step 3: Prepare OAuth Request**
295
+ form_data = {
296
+ "grant_type": "client_credentials",
297
+ "client_id": client_id,
298
+ "client_assertion": assertion,
299
+ "client_assertion_type": "urn:ietf:params:oauth:client-assertion-type:jwt-bearer",
300
+ "audience": "https://api.zscaler.com",
301
+ }
302
+
303
+ headers = {
304
+ "Accept": "application/json",
305
+ "Content-Type": "application/x-www-form-urlencoded",
306
+ "User-Agent": "Zscaler-SDK",
307
+ }
308
+
309
+ logging.debug(f"Sending authentication request to {auth_url} with JWT.")
310
+ response = requests.post(auth_url, data=form_data, headers=headers)
311
+
312
+ if response.status_code >= 300:
313
+ logging.error(f"Error authenticating: {response.status_code}, {response.text}")
314
+ raise Exception(f"Error authenticating: {response.status_code}, {response.text}")
315
+
316
+ logging.info("Authentication with JWT private key successful.")
317
+ return response
318
+
319
+ def _get_access_token(self):
320
+ """
321
+ Retrieves or generates the OAuth access token for the Zscaler OneAPI Client.
322
+ Implements proactive token refresh using expires_in with configurable buffer.
323
+
324
+ Returns:
325
+ str: OAuth access token.
326
+ """
327
+ # Check if this is a legacy client configuration
328
+ client_config = self._config.get("client", {})
329
+ if "clientId" not in client_config:
330
+ logger.warning("OAuth client initialized with legacy configuration - OAuth functionality not available")
331
+ return None
332
+
333
+ # 1. Check cache first (if enabled)
334
+ cached_token = self._get_cached_token()
335
+ if cached_token and not self._is_token_expired(cached_token):
336
+ self._access_token = cached_token['access_token']
337
+ self._token_expires_at = cached_token['expires_at']
338
+ self._token_issued_at = cached_token.get('issued_at', time.time())
339
+ logger.debug("Using cached access token")
340
+ return self._access_token
341
+
342
+ # 2. Check if current token is about to expire (proactive refresh)
343
+ if self._access_token and not self._is_token_expired():
344
+ logger.debug("Using existing access token")
345
+ return self._access_token
346
+
347
+ # 3. Get new token
348
+ logger.info("Access token expired or not available, requesting new token")
349
+ try:
350
+ # Call the authenticate function, which now returns the response object
351
+ response = self.authenticate()
352
+
353
+ # Check the response body for error messages using check_response_for_error
354
+ parsed_response, err = check_response_for_error(response.url, response, response.text)
355
+
356
+ if err:
357
+ logging.error(f"Error during authentication: {err}")
358
+ raise ValueError(f"Error during authentication: {err}")
359
+
360
+ # Extract access token and expiration from the parsed response
361
+ if isinstance(parsed_response, dict):
362
+ self._access_token = parsed_response.get("access_token")
363
+ expires_in = parsed_response.get("expires_in", 3600) # Default to 1 hour
364
+ self._token_expires_at = time.time() + expires_in
365
+ self._token_issued_at = time.time()
366
+
367
+ # Cache the new token
368
+ self._cache_token(self._access_token, self._token_expires_at)
369
+
370
+ logger.info(f"New access token obtained, expires in {expires_in} seconds")
371
+ else:
372
+ logging.error("Parsed response is not a dictionary as expected.")
373
+ raise ValueError("Parsed response is not a dictionary as expected")
374
+
375
+ except Exception as e:
376
+ logging.error(f"Failed to get access token: {e}")
377
+ raise # Re-raise the exception to handle it outside
378
+
379
+ return self._access_token
380
+
381
+ def _get_auth_url(self, vanity_domain, cloud):
382
+ """
383
+ Determines the OAuth2 provider URL based on the vanity domain and cloud.
384
+
385
+ Args:
386
+ vanity_domain (str): Vanity domain for the authentication URL.
387
+ cloud (str): Cloud environment (e.g., "production", "stage").
388
+
389
+ Returns:
390
+ str: The fully constructed authentication URL.
391
+ """
392
+ # logging.debug(f"Constructing auth URL for cloud: {cloud}.")
393
+ if cloud == "production":
394
+ return f"https://{vanity_domain}.zslogin.net/oauth2/v1/token"
395
+ else:
396
+ return f"https://{vanity_domain}.zslogin{cloud}.net/oauth2/v1/token"
397
+
398
+ def clear_access_token(self):
399
+ """
400
+ Clear the current OAuth access token and remove from cache.
401
+ """
402
+ logging.info("Clearing the current access token.")
403
+ self._access_token = None
404
+ self._token_expires_at = None
405
+ self._token_issued_at = None
406
+
407
+ # Clear from cache if enabled
408
+ if self._cache and self._cache_enabled():
409
+ try:
410
+ self._cache.delete(self._cache_key)
411
+ logger.debug("Token cleared from cache")
412
+ except Exception as e:
413
+ logger.warning(f"Failed to clear token from cache: {e}")
414
+
415
+ self._request_executor._default_headers.pop("Authorization", None)
416
+
417
+ def get_token_info(self):
418
+ """
419
+ Get information about the current token status.
420
+
421
+ Returns:
422
+ dict: Token information including expiration and cache status
423
+ """
424
+ if not self._access_token:
425
+ return {
426
+ 'has_token': False,
427
+ 'expires_at': None,
428
+ 'issued_at': None,
429
+ 'is_expired': True,
430
+ 'time_until_expiry': None,
431
+ 'cached': False
432
+ }
433
+
434
+ now = time.time()
435
+ time_until_expiry = self._token_expires_at - now if self._token_expires_at else None
436
+
437
+ return {
438
+ 'has_token': True,
439
+ 'expires_at': self._token_expires_at,
440
+ 'issued_at': self._token_issued_at,
441
+ 'is_expired': self._is_token_expired(),
442
+ 'time_until_expiry': time_until_expiry,
443
+ 'cached': self._cache_enabled() and self._cache.contains(self._cache_key) if self._cache else False
444
+ }
@@ -85,9 +85,13 @@ class RequestExecutor:
85
85
  self.microtenant_id = self._config["client"].get("microtenantId") # Optional for ZIA/ZCC
86
86
  self.vanity_domain = self._config["client"].get("vanityDomain") # Required for zidentity service
87
87
 
88
- # OAuth2 setup
89
- self._oauth = OAuth(self, self._config)
90
- self._access_token = None
88
+ # OAuth2 setup - only for OneAPI clients, not legacy clients
89
+ if not self.use_legacy_client:
90
+ self._oauth = OAuth(self, self._config)
91
+ self._access_token = None
92
+ else:
93
+ self._oauth = None
94
+ self._access_token = None
91
95
 
92
96
  # Set default headers from config
93
97
  self._default_headers = {
@@ -519,7 +523,7 @@ class RequestExecutor:
519
523
  # Check for 401 -> Trigger re-auth if we still have retries left
520
524
  if response.status_code == 401:
521
525
  # We only want to attempt refreshing the token if we haven't hit max_retries
522
- if attempts < max_retries:
526
+ if attempts < max_retries and self._oauth is not None:
523
527
  logger.info("Got 401 response; clearing token and re-authenticating.")
524
528
  self._oauth.clear_access_token()
525
529
 
@@ -535,8 +539,8 @@ class RequestExecutor:
535
539
  attempts += 1
536
540
  return self.fire_request_helper(request, attempts, request_start_time)
537
541
  else:
538
- logger.error("401 Unauthorized - token refresh attempts exhausted.")
539
- return request, response, response.text, Exception("401 Unauthorized - token refresh attempts exhausted.")
542
+ logger.error("401 Unauthorized - token refresh attempts exhausted or OAuth not available.")
543
+ return request, response, response.text, Exception("401 Unauthorized - token refresh attempts exhausted or OAuth not available.")
540
544
 
541
545
  # Handle “retryable” statuses such as 429, 503, etc.
542
546
  if attempts < max_retries and self.is_retryable_status(response.status_code):
@@ -79,7 +79,7 @@ class DLPWebRules(ZscalerObject):
79
79
  config["dlpContentLocationsScopes"] if "dlpContentLocationsScopes" in config else [], str
80
80
  )
81
81
  self.url_categories = ZscalerCollection.form_list(
82
- config["urlCategories"] if "urlCategories" in config else [], common_reference.ResourceReference
82
+ config["urlCategories"] if "urlCategories" in config else [], urlcategory.URLCategory
83
83
  )
84
84
 
85
85
  self.locations = ZscalerCollection.form_list(
@@ -181,6 +181,7 @@ class DLPWebRules(ZscalerObject):
181
181
  self.icap_server = None
182
182
  self.external_auditor_email = None
183
183
  self.dlp_content_locations_scopes = []
184
+ self.dlp_engines = []
184
185
 
185
186
  def request_format(self):
186
187
  """
@@ -235,6 +236,7 @@ class DLPWebRules(ZscalerObject):
235
236
  "icapServer": self.icap_server.request_format() if self.icap_server else None,
236
237
  "externalAuditorEmail": self.external_auditor_email,
237
238
  "dlpContentLocationsScopes": self.dlp_content_locations_scopes,
239
+ "dlpEngines": [engine.request_format() for engine in (self.dlp_engines or [])],
238
240
  }
239
241
  parent_req_format.update(current_obj_format)
240
242
  return parent_req_format