zscaler-sdk-python 1.2.4__tar.gz → 1.4.0__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 (389) hide show
  1. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/PKG-INFO +4 -4
  2. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/pyproject.toml +3 -3
  3. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/__init__.py +1 -1
  4. zscaler_sdk_python-1.4.0/zscaler/errors/http_error.py +10 -0
  5. zscaler_sdk_python-1.4.0/zscaler/errors/response_checker.py +57 -0
  6. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/errors/zscaler_api_error.py +13 -23
  7. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/exceptions/exceptions.py +1 -0
  8. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/helpers.py +16 -2
  9. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/oneapi_http_client.py +1 -52
  10. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/oneapi_oauth_client.py +2 -1
  11. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/request_executor.py +42 -12
  12. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/utils.py +126 -109
  13. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/admin_user.py +7 -4
  14. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/devices.py +25 -7
  15. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/legacy.py +131 -45
  16. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/models/devices.py +3 -3
  17. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/secrets.py +1 -1
  18. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/bandwidth_control_rules.py +20 -1
  19. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/cloud_firewall.py +77 -27
  20. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/legacy.py +30 -35
  21. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/dlp_web_rules.py +7 -4
  22. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/url_filtering_rules.py +10 -1
  23. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/url_categories.py +7 -6
  24. zscaler_sdk_python-1.4.0/zscaler/zpa/administrator_controller.py +304 -0
  25. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/app_protection.py +266 -180
  26. zscaler_sdk_python-1.2.4/zscaler/zpa/application_segment.py → zscaler_sdk_python-1.4.0/zscaler/zpa/app_segments_ba.py +91 -195
  27. zscaler_sdk_python-1.4.0/zscaler/zpa/app_segments_ba_v2.py +479 -0
  28. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/app_segments_inspection.py +83 -62
  29. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/app_segments_pra.py +49 -41
  30. zscaler_sdk_python-1.4.0/zscaler/zpa/application_segment.py +939 -0
  31. zscaler_sdk_python-1.4.0/zscaler/zpa/client_settings.py +210 -0
  32. zscaler_sdk_python-1.4.0/zscaler/zpa/enrollment_certificates.py +457 -0
  33. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/legacy.py +59 -29
  34. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/app_connector_groups.py +15 -0
  35. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/app_protection_predefined_controls.py +45 -8
  36. zscaler_sdk_python-1.4.0/zscaler/zpa/models/app_protection_profile.py +943 -0
  37. zscaler_sdk_python-1.4.0/zscaler/zpa/models/application_segment.py +1053 -0
  38. zscaler_sdk_python-1.4.0/zscaler/zpa/models/application_segment_lb.py +104 -0
  39. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/common.py +4 -1
  40. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/enrollment_certificates.py +6 -6
  41. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/policyset_controller_v1.py +15 -3
  42. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/policyset_controller_v2.py +72 -29
  43. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/pra_console.py +0 -1
  44. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/role_controller.py +3 -2
  45. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/segment_group.py +4 -1
  46. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/server_group.py +22 -3
  47. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/service_edge_groups.py +2 -2
  48. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/policies.py +925 -298
  49. zscaler_sdk_python-1.4.0/zscaler/zpa/role_controller.py +409 -0
  50. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/saml_attributes.py +144 -138
  51. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/zpa_service.py +41 -21
  52. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/legacy.py +48 -40
  53. zscaler_sdk_python-1.2.4/zscaler/errors/http_error.py +0 -20
  54. zscaler_sdk_python-1.2.4/zscaler/zpa/administrator_controller.py +0 -295
  55. zscaler_sdk_python-1.2.4/zscaler/zpa/client_settings.py +0 -209
  56. zscaler_sdk_python-1.2.4/zscaler/zpa/enrollment_certificates.py +0 -320
  57. zscaler_sdk_python-1.2.4/zscaler/zpa/models/app_protection.py +0 -317
  58. zscaler_sdk_python-1.2.4/zscaler/zpa/models/application_segment.py +0 -587
  59. zscaler_sdk_python-1.2.4/zscaler/zpa/models/application_segment_inspection.py +0 -173
  60. zscaler_sdk_python-1.2.4/zscaler/zpa/models/application_segment_pra.py +0 -211
  61. zscaler_sdk_python-1.2.4/zscaler/zpa/role_controller.py +0 -285
  62. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/LICENSE.md +0 -0
  63. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/README.md +0 -0
  64. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/api_client.py +0 -0
  65. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/cache/__init__.py +0 -0
  66. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/cache/cache.py +0 -0
  67. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/cache/no_op_cache.py +0 -0
  68. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/cache/zscaler_cache.py +0 -0
  69. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/config/__init__.py +0 -0
  70. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/config/config_setter.py +0 -0
  71. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/config/config_validator.py +0 -0
  72. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/constants.py +0 -0
  73. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/error_messages.py +0 -0
  74. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/errors/__init__.py +0 -0
  75. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/errors/error.py +0 -0
  76. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/exceptions/__init__.py +0 -0
  77. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/logger.py +0 -0
  78. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/oneapi_client.py +0 -0
  79. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/oneapi_collection.py +0 -0
  80. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/oneapi_object.py +0 -0
  81. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/oneapi_response.py +0 -0
  82. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ratelimiter/__init__.py +0 -0
  83. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ratelimiter/ratelimiter.py +0 -0
  84. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/user_agent.py +0 -0
  85. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/__init__.py +0 -0
  86. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/company.py +0 -0
  87. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/entitlements.py +0 -0
  88. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/fail_open_policy.py +0 -0
  89. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/forwarding_profile.py +0 -0
  90. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/models/admin_roles.py +0 -0
  91. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/models/admin_user.py +0 -0
  92. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/models/failopenpolicy.py +0 -0
  93. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/models/forwardingprofile.py +0 -0
  94. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/models/getcompanyinfo.py +0 -0
  95. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/models/manage_pass.py +0 -0
  96. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/models/secrets_otp.py +0 -0
  97. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/models/secrets_passwords.py +0 -0
  98. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/models/trustednetworks.py +0 -0
  99. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/models/webappservice.py +0 -0
  100. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/models/webpolicy.py +0 -0
  101. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/models/webprivacy.py +0 -0
  102. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/models/zdxgroupentitlements.py +0 -0
  103. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/models/zpagroupentitlements.py +0 -0
  104. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/trusted_networks.py +0 -0
  105. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/web_app_service.py +0 -0
  106. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/web_policy.py +0 -0
  107. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/web_privacy.py +0 -0
  108. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zcc/zcc_service.py +0 -0
  109. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zdx/__init__.py +0 -0
  110. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zdx/admin.py +0 -0
  111. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zdx/alerts.py +0 -0
  112. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zdx/apps.py +0 -0
  113. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zdx/devices.py +0 -0
  114. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zdx/inventory.py +0 -0
  115. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zdx/legacy.py +0 -0
  116. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zdx/models/activeapplications.py +0 -0
  117. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zdx/models/administration.py +0 -0
  118. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zdx/models/alerts.py +0 -0
  119. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zdx/models/application_users.py +0 -0
  120. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zdx/models/applications.py +0 -0
  121. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zdx/models/call_quality_metrics.py +0 -0
  122. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zdx/models/common.py +0 -0
  123. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zdx/models/devices.py +0 -0
  124. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zdx/models/software_inventory.py +0 -0
  125. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zdx/models/troubleshooting.py +0 -0
  126. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zdx/models/users.py +0 -0
  127. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zdx/troubleshooting.py +0 -0
  128. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zdx/users.py +0 -0
  129. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zdx/zdx_service.py +0 -0
  130. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/__init__.py +0 -0
  131. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/activate.py +0 -0
  132. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/admin_roles.py +0 -0
  133. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/admin_users.py +0 -0
  134. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/advanced_settings.py +0 -0
  135. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/alert_subscriptions.py +0 -0
  136. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/apptotal.py +0 -0
  137. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/atp_policy.py +0 -0
  138. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/audit_logs.py +0 -0
  139. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/authentication_settings.py +0 -0
  140. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/bandwidth_classes.py +0 -0
  141. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/cloud_app_instances.py +0 -0
  142. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/cloud_applications.py +0 -0
  143. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/cloud_browser_isolation.py +0 -0
  144. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/cloud_firewall_dns.py +0 -0
  145. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/cloud_firewall_ips.py +0 -0
  146. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/cloud_firewall_rules.py +0 -0
  147. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/cloud_nss.py +0 -0
  148. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/cloudappcontrol.py +0 -0
  149. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/dedicated_ip_gateways.py +0 -0
  150. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/device_management.py +0 -0
  151. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/dlp_dictionary.py +0 -0
  152. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/dlp_engine.py +0 -0
  153. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/dlp_resources.py +0 -0
  154. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/dlp_templates.py +0 -0
  155. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/dlp_web_rules.py +0 -0
  156. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/dns_gatways.py +0 -0
  157. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/end_user_notification.py +0 -0
  158. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/file_type_control_rule.py +0 -0
  159. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/forwarding_control.py +0 -0
  160. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/ftp_control_policy.py +0 -0
  161. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/gre_tunnel.py +0 -0
  162. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/intermediate_certificates.py +0 -0
  163. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/iot_report.py +0 -0
  164. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/ipv6_config.py +0 -0
  165. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/locations.py +0 -0
  166. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/malware_protection_policy.py +0 -0
  167. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/mobile_threat_settings.py +0 -0
  168. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/__init__.py +0 -0
  169. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/activation.py +0 -0
  170. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/admin_roles.py +0 -0
  171. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/admin_users.py +0 -0
  172. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/advanced_settings.py +0 -0
  173. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/advanced_threat_settings.py +0 -0
  174. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/alert_subscriptions.py +0 -0
  175. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/apptotal.py +0 -0
  176. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/authentication_settings.py +0 -0
  177. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/bandwidth_classes.py +0 -0
  178. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/bandwidth_control_rules.py +0 -0
  179. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/cloud_app_instances.py +0 -0
  180. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/cloud_app_policy.py +0 -0
  181. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/cloud_browser_isolation.py +0 -0
  182. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/cloud_firewall_app_services.py +0 -0
  183. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/cloud_firewall_destination_groups.py +0 -0
  184. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/cloud_firewall_dns_rules.py +0 -0
  185. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/cloud_firewall_ips_rules.py +0 -0
  186. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/cloud_firewall_nw_application_groups.py +0 -0
  187. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/cloud_firewall_nw_applications.py +0 -0
  188. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/cloud_firewall_nw_service.py +0 -0
  189. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/cloud_firewall_nw_service_groups.py +0 -0
  190. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/cloud_firewall_rules.py +0 -0
  191. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/cloud_firewall_source_groups.py +0 -0
  192. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/cloud_firewall_time_windows.py +0 -0
  193. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/cloud_nss.py +0 -0
  194. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/cloudappcontrol.py +0 -0
  195. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/common.py +0 -0
  196. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/dedicated_ip_gateways.py +0 -0
  197. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/device_groups.py +0 -0
  198. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/devices.py +0 -0
  199. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/dlp_dictionary.py +0 -0
  200. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/dlp_engine.py +0 -0
  201. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/dlp_resources.py +0 -0
  202. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/dlp_templates.py +0 -0
  203. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/dns_gatways.py +0 -0
  204. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/endusernotification.py +0 -0
  205. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/filetyperules.py +0 -0
  206. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/forwarding_control_policy.py +0 -0
  207. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/ftp_control_policy.py +0 -0
  208. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/gre_recommended_list.py +0 -0
  209. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/gre_tunnel_info.py +0 -0
  210. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/gre_tunnels.py +0 -0
  211. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/gre_vips.py +0 -0
  212. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/intermediate_certificates.py +0 -0
  213. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/iotreport.py +0 -0
  214. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/ipv6_config.py +0 -0
  215. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/location_group.py +0 -0
  216. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/location_management.py +0 -0
  217. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/malware_protection_settings.py +0 -0
  218. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/mobile_threat_settings.py +0 -0
  219. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/nat_control_policy.py +0 -0
  220. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/nss_servers.py +0 -0
  221. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/organization_information.py +0 -0
  222. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/pac_files.py +0 -0
  223. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/proxies.py +0 -0
  224. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/proxy_gatways.py +0 -0
  225. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/remoteassistance.py +0 -0
  226. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/risk_profiles.py +0 -0
  227. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/rule_labels.py +0 -0
  228. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/sandboxrules.py +0 -0
  229. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/security_policy_settings.py +0 -0
  230. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/shadow_it_report.py +0 -0
  231. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/ssl_inspection_rules.py +0 -0
  232. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/subclouds.py +0 -0
  233. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/system_audit.py +0 -0
  234. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/tenancy_restriction_profile.py +0 -0
  235. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/time_intervals.py +0 -0
  236. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/traffic_datacenters.py +0 -0
  237. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/traffic_dc_exclusions.py +0 -0
  238. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/traffic_extranet.py +0 -0
  239. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/traffic_static_ip.py +0 -0
  240. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/traffic_vpn_credentials.py +0 -0
  241. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/url_filter_cloud_app_settings.py +0 -0
  242. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/urlcategory.py +0 -0
  243. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/user_management.py +0 -0
  244. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/workload_groups.py +0 -0
  245. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/models/zpa_gateway.py +0 -0
  246. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/nat_control_policy.py +0 -0
  247. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/nss_servers.py +0 -0
  248. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/organization_information.py +0 -0
  249. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/pac_files.py +0 -0
  250. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/policy_export.py +0 -0
  251. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/proxies.py +0 -0
  252. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/remote_assistance.py +0 -0
  253. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/risk_profiles.py +0 -0
  254. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/rule_labels.py +0 -0
  255. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/sandbox.py +0 -0
  256. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/sandbox_rules.py +0 -0
  257. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/security_policy_settings.py +0 -0
  258. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/shadow_it_report.py +0 -0
  259. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/ssl_inspection_rules.py +0 -0
  260. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/sub_clouds.py +0 -0
  261. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/system_audit.py +0 -0
  262. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/tenancy_restriction_profile.py +0 -0
  263. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/time_intervals.py +0 -0
  264. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/traffic_datacenters.py +0 -0
  265. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/traffic_extranet.py +0 -0
  266. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/traffic_static_ip.py +0 -0
  267. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/traffic_vpn_credentials.py +0 -0
  268. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/url_filtering.py +0 -0
  269. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/user_management.py +0 -0
  270. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/workload_groups.py +0 -0
  271. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/zia_service.py +0 -0
  272. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zia/zpa_gateway.py +0 -0
  273. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/__init__.py +0 -0
  274. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/app_connector_groups.py +0 -0
  275. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/app_connector_schedule.py +0 -0
  276. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/app_connectors.py +0 -0
  277. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/app_segment_by_type.py +0 -0
  278. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/cbi_banner.py +0 -0
  279. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/cbi_certificate.py +0 -0
  280. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/cbi_profile.py +0 -0
  281. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/cbi_region.py +0 -0
  282. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/cbi_zpa_profile.py +0 -0
  283. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/certificates.py +0 -0
  284. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/cloud_connector_groups.py +0 -0
  285. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/customer_controller.py +0 -0
  286. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/customer_version_profile.py +0 -0
  287. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/emergency_access.py +0 -0
  288. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/idp.py +0 -0
  289. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/lss.py +0 -0
  290. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/machine_groups.py +0 -0
  291. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/microtenants.py +0 -0
  292. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/administrator_controller.py +0 -0
  293. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/app_connector_schedule.py +0 -0
  294. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/app_connectors.py +0 -0
  295. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/application_servers.py +0 -0
  296. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/cbi_banner.py +0 -0
  297. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/cbi_certificate.py +0 -0
  298. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/cbi_profile.py +0 -0
  299. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/cbi_region.py +0 -0
  300. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/cbi_zpa_profile.py +0 -0
  301. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/certificates.py +0 -0
  302. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/client_settings.py +0 -0
  303. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/cloud_connector_groups.py +0 -0
  304. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/customer_controller.py +0 -0
  305. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/customer_version_profile.py +0 -0
  306. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/emergency_access.py +0 -0
  307. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/idp.py +0 -0
  308. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/lss.py +0 -0
  309. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/machine_groups.py +0 -0
  310. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/microtenants.py +0 -0
  311. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/posture_profiles.py +0 -0
  312. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/pra_approval.py +0 -0
  313. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/pra_cred_pool_controller.py +0 -0
  314. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/pra_credential.py +0 -0
  315. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/pra_portal.py +0 -0
  316. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/provisioning_keys.py +0 -0
  317. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/saml_attributes.py +0 -0
  318. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/scim_attributes.py +0 -0
  319. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/scim_groups.py +0 -0
  320. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/service_edge_schedule.py +0 -0
  321. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/service_edges.py +0 -0
  322. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/models/trusted_network.py +0 -0
  323. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/posture_profiles.py +0 -0
  324. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/pra_approval.py +0 -0
  325. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/pra_console.py +0 -0
  326. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/pra_credential.py +0 -0
  327. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/pra_credential_pool.py +0 -0
  328. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/pra_portal.py +0 -0
  329. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/provisioning.py +0 -0
  330. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/scim_attributes.py +0 -0
  331. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/scim_groups.py +0 -0
  332. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/segment_groups.py +0 -0
  333. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/server_groups.py +0 -0
  334. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/servers.py +0 -0
  335. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/service_edge_group.py +0 -0
  336. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/service_edge_schedule.py +0 -0
  337. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/service_edges.py +0 -0
  338. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zpa/trusted_networks.py +0 -0
  339. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/__init__.py +0 -0
  340. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/account_details.py +0 -0
  341. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/activation.py +0 -0
  342. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/admin_roles.py +0 -0
  343. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/admin_users.py +0 -0
  344. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/api_keys.py +0 -0
  345. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/ec_groups.py +0 -0
  346. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/forwarding_gateways.py +0 -0
  347. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/forwarding_rules.py +0 -0
  348. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/ip_destination_groups.py +0 -0
  349. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/ip_groups.py +0 -0
  350. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/ip_source_groups.py +0 -0
  351. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/location_management.py +0 -0
  352. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/location_template.py +0 -0
  353. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/models/activation.py +0 -0
  354. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/models/admin_roles.py +0 -0
  355. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/models/admin_users.py +0 -0
  356. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/models/api_keys.py +0 -0
  357. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/models/common.py +0 -0
  358. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/models/ec_group_vm.py +0 -0
  359. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/models/ecgroup.py +0 -0
  360. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/models/forwarding_gateways.py +0 -0
  361. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/models/forwarding_rules.py +0 -0
  362. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/models/ip_destination_groups.py +0 -0
  363. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/models/ip_groups.py +0 -0
  364. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/models/ip_source_groups.py +0 -0
  365. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/models/location_management.py +0 -0
  366. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/models/location_templates.py +0 -0
  367. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/models/nw_service.py +0 -0
  368. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/models/nw_service_groups.py +0 -0
  369. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/models/provisioning_url.py +0 -0
  370. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/models/traffic_vpn_credentials.py +0 -0
  371. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/models/zpa_resources.py +0 -0
  372. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/nw_service.py +0 -0
  373. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/nw_service_groups.py +0 -0
  374. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/provisioning_url.py +0 -0
  375. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/ztw/ztw_service.py +0 -0
  376. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zwa/__init__.py +0 -0
  377. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zwa/audit_logs.py +0 -0
  378. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zwa/dlp_incidents.py +0 -0
  379. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zwa/legacy.py +0 -0
  380. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zwa/models/audit_logs.py +0 -0
  381. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zwa/models/change_history.py +0 -0
  382. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zwa/models/common.py +0 -0
  383. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zwa/models/generated_tickets.py +0 -0
  384. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zwa/models/incident_details.py +0 -0
  385. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zwa/models/incident_evidence.py +0 -0
  386. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zwa/models/incident_group_search.py +0 -0
  387. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zwa/models/incident_search.py +0 -0
  388. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zwa/models/incident_trigger.py +0 -0
  389. {zscaler_sdk_python-1.2.4 → zscaler_sdk_python-1.4.0}/zscaler/zwa/zwa_service.py +0 -0
@@ -1,29 +1,29 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: zscaler-sdk-python
3
- Version: 1.2.4
3
+ Version: 1.4.0
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
7
7
  Keywords: zscaler,sdk,zpa,zia,zdx,zcc,ztw,zwa
8
8
  Author: Zscaler, Inc.
9
9
  Author-email: devrel@zscaler.com
10
- Requires-Python: >=3.9,<4.0
10
+ Requires-Python: >=3.9.2,<4.0
11
11
  Classifier: Development Status :: 5 - Production/Stable
12
12
  Classifier: Intended Audience :: Developers
13
13
  Classifier: License :: OSI Approved :: MIT License
14
14
  Classifier: Operating System :: OS Independent
15
15
  Classifier: Programming Language :: Python :: 3
16
- Classifier: Programming Language :: Python :: 3.9
17
16
  Classifier: Programming Language :: Python :: 3.10
18
17
  Classifier: Programming Language :: Python :: 3.11
19
18
  Classifier: Programming Language :: Python :: 3.12
20
19
  Classifier: Programming Language :: Python :: 3.8
20
+ Classifier: Programming Language :: Python :: 3.9
21
21
  Classifier: Topic :: Security
22
22
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
23
23
  Provides-Extra: dev
24
24
  Requires-Dist: aenum (>=3.1.11)
25
25
  Requires-Dist: arrow (>=1.3.0)
26
- Requires-Dist: cryptography (>=43.0.0)
26
+ Requires-Dist: cryptography (>=45.0.2)
27
27
  Requires-Dist: flatdict (>=4.0.0)
28
28
  Requires-Dist: pydash (>=8.0.3)
29
29
  Requires-Dist: pyjwt (>=2.8.0)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "zscaler-sdk-python"
3
- version = "1.2.4"
3
+ version = "1.4.0"
4
4
  description = "Official Python SDK for the Zscaler Products"
5
5
  authors = ["Zscaler, Inc. <devrel@zscaler.com>"]
6
6
  license = "MIT"
@@ -28,9 +28,9 @@ packages = [
28
28
  "Bug Tracker" = "https://github.com/zscaler/zscaler-sdk-python/issues"
29
29
 
30
30
  [tool.poetry.dependencies]
31
- python = ">=3.9,<4.0"
31
+ python = ">=3.9.2,<4.0"
32
32
  requests = ">=2.32.3"
33
- cryptography = ">=43.0.0"
33
+ cryptography = ">=45.0.2"
34
34
  pyyaml = ">=6.0.0"
35
35
  pytz = ">=2024.2"
36
36
  python-box = ">=7.3.0"
@@ -29,7 +29,7 @@ __license__ = "MIT"
29
29
  __contributors__ = [
30
30
  "William Guilherme",
31
31
  ]
32
- __version__ = "1.2.4"
32
+ __version__ = "1.4.0"
33
33
 
34
34
 
35
35
  from zscaler.oneapi_client import Client as ZscalerClient # noqa
@@ -0,0 +1,10 @@
1
+ class HTTPError(Exception):
2
+ def __init__(self, url, response_details, response_body):
3
+ self.status_code = response_details.status_code
4
+ self.url = url
5
+ self.response_headers = response_details.headers
6
+ self.message = f"HTTP {self.status_code} {response_body}"
7
+ super().__init__(self.message) # ✅ important
8
+
9
+ def __str__(self):
10
+ return self.message
@@ -0,0 +1,57 @@
1
+ import json
2
+ import logging
3
+ from zscaler.errors.http_error import HTTPError
4
+ from zscaler.errors.zscaler_api_error import ZscalerAPIError
5
+ from zscaler.exceptions import HTTPException, ZscalerAPIException
6
+ from zscaler.exceptions import exceptions
7
+
8
+ logger = logging.getLogger(__name__)
9
+
10
+ @staticmethod
11
+ def check_response_for_error(url, response_details, response_body):
12
+ """
13
+ Checks HTTP response for errors in the response body.
14
+
15
+ Args:
16
+ url (str): URL of the response
17
+ response_details (requests.Response): Response object with details
18
+ response_body (str): Response body in JSON or plain string
19
+
20
+ Returns:
21
+ Tuple(dict or None, error or None)
22
+ """
23
+ # Defensive check: if response_details is not a real HTTP response, skip
24
+ if not hasattr(response_details, "headers"):
25
+ logger.debug(f"[SKIP] check_response_for_error received non-Response object: {type(response_details)}")
26
+ return response_details, None
27
+
28
+ content_type = response_details.headers.get("Content-Type", "")
29
+ is_json = "application/json" in content_type
30
+ body_text = response_body if isinstance(response_body, str) else str(response_body)
31
+
32
+ try:
33
+ formatted_response = json.loads(response_body) if is_json else response_body
34
+ except json.JSONDecodeError as e:
35
+ logger.warning(f"Non-JSON response from {url}: {body_text}")
36
+ if exceptions.raise_exception:
37
+ raise HTTPException(url, response_details, body_text)
38
+ return None, HTTPError(url, response_details, body_text)
39
+
40
+ # ✅ Only now we are confident it's safe to access .status_code
41
+ status_code = response_details.status_code
42
+
43
+ if 200 <= status_code < 300:
44
+ return formatted_response, None
45
+
46
+ try:
47
+ error = ZscalerAPIError(url, response_details, formatted_response)
48
+ if exceptions.raise_exception:
49
+ raise ZscalerAPIException(error)
50
+ return None, error
51
+
52
+ except Exception as e:
53
+ logger.exception("Failed to construct ZscalerAPIError.")
54
+ generic_error = HTTPError(url, response_details, formatted_response)
55
+ if exceptions.raise_exception:
56
+ raise HTTPException(str(generic_error)) from e
57
+ return None, generic_error
@@ -1,50 +1,40 @@
1
- from zscaler.errors.error import Error
2
1
  import json
3
2
 
4
3
 
5
- class ZscalerAPIError(Error):
4
+ class ZscalerAPIError(Exception):
6
5
  def __init__(self, url, response_details, response_body, service_type=""):
7
6
  self.status_code = response_details.status_code
8
7
  self.url = url
8
+ self.service_type = service_type.lower()
9
9
  self.headers = response_details.headers
10
10
  self.stack = ""
11
- self.service_type = service_type.lower()
12
11
 
13
- # Ensure response_body is a dict
14
12
  if not isinstance(response_body, dict):
15
13
  response_body = {"message": str(response_body)}
16
14
 
17
- # Initialize fields
18
- self.error_code = None
19
- self.error_message = None
20
- self.params = None
21
- self.path = None
22
-
23
- # Populate based on service type
24
- if self.service_type == "zpa":
25
- self.error_code = response_body.get("id")
26
- self.error_message = response_body.get("reason")
27
- self.params = response_body.get("params")
28
- else: # default to ZIA/others
29
- self.error_code = response_body.get("code") or response_body.get("id")
30
- self.error_message = response_body.get("message") or response_body.get("reason")
31
-
32
- self.params = self.params or []
15
+ self.error_code = response_body.get("code") or response_body.get("id")
16
+ self.error_message = response_body.get("message") or response_body.get("reason")
17
+ self.params = response_body.get("params", [])
33
18
  self.path = response_body.get("path")
34
19
 
35
- # Construct message string
36
20
  message_parts = [f"HTTP {self.status_code}"]
37
21
  if self.error_code:
38
- message_parts.append(self.error_code)
22
+ message_parts.append(str(self.error_code))
39
23
  if self.error_message:
40
24
  message_parts.append(self.error_message)
41
25
  if self.params:
42
26
  message_parts.append(f"Parameters: {', '.join(self.params)}")
43
27
 
44
28
  self.message = " ".join(message_parts)
29
+ super().__init__(self.message) # ✅ This is what makes it raise-able
45
30
 
46
31
  def __str__(self):
47
- error_payload = {"status": self.status_code, "code": self.error_code, "message": self.error_message, "url": self.url}
32
+ error_payload = {
33
+ "status": self.status_code,
34
+ "code": self.error_code,
35
+ "message": self.error_message,
36
+ "url": self.url,
37
+ }
48
38
  if self.params:
49
39
  error_payload["params"] = self.params
50
40
  if self.path:
@@ -1,5 +1,6 @@
1
1
  import json
2
2
 
3
+ raise_exception = False
3
4
 
4
5
  # Zscaler Base Exceptions
5
6
  class ZscalerBaseException(Exception):
@@ -117,7 +117,14 @@ def to_snake_case(string):
117
117
  "truncate_large_udpdns_response": "truncateLargeUDPDNSResponse",
118
118
  "enableZCCRevert": "enable_zcc_revert",
119
119
  "enableZiaDR": "enable_zia_dr",
120
- "purge_kerberos_preferred_dc_cache": "purgeKerberosPreferredDCCache"
120
+ "purgeKerberosPreferredDCCache": "purge_kerberos_preferred_dc_cache",
121
+
122
+ # ZPA Edge Cases
123
+ "serverGroupDTOs": "server_group_dtos",
124
+ "extranetDTO": "extranet_dto",
125
+ "locationGroupDTO": "location_group_dto",
126
+ "locationDTO": "location_dto",
127
+ "predefinedADPControls": "predefined_adp_controls"
121
128
  }
122
129
 
123
130
  if string in FIELD_EXCEPTIONS:
@@ -242,7 +249,14 @@ def to_lower_camel_case(string):
242
249
  "enable_zcc_revert": "enableZCCRevert",
243
250
  "delete_dhcp_option121_routes": "deleteDHCPOption121Routes",
244
251
  "enableZiaDR": "enable_zia_dr",
245
- "purgeKerberosPreferredDCCache": "purge_kerberos_preferred_dc_cache"
252
+ "purgeKerberosPreferredDCCache": "purge_kerberos_preferred_dc_cache",
253
+
254
+ # ZPA Edge Cases
255
+ "server_group_dtos": "serverGroupDTOs",
256
+ "extranet_dto": "extranetDTO",
257
+ "location_group_dto": "locationGroupDTO",
258
+ "location_dto": "locationDTO",
259
+ "predefined_adp_controls": "predefinedADPControls"
246
260
  }
247
261
 
248
262
  if string in FIELD_EXCEPTIONS:
@@ -1,12 +1,7 @@
1
- import json
2
1
  import requests
3
2
  import logging
4
3
  import os
5
4
  import time
6
- from zscaler.errors.http_error import HTTPError
7
- from zscaler.errors.zscaler_api_error import ZscalerAPIError
8
- from zscaler.exceptions import HTTPException, ZscalerAPIException
9
- from http import HTTPStatus
10
5
  from zscaler.logger import dump_request, dump_response
11
6
  from zscaler.zcc.legacy import LegacyZCCClientHelper
12
7
  from zscaler.ztw.legacy import LegacyZTWClientHelper
@@ -25,7 +20,7 @@ class HTTPClient:
25
20
  Custom HTTP clients should inherit from this class.
26
21
  """
27
22
 
28
- raise_exception = False
23
+ # raise_exception = False
29
24
 
30
25
  def __init__(
31
26
  self,
@@ -335,52 +330,6 @@ class HTTPClient:
335
330
  # logger.error(f"Unexpected error during request execution: {error}")
336
331
  return (None, error)
337
332
 
338
- @staticmethod
339
- def check_response_for_error(url, response_details, response_body):
340
- """
341
- Checks HTTP response for errors in the response body.
342
-
343
- Args:
344
- url (str): URL of the response
345
- response_details (requests.Response): Response object with details
346
- response_body (str): Response body in JSON or plain string
347
-
348
- Returns:
349
- Tuple(dict or None, error or None)
350
- """
351
- content_type = response_details.headers.get("Content-Type", "")
352
- is_json = "application/json" in content_type
353
-
354
- # Attempt to parse JSON safely
355
- try:
356
- formatted_response = json.loads(response_body) if is_json else response_body
357
- except json.JSONDecodeError as e:
358
- logger.error(f"Failed to parse JSON response: {e}")
359
- if HTTPClient.raise_exception:
360
- raise HTTPException(f"Invalid JSON response from {url}: {response_body}")
361
- return None, HTTPError(url, response_details, response_body)
362
-
363
- status_code = response_details.status_code
364
-
365
- if 200 <= status_code < 300:
366
- return formatted_response, None
367
-
368
- # Defensive error handling block (minimal, correct)
369
- try:
370
- error = ZscalerAPIError(url, response_details, formatted_response)
371
- # logger.debug(f"Raw API Error JSON: {json.dumps(formatted_response, indent=2)}")
372
- if HTTPClient.raise_exception:
373
- raise ZscalerAPIException(error)
374
- return None, error
375
-
376
- except Exception as e:
377
- # Catch-all in case ZscalerAPIError constructor fails
378
- logger.exception("Failed to construct ZscalerAPIError.")
379
- generic_error = HTTPError(url, response_details, formatted_response)
380
- if HTTPClient.raise_exception:
381
- raise HTTPException(str(generic_error)) from e
382
- return None, generic_error
383
-
384
333
  @staticmethod
385
334
  def format_binary_data(data):
386
335
  """Formats binary data for multipart uploads."""
@@ -7,6 +7,7 @@ from cryptography.hazmat.backends import default_backend
7
7
  from cryptography.hazmat.primitives import serialization
8
8
  from zscaler.user_agent import UserAgent
9
9
  from zscaler.oneapi_http_client import HTTPClient
10
+ from zscaler.errors.response_checker import check_response_for_error
10
11
 
11
12
  logger = logging.getLogger(__name__)
12
13
 
@@ -193,7 +194,7 @@ class OAuth:
193
194
  response = self.authenticate()
194
195
 
195
196
  # Check the response body for error messages using check_response_for_error
196
- parsed_response, err = HTTPClient.check_response_for_error(response.url, response, response.text)
197
+ parsed_response, err = check_response_for_error(response.url, response, response.text)
197
198
 
198
199
  if err:
199
200
  logging.error(f"Error during authentication: {err}")
@@ -8,13 +8,14 @@ from zscaler.user_agent import UserAgent
8
8
  from zscaler.error_messages import ERROR_MESSAGE_429_MISSING_DATE_X_RESET
9
9
  from http import HTTPStatus
10
10
  from zscaler.helpers import convert_keys_to_snake_case, convert_keys_to_camel_case
11
+ from zscaler.errors.response_checker import check_response_for_error
12
+ from zscaler.exceptions import exceptions
11
13
  from zscaler.zcc.legacy import LegacyZCCClientHelper
12
14
  from zscaler.ztw.legacy import LegacyZTWClientHelper
13
15
  from zscaler.zdx.legacy import LegacyZDXClientHelper
14
16
  from zscaler.zpa.legacy import LegacyZPAClientHelper
15
17
  from zscaler.zia.legacy import LegacyZIAClientHelper
16
18
  from zscaler.zwa.legacy import LegacyZWAClientHelper
17
- # from zscaler.logger import setup_logging # ✅ Import here
18
19
 
19
20
  logger = logging.getLogger('zscaler-sdk-python')
20
21
 
@@ -118,7 +119,7 @@ class RequestExecutor:
118
119
  zwa_legacy_client=self.zwa_legacy_client,
119
120
  )
120
121
 
121
- HTTPClient.raise_exception = self._config["client"].get("raiseException", False)
122
+ exceptions.raise_exception = self._config["client"].get("raiseException", False)
122
123
  self._custom_headers = {}
123
124
 
124
125
  def get_base_url(self, endpoint: str) -> str:
@@ -331,9 +332,6 @@ class RequestExecutor:
331
332
  """
332
333
  try:
333
334
  request, response, response_body, error = self.fire_request(request)
334
- logger.debug(
335
- f"[DEBUG] Got response: {response} (status: {getattr(response, 'status_code', 'N/A')}) | error: {error}"
336
- )
337
335
  except Exception as ex:
338
336
  logger.error(f"Exception during HTTP request: {ex}")
339
337
  return None, ex
@@ -354,7 +352,7 @@ class RequestExecutor:
354
352
  return response, None
355
353
 
356
354
  try:
357
- response_data, error = self._http_client.check_response_for_error(request["url"], response, response_body)
355
+ response_data, error = check_response_for_error(request["url"], response, response_body)
358
356
  except Exception as ex:
359
357
  logger.error(f"Exception while checking response for errors: {ex}")
360
358
  return None, ex
@@ -463,33 +461,59 @@ class RequestExecutor:
463
461
  request_start_time (float): Original start time of request.
464
462
 
465
463
  Returns:
466
- Tuple of request, response object, response body, and error.
464
+ Tuple of (request, response object, response body, error).
467
465
  """
468
466
  current_req_start_time = time.time()
469
467
  max_retries = self._max_retries
470
468
  req_timeout = self._request_timeout
471
469
 
470
+ # Check if total elapsed time exceeds the configured request timeout
472
471
  if req_timeout > 0 and (current_req_start_time - request_start_time) > req_timeout:
473
472
  logger.warning("Request Timeout exceeded.")
474
473
  return None, None, None, Exception("Request Timeout exceeded.")
475
474
 
475
+ # Perform the actual HTTP request
476
476
  response, error = self._http_client.send_request(request)
477
477
 
478
+ # If a low-level error occurred (network, request construction, etc.)
478
479
  if error:
479
- # logger.error(f"Error sending request: {error}")
480
480
  return request, response, response.text if response else None, error
481
481
 
482
- headers = response.headers
482
+ # Check for 401 -> Trigger re-auth if we still have retries left
483
+ if response.status_code == 401:
484
+ # We only want to attempt refreshing the token if we haven't hit max_retries
485
+ if attempts < max_retries:
486
+ logger.info("Got 401 response; clearing token and re-authenticating.")
487
+ self._oauth.clear_access_token()
488
+
489
+ try:
490
+ fresh_token = self._oauth._get_access_token()
491
+ except Exception as e:
492
+ # If re-auth fails, return immediately
493
+ logger.error(f"Token refresh failed after 401: {e}")
494
+ return request, response, response.text, e
495
+
496
+ # Update the request with the new token
497
+ request["headers"]["Authorization"] = f"Bearer {fresh_token}"
498
+ attempts += 1
499
+ return self.fire_request_helper(request, attempts, request_start_time)
500
+ else:
501
+ logger.error("401 Unauthorized - token refresh attempts exhausted.")
502
+ return request, response, response.text, Exception("401 Unauthorized - token refresh attempts exhausted.")
483
503
 
504
+ # Handle “retryable” statuses such as 429, 503, etc.
484
505
  if attempts < max_retries and self.is_retryable_status(response.status_code):
485
- backoff_seconds = self.get_retry_after(headers, logger)
506
+ backoff_seconds = self.get_retry_after(response.headers, logger)
486
507
  if backoff_seconds is None:
487
508
  return None, response, response.text, Exception(ERROR_MESSAGE_429_MISSING_DATE_X_RESET)
488
- logger.info(f"Hit rate limit. Retrying request in {backoff_seconds} seconds.")
509
+
510
+ logger.info(f"Hit rate limit or retryable status {response.status_code}. "
511
+ f"Retrying request in {backoff_seconds} seconds.")
489
512
  time.sleep(backoff_seconds)
490
513
  attempts += 1
491
514
  return self.fire_request_helper(request, attempts, request_start_time)
492
515
 
516
+ # If we reach here, no further retries; return whatever we got
493
517
  return request, response, response.text, None
494
518
 
495
519
  def is_retryable_status(self, status):
@@ -570,7 +594,13 @@ class RequestExecutor:
570
594
 
571
595
  def get_retry_after(self, headers, logger):
572
596
  retry_limit_reset_header = (
573
- headers.get("x-ratelimit-reset") or headers.get("X-RateLimit-Reset") or headers.get("RateLimit-Reset")
597
+ headers.get("x-ratelimit-reset") or
598
+ headers.get("X-RateLimit-Reset") or
599
+ headers.get("RateLimit-Reset") or
600
+
601
+ # ZCC Specific Rate Limiting Headers (LegacyZCCClientHelper)
602
+ headers.get("X-Rate-Limit-Retry-After-Seconds") or # ZCC /downloadDevices Rate Limiting Header (LegacyZCCClientHelper)
603
+ headers.get("X-Rate-Limit-Remaining") # (LegacyZCCClientHelper)
574
604
  )
575
605
  retry_after = headers.get("Retry-After") or headers.get("retry-after")
576
606