zscaler-sdk-python 1.8.3__tar.gz → 1.8.4__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 (427) hide show
  1. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/PKG-INFO +24 -18
  2. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/README.md +23 -17
  3. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/pyproject.toml +1 -1
  4. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/__init__.py +1 -1
  5. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/constants.py +1 -1
  6. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/errors/response_checker.py +1 -0
  7. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/exceptions/exceptions.py +2 -0
  8. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/helpers.py +14 -11
  9. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/logger.py +108 -6
  10. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/oneapi_client.py +3 -3
  11. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/oneapi_oauth_client.py +29 -28
  12. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/oneapi_object.py +2 -2
  13. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/oneapi_response.py +38 -50
  14. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/request_executor.py +34 -32
  15. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/dlp_dictionary.py +5 -5
  16. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/traffic_static_ip.py +37 -14
  17. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/LICENSE.md +0 -0
  18. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/api_client.py +0 -0
  19. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/cache/__init__.py +0 -0
  20. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/cache/cache.py +0 -0
  21. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/cache/no_op_cache.py +0 -0
  22. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/cache/zscaler_cache.py +0 -0
  23. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/config/__init__.py +0 -0
  24. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/config/config_setter.py +0 -0
  25. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/config/config_validator.py +0 -0
  26. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/error_messages.py +0 -0
  27. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/errors/__init__.py +0 -0
  28. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/errors/error.py +0 -0
  29. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/errors/http_error.py +0 -0
  30. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/errors/zscaler_api_error.py +0 -0
  31. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/exceptions/__init__.py +0 -0
  32. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/oneapi_collection.py +0 -0
  33. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/oneapi_http_client.py +0 -0
  34. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ratelimiter/__init__.py +0 -0
  35. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ratelimiter/ratelimiter.py +0 -0
  36. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/user_agent.py +0 -0
  37. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/utils.py +0 -0
  38. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/__init__.py +0 -0
  39. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/admin_user.py +0 -0
  40. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/company.py +0 -0
  41. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/devices.py +0 -0
  42. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/entitlements.py +0 -0
  43. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/fail_open_policy.py +0 -0
  44. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/forwarding_profile.py +0 -0
  45. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/legacy.py +0 -0
  46. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/models/admin_roles.py +0 -0
  47. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/models/admin_user.py +0 -0
  48. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/models/devices.py +0 -0
  49. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/models/failopenpolicy.py +0 -0
  50. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/models/forwardingprofile.py +0 -0
  51. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/models/getcompanyinfo.py +0 -0
  52. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/models/manage_pass.py +0 -0
  53. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/models/secrets_otp.py +0 -0
  54. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/models/secrets_passwords.py +0 -0
  55. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/models/trustednetworks.py +0 -0
  56. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/models/webappservice.py +0 -0
  57. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/models/webpolicy.py +0 -0
  58. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/models/webprivacy.py +0 -0
  59. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/models/zdxgroupentitlements.py +0 -0
  60. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/models/zpagroupentitlements.py +0 -0
  61. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/secrets.py +0 -0
  62. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/trusted_networks.py +0 -0
  63. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/web_app_service.py +0 -0
  64. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/web_policy.py +0 -0
  65. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/web_privacy.py +0 -0
  66. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zcc/zcc_service.py +0 -0
  67. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zdx/__init__.py +0 -0
  68. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zdx/admin.py +0 -0
  69. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zdx/alerts.py +0 -0
  70. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zdx/apps.py +0 -0
  71. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zdx/devices.py +0 -0
  72. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zdx/inventory.py +0 -0
  73. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zdx/legacy.py +0 -0
  74. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zdx/models/administration.py +0 -0
  75. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zdx/models/alerts.py +0 -0
  76. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zdx/models/application_users.py +0 -0
  77. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zdx/models/applications.py +0 -0
  78. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zdx/models/call_quality_metrics.py +0 -0
  79. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zdx/models/common.py +0 -0
  80. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zdx/models/devices.py +0 -0
  81. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zdx/models/snapshot.py +0 -0
  82. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zdx/models/software_inventory.py +0 -0
  83. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zdx/models/troubleshooting.py +0 -0
  84. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zdx/models/users.py +0 -0
  85. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zdx/snapshot.py +0 -0
  86. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zdx/troubleshooting.py +0 -0
  87. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zdx/users.py +0 -0
  88. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zdx/zdx_service.py +0 -0
  89. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/__init__.py +0 -0
  90. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/activate.py +0 -0
  91. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/admin_roles.py +0 -0
  92. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/admin_users.py +0 -0
  93. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/advanced_settings.py +0 -0
  94. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/alert_subscriptions.py +0 -0
  95. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/apptotal.py +0 -0
  96. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/atp_policy.py +0 -0
  97. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/audit_logs.py +0 -0
  98. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/authentication_settings.py +0 -0
  99. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/bandwidth_classes.py +0 -0
  100. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/bandwidth_control_rules.py +0 -0
  101. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/browser_control_settings.py +0 -0
  102. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/casb_dlp_rules.py +0 -0
  103. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/casb_malware_rules.py +0 -0
  104. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/cloud_app_instances.py +0 -0
  105. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/cloud_applications.py +0 -0
  106. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/cloud_browser_isolation.py +0 -0
  107. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/cloud_firewall.py +0 -0
  108. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/cloud_firewall_dns.py +0 -0
  109. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/cloud_firewall_ips.py +0 -0
  110. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/cloud_firewall_rules.py +0 -0
  111. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/cloud_nss.py +0 -0
  112. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/cloud_to_cloud_ir.py +0 -0
  113. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/cloudappcontrol.py +0 -0
  114. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/dedicated_ip_gateways.py +0 -0
  115. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/device_management.py +0 -0
  116. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/dlp_engine.py +0 -0
  117. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/dlp_resources.py +0 -0
  118. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/dlp_templates.py +0 -0
  119. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/dlp_web_rules.py +0 -0
  120. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/dns_gatways.py +0 -0
  121. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/end_user_notification.py +0 -0
  122. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/file_type_control_rule.py +0 -0
  123. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/forwarding_control.py +0 -0
  124. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/ftp_control_policy.py +0 -0
  125. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/gre_tunnel.py +0 -0
  126. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/intermediate_certificates.py +0 -0
  127. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/iot_report.py +0 -0
  128. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/ipv6_config.py +0 -0
  129. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/legacy.py +0 -0
  130. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/locations.py +0 -0
  131. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/malware_protection_policy.py +0 -0
  132. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/mobile_threat_settings.py +0 -0
  133. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/__init__.py +0 -0
  134. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/activation.py +0 -0
  135. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/admin_roles.py +0 -0
  136. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/admin_users.py +0 -0
  137. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/advanced_settings.py +0 -0
  138. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/advanced_threat_settings.py +0 -0
  139. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/alert_subscriptions.py +0 -0
  140. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/apptotal.py +0 -0
  141. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/authentication_settings.py +0 -0
  142. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/bandwidth_classes.py +0 -0
  143. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/bandwidth_control_rules.py +0 -0
  144. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/browser_control_settings.py +0 -0
  145. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/casb_dlp_rules.py +0 -0
  146. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/casb_malware_rules.py +0 -0
  147. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/cloud_app_instances.py +0 -0
  148. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/cloud_app_policy.py +0 -0
  149. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/cloud_browser_isolation.py +0 -0
  150. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/cloud_firewall_app_services.py +0 -0
  151. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/cloud_firewall_destination_groups.py +0 -0
  152. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/cloud_firewall_dns_rules.py +0 -0
  153. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/cloud_firewall_ips_rules.py +0 -0
  154. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/cloud_firewall_nw_application_groups.py +0 -0
  155. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/cloud_firewall_nw_applications.py +0 -0
  156. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/cloud_firewall_nw_service.py +0 -0
  157. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/cloud_firewall_nw_service_groups.py +0 -0
  158. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/cloud_firewall_rules.py +0 -0
  159. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/cloud_firewall_source_groups.py +0 -0
  160. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/cloud_firewall_time_windows.py +0 -0
  161. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/cloud_nss.py +0 -0
  162. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/cloud_to_cloud_ir.py +0 -0
  163. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/cloudappcontrol.py +0 -0
  164. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/common.py +0 -0
  165. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/dedicated_ip_gateways.py +0 -0
  166. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/device_groups.py +0 -0
  167. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/devices.py +0 -0
  168. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/dlp_dictionary.py +0 -0
  169. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/dlp_engine.py +0 -0
  170. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/dlp_resources.py +0 -0
  171. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/dlp_templates.py +0 -0
  172. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/dlp_web_rules.py +0 -0
  173. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/dns_gateways.py +0 -0
  174. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/endusernotification.py +0 -0
  175. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/filetyperules.py +0 -0
  176. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/forwarding_control_policy.py +0 -0
  177. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/ftp_control_policy.py +0 -0
  178. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/gre_recommended_list.py +0 -0
  179. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/gre_tunnel_info.py +0 -0
  180. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/gre_tunnels.py +0 -0
  181. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/gre_vips.py +0 -0
  182. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/intermediate_certificates.py +0 -0
  183. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/iotreport.py +0 -0
  184. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/ipv6_config.py +0 -0
  185. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/location_group.py +0 -0
  186. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/location_management.py +0 -0
  187. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/malware_protection_settings.py +0 -0
  188. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/mobile_threat_settings.py +0 -0
  189. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/nat_control_policy.py +0 -0
  190. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/nss_servers.py +0 -0
  191. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/organization_information.py +0 -0
  192. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/pac_files.py +0 -0
  193. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/proxies.py +0 -0
  194. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/proxy_gateways.py +0 -0
  195. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/remoteassistance.py +0 -0
  196. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/risk_profiles.py +0 -0
  197. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/rule_labels.py +0 -0
  198. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/saas_security_api.py +0 -0
  199. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/sandboxrules.py +0 -0
  200. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/security_policy_settings.py +0 -0
  201. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/shadow_it_report.py +0 -0
  202. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/ssl_inspection_rules.py +0 -0
  203. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/subclouds.py +0 -0
  204. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/system_audit.py +0 -0
  205. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/tenancy_restriction_profile.py +0 -0
  206. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/time_intervals.py +0 -0
  207. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/traffic_datacenters.py +0 -0
  208. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/traffic_dc_exclusions.py +0 -0
  209. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/traffic_extranet.py +0 -0
  210. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/traffic_static_ip.py +0 -0
  211. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/traffic_vpn_credentials.py +0 -0
  212. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/url_filter_cloud_app_settings.py +0 -0
  213. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/url_filtering_rules.py +0 -0
  214. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/urlcategory.py +0 -0
  215. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/user_management.py +0 -0
  216. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/vzen_clusters.py +0 -0
  217. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/vzen_nodes.py +0 -0
  218. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/workload_groups.py +0 -0
  219. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/models/zpa_gateway.py +0 -0
  220. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/nat_control_policy.py +0 -0
  221. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/nss_servers.py +0 -0
  222. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/organization_information.py +0 -0
  223. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/pac_files.py +0 -0
  224. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/policy_export.py +0 -0
  225. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/proxies.py +0 -0
  226. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/remote_assistance.py +0 -0
  227. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/risk_profiles.py +0 -0
  228. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/rule_labels.py +0 -0
  229. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/saas_security_api.py +0 -0
  230. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/sandbox.py +0 -0
  231. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/sandbox_rules.py +0 -0
  232. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/security_policy_settings.py +0 -0
  233. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/shadow_it_report.py +0 -0
  234. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/ssl_inspection_rules.py +0 -0
  235. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/sub_clouds.py +0 -0
  236. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/system_audit.py +0 -0
  237. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/tenancy_restriction_profile.py +0 -0
  238. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/time_intervals.py +0 -0
  239. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/traffic_datacenters.py +0 -0
  240. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/traffic_extranet.py +0 -0
  241. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/traffic_vpn_credentials.py +0 -0
  242. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/url_categories.py +0 -0
  243. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/url_filtering.py +0 -0
  244. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/user_management.py +0 -0
  245. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/vzen_clusters.py +0 -0
  246. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/vzen_nodes.py +0 -0
  247. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/workload_groups.py +0 -0
  248. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/zia_service.py +0 -0
  249. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zia/zpa_gateway.py +0 -0
  250. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zidentity/__init__.py +0 -0
  251. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zidentity/api_client.py +0 -0
  252. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zidentity/groups.py +0 -0
  253. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zidentity/models/api_client.py +0 -0
  254. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zidentity/models/common.py +0 -0
  255. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zidentity/models/groups.py +0 -0
  256. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zidentity/models/resource_servers.py +0 -0
  257. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zidentity/models/user_entitlement.py +0 -0
  258. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zidentity/models/users.py +0 -0
  259. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zidentity/resource_servers.py +0 -0
  260. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zidentity/user_entitlement.py +0 -0
  261. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zidentity/users.py +0 -0
  262. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zidentity/zidentity_service.py +0 -0
  263. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/__init__.py +0 -0
  264. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/admin_sso_controller.py +0 -0
  265. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/administrator_controller.py +0 -0
  266. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/api_keys.py +0 -0
  267. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/app_connector_groups.py +0 -0
  268. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/app_connector_schedule.py +0 -0
  269. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/app_connectors.py +0 -0
  270. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/app_protection.py +0 -0
  271. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/app_segment_by_type.py +0 -0
  272. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/app_segments_ba.py +0 -0
  273. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/app_segments_ba_v2.py +0 -0
  274. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/app_segments_inspection.py +0 -0
  275. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/app_segments_pra.py +0 -0
  276. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/application_segment.py +0 -0
  277. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/c2c_ip_ranges.py +0 -0
  278. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/cbi_banner.py +0 -0
  279. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/cbi_certificate.py +0 -0
  280. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/cbi_profile.py +0 -0
  281. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/cbi_region.py +0 -0
  282. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/cbi_zpa_profile.py +0 -0
  283. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/certificates.py +0 -0
  284. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/client_settings.py +0 -0
  285. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/cloud_connector_groups.py +0 -0
  286. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/config_override_controller.py +0 -0
  287. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/customer_controller.py +0 -0
  288. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/customer_domain.py +0 -0
  289. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/customer_version_profile.py +0 -0
  290. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/emergency_access.py +0 -0
  291. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/enrollment_certificates.py +0 -0
  292. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/idp.py +0 -0
  293. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/legacy.py +0 -0
  294. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/lss.py +0 -0
  295. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/machine_groups.py +0 -0
  296. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/microtenants.py +0 -0
  297. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/administrator_controller.py +0 -0
  298. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/api_keys.py +0 -0
  299. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/app_connector_groups.py +0 -0
  300. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/app_connector_schedule.py +0 -0
  301. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/app_connectors.py +0 -0
  302. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/app_protection_predefined_controls.py +0 -0
  303. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/app_protection_profile.py +0 -0
  304. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/application_segment.py +0 -0
  305. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/application_segment_lb.py +0 -0
  306. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/application_servers.py +0 -0
  307. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/c2c_ip_ranges.py +0 -0
  308. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/cbi_banner.py +0 -0
  309. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/cbi_certificate.py +0 -0
  310. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/cbi_profile.py +0 -0
  311. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/cbi_region.py +0 -0
  312. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/cbi_zpa_profile.py +0 -0
  313. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/certificates.py +0 -0
  314. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/client_settings.py +0 -0
  315. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/cloud_connector_groups.py +0 -0
  316. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/common.py +0 -0
  317. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/config_override_controller.py +0 -0
  318. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/customer_controller.py +0 -0
  319. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/customer_domain.py +0 -0
  320. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/customer_version_profile.py +0 -0
  321. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/emergency_access.py +0 -0
  322. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/enrollment_certificates.py +0 -0
  323. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/idp.py +0 -0
  324. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/lss.py +0 -0
  325. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/machine_groups.py +0 -0
  326. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/microtenants.py +0 -0
  327. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/npn_client_controller.py +0 -0
  328. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/policyset_controller_v1.py +0 -0
  329. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/policyset_controller_v2.py +0 -0
  330. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/posture_profiles.py +0 -0
  331. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/pra_approval.py +0 -0
  332. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/pra_console.py +0 -0
  333. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/pra_cred_pool_controller.py +0 -0
  334. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/pra_credential.py +0 -0
  335. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/pra_portal.py +0 -0
  336. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/private_cloud_controller.py +0 -0
  337. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/private_cloud_group.py +0 -0
  338. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/provisioning_keys.py +0 -0
  339. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/role_controller.py +0 -0
  340. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/saml_attributes.py +0 -0
  341. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/scim_attributes.py +0 -0
  342. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/scim_groups.py +0 -0
  343. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/segment_group.py +0 -0
  344. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/server_group.py +0 -0
  345. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/service_edge_groups.py +0 -0
  346. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/service_edge_schedule.py +0 -0
  347. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/service_edges.py +0 -0
  348. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/trusted_network.py +0 -0
  349. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/user_portal_controller.py +0 -0
  350. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/models/user_portal_link.py +0 -0
  351. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/npn_client_controller.py +0 -0
  352. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/policies.py +0 -0
  353. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/posture_profiles.py +0 -0
  354. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/pra_approval.py +0 -0
  355. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/pra_console.py +0 -0
  356. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/pra_credential.py +0 -0
  357. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/pra_credential_pool.py +0 -0
  358. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/pra_portal.py +0 -0
  359. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/private_cloud_controller.py +0 -0
  360. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/private_cloud_group.py +0 -0
  361. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/provisioning.py +0 -0
  362. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/role_controller.py +0 -0
  363. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/saml_attributes.py +0 -0
  364. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/scim_attributes.py +0 -0
  365. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/scim_groups.py +0 -0
  366. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/segment_groups.py +0 -0
  367. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/server_groups.py +0 -0
  368. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/servers.py +0 -0
  369. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/service_edge_group.py +0 -0
  370. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/service_edge_schedule.py +0 -0
  371. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/service_edges.py +0 -0
  372. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/trusted_networks.py +0 -0
  373. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/user_portal_controller.py +0 -0
  374. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/user_portal_link.py +0 -0
  375. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zpa/zpa_service.py +0 -0
  376. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/__init__.py +0 -0
  377. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/account_details.py +0 -0
  378. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/activation.py +0 -0
  379. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/admin_roles.py +0 -0
  380. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/admin_users.py +0 -0
  381. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/api_keys.py +0 -0
  382. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/ec_groups.py +0 -0
  383. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/forwarding_gateways.py +0 -0
  384. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/forwarding_rules.py +0 -0
  385. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/ip_destination_groups.py +0 -0
  386. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/ip_groups.py +0 -0
  387. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/ip_source_groups.py +0 -0
  388. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/legacy.py +0 -0
  389. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/location_management.py +0 -0
  390. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/location_template.py +0 -0
  391. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/models/activation.py +0 -0
  392. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/models/admin_roles.py +0 -0
  393. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/models/admin_users.py +0 -0
  394. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/models/api_keys.py +0 -0
  395. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/models/common.py +0 -0
  396. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/models/ec_group_vm.py +0 -0
  397. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/models/ecgroup.py +0 -0
  398. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/models/forwarding_gateways.py +0 -0
  399. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/models/forwarding_rules.py +0 -0
  400. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/models/ip_destination_groups.py +0 -0
  401. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/models/ip_groups.py +0 -0
  402. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/models/ip_source_groups.py +0 -0
  403. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/models/location_management.py +0 -0
  404. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/models/location_templates.py +0 -0
  405. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/models/nw_service.py +0 -0
  406. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/models/nw_service_groups.py +0 -0
  407. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/models/provisioning_url.py +0 -0
  408. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/models/traffic_vpn_credentials.py +0 -0
  409. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/models/zpa_resources.py +0 -0
  410. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/nw_service.py +0 -0
  411. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/nw_service_groups.py +0 -0
  412. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/provisioning_url.py +0 -0
  413. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/ztw/ztw_service.py +0 -0
  414. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zwa/__init__.py +0 -0
  415. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zwa/audit_logs.py +0 -0
  416. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zwa/dlp_incidents.py +0 -0
  417. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zwa/legacy.py +0 -0
  418. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zwa/models/audit_logs.py +0 -0
  419. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zwa/models/change_history.py +0 -0
  420. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zwa/models/common.py +0 -0
  421. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zwa/models/generated_tickets.py +0 -0
  422. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zwa/models/incident_details.py +0 -0
  423. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zwa/models/incident_evidence.py +0 -0
  424. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zwa/models/incident_group_search.py +0 -0
  425. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zwa/models/incident_search.py +0 -0
  426. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/zscaler/zwa/models/incident_trigger.py +0 -0
  427. {zscaler_sdk_python-1.8.3 → zscaler_sdk_python-1.8.4}/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.8.3
3
+ Version: 1.8.4
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
@@ -414,6 +414,7 @@ or
414
414
 
415
415
  ```
416
416
  -----BEGIN PRIVATE KEY-----
417
+ # Example private key (not a real key)
417
418
  MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCv3krdYg3z7h0H
418
419
  60QoePJMghllQxsfPxp3mgFfYEaIbF88Z8dvPZEfhAtP19/Mv62ASjwgqzQzKHRV
419
420
  -----END PRIVATE KEY-----
@@ -554,10 +555,11 @@ query_parameters = {'page_size': 100}
554
555
  groups, resp, err = client.zia.user_management.list_groups(query_parameters)
555
556
 
556
557
  while resp.has_next():
557
- more_groups, err = resp.next()
558
+ more_groups, resp, err = resp.next() # Unpack all 3 return values
558
559
  if err:
559
560
  break
560
- groups.extend(more_groups)
561
+ if more_groups:
562
+ groups.extend(more_groups)
561
563
  ```
562
564
 
563
565
  ### Searching and Filtering
@@ -595,12 +597,13 @@ def main():
595
597
  print(group)
596
598
 
597
599
  while resp.has_next():
598
- next_page, err = resp.next()
600
+ next_page, resp, err = resp.next() # Unpack all 3 return values
599
601
  if err:
600
602
  print(f"Error fetching next page: {err}")
601
603
  break
602
- for group in next_page:
603
- print(group)
604
+ if next_page:
605
+ for group in next_page:
606
+ print(group)
604
607
 
605
608
  try:
606
609
  resp.next() # Will raise StopIteration if no more data
@@ -613,18 +616,21 @@ if __name__ == "__main__":
613
616
 
614
617
  ### Pagination Limits and Controls
615
618
 
616
- Each Zscaler service has its own pagination requiremens and max page size:
617
-
618
- | Service | Default Page Size | Max Page Size | Notes |
619
- |---------|-------------------|---------------|-------------------------------------------------|
620
- | ZCC | Varies | Varies | Uses `pageSize` (camelCase) |
621
- | ZDX | 10 | Varies | Uses `limit` + `offset`, similar to cursor API |
622
- | ZIA | 100 | Varies | Uses `pageSize` (camelCase) |
623
- | ZPA | 100 | 500 | Uses `pagesize` (lowercase) |
624
- | ZTW | 100 | Varies | Uses `pageSize` (camelCase) |
625
- | ZWA | Varies | Varies | Uses `pageSize` (camelCase) |
626
-
627
- ⚠️ **Note:** Always use `snake_case` for all parameter names, even when the API expects camelCase.The SDK handles conversion internally.
619
+ Each Zscaler service has its own pagination requirements and limits. The SDK automatically respects these API defaults when no `page_size` is provided:
620
+
621
+ | Service | API Default Page Size | Max Page Size | Pagination Parameters |
622
+ |---------|-----------------------|---------------|-------------------------------------------------|
623
+ | ZCC | Varies by endpoint | Varies | Uses `page`, `pageSize` |
624
+ | ZDX | 10 | Varies | Uses `limit` + `offset` (cursor-based) |
625
+ | ZIA | 100 | 1000 | Uses `page`, `pageSize` |
626
+ | ZPA | 20 | 500 | Uses `page`, `pagesize` |
627
+ | ZTW | 100 | Varies | Uses `page`, `pageSize` |
628
+ | ZWA | Varies by endpoint | Varies | Uses `page`, `pageSize` |
629
+
630
+ **Important Notes:**
631
+ - ✅ The SDK automatically uses each API's default page size when no `page_size` is specified
632
+ - ✅ Always use `snake_case` for parameter names (e.g., `page_size`). The SDK handles conversion internally
633
+ - ✅ Pagination stops automatically when fewer results than the page size are returned
628
634
 
629
635
 
630
636
  You can control how many total items or pages the SDK will fetch even if more data is available.
@@ -375,6 +375,7 @@ or
375
375
 
376
376
  ```
377
377
  -----BEGIN PRIVATE KEY-----
378
+ # Example private key (not a real key)
378
379
  MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCv3krdYg3z7h0H
379
380
  60QoePJMghllQxsfPxp3mgFfYEaIbF88Z8dvPZEfhAtP19/Mv62ASjwgqzQzKHRV
380
381
  -----END PRIVATE KEY-----
@@ -515,10 +516,11 @@ query_parameters = {'page_size': 100}
515
516
  groups, resp, err = client.zia.user_management.list_groups(query_parameters)
516
517
 
517
518
  while resp.has_next():
518
- more_groups, err = resp.next()
519
+ more_groups, resp, err = resp.next() # Unpack all 3 return values
519
520
  if err:
520
521
  break
521
- groups.extend(more_groups)
522
+ if more_groups:
523
+ groups.extend(more_groups)
522
524
  ```
523
525
 
524
526
  ### Searching and Filtering
@@ -556,12 +558,13 @@ def main():
556
558
  print(group)
557
559
 
558
560
  while resp.has_next():
559
- next_page, err = resp.next()
561
+ next_page, resp, err = resp.next() # Unpack all 3 return values
560
562
  if err:
561
563
  print(f"Error fetching next page: {err}")
562
564
  break
563
- for group in next_page:
564
- print(group)
565
+ if next_page:
566
+ for group in next_page:
567
+ print(group)
565
568
 
566
569
  try:
567
570
  resp.next() # Will raise StopIteration if no more data
@@ -574,18 +577,21 @@ if __name__ == "__main__":
574
577
 
575
578
  ### Pagination Limits and Controls
576
579
 
577
- Each Zscaler service has its own pagination requiremens and max page size:
578
-
579
- | Service | Default Page Size | Max Page Size | Notes |
580
- |---------|-------------------|---------------|-------------------------------------------------|
581
- | ZCC | Varies | Varies | Uses `pageSize` (camelCase) |
582
- | ZDX | 10 | Varies | Uses `limit` + `offset`, similar to cursor API |
583
- | ZIA | 100 | Varies | Uses `pageSize` (camelCase) |
584
- | ZPA | 100 | 500 | Uses `pagesize` (lowercase) |
585
- | ZTW | 100 | Varies | Uses `pageSize` (camelCase) |
586
- | ZWA | Varies | Varies | Uses `pageSize` (camelCase) |
587
-
588
- ⚠️ **Note:** Always use `snake_case` for all parameter names, even when the API expects camelCase.The SDK handles conversion internally.
580
+ Each Zscaler service has its own pagination requirements and limits. The SDK automatically respects these API defaults when no `page_size` is provided:
581
+
582
+ | Service | API Default Page Size | Max Page Size | Pagination Parameters |
583
+ |---------|-----------------------|---------------|-------------------------------------------------|
584
+ | ZCC | Varies by endpoint | Varies | Uses `page`, `pageSize` |
585
+ | ZDX | 10 | Varies | Uses `limit` + `offset` (cursor-based) |
586
+ | ZIA | 100 | 1000 | Uses `page`, `pageSize` |
587
+ | ZPA | 20 | 500 | Uses `page`, `pagesize` |
588
+ | ZTW | 100 | Varies | Uses `page`, `pageSize` |
589
+ | ZWA | Varies by endpoint | Varies | Uses `page`, `pageSize` |
590
+
591
+ **Important Notes:**
592
+ - ✅ The SDK automatically uses each API's default page size when no `page_size` is specified
593
+ - ✅ Always use `snake_case` for parameter names (e.g., `page_size`). The SDK handles conversion internally
594
+ - ✅ Pagination stops automatically when fewer results than the page size are returned
589
595
 
590
596
 
591
597
  You can control how many total items or pages the SDK will fetch even if more data is available.
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "zscaler-sdk-python"
3
- version = "1.8.3"
3
+ version = "1.8.4"
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.8.3"
32
+ __version__ = "1.8.4"
33
33
 
34
34
 
35
35
  from zscaler.oneapi_client import Client as ZscalerClient # noqa
@@ -15,7 +15,7 @@ ZPA_BASE_URLS = {
15
15
  DEV_AUTH_URL = "https://authn1.dev.zpath.net/authn/v1/oauth/token"
16
16
 
17
17
 
18
- RETRYABLE_STATUS_CODES = {408, 409, 412, 429, 500, 502, 503, 504}
18
+ RETRYABLE_STATUS_CODES = {429, 500, 502, 503, 504}
19
19
  MAX_RETRIES = 5
20
20
  BACKOFF_FACTOR = 1
21
21
  BACKOFF_BASE_DURATION = 2
@@ -7,6 +7,7 @@ from zscaler.exceptions import exceptions
7
7
 
8
8
  logger = logging.getLogger(__name__)
9
9
 
10
+
10
11
  # @staticmethod
11
12
  def check_response_for_error(url, response_details, response_body):
12
13
  """
@@ -2,6 +2,7 @@ import json
2
2
 
3
3
  raise_exception = False
4
4
 
5
+
5
6
  # Zscaler Base Exceptions
6
7
  class ZscalerBaseException(Exception):
7
8
  def __init__(self, url, response, response_body):
@@ -85,6 +86,7 @@ class TokenRefreshError(Exception):
85
86
  class HeaderUpdateError(Exception):
86
87
  pass
87
88
 
89
+
88
90
  class RetryTooLong(Exception):
89
91
  """Raised when backoff time exceeds maxRetrySeconds configuration."""
90
92
  pass
@@ -47,13 +47,14 @@ def to_snake_case(string):
47
47
  "dnsResolutionOnTransparentProxyIPv6UrlCategories": "dns_resolution_on_transparent_proxy_ipv6_url_categories",
48
48
  "dnsResolutionOnTransparentProxyIPv6Apps": "dns_resolution_on_transparent_proxy_ipv6_apps",
49
49
  "enableIPv6DnsOptimizationOnAllTransparentProxy": "enable_ipv6_dns_optimization_on_all_transparent_proxy",
50
- "dnsResolutionOnTransparentProxyIPv6ExemptUrlCategories": "dns_resolution_on_transparent_proxy_ipv6_exempt_url_categories",
50
+ "dnsResolutionOnTransparentProxyIPv6ExemptUrlCategories":
51
+ "dns_resolution_on_transparent_proxy_ipv6_exempt_url_categories",
51
52
  "endPointDLPLogType": "end_point_dlp_log_type",
52
53
  "emailDLPLogType": "email_dlp_log_type",
53
54
  "extranetDNSList": "extranet_dns_list",
54
55
  "primaryDNSServer": "primary_dns_server",
55
56
  "secondaryDNSServer": "secondary_dns_server",
56
-
57
+
57
58
  # ZCC Edge Case Attributes
58
59
  "enableUDPTransportSelection": "enable_udp_transport_selection",
59
60
  "interceptZIATrafficAllAdapters": "intercept_zia_traffic_all_adapters",
@@ -118,7 +119,7 @@ def to_snake_case(string):
118
119
  "enableZCCRevert": "enable_zcc_revert",
119
120
  "enableZiaDR": "enable_zia_dr",
120
121
  "purgeKerberosPreferredDCCache": "purge_kerberos_preferred_dc_cache",
121
-
122
+
122
123
  # ZPA Edge Cases
123
124
  "serverGroupDTOs": "server_group_dtos",
124
125
  "extranetDTO": "extranet_dto",
@@ -126,7 +127,7 @@ def to_snake_case(string):
126
127
  "locationDTO": "location_dto",
127
128
  "predefinedADPControls": "predefined_adp_controls",
128
129
  "runtimeOS": "runtime_os",
129
-
130
+
130
131
  # ZIdentity Edge Cases
131
132
  # "clientJWKsUrl": "clientJWKsUrl",
132
133
  }
@@ -184,14 +185,16 @@ def to_lower_camel_case(string):
184
185
  "dns_resolution_on_transparent_proxy_ipv6_exempt_apps": "dnsResolutionOnTransparentProxyIPv6ExemptApps",
185
186
  "dns_resolution_on_transparent_proxy_ipv6_url_categories": "dnsResolutionOnTransparentProxyIPv6UrlCategories",
186
187
  "dns_resolution_on_transparent_proxy_ipv6_apps": "dnsResolutionOnTransparentProxyIPv6Apps",
187
- "enable_ipv6_dns_optimization_on_all_transparent_proxy": "enableIPv6DnsOptimizationOnAllTransparentProxy",
188
- "dns_resolution_on_transparent_proxy_ipv6_exempt_url_categories": "dnsResolutionOnTransparentProxyIPv6ExemptUrlCategories",
188
+ "enable_ipv6_dns_optimization_on_all_transparent_proxy":
189
+ "enableIPv6DnsOptimizationOnAllTransparentProxy",
190
+ "dns_resolution_on_transparent_proxy_ipv6_exempt_url_categories":
191
+ "dnsResolutionOnTransparentProxyIPv6ExemptUrlCategories",
189
192
  "end_point_dlp_log_type": "endPointDLPLogType",
190
193
  "email_dlp_log_type": "emailDLPLogType",
191
194
  "extranet_dns_list": "extranetDNSList",
192
195
  "primary_dns_server": "primaryDNSServer",
193
196
  "secondary_dns_server": "secondaryDNSServer",
194
-
197
+
195
198
  # ZCC Edge Case Attributes
196
199
  "enable_udp_transport_selection": "enableUDPTransportSelection",
197
200
  "intercept_zia_traffic_all_adapters": "interceptZIATrafficAllAdapters",
@@ -255,7 +258,7 @@ def to_lower_camel_case(string):
255
258
  "delete_dhcp_option121_routes": "deleteDHCPOption121Routes",
256
259
  "enableZiaDR": "enable_zia_dr",
257
260
  "purgeKerberosPreferredDCCache": "purge_kerberos_preferred_dc_cache",
258
-
261
+
259
262
  # ZPA Edge Cases
260
263
  "server_group_dtos": "serverGroupDTOs",
261
264
  "extranet_dto": "extranetDTO",
@@ -321,17 +324,17 @@ def convert_keys_to_camel_case_selective(data, preserve_snake_case_keys=None):
321
324
  Recursively convert keys to camelCase while preserving specific snake_case keys.
322
325
  This function allows users to use snake_case for all attributes, and only converts
323
326
  to camelCase if the attribute is NOT in the preserve_snake_case_keys set.
324
-
327
+
325
328
  Args:
326
329
  data: Dictionary or list to convert
327
330
  preserve_snake_case_keys: Set of keys that should remain in snake_case
328
-
331
+
329
332
  Returns:
330
333
  Converted data with selective key preservation
331
334
  """
332
335
  if preserve_snake_case_keys is None:
333
336
  preserve_snake_case_keys = set()
334
-
337
+
335
338
  if isinstance(data, dict):
336
339
  result = {}
337
340
  for k, v in data.items():
@@ -7,6 +7,85 @@ from http.client import HTTPConnection
7
7
 
8
8
  LOG_FORMAT = "%(asctime)s - %(name)s - %(module)s - %(levelname)s - %(message)s"
9
9
 
10
+ # Fields to sanitize in logs (case-insensitive matching)
11
+ SENSITIVE_FIELDS = {
12
+ "password", "api_key", "apiKey", "apikey",
13
+ "clientSecret", "client_secret", "clientsecret",
14
+ "authorization", "Authorization",
15
+ "access_token", "accessToken", "accesstoken",
16
+ "refresh_token", "refreshToken", "refreshtoken",
17
+ "secret", "Secret",
18
+ "privateKey", "private_key", "privatekey",
19
+ "token", "Token",
20
+ "key", "Key",
21
+ }
22
+
23
+ # Sensitive header keys (case-insensitive)
24
+ SENSITIVE_HEADERS = {
25
+ "authorization", "x-api-key", "apikey", "api-key",
26
+ "clientsecret", "client-secret", "access-token",
27
+ "refresh-token", "x-auth-token",
28
+ }
29
+
30
+
31
+ def _sanitize_for_logging(data):
32
+ """
33
+ Recursively mask sensitive fields in dicts/lists for logging.
34
+
35
+ Args:
36
+ data: The data structure to sanitize (dict, list, or other)
37
+
38
+ Returns:
39
+ Sanitized copy of the data with sensitive fields masked
40
+ """
41
+ if isinstance(data, dict):
42
+ return {
43
+ k: "***REDACTED***" if k in SENSITIVE_FIELDS or k.lower() in SENSITIVE_FIELDS
44
+ else _sanitize_for_logging(v)
45
+ for k, v in data.items()
46
+ }
47
+ elif isinstance(data, list):
48
+ return [_sanitize_for_logging(item) for item in data]
49
+ else:
50
+ return data
51
+
52
+
53
+ def _sanitize_plaintext_for_logging(text):
54
+ """
55
+ Scan and mask sensitive keywords in plaintext strings.
56
+
57
+ Args:
58
+ text (str): Plain text that might contain sensitive data
59
+
60
+ Returns:
61
+ str: Text with sensitive patterns masked
62
+ """
63
+ import re
64
+
65
+ if not isinstance(text, str):
66
+ return text
67
+
68
+ # Patterns to match common sensitive data formats in plain text
69
+ # Match patterns like "password":"value", "password": "value", password=value, etc.
70
+ patterns = [
71
+ (r'("password"\s*:\s*")[^"]*(")', r'\1***REDACTED***\2'),
72
+ (r'("api_key"\s*:\s*")[^"]*(")', r'\1***REDACTED***\2'),
73
+ (r'("apiKey"\s*:\s*")[^"]*(")', r'\1***REDACTED***\2'),
74
+ (r'("clientSecret"\s*:\s*")[^"]*(")', r'\1***REDACTED***\2'),
75
+ (r'("client_secret"\s*:\s*")[^"]*(")', r'\1***REDACTED***\2'),
76
+ (r'("access_token"\s*:\s*")[^"]*(")', r'\1***REDACTED***\2'),
77
+ (r'("refresh_token"\s*:\s*")[^"]*(")', r'\1***REDACTED***\2'),
78
+ (r'("token"\s*:\s*")[^"]*(")', r'\1***REDACTED***\2'),
79
+ (r'("secret"\s*:\s*")[^"]*(")', r'\1***REDACTED***\2'),
80
+ (r'("privateKey"\s*:\s*")[^"]*(")', r'\1***REDACTED***\2'),
81
+ ]
82
+
83
+ sanitized_text = text
84
+ for pattern, replacement in patterns:
85
+ sanitized_text = re.sub(pattern, replacement, sanitized_text, flags=re.IGNORECASE)
86
+
87
+ return sanitized_text
88
+
10
89
 
11
90
  def setup_logging(logger_name="zscaler-sdk-python", enabled=None, verbose=None):
12
91
  """
@@ -66,12 +145,20 @@ def setup_logging(logger_name="zscaler-sdk-python", enabled=None, verbose=None):
66
145
 
67
146
 
68
147
  def dump_request(logger, url: str, method: str, json, params, headers, request_uuid: str, body=True):
69
- request_headers_filtered = {key: value for key, value in headers.items() if key != "Authorization"}
148
+ # Mask sensitive header values (e.g., Authorization, X-Api-Key, etc.)
149
+ request_headers_filtered = {
150
+ key: "***REDACTED***" if key.lower() in SENSITIVE_HEADERS else value
151
+ for key, value in headers.items()
152
+ }
153
+
70
154
  # Log the request details before sending the request
71
155
  log_lines = []
72
156
  request_body = ""
73
- if body:
74
- request_body = jsonp.dumps(json)
157
+ if body and json:
158
+ # Sanitize request body before logging
159
+ sanitized_json = _sanitize_for_logging(json)
160
+ request_body = jsonp.dumps(sanitized_json)
161
+
75
162
  log_lines.append(f"\n---[ ZSCALER SDK REQUEST | ID:{request_uuid} ]-------------------------------")
76
163
  full_url = url
77
164
  if params:
@@ -100,8 +187,13 @@ def dump_response(
100
187
  duration_seconds = end_time - start_time
101
188
  # Convert the duration to milliseconds
102
189
  duration_ms = duration_seconds * 1000
103
- # Convert the headers to a regular dictionary
104
- response_headers_dict = dict(resp.headers)
190
+
191
+ # Mask sensitive headers in response
192
+ response_headers_dict = {
193
+ key: "***REDACTED***" if key.lower() in SENSITIVE_HEADERS else value
194
+ for key, value in dict(resp.headers).items()
195
+ }
196
+
105
197
  full_url = url
106
198
  if params:
107
199
  full_url += "?" + urlencode(params)
@@ -116,10 +208,20 @@ def dump_response(
116
208
  log_lines.append(f"{method} {full_url}")
117
209
  for key, value in response_headers_dict.items():
118
210
  log_lines.append(f"{key}: {value}")
211
+
119
212
  response_body = ""
120
213
  if resp.text:
121
214
  response_body = resp.text
215
+ # Try to sanitize response body if it's JSON
216
+ try:
217
+ parsed_body = jsonp.loads(response_body)
218
+ sanitized_body = _sanitize_for_logging(parsed_body)
219
+ response_body = jsonp.dumps(sanitized_body)
220
+ except (jsonp.JSONDecodeError, ValueError):
221
+ # If not JSON, sanitize sensitive keywords in plaintext
222
+ response_body = _sanitize_plaintext_for_logging(response_body)
223
+
122
224
  if response_body and response_body != "" and response_body != "null":
123
225
  log_lines.append(f"\n{response_body}")
124
226
  log_lines.append("-" * 68)
125
- logger.info("\n".join(log_lines))
227
+ logger.info("\n".join(log_lines))
@@ -259,7 +259,7 @@ class Client:
259
259
  if self._zidentity is None:
260
260
  self._zidentity = ZIdentityService(self._request_executor)
261
261
  return self._zidentity
262
-
262
+
263
263
  def __enter__(self):
264
264
  """
265
265
  Automatically create and set session within context manager.
@@ -276,7 +276,7 @@ class Client:
276
276
  if hasattr(self, "_session"):
277
277
  self._session.close()
278
278
  self.logger.debug("Session closed.")
279
-
279
+
280
280
  # Clean up Zscaler authentication session
281
281
  if hasattr(self, '_request_executor'):
282
282
  # For legacy clients, use their deauthenticate method
@@ -291,7 +291,7 @@ class Client:
291
291
  service_type = getattr(self._request_executor, '_last_service_type', None)
292
292
  if not service_type:
293
293
  service_type = self._config.get("client", {}).get("service", "zia")
294
-
294
+
295
295
  if service_type.lower() in ["zia", "ztw"]:
296
296
  # For ZIA, deauthenticate only if mutations occurred; executor will decide.
297
297
  self.logger.debug(f"Deauthenticating Zscaler session for {service_type} service.")
@@ -34,7 +34,7 @@ class OAuth:
34
34
  self._access_token = None
35
35
  self._token_expires_at = None
36
36
  self._token_issued_at = None
37
-
37
+
38
38
  # Initialize cache based on config
39
39
  self._cache = self._initialize_cache()
40
40
  self._cache_key = self._generate_cache_key()
@@ -45,38 +45,38 @@ class OAuth:
45
45
  def _initialize_cache(self):
46
46
  """
47
47
  Initialize cache based on configuration.
48
-
48
+
49
49
  Returns:
50
50
  Cache instance or None if caching is disabled
51
51
  """
52
52
  cache_config = self._config.get("cache", {})
53
-
53
+
54
54
  # If cache is already a cache instance, return it
55
55
  if hasattr(cache_config, 'get') and hasattr(cache_config, 'add'):
56
56
  return cache_config
57
-
57
+
58
58
  # If cache is a dict with enabled flag
59
59
  if isinstance(cache_config, dict) and cache_config.get("enabled", False):
60
60
  from zscaler.cache.zscaler_cache import ZscalerCache
61
-
61
+
62
62
  # Get TTL and TTI from config
63
63
  ttl = cache_config.get("defaultTtl", 3600) # Default 1 hour
64
64
  tti = cache_config.get("defaultTti", 1800) # Default 30 minutes
65
-
65
+
66
66
  return ZscalerCache(ttl=ttl, tti=tti)
67
-
67
+
68
68
  return None
69
69
 
70
70
  def _generate_cache_key(self):
71
71
  """
72
72
  Generate a unique cache key for this OAuth instance.
73
-
73
+
74
74
  Returns:
75
75
  str: Unique cache key based on client configuration
76
76
  """
77
77
  # Handle legacy client configurations that don't have OneAPI OAuth fields
78
78
  client_config = self._config.get("client", {})
79
-
79
+
80
80
  # For legacy clients, use alternative identifiers
81
81
  if "clientId" not in client_config:
82
82
  # Legacy clients might have username, api_key, etc.
@@ -84,7 +84,7 @@ class OAuth:
84
84
  api_key = client_config.get("api_key", "unknown")
85
85
  cloud = client_config.get("cloud", "production").lower()
86
86
  return f"oauth_token_legacy_{username}_{api_key}_{cloud}"
87
-
87
+
88
88
  # For OneAPI clients, use the standard fields
89
89
  client_id = client_config["clientId"]
90
90
  vanity_domain = client_config["vanityDomain"]
@@ -94,13 +94,13 @@ class OAuth:
94
94
  def _get_cached_token(self):
95
95
  """
96
96
  Retrieve token from cache if available and enabled.
97
-
97
+
98
98
  Returns:
99
99
  dict: Cached token data or None if not available
100
100
  """
101
101
  if not self._cache or not self._cache_enabled():
102
102
  return None
103
-
103
+
104
104
  try:
105
105
  cached_data = self._cache.get(self._cache_key)
106
106
  if cached_data and isinstance(cached_data, dict):
@@ -108,27 +108,27 @@ class OAuth:
108
108
  return cached_data
109
109
  except Exception as e:
110
110
  logger.warning(f"Failed to retrieve token from cache: {e}")
111
-
111
+
112
112
  return None
113
113
 
114
114
  def _cache_token(self, access_token, expires_at):
115
115
  """
116
116
  Cache the token if caching is enabled.
117
-
117
+
118
118
  Args:
119
119
  access_token (str): The access token to cache
120
120
  expires_at (float): Token expiration timestamp
121
121
  """
122
122
  if not self._cache or not self._cache_enabled():
123
123
  return
124
-
124
+
125
125
  try:
126
126
  token_data = {
127
127
  'access_token': access_token,
128
128
  'expires_at': expires_at,
129
129
  'issued_at': time.time()
130
130
  }
131
-
131
+
132
132
  # Store token data directly (not as tuple)
133
133
  self._cache.add(self._cache_key, token_data)
134
134
  logger.debug("Token cached successfully")
@@ -138,7 +138,7 @@ class OAuth:
138
138
  def _cache_enabled(self):
139
139
  """
140
140
  Check if caching is enabled in the configuration.
141
-
141
+
142
142
  Returns:
143
143
  bool: True if caching is enabled
144
144
  """
@@ -147,10 +147,10 @@ class OAuth:
147
147
  def _is_token_expired(self, token_data=None):
148
148
  """
149
149
  Check if the current token is expired.
150
-
150
+
151
151
  Args:
152
152
  token_data (dict, optional): Token data to check. If None, uses instance data.
153
-
153
+
154
154
  Returns:
155
155
  bool: True if token is expired
156
156
  """
@@ -179,7 +179,8 @@ class OAuth:
179
179
  client_config = self._config.get("client", {})
180
180
  if "clientId" not in client_config:
181
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.")
182
+ raise ValueError("OAuth authentication not available for legacy client configurations. "
183
+ "Use legacy authentication methods instead.")
183
184
 
184
185
  # logging.debug("Starting authentication process.")
185
186
  client_id = client_config["clientId"]
@@ -329,7 +330,7 @@ class OAuth:
329
330
  if "clientId" not in client_config:
330
331
  logger.warning("OAuth client initialized with legacy configuration - OAuth functionality not available")
331
332
  return None
332
-
333
+
333
334
  # 1. Check cache first (if enabled)
334
335
  cached_token = self._get_cached_token()
335
336
  if cached_token and not self._is_token_expired(cached_token):
@@ -363,10 +364,10 @@ class OAuth:
363
364
  expires_in = parsed_response.get("expires_in", 3600) # Default to 1 hour
364
365
  self._token_expires_at = time.time() + expires_in
365
366
  self._token_issued_at = time.time()
366
-
367
+
367
368
  # Cache the new token
368
369
  self._cache_token(self._access_token, self._token_expires_at)
369
-
370
+
370
371
  logger.info(f"New access token obtained, expires in {expires_in} seconds")
371
372
  else:
372
373
  logging.error("Parsed response is not a dictionary as expected.")
@@ -403,7 +404,7 @@ class OAuth:
403
404
  self._access_token = None
404
405
  self._token_expires_at = None
405
406
  self._token_issued_at = None
406
-
407
+
407
408
  # Clear from cache if enabled
408
409
  if self._cache and self._cache_enabled():
409
410
  try:
@@ -411,13 +412,13 @@ class OAuth:
411
412
  logger.debug("Token cleared from cache")
412
413
  except Exception as e:
413
414
  logger.warning(f"Failed to clear token from cache: {e}")
414
-
415
+
415
416
  self._request_executor._default_headers.pop("Authorization", None)
416
417
 
417
418
  def get_token_info(self):
418
419
  """
419
420
  Get information about the current token status.
420
-
421
+
421
422
  Returns:
422
423
  dict: Token information including expiration and cache status
423
424
  """
@@ -430,10 +431,10 @@ class OAuth:
430
431
  'time_until_expiry': None,
431
432
  'cached': False
432
433
  }
433
-
434
+
434
435
  now = time.time()
435
436
  time_until_expiry = self._token_expires_at - now if self._token_expires_at else None
436
-
437
+
437
438
  return {
438
439
  'has_token': True,
439
440
  'expires_at': self._token_expires_at,