zscaler-sdk-python 2.0.0__tar.gz → 2.0.0b1__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 (437) hide show
  1. zscaler_sdk_python-2.0.0b1/PKG-INFO +933 -0
  2. zscaler_sdk_python-2.0.0b1/README.md +890 -0
  3. zscaler_sdk_python-2.0.0b1/pyproject.toml +107 -0
  4. zscaler_sdk_python-2.0.0b1/setup.cfg +4 -0
  5. zscaler_sdk_python-2.0.0b1/zscaler_sdk_python.egg-info/PKG-INFO +933 -0
  6. zscaler_sdk_python-2.0.0b1/zscaler_sdk_python.egg-info/SOURCES.txt +99 -0
  7. zscaler_sdk_python-2.0.0b1/zscaler_sdk_python.egg-info/dependency_links.txt +1 -0
  8. zscaler_sdk_python-2.0.0b1/zscaler_sdk_python.egg-info/requires.txt +20 -0
  9. zscaler_sdk_python-2.0.0b1/zscaler_sdk_python.egg-info/top_level.txt +1 -0
  10. zscaler_sdk_python-2.0.0b1/zssdk/__init__.py +55 -0
  11. zscaler_sdk_python-2.0.0/zscaler/zwa/zwa_service.py → zscaler_sdk_python-2.0.0b1/zssdk/__version__.py +1 -25
  12. zscaler_sdk_python-2.0.0b1/zssdk/session.py +251 -0
  13. zscaler_sdk_python-2.0.0b1/zssdk/session.pyi +59 -0
  14. zscaler_sdk_python-2.0.0b1/zssdk/zscore/__init__.py +98 -0
  15. zscaler_sdk_python-2.0.0b1/zssdk/zscore/args.py +57 -0
  16. zscaler_sdk_python-2.0.0b1/zssdk/zscore/auth.py +77 -0
  17. zscaler_sdk_python-2.0.0b1/zssdk/zscore/case.py +118 -0
  18. zscaler_sdk_python-2.0.0b1/zssdk/zscore/client.py +367 -0
  19. zscaler_sdk_python-2.0.0b1/zssdk/zscore/config.py +173 -0
  20. zscaler_sdk_python-2.0.0b1/zssdk/zscore/configloader.py +84 -0
  21. zscaler_sdk_python-2.0.0b1/zssdk/zscore/configprovider.py +153 -0
  22. zscaler_sdk_python-2.0.0b1/zssdk/zscore/credentials.py +257 -0
  23. zscaler_sdk_python-2.0.0b1/zssdk/zscore/csv_utils.py +212 -0
  24. zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/_retry.json +75 -0
  25. zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/endpoints.json +38 -0
  26. zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/exception.json +46 -0
  27. zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/zcc/v1/paginators-1.json +102 -0
  28. zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/zcc/v1/service-1.json +5815 -0
  29. zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/zdx/v1/paginators-1.json +60 -0
  30. zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/zdx/v1/service-1.json +3981 -0
  31. zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/zia/v1/paginators-1.json +396 -0
  32. zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/zia/v1/service-1.json +30535 -0
  33. zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/zid/v1/paginators-1.json +46 -0
  34. zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/zid/v1/service-1.json +1677 -0
  35. zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/zpa/v1/paginators-1.json +326 -0
  36. zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/zpa/v1/service-1.json +17746 -0
  37. zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/ztw/v1/paginators-1.json +137 -0
  38. zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/ztw/v1/service-1.json +7226 -0
  39. zscaler_sdk_python-2.0.0b1/zssdk/zscore/endpoint.py +106 -0
  40. zscaler_sdk_python-2.0.0b1/zssdk/zscore/errorfactory.py +96 -0
  41. zscaler_sdk_python-2.0.0b1/zssdk/zscore/errorutils.py +256 -0
  42. zscaler_sdk_python-2.0.0b1/zssdk/zscore/exceptions.py +431 -0
  43. zscaler_sdk_python-2.0.0b1/zssdk/zscore/handlers.py +58 -0
  44. zscaler_sdk_python-2.0.0b1/zssdk/zscore/hooks.py +302 -0
  45. zscaler_sdk_python-2.0.0b1/zssdk/zscore/httpsession.py +192 -0
  46. zscaler_sdk_python-2.0.0b1/zssdk/zscore/loaders.py +136 -0
  47. zscaler_sdk_python-2.0.0b1/zssdk/zscore/logger.py +737 -0
  48. zscaler_sdk_python-2.0.0b1/zssdk/zscore/model.py +205 -0
  49. zscaler_sdk_python-2.0.0b1/zssdk/zscore/paginate.py +351 -0
  50. zscaler_sdk_python-2.0.0b1/zssdk/zscore/parsers.py +404 -0
  51. zscaler_sdk_python-2.0.0b1/zssdk/zscore/regions.py +52 -0
  52. zscaler_sdk_python-2.0.0/zscaler/zpa/models/auth_domain.py → zscaler_sdk_python-2.0.0b1/zssdk/zscore/request.py +15 -17
  53. zscaler_sdk_python-2.0.0b1/zssdk/zscore/response.py +99 -0
  54. zscaler_sdk_python-2.0.0b1/zssdk/zscore/retry.py +371 -0
  55. zscaler_sdk_python-2.0.0b1/zssdk/zscore/serialize.py +499 -0
  56. zscaler_sdk_python-2.0.0b1/zssdk/zscore/session.py +389 -0
  57. zscaler_sdk_python-2.0.0b1/zssdk/zscore/session.pyi +33 -0
  58. zscaler_sdk_python-2.0.0b1/zssdk/zscore/stub.py +225 -0
  59. zscaler_sdk_python-2.0.0b1/zssdk/zscore/tokenprovider.py +146 -0
  60. zscaler_sdk_python-2.0.0b1/zssdk/zscore/useragent.py +81 -0
  61. zscaler_sdk_python-2.0.0b1/zssdk/zscore/utils.py +124 -0
  62. zscaler_sdk_python-2.0.0b1/zssdk/zscore/validate.py +132 -0
  63. zscaler_sdk_python-2.0.0b1/zssdk/zscore/zcc_client.pyi +875 -0
  64. zscaler_sdk_python-2.0.0b1/zssdk/zscore/zdx_client.pyi +188 -0
  65. zscaler_sdk_python-2.0.0b1/zssdk/zscore/zia_client.pyi +5980 -0
  66. zscaler_sdk_python-2.0.0b1/zssdk/zscore/zid_client.pyi +458 -0
  67. zscaler_sdk_python-2.0.0b1/zssdk/zscore/zpa_client.pyi +3478 -0
  68. zscaler_sdk_python-2.0.0b1/zssdk/zscore/ztw_client.pyi +564 -0
  69. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/__init__.py +74 -0
  70. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/action.py +118 -0
  71. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/base.py +196 -0
  72. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/base.pyi +12 -0
  73. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/collection.py +475 -0
  74. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/collection.pyi +29 -0
  75. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/data/zcc/v1/resources-1.json +7052 -0
  76. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/data/zdx/v1/resources-1.json +3600 -0
  77. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/data/zia/v1/resources-1.json +46276 -0
  78. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/data/zid/v1/resources-1.json +1678 -0
  79. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/data/zpa/v1/resources-1.json +26043 -0
  80. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/data/ztw/v1/resources-1.json +10057 -0
  81. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/dictionary.py +127 -0
  82. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/dictionary.pyi +16 -0
  83. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/exception_factory.py +160 -0
  84. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/exceptions.py +236 -0
  85. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/exceptions.pyi +42 -0
  86. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/factory.py +1112 -0
  87. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/params.py +66 -0
  88. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/response.py +173 -0
  89. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/service.py +84 -0
  90. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/service.pyi +14 -0
  91. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/subresource.py +469 -0
  92. zscaler_sdk_python-2.0.0/zscaler/__init__.py → zscaler_sdk_python-2.0.0b1/zssdk/zsresource/utils.py +8 -15
  93. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/validation.py +91 -0
  94. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/zcc_resources.pyi +2683 -0
  95. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/zdx_resources.pyi +933 -0
  96. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/zia_resources.pyi +12486 -0
  97. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/zid_resources.pyi +633 -0
  98. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/zpa_resources.pyi +6947 -0
  99. zscaler_sdk_python-2.0.0b1/zssdk/zsresource/ztw_resources.pyi +2158 -0
  100. zscaler_sdk_python-2.0.0/PKG-INFO +0 -1107
  101. zscaler_sdk_python-2.0.0/README.md +0 -1067
  102. zscaler_sdk_python-2.0.0/pyproject.toml +0 -85
  103. zscaler_sdk_python-2.0.0/zscaler/api_client.py +0 -70
  104. zscaler_sdk_python-2.0.0/zscaler/cache/cache.py +0 -105
  105. zscaler_sdk_python-2.0.0/zscaler/cache/no_op_cache.py +0 -60
  106. zscaler_sdk_python-2.0.0/zscaler/cache/zscaler_cache.py +0 -171
  107. zscaler_sdk_python-2.0.0/zscaler/config/__init__.py +0 -0
  108. zscaler_sdk_python-2.0.0/zscaler/config/config_setter.py +0 -195
  109. zscaler_sdk_python-2.0.0/zscaler/config/config_validator.py +0 -173
  110. zscaler_sdk_python-2.0.0/zscaler/constants.py +0 -46
  111. zscaler_sdk_python-2.0.0/zscaler/error_messages.py +0 -46
  112. zscaler_sdk_python-2.0.0/zscaler/errors/__init__.py +0 -0
  113. zscaler_sdk_python-2.0.0/zscaler/errors/error.py +0 -10
  114. zscaler_sdk_python-2.0.0/zscaler/errors/http_error.py +0 -20
  115. zscaler_sdk_python-2.0.0/zscaler/errors/zscaler_api_error.py +0 -28
  116. zscaler_sdk_python-2.0.0/zscaler/exceptions/__init__.py +0 -1
  117. zscaler_sdk_python-2.0.0/zscaler/exceptions/exceptions.py +0 -101
  118. zscaler_sdk_python-2.0.0/zscaler/helpers.py +0 -154
  119. zscaler_sdk_python-2.0.0/zscaler/logger.py +0 -124
  120. zscaler_sdk_python-2.0.0/zscaler/oneapi_client.py +0 -445
  121. zscaler_sdk_python-2.0.0/zscaler/oneapi_collection.py +0 -16
  122. zscaler_sdk_python-2.0.0/zscaler/oneapi_http_client.py +0 -419
  123. zscaler_sdk_python-2.0.0/zscaler/oneapi_oauth_client.py +0 -239
  124. zscaler_sdk_python-2.0.0/zscaler/oneapi_object.py +0 -77
  125. zscaler_sdk_python-2.0.0/zscaler/oneapi_response.py +0 -286
  126. zscaler_sdk_python-2.0.0/zscaler/ratelimiter/__init__.py +0 -0
  127. zscaler_sdk_python-2.0.0/zscaler/ratelimiter/ratelimiter.py +0 -60
  128. zscaler_sdk_python-2.0.0/zscaler/request_executor.py +0 -579
  129. zscaler_sdk_python-2.0.0/zscaler/user_agent.py +0 -21
  130. zscaler_sdk_python-2.0.0/zscaler/utils.py +0 -845
  131. zscaler_sdk_python-2.0.0/zscaler/zcc/__init__.py +0 -0
  132. zscaler_sdk_python-2.0.0/zscaler/zcc/admin_user.py +0 -266
  133. zscaler_sdk_python-2.0.0/zscaler/zcc/company.py +0 -71
  134. zscaler_sdk_python-2.0.0/zscaler/zcc/devices.py +0 -479
  135. zscaler_sdk_python-2.0.0/zscaler/zcc/entitlements.py +0 -195
  136. zscaler_sdk_python-2.0.0/zscaler/zcc/fail_open_policy.py +0 -116
  137. zscaler_sdk_python-2.0.0/zscaler/zcc/forwarding_profile.py +0 -145
  138. zscaler_sdk_python-2.0.0/zscaler/zcc/legacy.py +0 -353
  139. zscaler_sdk_python-2.0.0/zscaler/zcc/manage_pass.py +0 -65
  140. zscaler_sdk_python-2.0.0/zscaler/zcc/models/admin_roles.py +0 -163
  141. zscaler_sdk_python-2.0.0/zscaler/zcc/models/admin_user.py +0 -69
  142. zscaler_sdk_python-2.0.0/zscaler/zcc/models/devices.py +0 -215
  143. zscaler_sdk_python-2.0.0/zscaler/zcc/models/failopenpolicy.py +0 -104
  144. zscaler_sdk_python-2.0.0/zscaler/zcc/models/forwardingprofile.py +0 -343
  145. zscaler_sdk_python-2.0.0/zscaler/zcc/models/manage_pass.py +0 -96
  146. zscaler_sdk_python-2.0.0/zscaler/zcc/models/secrets_otp.py +0 -74
  147. zscaler_sdk_python-2.0.0/zscaler/zcc/models/secrets_passwords.py +0 -60
  148. zscaler_sdk_python-2.0.0/zscaler/zcc/models/trustednetworks.py +0 -97
  149. zscaler_sdk_python-2.0.0/zscaler/zcc/models/webappservice.py +0 -85
  150. zscaler_sdk_python-2.0.0/zscaler/zcc/models/webpolicy.py +0 -176
  151. zscaler_sdk_python-2.0.0/zscaler/zcc/models/webprivacy.py +0 -84
  152. zscaler_sdk_python-2.0.0/zscaler/zcc/models/zdxgroupentitlements.py +0 -72
  153. zscaler_sdk_python-2.0.0/zscaler/zcc/models/zpagroupentitlements.py +0 -73
  154. zscaler_sdk_python-2.0.0/zscaler/zcc/secrets.py +0 -111
  155. zscaler_sdk_python-2.0.0/zscaler/zcc/trusted_networks.py +0 -198
  156. zscaler_sdk_python-2.0.0/zscaler/zcc/web_app_service.py +0 -81
  157. zscaler_sdk_python-2.0.0/zscaler/zcc/web_policy.py +0 -186
  158. zscaler_sdk_python-2.0.0/zscaler/zcc/web_privacy.py +0 -120
  159. zscaler_sdk_python-2.0.0/zscaler/zcc/zcc_service.py +0 -131
  160. zscaler_sdk_python-2.0.0/zscaler/zdx/__init__.py +0 -0
  161. zscaler_sdk_python-2.0.0/zscaler/zdx/admin.py +0 -162
  162. zscaler_sdk_python-2.0.0/zscaler/zdx/alerts.py +0 -323
  163. zscaler_sdk_python-2.0.0/zscaler/zdx/apps.py +0 -467
  164. zscaler_sdk_python-2.0.0/zscaler/zdx/devices.py +0 -841
  165. zscaler_sdk_python-2.0.0/zscaler/zdx/inventory.py +0 -175
  166. zscaler_sdk_python-2.0.0/zscaler/zdx/legacy.py +0 -382
  167. zscaler_sdk_python-2.0.0/zscaler/zdx/models/activeapplications.py +0 -61
  168. zscaler_sdk_python-2.0.0/zscaler/zdx/models/administration.py +0 -48
  169. zscaler_sdk_python-2.0.0/zscaler/zdx/models/alerts.py +0 -132
  170. zscaler_sdk_python-2.0.0/zscaler/zdx/models/application_users.py +0 -92
  171. zscaler_sdk_python-2.0.0/zscaler/zdx/models/applications.py +0 -165
  172. zscaler_sdk_python-2.0.0/zscaler/zdx/models/call_quality_metrics.py +0 -58
  173. zscaler_sdk_python-2.0.0/zscaler/zdx/models/common.py +0 -167
  174. zscaler_sdk_python-2.0.0/zscaler/zdx/models/devices.py +0 -437
  175. zscaler_sdk_python-2.0.0/zscaler/zdx/models/software_inventory.py +0 -121
  176. zscaler_sdk_python-2.0.0/zscaler/zdx/models/troubleshooting.py +0 -370
  177. zscaler_sdk_python-2.0.0/zscaler/zdx/models/users.py +0 -98
  178. zscaler_sdk_python-2.0.0/zscaler/zdx/troubleshooting.py +0 -681
  179. zscaler_sdk_python-2.0.0/zscaler/zdx/users.py +0 -167
  180. zscaler_sdk_python-2.0.0/zscaler/zdx/zdx_service.py +0 -86
  181. zscaler_sdk_python-2.0.0/zscaler/zia/__init__.py +0 -0
  182. zscaler_sdk_python-2.0.0/zscaler/zia/activate.py +0 -106
  183. zscaler_sdk_python-2.0.0/zscaler/zia/admin_roles.py +0 -244
  184. zscaler_sdk_python-2.0.0/zscaler/zia/admin_users.py +0 -422
  185. zscaler_sdk_python-2.0.0/zscaler/zia/advanced_settings.py +0 -210
  186. zscaler_sdk_python-2.0.0/zscaler/zia/apptotal.py +0 -221
  187. zscaler_sdk_python-2.0.0/zscaler/zia/atp_policy.py +0 -401
  188. zscaler_sdk_python-2.0.0/zscaler/zia/audit_logs.py +0 -160
  189. zscaler_sdk_python-2.0.0/zscaler/zia/authentication_settings.py +0 -309
  190. zscaler_sdk_python-2.0.0/zscaler/zia/cloud_applications.py +0 -182
  191. zscaler_sdk_python-2.0.0/zscaler/zia/cloud_apps.py +0 -526
  192. zscaler_sdk_python-2.0.0/zscaler/zia/cloud_browser_isolation.py +0 -87
  193. zscaler_sdk_python-2.0.0/zscaler/zia/cloud_firewall.py +0 -2255
  194. zscaler_sdk_python-2.0.0/zscaler/zia/cloud_firewall_dns.py +0 -382
  195. zscaler_sdk_python-2.0.0/zscaler/zia/cloud_firewall_ips.py +0 -375
  196. zscaler_sdk_python-2.0.0/zscaler/zia/cloud_firewall_rules.py +0 -346
  197. zscaler_sdk_python-2.0.0/zscaler/zia/cloud_nss.py +0 -688
  198. zscaler_sdk_python-2.0.0/zscaler/zia/cloudappcontrol.py +0 -774
  199. zscaler_sdk_python-2.0.0/zscaler/zia/device_management.py +0 -201
  200. zscaler_sdk_python-2.0.0/zscaler/zia/dlp_dictionary.py +0 -524
  201. zscaler_sdk_python-2.0.0/zscaler/zia/dlp_engine.py +0 -404
  202. zscaler_sdk_python-2.0.0/zscaler/zia/dlp_resources.py +0 -635
  203. zscaler_sdk_python-2.0.0/zscaler/zia/dlp_templates.py +0 -301
  204. zscaler_sdk_python-2.0.0/zscaler/zia/dlp_web_rules.py +0 -439
  205. zscaler_sdk_python-2.0.0/zscaler/zia/end_user_notification.py +0 -164
  206. zscaler_sdk_python-2.0.0/zscaler/zia/file_type_control_rule.py +0 -361
  207. zscaler_sdk_python-2.0.0/zscaler/zia/forwarding_control.py +0 -473
  208. zscaler_sdk_python-2.0.0/zscaler/zia/gre_tunnel.py +0 -731
  209. zscaler_sdk_python-2.0.0/zscaler/zia/intermediate_certificates.py +0 -684
  210. zscaler_sdk_python-2.0.0/zscaler/zia/iot_report.py +0 -205
  211. zscaler_sdk_python-2.0.0/zscaler/zia/ipv6_config.py +0 -190
  212. zscaler_sdk_python-2.0.0/zscaler/zia/legacy.py +0 -796
  213. zscaler_sdk_python-2.0.0/zscaler/zia/locations.py +0 -1054
  214. zscaler_sdk_python-2.0.0/zscaler/zia/malware_protection_policy.py +0 -506
  215. zscaler_sdk_python-2.0.0/zscaler/zia/models/__init__.py +0 -0
  216. zscaler_sdk_python-2.0.0/zscaler/zia/models/activation.py +0 -46
  217. zscaler_sdk_python-2.0.0/zscaler/zia/models/admin_roles.py +0 -93
  218. zscaler_sdk_python-2.0.0/zscaler/zia/models/admin_users.py +0 -327
  219. zscaler_sdk_python-2.0.0/zscaler/zia/models/advanced_settings.py +0 -320
  220. zscaler_sdk_python-2.0.0/zscaler/zia/models/advanced_threat_settings.py +0 -217
  221. zscaler_sdk_python-2.0.0/zscaler/zia/models/apptotal.py +0 -257
  222. zscaler_sdk_python-2.0.0/zscaler/zia/models/authentication_settings.py +0 -91
  223. zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_app_policy.py +0 -52
  224. zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_browser_isolation.py +0 -51
  225. zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_firewall_app_services.py +0 -48
  226. zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_firewall_destination_groups.py +0 -64
  227. zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_firewall_dns_rules.py +0 -251
  228. zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_firewall_ips_rules.py +0 -212
  229. zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_firewall_nw_application_groups.py +0 -54
  230. zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_firewall_nw_applications.py +0 -51
  231. zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_firewall_nw_service.py +0 -89
  232. zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_firewall_nw_service_groups.py +0 -52
  233. zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_firewall_rules.py +0 -237
  234. zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_firewall_source_groups.py +0 -59
  235. zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_firewall_time_windows.py +0 -55
  236. zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_nss.py +0 -611
  237. zscaler_sdk_python-2.0.0/zscaler/zia/models/cloudappcontrol.py +0 -256
  238. zscaler_sdk_python-2.0.0/zscaler/zia/models/common.py +0 -175
  239. zscaler_sdk_python-2.0.0/zscaler/zia/models/device_groups.py +0 -57
  240. zscaler_sdk_python-2.0.0/zscaler/zia/models/devices.py +0 -65
  241. zscaler_sdk_python-2.0.0/zscaler/zia/models/dlp_dictionary.py +0 -244
  242. zscaler_sdk_python-2.0.0/zscaler/zia/models/dlp_engine.py +0 -90
  243. zscaler_sdk_python-2.0.0/zscaler/zia/models/dlp_resources.py +0 -189
  244. zscaler_sdk_python-2.0.0/zscaler/zia/models/dlp_templates.py +0 -66
  245. zscaler_sdk_python-2.0.0/zscaler/zia/models/dlp_web_rules.py +0 -232
  246. zscaler_sdk_python-2.0.0/zscaler/zia/models/endusernotification.py +0 -155
  247. zscaler_sdk_python-2.0.0/zscaler/zia/models/filetyperules.py +0 -178
  248. zscaler_sdk_python-2.0.0/zscaler/zia/models/forwarding_control_policy.py +0 -243
  249. zscaler_sdk_python-2.0.0/zscaler/zia/models/gre_recommended_list.py +0 -73
  250. zscaler_sdk_python-2.0.0/zscaler/zia/models/gre_tunnel_info.py +0 -69
  251. zscaler_sdk_python-2.0.0/zscaler/zia/models/gre_tunnels.py +0 -135
  252. zscaler_sdk_python-2.0.0/zscaler/zia/models/gre_vips.py +0 -166
  253. zscaler_sdk_python-2.0.0/zscaler/zia/models/intermediate_certificates.py +0 -157
  254. zscaler_sdk_python-2.0.0/zscaler/zia/models/iotreport.py +0 -105
  255. zscaler_sdk_python-2.0.0/zscaler/zia/models/ipv6_config.py +0 -106
  256. zscaler_sdk_python-2.0.0/zscaler/zia/models/location_group.py +0 -81
  257. zscaler_sdk_python-2.0.0/zscaler/zia/models/location_management.py +0 -306
  258. zscaler_sdk_python-2.0.0/zscaler/zia/models/malware_protection_settings.py +0 -101
  259. zscaler_sdk_python-2.0.0/zscaler/zia/models/organization_information.py +0 -452
  260. zscaler_sdk_python-2.0.0/zscaler/zia/models/pac_files.py +0 -98
  261. zscaler_sdk_python-2.0.0/zscaler/zia/models/proxy_gatways.py +0 -72
  262. zscaler_sdk_python-2.0.0/zscaler/zia/models/remoteassistance.py +0 -58
  263. zscaler_sdk_python-2.0.0/zscaler/zia/models/rule_labels.py +0 -69
  264. zscaler_sdk_python-2.0.0/zscaler/zia/models/sandboxrules.py +0 -162
  265. zscaler_sdk_python-2.0.0/zscaler/zia/models/security_policy_settings.py +0 -49
  266. zscaler_sdk_python-2.0.0/zscaler/zia/models/shadow_it_report.py +0 -298
  267. zscaler_sdk_python-2.0.0/zscaler/zia/models/ssl_inspection_rules.py +0 -493
  268. zscaler_sdk_python-2.0.0/zscaler/zia/models/subclouds.py +0 -286
  269. zscaler_sdk_python-2.0.0/zscaler/zia/models/system_audit.py +0 -284
  270. zscaler_sdk_python-2.0.0/zscaler/zia/models/traffic_extranet.py +0 -165
  271. zscaler_sdk_python-2.0.0/zscaler/zia/models/traffic_static_ip.py +0 -88
  272. zscaler_sdk_python-2.0.0/zscaler/zia/models/traffic_vpn_credentials.py +0 -88
  273. zscaler_sdk_python-2.0.0/zscaler/zia/models/url_filter_cloud_app_settings.py +0 -114
  274. zscaler_sdk_python-2.0.0/zscaler/zia/models/url_filtering_rules.py +0 -199
  275. zscaler_sdk_python-2.0.0/zscaler/zia/models/urlcategory.py +0 -181
  276. zscaler_sdk_python-2.0.0/zscaler/zia/models/user_management.py +0 -181
  277. zscaler_sdk_python-2.0.0/zscaler/zia/models/workload_groups.py +0 -63
  278. zscaler_sdk_python-2.0.0/zscaler/zia/models/zpa_gateway.py +0 -89
  279. zscaler_sdk_python-2.0.0/zscaler/zia/organization_information.py +0 -172
  280. zscaler_sdk_python-2.0.0/zscaler/zia/pac_files.py +0 -507
  281. zscaler_sdk_python-2.0.0/zscaler/zia/policy_export.py +0 -92
  282. zscaler_sdk_python-2.0.0/zscaler/zia/remote_assistance.py +0 -144
  283. zscaler_sdk_python-2.0.0/zscaler/zia/rule_labels.py +0 -236
  284. zscaler_sdk_python-2.0.0/zscaler/zia/sandbox.py +0 -346
  285. zscaler_sdk_python-2.0.0/zscaler/zia/sandbox_rules.py +0 -333
  286. zscaler_sdk_python-2.0.0/zscaler/zia/security_policy_settings.py +0 -260
  287. zscaler_sdk_python-2.0.0/zscaler/zia/ssl_inspection_rules.py +0 -355
  288. zscaler_sdk_python-2.0.0/zscaler/zia/sub_clouds.py +0 -173
  289. zscaler_sdk_python-2.0.0/zscaler/zia/system_audit.py +0 -84
  290. zscaler_sdk_python-2.0.0/zscaler/zia/traffic_extranet.py +0 -243
  291. zscaler_sdk_python-2.0.0/zscaler/zia/traffic_static_ip.py +0 -350
  292. zscaler_sdk_python-2.0.0/zscaler/zia/traffic_vpn_credentials.py +0 -368
  293. zscaler_sdk_python-2.0.0/zscaler/zia/url_categories.py +0 -714
  294. zscaler_sdk_python-2.0.0/zscaler/zia/url_filtering.py +0 -547
  295. zscaler_sdk_python-2.0.0/zscaler/zia/user_management.py +0 -1010
  296. zscaler_sdk_python-2.0.0/zscaler/zia/workload_groups.py +0 -91
  297. zscaler_sdk_python-2.0.0/zscaler/zia/zia_service.py +0 -479
  298. zscaler_sdk_python-2.0.0/zscaler/zia/zpa_gateway.py +0 -351
  299. zscaler_sdk_python-2.0.0/zscaler/zpa/__init__.py +0 -0
  300. zscaler_sdk_python-2.0.0/zscaler/zpa/app_connector_groups.py +0 -364
  301. zscaler_sdk_python-2.0.0/zscaler/zpa/app_connector_schedule.py +0 -223
  302. zscaler_sdk_python-2.0.0/zscaler/zpa/app_connectors.py +0 -281
  303. zscaler_sdk_python-2.0.0/zscaler/zpa/app_protection.py +0 -1112
  304. zscaler_sdk_python-2.0.0/zscaler/zpa/app_segment_by_type.py +0 -160
  305. zscaler_sdk_python-2.0.0/zscaler/zpa/app_segments_inspection.py +0 -490
  306. zscaler_sdk_python-2.0.0/zscaler/zpa/app_segments_pra.py +0 -468
  307. zscaler_sdk_python-2.0.0/zscaler/zpa/application_segment.py +0 -627
  308. zscaler_sdk_python-2.0.0/zscaler/zpa/authdomains.py +0 -72
  309. zscaler_sdk_python-2.0.0/zscaler/zpa/cbi_banner.py +0 -256
  310. zscaler_sdk_python-2.0.0/zscaler/zpa/cbi_certificate.py +0 -249
  311. zscaler_sdk_python-2.0.0/zscaler/zpa/cbi_profile.py +0 -383
  312. zscaler_sdk_python-2.0.0/zscaler/zpa/cbi_region.py +0 -69
  313. zscaler_sdk_python-2.0.0/zscaler/zpa/cbi_zpa_profile.py +0 -121
  314. zscaler_sdk_python-2.0.0/zscaler/zpa/certificates.py +0 -352
  315. zscaler_sdk_python-2.0.0/zscaler/zpa/cloud_connector_groups.py +0 -128
  316. zscaler_sdk_python-2.0.0/zscaler/zpa/customer_version_profile.py +0 -91
  317. zscaler_sdk_python-2.0.0/zscaler/zpa/emergency_access.py +0 -350
  318. zscaler_sdk_python-2.0.0/zscaler/zpa/enrollment_certificates.py +0 -141
  319. zscaler_sdk_python-2.0.0/zscaler/zpa/idp.py +0 -142
  320. zscaler_sdk_python-2.0.0/zscaler/zpa/legacy.py +0 -624
  321. zscaler_sdk_python-2.0.0/zscaler/zpa/lss.py +0 -577
  322. zscaler_sdk_python-2.0.0/zscaler/zpa/machine_groups.py +0 -137
  323. zscaler_sdk_python-2.0.0/zscaler/zpa/microtenants.py +0 -402
  324. zscaler_sdk_python-2.0.0/zscaler/zpa/models/app_connector_groups.py +0 -273
  325. zscaler_sdk_python-2.0.0/zscaler/zpa/models/app_connector_schedule.py +0 -55
  326. zscaler_sdk_python-2.0.0/zscaler/zpa/models/app_connectors.py +0 -176
  327. zscaler_sdk_python-2.0.0/zscaler/zpa/models/app_protection.py +0 -317
  328. zscaler_sdk_python-2.0.0/zscaler/zpa/models/app_protection_predefined_controls.py +0 -182
  329. zscaler_sdk_python-2.0.0/zscaler/zpa/models/application_segment.py +0 -587
  330. zscaler_sdk_python-2.0.0/zscaler/zpa/models/application_segment_inspection.py +0 -173
  331. zscaler_sdk_python-2.0.0/zscaler/zpa/models/application_segment_pra.py +0 -211
  332. zscaler_sdk_python-2.0.0/zscaler/zpa/models/application_servers.py +0 -62
  333. zscaler_sdk_python-2.0.0/zscaler/zpa/models/cbi_banner.py +0 -60
  334. zscaler_sdk_python-2.0.0/zscaler/zpa/models/cbi_certificate.py +0 -48
  335. zscaler_sdk_python-2.0.0/zscaler/zpa/models/cbi_profile.py +0 -216
  336. zscaler_sdk_python-2.0.0/zscaler/zpa/models/cbi_region.py +0 -45
  337. zscaler_sdk_python-2.0.0/zscaler/zpa/models/cbi_zpa_profile.py +0 -119
  338. zscaler_sdk_python-2.0.0/zscaler/zpa/models/certificates.py +0 -93
  339. zscaler_sdk_python-2.0.0/zscaler/zpa/models/cloud_connector_groups.py +0 -62
  340. zscaler_sdk_python-2.0.0/zscaler/zpa/models/common.py +0 -363
  341. zscaler_sdk_python-2.0.0/zscaler/zpa/models/customer_version_profile.py +0 -104
  342. zscaler_sdk_python-2.0.0/zscaler/zpa/models/emergency_access.py +0 -58
  343. zscaler_sdk_python-2.0.0/zscaler/zpa/models/enrollment_certificates.py +0 -110
  344. zscaler_sdk_python-2.0.0/zscaler/zpa/models/idp.py +0 -223
  345. zscaler_sdk_python-2.0.0/zscaler/zpa/models/lss.py +0 -165
  346. zscaler_sdk_python-2.0.0/zscaler/zpa/models/machine_groups.py +0 -69
  347. zscaler_sdk_python-2.0.0/zscaler/zpa/models/microtenants.py +0 -235
  348. zscaler_sdk_python-2.0.0/zscaler/zpa/models/policyset_controller_v1.py +0 -287
  349. zscaler_sdk_python-2.0.0/zscaler/zpa/models/policyset_controller_v2.py +0 -246
  350. zscaler_sdk_python-2.0.0/zscaler/zpa/models/posture_profiles.py +0 -106
  351. zscaler_sdk_python-2.0.0/zscaler/zpa/models/pra_approval.py +0 -134
  352. zscaler_sdk_python-2.0.0/zscaler/zpa/models/pra_console.py +0 -156
  353. zscaler_sdk_python-2.0.0/zscaler/zpa/models/pra_cred_pool_controller.py +0 -76
  354. zscaler_sdk_python-2.0.0/zscaler/zpa/models/pra_credential.py +0 -67
  355. zscaler_sdk_python-2.0.0/zscaler/zpa/models/pra_portal.py +0 -102
  356. zscaler_sdk_python-2.0.0/zscaler/zpa/models/provisioning_keys.py +0 -77
  357. zscaler_sdk_python-2.0.0/zscaler/zpa/models/saml_attributes.py +0 -64
  358. zscaler_sdk_python-2.0.0/zscaler/zpa/models/scim_attributes.py +0 -79
  359. zscaler_sdk_python-2.0.0/zscaler/zpa/models/scim_groups.py +0 -58
  360. zscaler_sdk_python-2.0.0/zscaler/zpa/models/segment_group.py +0 -75
  361. zscaler_sdk_python-2.0.0/zscaler/zpa/models/server_group.py +0 -94
  362. zscaler_sdk_python-2.0.0/zscaler/zpa/models/service_edge_groups.py +0 -148
  363. zscaler_sdk_python-2.0.0/zscaler/zpa/models/service_edge_schedule.py +0 -55
  364. zscaler_sdk_python-2.0.0/zscaler/zpa/models/service_edges.py +0 -160
  365. zscaler_sdk_python-2.0.0/zscaler/zpa/models/trusted_network.py +0 -66
  366. zscaler_sdk_python-2.0.0/zscaler/zpa/policies.py +0 -3308
  367. zscaler_sdk_python-2.0.0/zscaler/zpa/posture_profiles.py +0 -142
  368. zscaler_sdk_python-2.0.0/zscaler/zpa/pra_approval.py +0 -391
  369. zscaler_sdk_python-2.0.0/zscaler/zpa/pra_console.py +0 -437
  370. zscaler_sdk_python-2.0.0/zscaler/zpa/pra_credential.py +0 -384
  371. zscaler_sdk_python-2.0.0/zscaler/zpa/pra_credential_pool.py +0 -354
  372. zscaler_sdk_python-2.0.0/zscaler/zpa/pra_portal.py +0 -289
  373. zscaler_sdk_python-2.0.0/zscaler/zpa/provisioning.py +0 -385
  374. zscaler_sdk_python-2.0.0/zscaler/zpa/saml_attributes.py +0 -179
  375. zscaler_sdk_python-2.0.0/zscaler/zpa/scim_attributes.py +0 -189
  376. zscaler_sdk_python-2.0.0/zscaler/zpa/scim_groups.py +0 -150
  377. zscaler_sdk_python-2.0.0/zscaler/zpa/segment_groups.py +0 -364
  378. zscaler_sdk_python-2.0.0/zscaler/zpa/server_groups.py +0 -344
  379. zscaler_sdk_python-2.0.0/zscaler/zpa/servers.py +0 -287
  380. zscaler_sdk_python-2.0.0/zscaler/zpa/service_edge_group.py +0 -355
  381. zscaler_sdk_python-2.0.0/zscaler/zpa/service_edge_schedule.py +0 -223
  382. zscaler_sdk_python-2.0.0/zscaler/zpa/service_edges.py +0 -265
  383. zscaler_sdk_python-2.0.0/zscaler/zpa/trusted_networks.py +0 -146
  384. zscaler_sdk_python-2.0.0/zscaler/zpa/zpa_service.py +0 -378
  385. zscaler_sdk_python-2.0.0/zscaler/ztw/__init__.py +0 -0
  386. zscaler_sdk_python-2.0.0/zscaler/ztw/account_details.py +0 -276
  387. zscaler_sdk_python-2.0.0/zscaler/ztw/activation.py +0 -115
  388. zscaler_sdk_python-2.0.0/zscaler/ztw/admin_roles.py +0 -326
  389. zscaler_sdk_python-2.0.0/zscaler/ztw/admin_users.py +0 -400
  390. zscaler_sdk_python-2.0.0/zscaler/ztw/api_keys.py +0 -131
  391. zscaler_sdk_python-2.0.0/zscaler/ztw/ec_groups.py +0 -319
  392. zscaler_sdk_python-2.0.0/zscaler/ztw/forwarding_gateways.py +0 -235
  393. zscaler_sdk_python-2.0.0/zscaler/ztw/forwarding_rules.py +0 -368
  394. zscaler_sdk_python-2.0.0/zscaler/ztw/ip_destination_groups.py +0 -319
  395. zscaler_sdk_python-2.0.0/zscaler/ztw/ip_groups.py +0 -259
  396. zscaler_sdk_python-2.0.0/zscaler/ztw/ip_source_groups.py +0 -259
  397. zscaler_sdk_python-2.0.0/zscaler/ztw/legacy.py +0 -461
  398. zscaler_sdk_python-2.0.0/zscaler/ztw/location_management.py +0 -242
  399. zscaler_sdk_python-2.0.0/zscaler/ztw/location_template.py +0 -385
  400. zscaler_sdk_python-2.0.0/zscaler/ztw/models/activation.py +0 -57
  401. zscaler_sdk_python-2.0.0/zscaler/ztw/models/admin_roles.py +0 -97
  402. zscaler_sdk_python-2.0.0/zscaler/ztw/models/admin_users.py +0 -150
  403. zscaler_sdk_python-2.0.0/zscaler/ztw/models/api_keys.py +0 -91
  404. zscaler_sdk_python-2.0.0/zscaler/ztw/models/common.py +0 -88
  405. zscaler_sdk_python-2.0.0/zscaler/ztw/models/ec_group_vm.py +0 -121
  406. zscaler_sdk_python-2.0.0/zscaler/ztw/models/ecgroup.py +0 -457
  407. zscaler_sdk_python-2.0.0/zscaler/ztw/models/forwarding_gateways.py +0 -111
  408. zscaler_sdk_python-2.0.0/zscaler/ztw/models/forwarding_rules.py +0 -347
  409. zscaler_sdk_python-2.0.0/zscaler/ztw/models/ip_destination_groups.py +0 -72
  410. zscaler_sdk_python-2.0.0/zscaler/ztw/models/ip_groups.py +0 -58
  411. zscaler_sdk_python-2.0.0/zscaler/ztw/models/ip_source_groups.py +0 -58
  412. zscaler_sdk_python-2.0.0/zscaler/ztw/models/location_management.py +0 -255
  413. zscaler_sdk_python-2.0.0/zscaler/ztw/models/location_templates.py +0 -173
  414. zscaler_sdk_python-2.0.0/zscaler/ztw/models/nw_service.py +0 -95
  415. zscaler_sdk_python-2.0.0/zscaler/ztw/models/nw_service_groups.py +0 -56
  416. zscaler_sdk_python-2.0.0/zscaler/ztw/models/provisioning_url.py +0 -224
  417. zscaler_sdk_python-2.0.0/zscaler/ztw/models/traffic_vpn_credentials.py +0 -90
  418. zscaler_sdk_python-2.0.0/zscaler/ztw/models/zpa_resources.py +0 -61
  419. zscaler_sdk_python-2.0.0/zscaler/ztw/nw_service.py +0 -299
  420. zscaler_sdk_python-2.0.0/zscaler/ztw/nw_service_groups.py +0 -99
  421. zscaler_sdk_python-2.0.0/zscaler/ztw/provisioning_url.py +0 -126
  422. zscaler_sdk_python-2.0.0/zscaler/ztw/ztw_service.py +0 -180
  423. zscaler_sdk_python-2.0.0/zscaler/zwa/__init__.py +0 -0
  424. zscaler_sdk_python-2.0.0/zscaler/zwa/audit_logs.py +0 -132
  425. zscaler_sdk_python-2.0.0/zscaler/zwa/dlp_incidents.py +0 -656
  426. zscaler_sdk_python-2.0.0/zscaler/zwa/legacy.py +0 -268
  427. zscaler_sdk_python-2.0.0/zscaler/zwa/models/audit_logs.py +0 -135
  428. zscaler_sdk_python-2.0.0/zscaler/zwa/models/change_history.py +0 -61
  429. zscaler_sdk_python-2.0.0/zscaler/zwa/models/common.py +0 -712
  430. zscaler_sdk_python-2.0.0/zscaler/zwa/models/generated_tickets.py +0 -152
  431. zscaler_sdk_python-2.0.0/zscaler/zwa/models/incident_details.py +0 -203
  432. zscaler_sdk_python-2.0.0/zscaler/zwa/models/incident_evidence.py +0 -57
  433. zscaler_sdk_python-2.0.0/zscaler/zwa/models/incident_group_search.py +0 -59
  434. zscaler_sdk_python-2.0.0/zscaler/zwa/models/incident_search.py +0 -93
  435. zscaler_sdk_python-2.0.0/zscaler/zwa/models/incident_trigger.py +0 -45
  436. {zscaler_sdk_python-2.0.0 → zscaler_sdk_python-2.0.0b1}/LICENSE.md +0 -0
  437. /zscaler_sdk_python-2.0.0/zscaler/cache/__init__.py → /zscaler_sdk_python-2.0.0b1/zssdk/py.typed +0 -0
@@ -0,0 +1,933 @@
1
+ Metadata-Version: 2.4
2
+ Name: zscaler-sdk-python
3
+ Version: 2.0.0b1
4
+ Summary: Zscaler SDK for Python
5
+ Author-email: "Zscaler Inc." <devrel@zscaler.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/zscaler/zscaler-sdk-python
8
+ Project-URL: Repository, https://github.com/zscaler/zscaler-sdk-python
9
+ Project-URL: Documentation, http://automation.zsapidocs.net/docs/
10
+ Project-URL: Bug Tracker, https://github.com/zscaler/zscaler-sdk-python/issues
11
+ Keywords: zscaler,sdk,zpa,zia,zdx,zcc,ztw,zid,zidentity
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Topic :: Security
19
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
+ Requires-Python: >=3.10
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE.md
23
+ Requires-Dist: cryptography>=46.0.0
24
+ Requires-Dist: httpx<2.0.0,>=0.28.0
25
+ Requires-Dist: jmespath>=1.0.0
26
+ Requires-Dist: PyJWT<3.0.0,>=2.8.0
27
+ Provides-Extra: dev
28
+ Requires-Dist: black==25.12.0; extra == "dev"
29
+ Requires-Dist: faker>=30.0.0; extra == "dev"
30
+ Requires-Dist: flake8>=7.0.0; extra == "dev"
31
+ Requires-Dist: isort==7.0.0; extra == "dev"
32
+ Requires-Dist: pylint==4.0.4; extra == "dev"
33
+ Requires-Dist: pytest==9.0.1; extra == "dev"
34
+ Requires-Dist: pytest-mock>=3.12.0; extra == "dev"
35
+ Requires-Dist: pytest-httpserver>=1.0.0; extra == "dev"
36
+ Requires-Dist: build>=1.0.0; extra == "dev"
37
+ Requires-Dist: twine>=5.0.0; extra == "dev"
38
+ Requires-Dist: anyio==4.12.0; extra == "dev"
39
+ Requires-Dist: autopep8==2.3.2; extra == "dev"
40
+ Requires-Dist: tomlkit==0.13.3; extra == "dev"
41
+ Requires-Dist: uv==0.9.21; extra == "dev"
42
+ Dynamic: license-file
43
+
44
+ # Official Zscaler OneAPI SDK for Python
45
+
46
+ [![PyPI Version](https://img.shields.io/pypi/v/zscaler-sdk-python.svg)](https://pypi.org/project/zscaler-sdk-python)
47
+ [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/zscaler-sdk-python.svg)](https://pypi.org/project/zscaler-sdk-python)
48
+ [![License](https://img.shields.io/badge/license-ISC-blue.svg)](LICENSE.md)
49
+ [![PyPI - Downloads](https://img.shields.io/pypi/dw/zscaler-sdk-python)](https://pypistats.org/packages/zscaler-sdk-python)
50
+ [![Documentation Status](https://img.shields.io/badge/docs-online-success)](http://automation.zsapidocs.net/docs/)
51
+ [![Zscaler Community](https://img.shields.io/badge/zscaler-community-blue)](https://community.zscaler.com/)
52
+
53
+ ---
54
+
55
+ ## Table of Contents
56
+
57
+ - [Overview](#overview)
58
+ - [Why This SDK](#why-this-sdk)
59
+ - [Prerequisites](#prerequisites)
60
+ - [Installation](#installation)
61
+ - [Building the SDK](#building-the-sdk)
62
+ - [Getting Started](#getting-started)
63
+ - [Authentication](#authentication)
64
+ - [Basic Usage](#basic-usage)
65
+ - [Configuration](#configuration)
66
+ - [Configuration File](#configuration-file)
67
+ - [Environment Variables](#environment-variables)
68
+ - [Constructor Parameters](#constructor-parameters)
69
+ - [Configuration Precedence](#configuration-precedence)
70
+ - [API Layers](#api-layers)
71
+ - [Resource Layer (Recommended)](#resource-layer-recommended)
72
+ - [Service Client Layer](#service-client-layer)
73
+ - [Supported Products](#supported-products)
74
+ - [ZPA: customer_id Requirement](#zpa-customer_id-requirement)
75
+ - [ZIA and ZTW Context Manager](#zia-and-ztw-context-manager)
76
+ - [Collections and Pagination](#collections-and-pagination)
77
+ - [Error Handling](#error-handling)
78
+ - [Rate Limiting and Retry Mechanism](#rate-limiting-and-retry-mechanism)
79
+ - [Logging](#logging)
80
+ - [Auto-completion and IntelliSense](#auto-completion-and-intellisense)
81
+ - [Examples](#examples)
82
+ - [Migrating from zscaler-sdk-python](#migrating-from-zscaler-sdk-python)
83
+ - [Contributing](#contributing)
84
+ - [Need Help?](#need-help)
85
+
86
+ ---
87
+
88
+ ## Overview
89
+
90
+ The Zscaler OneAPI SDK for Python (`zscaler-sdk-python`) provides a convenient and consistent interface for interacting with Zscaler product APIs through the [OneAPI](https://help.zscaler.com/oneapi/understanding-oneapi) framework.
91
+
92
+ This SDK is designed exclusively for OneAPI. It uses OAuth2 authentication via [Zscaler Identity (Zidentity)](https://help.zscaler.com/zidentity/what-zidentity) and provides a high-level `Session` object that manages credentials, configuration, and API calls.
93
+
94
+ This SDK can be used in your server-side code to interact with the Zscaler API platform across multiple products such as:
95
+
96
+ - [ZPA API](https://automate.zscaler.com/docs/docs/api-reference-and-guides/api-reference/zpa)
97
+ - [ZIA API](https://automate.zscaler.com/docs/docs/api-reference-and-guides/api-reference/zia)
98
+ - [ZDX API](https://automate.zscaler.com/docs/docs/api-reference-and-guides/api-reference/zdx)
99
+ - [ZCC API](https://automate.zscaler.com/docs/docs/api-reference-and-guides/api-reference/zcc)
100
+ - [ZIdentity](https://automate.zscaler.com/docs/docs/api-reference-and-guides/api-reference/zid)
101
+ - [ZTW API](https://automate.zscaler.com/docs/docs/api-reference-and-guides/api-reference/zcloudconnector)
102
+
103
+ > **Note:** This SDK (`zscaler-sdk-python`) is the next-generation replacement for the previous [`zscaler-sdk-python`](https://github.com/zscaler/zscaler-sdk-python) package. See [Why This SDK](#why-this-sdk) and [Migrating from zscaler-sdk-python](#migrating-from-zscaler-sdk-python) below.
104
+
105
+ ### Key Features
106
+
107
+ - **True resource objects with dot notation** — Work with resources as Python objects (`user.name`, `cred.fqdn`), not raw dictionaries (`user["name"]`). Attribute access, assignment, and IDE auto-completion work out of the box.
108
+ - **Active Record pattern** — Create, read, update, and delete resources with natural method calls: `cred.create()`, `cred.load()`, `cred.update()`, `cred.delete()`. No need to call separate service methods and pass IDs around.
109
+ - **Non-standard operations as first-class methods** — Operations beyond CRUDL (e.g., `activate()`, `bulk_delete_assistant()`, `export_application()`, `validate_wild_card_domain_name()`) are dynamically generated from API metadata and exposed as snake_case methods on the same resource instances — no drop-down to a low-level client required.
110
+ - **Iterator-based collections with chaining** — Paginate effortlessly with `.all()`, apply server-side filters with `.filter()`, cap results with `.limit()`, tune performance with `.page_size()`, and apply client-side JMESPath queries with `.search()` — all chainable in a single expression.
111
+ - **Python exceptions, not error tuples** — Errors raise typed exceptions (`BadRequestException`, `NotFoundException`) with full context. Use standard `try`/`except` instead of unpacking `(result, response, error)` tuples on every call.
112
+ - **Automatic `snake_case` / `camelCase` conversion** — Write idiomatic Python everywhere. The SDK transparently converts to API `camelCase` on the wire and back.
113
+ - **One session, all products** — A single `Session` with unified OAuth2 authentication gives you `session.zia`, `session.zpa`, `session.zcc`, `session.zid`, `session.zdx`, and `session.ztw`. No per-product client setup or separate credentials.
114
+ - **IDE auto-completion and type checking** — Ships with PEP 484 `.pyi` type stubs. VS Code, PyCharm, and other editors provide auto-complete, parameter hints, and docstrings for every resource and method.
115
+ - **Transparent retry and rate-limit handling** — Built-in exponential backoff with `Retry-After` header support. Rate limits and transient errors are handled automatically — no retry logic needed in your code.
116
+ - **Metadata-driven architecture** — API operations, shapes, pagination, and error mappings are defined in JSON metadata generated from TypeSpec. New endpoints are added via JSON, not Python code.
117
+ - **Context managers for ZIA/ZTW activation** — `with session.zia as zia:` automatically activates staged configuration changes on exit. No manual activation calls required.
118
+
119
+ ### SDK Design and Data Model
120
+
121
+ This SDK uses a resource-oriented design with the following characteristics:
122
+
123
+ - **Resource objects** — Resources (e.g., `VpnCredential`, `UserProfile`) are Python objects with attribute access (dot notation), e.g., `cred.fqdn`, `user.login_name`.
124
+ - **Snake_case** — Property names use `snake_case` in Python while the SDK maps to/from API `camelCase` automatically.
125
+ - **Native types** — Data is represented as native Python types; responses are JSON-serializable.
126
+
127
+ ---
128
+
129
+ ## Why This SDK
130
+
131
+ If you are currently using [`zscaler-sdk-python`](https://github.com/zscaler/zscaler-sdk-python), here is why you should switch to `zscaler-sdk-python`:
132
+
133
+ | Capability | `zscaler-sdk-python` (previous) | `zscaler-sdk-python` (this SDK) |
134
+ |---|---|---|
135
+ | **Data access** | Raw `dict` — `user["name"]` | Resource objects — `user.name` |
136
+ | **CRUD pattern** | Service methods returning `(result, resp, error)` tuples | Active Record — `resource.create()`, `.load()`, `.update()`, `.delete()` |
137
+ | **Error handling** | Go-style tuples: `result, resp, err = ...` | Python exceptions: `try` / `except NotFoundException` |
138
+ | **Pagination** | Manual loop with `resp.has_next()` / `resp.next()` | Iterator-based: `for item in resources.all().limit(100)` |
139
+ | **Filtering** | Manual query params dict | Chainable `.filter()` + `.search()` (JMESPath) |
140
+ | **Case conversion** | Caller manages `camelCase` ↔ `snake_case` | Automatic — write `snake_case`, API receives `camelCase` |
141
+ | **IDE support** | No type stubs | PEP 484 `.pyi` stubs — auto-completion, param hints, docstrings |
142
+
143
+ ### Side-by-side comparison
144
+
145
+ **Previous SDK — dict access, error tuples, manual pagination:**
146
+
147
+ ```python
148
+ from zscaler import ZscalerClient
149
+
150
+ config = {"clientId": "...", "clientSecret": "...", "vanityDomain": "..."}
151
+
152
+ with ZscalerClient(config) as client:
153
+ # List users — must unpack tuple on every call
154
+ users, resp, err = client.zia.user_management.list_users()
155
+ if err:
156
+ print(f"Error: {err}")
157
+ else:
158
+ for user in users:
159
+ print(user["name"]) # dict access
160
+
161
+ # Manual pagination
162
+ while resp.has_next():
163
+ more_users, resp, err = resp.next()
164
+ if err:
165
+ break
166
+ for user in more_users:
167
+ print(user["name"])
168
+ ```
169
+
170
+ **This SDK — resource objects, exceptions, iterator collections:**
171
+
172
+ ```python
173
+ from zssdk import Session
174
+
175
+ session = Session(vanity_domain="...", client_id="...", client_secret="...")
176
+
177
+ # Iterate all users — pagination is automatic
178
+ for user in session.zia.admin_users.all():
179
+ print(user.name) # attribute access
180
+
181
+ # Chain filters, limits, and search in one expression
182
+ for user in session.zia.admin_users.filter(search="SDWAN").limit(10):
183
+ print(user.name)
184
+
185
+ # Errors are exceptions, not return values
186
+ from zssdk.zsresource.exceptions import NotFoundException
187
+ try:
188
+ role = session.zia.AdminRole(id=99999)
189
+ role.load()
190
+ except NotFoundException:
191
+ print("Role not found")
192
+ ```
193
+
194
+ ---
195
+
196
+ ## Prerequisites
197
+
198
+ - **Python 3.10+**
199
+ - An administrator account for the Zscaler products you wish to manage
200
+ - [API credentials](https://help.zscaler.com/zidentity/about-api-clients) created in the Zscaler Identity Admin UI (Client ID and Client Secret)
201
+
202
+ ---
203
+
204
+ ## Installation
205
+
206
+ Install the SDK from PyPI:
207
+
208
+ ```sh
209
+ pip install zscaler-sdk-python
210
+ ```
211
+
212
+ Or install from source (e.g., for development):
213
+
214
+ ```sh
215
+ pip install -e /path/to/oneapi-sdk/python
216
+ ```
217
+
218
+ ---
219
+
220
+ ## Building the SDK
221
+
222
+ In most cases, you won't need to build the SDK from source. If you want to build it yourself:
223
+
224
+ 1. Clone the repository
225
+ 2. Navigate to the `python` directory
226
+ 3. Run `python -m build` (requires the `build` package: `pip install build`)
227
+ 4. Install the built package: `pip install dist/zssdk_python-*.whl` or `pip install dist/zssdk_python-*.tar.gz`
228
+
229
+ ---
230
+
231
+ ## Getting Started
232
+
233
+ ### Authentication
234
+
235
+ The SDK uses OAuth2 via [Zscaler Identity (Zidentity)](https://help.zscaler.com/zidentity/what-zidentity). You must have an API Client created in the [ZIdentity platform](https://help.zscaler.com/zidentity/about-api-clients).
236
+
237
+ #### OneAPI (API Client Scope)
238
+
239
+ OneAPI resources are automatically created within the ZIdentity Admin UI based on the RBAC roles applicable to APIs within the various products. For example, in ZIA, navigate to **Administration → Role Management** and select **Add API Role**. Once this role has been saved, return to the ZIdentity Admin UI and from the **Integration** menu select **API Resources**. Click the **View** icon to the right of Zscaler APIs and under the ZIA dropdown you will see the newly created role. In the event a newly created role is not seen in the ZIdentity Admin UI, a **Sync Now** button is provided in the API Resources menu which initiates an on-demand sync of newly created roles.
240
+
241
+ **Required parameters:**
242
+
243
+ - **vanity_domain** — Your organization's vanity domain (e.g., `acme`). Use only the vanity part; full domains like `acme.zslogin.net` are not allowed. Refers to the domain used by your organization: `https://<vanity_domain>.zslogin.net/oauth2/v1/token`.
244
+ - **client_id** — Your Zidentity API Client ID
245
+ - **client_secret** — Your API Client secret
246
+ - **cloud** — (Optional) Omit for production. Use only when authenticating to a non-production environment such as `alpha` or `beta` (test-based tenants).
247
+
248
+ > **Caution:** Do not hard-code credentials. Use environment variables or the configuration file instead.
249
+
250
+ ### Basic Usage
251
+
252
+ Create a `Session` and access services as attributes. The SDK dynamically provides service resources when you access them.
253
+
254
+ ```python
255
+ import os
256
+ from zssdk import Session
257
+
258
+ # Create a session using environment variables (omit cloud for production)
259
+ session = Session(
260
+ cloud=os.getenv("ZSCALER_CLOUD"), # Optional: only for alpha/beta
261
+ vanity_domain=os.getenv("ZSCALER_VANITY_DOMAIN"),
262
+ client_id=os.getenv("ZSCALER_CLIENT_ID"),
263
+ client_secret=os.getenv("ZSCALER_CLIENT_SECRET"),
264
+ )
265
+
266
+ # Access ZIA and list VPN credentials
267
+ zia = session.zia
268
+ for cred in zia.vpn_credentials.all().limit(10):
269
+ print(cred.fqdn, cred.id)
270
+
271
+ # Access ZID and list user profiles
272
+ zid = session.zid
273
+ for user in zid.user_profiles.all().limit(5):
274
+ print(user.login_name, user.display_name)
275
+ ```
276
+
277
+ **Using the default session:** You can call `setup_default_session(**kwargs)` once to configure a shared session, then use `get_default_session()` anywhere. The `zssdk.client()` helper returns a low-level client from the default session.
278
+
279
+ ---
280
+
281
+ ## Configuration
282
+
283
+ ### Configuration File
284
+
285
+ Create a configuration file at `~/.zscaler/config`. The file uses INI format with named profiles (you can also use `config.ini` and pass `config_file="/path/to/config.ini"` to `Session`):
286
+
287
+ ```ini
288
+ [default]
289
+ vanity_domain = your_vanity_domain
290
+ client_id = your_client_id
291
+ client_secret = your_client_secret
292
+
293
+ [beta]
294
+ cloud = beta
295
+ vanity_domain = your_vanity_domain
296
+ client_id = your_beta_client_id
297
+ client_secret = your_beta_client_secret
298
+ ```
299
+
300
+ Use a profile by name:
301
+
302
+ ```python
303
+ session = Session(profile_name="beta")
304
+ ```
305
+
306
+ For multi-product setups with different clouds, define separate profiles and pass `profile_name` when creating the session for each product.
307
+
308
+ ### Environment Variables
309
+
310
+ **Credential and cloud settings** (prefix `ZSCALER_`):
311
+
312
+ | Variable | Description |
313
+ |--------------------------|----------------------------------------------------------|
314
+ | `ZSCALER_CLOUD` | Non-production environment only (e.g., `alpha`, `beta`); omit for production |
315
+ | `ZSCALER_VANITY_DOMAIN` | Your organization's vanity domain |
316
+ | `ZSCALER_CLIENT_ID` | OAuth2 Client ID |
317
+ | `ZSCALER_CLIENT_SECRET` | OAuth2 Client Secret |
318
+ | `ZSCALER_PRIVATE_KEY` | Private key string (for JWT Bearer auth) |
319
+ | `ZSCALER_CERT_FILE_PATH` | Path to private key file (for certificate-based auth) |
320
+ | `ZSCALER_PROFILE` | Default profile name (default: `default`) |
321
+
322
+ **SDK-level settings** (prefix `ZSSDK_`), defined in `zssdk.zscore.configprovider`:
323
+
324
+ | Variable | Description |
325
+ |--------------------------|----------------------------------------------------------|
326
+ | `ZSSDK_API_VERSION` | API version (default: `v1`) |
327
+ | `ZSSDK_USE_FIPS_ENDPOINT`| Use FIPS endpoints (`true` / `false`) |
328
+ | `ZSSDK_LOG_ENABLED` | Enable SDK logging (`true` / `false`) |
329
+ | `ZSSDK_LOG_VERBOSE` | Verbose logging (`true` / `false`) |
330
+ | `ZSSDK_LOG_TO_FILE` | Log to file (`true` / `false`) |
331
+ | `ZSSDK_LOG_FILE_PATH` | Log file path (default: `zssdk.log`) |
332
+ | `ZSSDK_LOG_FORMAT` | Log format: `basic`, `json`, or `custom` (see [Logging](#logging)) |
333
+
334
+ ### Constructor Parameters
335
+
336
+ You can pass credentials and settings directly to `Session`:
337
+
338
+ ```python
339
+ session = Session(
340
+ vanity_domain="acme",
341
+ client_id="your_client_id",
342
+ client_secret="your_client_secret",
343
+ profile_name="beta", # Use config file profile
344
+ config_file="/path/to/config", # Custom config path
345
+ )
346
+ ```
347
+
348
+ For JWT Bearer (client assertion) authentication:
349
+
350
+ ```python
351
+ session = Session(
352
+ vanity_domain="acme",
353
+ client_id="your_client_id",
354
+ cert_file_path="/path/to/private_key.pem", # Or private_key="<key string>"
355
+ )
356
+ ```
357
+
358
+ ### Configuration Precedence
359
+
360
+ Configuration is resolved in the following order (highest to lowest):
361
+
362
+ 1. Constructor arguments
363
+ 2. Instance variables set via `session.set_config_variable()`
364
+ 3. Environment variables
365
+ 4. Configuration file (profile)
366
+ 5. Default values
367
+
368
+ ### User-Agent and Custom Headers
369
+
370
+ The SDK sends a `User-Agent` header with each request in the format: `oneapi-sdk/<version> python/<py_version> <os>/<os_version>`. You can append custom text via the `Config` object:
371
+
372
+ ```python
373
+ from zssdk.zscore.config import Config
374
+
375
+ config = Config(user_agent_extra="my-app/1.0")
376
+ session = Session(config=config, profile_name="beta")
377
+ # User-Agent will be: oneapi-sdk/<version> python/<version> <os>/<release> my-app/1.0
378
+ ```
379
+
380
+ ---
381
+
382
+ ## API Layers
383
+
384
+ The SDK exposes two ways to interact with Zscaler APIs.
385
+
386
+ ### Resource Layer (Recommended)
387
+
388
+ The resource layer provides a Pythonic, object-oriented interface. Access services as session attributes and work with resources as objects.
389
+
390
+ **Creating and managing a resource:**
391
+
392
+ ```python
393
+ import zssdk
394
+
395
+ session = zssdk.Session(profile_name="beta")
396
+ zia = session.zia
397
+
398
+ # Create a new VPN credential
399
+ cred = zia.VpnCredential()
400
+ cred.type = "UFQDN"
401
+ cred.fqdn = "office@example.zslogin.net"
402
+ cred.pre_shared_key = "somekey"
403
+ cred.create()
404
+ print(f"Created credential with ID: {cred.id}")
405
+
406
+ # Load an existing resource by ID
407
+ loaded = zia.VpnCredential(id=cred.id)
408
+ loaded.load()
409
+
410
+ # Update
411
+ loaded.pre_shared_key = "newkey"
412
+ loaded.update()
413
+
414
+ # Delete
415
+ cred.delete()
416
+ ```
417
+
418
+ **Working with collections:**
419
+
420
+ ```python
421
+ # List all (iterates over paginated results)
422
+ for item in zia.vpn_credentials.all():
423
+ print(item.fqdn)
424
+
425
+ # Apply server-side filters
426
+ for item in zia.vpn_credentials.all().filter(type="UFQDN"):
427
+ print(item.fqdn)
428
+
429
+ # Limit results
430
+ for item in zia.vpn_credentials.all().limit(20):
431
+ print(item.fqdn)
432
+
433
+ # Control page size for performance tuning
434
+ for item in zia.vpn_credentials.all().page_size(50).limit(100):
435
+ print(item.fqdn)
436
+
437
+ # Client-side filtering with JMESPath (see Collections and Pagination for more examples)
438
+ for item in zia.vpn_credentials.all().search("[?type=='UFQDN']"):
439
+ print(item.fqdn)
440
+
441
+ # Iterate by page
442
+ for page in zia.vpn_credentials.all().pages():
443
+ for item in page:
444
+ print(item.fqdn)
445
+ ```
446
+
447
+ **ZID (Zscaler Identity) example:**
448
+
449
+ ```python
450
+ zid = session.zid
451
+
452
+ # Create user profile
453
+ user = zid.UserProfile()
454
+ user.login_name = "john.doe@example.com"
455
+ user.display_name = "John Doe"
456
+ user.primary_email = "john.doe@example.com"
457
+ user.status = True
458
+ user.create()
459
+
460
+ # List groups
461
+ for group in zid.groups.all().limit(10):
462
+ print(group.name)
463
+ ```
464
+
465
+ ### Service Client Layer
466
+
467
+ For lower-level access, you can obtain a raw service client via `session.client("zia")`. This returns a low-level client whose methods map directly to API operations. For typical usage, prefer the resource layer above. Use `session.get_available_services()` to list available service names (`zia`, `zid`, `zcc`, `zpa`, `zdx`, `ztw`) and `session.get_available_resources()` for resource-style service names.
468
+
469
+ ---
470
+
471
+ ## Supported Products
472
+
473
+ | Product | Service Name | Description |
474
+ |----------------------------|--------------|--------------------------------------------------|
475
+ | Zscaler Internet Access | `zia` | ZIA administration and policy management |
476
+ | Zscaler Identity | `zid` | User, group, and API client management |
477
+ | Zscaler Client Connector | `zcc` | Client Connector administration |
478
+ | Zscaler Private Access | `zpa` | ZPA configuration and policies |
479
+ | Zscaler Digital Experience | `zdx` | ZDX monitoring and analytics |
480
+ | Zscaler Cloud & Branch Connector | `ztw` | Cloud & Branch Connector management |
481
+
482
+ ---
483
+
484
+ ## ZPA: customer_id Requirement
485
+
486
+ When interacting with **Zscaler Private Access (ZPA)** endpoints, you must provide `customer_id` in addition to the standard authentication parameters. The `customer_id` is the ZPA tenant ID, found under **Configuration & Control → Public API → API Keys** in the ZPA Admin Portal.
487
+
488
+ For ZPA resources, pass `customer_id` as a parameter to each operation. Every ZPA API call includes `customer_id` in the request path (e.g., `/customers/{customerId}/...`), so you must supply it when creating, updating, or querying ZPA resources.
489
+
490
+ `microtenant_id` is optional and only required when using ZPA with Microtenant; pass `0` for the default microtenant.
491
+
492
+ ---
493
+
494
+ ## ZIA and ZTW Context Manager
495
+
496
+ The SDK provides a context manager pattern for **ZIA** and **ZTW** that automatically activates configuration changes when exiting the block.
497
+
498
+ ### How It Works
499
+
500
+ When you use the `with` statement with `session.zia` or `session.ztw`:
501
+
502
+ 1. **Entry** — The service resource is returned; you make configuration changes within the block.
503
+ 2. **Exit** — When exiting the context (successfully or via exception), the SDK runs a finalize workflow that activates staged changes.
504
+
505
+ ### Activation Process
506
+
507
+ - **ZIA** — The finalize workflow calls the activation status endpoint. If the status is `PENDING`, it deauthenticates the session, which triggers activation of all staged configuration changes.
508
+ - **ZTW** — The finalize workflow fetches the status; if `PENDING`, it explicitly calls the Activate endpoint.
509
+
510
+ ### Example
511
+
512
+ ```python
513
+ import zssdk
514
+
515
+ session = zssdk.Session(profile_name="beta")
516
+
517
+ # ZIA: context manager activates changes on exit
518
+ with session.zia as zia:
519
+ role = zia.AdminRole()
520
+ role.name = "New API Role"
521
+ role.description = "Role created via API"
522
+ role.create()
523
+ # All staged ZIA changes are activated here
524
+
525
+ # ZTW: context manager activates changes on exit
526
+ with session.ztw as ztw:
527
+ group = ztw.IpDestinationGroup()
528
+ group.name = "New IP Group"
529
+ group.description = "IP group via API"
530
+ group.create()
531
+ # All staged ZTW changes are activated here
532
+ ```
533
+
534
+ ### Benefits
535
+
536
+ - **Automatic activation** — No need to call activation endpoints manually.
537
+ - **Deterministic behavior** — Exiting the context always triggers the activation workflow.
538
+ - **Error handling** — Even if an exception occurs, the context manager runs the finalize logic on normal exit (exceptions are not suppressed).
539
+
540
+ ---
541
+
542
+ ## Collections and Pagination
543
+
544
+ Collections support the following methods:
545
+
546
+ | Method | Description |
547
+ |-----------------|-------------------------------------------------------------------|
548
+ | `.all()` | Returns an iterable over all resources (handles pagination) |
549
+ | `.filter(**kwargs)` | Applies server-side filters (snake_case or camelCase) |
550
+ | `.limit(n)` | Stops after yielding `n` resources |
551
+ | `.page_size(n)` | Sets the number of resources fetched per API request |
552
+ | `.search(expr)` | Client-side JMESPath filtering on each page |
553
+ | `.pages()` | Yields pages (lists) of resources instead of individual items |
554
+
555
+ Example with combined options:
556
+
557
+ ```python
558
+ # Server-side filter, custom page size, limit total results
559
+ for cred in (
560
+ zia.vpn_credentials.all()
561
+ .filter(type="UFQDN")
562
+ .page_size(25)
563
+ .limit(100)
564
+ ):
565
+ print(cred.fqdn)
566
+ ```
567
+
568
+ ### Client-side filtering with JMESPath
569
+
570
+ The `.search(expr)` method applies a [JMESPath](https://jmespath.org/) expression on each page of results. Use it when you need filtering that the API does not support server-side. The expression is applied to the items array, so you write it relative to each item.
571
+
572
+ ```python
573
+ # Exact match on a field
574
+ for user in zia.admin_users.search("[?name == 'SDWAN-SilverPeak']"):
575
+ print(user.name)
576
+
577
+ # Multiple values with OR
578
+ for user in zia.admin_users.search("[?name == 'SDWAN-SilverPeak' || name == 'SDWAN-VeloCloud']"):
579
+ print(user.name)
580
+
581
+ # Substring match using contains()
582
+ for user in zia.admin_users.search("[?contains(name, 'SilverPeak')]"):
583
+ print(user.name)
584
+
585
+ # Chain with server-side filter (filter first to reduce data, then search)
586
+ for user in zia.admin_users.filter(search="SDWAN").search("[?contains(name, 'SilverPeak')]"):
587
+ print(user.name)
588
+
589
+ # Chain with limit and page_size
590
+ for user in zia.admin_users.search("[?name == 'SDWAN-SilverPeak']").limit(10).page_size(50):
591
+ print(user.name)
592
+ ```
593
+
594
+ ---
595
+
596
+ ## Error Handling
597
+
598
+ The SDK raises structured exceptions:
599
+
600
+ | Exception | Base | When it occurs |
601
+ |----------------------|---------------|----------------------------------------------------|
602
+ | `OneApiError` | — | Base SDK error |
603
+ | `ZsResourceError` | `OneApiError` | Resource-level errors; includes `resource_name`, `action_name` |
604
+ | `BadRequestException`| `ZsResourceError` | API returns 400 Bad Request |
605
+ | `NotFoundException` | `ZsResourceError` | API returns 404 Not Found |
606
+
607
+ Additional resource-specific exceptions (e.g., `ConflictException`) may be defined in `zssdk.zsresource.exceptions`.
608
+
609
+ **Example:**
610
+
611
+ ```python
612
+ from zssdk.zscore import OneApiError
613
+ from zssdk.zsresource import ZsResourceError
614
+ from zssdk.zsresource.exceptions import BadRequestException
615
+
616
+ try:
617
+ cred = zia.VpnCredential()
618
+ cred.fqdn = "invalid"
619
+ cred.create()
620
+ except BadRequestException as e:
621
+ print(f"Bad request: {e}")
622
+ except ZsResourceError as e:
623
+ print(f"Resource error: {e.resource_name} / {e.action_name}: {e}")
624
+ except OneApiError as e:
625
+ print(f"SDK error: {e}")
626
+ ```
627
+
628
+ ---
629
+
630
+ ## Rate Limiting and Retry Mechanism
631
+
632
+ Each Zscaler product has its own rate limiting criteria. Product-specific limits and quotas are documented in the [Zscaler Automation Hub Rate Limiting Guide](https://automate.zscaler.com/docs/docs/api-reference-and-guides/api-reference/guides/rate-limiting).
633
+
634
+ ### Built-in Retry Mechanism
635
+
636
+ The SDK includes a built-in retry mechanism (configured in `zssdk.zscore.data._retry`) that handles rate limiting and transient failures automatically. When a retryable response or connection error occurs, the SDK:
637
+
638
+ 1. **Checks for rate limit headers** — If present, waits the specified time before retrying.
639
+ 2. **Falls back to exponential backoff** — If no header is present, uses exponential backoff (base 0.3s, growth factor 2).
640
+ 3. **Caps wait time** — Maximum wait is 300 seconds per retry.
641
+ 4. **Limits attempts** — Retries up to 3 times (`max_attempts`) before raising the final exception.
642
+
643
+ The retry logic is applied per request across all supported products (ZIA, ZID, ZCC, ZPA, ZDX, ZTW).
644
+
645
+ ### HTTP Status Codes That Trigger Retries
646
+
647
+ The SDK retries requests when it receives one of the following responses:
648
+
649
+ | Status Code | Meaning | Policy Name |
650
+ |-------------|-------------------------|--------------------|
651
+ | `429` | Too Many Requests | TooManyRequests, Throttling |
652
+ | `500` | Internal Server Error | ServerError (with TransientFailure) |
653
+ | `502` | Bad Gateway | BadGateway |
654
+ | `503` | Service Unavailable | ServiceUnavailable |
655
+ | `504` | Gateway Timeout | GatewayTimeout |
656
+
657
+ Connection errors (e.g., `ConnectionError`, `ReadTimeoutError`) also trigger retries.
658
+
659
+ ### Retry-After and Rate Limit Headers
660
+
661
+ When rate limiting is enabled (default), the SDK uses response headers to determine how long to wait before retrying. Headers are checked in this order:
662
+
663
+ 1. **`Retry-After`** or **`retry-after`** — Standard HTTP headers. Supports values like `9` (seconds) or `9s`.
664
+ 2. **`x-ratelimit-reset`**, **`X-RateLimit-Reset`**, **`RateLimit-Reset`**, **`X-Rate-Limit-Retry-After-Seconds`** — Product-specific headers indicating seconds until the rate limit resets.
665
+
666
+ If no rate limit header is present, the SDK falls back to **exponential backoff** (base 0.3s, growth factor 2).
667
+
668
+ ---
669
+
670
+ ## Logging
671
+
672
+ SDK logging is controlled by environment variables (see [Environment Variables](#environment-variables)) or a `LoggerConfig` object.
673
+
674
+ ### Log format (`ZSSDK_LOG_FORMAT`)
675
+
676
+ The `logging_format` setting supports three values:
677
+
678
+ | Format | Description |
679
+ |-----------|-----------------------------------------------------------------------------|
680
+ | `basic` | Human-readable lines: `%(asctime)s - %(name)s - %(module)s - %(levelname)s - %(message)s`. Default format. |
681
+ | `json` | Structured JSON output, one record per line, suitable for log aggregators (e.g., Grafana Loki). |
682
+ | `custom` | Use your own `logging.Formatter` instance. **Only available programmatically** via `LoggerConfig`; requires passing `custom_formatter` and cannot be set via environment variables. |
683
+
684
+ **Environment variables example:**
685
+
686
+ ```sh
687
+ export ZSSDK_LOG_ENABLED=true
688
+ export ZSSDK_LOG_VERBOSE=false
689
+ export ZSSDK_LOG_TO_FILE=false
690
+ export ZSSDK_LOG_FILE_PATH=zssdk.log
691
+ export ZSSDK_LOG_FORMAT=basic
692
+ ```
693
+
694
+ **Programmatic configuration:**
695
+
696
+ ```python
697
+ from zssdk.zscore.config import Config, LoggerConfig
698
+
699
+ config = Config(
700
+ logger_config=LoggerConfig(
701
+ enabled=True,
702
+ verbose=False,
703
+ logging_format="json",
704
+ log_to_file=True,
705
+ log_file_path="/var/log/zssdk.log",
706
+ )
707
+ )
708
+ session = Session(config=config, profile_name="beta")
709
+ ```
710
+
711
+ **Custom format (programmatic only):**
712
+
713
+ ```python
714
+ import logging
715
+ from zssdk.zscore.config import Config, LoggerConfig
716
+
717
+ custom_formatter = logging.Formatter("%(levelname)s | %(message)s")
718
+ config = Config(
719
+ logger_config=LoggerConfig(
720
+ enabled=True,
721
+ logging_format="custom",
722
+ custom_formatter=custom_formatter,
723
+ )
724
+ )
725
+ session = Session(config=config, profile_name="beta")
726
+ ```
727
+
728
+ Sensitive fields (tokens, secrets, passwords) are redacted in log output.
729
+
730
+ ---
731
+
732
+ ## Auto-completion and IntelliSense
733
+
734
+ The SDK ships with PEP 484 [type stub](https://peps.python.org/pep-0484/) files (`.pyi`) that enable rich IDE support. Compatible editors (e.g., VS Code with Pylance, PyCharm) automatically use these stubs for:
735
+
736
+ - **Auto-completion** — As you type `session.zia.` or `cred.`, the IDE suggests available resources, methods, and properties.
737
+ - **Parameter hints** — Method signatures and parameter names appear in tooltips.
738
+ - **Docstrings** — Resource and method documentation is shown in hover tooltips.
739
+ - **Type checking** — Static type checkers (e.g., Pyright, mypy) can validate your code.
740
+
741
+ ### What You Get
742
+
743
+ | Location | Stub file(s) | Purpose |
744
+ |-----------------------|------------------------|----------------------------------------------|
745
+ | Session / services | `session.pyi` | `session.zia`, `session.zid`, etc. |
746
+ | ZIA resources | `zia_resources.pyi` | `VpnCredential`, `AdminUser`, collections |
747
+ | ZID resources | `zid_resources.pyi` | `UserProfile`, `Group`, `ApiClient` |
748
+ | ZPA, ZCC, ZDX, ZTW | `*_resources.pyi` | Product-specific resources and methods |
749
+ | Low-level clients | `*_client.pyi` | Service client method signatures |
750
+
751
+ ### Setup
752
+
753
+ No additional setup is required. The stubs are part of the installed package and are picked up automatically by IDEs that support PEP 484. Ensure your IDE's Python interpreter points to the environment where `zscaler-sdk-python` is installed.
754
+
755
+ ### Example
756
+
757
+ When you type `session.zia.` in VS Code or PyCharm, you will see completions for resources such as `VpnCredential`, `AdminUser`, `vpn_credentials`, and `admin_users`. Selecting a resource shows its available properties and methods (e.g., `create()`, `load()`, `update()`, `delete()`).
758
+
759
+ ---
760
+
761
+ ## Examples
762
+
763
+ The repository includes runnable examples under `python/examples/`:
764
+
765
+ **Zscaler Identity (ZID):**
766
+
767
+ - `user_management/` — User profile CRUD
768
+ - `group_management/` — Group management
769
+ - `api_client_management/` — API client CRUD
770
+ - `resource_server_management/` — Resource server viewing
771
+
772
+ **Zscaler Internet Access (ZIA):**
773
+
774
+ - `vpn_credentials_management/` — VPN credential management
775
+
776
+ Each example directory contains a `README.md` with usage details. Run any script with `--help` for options:
777
+
778
+ ```sh
779
+ python examples/zid/user_management/user_management.py --help
780
+ python examples/zia/vpn_credentials_management/vpn_credentials_management.py --help
781
+ ```
782
+
783
+ ---
784
+
785
+ ## Migrating from zscaler-sdk-python
786
+
787
+ If you are coming from the previous [`zscaler-sdk-python`](https://github.com/zscaler/zscaler-sdk-python) package, here is what changes.
788
+
789
+ ### Installation
790
+
791
+ ```sh
792
+ # Remove the old package
793
+ pip uninstall zscaler-sdk-python
794
+
795
+ # Install the new package
796
+ pip install zscaler-sdk-python
797
+ ```
798
+
799
+ The import name changes from `zscaler` to `zssdk`.
800
+
801
+ ### Authentication
802
+
803
+ **Before:**
804
+
805
+ ```python
806
+ from zscaler import ZscalerClient
807
+
808
+ config = {
809
+ "clientId": "...",
810
+ "clientSecret": "...",
811
+ "vanityDomain": "...",
812
+ "cloud": "beta",
813
+ }
814
+ client = ZscalerClient(config)
815
+ ```
816
+
817
+ **After:**
818
+
819
+ ```python
820
+ from zssdk import Session
821
+
822
+ session = Session(
823
+ client_id="...",
824
+ client_secret="...",
825
+ vanity_domain="...",
826
+ cloud="beta",
827
+ )
828
+ ```
829
+
830
+ Key differences:
831
+ - Constructor uses Python keyword arguments (`snake_case`) instead of a config dictionary (`camelCase`).
832
+ - Configuration can also come from `~/.zscaler/config` (INI format) or environment variables. See [Configuration](#configuration).
833
+
834
+ ### Working with resources
835
+
836
+ **Before** — dict access, error tuples:
837
+
838
+ ```python
839
+ with ZscalerClient(config) as client:
840
+ role, resp, err = client.zia.admin_roles.get_role(role_id="12345")
841
+ if err:
842
+ print(f"Error: {err}")
843
+ else:
844
+ print(role["name"])
845
+ ```
846
+
847
+ **After** — resource objects, exceptions:
848
+
849
+ ```python
850
+ from zssdk.zsresource.exceptions import NotFoundException
851
+
852
+ try:
853
+ role = session.zia.AdminRole(id=12345)
854
+ role.load()
855
+ print(role.name)
856
+ except NotFoundException:
857
+ print("Role not found")
858
+ ```
859
+
860
+ ### Pagination
861
+
862
+ **Before** — manual loop:
863
+
864
+ ```python
865
+ groups, resp, err = client.zia.user_management.list_groups()
866
+ while resp.has_next():
867
+ more, resp, err = resp.next()
868
+ if err:
869
+ break
870
+ groups.extend(more)
871
+ ```
872
+
873
+ **After** — iterator with chaining:
874
+
875
+ ```python
876
+ # All groups, paginated automatically
877
+ for group in session.zia.admin_roles.all():
878
+ print(group.name)
879
+
880
+ # With server-side filter and limit
881
+ for group in session.zia.admin_roles.filter(search="API").limit(50):
882
+ print(group.name)
883
+ ```
884
+
885
+ ### Configuration
886
+
887
+ **Before** — YAML file at `~/.zscaler/zscaler.yaml`:
888
+
889
+ ```yaml
890
+ zscaler:
891
+ client:
892
+ clientId: "..."
893
+ clientSecret: "..."
894
+ vanityDomain: "..."
895
+ ```
896
+
897
+ **After** — INI file at `~/.zscaler/config`:
898
+
899
+ ```ini
900
+ [default]
901
+ vanity_domain = ...
902
+ client_id = ...
903
+ client_secret = ...
904
+ ```
905
+
906
+ ### Quick reference
907
+
908
+ | What | `zscaler-sdk-python` | `zscaler-sdk-python` |
909
+ |---|---|---|
910
+ | Import | `from zscaler import ZscalerClient` | `from zssdk import Session` |
911
+ | Access field | `user["name"]` | `user.name` |
912
+ | Create resource | `client.zia.admin_roles.add_role(name="X")` | `role = session.zia.AdminRole(); role.name = "X"; role.create()` |
913
+ | Delete resource | `client.zia.admin_roles.delete_role(role_id="123")` | `role = session.zia.AdminRole(id=123); role.delete()` |
914
+ | Handle error | `result, resp, err = ...; if err: ...` | `try: ... except NotFoundException: ...` |
915
+ | Paginate | `while resp.has_next(): resp.next()` | `for item in collection.all():` |
916
+ | Filter | `query_params={"search": "X"}` | `.filter(search="X")` or `.search("[?name=='X']")` |
917
+ | Config file | `~/.zscaler/zscaler.yaml` | `~/.zscaler/config` (INI) |
918
+
919
+ ---
920
+
921
+ ## Contributing
922
+
923
+ Contributions are welcome. Please follow the project's coding standards and submit pull requests via the repository's normal workflow.
924
+
925
+ ---
926
+
927
+ ## Need Help?
928
+
929
+ - [Zscaler Community](https://community.zscaler.com/)
930
+ - [OneAPI Documentation](https://help.zscaler.com/oneapi/understanding-oneapi)
931
+ - [Zscaler Identity API](https://help.zscaler.com/zidentity/getting-started-zidentity-api)
932
+ - [ZIA API](https://help.zscaler.com/zia/getting-started-zia-api)
933
+ - [Automation Docs](http://automation.zsapidocs.net/docs/)