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.
- zscaler_sdk_python-2.0.0b1/PKG-INFO +933 -0
- zscaler_sdk_python-2.0.0b1/README.md +890 -0
- zscaler_sdk_python-2.0.0b1/pyproject.toml +107 -0
- zscaler_sdk_python-2.0.0b1/setup.cfg +4 -0
- zscaler_sdk_python-2.0.0b1/zscaler_sdk_python.egg-info/PKG-INFO +933 -0
- zscaler_sdk_python-2.0.0b1/zscaler_sdk_python.egg-info/SOURCES.txt +99 -0
- zscaler_sdk_python-2.0.0b1/zscaler_sdk_python.egg-info/dependency_links.txt +1 -0
- zscaler_sdk_python-2.0.0b1/zscaler_sdk_python.egg-info/requires.txt +20 -0
- zscaler_sdk_python-2.0.0b1/zscaler_sdk_python.egg-info/top_level.txt +1 -0
- zscaler_sdk_python-2.0.0b1/zssdk/__init__.py +55 -0
- zscaler_sdk_python-2.0.0/zscaler/zwa/zwa_service.py → zscaler_sdk_python-2.0.0b1/zssdk/__version__.py +1 -25
- zscaler_sdk_python-2.0.0b1/zssdk/session.py +251 -0
- zscaler_sdk_python-2.0.0b1/zssdk/session.pyi +59 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/__init__.py +98 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/args.py +57 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/auth.py +77 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/case.py +118 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/client.py +367 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/config.py +173 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/configloader.py +84 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/configprovider.py +153 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/credentials.py +257 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/csv_utils.py +212 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/_retry.json +75 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/endpoints.json +38 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/exception.json +46 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/zcc/v1/paginators-1.json +102 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/zcc/v1/service-1.json +5815 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/zdx/v1/paginators-1.json +60 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/zdx/v1/service-1.json +3981 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/zia/v1/paginators-1.json +396 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/zia/v1/service-1.json +30535 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/zid/v1/paginators-1.json +46 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/zid/v1/service-1.json +1677 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/zpa/v1/paginators-1.json +326 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/zpa/v1/service-1.json +17746 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/ztw/v1/paginators-1.json +137 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/data/ztw/v1/service-1.json +7226 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/endpoint.py +106 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/errorfactory.py +96 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/errorutils.py +256 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/exceptions.py +431 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/handlers.py +58 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/hooks.py +302 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/httpsession.py +192 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/loaders.py +136 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/logger.py +737 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/model.py +205 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/paginate.py +351 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/parsers.py +404 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/regions.py +52 -0
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/auth_domain.py → zscaler_sdk_python-2.0.0b1/zssdk/zscore/request.py +15 -17
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/response.py +99 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/retry.py +371 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/serialize.py +499 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/session.py +389 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/session.pyi +33 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/stub.py +225 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/tokenprovider.py +146 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/useragent.py +81 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/utils.py +124 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/validate.py +132 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/zcc_client.pyi +875 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/zdx_client.pyi +188 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/zia_client.pyi +5980 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/zid_client.pyi +458 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/zpa_client.pyi +3478 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zscore/ztw_client.pyi +564 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/__init__.py +74 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/action.py +118 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/base.py +196 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/base.pyi +12 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/collection.py +475 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/collection.pyi +29 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/data/zcc/v1/resources-1.json +7052 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/data/zdx/v1/resources-1.json +3600 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/data/zia/v1/resources-1.json +46276 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/data/zid/v1/resources-1.json +1678 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/data/zpa/v1/resources-1.json +26043 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/data/ztw/v1/resources-1.json +10057 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/dictionary.py +127 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/dictionary.pyi +16 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/exception_factory.py +160 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/exceptions.py +236 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/exceptions.pyi +42 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/factory.py +1112 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/params.py +66 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/response.py +173 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/service.py +84 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/service.pyi +14 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/subresource.py +469 -0
- zscaler_sdk_python-2.0.0/zscaler/__init__.py → zscaler_sdk_python-2.0.0b1/zssdk/zsresource/utils.py +8 -15
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/validation.py +91 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/zcc_resources.pyi +2683 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/zdx_resources.pyi +933 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/zia_resources.pyi +12486 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/zid_resources.pyi +633 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/zpa_resources.pyi +6947 -0
- zscaler_sdk_python-2.0.0b1/zssdk/zsresource/ztw_resources.pyi +2158 -0
- zscaler_sdk_python-2.0.0/PKG-INFO +0 -1107
- zscaler_sdk_python-2.0.0/README.md +0 -1067
- zscaler_sdk_python-2.0.0/pyproject.toml +0 -85
- zscaler_sdk_python-2.0.0/zscaler/api_client.py +0 -70
- zscaler_sdk_python-2.0.0/zscaler/cache/cache.py +0 -105
- zscaler_sdk_python-2.0.0/zscaler/cache/no_op_cache.py +0 -60
- zscaler_sdk_python-2.0.0/zscaler/cache/zscaler_cache.py +0 -171
- zscaler_sdk_python-2.0.0/zscaler/config/__init__.py +0 -0
- zscaler_sdk_python-2.0.0/zscaler/config/config_setter.py +0 -195
- zscaler_sdk_python-2.0.0/zscaler/config/config_validator.py +0 -173
- zscaler_sdk_python-2.0.0/zscaler/constants.py +0 -46
- zscaler_sdk_python-2.0.0/zscaler/error_messages.py +0 -46
- zscaler_sdk_python-2.0.0/zscaler/errors/__init__.py +0 -0
- zscaler_sdk_python-2.0.0/zscaler/errors/error.py +0 -10
- zscaler_sdk_python-2.0.0/zscaler/errors/http_error.py +0 -20
- zscaler_sdk_python-2.0.0/zscaler/errors/zscaler_api_error.py +0 -28
- zscaler_sdk_python-2.0.0/zscaler/exceptions/__init__.py +0 -1
- zscaler_sdk_python-2.0.0/zscaler/exceptions/exceptions.py +0 -101
- zscaler_sdk_python-2.0.0/zscaler/helpers.py +0 -154
- zscaler_sdk_python-2.0.0/zscaler/logger.py +0 -124
- zscaler_sdk_python-2.0.0/zscaler/oneapi_client.py +0 -445
- zscaler_sdk_python-2.0.0/zscaler/oneapi_collection.py +0 -16
- zscaler_sdk_python-2.0.0/zscaler/oneapi_http_client.py +0 -419
- zscaler_sdk_python-2.0.0/zscaler/oneapi_oauth_client.py +0 -239
- zscaler_sdk_python-2.0.0/zscaler/oneapi_object.py +0 -77
- zscaler_sdk_python-2.0.0/zscaler/oneapi_response.py +0 -286
- zscaler_sdk_python-2.0.0/zscaler/ratelimiter/__init__.py +0 -0
- zscaler_sdk_python-2.0.0/zscaler/ratelimiter/ratelimiter.py +0 -60
- zscaler_sdk_python-2.0.0/zscaler/request_executor.py +0 -579
- zscaler_sdk_python-2.0.0/zscaler/user_agent.py +0 -21
- zscaler_sdk_python-2.0.0/zscaler/utils.py +0 -845
- zscaler_sdk_python-2.0.0/zscaler/zcc/__init__.py +0 -0
- zscaler_sdk_python-2.0.0/zscaler/zcc/admin_user.py +0 -266
- zscaler_sdk_python-2.0.0/zscaler/zcc/company.py +0 -71
- zscaler_sdk_python-2.0.0/zscaler/zcc/devices.py +0 -479
- zscaler_sdk_python-2.0.0/zscaler/zcc/entitlements.py +0 -195
- zscaler_sdk_python-2.0.0/zscaler/zcc/fail_open_policy.py +0 -116
- zscaler_sdk_python-2.0.0/zscaler/zcc/forwarding_profile.py +0 -145
- zscaler_sdk_python-2.0.0/zscaler/zcc/legacy.py +0 -353
- zscaler_sdk_python-2.0.0/zscaler/zcc/manage_pass.py +0 -65
- zscaler_sdk_python-2.0.0/zscaler/zcc/models/admin_roles.py +0 -163
- zscaler_sdk_python-2.0.0/zscaler/zcc/models/admin_user.py +0 -69
- zscaler_sdk_python-2.0.0/zscaler/zcc/models/devices.py +0 -215
- zscaler_sdk_python-2.0.0/zscaler/zcc/models/failopenpolicy.py +0 -104
- zscaler_sdk_python-2.0.0/zscaler/zcc/models/forwardingprofile.py +0 -343
- zscaler_sdk_python-2.0.0/zscaler/zcc/models/manage_pass.py +0 -96
- zscaler_sdk_python-2.0.0/zscaler/zcc/models/secrets_otp.py +0 -74
- zscaler_sdk_python-2.0.0/zscaler/zcc/models/secrets_passwords.py +0 -60
- zscaler_sdk_python-2.0.0/zscaler/zcc/models/trustednetworks.py +0 -97
- zscaler_sdk_python-2.0.0/zscaler/zcc/models/webappservice.py +0 -85
- zscaler_sdk_python-2.0.0/zscaler/zcc/models/webpolicy.py +0 -176
- zscaler_sdk_python-2.0.0/zscaler/zcc/models/webprivacy.py +0 -84
- zscaler_sdk_python-2.0.0/zscaler/zcc/models/zdxgroupentitlements.py +0 -72
- zscaler_sdk_python-2.0.0/zscaler/zcc/models/zpagroupentitlements.py +0 -73
- zscaler_sdk_python-2.0.0/zscaler/zcc/secrets.py +0 -111
- zscaler_sdk_python-2.0.0/zscaler/zcc/trusted_networks.py +0 -198
- zscaler_sdk_python-2.0.0/zscaler/zcc/web_app_service.py +0 -81
- zscaler_sdk_python-2.0.0/zscaler/zcc/web_policy.py +0 -186
- zscaler_sdk_python-2.0.0/zscaler/zcc/web_privacy.py +0 -120
- zscaler_sdk_python-2.0.0/zscaler/zcc/zcc_service.py +0 -131
- zscaler_sdk_python-2.0.0/zscaler/zdx/__init__.py +0 -0
- zscaler_sdk_python-2.0.0/zscaler/zdx/admin.py +0 -162
- zscaler_sdk_python-2.0.0/zscaler/zdx/alerts.py +0 -323
- zscaler_sdk_python-2.0.0/zscaler/zdx/apps.py +0 -467
- zscaler_sdk_python-2.0.0/zscaler/zdx/devices.py +0 -841
- zscaler_sdk_python-2.0.0/zscaler/zdx/inventory.py +0 -175
- zscaler_sdk_python-2.0.0/zscaler/zdx/legacy.py +0 -382
- zscaler_sdk_python-2.0.0/zscaler/zdx/models/activeapplications.py +0 -61
- zscaler_sdk_python-2.0.0/zscaler/zdx/models/administration.py +0 -48
- zscaler_sdk_python-2.0.0/zscaler/zdx/models/alerts.py +0 -132
- zscaler_sdk_python-2.0.0/zscaler/zdx/models/application_users.py +0 -92
- zscaler_sdk_python-2.0.0/zscaler/zdx/models/applications.py +0 -165
- zscaler_sdk_python-2.0.0/zscaler/zdx/models/call_quality_metrics.py +0 -58
- zscaler_sdk_python-2.0.0/zscaler/zdx/models/common.py +0 -167
- zscaler_sdk_python-2.0.0/zscaler/zdx/models/devices.py +0 -437
- zscaler_sdk_python-2.0.0/zscaler/zdx/models/software_inventory.py +0 -121
- zscaler_sdk_python-2.0.0/zscaler/zdx/models/troubleshooting.py +0 -370
- zscaler_sdk_python-2.0.0/zscaler/zdx/models/users.py +0 -98
- zscaler_sdk_python-2.0.0/zscaler/zdx/troubleshooting.py +0 -681
- zscaler_sdk_python-2.0.0/zscaler/zdx/users.py +0 -167
- zscaler_sdk_python-2.0.0/zscaler/zdx/zdx_service.py +0 -86
- zscaler_sdk_python-2.0.0/zscaler/zia/__init__.py +0 -0
- zscaler_sdk_python-2.0.0/zscaler/zia/activate.py +0 -106
- zscaler_sdk_python-2.0.0/zscaler/zia/admin_roles.py +0 -244
- zscaler_sdk_python-2.0.0/zscaler/zia/admin_users.py +0 -422
- zscaler_sdk_python-2.0.0/zscaler/zia/advanced_settings.py +0 -210
- zscaler_sdk_python-2.0.0/zscaler/zia/apptotal.py +0 -221
- zscaler_sdk_python-2.0.0/zscaler/zia/atp_policy.py +0 -401
- zscaler_sdk_python-2.0.0/zscaler/zia/audit_logs.py +0 -160
- zscaler_sdk_python-2.0.0/zscaler/zia/authentication_settings.py +0 -309
- zscaler_sdk_python-2.0.0/zscaler/zia/cloud_applications.py +0 -182
- zscaler_sdk_python-2.0.0/zscaler/zia/cloud_apps.py +0 -526
- zscaler_sdk_python-2.0.0/zscaler/zia/cloud_browser_isolation.py +0 -87
- zscaler_sdk_python-2.0.0/zscaler/zia/cloud_firewall.py +0 -2255
- zscaler_sdk_python-2.0.0/zscaler/zia/cloud_firewall_dns.py +0 -382
- zscaler_sdk_python-2.0.0/zscaler/zia/cloud_firewall_ips.py +0 -375
- zscaler_sdk_python-2.0.0/zscaler/zia/cloud_firewall_rules.py +0 -346
- zscaler_sdk_python-2.0.0/zscaler/zia/cloud_nss.py +0 -688
- zscaler_sdk_python-2.0.0/zscaler/zia/cloudappcontrol.py +0 -774
- zscaler_sdk_python-2.0.0/zscaler/zia/device_management.py +0 -201
- zscaler_sdk_python-2.0.0/zscaler/zia/dlp_dictionary.py +0 -524
- zscaler_sdk_python-2.0.0/zscaler/zia/dlp_engine.py +0 -404
- zscaler_sdk_python-2.0.0/zscaler/zia/dlp_resources.py +0 -635
- zscaler_sdk_python-2.0.0/zscaler/zia/dlp_templates.py +0 -301
- zscaler_sdk_python-2.0.0/zscaler/zia/dlp_web_rules.py +0 -439
- zscaler_sdk_python-2.0.0/zscaler/zia/end_user_notification.py +0 -164
- zscaler_sdk_python-2.0.0/zscaler/zia/file_type_control_rule.py +0 -361
- zscaler_sdk_python-2.0.0/zscaler/zia/forwarding_control.py +0 -473
- zscaler_sdk_python-2.0.0/zscaler/zia/gre_tunnel.py +0 -731
- zscaler_sdk_python-2.0.0/zscaler/zia/intermediate_certificates.py +0 -684
- zscaler_sdk_python-2.0.0/zscaler/zia/iot_report.py +0 -205
- zscaler_sdk_python-2.0.0/zscaler/zia/ipv6_config.py +0 -190
- zscaler_sdk_python-2.0.0/zscaler/zia/legacy.py +0 -796
- zscaler_sdk_python-2.0.0/zscaler/zia/locations.py +0 -1054
- zscaler_sdk_python-2.0.0/zscaler/zia/malware_protection_policy.py +0 -506
- zscaler_sdk_python-2.0.0/zscaler/zia/models/__init__.py +0 -0
- zscaler_sdk_python-2.0.0/zscaler/zia/models/activation.py +0 -46
- zscaler_sdk_python-2.0.0/zscaler/zia/models/admin_roles.py +0 -93
- zscaler_sdk_python-2.0.0/zscaler/zia/models/admin_users.py +0 -327
- zscaler_sdk_python-2.0.0/zscaler/zia/models/advanced_settings.py +0 -320
- zscaler_sdk_python-2.0.0/zscaler/zia/models/advanced_threat_settings.py +0 -217
- zscaler_sdk_python-2.0.0/zscaler/zia/models/apptotal.py +0 -257
- zscaler_sdk_python-2.0.0/zscaler/zia/models/authentication_settings.py +0 -91
- zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_app_policy.py +0 -52
- zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_browser_isolation.py +0 -51
- zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_firewall_app_services.py +0 -48
- zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_firewall_destination_groups.py +0 -64
- zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_firewall_dns_rules.py +0 -251
- zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_firewall_ips_rules.py +0 -212
- zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_firewall_nw_application_groups.py +0 -54
- zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_firewall_nw_applications.py +0 -51
- zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_firewall_nw_service.py +0 -89
- zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_firewall_nw_service_groups.py +0 -52
- zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_firewall_rules.py +0 -237
- zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_firewall_source_groups.py +0 -59
- zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_firewall_time_windows.py +0 -55
- zscaler_sdk_python-2.0.0/zscaler/zia/models/cloud_nss.py +0 -611
- zscaler_sdk_python-2.0.0/zscaler/zia/models/cloudappcontrol.py +0 -256
- zscaler_sdk_python-2.0.0/zscaler/zia/models/common.py +0 -175
- zscaler_sdk_python-2.0.0/zscaler/zia/models/device_groups.py +0 -57
- zscaler_sdk_python-2.0.0/zscaler/zia/models/devices.py +0 -65
- zscaler_sdk_python-2.0.0/zscaler/zia/models/dlp_dictionary.py +0 -244
- zscaler_sdk_python-2.0.0/zscaler/zia/models/dlp_engine.py +0 -90
- zscaler_sdk_python-2.0.0/zscaler/zia/models/dlp_resources.py +0 -189
- zscaler_sdk_python-2.0.0/zscaler/zia/models/dlp_templates.py +0 -66
- zscaler_sdk_python-2.0.0/zscaler/zia/models/dlp_web_rules.py +0 -232
- zscaler_sdk_python-2.0.0/zscaler/zia/models/endusernotification.py +0 -155
- zscaler_sdk_python-2.0.0/zscaler/zia/models/filetyperules.py +0 -178
- zscaler_sdk_python-2.0.0/zscaler/zia/models/forwarding_control_policy.py +0 -243
- zscaler_sdk_python-2.0.0/zscaler/zia/models/gre_recommended_list.py +0 -73
- zscaler_sdk_python-2.0.0/zscaler/zia/models/gre_tunnel_info.py +0 -69
- zscaler_sdk_python-2.0.0/zscaler/zia/models/gre_tunnels.py +0 -135
- zscaler_sdk_python-2.0.0/zscaler/zia/models/gre_vips.py +0 -166
- zscaler_sdk_python-2.0.0/zscaler/zia/models/intermediate_certificates.py +0 -157
- zscaler_sdk_python-2.0.0/zscaler/zia/models/iotreport.py +0 -105
- zscaler_sdk_python-2.0.0/zscaler/zia/models/ipv6_config.py +0 -106
- zscaler_sdk_python-2.0.0/zscaler/zia/models/location_group.py +0 -81
- zscaler_sdk_python-2.0.0/zscaler/zia/models/location_management.py +0 -306
- zscaler_sdk_python-2.0.0/zscaler/zia/models/malware_protection_settings.py +0 -101
- zscaler_sdk_python-2.0.0/zscaler/zia/models/organization_information.py +0 -452
- zscaler_sdk_python-2.0.0/zscaler/zia/models/pac_files.py +0 -98
- zscaler_sdk_python-2.0.0/zscaler/zia/models/proxy_gatways.py +0 -72
- zscaler_sdk_python-2.0.0/zscaler/zia/models/remoteassistance.py +0 -58
- zscaler_sdk_python-2.0.0/zscaler/zia/models/rule_labels.py +0 -69
- zscaler_sdk_python-2.0.0/zscaler/zia/models/sandboxrules.py +0 -162
- zscaler_sdk_python-2.0.0/zscaler/zia/models/security_policy_settings.py +0 -49
- zscaler_sdk_python-2.0.0/zscaler/zia/models/shadow_it_report.py +0 -298
- zscaler_sdk_python-2.0.0/zscaler/zia/models/ssl_inspection_rules.py +0 -493
- zscaler_sdk_python-2.0.0/zscaler/zia/models/subclouds.py +0 -286
- zscaler_sdk_python-2.0.0/zscaler/zia/models/system_audit.py +0 -284
- zscaler_sdk_python-2.0.0/zscaler/zia/models/traffic_extranet.py +0 -165
- zscaler_sdk_python-2.0.0/zscaler/zia/models/traffic_static_ip.py +0 -88
- zscaler_sdk_python-2.0.0/zscaler/zia/models/traffic_vpn_credentials.py +0 -88
- zscaler_sdk_python-2.0.0/zscaler/zia/models/url_filter_cloud_app_settings.py +0 -114
- zscaler_sdk_python-2.0.0/zscaler/zia/models/url_filtering_rules.py +0 -199
- zscaler_sdk_python-2.0.0/zscaler/zia/models/urlcategory.py +0 -181
- zscaler_sdk_python-2.0.0/zscaler/zia/models/user_management.py +0 -181
- zscaler_sdk_python-2.0.0/zscaler/zia/models/workload_groups.py +0 -63
- zscaler_sdk_python-2.0.0/zscaler/zia/models/zpa_gateway.py +0 -89
- zscaler_sdk_python-2.0.0/zscaler/zia/organization_information.py +0 -172
- zscaler_sdk_python-2.0.0/zscaler/zia/pac_files.py +0 -507
- zscaler_sdk_python-2.0.0/zscaler/zia/policy_export.py +0 -92
- zscaler_sdk_python-2.0.0/zscaler/zia/remote_assistance.py +0 -144
- zscaler_sdk_python-2.0.0/zscaler/zia/rule_labels.py +0 -236
- zscaler_sdk_python-2.0.0/zscaler/zia/sandbox.py +0 -346
- zscaler_sdk_python-2.0.0/zscaler/zia/sandbox_rules.py +0 -333
- zscaler_sdk_python-2.0.0/zscaler/zia/security_policy_settings.py +0 -260
- zscaler_sdk_python-2.0.0/zscaler/zia/ssl_inspection_rules.py +0 -355
- zscaler_sdk_python-2.0.0/zscaler/zia/sub_clouds.py +0 -173
- zscaler_sdk_python-2.0.0/zscaler/zia/system_audit.py +0 -84
- zscaler_sdk_python-2.0.0/zscaler/zia/traffic_extranet.py +0 -243
- zscaler_sdk_python-2.0.0/zscaler/zia/traffic_static_ip.py +0 -350
- zscaler_sdk_python-2.0.0/zscaler/zia/traffic_vpn_credentials.py +0 -368
- zscaler_sdk_python-2.0.0/zscaler/zia/url_categories.py +0 -714
- zscaler_sdk_python-2.0.0/zscaler/zia/url_filtering.py +0 -547
- zscaler_sdk_python-2.0.0/zscaler/zia/user_management.py +0 -1010
- zscaler_sdk_python-2.0.0/zscaler/zia/workload_groups.py +0 -91
- zscaler_sdk_python-2.0.0/zscaler/zia/zia_service.py +0 -479
- zscaler_sdk_python-2.0.0/zscaler/zia/zpa_gateway.py +0 -351
- zscaler_sdk_python-2.0.0/zscaler/zpa/__init__.py +0 -0
- zscaler_sdk_python-2.0.0/zscaler/zpa/app_connector_groups.py +0 -364
- zscaler_sdk_python-2.0.0/zscaler/zpa/app_connector_schedule.py +0 -223
- zscaler_sdk_python-2.0.0/zscaler/zpa/app_connectors.py +0 -281
- zscaler_sdk_python-2.0.0/zscaler/zpa/app_protection.py +0 -1112
- zscaler_sdk_python-2.0.0/zscaler/zpa/app_segment_by_type.py +0 -160
- zscaler_sdk_python-2.0.0/zscaler/zpa/app_segments_inspection.py +0 -490
- zscaler_sdk_python-2.0.0/zscaler/zpa/app_segments_pra.py +0 -468
- zscaler_sdk_python-2.0.0/zscaler/zpa/application_segment.py +0 -627
- zscaler_sdk_python-2.0.0/zscaler/zpa/authdomains.py +0 -72
- zscaler_sdk_python-2.0.0/zscaler/zpa/cbi_banner.py +0 -256
- zscaler_sdk_python-2.0.0/zscaler/zpa/cbi_certificate.py +0 -249
- zscaler_sdk_python-2.0.0/zscaler/zpa/cbi_profile.py +0 -383
- zscaler_sdk_python-2.0.0/zscaler/zpa/cbi_region.py +0 -69
- zscaler_sdk_python-2.0.0/zscaler/zpa/cbi_zpa_profile.py +0 -121
- zscaler_sdk_python-2.0.0/zscaler/zpa/certificates.py +0 -352
- zscaler_sdk_python-2.0.0/zscaler/zpa/cloud_connector_groups.py +0 -128
- zscaler_sdk_python-2.0.0/zscaler/zpa/customer_version_profile.py +0 -91
- zscaler_sdk_python-2.0.0/zscaler/zpa/emergency_access.py +0 -350
- zscaler_sdk_python-2.0.0/zscaler/zpa/enrollment_certificates.py +0 -141
- zscaler_sdk_python-2.0.0/zscaler/zpa/idp.py +0 -142
- zscaler_sdk_python-2.0.0/zscaler/zpa/legacy.py +0 -624
- zscaler_sdk_python-2.0.0/zscaler/zpa/lss.py +0 -577
- zscaler_sdk_python-2.0.0/zscaler/zpa/machine_groups.py +0 -137
- zscaler_sdk_python-2.0.0/zscaler/zpa/microtenants.py +0 -402
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/app_connector_groups.py +0 -273
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/app_connector_schedule.py +0 -55
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/app_connectors.py +0 -176
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/app_protection.py +0 -317
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/app_protection_predefined_controls.py +0 -182
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/application_segment.py +0 -587
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/application_segment_inspection.py +0 -173
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/application_segment_pra.py +0 -211
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/application_servers.py +0 -62
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/cbi_banner.py +0 -60
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/cbi_certificate.py +0 -48
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/cbi_profile.py +0 -216
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/cbi_region.py +0 -45
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/cbi_zpa_profile.py +0 -119
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/certificates.py +0 -93
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/cloud_connector_groups.py +0 -62
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/common.py +0 -363
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/customer_version_profile.py +0 -104
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/emergency_access.py +0 -58
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/enrollment_certificates.py +0 -110
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/idp.py +0 -223
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/lss.py +0 -165
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/machine_groups.py +0 -69
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/microtenants.py +0 -235
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/policyset_controller_v1.py +0 -287
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/policyset_controller_v2.py +0 -246
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/posture_profiles.py +0 -106
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/pra_approval.py +0 -134
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/pra_console.py +0 -156
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/pra_cred_pool_controller.py +0 -76
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/pra_credential.py +0 -67
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/pra_portal.py +0 -102
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/provisioning_keys.py +0 -77
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/saml_attributes.py +0 -64
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/scim_attributes.py +0 -79
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/scim_groups.py +0 -58
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/segment_group.py +0 -75
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/server_group.py +0 -94
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/service_edge_groups.py +0 -148
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/service_edge_schedule.py +0 -55
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/service_edges.py +0 -160
- zscaler_sdk_python-2.0.0/zscaler/zpa/models/trusted_network.py +0 -66
- zscaler_sdk_python-2.0.0/zscaler/zpa/policies.py +0 -3308
- zscaler_sdk_python-2.0.0/zscaler/zpa/posture_profiles.py +0 -142
- zscaler_sdk_python-2.0.0/zscaler/zpa/pra_approval.py +0 -391
- zscaler_sdk_python-2.0.0/zscaler/zpa/pra_console.py +0 -437
- zscaler_sdk_python-2.0.0/zscaler/zpa/pra_credential.py +0 -384
- zscaler_sdk_python-2.0.0/zscaler/zpa/pra_credential_pool.py +0 -354
- zscaler_sdk_python-2.0.0/zscaler/zpa/pra_portal.py +0 -289
- zscaler_sdk_python-2.0.0/zscaler/zpa/provisioning.py +0 -385
- zscaler_sdk_python-2.0.0/zscaler/zpa/saml_attributes.py +0 -179
- zscaler_sdk_python-2.0.0/zscaler/zpa/scim_attributes.py +0 -189
- zscaler_sdk_python-2.0.0/zscaler/zpa/scim_groups.py +0 -150
- zscaler_sdk_python-2.0.0/zscaler/zpa/segment_groups.py +0 -364
- zscaler_sdk_python-2.0.0/zscaler/zpa/server_groups.py +0 -344
- zscaler_sdk_python-2.0.0/zscaler/zpa/servers.py +0 -287
- zscaler_sdk_python-2.0.0/zscaler/zpa/service_edge_group.py +0 -355
- zscaler_sdk_python-2.0.0/zscaler/zpa/service_edge_schedule.py +0 -223
- zscaler_sdk_python-2.0.0/zscaler/zpa/service_edges.py +0 -265
- zscaler_sdk_python-2.0.0/zscaler/zpa/trusted_networks.py +0 -146
- zscaler_sdk_python-2.0.0/zscaler/zpa/zpa_service.py +0 -378
- zscaler_sdk_python-2.0.0/zscaler/ztw/__init__.py +0 -0
- zscaler_sdk_python-2.0.0/zscaler/ztw/account_details.py +0 -276
- zscaler_sdk_python-2.0.0/zscaler/ztw/activation.py +0 -115
- zscaler_sdk_python-2.0.0/zscaler/ztw/admin_roles.py +0 -326
- zscaler_sdk_python-2.0.0/zscaler/ztw/admin_users.py +0 -400
- zscaler_sdk_python-2.0.0/zscaler/ztw/api_keys.py +0 -131
- zscaler_sdk_python-2.0.0/zscaler/ztw/ec_groups.py +0 -319
- zscaler_sdk_python-2.0.0/zscaler/ztw/forwarding_gateways.py +0 -235
- zscaler_sdk_python-2.0.0/zscaler/ztw/forwarding_rules.py +0 -368
- zscaler_sdk_python-2.0.0/zscaler/ztw/ip_destination_groups.py +0 -319
- zscaler_sdk_python-2.0.0/zscaler/ztw/ip_groups.py +0 -259
- zscaler_sdk_python-2.0.0/zscaler/ztw/ip_source_groups.py +0 -259
- zscaler_sdk_python-2.0.0/zscaler/ztw/legacy.py +0 -461
- zscaler_sdk_python-2.0.0/zscaler/ztw/location_management.py +0 -242
- zscaler_sdk_python-2.0.0/zscaler/ztw/location_template.py +0 -385
- zscaler_sdk_python-2.0.0/zscaler/ztw/models/activation.py +0 -57
- zscaler_sdk_python-2.0.0/zscaler/ztw/models/admin_roles.py +0 -97
- zscaler_sdk_python-2.0.0/zscaler/ztw/models/admin_users.py +0 -150
- zscaler_sdk_python-2.0.0/zscaler/ztw/models/api_keys.py +0 -91
- zscaler_sdk_python-2.0.0/zscaler/ztw/models/common.py +0 -88
- zscaler_sdk_python-2.0.0/zscaler/ztw/models/ec_group_vm.py +0 -121
- zscaler_sdk_python-2.0.0/zscaler/ztw/models/ecgroup.py +0 -457
- zscaler_sdk_python-2.0.0/zscaler/ztw/models/forwarding_gateways.py +0 -111
- zscaler_sdk_python-2.0.0/zscaler/ztw/models/forwarding_rules.py +0 -347
- zscaler_sdk_python-2.0.0/zscaler/ztw/models/ip_destination_groups.py +0 -72
- zscaler_sdk_python-2.0.0/zscaler/ztw/models/ip_groups.py +0 -58
- zscaler_sdk_python-2.0.0/zscaler/ztw/models/ip_source_groups.py +0 -58
- zscaler_sdk_python-2.0.0/zscaler/ztw/models/location_management.py +0 -255
- zscaler_sdk_python-2.0.0/zscaler/ztw/models/location_templates.py +0 -173
- zscaler_sdk_python-2.0.0/zscaler/ztw/models/nw_service.py +0 -95
- zscaler_sdk_python-2.0.0/zscaler/ztw/models/nw_service_groups.py +0 -56
- zscaler_sdk_python-2.0.0/zscaler/ztw/models/provisioning_url.py +0 -224
- zscaler_sdk_python-2.0.0/zscaler/ztw/models/traffic_vpn_credentials.py +0 -90
- zscaler_sdk_python-2.0.0/zscaler/ztw/models/zpa_resources.py +0 -61
- zscaler_sdk_python-2.0.0/zscaler/ztw/nw_service.py +0 -299
- zscaler_sdk_python-2.0.0/zscaler/ztw/nw_service_groups.py +0 -99
- zscaler_sdk_python-2.0.0/zscaler/ztw/provisioning_url.py +0 -126
- zscaler_sdk_python-2.0.0/zscaler/ztw/ztw_service.py +0 -180
- zscaler_sdk_python-2.0.0/zscaler/zwa/__init__.py +0 -0
- zscaler_sdk_python-2.0.0/zscaler/zwa/audit_logs.py +0 -132
- zscaler_sdk_python-2.0.0/zscaler/zwa/dlp_incidents.py +0 -656
- zscaler_sdk_python-2.0.0/zscaler/zwa/legacy.py +0 -268
- zscaler_sdk_python-2.0.0/zscaler/zwa/models/audit_logs.py +0 -135
- zscaler_sdk_python-2.0.0/zscaler/zwa/models/change_history.py +0 -61
- zscaler_sdk_python-2.0.0/zscaler/zwa/models/common.py +0 -712
- zscaler_sdk_python-2.0.0/zscaler/zwa/models/generated_tickets.py +0 -152
- zscaler_sdk_python-2.0.0/zscaler/zwa/models/incident_details.py +0 -203
- zscaler_sdk_python-2.0.0/zscaler/zwa/models/incident_evidence.py +0 -57
- zscaler_sdk_python-2.0.0/zscaler/zwa/models/incident_group_search.py +0 -59
- zscaler_sdk_python-2.0.0/zscaler/zwa/models/incident_search.py +0 -93
- zscaler_sdk_python-2.0.0/zscaler/zwa/models/incident_trigger.py +0 -45
- {zscaler_sdk_python-2.0.0 → zscaler_sdk_python-2.0.0b1}/LICENSE.md +0 -0
- /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
|
+
[](https://pypi.org/project/zscaler-sdk-python)
|
|
47
|
+
[](https://pypi.org/project/zscaler-sdk-python)
|
|
48
|
+
[](LICENSE.md)
|
|
49
|
+
[](https://pypistats.org/packages/zscaler-sdk-python)
|
|
50
|
+
[](http://automation.zsapidocs.net/docs/)
|
|
51
|
+
[](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/)
|