zscaler-sdk-python 1.7.9__tar.gz → 1.8.1__tar.gz

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