diff --git a/CHANGELOG.md b/CHANGELOG.md index c2d90a46..906a736c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Zscaler Python SDK Changelog +## 1.9.37 (July 7, 2026) + +### Notes + +- Python Versions: **v3.9, v3.10, v3.11, v3.12** + +### Bug Fixes + +* [PR #544](https://github.com/zscaler/zscaler-sdk-python/issues/544) - Added newly nested attributes within the ZPA `app_connectors` and `app_connector_groups` models. + ## 1.9.36 (July 7, 2026) ### Notes diff --git a/docsrc/zs/guides/release_notes.rst b/docsrc/zs/guides/release_notes.rst index ce7b6db7..90f220b9 100644 --- a/docsrc/zs/guides/release_notes.rst +++ b/docsrc/zs/guides/release_notes.rst @@ -6,6 +6,20 @@ Release Notes Zscaler Python SDK Changelog ---------------------------- +1.9.37 (July 8, 2026) +--------------------------- + +Notes +------- + +- Python Versions: **v3.9, v3.10, v3.11, v3.12** + +Bug Fixes +--------- + +(`#544 `_) - Added newly nested attributes within the ZPA `app_connectors` and `app_connector_groups` models. + + 1.9.36 (July 7, 2026) --------------------------- diff --git a/poetry.lock b/poetry.lock index 97e1516c..b8fd504d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.4.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.3.2 and should not be changed by hand. [[package]] name = "aenum" @@ -274,117 +274,105 @@ pycparser = {version = "*", markers = "implementation_name != \"PyPy\""} [[package]] name = "charset-normalizer" -version = "3.4.8" +version = "3.4.9" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7" groups = ["main", "dev"] files = [ - {file = "charset_normalizer-3.4.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ad320cccde0bbe430fe3a0e5ef3f17b16ef7cfe496603d7b3a153aa204e093e5"}, - {file = "charset_normalizer-3.4.8-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:825e5c2fb57d2065250e12dfeb414d780e7da242b371d5a78814d3ef40d63fde"}, - {file = "charset_normalizer-3.4.8-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:98a91c8dce056a858385cf147eb196ae4d2b35315c2bfc8151ff4027707247e1"}, - {file = "charset_normalizer-3.4.8-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f2bd1869ae6cd2793e51bfacebd1495595c1c007c2dfcfd6874b4a804f29bc7c"}, - {file = "charset_normalizer-3.4.8-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:511851c35e4ec8f4be773acd2c0222a7ec6b63971fea8988103632896f174b4b"}, - {file = "charset_normalizer-3.4.8-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:bae1f52a68a5dcc1fcb65db69895638654be9a45716c47a5a192552a52925662"}, - {file = "charset_normalizer-3.4.8-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f44633a518ef0889dc7e28dde2e18616f8e932e2d17d9c9ccdbbef40aa3a6794"}, - {file = "charset_normalizer-3.4.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0d08f2b7171517aa86ddf0eaba25bc7ac8576d401f2da8764403cf0e876f796b"}, - {file = "charset_normalizer-3.4.8-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bde2fd87539f4a023ae8d699f51cd3d359ba79a42953fc03afde80bedf52ffc0"}, - {file = "charset_normalizer-3.4.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ba191a019f567339cff1cf861e311a5c442477d91f2ece3ad683f7b004976aae"}, - {file = "charset_normalizer-3.4.8-cp310-cp310-win32.whl", hash = "sha256:dfce5e536054cf15a14576ecb08913e2e9ceff4cc1da2919694cdb2b45b5c64f"}, - {file = "charset_normalizer-3.4.8-cp310-cp310-win_amd64.whl", hash = "sha256:06238276da3d880d858a4221d6b968bccc18ca3cbe71f6c5c2de86abb7929ffe"}, - {file = "charset_normalizer-3.4.8-cp310-cp310-win_arm64.whl", hash = "sha256:3731936f612754018aeb99fafc4381b6d80ed9165f2dba719c4e1afca0177048"}, - {file = "charset_normalizer-3.4.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ca832d525a2a52542048111cb44e0dea595b9ad53ad542020aa770f308427b92"}, - {file = "charset_normalizer-3.4.8-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ab07eb7b564635602734c3ef0e8d2db9d59cbbce54f5dc42b8f11aa1f56ce364"}, - {file = "charset_normalizer-3.4.8-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6e88da593ea098194ea08f58924b716a9ae0c39058edad8c5c9b0bafa39fbd56"}, - {file = "charset_normalizer-3.4.8-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8ca83574f63f71b485da1c50d4e17bcef7375a56b459a861562554f1fbaac1a4"}, - {file = "charset_normalizer-3.4.8-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9840cca6969a7e35498f1ce6fc32b7842500783d303b5ab254679a0f591093c4"}, - {file = "charset_normalizer-3.4.8-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:ca8776b012d464136c239f51133120db94397bc69f3faee404ff8c99827f8192"}, - {file = "charset_normalizer-3.4.8-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:23c40d25fe581d34ff0ef7ff1ca1527f5c51c5c6edf0b8384eeafac4a0438469"}, - {file = "charset_normalizer-3.4.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6809e40a8876eb4742676fbbb57056c0344ef2555e5597d4343f0b365953afdd"}, - {file = "charset_normalizer-3.4.8-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:1bfd4bf262d6f26805cc6a32dae2554db66ef7533e6c62cc12644d3882be05e5"}, - {file = "charset_normalizer-3.4.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9421549d803f0f712aa6e1496d15ff5ac510fc4c7104e7e299ea1d498d582d59"}, - {file = "charset_normalizer-3.4.8-cp311-cp311-win32.whl", hash = "sha256:9a2748f7588b0c1e5166db3a9448fe86e392479aded89b0c86382d41cade91a2"}, - {file = "charset_normalizer-3.4.8-cp311-cp311-win_amd64.whl", hash = "sha256:2e9f0db12ea28a3349e514443fc56d4b1fb3c81d0f9c0e33dacfdfc2ac63f774"}, - {file = "charset_normalizer-3.4.8-cp311-cp311-win_arm64.whl", hash = "sha256:4b1f25c6e376033f31463d66f8bb01ae77a128ca11c6677c69ed8e9ce913bbf9"}, - {file = "charset_normalizer-3.4.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:faac37c4904598daa00cb4c9b32f3b4cc814fb5f145d7a531ceb4a70f2114132"}, - {file = "charset_normalizer-3.4.8-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f191c19a32dc6cec0fb8079789d786254653a9ce906fcab04ccd2eed07bba233"}, - {file = "charset_normalizer-3.4.8-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:05811b76943d477bb90822dedb5c4565cef70148847a59d574e2b35043aeb563"}, - {file = "charset_normalizer-3.4.8-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3868a3e4ec1e40b419e060d063f93eac6f046fa21426c4816421223ae7dc8ab8"}, - {file = "charset_normalizer-3.4.8-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:25f93d194eb6264c64416cabff46a91f6d99b97e7525a1b4f35c77a99e75cc68"}, - {file = "charset_normalizer-3.4.8-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:ee6a62492f18d432cca031fabd158f400a8c25bf7b9458f50953393a2a23d97a"}, - {file = "charset_normalizer-3.4.8-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1c16cb4fc35e4b064f5ee78d849f15a550ada1729c3372916672e38f1f01d1d4"}, - {file = "charset_normalizer-3.4.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2fbd0edb0426ab28e70fac9d1d4ef549eb5a64a2521f0428c441d75e4387e6c2"}, - {file = "charset_normalizer-3.4.8-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ccb9052771216170015f810b88065fd9e13b1e0b391f92abb9b47e0919a42aad"}, - {file = "charset_normalizer-3.4.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3809ba5d3cd02aca0894597f2669a825bdfe2229061515c128b0f4e5533b4ab5"}, - {file = "charset_normalizer-3.4.8-cp312-cp312-win32.whl", hash = "sha256:de63c31666a049f653ada24e800192e3c019e96bc7d70fb449a000bccf26a36f"}, - {file = "charset_normalizer-3.4.8-cp312-cp312-win_amd64.whl", hash = "sha256:14a4bbe066f3fb05c6ba70e9cf9d34614b57a2fd70ea8c27cc30f34155e16a58"}, - {file = "charset_normalizer-3.4.8-cp312-cp312-win_arm64.whl", hash = "sha256:2b5b0c0dca0a02c3f816f89abf18af3d20416dedbc3d3aa5f3981045f88ae7b0"}, - {file = "charset_normalizer-3.4.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:057f8609f7341618c98e5aa9a6109fa116acff2a658497d47ab3325b5e8f2b08"}, - {file = "charset_normalizer-3.4.8-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c591f9a82adc5b89a039b90df74e43de2b9177fb46771172bed7b80722a70db0"}, - {file = "charset_normalizer-3.4.8-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5b56f449132d9adefe55b87635d05177a914ed5d070438a74725e1d77a280002"}, - {file = "charset_normalizer-3.4.8-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1004c3b5831a301dadfb9e916f38e78e2ff3e08db24a1ad7c354db8ee3dea9c3"}, - {file = "charset_normalizer-3.4.8-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:60883e22821d17c9e5b4f3ca1ef8074f766e3db28791f851b665929c515635c0"}, - {file = "charset_normalizer-3.4.8-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:21e4dbb942c8a6342e2685f232dd2a7bc73465697bd26ead4f118271d28be383"}, - {file = "charset_normalizer-3.4.8-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:84bcae14c65e645ca66b661339183d32b8c846a17c96e3e81ab3d346e1c498d4"}, - {file = "charset_normalizer-3.4.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b4e4d44b8287aa13a25e16e29393d494b0643b24894f7c8266c6f6788dd36337"}, - {file = "charset_normalizer-3.4.8-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:f68545d1b267dbfafd5d253b6d1cb161562c4e61ab25b5c4cdb7d9e5923e441e"}, - {file = "charset_normalizer-3.4.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1936e48214adea74922a20c8ab41b1393ae27cc9e329eb1f0b937d3416824f36"}, - {file = "charset_normalizer-3.4.8-cp313-cp313-win32.whl", hash = "sha256:1f8e3521860187d597f3867d8466da225b9179ea2833bb26de1bb026144d07c3"}, - {file = "charset_normalizer-3.4.8-cp313-cp313-win_amd64.whl", hash = "sha256:8b654b6f52a0a9a6be38e88f3e1dc68f1093ebeb2abbadafc7c82da0786a34be"}, - {file = "charset_normalizer-3.4.8-cp313-cp313-win_arm64.whl", hash = "sha256:d2d5a250ee26e29468b7607d97479221b069fa8aaf6f929ac84ec0e962e15154"}, - {file = "charset_normalizer-3.4.8-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:77e993ecf65f21ab1f82266ff5e84a7de2c879e7d9b8bc006009df83f22a1d5e"}, - {file = "charset_normalizer-3.4.8-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:524939917f17f6de502dfda30b472550965740d7f126659d4c4f8dd1569cce22"}, - {file = "charset_normalizer-3.4.8-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a4508989ba8e2ce43ef989453d18188b261546e8188cbdd4ef451fb9e4c3b467"}, - {file = "charset_normalizer-3.4.8-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9e44127f7d11eee4548ad2cdf1f4e1b6eaaddd5cb92d15ad65f6ecc9bcf403ab"}, - {file = "charset_normalizer-3.4.8-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bb90317359f7e67bb6df615999a95e0980877468e617ddce8b6c2f8e7fe60d95"}, - {file = "charset_normalizer-3.4.8-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:35d9e7a9c960520ae89d1f4e305d1c047a74dea2e0f73a0e84f879356c2e8776"}, - {file = "charset_normalizer-3.4.8-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:92e322b054c7ff886f78feab7360736bb45de2e18cf4a0ee84e8fc5a08d53a19"}, - {file = "charset_normalizer-3.4.8-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:3c0086d97094363556206dc3bcf43f7edcfc043ea7a568a46f45efea74858bd1"}, - {file = "charset_normalizer-3.4.8-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:0752c849b51198267df2aba013c4de3a2955bd014a4fd70828809946c1acbc0c"}, - {file = "charset_normalizer-3.4.8-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2a4707e09eca11e81ece4fced600c5a0a801f568b962244f6f517bc274745fc9"}, - {file = "charset_normalizer-3.4.8-cp314-cp314-win32.whl", hash = "sha256:8ea67f427c073ae3da0923aa55f3715131fa613a61a7f2f8d762bde75eaf00ae"}, - {file = "charset_normalizer-3.4.8-cp314-cp314-win_amd64.whl", hash = "sha256:ff71018850863362e5c7533769d0a9f77715c31af1502d523630ce822922f5c9"}, - {file = "charset_normalizer-3.4.8-cp314-cp314-win_arm64.whl", hash = "sha256:44464e66f4da2f21dea7145c7693f9f60717ca4794a954dea5bf8c2c932678bd"}, - {file = "charset_normalizer-3.4.8-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:50a0c2e58ad2c203adb616fef28941b7e13716adbc25e0dfaeec29f5afe6382f"}, - {file = "charset_normalizer-3.4.8-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a1e589fdb95c76f08288bbb346230cdd8994db74903db6637b380f7b5fc9336"}, - {file = "charset_normalizer-3.4.8-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b3d7c887444c5a7ef0d68d358d81e758a850bc626f8e639e2ca5667153272b20"}, - {file = "charset_normalizer-3.4.8-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:65c389b96c0cfff3a3f0458fa1c7ce554a30e23101a88a49f03997afce6a929f"}, - {file = "charset_normalizer-3.4.8-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:593403fc47dcdf55e2987b2e3cc2e064127e2b908929f1f18b2e4a4652cbd780"}, - {file = "charset_normalizer-3.4.8-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:606088e9fa2b7469ab9c42d4da8e05a415622a07714edd2fcd8fed48dda4c853"}, - {file = "charset_normalizer-3.4.8-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0317406326fed512f42a1632ad91a96228a7616c06547666a6dd79967f1bd6ca"}, - {file = "charset_normalizer-3.4.8-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:b67d50ee47e5c57a0064a9cb575b963a7125819dfd1fd094d44d378fff94659b"}, - {file = "charset_normalizer-3.4.8-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:79e402b869f270140afa5e2b0e2ac100585358d812fe3dd093d424f7a72964e0"}, - {file = "charset_normalizer-3.4.8-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:2970b9f7ab69ec3a0423ec6b6ac718e79fbf4a282c0bc103ef88c1ef50dfa15a"}, - {file = "charset_normalizer-3.4.8-cp314-cp314t-win32.whl", hash = "sha256:458c2972a78043b7261c9726670029f15f722e70669bcbe961153a01968f589f"}, - {file = "charset_normalizer-3.4.8-cp314-cp314t-win_amd64.whl", hash = "sha256:0c926329a1df7cd56d7d8349fe354460d20aefd2e394c9e159e479d018b2b359"}, - {file = "charset_normalizer-3.4.8-cp314-cp314t-win_arm64.whl", hash = "sha256:2232baea80a2b01783679fed4e625ccdb19a974f44c9cf0fba21a777a4c8179c"}, - {file = "charset_normalizer-3.4.8-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:23ed6db469275bff3ef7617ddda52ae35f385a915ae0bc8858500e360e111523"}, - {file = "charset_normalizer-3.4.8-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dafb42a6c88e32887ff08fe1e2d90a3f97e5b68d175e0cc4352a8d7a7967f767"}, - {file = "charset_normalizer-3.4.8-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3eaee88c39b7bb2fd0708dedadbacd7b74d6d34323f2b1a57bb3ab547a7ea4a4"}, - {file = "charset_normalizer-3.4.8-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0ca66f45d56ac15f1f6799334d9be44c6ded6d36cc6cbaaa25f96f64bae8d861"}, - {file = "charset_normalizer-3.4.8-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fe5f2eaae114c077b7a39bc7530219249b77f5de805f775ed2d51bd3689986ca"}, - {file = "charset_normalizer-3.4.8-cp38-cp38-manylinux_2_31_armv7l.whl", hash = "sha256:91db7d66b7230e9af0a539062ccfc854640572ce6c07d7113b1ff9607ac1ba79"}, - {file = "charset_normalizer-3.4.8-cp38-cp38-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6a6d86d1f710bf0423887a1c6ab497ad2cf7f803e8eaafa7ccbfb53d2a965fd0"}, - {file = "charset_normalizer-3.4.8-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:b27d43e75185d75449559a29dca37e656a75ae08d2e750d40439d37c8d6210f5"}, - {file = "charset_normalizer-3.4.8-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:1a73dce145956ff798968aea0478f905c8e43715ea0af995ebaaefca2c1270c8"}, - {file = "charset_normalizer-3.4.8-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:815654d356a29fc9185c7f60c9dc0175d7ae52800b3ea228b046a30468f5a0a6"}, - {file = "charset_normalizer-3.4.8-cp38-cp38-win32.whl", hash = "sha256:66c9eaaba3d5b84ca5e5e4a890dc3ff67616d074220a5c7ca1dc8812c5ae5703"}, - {file = "charset_normalizer-3.4.8-cp38-cp38-win_amd64.whl", hash = "sha256:0d869b0ca97fccee19e6c3304cc2b6e771ba9205e3e44427b9529c288f517fb8"}, - {file = "charset_normalizer-3.4.8-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6187d0eedbcf1733aa0ee55185e7c33d9f6a4fe8f54c1356583243f37b0debc0"}, - {file = "charset_normalizer-3.4.8-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:324170f5221b21c5f3ea31e668a2b27887f3cd4196b00c01be88feeeff6626cf"}, - {file = "charset_normalizer-3.4.8-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ac961d07606d72a34755cd7114a6d17487d057b02e8447122f2294b59802b30d"}, - {file = "charset_normalizer-3.4.8-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7570a4b695cc6375061393e2e6774813b9682a88b4970878183d1c91eb277e0e"}, - {file = "charset_normalizer-3.4.8-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e38edde6379af48ed4b2d27ca550dd87c67be92634794a5d6bf37bf7f1bae857"}, - {file = "charset_normalizer-3.4.8-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:fc67b103ed826abf819f35b030cbc0eb70ecc87e97f75f461cec18c9d2bffb53"}, - {file = "charset_normalizer-3.4.8-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:42f568c1c4e6f037c1167c64d48eb205380d9f041ca0139763ba8fc1bcdbcd2b"}, - {file = "charset_normalizer-3.4.8-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6a8e6b9024c62414617cf7b679a6fd833dda428e11e933927193153aa9f0019a"}, - {file = "charset_normalizer-3.4.8-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:e88c08c417416011982ca268812437fadb109852a405876ccae0409d150d857e"}, - {file = "charset_normalizer-3.4.8-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e787c695c6be73c17e7e9f76e6d134205ff3282ce0e77ba2fda1ca90162f01c1"}, - {file = "charset_normalizer-3.4.8-cp39-cp39-win32.whl", hash = "sha256:1cd73e9f7d506568f602169dce4f27f8188d59b9d67a440975ca2623494abae7"}, - {file = "charset_normalizer-3.4.8-cp39-cp39-win_amd64.whl", hash = "sha256:30b8e00869449b0baf2eaef48a0aefff4372e792ee6c00e03561cecb4fecd2fd"}, - {file = "charset_normalizer-3.4.8-cp39-cp39-win_arm64.whl", hash = "sha256:a922bb43ee1742513e410df4bb62ef44c94b82efba51ce9297cac1ba39cc8bfd"}, - {file = "charset_normalizer-3.4.8-py3-none-any.whl", hash = "sha256:b7c1fb310df524e01fbe84d43b7f95aa4f808f8eaa0dafc185f64ba395e37d54"}, - {file = "charset_normalizer-3.4.8.tar.gz", hash = "sha256:d9bf144d6faf12c70d58e47f7512992ae2882b820031d6cef68152deb645bf2d"}, + {file = "charset_normalizer-3.4.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd6280cf040f233bd7d3407b743b4b4c74f70e8e1c4199cb112a62c941c0772a"}, + {file = "charset_normalizer-3.4.9-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa99adc8f081b475a12843953db36831eaf83ec33eb46a90629ca6a5de45a616"}, + {file = "charset_normalizer-3.4.9-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c1225416b463483160e4af85d5fc3a9690ccb53fd4b1865a6437825f5ede3209"}, + {file = "charset_normalizer-3.4.9-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:16d10d789dd9bcca1173c95af82c58433122564b7bc39385124be735a35cbe99"}, + {file = "charset_normalizer-3.4.9-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9bb41182d93ea91f60b4bc8fbf4c820c69ef8a12ab2d917f3f1834f1acad07e8"}, + {file = "charset_normalizer-3.4.9-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:bcf74c1df76758a395bf0af608c04c82257523f55c9868b334f06270d0f2112b"}, + {file = "charset_normalizer-3.4.9-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b5314963fce9b0b12743891de876e724997864ee22aa496f903f426c7e2fa5b2"}, + {file = "charset_normalizer-3.4.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e9701d0049d92c16703a42771b98d560b95248949f23f8cf7b4eddd201814fb9"}, + {file = "charset_normalizer-3.4.9-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:65a7ff3f705e57d392f7261b6d0550fe137c3019477431f1c355e0db0a7d3e15"}, + {file = "charset_normalizer-3.4.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79580094b00d1789d1f93ea55bc43cb2f611910c72235b7657f3482ddcc1b22d"}, + {file = "charset_normalizer-3.4.9-cp310-cp310-win32.whl", hash = "sha256:432786d3561e69aeeae6c7e8648964ce0ad05736120135601f87ac26b9c83381"}, + {file = "charset_normalizer-3.4.9-cp310-cp310-win_amd64.whl", hash = "sha256:8c041122946b7ba21bb32c45b1aa57b1be35527690aeb3c5c234521085632eee"}, + {file = "charset_normalizer-3.4.9-cp310-cp310-win_arm64.whl", hash = "sha256:375b83ed0aecfce76c16d198fbc21f3b11b337d68662bea0a995046682a11419"}, + {file = "charset_normalizer-3.4.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0e94703ec9684807f20cfb5eed95c70f67f2a8f21ad620146d7b5a13677b93e5"}, + {file = "charset_normalizer-3.4.9-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a441ea71902098ffe78c5abe6c494f44160b4af614ed16c3d9a3b1d17fd8ee2"}, + {file = "charset_normalizer-3.4.9-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:304b13570067b2547562e308af560b3963857b1fa90bd6afd978130130fe2d6a"}, + {file = "charset_normalizer-3.4.9-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4773092f8019072343a7447203308b176e10199920eb02d6195e81bbb3274c29"}, + {file = "charset_normalizer-3.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:04ce310cb89c15df659582aee80a0603788732a5e017d5bd5c81158106ce249c"}, + {file = "charset_normalizer-3.4.9-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:c0323c9daef75ef2e5083624b4585018a0c9d5e3b40f607eed81a311270b934b"}, + {file = "charset_normalizer-3.4.9-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:871ff67ea1aad4dfd91736464934d56b32dac49f9fbe16cddba36198a7b3a0db"}, + {file = "charset_normalizer-3.4.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:67830fc78e67501f47bb950471b2dcb9b35b140084429318e862895a8e89c993"}, + {file = "charset_normalizer-3.4.9-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:3d92613ec25e43b05f042302531ec0f00b8445190e43325880cbd6ab7c2581da"}, + {file = "charset_normalizer-3.4.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:280081916dc341820640489a66e4696049401ef1cf6dd672f672e70ad915aca3"}, + {file = "charset_normalizer-3.4.9-cp311-cp311-win32.whl", hash = "sha256:ac351b3b8014eead140e77e9717e2992c6bbe30b63bc3422422eb84865412e3d"}, + {file = "charset_normalizer-3.4.9-cp311-cp311-win_amd64.whl", hash = "sha256:6366a16e1a25018694d6a5d784d09b046edc9eac40ea2b54065c3052672516a1"}, + {file = "charset_normalizer-3.4.9-cp311-cp311-win_arm64.whl", hash = "sha256:1d22856ffbe153a602df38e4a5464f0b748a54002e0d69ac6d2ad0a197cc99ec"}, + {file = "charset_normalizer-3.4.9-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:45b0cc4e3556cd875e09102988d1ab8356c998b596c9fced84547c8138b487a0"}, + {file = "charset_normalizer-3.4.9-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9b2aff1c7b3884512b9512c3eaadd9bab39fb45042ffaaa1dd08ff2b9f8109d9"}, + {file = "charset_normalizer-3.4.9-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9104ed0bd76a429d46f9ec0dbc9b08ad1d2dcdf2b00a5a0daa1c145329b35b44"}, + {file = "charset_normalizer-3.4.9-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7b86a2b16095d250c6f58b3d9b2eee6f4147754344f3dab0922f7c9bf7d226c9"}, + {file = "charset_normalizer-3.4.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e226f6218febc71f6c1fc2fafb91c226f75bdc1d8fb12d66823716e891608fd"}, + {file = "charset_normalizer-3.4.9-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:90c44bc373b7687f6948b693cceaea1348ae0975d7474746559494468e3c1d84"}, + {file = "charset_normalizer-3.4.9-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cdef90ae47919cae358d8ab15797a800ed41da7aba5d72419fb510729e2ed4b"}, + {file = "charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:60f44ade2cf573dad7a277e6f8ca9a51a21dda572b13bd7d8539bb3cd5dbedde"}, + {file = "charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:a1786910334ed46ab1dd73222f2cd1e05c2c3bb39f6dddb4f8b36fc382058a39"}, + {file = "charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:03d07803992c6c7bbc976327f34b18b6160327fc81cb82c9d504720ac0be3b62"}, + {file = "charset_normalizer-3.4.9-cp312-cp312-win32.whl", hash = "sha256:78841cccf1af7b40f6f716338d50c0902dbe88d9f800b3c973b7a9a0a693a642"}, + {file = "charset_normalizer-3.4.9-cp312-cp312-win_amd64.whl", hash = "sha256:4b3dac63058cc36820b0dd072f89898604e2d39686fe05321729d00d8ac185a0"}, + {file = "charset_normalizer-3.4.9-cp312-cp312-win_arm64.whl", hash = "sha256:78fa18e436a1a0e58dbd7e02fc4473f3f32cceb12df9dfca542d075961c307d2"}, + {file = "charset_normalizer-3.4.9-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:440eede837960000d74978f0eba527be106b5b9aee0daf779d395276ed0b0614"}, + {file = "charset_normalizer-3.4.9-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:21e764fd1e70b6a3e205a0e46f3051701f98a8cb3fad66eeb80e48bb502f8698"}, + {file = "charset_normalizer-3.4.9-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e4fd89cc178bced6ad29cb3e6dd4aa63fa5017c3524dbd0b25998fb64a87cc8b"}, + {file = "charset_normalizer-3.4.9-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bd47ba7fc3ca94896759ea0109775132d3e7ab921fbf54038e1bab2e46c313c9"}, + {file = "charset_normalizer-3.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:84fd18bcc17526fc2b3c1af7d2b9217d32c9c04448c16ec693b9b4f1985c3d33"}, + {file = "charset_normalizer-3.4.9-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:5b10cd92fc5c498b35a8635df6d5a100207f88b63a4dc1de7ef9a548e1e2cd63"}, + {file = "charset_normalizer-3.4.9-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a4fbdde9dd4a9ce5fd52c2b3a347bb50cc89483ef783f1cb00d408c13f7a96c0"}, + {file = "charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:416c229f77e5ea25b3dfd4b582f8d73d7e43c22320302b9ab128a2d3a0b38efe"}, + {file = "charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:75286256590a6320cf106a0d28970d3560aad9ee09aa7b34fb40524792436d35"}, + {file = "charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:69b157c5d3292bcd443faca052f3096f637f1e074b98212a933c074ae23dc3b8"}, + {file = "charset_normalizer-3.4.9-cp313-cp313-win32.whl", hash = "sha256:51307f5c71007673a2bf8232ad973483d281e74cb99c8c5a990af1eefa6277d9"}, + {file = "charset_normalizer-3.4.9-cp313-cp313-win_amd64.whl", hash = "sha256:fe2c7201c642b7c308f1675355ad7ff7b66acfe3541625efe5a3ad38f29d6115"}, + {file = "charset_normalizer-3.4.9-cp313-cp313-win_arm64.whl", hash = "sha256:611057cc5d5c0afc743ba8be6bd828c17e0aaa8643f9d0a9b9bb7dea80eb8012"}, + {file = "charset_normalizer-3.4.9-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:0327fcd59a935777d83410750c50600ee9571af2846f71ce40f25b13da1ef380"}, + {file = "charset_normalizer-3.4.9-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a79d9f4d8001473a30c163556b3c3bfebec837495a412dde78b51672f6134f9"}, + {file = "charset_normalizer-3.4.9-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:33bdcc2a32c0a0e861f60841a512c8acc658c87c2ac59d89e3a46dacf7d866e4"}, + {file = "charset_normalizer-3.4.9-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f840ed6d8ecba8255df8c42b87fadeda98ddfc6eeec05e2dc66e26d46dd6f58a"}, + {file = "charset_normalizer-3.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c25fe15c70c59eb7c5ce8c06a1f3fa1da0ecc5ea1e7a5922c40fd2fa9b0d5046"}, + {file = "charset_normalizer-3.4.9-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:f7fb7d750cfa0a070d2c24e831fd3481019a60dd317ea2b39acbcebc08b6ed81"}, + {file = "charset_normalizer-3.4.9-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4d1c96a7a18b9690a4d46df09e3e3382406ae3213727cd1019ebade1c4a81917"}, + {file = "charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a4cfde78a9f2880208d16a93b795726a3017d5977e08d1e162a7a31322479c41"}, + {file = "charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:d4d6fcde76f94f5cb9e43e9e9a61f16dacefd228cbbf6f1a09bd9b219a92f1a1"}, + {file = "charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:898f0e9068ca27d37f8e83a5b962821df851532e6c4a7d615c1c033f9da6eedf"}, + {file = "charset_normalizer-3.4.9-cp314-cp314-win32.whl", hash = "sha256:c1c948747b03be832dceed96ca815cef7360de9aa19d37c730f8e3f6101aca48"}, + {file = "charset_normalizer-3.4.9-cp314-cp314-win_amd64.whl", hash = "sha256:16b65ea0f2465b6fb52aa22de5eca612aa964ddfec00a912e26f4656cbef890b"}, + {file = "charset_normalizer-3.4.9-cp314-cp314-win_arm64.whl", hash = "sha256:40a126142a56b2dfc0aacbad1de8310cbf60da7656db0e6b16eebd48e3e93519"}, + {file = "charset_normalizer-3.4.9-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:609b3ba8fcc0fb5ab7af00719d0fb6ad0cb518e48e7712d12fd68f1327951198"}, + {file = "charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51447e9aa2684679af07ca5021c3db526e0284347ebf4ffcec1154c3350cfe32"}, + {file = "charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cc1b0fff8ead343dae06305f954eb8468ba0ec1a97881f42489d198e4ce3c632"}, + {file = "charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fa36ec09ef71d158186bc79e359ff5fdd6e7996fe8ab638f00d6b93139ba4fcf"}, + {file = "charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:df115d4d83168fdf2cae48ef1ff6d1cb4c466364e30861b37121de0f3bf1b990"}, + {file = "charset_normalizer-3.4.9-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:f86c6358749bd4fda175388691e3ba8c46e24c5347d0afd20f9b7edfc9faf07d"}, + {file = "charset_normalizer-3.4.9-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:32286a2c8d167e897177b673176c1e3e00d4057caf5d2b64eef9a3666b03018e"}, + {file = "charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:83aed2c10721ddd90f68140685391b50811a880af20654c59af6b6c66c40513c"}, + {file = "charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cd6c3d4b783c556fa00bf540854e42f135e2f256abd29669fcd0da0f2dec79c2"}, + {file = "charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ee2f2a527e3c1a6e6411eb4209642e138b544a2d72fe5d0d76daf77b24063534"}, + {file = "charset_normalizer-3.4.9-cp314-cp314t-win32.whl", hash = "sha256:0d861473f743244d349b50f850d10eb87aeb22bbdcc8e64f79273c94af5a8226"}, + {file = "charset_normalizer-3.4.9-cp314-cp314t-win_amd64.whl", hash = "sha256:9b8e0f3107e2200b76f6054de99016eac3ee6762713587b36baaa7e4bd2ae177"}, + {file = "charset_normalizer-3.4.9-cp314-cp314t-win_arm64.whl", hash = "sha256:19ac87f93086ce37b86e098888555c4b4bc48102279bae3350098c0ed664b501"}, + {file = "charset_normalizer-3.4.9-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:253a4a220747e8b5faf57ec320c4f5efb0cef05f647420bf267143ec15dba10a"}, + {file = "charset_normalizer-3.4.9-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:68ce9f4d6b26d5ccbf7fd4459bf75f74a0a146677ebba80597df60cbdb20e6f4"}, + {file = "charset_normalizer-3.4.9-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:58150c9f9b9a552505912d182ccdf26f6396fb6094816ceebcbb20eecabaed94"}, + {file = "charset_normalizer-3.4.9-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:df7276909358e5635ae203673ab7e509ddd224225a8d6b0790bf13eb2bde1cc5"}, + {file = "charset_normalizer-3.4.9-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3c09a49d6cde137258beb3d551994a2927fd35ad5cf96aed573f61bbd67c5f84"}, + {file = "charset_normalizer-3.4.9-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:231ddcbb35e2ff8973e1365db41fe0572662893b99a05deb183b68ad4c0c8bd4"}, + {file = "charset_normalizer-3.4.9-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:920079c3f7456fa213e0829ed2073aaa727fd39d889ead5b4f35d0de5460d04f"}, + {file = "charset_normalizer-3.4.9-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0fa1aec2d32bcc03c8fa0f6f1712caad1adc38509f31142112e5c9daf5b9c833"}, + {file = "charset_normalizer-3.4.9-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:ad41ba96094304aa090f5a30cb6e4fb3b3f1c264c523394b4c39bbacc4dc92ba"}, + {file = "charset_normalizer-3.4.9-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:43b9e366a31fdd1c87d0eb08f579b4a82b723ea54338f040d6b4e518a026ea29"}, + {file = "charset_normalizer-3.4.9-cp39-cp39-win32.whl", hash = "sha256:93d59d504b230e83c7a843251681959a0b6a9cd76f6e146ce1b8a80eb8739af9"}, + {file = "charset_normalizer-3.4.9-cp39-cp39-win_amd64.whl", hash = "sha256:ddf4af30b417d9fe16481e9b81c27ab2a7cde1ff7ba3e85653b02db7d145dc7b"}, + {file = "charset_normalizer-3.4.9-cp39-cp39-win_arm64.whl", hash = "sha256:476743fe6dfe14a2da12e3ac79125dc84a3b2cf8094369a47a1529b0cd8549fe"}, + {file = "charset_normalizer-3.4.9-py3-none-any.whl", hash = "sha256:68e5f26a1ad57ded6d1cfb85331d1c1a195314756471d97758c48498bb4dcdf5"}, + {file = "charset_normalizer-3.4.9.tar.gz", hash = "sha256:673611bbd43f0810bec0b0f028ddeaaa501190339cac411f347ac76917c3ae7b"}, ] [[package]] @@ -1687,14 +1675,14 @@ zstd = ["backports-zstd (>=1.0.0) ; python_version < \"3.14\""] [[package]] name = "uvicorn" -version = "0.50.2" +version = "0.51.0" description = "The lightning-fast ASGI server." optional = false python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "uvicorn-0.50.2-py3-none-any.whl", hash = "sha256:4ae72a385630bcc17a0adb8290f26c993865e0b43a2114c2aab96420172c056a"}, - {file = "uvicorn-0.50.2.tar.gz", hash = "sha256:b92bf03509b82bcb9d49e7335b4fd364518ad021c2dc18b4e6a2fec8c955a0bb"}, + {file = "uvicorn-0.51.0-py3-none-any.whl", hash = "sha256:5d38af6cd620f2ae3849fb44fd4879e0890aa1febe8d47eb355fb45d93fe6a5b"}, + {file = "uvicorn-0.51.0.tar.gz", hash = "sha256:f6f4b69b657c312f516dd2d268ab9ae6f254b11e4bac504f37b2ab58b24dd0b0"}, ] [package.dependencies] @@ -1703,7 +1691,7 @@ h11 = ">=0.8" typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} [package.extras] -standard = ["colorama (>=0.4) ; sys_platform == \"win32\"", "httptools (>=0.8.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.15.1) ; sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\"", "watchfiles (>=0.20)", "websockets (>=13.0)"] +standard = ["httptools (>=0.8.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.15.1) ; sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\"", "watchfiles (>=0.20)", "websockets (>=13.0)"] [[package]] name = "vcrpy" diff --git a/pyproject.toml b/pyproject.toml index fac58707..a676b7b6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "zscaler-sdk-python" -version = "1.9.36" +version = "1.9.37" description = "Official Python SDK for the Zscaler Products" authors = ["Zscaler, Inc. "] license = "MIT" diff --git a/requirements.txt b/requirements.txt index bf65e7ad..0117bde5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,7 +2,7 @@ aenum==3.1.17 ; python_version >= "3.10" and python_version < "4.0" arrow==1.4.0 ; python_version >= "3.10" and python_version < "4.0" certifi==2026.6.17 ; python_version >= "3.10" and python_version < "4.0" cffi==2.1.0 ; python_version >= "3.10" and python_version < "4.0" and platform_python_implementation != "PyPy" -charset-normalizer==3.4.8 ; python_version >= "3.10" and python_version < "4.0" +charset-normalizer==3.4.9 ; python_version >= "3.10" and python_version < "4.0" cryptography==49.0.0 ; python_version >= "3.10" and python_version < "4.0" idna==3.18 ; python_version >= "3.10" and python_version < "4.0" jmespath==1.1.0 ; python_version >= "3.10" and python_version < "4.0" diff --git a/zscaler/__init__.py b/zscaler/__init__.py index 14fb2820..36ee49b1 100644 --- a/zscaler/__init__.py +++ b/zscaler/__init__.py @@ -29,7 +29,7 @@ __contributors__ = [ "William Guilherme", ] -__version__ = "1.9.36" +__version__ = "1.9.37" from zscaler.oneapi_client import Client as ZscalerClient # noqa diff --git a/zscaler/zpa/models/app_connector_groups.py b/zscaler/zpa/models/app_connector_groups.py index 8db0e5f0..3e27fd69 100644 --- a/zscaler/zpa/models/app_connector_groups.py +++ b/zscaler/zpa/models/app_connector_groups.py @@ -14,899 +14,391 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. """ +from typing import Any, Dict, Optional + from zscaler.oneapi_collection import ZscalerCollection from zscaler.oneapi_object import ZscalerObject -from zscaler.zpa.models import app_connector_groups as app_connector_groups -from zscaler.zpa.models import common as common +from zscaler.zpa.models import app_connectors as app_connectors +from zscaler.zpa.models import server_group as server_group class AppConnectorGroup(ZscalerObject): - """ - A class representing a AppConnectorGroup object. - """ + def __init__(self, config: Optional[Dict[str, Any]] = None) -> None: + """ + Initialize the AppConnectorGroup model based on API response. - def __init__(self, config=None): + Args: + config (dict): A dictionary representing the App Connector Group configuration. + """ super().__init__(config) if config: - self.connectors = ZscalerCollection.form_list(config["connectors"] if "connectors" in config else [], Connector) + self.id = config["id"] if "id" in config else None + self.modified_time = config["modifiedTime"] if "modifiedTime" in config else None + self.creation_time = config["creationTime"] if "creationTime" in config else None + self.modified_by = config["modifiedBy"] if "modifiedBy" in config else None + self.name = config["name"] if "name" in config else None + self.enabled = config["enabled"] if "enabled" in config else True + self.description = config["description"] if "description" in config else None + self.version_profile_id = config["versionProfileId"] if "versionProfileId" in config else None + self.override_version_profile = config["overrideVersionProfile"] if "overrideVersionProfile" in config else None + self.version_profile_name = config["versionProfileName"] if "versionProfileName" in config else None + self.upgrade_priority = config["upgradePriority"] if "upgradePriority" in config else None + self.version_profile_visibility_scope = ( + config["versionProfileVisibilityScope"] if "versionProfileVisibilityScope" in config else None + ) + self.upgrade_time_in_secs = config["upgradeTimeInSecs"] if "upgradeTimeInSecs" in config else None + self.upgrade_day = config["upgradeDay"] if "upgradeDay" in config else None + self.location = config["location"] if "location" in config else None + self.latitude = config["latitude"] if "latitude" in config else None + self.longitude = config["longitude"] if "longitude" in config else None + self.dns_query_type = config["dnsQueryType"] if "dnsQueryType" in config else None self.city = config["city"] if "city" in config else None self.city_country = config["cityCountry"] if "cityCountry" in config else None self.connector_group_type = config["connectorGroupType"] if "connectorGroupType" in config else None self.country_code = config["countryCode"] if "countryCode" in config else None - self.creation_time = config["creationTime"] if "creationTime" in config else None - self.dc_hosting_info = config["dcHostingInfo"] if "dcHostingInfo" in config else None - self.description = config["description"] if "description" in config else None - self.dns_query_type = config["dnsQueryType"] if "dnsQueryType" in config else None - self.enabled = config["enabled"] if "enabled" in config else False self.geo_location_id = config["geoLocationId"] if "geoLocationId" in config else None - self.id = config["id"] if "id" in config else None - self.ip_acl = ZscalerCollection.form_list(config["ipAcl"] if "ipAcl" in config else [], str) - self.latitude = config["latitude"] if "latitude" in config else None - self.location = config["location"] if "location" in config else None - self.longitude = config["longitude"] if "longitude" in config else None - self.modified_by = config["modifiedBy"] if "modifiedBy" in config else None - self.modified_time = config["modifiedTime"] if "modifiedTime" in config else None - self.name = config["name"] if "name" in config else None self.name_without_trim = config["nameWithoutTrim"] if "nameWithoutTrim" in config else None - if "npAssistantGroup" in config: - if isinstance(config["npAssistantGroup"], app_connector_groups.NPAssistantGroup): - self.np_assistant_group = config["npAssistantGroup"] - elif config["npAssistantGroup"] is not None: - self.np_assistant_group = app_connector_groups.NPAssistantGroup(config["npAssistantGroup"]) - else: - self.np_assistant_group = None - else: - self.np_assistant_group = None - self.override_version_profile = config["overrideVersionProfile"] if "overrideVersionProfile" in config else False - self.pra_enabled = config["praEnabled"] if "praEnabled" in config else False - self.read_only = config["readOnly"] if "readOnly" in config else False - self.restriction_type = config["restrictionType"] if "restrictionType" in config else None - self.microtenant_id = config["microtenantId"] if "microtenantId" in config else None - self.microtenant_name = config["microtenantName"] if "microtenantName" in config else None - self.selected_upgrade_priority = config["selectedUpgradePriority"] if "selectedUpgradePriority" in config else None - self.server_groups = ZscalerCollection.form_list( - config["serverGroups"] if "serverGroups" in config else [], AppServerGroup - ) - self.lss_app_connector_group = config["lssAppConnectorGroup"] if "lssAppConnectorGroup" in config else False self.enrollment_cert_id = config["enrollmentCertId"] if "enrollmentCertId" in config else None - self.private_cloud_id = config["privateCloudId"] if "privateCloudId" in config else None - self.site_name = config["siteName"] if "siteName" in config else None self.tcp_quick_ack_app = config["tcpQuickAckApp"] if "tcpQuickAckApp" in config else False self.tcp_quick_ack_assistant = config["tcpQuickAckAssistant"] if "tcpQuickAckAssistant" in config else False self.tcp_quick_ack_read_assistant = ( config["tcpQuickAckReadAssistant"] if "tcpQuickAckReadAssistant" in config else False ) - self.upgrade_day = config["upgradeDay"] if "upgradeDay" in config else None - self.upgrade_priorities = ZscalerCollection.form_list( - config["upgradePriorities"] if "upgradePriorities" in config else [], str - ) - self.upgrade_priority = config["upgradePriority"] if "upgradePriority" in config else None - self.upgrade_time_in_secs = config["upgradeTimeInSecs"] if "upgradeTimeInSecs" in config else None + self.pra_enabled = config["praEnabled"] if "praEnabled" in config else False self.use_in_dr_mode = config["useInDrMode"] if "useInDrMode" in config else False + self.waf_disabled = config["wafDisabled"] if "wafDisabled" in config else False + self.microtenant_id = config["microtenantId"] if "microtenantId" in config else None + self.microtenant_name = config["microtenantName"] if "microtenantName" in config else None + self.site_id = config["siteId"] if "siteId" in config else None + self.site_name = config["siteName"] if "siteName" in config else None + self.private_cloud_id = config["privateCloudId"] if "privateCloudId" in config else None + self.lss_app_connector_group = config["lssAppConnectorGroup"] if "lssAppConnectorGroup" in config else False + self.read_only = config["readOnly"] if "readOnly" in config else None + self.restriction_type = config["restrictionType"] if "restrictionType" in config else None + self.zscaler_managed = config["zscalerManaged"] if "zscalerManaged" in config else None + self.dc_hosting_info = config["dcHostingInfo"] if "dcHostingInfo" in config else None + + self.ip_acl = ZscalerCollection.form_list(config["ipAcl"] if "ipAcl" in config else [], str) + + self.server_groups = ZscalerCollection.form_list( + config["serverGroups"] if "serverGroups" in config else [], server_group.ServerGroup + ) + self.connectors = ZscalerCollection.form_list( + config["connectors"] if "connectors" in config else [], app_connectors.AppConnectorController + ) + if "npAssistantGroup" in config: + if isinstance(config["npAssistantGroup"], NPAssistantGroup): + self.np_assistant_group = config["npAssistantGroup"] + elif config["npAssistantGroup"] is not None: + self.np_assistant_group = NPAssistantGroup(config["npAssistantGroup"]) + else: + self.np_assistant_group = None + else: + self.np_assistant_group = None + if "version" in config: - if isinstance(config["version"], common.ComponentLevelVersion): + if isinstance(config["version"], app_connectors.ComponentLevelVersion): self.version = config["version"] elif config["version"] is not None: - self.version = common.ComponentLevelVersion(config["version"]) + self.version = app_connectors.ComponentLevelVersion(config["version"]) else: self.version = None else: self.version = None - self.version_profile_id = config["versionProfileId"] if "versionProfileId" in config else None - self.version_profile_name = config["versionProfileName"] if "versionProfileName" in config else None - self.version_profile_visibility_scope = ( - config["versionProfileVisibilityScope"] if "versionProfileVisibilityScope" in config else None - ) - self.waf_disabled = config["wafDisabled"] if "wafDisabled" in config else False - self.zscaler_managed = config["zscalerManaged"] if "zscalerManaged" in config else False else: - self.connectors = [] - self.city = None - self.city_country = None - self.connector_group_type = None - self.country_code = None + self.id = None + self.ip_acl = None + self.modified_time = None self.creation_time = None - self.dc_hosting_info = None + self.modified_by = None + self.name = None + self.enabled = None self.description = None - self.dns_query_type = None - self.enabled = False - self.geo_location_id = None - self.id = None - self.ip_acl = [] - self.latitude = None + self.version_profile_id = None + self.override_version_profile = None + self.version_profile_name = None + self.upgrade_priority = None + self.version_profile_visibility_scope = None + self.upgrade_time_in_secs = None + self.upgrade_day = None self.location = None + self.latitude = None self.longitude = None - self.modified_by = None - self.modified_time = None - self.name = None + self.dns_query_type = None + self.connector_group_type = None + self.city = None + self.city_country = None + self.country_code = None + self.geo_location_id = None self.name_without_trim = None - self.np_assistant_group = None - self.override_version_profile = False - self.pra_enabled = False - self.read_only = False - self.restriction_type = None - self.microtenant_id = None - self.microtenant_name = None - self.selected_upgrade_priority = None - self.server_groups = [] - self.lss_app_connector_group = False self.enrollment_cert_id = None - self.private_cloud_id = None - self.site_name = None self.tcp_quick_ack_app = False self.tcp_quick_ack_assistant = False self.tcp_quick_ack_read_assistant = False - self.upgrade_day = None - self.upgrade_priorities = [] - self.upgrade_priority = None - self.upgrade_time_in_secs = None + self.pra_enabled = False self.use_in_dr_mode = False - self.version = None - self.version_profile_id = None - self.version_profile_name = None - self.version_profile_visibility_scope = None self.waf_disabled = False - self.zscaler_managed = False + self.microtenant_id = None + self.microtenant_name = None + self.site_id = None + self.site_name = None + self.lss_app_connector_group = None + self.read_only = None + self.restriction_type = None + self.zscaler_managed = None + self.dc_hosting_info = None + self.private_cloud_id = None + self.server_groups = [] + self.connectors = [] + self.np_assistant_group = None + self.version = None - def request_format(self): - """ - Return the object as a dictionary in the format expected for API requests. - """ + def request_format(self) -> Dict[str, Any]: parent_req_format = super().request_format() current_obj_format = { - "connectors": [item.request_format() for item in (self.connectors or [])], - "city": self.city, - "cityCountry": self.city_country, - "connectorGroupType": self.connector_group_type, - "countryCode": self.country_code, - "creationTime": self.creation_time, - "dcHostingInfo": self.dc_hosting_info, - "description": self.description, - "dnsQueryType": self.dns_query_type, - "enabled": self.enabled, - "geoLocationId": self.geo_location_id, "id": self.id, "ipAcl": self.ip_acl, - "latitude": self.latitude, - "location": self.location, - "longitude": self.longitude, - "modifiedBy": self.modified_by, "modifiedTime": self.modified_time, + "creationTime": self.creation_time, + "modifiedBy": self.modified_by, "name": self.name, - "nameWithoutTrim": self.name_without_trim, - "npAssistantGroup": self.np_assistant_group, + "enabled": self.enabled, + "description": self.description, + "versionProfileId": self.version_profile_id, "overrideVersionProfile": self.override_version_profile, - "praEnabled": self.pra_enabled, - "readOnly": self.read_only, - "restrictionType": self.restriction_type, - "microtenantId": self.microtenant_id, - "microtenantName": self.microtenant_name, - "selectedUpgradePriority": self.selected_upgrade_priority, - "serverGroups": [item.request_format() for item in (self.server_groups or [])], - "lssAppConnectorGroup": self.lss_app_connector_group, + "versionProfileName": self.version_profile_name, + "upgradePriority": self.upgrade_priority, + "versionProfileVisibilityScope": self.version_profile_visibility_scope, + "upgradeTimeInSecs": self.upgrade_time_in_secs, + "upgradeDay": self.upgrade_day, + "location": self.location, + "latitude": self.latitude, + "longitude": self.longitude, + "dnsQueryType": self.dns_query_type, + "connectorGroupType": self.connector_group_type, + "city": self.city, + "cityCountry": self.city_country, + "countryCode": self.country_code, + "geoLocationId": self.geo_location_id, + "nameWithoutTrim": self.name_without_trim, "enrollmentCertId": self.enrollment_cert_id, - "privateCloudId": self.private_cloud_id, - "siteName": self.site_name, "tcpQuickAckApp": self.tcp_quick_ack_app, "tcpQuickAckAssistant": self.tcp_quick_ack_assistant, "tcpQuickAckReadAssistant": self.tcp_quick_ack_read_assistant, - "upgradeDay": self.upgrade_day, - "upgradePriorities": self.upgrade_priorities, - "upgradePriority": self.upgrade_priority, - "upgradeTimeInSecs": self.upgrade_time_in_secs, + "praEnabled": self.pra_enabled, "useInDrMode": self.use_in_dr_mode, - "version": self.version, - "versionProfileId": self.version_profile_id, - "versionProfileName": self.version_profile_name, - "versionProfileVisibilityScope": self.version_profile_visibility_scope, "wafDisabled": self.waf_disabled, + "microtenantId": self.microtenant_id, + "microtenantName": self.microtenant_name, + "siteId": self.site_id, + "siteName": self.site_name, + "lssAppConnectorGroup": self.lss_app_connector_group, + "readOnly": self.read_only, + "restrictionType": self.restriction_type, "zscalerManaged": self.zscaler_managed, + "dcHostingInfo": self.dc_hosting_info, + "privateCloudId": self.private_cloud_id, + "connectors": self.connectors, + "serverGroups": [server_group.request_format() for server_group in self.server_groups], + "npAssistantGroup": self.np_assistant_group, + "version": self.version, } parent_req_format.update(current_obj_format) return parent_req_format -class Connector(ZscalerObject): - """ - A class representing a Connector object. - """ - - def __init__(self, config=None): +class NPAssistantGroup(ZscalerObject): + def __init__(self, config: Optional[Dict[str, Any]] = None) -> None: + """ + Initialize the NPAssistantGroup model based on API response. + """ super().__init__(config) if config: - self.application_start_time = config["applicationStartTime"] if "applicationStartTime" in config else None + self.id = config["id"] if "id" in config else None self.app_connector_group_id = config["appConnectorGroupId"] if "appConnectorGroupId" in config else None - self.app_connector_group_name = config["appConnectorGroupName"] if "appConnectorGroupName" in config else None - if "assistantVersion" in config: - if isinstance(config["assistantVersion"], AssistantVersion): - self.assistant_version = config["assistantVersion"] - elif config["assistantVersion"] is not None: - self.assistant_version = AssistantVersion(config["assistantVersion"]) - else: - self.assistant_version = None - else: - self.assistant_version = None - self.connector_type = config["connectorType"] if "connectorType" in config else None - self.control_channel_status = config["controlChannelStatus"] if "controlChannelStatus" in config else None self.creation_time = config["creationTime"] if "creationTime" in config else None - self.ctrl_broker_name = config["ctrlBrokerName"] if "ctrlBrokerName" in config else None - self.current_version = config["currentVersion"] if "currentVersion" in config else None - self.description = config["description"] if "description" in config else None - self.enabled = config["enabled"] if "enabled" in config else False - self.enrollment_time = config["enrollmentTime"] if "enrollmentTime" in config else None - self.expected_sarge_version = config["expectedSargeVersion"] if "expectedSargeVersion" in config else None - self.expected_upgrade_time = config["expectedUpgradeTime"] if "expectedUpgradeTime" in config else None - self.expected_version = config["expectedVersion"] if "expectedVersion" in config else None - self.fingerprint = config["fingerprint"] if "fingerprint" in config else None - self.id = config["id"] if "id" in config else None - self.ip_acl = ZscalerCollection.form_list(config["ipAcl"] if "ipAcl" in config else [], str) - self.ip_addr_setting = ZscalerCollection.form_list( - config["ip_addr_setting"] if "ip_addr_setting" in config else [], IpAddrSetting - ) - self.issued_cert_id = config["issuedCertId"] if "issuedCertId" in config else None - self.last_broker_connect_time = config["lastBrokerConnectTime"] if "lastBrokerConnectTime" in config else None - self.last_broker_connect_time_duration = ( - config["lastBrokerConnectTimeDuration"] if "lastBrokerConnectTimeDuration" in config else None - ) - self.last_broker_disconnect_time = ( - config["lastBrokerDisconnectTime"] if "lastBrokerDisconnectTime" in config else None - ) - self.last_broker_disconnect_time_duration = ( - config["lastBrokerDisconnectTimeDuration"] if "lastBrokerDisconnectTimeDuration" in config else None - ) - self.last_o_s_upgrade_time = config["lastOSUpgradeTime"] if "lastOSUpgradeTime" in config else None - self.last_sarge_upgrade_time = config["lastSargeUpgradeTime"] if "lastSargeUpgradeTime" in config else None - self.last_upgrade_time = config["lastUpgradeTime"] if "lastUpgradeTime" in config else None - self.latitude = config["latitude"] if "latitude" in config else None - self.location = config["location"] if "location" in config else None - self.longitude = config["longitude"] if "longitude" in config else None - self.modified_by = config["modifiedBy"] if "modifiedBy" in config else None self.modified_time = config["modifiedTime"] if "modifiedTime" in config else None - self.name = config["name"] if "name" in config else None - self.name_without_trim = config["nameWithoutTrim"] if "nameWithoutTrim" in config else None - self.provisioning_key_id = config["provisioningKeyId"] if "provisioningKeyId" in config else None - self.provisioning_key_name = config["provisioningKeyName"] if "provisioningKeyName" in config else None - if "npAssistant" in config: - if isinstance(config["npAssistant"], NPAssistant): - self.np_assistant = config["npAssistant"] - elif config["npAssistant"] is not None: - self.np_assistant = NPAssistant(config["npAssistant"]) - else: - self.np_assistant = None - else: - self.np_assistant = None - self.os_upgrade_enabled = config["osUpgradeEnabled"] if "osUpgradeEnabled" in config else False - self.os_upgrade_fail_reason_code = ( - config["osUpgradeFailReasonCode"] if "osUpgradeFailReasonCode" in config else None + self.modified_by = config["modifiedBy"] if "modifiedBy" in config else None + self.mtu = config["mtu"] if "mtu" in config else None + self.np_assistant_count = config["npAssistantCount"] if "npAssistantCount" in config else None + self.redundant_mode_enabled = config["redundantModeEnabled"] if "redundantModeEnabled" in config else None + self.is_advertise_lan_segment_locally_disabled = ( + config["isAdvertiseLanSegmentLocallyDisabled"] if "isAdvertiseLanSegmentLocallyDisabled" in config else None ) - self.os_upgrade_status = config["osUpgradeStatus"] if "osUpgradeStatus" in config else None - self.platform = config["platform"] if "platform" in config else None - self.platform_detail = config["platformDetail"] if "platformDetail" in config else None - self.platform_version = config["platformVersion"] if "platformVersion" in config else None - self.previous_version = config["previousVersion"] if "previousVersion" in config else None - self.private_ip = config["privateIp"] if "privateIp" in config else None - self.public_ip = config["publicIp"] if "publicIp" in config else None - self.read_only = config["readOnly"] if "readOnly" in config else False - self.restriction_type = config["restrictionType"] if "restrictionType" in config else None - self.runtime_os = config["runtimeOS"] if "runtimeOS" in config else None - self.sarge_upgrade_attempt = config["sargeUpgradeAttempt"] if "sargeUpgradeAttempt" in config else None - self.sarge_upgrade_status = config["sargeUpgradeStatus"] if "sargeUpgradeStatus" in config else None - self.sarge_version = config["sargeVersion"] if "sargeVersion" in config else None - self.microtenant_id = config["microtenantId"] if "microtenantId" in config else None - self.microtenant_name = config["microtenantName"] if "microtenantName" in config else None - self.enrollment_cert = config["enrollmentCert"] if "enrollmentCert" in config else None - if "ssh_setting" in config: - if isinstance(config["ssh_setting"], SshSetting): - self.ssh_setting = config["ssh_setting"] - elif config["ssh_setting"] is not None: - self.ssh_setting = SshSetting(config["ssh_setting"]) - else: - self.ssh_setting = None - else: - self.ssh_setting = None - self.upgrade_attempt = config["upgradeAttempt"] if "upgradeAttempt" in config else None - self.upgrade_status = config["upgradeStatus"] if "upgradeStatus" in config else None - if "version" in config: - if isinstance(config["version"], common.ComponentLevelVersion): - self.version = config["version"] - elif config["version"] is not None: - self.version = common.ComponentLevelVersion(config["version"]) - else: - self.version = None - else: - self.version = None - self.zpn_sub_module_upgrade_list = ZscalerCollection.form_list( - config["zpnSubModuleUpgradeList"] if "zpnSubModuleUpgradeList" in config else [], ZpnSubModuleUpgrade + self.external_routers = ZscalerCollection.form_list( + config["externalRouters"] if "externalRouters" in config else [], NPExternalRouters ) - self.zscaler_managed = config["zscalerManaged"] if "zscalerManaged" in config else False + self.lan_subnets = ZscalerCollection.form_list(config["lanSubnets"] if "lanSubnets" in config else [], LanSubnet) else: - self.application_start_time = None + self.id = None self.app_connector_group_id = None - self.app_connector_group_name = None - self.assistant_version = None - self.connector_type = None - self.control_channel_status = None self.creation_time = None - self.ctrl_broker_name = None - self.current_version = None - self.description = None - self.enabled = False - self.enrollment_time = None - self.expected_sarge_version = None - self.expected_upgrade_time = None - self.expected_version = None - self.fingerprint = None - self.id = None - self.ip_acl = [] - self.ip_addr_setting = [] - self.issued_cert_id = None - self.last_broker_connect_time = None - self.last_broker_connect_time_duration = None - self.last_broker_disconnect_time = None - self.last_broker_disconnect_time_duration = None - self.last_o_s_upgrade_time = None - self.last_sarge_upgrade_time = None - self.last_upgrade_time = None - self.latitude = None - self.location = None - self.longitude = None - self.modified_by = None self.modified_time = None - self.name = None - self.name_without_trim = None - self.provisioning_key_id = None - self.provisioning_key_name = None - self.np_assistant = None - self.os_upgrade_enabled = False - self.os_upgrade_fail_reason_code = None - self.os_upgrade_status = None - self.platform = None - self.platform_detail = None - self.platform_version = None - self.previous_version = None - self.private_ip = None - self.public_ip = None - self.read_only = False - self.restriction_type = None - self.runtime_os = None - self.sarge_upgrade_attempt = None - self.sarge_upgrade_status = None - self.sarge_version = None - self.microtenant_id = None - self.microtenant_name = None - self.enrollment_cert = None - self.ssh_setting = None - self.upgrade_attempt = None - self.upgrade_status = None - self.version = None - self.zpn_sub_module_upgrade_list = [] - self.zscaler_managed = False - - def request_format(self): - """ - Return the object as a dictionary in the format expected for API requests. - """ + self.modified_by = None + self.mtu = None + self.np_assistant_count = None + self.redundant_mode_enabled = None + self.is_advertise_lan_segment_locally_disabled = None + self.lan_subnets = [] + self.external_routers = [] + + def request_format(self) -> Dict[str, Any]: parent_req_format = super().request_format() current_obj_format = { - "applicationStartTime": self.application_start_time, + "id": self.id, "appConnectorGroupId": self.app_connector_group_id, - "appConnectorGroupName": self.app_connector_group_name, - "assistantVersion": self.assistant_version, - "connectorType": self.connector_type, - "controlChannelStatus": self.control_channel_status, "creationTime": self.creation_time, - "ctrlBrokerName": self.ctrl_broker_name, - "currentVersion": self.current_version, - "description": self.description, - "enabled": self.enabled, - "enrollmentTime": self.enrollment_time, - "expectedSargeVersion": self.expected_sarge_version, - "expectedUpgradeTime": self.expected_upgrade_time, - "expectedVersion": self.expected_version, - "fingerprint": self.fingerprint, - "id": self.id, - "ipAcl": self.ip_acl, - "ip_addr_setting": [item.request_format() for item in (self.ip_addr_setting or [])], - "issuedCertId": self.issued_cert_id, - "lastBrokerConnectTime": self.last_broker_connect_time, - "lastBrokerConnectTimeDuration": self.last_broker_connect_time_duration, - "lastBrokerDisconnectTime": self.last_broker_disconnect_time, - "lastBrokerDisconnectTimeDuration": self.last_broker_disconnect_time_duration, - "lastOSUpgradeTime": self.last_o_s_upgrade_time, - "lastSargeUpgradeTime": self.last_sarge_upgrade_time, - "lastUpgradeTime": self.last_upgrade_time, - "latitude": self.latitude, - "location": self.location, - "longitude": self.longitude, - "modifiedBy": self.modified_by, "modifiedTime": self.modified_time, - "name": self.name, - "nameWithoutTrim": self.name_without_trim, - "provisioningKeyId": self.provisioning_key_id, - "provisioningKeyName": self.provisioning_key_name, - "npAssistant": self.np_assistant, - "osUpgradeEnabled": self.os_upgrade_enabled, - "osUpgradeFailReasonCode": self.os_upgrade_fail_reason_code, - "osUpgradeStatus": self.os_upgrade_status, - "platform": self.platform, - "platformDetail": self.platform_detail, - "platformVersion": self.platform_version, - "previousVersion": self.previous_version, - "privateIp": self.private_ip, - "publicIp": self.public_ip, - "readOnly": self.read_only, - "restrictionType": self.restriction_type, - "runtimeOS": self.runtime_os, - "sargeUpgradeAttempt": self.sarge_upgrade_attempt, - "sargeUpgradeStatus": self.sarge_upgrade_status, - "sargeVersion": self.sarge_version, - "microtenantId": self.microtenant_id, - "microtenantName": self.microtenant_name, - "enrollmentCert": self.enrollment_cert, - "ssh_setting": self.ssh_setting, - "upgradeAttempt": self.upgrade_attempt, - "upgradeStatus": self.upgrade_status, - "version": self.version, - "zpnSubModuleUpgradeList": [item.request_format() for item in (self.zpn_sub_module_upgrade_list or [])], - "zscalerManaged": self.zscaler_managed, + "modifiedBy": self.modified_by, + "mtu": self.mtu, + "npAssistantCount": self.np_assistant_count, + "redundantModeEnabled": self.redundant_mode_enabled, + "isAdvertiseLanSegmentLocallyDisabled": self.is_advertise_lan_segment_locally_disabled, + "lanSubnets": [subnet.request_format() for subnet in self.lan_subnets], + "externalRouters": [router.request_format() for router in (self.external_routers or [])], } parent_req_format.update(current_obj_format) return parent_req_format -class AppServerGroup(ZscalerObject): - """ - A class representing a AppServerGroup object. - """ - - def __init__(self, config=None): +class LanSubnet(ZscalerObject): + def __init__(self, config: Optional[Dict[str, Any]] = None) -> None: + """ + Initialize the LanSubnet model based on API response. + """ super().__init__(config) if config: - self.config_space = config["configSpace"] if "configSpace" in config else None - self.creation_time = config["creationTime"] if "creationTime" in config else None - self.description = config["description"] if "description" in config else None - self.enabled = config["enabled"] if "enabled" in config else False - self.extranet_enabled = config["extranetEnabled"] if "extranetEnabled" in config else False self.id = config["id"] if "id" in config else None - self.dynamic_discovery = config["dynamicDiscovery"] if "dynamicDiscovery" in config else False - self.modified_by = config["modifiedBy"] if "modifiedBy" in config else None + self.creation_time = config["creationTime"] if "creationTime" in config else None self.modified_time = config["modifiedTime"] if "modifiedTime" in config else None + self.modified_by = config["modifiedBy"] if "modifiedBy" in config else None self.name = config["name"] if "name" in config else None self.name_without_trim = config["nameWithoutTrim"] if "nameWithoutTrim" in config else None - self.passive = config["passive"] if "passive" in config else False - self.read_only = config["readOnly"] if "readOnly" in config else False - self.restriction_type = config["restrictionType"] if "restrictionType" in config else None - self.microtenant_id = config["microtenantId"] if "microtenantId" in config else None - self.microtenant_name = config["microtenantName"] if "microtenantName" in config else None - self.weight = config["weight"] if "weight" in config else None - if "zpnErId" in config: - if isinstance(config["zpnErId"], ZpnExtranet): - self.zpn_er_id = config["zpnErId"] - elif config["zpnErId"] is not None: - self.zpn_er_id = ZpnExtranet(config["zpnErId"]) - else: - self.zpn_er_id = None - else: - self.zpn_er_id = None - self.zscaler_managed = config["zscalerManaged"] if "zscalerManaged" in config else False + self.app_connector_group_id = config["appConnectorGroupId"] if "appConnectorGroupId" in config else None + self.assistant_group_ids = ZscalerCollection.form_list( + config["assistantGroupIds"] if "assistantGroupIds" in config else [], str + ) + self.description = config["description"] if "description" in config else None + self.subnet = config["subnet"] if "subnet" in config else None + self.lan_subnets = ZscalerCollection.form_list(config["lanSubnets"] if "lanSubnets" in config else [], str) + self.old_audit_string = config["oldAuditString"] if "oldAuditString" in config else None + self.npserver_ips = ZscalerCollection.form_list(config["npserverips"] if "npserverips" in config else [], str) + self.fqdns = ZscalerCollection.form_list(config["fqdns"] if "fqdns" in config else [], str) + self.np_dns_ns_record = NPDnsNsRecord(config["npDnsNsRecord"] if "npDnsNsRecord" in config else None) else: - self.config_space = None - self.creation_time = None - self.description = None - self.enabled = False - self.extranet_enabled = False self.id = None - self.dynamic_discovery = False - self.modified_by = None + self.creation_time = None self.modified_time = None + self.modified_by = None self.name = None self.name_without_trim = None - self.passive = False - self.read_only = False - self.restriction_type = None - self.microtenant_id = None - self.microtenant_name = None - self.weight = None - self.zpn_er_id = None - self.zscaler_managed = False - - def request_format(self): - """ - Return the object as a dictionary in the format expected for API requests. - """ + self.app_connector_group_id = None + self.description = None + self.subnet = None + self.lan_subnets = [] + self.old_audit_string = None + self.npserver_ips = [] + self.fqdns = [] + self.assistant_group_ids = [] + self.np_dns_ns_record = NPDnsNsRecord() + + def request_format(self) -> Dict[str, Any]: parent_req_format = super().request_format() current_obj_format = { - "configSpace": self.config_space, - "creationTime": self.creation_time, - "description": self.description, - "enabled": self.enabled, - "extranetEnabled": self.extranet_enabled, "id": self.id, - "dynamicDiscovery": self.dynamic_discovery, - "modifiedBy": self.modified_by, + "creationTime": self.creation_time, "modifiedTime": self.modified_time, + "modifiedBy": self.modified_by, "name": self.name, "nameWithoutTrim": self.name_without_trim, - "passive": self.passive, - "readOnly": self.read_only, - "restrictionType": self.restriction_type, - "microtenantId": self.microtenant_id, - "microtenantName": self.microtenant_name, - "weight": self.weight, - "zpnErId": self.zpn_er_id, - "zscalerManaged": self.zscaler_managed, - } - parent_req_format.update(current_obj_format) - return parent_req_format - - -class AssistantVersion(ZscalerObject): - """ - A class representing a AssistantVersion object. - """ - - def __init__(self, config=None): - super().__init__(config) - if config: - self.application_start_time = config["applicationStartTime"] if "applicationStartTime" in config else None - self.app_connector_group_id = config["appConnectorGroupId"] if "appConnectorGroupId" in config else None - self.broker_id = config["brokerId"] if "brokerId" in config else None - self.connector_type = config["connectorType"] if "connectorType" in config else None - self.creation_time = config["creationTime"] if "creationTime" in config else None - self.ctrl_channel_status = config["ctrlChannelStatus"] if "ctrlChannelStatus" in config else None - self.current_version = config["currentVersion"] if "currentVersion" in config else None - self.disable_auto_update = config["disableAutoUpdate"] if "disableAutoUpdate" in config else False - self.expected_sarge_version = config["expectedSargeVersion"] if "expectedSargeVersion" in config else None - self.expected_version = config["expectedVersion"] if "expectedVersion" in config else None - self.id = config["id"] if "id" in config else None - self.last_broker_connect_time = config["lastBrokerConnectTime"] if "lastBrokerConnectTime" in config else None - self.last_broker_disconnect_time = ( - config["lastBrokerDisconnectTime"] if "lastBrokerDisconnectTime" in config else None - ) - self.last_o_s_upgrade_time = config["lastOSUpgradeTime"] if "lastOSUpgradeTime" in config else None - self.last_sarge_upgrade_time = config["lastSargeUpgradeTime"] if "lastSargeUpgradeTime" in config else None - self.last_upgraded_time = config["lastUpgradedTime"] if "lastUpgradedTime" in config else None - self.latitude = config["latitude"] if "latitude" in config else None - self.lone_warrior = config["loneWarrior"] if "loneWarrior" in config else False - self.longitude = config["longitude"] if "longitude" in config else None - self.modified_by = config["modifiedBy"] if "modifiedBy" in config else None - self.modified_time = config["modifiedTime"] if "modifiedTime" in config else None - self.mtunnel_id = config["mtunnelId"] if "mtunnelId" in config else None - self.os_upgrade_enabled = config["osUpgradeEnabled"] if "osUpgradeEnabled" in config else False - self.os_upgrade_fail_reason_code = ( - config["osUpgradeFailReasonCode"] if "osUpgradeFailReasonCode" in config else None - ) - self.os_upgrade_status = config["osUpgradeStatus"] if "osUpgradeStatus" in config else None - self.platform = config["platform"] if "platform" in config else None - self.platform_detail = config["platformDetail"] if "platformDetail" in config else None - self.platform_version = config["platformVersion"] if "platformVersion" in config else None - self.previous_sarge_version = config["previousSargeVersion"] if "previousSargeVersion" in config else None - self.previous_version = config["previousVersion"] if "previousVersion" in config else None - self.private_ip = config["privateIp"] if "privateIp" in config else None - self.public_ip = config["publicIp"] if "publicIp" in config else None - self.restart_time_in_sec = config["restartTimeInSec"] if "restartTimeInSec" in config else None - self.runtime_os = config["runtimeOS"] if "runtimeOS" in config else None - self.sarge_upgrade_attempt = config["sargeUpgradeAttempt"] if "sargeUpgradeAttempt" in config else None - self.sarge_upgrade_status = config["sargeUpgradeStatus"] if "sargeUpgradeStatus" in config else None - self.sarge_version = config["sargeVersion"] if "sargeVersion" in config else None - self.system_start_time = config["systemStartTime"] if "systemStartTime" in config else None - self.upgrade_attempt = config["upgradeAttempt"] if "upgradeAttempt" in config else None - self.upgrade_now_once = config["upgradeNowOnce"] if "upgradeNowOnce" in config else False - self.upgrade_status = config["upgradeStatus"] if "upgradeStatus" in config else None - self.zpn_sub_module_upgrade = ZscalerCollection.form_list( - config["zpnSubModuleUpgrade"] if "zpnSubModuleUpgrade" in config else [], ZpnSubModuleUpgrade - ) - else: - self.application_start_time = None - self.app_connector_group_id = None - self.broker_id = None - self.connector_type = None - self.creation_time = None - self.ctrl_channel_status = None - self.current_version = None - self.disable_auto_update = False - self.expected_sarge_version = None - self.expected_version = None - self.id = None - self.last_broker_connect_time = None - self.last_broker_disconnect_time = None - self.last_o_s_upgrade_time = None - self.last_sarge_upgrade_time = None - self.last_upgraded_time = None - self.latitude = None - self.lone_warrior = False - self.longitude = None - self.modified_by = None - self.modified_time = None - self.mtunnel_id = None - self.os_upgrade_enabled = False - self.os_upgrade_fail_reason_code = None - self.os_upgrade_status = None - self.platform = None - self.platform_detail = None - self.platform_version = None - self.previous_sarge_version = None - self.previous_version = None - self.private_ip = None - self.public_ip = None - self.restart_time_in_sec = None - self.runtime_os = None - self.sarge_upgrade_attempt = None - self.sarge_upgrade_status = None - self.sarge_version = None - self.system_start_time = None - self.upgrade_attempt = None - self.upgrade_now_once = False - self.upgrade_status = None - self.zpn_sub_module_upgrade = [] - - def request_format(self): - """ - Return the object as a dictionary in the format expected for API requests. - """ - parent_req_format = super().request_format() - current_obj_format = { - "applicationStartTime": self.application_start_time, "appConnectorGroupId": self.app_connector_group_id, - "brokerId": self.broker_id, - "connectorType": self.connector_type, - "creationTime": self.creation_time, - "ctrlChannelStatus": self.ctrl_channel_status, - "currentVersion": self.current_version, - "disableAutoUpdate": self.disable_auto_update, - "expectedSargeVersion": self.expected_sarge_version, - "expectedVersion": self.expected_version, - "id": self.id, - "lastBrokerConnectTime": self.last_broker_connect_time, - "lastBrokerDisconnectTime": self.last_broker_disconnect_time, - "lastOSUpgradeTime": self.last_o_s_upgrade_time, - "lastSargeUpgradeTime": self.last_sarge_upgrade_time, - "lastUpgradedTime": self.last_upgraded_time, - "latitude": self.latitude, - "loneWarrior": self.lone_warrior, - "longitude": self.longitude, - "modifiedBy": self.modified_by, - "modifiedTime": self.modified_time, - "mtunnelId": self.mtunnel_id, - "osUpgradeEnabled": self.os_upgrade_enabled, - "osUpgradeFailReasonCode": self.os_upgrade_fail_reason_code, - "osUpgradeStatus": self.os_upgrade_status, - "platform": self.platform, - "platformDetail": self.platform_detail, - "platformVersion": self.platform_version, - "previousSargeVersion": self.previous_sarge_version, - "previousVersion": self.previous_version, - "privateIp": self.private_ip, - "publicIp": self.public_ip, - "restartTimeInSec": self.restart_time_in_sec, - "runtimeOS": self.runtime_os, - "sargeUpgradeAttempt": self.sarge_upgrade_attempt, - "sargeUpgradeStatus": self.sarge_upgrade_status, - "sargeVersion": self.sarge_version, - "systemStartTime": self.system_start_time, - "upgradeAttempt": self.upgrade_attempt, - "upgradeNowOnce": self.upgrade_now_once, - "upgradeStatus": self.upgrade_status, - "zpnSubModuleUpgrade": [item.request_format() for item in (self.zpn_sub_module_upgrade or [])], + "assistantGroupIds": self.assistant_group_ids, + "description": self.description, + "oldAuditString": self.old_audit_string, + "subnet": self.subnet, + "lanSubnets": self.lan_subnets, + "npserverips": self.npserver_ips, + "fqdns": self.fqdns, + "npDnsNsRecord": self.np_dns_ns_record.request_format(), } parent_req_format.update(current_obj_format) return parent_req_format -class IpAddrSetting(ZscalerObject): - """ - A class representing a IpAddrSetting object. - """ - - def __init__(self, config=None): - super().__init__(config) - if config: - self.interface = config["interface"] if "interface" in config else None - self.ip_addr_cidr = config["ip_addr_cidr"] if "ip_addr_cidr" in config else None - else: - self.interface = None - self.ip_addr_cidr = None - - def request_format(self): +class NPDnsNsRecord(ZscalerObject): + def __init__(self, config: Optional[Dict[str, Any]] = None) -> None: """ - Return the object as a dictionary in the format expected for API requests. + Initialize the NPDnsNsRecord model based on API response. """ - parent_req_format = super().request_format() - current_obj_format = { - "interface": self.interface, - "ip_addr_cidr": self.ip_addr_cidr, - } - parent_req_format.update(current_obj_format) - return parent_req_format - - -class NPAssistant(ZscalerObject): - """ - A class representing a NPAssistant object. - """ - - def __init__(self, config=None): super().__init__(config) if config: - self.connector_id = config["connectorId"] if "connectorId" in config else None - self.config_override = config["configOverride"] if "configOverride" in config else None - self.connector_state = config["connectorState"] if "connectorState" in config else None - self.creation_time = config["creationTime"] if "creationTime" in config else None - self.force_reload_config = config["forceReloadConfig"] if "forceReloadConfig" in config else False - self.gateway_listener_port = config["gatewayListenerPort"] if "gatewayListenerPort" in config else None self.id = config["id"] if "id" in config else None - self.local_router_id = config["localRouterId"] if "localRouterId" in config else None - self.modified_by = config["modifiedBy"] if "modifiedBy" in config else None + self.creation_time = config["creationTime"] if "creationTime" in config else None self.modified_time = config["modifiedTime"] if "modifiedTime" in config else None - self.override_mode = config["overrideMode"] if "overrideMode" in config else False - self.public_key = config["publicKey"] if "publicKey" in config else None - self.public_key_expiry = config["publicKeyExpiry"] if "publicKeyExpiry" in config else None - self.redundant_mode_enabled = config["redundantModeEnabled"] if "redundantModeEnabled" in config else False + self.modified_by = config["modifiedBy"] if "modifiedBy" in config else None + self.name = config["name"] if "name" in config else None + self.name_without_trim = config["nameWithoutTrim"] if "nameWithoutTrim" in config else None + self.fqdn = ZscalerCollection.form_list(config["fqdn"] if "fqdn" in config else [], str) + self.nameserver_ips = ZscalerCollection.form_list( + config["nameserverIps"] if "nameserverIps" in config else [], str + ) + else: - self.connector_id = None - self.config_override = None - self.connector_state = None - self.creation_time = None - self.force_reload_config = False - self.gateway_listener_port = None self.id = None - self.local_router_id = None - self.modified_by = None + self.creation_time = None self.modified_time = None - self.override_mode = False - self.public_key = None - self.public_key_expiry = None - self.redundant_mode_enabled = False + self.modified_by = None + self.name = None + self.name_without_trim = None + self.fqdn = [] + self.nameserver_ips = [] - def request_format(self): - """ - Return the object as a dictionary in the format expected for API requests. - """ + def request_format(self) -> Dict[str, Any]: parent_req_format = super().request_format() current_obj_format = { - "connectorId": self.connector_id, - "configOverride": self.config_override, - "connectorState": self.connector_state, - "creationTime": self.creation_time, - "forceReloadConfig": self.force_reload_config, - "gatewayListenerPort": self.gateway_listener_port, "id": self.id, - "localRouterId": self.local_router_id, - "modifiedBy": self.modified_by, + "creationTime": self.creation_time, "modifiedTime": self.modified_time, - "overrideMode": self.override_mode, - "publicKey": self.public_key, - "publicKeyExpiry": self.public_key_expiry, - "redundantModeEnabled": self.redundant_mode_enabled, - } - parent_req_format.update(current_obj_format) - return parent_req_format - - -class SshSetting(ZscalerObject): - """ - A class representing a SshSetting object. - """ - - def __init__(self, config=None): - super().__init__(config) - if config: - self.status = config["status"] if "status" in config else None - else: - self.status = None - - def request_format(self): - """ - Return the object as a dictionary in the format expected for API requests. - """ - parent_req_format = super().request_format() - current_obj_format = { - "status": self.status, + "modifiedBy": self.modified_by, + "name": self.name, + "nameWithoutTrim": self.name_without_trim, + "fqdn": self.fqdn, + "nameserverIps": self.nameserver_ips, } parent_req_format.update(current_obj_format) return parent_req_format -class ZpnSubModuleUpgrade(ZscalerObject): - """ - A class representing a ZpnSubModuleUpgrade object. - """ - - def __init__(self, config=None): - super().__init__(config) - if config: - self.creation_time = config["creationTime"] if "creationTime" in config else None - self.current_version = config["currentVersion"] if "currentVersion" in config else None - self.entity_gid = config["entityGid"] if "entityGid" in config else None - self.entity_type = config["entityType"] if "entityType" in config else None - self.expected_version = config["expectedVersion"] if "expectedVersion" in config else None - self.id = config["id"] if "id" in config else None - self.modified_by = config["modifiedBy"] if "modifiedBy" in config else None - self.modified_time = config["modifiedTime"] if "modifiedTime" in config else None - self.previous_version = config["previousVersion"] if "previousVersion" in config else None - self.role = config["role"] if "role" in config else None - self.upgrade_status = config["upgradeStatus"] if "upgradeStatus" in config else None - self.upgrade_time = config["upgradeTime"] if "upgradeTime" in config else None - else: - self.creation_time = None - self.current_version = None - self.entity_gid = None - self.entity_type = None - self.expected_version = None - self.id = None - self.modified_by = None - self.modified_time = None - self.previous_version = None - self.role = None - self.upgrade_status = None - self.upgrade_time = None - - def request_format(self): +class NPExternalRouters(ZscalerObject): + def __init__(self, config: Optional[Dict[str, Any]] = None) -> None: """ - Return the object as a dictionary in the format expected for API requests. + Initialize the NP External Routers model based on API response. """ - parent_req_format = super().request_format() - current_obj_format = { - "creationTime": self.creation_time, - "currentVersion": self.current_version, - "entityGid": self.entity_gid, - "entityType": self.entity_type, - "expectedVersion": self.expected_version, - "id": self.id, - "modifiedBy": self.modified_by, - "modifiedTime": self.modified_time, - "previousVersion": self.previous_version, - "role": self.role, - "upgradeStatus": self.upgrade_status, - "upgradeTime": self.upgrade_time, - } - parent_req_format.update(current_obj_format) - return parent_req_format - - -class ZpnExtranet(ZscalerObject): - """ - A class representing a ZpnExtranet object. - """ - - def __init__(self, config=None): super().__init__(config) if config: - self.creation_time = config["creationTime"] if "creationTime" in config else None - self.id = config["id"] if "id" in config else None - self.modified_by = config["modifiedBy"] if "modifiedBy" in config else None - self.modified_time = config["modifiedTime"] if "modifiedTime" in config else None - self.zia_cloud = config["ziaCloud"] if "ziaCloud" in config else None - self.zia_er_id = config["ziaErId"] if "ziaErId" in config else None - self.zia_er_name = config["ziaErName"] if "ziaErName" in config else None - self.zia_modified_time = config["ziaModifiedTime"] if "ziaModifiedTime" in config else None - self.zia_org_id = config["ziaOrgId"] if "ziaOrgId" in config else None + self.bgp_hold_time_interval = config["bgpHoldTimeInterval"] if "bgpHoldTimeInterval" in config else None + self.bgp_keep_alive_interval = config["bgpKeepAliveInterval"] if "bgpKeepAliveInterval" in config else None + self.enable_multi_hop = config["enableMultiHop"] if "enableMultiHop" in config else None + self.external_router_id = config["externalRouterId"] if "externalRouterId" in config else None + self.external_router_name = config["externalRouterName"] if "externalRouterName" in config else None + self.source_interface = config["sourceInterface"] if "sourceInterface" in config else None else: - self.creation_time = None - self.id = None - self.modified_by = None - self.modified_time = None - self.zia_cloud = None - self.zia_er_id = None - self.zia_er_name = None - self.zia_modified_time = None - self.zia_org_id = None - - def request_format(self): - """ - Return the object as a dictionary in the format expected for API requests. - """ + self.bgp_hold_time_interval = None + self.bgp_keep_alive_interval = None + self.enable_multi_hop = None + self.external_router_id = None + self.external_router_name = None + self.source_interface = None + + def request_format(self) -> Dict[str, Any]: parent_req_format = super().request_format() current_obj_format = { - "creationTime": self.creation_time, - "id": self.id, - "modifiedBy": self.modified_by, - "modifiedTime": self.modified_time, - "ziaCloud": self.zia_cloud, - "ziaErId": self.zia_er_id, - "ziaErName": self.zia_er_name, - "ziaModifiedTime": self.zia_modified_time, - "ziaOrgId": self.zia_org_id, + "bgpHoldTimeInterval": self.bgp_hold_time_interval, + "bgpKeepAliveInterval": self.bgp_keep_alive_interval, + "enableMultiHop": self.enable_multi_hop, + "externalRouterId": self.external_router_id, + "externalRouterName": self.external_router_name, + "sourceInterface": self.source_interface, } parent_req_format.update(current_obj_format) return parent_req_format diff --git a/zscaler/zpa/models/app_connectors.py b/zscaler/zpa/models/app_connectors.py index c8adbe3e..1c69891f 100644 --- a/zscaler/zpa/models/app_connectors.py +++ b/zscaler/zpa/models/app_connectors.py @@ -16,6 +16,7 @@ from typing import Any, Dict, Optional +from zscaler.oneapi_collection import ZscalerCollection from zscaler.oneapi_object import ZscalerObject @@ -42,7 +43,7 @@ def __init__(self, config: Optional[Dict[str, Any]] = None) -> None: self.previous_version = config["previousVersion"] if "previousVersion" in config else None self.expected_version = config["expectedVersion"] if "expectedVersion" in config else None self.upgrade_status = config["upgradeStatus"] if "upgradeStatus" in config else None - self.upgrade_attempt = config["upgradeAttempt"] if "upgradeAttempt" in config else 0 + self.upgrade_attempt = config["upgradeAttempt"] if "upgradeAttempt" in config else None self.control_channel_status = config["controlChannelStatus"] if "controlChannelStatus" in config else None self.private_ip = config["privateIp"] if "privateIp" in config else None self.public_ip = config["publicIp"] if "publicIp" in config else None @@ -58,29 +59,91 @@ def __init__(self, config: Optional[Dict[str, Any]] = None) -> None: self.runtime_os = config["runtimeOS"] if "runtimeOS" in config else None self.sarge_version = config["sargeVersion"] if "sargeVersion" in config else None self.issued_cert_id = config["issuedCertId"] if "issuedCertId" in config else None - self.creation_time = config["creationTime"] if "creationTime" in config else 0 - self.modified_time = config["modifiedTime"] if "modifiedTime" in config else 0 - self.modified_by = config["modifiedBy"] if "modifiedBy" in config else 0 - self.last_broker_connect_time = config["lastBrokerConnectTime"] if "lastBrokerConnectTime" in config else 0 + self.creation_time = config["creationTime"] if "creationTime" in config else None + self.modified_time = config["modifiedTime"] if "modifiedTime" in config else None + self.modified_by = config["modifiedBy"] if "modifiedBy" in config else None + self.last_broker_connect_time = config["lastBrokerConnectTime"] if "lastBrokerConnectTime" in config else None self.last_broker_connect_time_duration = ( config["lastBrokerConnectTimeDuration"] if "lastBrokerConnectTimeDuration" in config else None ) self.last_broker_disconnect_time = ( - config["lastBrokerDisconnectTime"] if "lastBrokerDisconnectTime" in config else 0 + config["lastBrokerDisconnectTime"] if "lastBrokerDisconnectTime" in config else None ) self.last_broker_disconnect_time_duration = ( config["lastBrokerDisconnectTimeDuration"] if "lastBrokerDisconnectTimeDuration" in config else None ) - self.last_upgrade_time = config["lastUpgradeTime"] if "lastUpgradeTime" in config else 0 - self.expected_upgrade_time = config["expectedUpgradeTime"] if "expectedUpgradeTime" in config else 0 + self.last_upgrade_time = config["lastUpgradeTime"] if "lastUpgradeTime" in config else None + self.expected_upgrade_time = config["expectedUpgradeTime"] if "expectedUpgradeTime" in config else None self.ctrl_broker_name = config["ctrlBrokerName"] if "ctrlBrokerName" in config else None self.microtenant_id = config["microtenantId"] if "microtenantId" in config else None self.microtenant_name = config["microtenantName"] if "microtenantName" in config else None self.enrollment_cert = config["enrollmentCert"] if "enrollmentCert" in config else None - self.application_start_time = config["applicationStartTime"] if "applicationStartTime" in config else 0 + self.application_start_time = config["applicationStartTime"] if "applicationStartTime" in config else None self.ip_acl = config["ipAcl"] if "ipAcl" in config else [] - self.zpn_sub_module_upgrade_list = config["zpnSubModuleUpgradeList"] if "zpnSubModuleUpgradeList" in config else [] - self.assistant_version = config["assistantVersion"] if "assistantVersion" in config else {} + self.zpn_sub_module_upgrade_list = ZscalerCollection.form_list( + config["zpnSubModuleUpgradeList"] if "zpnSubModuleUpgradeList" in config else [], ZPNSubModuleUpgradeList + ) + self.connector_type = config["connectorType"] if "connectorType" in config else None + self.enrollment_time = config["enrollmentTime"] if "enrollmentTime" in config else None + self.expected_sarge_version = config["expectedSargeVersion"] if "expectedSargeVersion" in config else None + self.last_os_upgrade_time = config["lastOSUpgradeTime"] if "lastOSUpgradeTime" in config else None + self.last_sarge_upgrade_time = config["lastSargeUpgradeTime"] if "lastSargeUpgradeTime" in config else None + self.name_without_trim = config["nameWithoutTrim"] if "nameWithoutTrim" in config else None + self.os_upgrade_enabled = config["osUpgradeEnabled"] if "osUpgradeEnabled" in config else None + self.os_upgrade_fail_reason_code = ( + config["osUpgradeFailReasonCode"] if "osUpgradeFailReasonCode" in config else None + ) + self.os_upgrade_status = config["osUpgradeStatus"] if "osUpgradeStatus" in config else None + self.platform_version = config["platformVersion"] if "platformVersion" in config else None + self.read_only = config["readOnly"] if "readOnly" in config else None + self.restriction_type = config["restrictionType"] if "restrictionType" in config else None + self.sarge_upgrade_attempt = config["sargeUpgradeAttempt"] if "sargeUpgradeAttempt" in config else None + self.sarge_upgrade_status = config["sargeUpgradeStatus"] if "sargeUpgradeStatus" in config else None + self.zscaler_managed = config["zscalerManaged"] if "zscalerManaged" in config else None + self.ip_addr_setting = ZscalerCollection.form_list( + config["ip_addr_setting"] if "ip_addr_setting" in config else [], IpAddrSetting + ) + + if "assistantVersion" in config: + if isinstance(config["assistantVersion"], AssistantVersion): + self.assistant_version = config["assistantVersion"] + elif config["assistantVersion"] is not None: + self.assistant_version = AssistantVersion(config["assistantVersion"]) + else: + self.assistant_version = None + else: + self.assistant_version = None + + if "npAssistant" in config: + if isinstance(config["npAssistant"], NPAssistant): + self.np_assistant = config["npAssistant"] + elif config["npAssistant"] is not None: + self.np_assistant = NPAssistant(config["npAssistant"]) + else: + self.np_assistant = None + else: + self.np_assistant = None + + if "version" in config: + if isinstance(config["version"], ComponentLevelVersion): + self.version = config["version"] + elif config["version"] is not None: + self.version = ComponentLevelVersion(config["version"]) + else: + self.version = None + else: + self.version = None + + if "ssh_setting" in config: + if isinstance(config["ssh_setting"], SshSetting): + self.ssh_setting = config["ssh_setting"] + elif config["ssh_setting"] is not None: + self.ssh_setting = SshSetting(config["ssh_setting"]) + else: + self.ssh_setting = None + else: + self.ssh_setting = None + else: self.id = None self.name = None @@ -91,7 +154,7 @@ def __init__(self, config: Optional[Dict[str, Any]] = None) -> None: self.previous_version = None self.expected_version = None self.upgrade_status = None - self.upgrade_attempt = 0 + self.upgrade_attempt = None self.control_channel_status = None self.private_ip = None self.public_ip = None @@ -107,23 +170,42 @@ def __init__(self, config: Optional[Dict[str, Any]] = None) -> None: self.runtime_os = None self.sarge_version = None self.issued_cert_id = None - self.creation_time = 0 - self.modified_time = 0 - self.modified_by = 0 - self.last_broker_connect_time = 0 + self.creation_time = None + self.modified_time = None + self.modified_by = None + self.last_broker_connect_time = None self.last_broker_connect_time_duration = None - self.last_broker_disconnect_time = 0 + self.last_broker_disconnect_time = None self.last_broker_disconnect_time_duration = None - self.last_upgrade_time = 0 - self.expected_upgrade_time = 0 + self.last_upgrade_time = None + self.expected_upgrade_time = None self.ctrl_broker_name = None self.microtenant_id = None self.microtenant_name = None self.enrollment_cert = None - self.application_start_time = 0 + self.application_start_time = None + self.assistant_version = None + self.ssh_setting = None self.ip_acl = [] self.zpn_sub_module_upgrade_list = [] - self.assistant_version = {} + self.connector_type = None + self.enrollment_time = None + self.expected_sarge_version = None + self.last_os_upgrade_time = None + self.last_sarge_upgrade_time = None + self.name_without_trim = None + self.os_upgrade_enabled = None + self.os_upgrade_fail_reason_code = None + self.os_upgrade_status = None + self.platform_version = None + self.read_only = None + self.restriction_type = None + self.sarge_upgrade_attempt = None + self.sarge_upgrade_status = None + self.zscaler_managed = None + self.ip_addr_setting = [] + self.np_assistant = None + self.version = None def request_format(self) -> Dict[str, Any]: """ @@ -171,8 +253,366 @@ def request_format(self) -> Dict[str, Any]: "enrollmentCert": self.enrollment_cert, "applicationStartTime": self.application_start_time, "ipAcl": self.ip_acl, + "ssh_setting": self.ssh_setting, "zpnSubModuleUpgradeList": self.zpn_sub_module_upgrade_list, "assistantVersion": self.assistant_version, + "connectorType": self.connector_type, + "enrollmentTime": self.enrollment_time, + "expectedSargeVersion": self.expected_sarge_version, + "lastOSUpgradeTime": self.last_os_upgrade_time, + "lastSargeUpgradeTime": self.last_sarge_upgrade_time, + "nameWithoutTrim": self.name_without_trim, + "osUpgradeEnabled": self.os_upgrade_enabled, + "osUpgradeFailReasonCode": self.os_upgrade_fail_reason_code, + "osUpgradeStatus": self.os_upgrade_status, + "platformVersion": self.platform_version, + "readOnly": self.read_only, + "restrictionType": self.restriction_type, + "sargeUpgradeAttempt": self.sarge_upgrade_attempt, + "sargeUpgradeStatus": self.sarge_upgrade_status, + "zscalerManaged": self.zscaler_managed, + "ip_addr_setting": self.ip_addr_setting, + "npAssistant": self.np_assistant, + "version": self.version, + } + parent_req_format.update(current_obj_format) + return parent_req_format + + +class AssistantVersion(ZscalerObject): + def __init__(self, config: Optional[Dict[str, Any]] = None) -> None: + """ + Initialize the Assistant Version model based on API response. + """ + super().__init__(config) + if config: + self.application_start_time = config["applicationStartTime"] if "applicationStartTime" in config else None + self.app_connector_group_id = config["appConnectorGroupId"] if "appConnectorGroupId" in config else None + self.broker_id = config["brokerId"] if "brokerId" in config else None + self.connector_type = config["connectorType"] if "connectorType" in config else None + self.creation_time = config["creationTime"] if "creationTime" in config else None + self.ctrl_channel_status = config["ctrlChannelStatus"] if "ctrlChannelStatus" in config else None + self.current_version = config["currentVersion"] if "currentVersion" in config else None + self.disable_auto_update = config["disableAutoUpdate"] if "disableAutoUpdate" in config else None + self.expected_sarge_version = config["expectedSargeVersion"] if "expectedSargeVersion" in config else None + self.expected_version = config["expectedVersion"] if "expectedVersion" in config else None + self.id = config["id"] if "id" in config else None + self.last_broker_connect_time = config["lastBrokerConnectTime"] if "lastBrokerConnectTime" in config else None + self.last_broker_disconnect_time = ( + config["lastBrokerDisconnectTime"] if "lastBrokerDisconnectTime" in config else None + ) + self.last_os_upgrade_time = config["lastOSUpgradeTime"] if "lastOSUpgradeTime" in config else None + self.last_sarge_upgrade_time = config["lastSargeUpgradeTime"] if "lastSargeUpgradeTime" in config else None + self.last_upgraded_time = config["lastUpgradedTime"] if "lastUpgradedTime" in config else None + self.latitude = config["latitude"] if "latitude" in config else None + self.lone_warrior = config["loneWarrior"] if "loneWarrior" in config else None + self.longitude = config["longitude"] if "longitude" in config else None + self.modified_by = config["modifiedBy"] if "modifiedBy" in config else None + self.modified_time = config["modifiedTime"] if "modifiedTime" in config else None + self.mtunnel_id = config["mtunnelId"] if "mtunnelId" in config else None + self.os_upgrade_enabled = config["osUpgradeEnabled"] if "osUpgradeEnabled" in config else None + self.os_upgrade_fail_reason_code = ( + config["osUpgradeFailReasonCode"] if "osUpgradeFailReasonCode" in config else None + ) + self.os_upgrade_status = config["osUpgradeStatus"] if "osUpgradeStatus" in config else None + self.platform = config["platform"] if "platform" in config else None + self.platform_detail = config["platformDetail"] if "platformDetail" in config else None + self.platform_version = config["platformVersion"] if "platformVersion" in config else None + self.previous_sarge_version = config["previousSargeVersion"] if "previousSargeVersion" in config else None + self.previous_version = config["previousVersion"] if "previousVersion" in config else None + self.private_ip = config["privateIp"] if "privateIp" in config else None + self.public_ip = config["publicIp"] if "publicIp" in config else None + self.restart_time_in_sec = config["restartTimeInSec"] if "restartTimeInSec" in config else None + self.runtime_os = config["runtimeOS"] if "runtimeOS" in config else None + self.sarge_upgrade_attempt = config["sargeUpgradeAttempt"] if "sargeUpgradeAttempt" in config else None + self.sarge_upgrade_status = config["sargeUpgradeStatus"] if "sargeUpgradeStatus" in config else None + self.sarge_version = config["sargeVersion"] if "sargeVersion" in config else None + self.system_start_time = config["systemStartTime"] if "systemStartTime" in config else None + self.upgrade_attempt = config["upgradeAttempt"] if "upgradeAttempt" in config else None + self.upgrade_now_once = config["upgradeNowOnce"] if "upgradeNowOnce" in config else None + self.upgrade_status = config["upgradeStatus"] if "upgradeStatus" in config else None + self.zpn_sub_module_upgrade = ZscalerCollection.form_list( + config["zpnSubModuleUpgrade"] if "zpnSubModuleUpgrade" in config else [], ZPNSubModuleUpgradeList + ) + else: + self.application_start_time = None + self.app_connector_group_id = None + self.broker_id = None + self.connector_type = None + self.creation_time = None + self.ctrl_channel_status = None + self.current_version = None + self.disable_auto_update = None + self.expected_sarge_version = None + self.expected_version = None + self.id = None + self.last_broker_connect_time = None + self.last_broker_disconnect_time = None + self.last_os_upgrade_time = None + self.last_sarge_upgrade_time = None + self.last_upgraded_time = None + self.latitude = None + self.lone_warrior = None + self.longitude = None + self.modified_by = None + self.modified_time = None + self.mtunnel_id = None + self.os_upgrade_enabled = None + self.os_upgrade_fail_reason_code = None + self.os_upgrade_status = None + self.platform = None + self.platform_detail = None + self.platform_version = None + self.previous_sarge_version = None + self.previous_version = None + self.private_ip = None + self.public_ip = None + self.restart_time_in_sec = None + self.runtime_os = None + self.sarge_upgrade_attempt = None + self.sarge_upgrade_status = None + self.sarge_version = None + self.system_start_time = None + self.upgrade_attempt = None + self.upgrade_now_once = None + self.upgrade_status = None + self.zpn_sub_module_upgrade = [] + + def request_format(self) -> Dict[str, Any]: + parent_req_format = super().request_format() + current_obj_format = { + "applicationStartTime": self.application_start_time, + "appConnectorGroupId": self.app_connector_group_id, + "brokerId": self.broker_id, + "connectorType": self.connector_type, + "creationTime": self.creation_time, + "ctrlChannelStatus": self.ctrl_channel_status, + "currentVersion": self.current_version, + "disableAutoUpdate": self.disable_auto_update, + "expectedSargeVersion": self.expected_sarge_version, + "expectedVersion": self.expected_version, + "id": self.id, + "lastBrokerConnectTime": self.last_broker_connect_time, + "lastBrokerDisconnectTime": self.last_broker_disconnect_time, + "lastOSUpgradeTime": self.last_os_upgrade_time, + "lastSargeUpgradeTime": self.last_sarge_upgrade_time, + "lastUpgradedTime": self.last_upgraded_time, + "latitude": self.latitude, + "loneWarrior": self.lone_warrior, + "longitude": self.longitude, + "modifiedBy": self.modified_by, + "modifiedTime": self.modified_time, + "mtunnelId": self.mtunnel_id, + "osUpgradeEnabled": self.os_upgrade_enabled, + "osUpgradeFailReasonCode": self.os_upgrade_fail_reason_code, + "osUpgradeStatus": self.os_upgrade_status, + "platform": self.platform, + "platformDetail": self.platform_detail, + "platformVersion": self.platform_version, + "previousSargeVersion": self.previous_sarge_version, + "previousVersion": self.previous_version, + "privateIp": self.private_ip, + "publicIp": self.public_ip, + "restartTimeInSec": self.restart_time_in_sec, + "runtimeOS": self.runtime_os, + "sargeUpgradeAttempt": self.sarge_upgrade_attempt, + "sargeUpgradeStatus": self.sarge_upgrade_status, + "sargeVersion": self.sarge_version, + "systemStartTime": self.system_start_time, + "upgradeAttempt": self.upgrade_attempt, + "upgradeNowOnce": self.upgrade_now_once, + "upgradeStatus": self.upgrade_status, + "zpnSubModuleUpgrade": self.zpn_sub_module_upgrade, + } + parent_req_format.update(current_obj_format) + return parent_req_format + + +class NPAssistant(ZscalerObject): + def __init__(self, config: Optional[Dict[str, Any]] = None) -> None: + """ + Initialize the NP Assistant model based on API response. + """ + super().__init__(config) + if config: + self.connector_id = config["connectorId"] if "connectorId" in config else None + self.config_override = config["configOverride"] if "configOverride" in config else None + self.connector_state = config["connectorState"] if "connectorState" in config else None + self.creation_time = config["creationTime"] if "creationTime" in config else None + self.force_reload_config = config["forceReloadConfig"] if "forceReloadConfig" in config else None + self.gateway_listener_port = config["gatewayListenerPort"] if "gatewayListenerPort" in config else None + self.id = config["id"] if "id" in config else None + self.local_router_id = config["localRouterId"] if "localRouterId" in config else None + self.modified_by = config["modifiedBy"] if "modifiedBy" in config else None + self.modified_time = config["modifiedTime"] if "modifiedTime" in config else None + self.override_mode = config["overrideMode"] if "overrideMode" in config else None + self.public_key = config["publicKey"] if "publicKey" in config else None + self.public_key_expiry = config["publicKeyExpiry"] if "publicKeyExpiry" in config else None + self.redundant_mode_enabled = config["redundantModeEnabled"] if "redundantModeEnabled" in config else None + else: + self.connector_id = None + self.config_override = None + self.connector_state = None + self.creation_time = None + self.force_reload_config = None + self.gateway_listener_port = None + self.id = None + self.local_router_id = None + self.modified_by = None + self.modified_time = None + self.override_mode = None + self.public_key = None + self.public_key_expiry = None + self.redundant_mode_enabled = None + + def request_format(self) -> Dict[str, Any]: + parent_req_format = super().request_format() + current_obj_format = { + "connectorId": self.connector_id, + "configOverride": self.config_override, + "connectorState": self.connector_state, + "creationTime": self.creation_time, + "forceReloadConfig": self.force_reload_config, + "gatewayListenerPort": self.gateway_listener_port, + "id": self.id, + "localRouterId": self.local_router_id, + "modifiedBy": self.modified_by, + "modifiedTime": self.modified_time, + "overrideMode": self.override_mode, + "publicKey": self.public_key, + "publicKeyExpiry": self.public_key_expiry, + "redundantModeEnabled": self.redundant_mode_enabled, + } + parent_req_format.update(current_obj_format) + return parent_req_format + + +class ComponentLevelVersion(ZscalerObject): + def __init__(self, config: Optional[Dict[str, Any]] = None) -> None: + """ + Initialize the Assistant Version model based on API response. + """ + super().__init__(config) + if config: + self.child_version = config["childVersion"] if "childVersion" in config else None + self.latest_platform = config["latestPlatform"] if "latestPlatform" in config else None + self.platform = config["platform"] if "platform" in config else None + self.sarge_version = config["sargeVersion"] if "sargeVersion" in config else None + self.version_profile_name = config["versionProfileName"] if "versionProfileName" in config else None + self.version_profile_gid = config["version_profile_gid"] if "version_profile_gid" in config else None + else: + self.child_version = None + self.latest_platform = None + self.platform = None + self.sarge_version = None + self.version_profile_name = None + self.version_profile_gid = None + + def request_format(self) -> Dict[str, Any]: + parent_req_format = super().request_format() + current_obj_format = { + "childVersion": self.child_version, + "latestPlatform": self.latest_platform, + "platform": self.platform, + "sargeVersion": self.sarge_version, + "versionProfileName": self.version_profile_name, + "version_profile_gid": self.version_profile_gid, + } + parent_req_format.update(current_obj_format) + return parent_req_format + + +class ZPNSubModuleUpgradeList(ZscalerObject): + def __init__(self, config: Optional[Dict[str, Any]] = None) -> None: + """ + Initialize the ZPN Sub Module Upgrade List model based on API response. + """ + super().__init__(config) + if config: + self.creation_time = config["creationTime"] if "creationTime" in config else None + self.current_version = config["currentVersion"] if "currentVersion" in config else None + self.entity_gid = config["entityGid"] if "entityGid" in config else None + self.entity_type = config["entityType"] if "entityType" in config else None + self.expected_version = config["expectedVersion"] if "expectedVersion" in config else None + self.id = config["id"] if "id" in config else None + self.modified_by = config["modifiedBy"] if "modifiedBy" in config else None + self.modified_time = config["modifiedTime"] if "modifiedTime" in config else None + self.previous_version = config["previousVersion"] if "previousVersion" in config else None + self.role = config["role"] if "role" in config else None + self.upgrade_status = config["upgradeStatus"] if "upgradeStatus" in config else None + self.upgrade_time = config["upgradeTime"] if "upgradeTime" in config else None + else: + self.creation_time = None + self.current_version = None + self.entity_gid = None + self.entity_type = None + self.expected_version = None + self.id = None + self.modified_by = None + self.modified_time = None + self.previous_version = None + self.role = None + self.upgrade_status = None + self.upgrade_time = None + + def request_format(self) -> Dict[str, Any]: + parent_req_format = super().request_format() + current_obj_format = { + "id": self.id, + "creationTime": self.creation_time, + "currentVersion": self.current_version, + "entityGid": self.entity_gid, + "entityType": self.entity_type, + "expectedVersion": self.expected_version, + "modifiedBy": self.modified_by, + "modifiedTime": self.modified_time, + "previousVersion": self.previous_version, + "role": self.role, + "upgradeStatus": self.upgrade_status, + "upgradeTime": self.upgrade_time, + } + parent_req_format.update(current_obj_format) + return parent_req_format + + +class IpAddrSetting(ZscalerObject): + def __init__(self, config: Optional[Dict[str, Any]] = None) -> None: + """ + Initialize the IpAddrSetting model based on API response. + """ + super().__init__(config) + if config: + self.interface = config["interface"] if "interface" in config else None + self.ip_addr_cidr = config["ip_addr_cidr"] if "ip_addr_cidr" in config else None + else: + self.interface = None + self.ip_addr_cidr = None + + def request_format(self) -> Dict[str, Any]: + parent_req_format = super().request_format() + current_obj_format = { + "interface": self.interface, + "ip_addr_cidr": self.ip_addr_cidr, + } + parent_req_format.update(current_obj_format) + return parent_req_format + + +class SshSetting(ZscalerObject): + def __init__(self, config: Optional[Dict[str, Any]] = None) -> None: + """ + Initialize the SshSetting model based on API response. + """ + super().__init__(config) + if config: + self.status = config["status"] if "status" in config else None + else: + self.status = None + + def request_format(self) -> Dict[str, Any]: + parent_req_format = super().request_format() + current_obj_format = { + "status": self.status, } parent_req_format.update(current_obj_format) return parent_req_format