From 7ca323d02e1d510de64dacd2b92573410ab86bd1 Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Tue, 15 Aug 2023 11:19:55 -0400 Subject: [PATCH 01/31] Poetry init and install dependencies --- .github/actions/poetry-ci | 27 +++ poetry.lock | 351 ++++++++++++++++++++++++++++++++++++++ pyproject.toml | 41 +++++ 3 files changed, 419 insertions(+) create mode 100644 .github/actions/poetry-ci create mode 100644 poetry.lock diff --git a/.github/actions/poetry-ci b/.github/actions/poetry-ci new file mode 100644 index 000000000..1211104ea --- /dev/null +++ b/.github/actions/poetry-ci @@ -0,0 +1,27 @@ +name: Poetry CI + +on: + push: + branches: [ your-branch ] + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: 3.8 + + - name: Install Poetry + run: curl -sSL https://install.python-poetry.org | python - + + - name: Install Dependencies + run: poetry install + + - name: Run Tests + run: poetry run pytest # or your test command + diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 000000000..34e986b1b --- /dev/null +++ b/poetry.lock @@ -0,0 +1,351 @@ +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. + +[[package]] +name = "certifi" +version = "2023.7.22" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.2.0" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, + {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, +] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "dnspython" +version = "2.4.2" +description = "DNS toolkit" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "dnspython-2.4.2-py3-none-any.whl", hash = "sha256:57c6fbaaeaaf39c891292012060beb141791735dbb4004798328fc2c467402d8"}, + {file = "dnspython-2.4.2.tar.gz", hash = "sha256:8dcfae8c7460a2f84b4072e26f1c9f4101ca20c071649cb7c34e8b6a93d58984"}, +] + +[package.extras] +dnssec = ["cryptography (>=2.6,<42.0)"] +doh = ["h2 (>=4.1.0)", "httpcore (>=0.17.3)", "httpx (>=0.24.1)"] +doq = ["aioquic (>=0.9.20)"] +idna = ["idna (>=2.1,<4.0)"] +trio = ["trio (>=0.14,<0.23)"] +wmi = ["wmi (>=1.5.1,<2.0.0)"] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] + +[[package]] +name = "loguru" +version = "0.5.0" +description = "Python logging made (stupidly) simple" +optional = false +python-versions = ">=3.5" +files = [ + {file = "loguru-0.5.0-py3-none-any.whl", hash = "sha256:4688d9e1f31d70e1ec7ccce5305967bc28f377eb1048d009108c11faebe05bcf"}, + {file = "loguru-0.5.0.tar.gz", hash = "sha256:1e0e6ff59be5e22f863d909ca989e34bb14c21b374f6af45281e603d003dbb96"}, +] + +[package.dependencies] +colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} +win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} + +[package.extras] +dev = ["Sphinx (>=2.2.1)", "black (>=19.3b0)", "codecov (>=2.0.15)", "colorama (>=0.3.4)", "flake8 (>=3.7.7)", "isort (>=4.3.20)", "pytest (>=4.6.2)", "pytest-cov (>=2.7.1)", "sphinx-autobuild (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)", "tox (>=3.9.0)", "tox-travis (>=0.12)"] + +[[package]] +name = "numpy" +version = "1.25.2" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-1.25.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db3ccc4e37a6873045580d413fe79b68e47a681af8db2e046f1dacfa11f86eb3"}, + {file = "numpy-1.25.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:90319e4f002795ccfc9050110bbbaa16c944b1c37c0baeea43c5fb881693ae1f"}, + {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4a913e29b418d096e696ddd422d8a5d13ffba4ea91f9f60440a3b759b0187"}, + {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f08f2e037bba04e707eebf4bc934f1972a315c883a9e0ebfa8a7756eabf9e357"}, + {file = "numpy-1.25.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bec1e7213c7cb00d67093247f8c4db156fd03075f49876957dca4711306d39c9"}, + {file = "numpy-1.25.2-cp310-cp310-win32.whl", hash = "sha256:7dc869c0c75988e1c693d0e2d5b26034644399dd929bc049db55395b1379e044"}, + {file = "numpy-1.25.2-cp310-cp310-win_amd64.whl", hash = "sha256:834b386f2b8210dca38c71a6e0f4fd6922f7d3fcff935dbe3a570945acb1b545"}, + {file = "numpy-1.25.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5462d19336db4560041517dbb7759c21d181a67cb01b36ca109b2ae37d32418"}, + {file = "numpy-1.25.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5652ea24d33585ea39eb6a6a15dac87a1206a692719ff45d53c5282e66d4a8f"}, + {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d60fbae8e0019865fc4784745814cff1c421df5afee233db6d88ab4f14655a2"}, + {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e7f0f7f6d0eee8364b9a6304c2845b9c491ac706048c7e8cf47b83123b8dbf"}, + {file = "numpy-1.25.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bb33d5a1cf360304754913a350edda36d5b8c5331a8237268c48f91253c3a364"}, + {file = "numpy-1.25.2-cp311-cp311-win32.whl", hash = "sha256:5883c06bb92f2e6c8181df7b39971a5fb436288db58b5a1c3967702d4278691d"}, + {file = "numpy-1.25.2-cp311-cp311-win_amd64.whl", hash = "sha256:5c97325a0ba6f9d041feb9390924614b60b99209a71a69c876f71052521d42a4"}, + {file = "numpy-1.25.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b79e513d7aac42ae918db3ad1341a015488530d0bb2a6abcbdd10a3a829ccfd3"}, + {file = "numpy-1.25.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb942bfb6f84df5ce05dbf4b46673ffed0d3da59f13635ea9b926af3deb76926"}, + {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0746410e73384e70d286f93abf2520035250aad8c5714240b0492a7302fdca"}, + {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7806500e4f5bdd04095e849265e55de20d8cc4b661b038957354327f6d9b295"}, + {file = "numpy-1.25.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8b77775f4b7df768967a7c8b3567e309f617dd5e99aeb886fa14dc1a0791141f"}, + {file = "numpy-1.25.2-cp39-cp39-win32.whl", hash = "sha256:2792d23d62ec51e50ce4d4b7d73de8f67a2fd3ea710dcbc8563a51a03fb07b01"}, + {file = "numpy-1.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:76b4115d42a7dfc5d485d358728cdd8719be33cc5ec6ec08632a5d6fca2ed380"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a1329e26f46230bf77b02cc19e900db9b52f398d6722ca853349a782d4cff55"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3abc71e8b6edba80a01a52e66d83c5d14433cbcd26a40c329ec7ed09f37901"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1b9735c27cea5d995496f46a8b1cd7b408b3f34b6d50459d9ac8fe3a20cc17bf"}, + {file = "numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760"}, +] + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "tqdm" +version = "4.66.1" +description = "Fast, Extensible Progress Meter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, + {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "typing-extensions" +version = "4.7.1" +description = "Backported and Experimental Type Hints for Python 3.7+" +optional = false +python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, +] + +[[package]] +name = "urllib3" +version = "2.0.4" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.7" +files = [ + {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, + {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "win32-setctime" +version = "1.1.0" +description = "A small Python utility to set file creation time on Windows" +optional = false +python-versions = ">=3.5" +files = [ + {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, + {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, +] + +[package.extras] +dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.9" +content-hash = "eebeac8d2679050965ff02cc5dee067520a066ec37864b30e80cc4110e634fc8" diff --git a/pyproject.toml b/pyproject.toml index 08e2f321e..c3873a757 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,3 +21,44 @@ exclude = ''' # the root of the project ) ''' + +[tool.poetry] +name = "pinecone-python-client" +version = "2.2.2" +description = "The official Python client for Pinecone's vector database" +authors = ["Zachary Proser "] +license = "https://github.com/pinecone-io/pinecone-python-client/blob/main/LICENSE.txt" +readme = "README.md" +packages = [{include = "pinecone_python_client"}] + +[tool.poetry.dependencies] +python = "^3.9" +requests = "^2.31.0" +pyyaml = ">=5.4" +loguru = "0.5.0" +typing-extensions = ">=3.7.4" +dnspython = ">=2.0.0" +python-dateutil = ">=2.5.3" +urllib3 = ">=1.21.1" +tqdm = ">=4.64.1" +numpy = ">=1.22.0" +grpciol = ">=1.44.0" +grpc-gateway-protoc-gen-openapiv2 = "0.1.0" +googleapis-common-protos = ">=1.53.0" +lz4 = ">=3.1.3" +protobuf = "~=3.20.0" + +[tool.poetry.dev-dependencies] +pytest = "6.2.4" +pytest-asyncio = "0.15.1" +pytest-cov = "2.10.1" +pytest-mock = "3.6.1" +tox = "3.27.0" +pytest-timeout = "1.4.2" +urllib3_mock = "0.3.3" +responses = ">=0.8.1" +pandas = ">=1.3.5" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" From befb4c0b63cbdef6caade7ee7c697e760f60413c Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Tue, 15 Aug 2023 11:42:23 -0400 Subject: [PATCH 02/31] Fix package name and gRPC dependencies resolution --- poetry.lock | 641 ++++++++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 5 +- 2 files changed, 642 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 34e986b1b..c3297dfaf 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,5 +1,33 @@ # This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. +[[package]] +name = "atomicwrites" +version = "1.4.1" +description = "Atomic file writes." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, +] + +[[package]] +name = "attrs" +version = "23.1.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] + [[package]] name = "certifi" version = "2023.7.22" @@ -106,6 +134,81 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +[[package]] +name = "coverage" +version = "7.3.0" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "coverage-7.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db76a1bcb51f02b2007adacbed4c88b6dee75342c37b05d1822815eed19edee5"}, + {file = "coverage-7.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c02cfa6c36144ab334d556989406837336c1d05215a9bdf44c0bc1d1ac1cb637"}, + {file = "coverage-7.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:477c9430ad5d1b80b07f3c12f7120eef40bfbf849e9e7859e53b9c93b922d2af"}, + {file = "coverage-7.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce2ee86ca75f9f96072295c5ebb4ef2a43cecf2870b0ca5e7a1cbdd929cf67e1"}, + {file = "coverage-7.3.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68d8a0426b49c053013e631c0cdc09b952d857efa8f68121746b339912d27a12"}, + {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b3eb0c93e2ea6445b2173da48cb548364f8f65bf68f3d090404080d338e3a689"}, + {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:90b6e2f0f66750c5a1178ffa9370dec6c508a8ca5265c42fbad3ccac210a7977"}, + {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:96d7d761aea65b291a98c84e1250cd57b5b51726821a6f2f8df65db89363be51"}, + {file = "coverage-7.3.0-cp310-cp310-win32.whl", hash = "sha256:63c5b8ecbc3b3d5eb3a9d873dec60afc0cd5ff9d9f1c75981d8c31cfe4df8527"}, + {file = "coverage-7.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:97c44f4ee13bce914272589b6b41165bbb650e48fdb7bd5493a38bde8de730a1"}, + {file = "coverage-7.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:74c160285f2dfe0acf0f72d425f3e970b21b6de04157fc65adc9fd07ee44177f"}, + {file = "coverage-7.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b543302a3707245d454fc49b8ecd2c2d5982b50eb63f3535244fd79a4be0c99d"}, + {file = "coverage-7.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad0f87826c4ebd3ef484502e79b39614e9c03a5d1510cfb623f4a4a051edc6fd"}, + {file = "coverage-7.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:13c6cbbd5f31211d8fdb477f0f7b03438591bdd077054076eec362cf2207b4a7"}, + {file = "coverage-7.3.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fac440c43e9b479d1241fe9d768645e7ccec3fb65dc3a5f6e90675e75c3f3e3a"}, + {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3c9834d5e3df9d2aba0275c9f67989c590e05732439b3318fa37a725dff51e74"}, + {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4c8e31cf29b60859876474034a83f59a14381af50cbe8a9dbaadbf70adc4b214"}, + {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7a9baf8e230f9621f8e1d00c580394a0aa328fdac0df2b3f8384387c44083c0f"}, + {file = "coverage-7.3.0-cp311-cp311-win32.whl", hash = "sha256:ccc51713b5581e12f93ccb9c5e39e8b5d4b16776d584c0f5e9e4e63381356482"}, + {file = "coverage-7.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:887665f00ea4e488501ba755a0e3c2cfd6278e846ada3185f42d391ef95e7e70"}, + {file = "coverage-7.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d000a739f9feed900381605a12a61f7aaced6beae832719ae0d15058a1e81c1b"}, + {file = "coverage-7.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:59777652e245bb1e300e620ce2bef0d341945842e4eb888c23a7f1d9e143c446"}, + {file = "coverage-7.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9737bc49a9255d78da085fa04f628a310c2332b187cd49b958b0e494c125071"}, + {file = "coverage-7.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5247bab12f84a1d608213b96b8af0cbb30d090d705b6663ad794c2f2a5e5b9fe"}, + {file = "coverage-7.3.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2ac9a1de294773b9fa77447ab7e529cf4fe3910f6a0832816e5f3d538cfea9a"}, + {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:85b7335c22455ec12444cec0d600533a238d6439d8d709d545158c1208483873"}, + {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:36ce5d43a072a036f287029a55b5c6a0e9bd73db58961a273b6dc11a2c6eb9c2"}, + {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:211a4576e984f96d9fce61766ffaed0115d5dab1419e4f63d6992b480c2bd60b"}, + {file = "coverage-7.3.0-cp312-cp312-win32.whl", hash = "sha256:56afbf41fa4a7b27f6635bc4289050ac3ab7951b8a821bca46f5b024500e6321"}, + {file = "coverage-7.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:7f297e0c1ae55300ff688568b04ff26b01c13dfbf4c9d2b7d0cb688ac60df479"}, + {file = "coverage-7.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac0dec90e7de0087d3d95fa0533e1d2d722dcc008bc7b60e1143402a04c117c1"}, + {file = "coverage-7.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:438856d3f8f1e27f8e79b5410ae56650732a0dcfa94e756df88c7e2d24851fcd"}, + {file = "coverage-7.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1084393c6bda8875c05e04fce5cfe1301a425f758eb012f010eab586f1f3905e"}, + {file = "coverage-7.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49ab200acf891e3dde19e5aa4b0f35d12d8b4bd805dc0be8792270c71bd56c54"}, + {file = "coverage-7.3.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a67e6bbe756ed458646e1ef2b0778591ed4d1fcd4b146fc3ba2feb1a7afd4254"}, + {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8f39c49faf5344af36042b293ce05c0d9004270d811c7080610b3e713251c9b0"}, + {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7df91fb24c2edaabec4e0eee512ff3bc6ec20eb8dccac2e77001c1fe516c0c84"}, + {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:34f9f0763d5fa3035a315b69b428fe9c34d4fc2f615262d6be3d3bf3882fb985"}, + {file = "coverage-7.3.0-cp38-cp38-win32.whl", hash = "sha256:bac329371d4c0d456e8d5f38a9b0816b446581b5f278474e416ea0c68c47dcd9"}, + {file = "coverage-7.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:b859128a093f135b556b4765658d5d2e758e1fae3e7cc2f8c10f26fe7005e543"}, + {file = "coverage-7.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fc0ed8d310afe013db1eedd37176d0839dc66c96bcfcce8f6607a73ffea2d6ba"}, + {file = "coverage-7.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61260ec93f99f2c2d93d264b564ba912bec502f679793c56f678ba5251f0393"}, + {file = "coverage-7.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97af9554a799bd7c58c0179cc8dbf14aa7ab50e1fd5fa73f90b9b7215874ba28"}, + {file = "coverage-7.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3558e5b574d62f9c46b76120a5c7c16c4612dc2644c3d48a9f4064a705eaee95"}, + {file = "coverage-7.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37d5576d35fcb765fca05654f66aa71e2808d4237d026e64ac8b397ffa66a56a"}, + {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:07ea61bcb179f8f05ffd804d2732b09d23a1238642bf7e51dad62082b5019b34"}, + {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:80501d1b2270d7e8daf1b64b895745c3e234289e00d5f0e30923e706f110334e"}, + {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4eddd3153d02204f22aef0825409091a91bf2a20bce06fe0f638f5c19a85de54"}, + {file = "coverage-7.3.0-cp39-cp39-win32.whl", hash = "sha256:2d22172f938455c156e9af2612650f26cceea47dc86ca048fa4e0b2d21646ad3"}, + {file = "coverage-7.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:60f64e2007c9144375dd0f480a54d6070f00bb1a28f65c408370544091c9bc9e"}, + {file = "coverage-7.3.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:5492a6ce3bdb15c6ad66cb68a0244854d9917478877a25671d70378bdc8562d0"}, + {file = "coverage-7.3.0.tar.gz", hash = "sha256:49dbb19cdcafc130f597d9e04a29d0a032ceedf729e41b181f51cd170e6ee865"}, +] + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "distlib" +version = "0.3.7" +description = "Distribution utilities" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, + {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, +] + [[package]] name = "dnspython" version = "2.4.2" @@ -125,6 +228,109 @@ idna = ["idna (>=2.1,<4.0)"] trio = ["trio (>=0.14,<0.23)"] wmi = ["wmi (>=1.5.1,<2.0.0)"] +[[package]] +name = "filelock" +version = "3.12.2" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.7" +files = [ + {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, + {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, +] + +[package.extras] +docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] + +[[package]] +name = "googleapis-common-protos" +version = "1.60.0" +description = "Common protobufs used in Google APIs" +optional = false +python-versions = ">=3.7" +files = [ + {file = "googleapis-common-protos-1.60.0.tar.gz", hash = "sha256:e73ebb404098db405ba95d1e1ae0aa91c3e15a71da031a2eeb6b2e23e7bc3708"}, + {file = "googleapis_common_protos-1.60.0-py2.py3-none-any.whl", hash = "sha256:69f9bbcc6acde92cab2db95ce30a70bd2b81d20b12eff3f1aabaffcbe8a93918"}, +] + +[package.dependencies] +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" + +[package.extras] +grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] + +[[package]] +name = "grpc-gateway-protoc-gen-openapiv2" +version = "0.1.0" +description = "Provides the missing pieces for gRPC Gateway." +optional = false +python-versions = ">=3.6" +files = [ + {file = "grpc-gateway-protoc-gen-openapiv2-0.1.0.tar.gz", hash = "sha256:03b8934080ae81f709af041e4f89694db586a95ff35abba05d033d499811d4f6"}, + {file = "grpc_gateway_protoc_gen_openapiv2-0.1.0-py3-none-any.whl", hash = "sha256:45ba00a6e9df13d35fe46d4149c62361a63c27e61fb08faa192aea0f4fbed609"}, +] + +[package.dependencies] +googleapis-common-protos = "*" + +[[package]] +name = "grpcio" +version = "1.57.0" +description = "HTTP/2-based RPC framework" +optional = false +python-versions = ">=3.7" +files = [ + {file = "grpcio-1.57.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:092fa155b945015754bdf988be47793c377b52b88d546e45c6a9f9579ac7f7b6"}, + {file = "grpcio-1.57.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:2f7349786da979a94690cc5c2b804cab4e8774a3cf59be40d037c4342c906649"}, + {file = "grpcio-1.57.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:82640e57fb86ea1d71ea9ab54f7e942502cf98a429a200b2e743d8672171734f"}, + {file = "grpcio-1.57.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40b72effd4c789de94ce1be2b5f88d7b9b5f7379fe9645f198854112a6567d9a"}, + {file = "grpcio-1.57.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f708a6a17868ad8bf586598bee69abded4996b18adf26fd2d91191383b79019"}, + {file = "grpcio-1.57.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:60fe15288a0a65d5c1cb5b4a62b1850d07336e3ba728257a810317be14f0c527"}, + {file = "grpcio-1.57.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6907b1cf8bb29b058081d2aad677b15757a44ef2d4d8d9130271d2ad5e33efca"}, + {file = "grpcio-1.57.0-cp310-cp310-win32.whl", hash = "sha256:57b183e8b252825c4dd29114d6c13559be95387aafc10a7be645462a0fc98bbb"}, + {file = "grpcio-1.57.0-cp310-cp310-win_amd64.whl", hash = "sha256:7b400807fa749a9eb286e2cd893e501b110b4d356a218426cb9c825a0474ca56"}, + {file = "grpcio-1.57.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:c6ebecfb7a31385393203eb04ed8b6a08f5002f53df3d59e5e795edb80999652"}, + {file = "grpcio-1.57.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:00258cbe3f5188629828363ae8ff78477ce976a6f63fb2bb5e90088396faa82e"}, + {file = "grpcio-1.57.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:23e7d8849a0e58b806253fd206ac105b328171e01b8f18c7d5922274958cc87e"}, + {file = "grpcio-1.57.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5371bcd861e679d63b8274f73ac281751d34bd54eccdbfcd6aa00e692a82cd7b"}, + {file = "grpcio-1.57.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aed90d93b731929e742967e236f842a4a2174dc5db077c8f9ad2c5996f89f63e"}, + {file = "grpcio-1.57.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fe752639919aad9ffb0dee0d87f29a6467d1ef764f13c4644d212a9a853a078d"}, + {file = "grpcio-1.57.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fada6b07ec4f0befe05218181f4b85176f11d531911b64c715d1875c4736d73a"}, + {file = "grpcio-1.57.0-cp311-cp311-win32.whl", hash = "sha256:bb396952cfa7ad2f01061fbc7dc1ad91dd9d69243bcb8110cf4e36924785a0fe"}, + {file = "grpcio-1.57.0-cp311-cp311-win_amd64.whl", hash = "sha256:e503cb45ed12b924b5b988ba9576dc9949b2f5283b8e33b21dcb6be74a7c58d0"}, + {file = "grpcio-1.57.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:fd173b4cf02b20f60860dc2ffe30115c18972d7d6d2d69df97ac38dee03be5bf"}, + {file = "grpcio-1.57.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:d7f8df114d6b4cf5a916b98389aeaf1e3132035420a88beea4e3d977e5f267a5"}, + {file = "grpcio-1.57.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:76c44efa4ede1f42a9d5b2fed1fe9377e73a109bef8675fb0728eb80b0b8e8f2"}, + {file = "grpcio-1.57.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4faea2cfdf762a664ab90589b66f416274887641ae17817de510b8178356bf73"}, + {file = "grpcio-1.57.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c60b83c43faeb6d0a9831f0351d7787a0753f5087cc6fa218d78fdf38e5acef0"}, + {file = "grpcio-1.57.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b363bbb5253e5f9c23d8a0a034dfdf1b7c9e7f12e602fc788c435171e96daccc"}, + {file = "grpcio-1.57.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:f1fb0fd4a1e9b11ac21c30c169d169ef434c6e9344ee0ab27cfa6f605f6387b2"}, + {file = "grpcio-1.57.0-cp37-cp37m-win_amd64.whl", hash = "sha256:34950353539e7d93f61c6796a007c705d663f3be41166358e3d88c45760c7d98"}, + {file = "grpcio-1.57.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:871f9999e0211f9551f368612460442a5436d9444606184652117d6a688c9f51"}, + {file = "grpcio-1.57.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:a8a8e560e8dbbdf29288872e91efd22af71e88b0e5736b0daf7773c1fecd99f0"}, + {file = "grpcio-1.57.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:2313b124e475aa9017a9844bdc5eafb2d5abdda9d456af16fc4535408c7d6da6"}, + {file = "grpcio-1.57.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4098b6b638d9e0ca839a81656a2fd4bc26c9486ea707e8b1437d6f9d61c3941"}, + {file = "grpcio-1.57.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e5b58e32ae14658085c16986d11e99abd002ddbf51c8daae8a0671fffb3467f"}, + {file = "grpcio-1.57.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0f80bf37f09e1caba6a8063e56e2b87fa335add314cf2b78ebf7cb45aa7e3d06"}, + {file = "grpcio-1.57.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5b7a4ce8f862fe32b2a10b57752cf3169f5fe2915acfe7e6a1e155db3da99e79"}, + {file = "grpcio-1.57.0-cp38-cp38-win32.whl", hash = "sha256:9338bacf172e942e62e5889b6364e56657fbf8ac68062e8b25c48843e7b202bb"}, + {file = "grpcio-1.57.0-cp38-cp38-win_amd64.whl", hash = "sha256:e1cb52fa2d67d7f7fab310b600f22ce1ff04d562d46e9e0ac3e3403c2bb4cc16"}, + {file = "grpcio-1.57.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:fee387d2fab144e8a34e0e9c5ca0f45c9376b99de45628265cfa9886b1dbe62b"}, + {file = "grpcio-1.57.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:b53333627283e7241fcc217323f225c37783b5f0472316edcaa4479a213abfa6"}, + {file = "grpcio-1.57.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:f19ac6ac0a256cf77d3cc926ef0b4e64a9725cc612f97228cd5dc4bd9dbab03b"}, + {file = "grpcio-1.57.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3fdf04e402f12e1de8074458549337febb3b45f21076cc02ef4ff786aff687e"}, + {file = "grpcio-1.57.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5613a2fecc82f95d6c51d15b9a72705553aa0d7c932fad7aed7afb51dc982ee5"}, + {file = "grpcio-1.57.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b670c2faa92124b7397b42303e4d8eb64a4cd0b7a77e35a9e865a55d61c57ef9"}, + {file = "grpcio-1.57.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7a635589201b18510ff988161b7b573f50c6a48fae9cb567657920ca82022b37"}, + {file = "grpcio-1.57.0-cp39-cp39-win32.whl", hash = "sha256:d78d8b86fcdfa1e4c21f8896614b6cc7ee01a2a758ec0c4382d662f2a62cf766"}, + {file = "grpcio-1.57.0-cp39-cp39-win_amd64.whl", hash = "sha256:20ec6fc4ad47d1b6e12deec5045ec3cd5402d9a1597f738263e98f490fe07056"}, + {file = "grpcio-1.57.0.tar.gz", hash = "sha256:4b089f7ad1eb00a104078bab8015b0ed0ebcb3b589e527ab009c53893fd4e613"}, +] + +[package.extras] +protobuf = ["grpcio-tools (>=1.57.0)"] + [[package]] name = "idna" version = "3.4" @@ -136,6 +342,17 @@ files = [ {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, ] +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + [[package]] name = "loguru" version = "0.5.0" @@ -154,6 +371,55 @@ win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} [package.extras] dev = ["Sphinx (>=2.2.1)", "black (>=19.3b0)", "codecov (>=2.0.15)", "colorama (>=0.3.4)", "flake8 (>=3.7.7)", "isort (>=4.3.20)", "pytest (>=4.6.2)", "pytest-cov (>=2.7.1)", "sphinx-autobuild (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)", "tox (>=3.9.0)", "tox-travis (>=0.12)"] +[[package]] +name = "lz4" +version = "4.3.2" +description = "LZ4 Bindings for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "lz4-4.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1c4c100d99eed7c08d4e8852dd11e7d1ec47a3340f49e3a96f8dfbba17ffb300"}, + {file = "lz4-4.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:edd8987d8415b5dad25e797043936d91535017237f72fa456601be1479386c92"}, + {file = "lz4-4.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7c50542b4ddceb74ab4f8b3435327a0861f06257ca501d59067a6a482535a77"}, + {file = "lz4-4.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f5614d8229b33d4a97cb527db2a1ac81308c6e796e7bdb5d1309127289f69d5"}, + {file = "lz4-4.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f00a9ba98f6364cadda366ae6469b7b3568c0cced27e16a47ddf6b774169270"}, + {file = "lz4-4.3.2-cp310-cp310-win32.whl", hash = "sha256:b10b77dc2e6b1daa2f11e241141ab8285c42b4ed13a8642495620416279cc5b2"}, + {file = "lz4-4.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:86480f14a188c37cb1416cdabacfb4e42f7a5eab20a737dac9c4b1c227f3b822"}, + {file = "lz4-4.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7c2df117def1589fba1327dceee51c5c2176a2b5a7040b45e84185ce0c08b6a3"}, + {file = "lz4-4.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1f25eb322eeb24068bb7647cae2b0732b71e5c639e4e4026db57618dcd8279f0"}, + {file = "lz4-4.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8df16c9a2377bdc01e01e6de5a6e4bbc66ddf007a6b045688e285d7d9d61d1c9"}, + {file = "lz4-4.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f571eab7fec554d3b1db0d666bdc2ad85c81f4b8cb08906c4c59a8cad75e6e22"}, + {file = "lz4-4.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7211dc8f636ca625abc3d4fb9ab74e5444b92df4f8d58ec83c8868a2b0ff643d"}, + {file = "lz4-4.3.2-cp311-cp311-win32.whl", hash = "sha256:867664d9ca9bdfce840ac96d46cd8838c9ae891e859eb98ce82fcdf0e103a947"}, + {file = "lz4-4.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:a6a46889325fd60b8a6b62ffc61588ec500a1883db32cddee9903edfba0b7584"}, + {file = "lz4-4.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a85b430138882f82f354135b98c320dafb96fc8fe4656573d95ab05de9eb092"}, + {file = "lz4-4.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65d5c93f8badacfa0456b660285e394e65023ef8071142e0dcbd4762166e1be0"}, + {file = "lz4-4.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b50f096a6a25f3b2edca05aa626ce39979d63c3b160687c8c6d50ac3943d0ba"}, + {file = "lz4-4.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:200d05777d61ba1ff8d29cb51c534a162ea0b4fe6d3c28be3571a0a48ff36080"}, + {file = "lz4-4.3.2-cp37-cp37m-win32.whl", hash = "sha256:edc2fb3463d5d9338ccf13eb512aab61937be50aa70734bcf873f2f493801d3b"}, + {file = "lz4-4.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:83acfacab3a1a7ab9694333bcb7950fbeb0be21660d236fd09c8337a50817897"}, + {file = "lz4-4.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7a9eec24ec7d8c99aab54de91b4a5a149559ed5b3097cf30249b665689b3d402"}, + {file = "lz4-4.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:31d72731c4ac6ebdce57cd9a5cabe0aecba229c4f31ba3e2c64ae52eee3fdb1c"}, + {file = "lz4-4.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83903fe6db92db0be101acedc677aa41a490b561567fe1b3fe68695b2110326c"}, + {file = "lz4-4.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926b26db87ec8822cf1870efc3d04d06062730ec3279bbbd33ba47a6c0a5c673"}, + {file = "lz4-4.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e05afefc4529e97c08e65ef92432e5f5225c0bb21ad89dee1e06a882f91d7f5e"}, + {file = "lz4-4.3.2-cp38-cp38-win32.whl", hash = "sha256:ad38dc6a7eea6f6b8b642aaa0683253288b0460b70cab3216838747163fb774d"}, + {file = "lz4-4.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:7e2dc1bd88b60fa09b9b37f08553f45dc2b770c52a5996ea52b2b40f25445676"}, + {file = "lz4-4.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:edda4fb109439b7f3f58ed6bede59694bc631c4b69c041112b1b7dc727fffb23"}, + {file = "lz4-4.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ca83a623c449295bafad745dcd399cea4c55b16b13ed8cfea30963b004016c9"}, + {file = "lz4-4.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5ea0e788dc7e2311989b78cae7accf75a580827b4d96bbaf06c7e5a03989bd5"}, + {file = "lz4-4.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a98b61e504fb69f99117b188e60b71e3c94469295571492a6468c1acd63c37ba"}, + {file = "lz4-4.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4931ab28a0d1c133104613e74eec1b8bb1f52403faabe4f47f93008785c0b929"}, + {file = "lz4-4.3.2-cp39-cp39-win32.whl", hash = "sha256:ec6755cacf83f0c5588d28abb40a1ac1643f2ff2115481089264c7630236618a"}, + {file = "lz4-4.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:4caedeb19e3ede6c7a178968b800f910db6503cb4cb1e9cc9221157572139b49"}, + {file = "lz4-4.3.2.tar.gz", hash = "sha256:e1431d84a9cfb23e6773e72078ce8e65cad6745816d4cbf9ae67da5ea419acda"}, +] + +[package.extras] +docs = ["sphinx (>=1.6.0)", "sphinx-bootstrap-theme"] +flake8 = ["flake8"] +tests = ["psutil", "pytest (!=3.3.0)", "pytest-cov"] + [[package]] name = "numpy" version = "1.25.2" @@ -188,6 +454,245 @@ files = [ {file = "numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760"}, ] +[[package]] +name = "packaging" +version = "23.1" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, + {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, +] + +[[package]] +name = "pandas" +version = "2.0.3" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pandas-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e4c7c9f27a4185304c7caf96dc7d91bc60bc162221152de697c98eb0b2648dd8"}, + {file = "pandas-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f167beed68918d62bffb6ec64f2e1d8a7d297a038f86d4aed056b9493fca407f"}, + {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce0c6f76a0f1ba361551f3e6dceaff06bde7514a374aa43e33b588ec10420183"}, + {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba619e410a21d8c387a1ea6e8a0e49bb42216474436245718d7f2e88a2f8d7c0"}, + {file = "pandas-2.0.3-cp310-cp310-win32.whl", hash = "sha256:3ef285093b4fe5058eefd756100a367f27029913760773c8bf1d2d8bebe5d210"}, + {file = "pandas-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:9ee1a69328d5c36c98d8e74db06f4ad518a1840e8ccb94a4ba86920986bb617e"}, + {file = "pandas-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b084b91d8d66ab19f5bb3256cbd5ea661848338301940e17f4492b2ce0801fe8"}, + {file = "pandas-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37673e3bdf1551b95bf5d4ce372b37770f9529743d2498032439371fc7b7eb26"}, + {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9cb1e14fdb546396b7e1b923ffaeeac24e4cedd14266c3497216dd4448e4f2d"}, + {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9cd88488cceb7635aebb84809d087468eb33551097d600c6dad13602029c2df"}, + {file = "pandas-2.0.3-cp311-cp311-win32.whl", hash = "sha256:694888a81198786f0e164ee3a581df7d505024fbb1f15202fc7db88a71d84ebd"}, + {file = "pandas-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6a21ab5c89dcbd57f78d0ae16630b090eec626360085a4148693def5452d8a6b"}, + {file = "pandas-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4da0d45e7f34c069fe4d522359df7d23badf83abc1d1cef398895822d11061"}, + {file = "pandas-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:32fca2ee1b0d93dd71d979726b12b61faa06aeb93cf77468776287f41ff8fdc5"}, + {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:258d3624b3ae734490e4d63c430256e716f488c4fcb7c8e9bde2d3aa46c29089"}, + {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eae3dc34fa1aa7772dd3fc60270d13ced7346fcbcfee017d3132ec625e23bb0"}, + {file = "pandas-2.0.3-cp38-cp38-win32.whl", hash = "sha256:f3421a7afb1a43f7e38e82e844e2bca9a6d793d66c1a7f9f0ff39a795bbc5e02"}, + {file = "pandas-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:69d7f3884c95da3a31ef82b7618af5710dba95bb885ffab339aad925c3e8ce78"}, + {file = "pandas-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5247fb1ba347c1261cbbf0fcfba4a3121fbb4029d95d9ef4dc45406620b25c8b"}, + {file = "pandas-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81af086f4543c9d8bb128328b5d32e9986e0c84d3ee673a2ac6fb57fd14f755e"}, + {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1994c789bf12a7c5098277fb43836ce090f1073858c10f9220998ac74f37c69b"}, + {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ec591c48e29226bcbb316e0c1e9423622bc7a4eaf1ef7c3c9fa1a3981f89641"}, + {file = "pandas-2.0.3-cp39-cp39-win32.whl", hash = "sha256:04dbdbaf2e4d46ca8da896e1805bc04eb85caa9a82e259e8eed00254d5e0c682"}, + {file = "pandas-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:1168574b036cd8b93abc746171c9b4f1b83467438a5e45909fed645cf8692dbc"}, + {file = "pandas-2.0.3.tar.gz", hash = "sha256:c02f372a88e0d17f36d3093a644c73cfc1788e876a7c4bcb4020a77512e2043c"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.20.3", markers = "python_version < \"3.10\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, + {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, +] +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.1" + +[package.extras] +all = ["PyQt5 (>=5.15.1)", "SQLAlchemy (>=1.4.16)", "beautifulsoup4 (>=4.9.3)", "bottleneck (>=1.3.2)", "brotlipy (>=0.7.0)", "fastparquet (>=0.6.3)", "fsspec (>=2021.07.0)", "gcsfs (>=2021.07.0)", "html5lib (>=1.1)", "hypothesis (>=6.34.2)", "jinja2 (>=3.0.0)", "lxml (>=4.6.3)", "matplotlib (>=3.6.1)", "numba (>=0.53.1)", "numexpr (>=2.7.3)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pandas-gbq (>=0.15.0)", "psycopg2 (>=2.8.6)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "python-snappy (>=0.6.0)", "pyxlsb (>=1.0.8)", "qtpy (>=2.2.0)", "s3fs (>=2021.08.0)", "scipy (>=1.7.1)", "tables (>=3.6.1)", "tabulate (>=0.8.9)", "xarray (>=0.21.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)", "zstandard (>=0.15.2)"] +aws = ["s3fs (>=2021.08.0)"] +clipboard = ["PyQt5 (>=5.15.1)", "qtpy (>=2.2.0)"] +compression = ["brotlipy (>=0.7.0)", "python-snappy (>=0.6.0)", "zstandard (>=0.15.2)"] +computation = ["scipy (>=1.7.1)", "xarray (>=0.21.0)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pyxlsb (>=1.0.8)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)"] +feather = ["pyarrow (>=7.0.0)"] +fss = ["fsspec (>=2021.07.0)"] +gcp = ["gcsfs (>=2021.07.0)", "pandas-gbq (>=0.15.0)"] +hdf5 = ["tables (>=3.6.1)"] +html = ["beautifulsoup4 (>=4.9.3)", "html5lib (>=1.1)", "lxml (>=4.6.3)"] +mysql = ["SQLAlchemy (>=1.4.16)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.0.0)", "tabulate (>=0.8.9)"] +parquet = ["pyarrow (>=7.0.0)"] +performance = ["bottleneck (>=1.3.2)", "numba (>=0.53.1)", "numexpr (>=2.7.1)"] +plot = ["matplotlib (>=3.6.1)"] +postgresql = ["SQLAlchemy (>=1.4.16)", "psycopg2 (>=2.8.6)"] +spss = ["pyreadstat (>=1.1.2)"] +sql-other = ["SQLAlchemy (>=1.4.16)"] +test = ["hypothesis (>=6.34.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.6.3)"] + +[[package]] +name = "platformdirs" +version = "3.10.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.7" +files = [ + {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, + {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, +] + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] + +[[package]] +name = "pluggy" +version = "0.13.1" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, + {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] + +[[package]] +name = "protobuf" +version = "3.20.3" +description = "Protocol Buffers" +optional = false +python-versions = ">=3.7" +files = [ + {file = "protobuf-3.20.3-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:f4bd856d702e5b0d96a00ec6b307b0f51c1982c2bf9c0052cf9019e9a544ba99"}, + {file = "protobuf-3.20.3-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9aae4406ea63d825636cc11ffb34ad3379335803216ee3a856787bcf5ccc751e"}, + {file = "protobuf-3.20.3-cp310-cp310-win32.whl", hash = "sha256:28545383d61f55b57cf4df63eebd9827754fd2dc25f80c5253f9184235db242c"}, + {file = "protobuf-3.20.3-cp310-cp310-win_amd64.whl", hash = "sha256:67a3598f0a2dcbc58d02dd1928544e7d88f764b47d4a286202913f0b2801c2e7"}, + {file = "protobuf-3.20.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:899dc660cd599d7352d6f10d83c95df430a38b410c1b66b407a6b29265d66469"}, + {file = "protobuf-3.20.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e64857f395505ebf3d2569935506ae0dfc4a15cb80dc25261176c784662cdcc4"}, + {file = "protobuf-3.20.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d9e4432ff660d67d775c66ac42a67cf2453c27cb4d738fc22cb53b5d84c135d4"}, + {file = "protobuf-3.20.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:74480f79a023f90dc6e18febbf7b8bac7508420f2006fabd512013c0c238f454"}, + {file = "protobuf-3.20.3-cp37-cp37m-win32.whl", hash = "sha256:b6cc7ba72a8850621bfec987cb72623e703b7fe2b9127a161ce61e61558ad905"}, + {file = "protobuf-3.20.3-cp37-cp37m-win_amd64.whl", hash = "sha256:8c0c984a1b8fef4086329ff8dd19ac77576b384079247c770f29cc8ce3afa06c"}, + {file = "protobuf-3.20.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:de78575669dddf6099a8a0f46a27e82a1783c557ccc38ee620ed8cc96d3be7d7"}, + {file = "protobuf-3.20.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:f4c42102bc82a51108e449cbb32b19b180022941c727bac0cfd50170341f16ee"}, + {file = "protobuf-3.20.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:44246bab5dd4b7fbd3c0c80b6f16686808fab0e4aca819ade6e8d294a29c7050"}, + {file = "protobuf-3.20.3-cp38-cp38-win32.whl", hash = "sha256:c02ce36ec760252242a33967d51c289fd0e1c0e6e5cc9397e2279177716add86"}, + {file = "protobuf-3.20.3-cp38-cp38-win_amd64.whl", hash = "sha256:447d43819997825d4e71bf5769d869b968ce96848b6479397e29fc24c4a5dfe9"}, + {file = "protobuf-3.20.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:398a9e0c3eaceb34ec1aee71894ca3299605fa8e761544934378bbc6c97de23b"}, + {file = "protobuf-3.20.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf01b5720be110540be4286e791db73f84a2b721072a3711efff6c324cdf074b"}, + {file = "protobuf-3.20.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:daa564862dd0d39c00f8086f88700fdbe8bc717e993a21e90711acfed02f2402"}, + {file = "protobuf-3.20.3-cp39-cp39-win32.whl", hash = "sha256:819559cafa1a373b7096a482b504ae8a857c89593cf3a25af743ac9ecbd23480"}, + {file = "protobuf-3.20.3-cp39-cp39-win_amd64.whl", hash = "sha256:03038ac1cfbc41aa21f6afcbcd357281d7521b4157926f30ebecc8d4ea59dcb7"}, + {file = "protobuf-3.20.3-py2.py3-none-any.whl", hash = "sha256:a7ca6d488aa8ff7f329d4c545b2dbad8ac31464f1d8b1c87ad1346717731e4db"}, + {file = "protobuf-3.20.3.tar.gz", hash = "sha256:2e3427429c9cffebf259491be0af70189607f365c2f41c7c3764af6f337105f2"}, +] + +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] + +[[package]] +name = "pytest" +version = "6.2.4" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"}, + {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"}, +] + +[package.dependencies] +atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} +attrs = ">=19.2.0" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<1.0.0a1" +py = ">=1.8.2" +toml = "*" + +[package.extras] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] + +[[package]] +name = "pytest-asyncio" +version = "0.15.1" +description = "Pytest support for asyncio." +optional = false +python-versions = ">= 3.6" +files = [ + {file = "pytest-asyncio-0.15.1.tar.gz", hash = "sha256:2564ceb9612bbd560d19ca4b41347b54e7835c2f792c504f698e05395ed63f6f"}, + {file = "pytest_asyncio-0.15.1-py3-none-any.whl", hash = "sha256:3042bcdf1c5d978f6b74d96a151c4cfb9dcece65006198389ccd7e6c60eb1eea"}, +] + +[package.dependencies] +pytest = ">=5.4.0" + +[package.extras] +testing = ["coverage", "hypothesis (>=5.7.1)"] + +[[package]] +name = "pytest-cov" +version = "2.10.1" +description = "Pytest plugin for measuring coverage." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "pytest-cov-2.10.1.tar.gz", hash = "sha256:47bd0ce14056fdd79f93e1713f88fad7bdcc583dcd7783da86ef2f085a0bb88e"}, + {file = "pytest_cov-2.10.1-py2.py3-none-any.whl", hash = "sha256:45ec2d5182f89a81fc3eb29e3d1ed3113b9e9a873bcddb2a71faaab066110191"}, +] + +[package.dependencies] +coverage = ">=4.4" +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests (==2.0.2)", "pytest-xdist", "six", "virtualenv"] + +[[package]] +name = "pytest-mock" +version = "3.6.1" +description = "Thin-wrapper around the mock package for easier use with pytest" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pytest-mock-3.6.1.tar.gz", hash = "sha256:40217a058c52a63f1042f0784f62009e976ba824c418cced42e88d5f40ab0e62"}, + {file = "pytest_mock-3.6.1-py3-none-any.whl", hash = "sha256:30c2f2cc9759e76eee674b81ea28c9f0b94f8f0445a1b87762cadf774f0df7e3"}, +] + +[package.dependencies] +pytest = ">=5.0" + +[package.extras] +dev = ["pre-commit", "pytest-asyncio", "tox"] + +[[package]] +name = "pytest-timeout" +version = "1.4.2" +description = "py.test plugin to abort hanging tests" +optional = false +python-versions = "*" +files = [ + {file = "pytest-timeout-1.4.2.tar.gz", hash = "sha256:20b3113cf6e4e80ce2d403b6fb56e9e1b871b510259206d40ff8d609f48bda76"}, + {file = "pytest_timeout-1.4.2-py2.py3-none-any.whl", hash = "sha256:541d7aa19b9a6b4e475c759fd6073ef43d7cdc9a92d95644c260076eb257a063"}, +] + +[package.dependencies] +pytest = ">=3.6.0" + [[package]] name = "python-dateutil" version = "2.8.2" @@ -202,6 +707,17 @@ files = [ [package.dependencies] six = ">=1.5" +[[package]] +name = "pytz" +version = "2023.3" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, + {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, +] + [[package]] name = "pyyaml" version = "6.0.1" @@ -272,6 +788,26 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "responses" +version = "0.23.3" +description = "A utility library for mocking out the `requests` Python library." +optional = false +python-versions = ">=3.7" +files = [ + {file = "responses-0.23.3-py3-none-any.whl", hash = "sha256:e6fbcf5d82172fecc0aa1860fd91e58cbfd96cee5e96da5b63fa6eb3caa10dd3"}, + {file = "responses-0.23.3.tar.gz", hash = "sha256:205029e1cb334c21cb4ec64fc7599be48b859a0fd381a42443cdd600bfe8b16a"}, +] + +[package.dependencies] +pyyaml = "*" +requests = ">=2.30.0,<3.0" +types-PyYAML = "*" +urllib3 = ">=1.25.10,<3.0" + +[package.extras] +tests = ["coverage (>=6.0.0)", "flake8", "mypy", "pytest (>=7.0.0)", "pytest-asyncio", "pytest-cov", "pytest-httpserver", "tomli", "tomli-w", "types-requests"] + [[package]] name = "six" version = "1.16.0" @@ -283,6 +819,53 @@ files = [ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "tox" +version = "3.27.0" +description = "tox is a generic virtualenv management and test command line tool" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ + {file = "tox-3.27.0-py2.py3-none-any.whl", hash = "sha256:89e4bc6df3854e9fc5582462e328dd3660d7d865ba625ae5881bbc63836a6324"}, + {file = "tox-3.27.0.tar.gz", hash = "sha256:d2c945f02a03d4501374a3d5430877380deb69b218b1df9b7f1d2f2a10befaf9"}, +] + +[package.dependencies] +colorama = {version = ">=0.4.1", markers = "platform_system == \"Windows\""} +filelock = ">=3.0.0" +packaging = ">=14" +pluggy = ">=0.12.0" +py = ">=1.4.17" +six = ">=1.14.0" +tomli = {version = ">=2.0.1", markers = "python_version >= \"3.7\" and python_version < \"3.11\""} +virtualenv = ">=16.0.0,<20.0.0 || >20.0.0,<20.0.1 || >20.0.1,<20.0.2 || >20.0.2,<20.0.3 || >20.0.3,<20.0.4 || >20.0.4,<20.0.5 || >20.0.5,<20.0.6 || >20.0.6,<20.0.7 || >20.0.7" + +[package.extras] +docs = ["pygments-github-lexers (>=0.0.5)", "sphinx (>=2.0.0)", "sphinxcontrib-autoprogram (>=0.1.5)", "towncrier (>=18.5.0)"] +testing = ["flaky (>=3.4.0)", "freezegun (>=0.3.11)", "pathlib2 (>=2.3.3)", "psutil (>=5.6.1)", "pytest (>=4.0.0)", "pytest-cov (>=2.5.1)", "pytest-mock (>=1.10.0)", "pytest-randomly (>=1.0.0)"] + [[package]] name = "tqdm" version = "4.66.1" @@ -303,6 +886,17 @@ notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] +[[package]] +name = "types-pyyaml" +version = "6.0.12.11" +description = "Typing stubs for PyYAML" +optional = false +python-versions = "*" +files = [ + {file = "types-PyYAML-6.0.12.11.tar.gz", hash = "sha256:7d340b19ca28cddfdba438ee638cd4084bde213e501a3978738543e27094775b"}, + {file = "types_PyYAML-6.0.12.11-py3-none-any.whl", hash = "sha256:a461508f3096d1d5810ec5ab95d7eeecb651f3a15b71959999988942063bf01d"}, +] + [[package]] name = "typing-extensions" version = "4.7.1" @@ -314,6 +908,17 @@ files = [ {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, ] +[[package]] +name = "tzdata" +version = "2023.3" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, + {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, +] + [[package]] name = "urllib3" version = "2.0.4" @@ -331,6 +936,40 @@ secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17. socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] +[[package]] +name = "urllib3-mock" +version = "0.3.3" +description = "A utility library for mocking out the `urllib3` Python library." +optional = false +python-versions = "*" +files = [ + {file = "urllib3-mock-0.3.3.tar.gz", hash = "sha256:b210037029ac96beac4f3e7b54f466c394b060525ea5a824803d5f5ed14558f1"}, + {file = "urllib3_mock-0.3.3-py2.py3-none-any.whl", hash = "sha256:702c90042920d771c9902b7b5b542551cc57f259078f4eada47ab4e8cdd11f1a"}, +] + +[package.extras] +tests = ["flake8", "pytest", "pytest-cov", "requests"] + +[[package]] +name = "virtualenv" +version = "20.24.3" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.7" +files = [ + {file = "virtualenv-20.24.3-py3-none-any.whl", hash = "sha256:95a6e9398b4967fbcb5fef2acec5efaf9aa4972049d9ae41f95e0972a683fd02"}, + {file = "virtualenv-20.24.3.tar.gz", hash = "sha256:e5c3b4ce817b0b328af041506a2a299418c98747c4b1e68cb7527e74ced23efc"}, +] + +[package.dependencies] +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<4" + +[package.extras] +docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] + [[package]] name = "win32-setctime" version = "1.1.0" @@ -348,4 +987,4 @@ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "eebeac8d2679050965ff02cc5dee067520a066ec37864b30e80cc4110e634fc8" +content-hash = "90063556a0e108fc90d2617f45f07b876d285bbd2564ac032be7588aaa060294" diff --git a/pyproject.toml b/pyproject.toml index c3873a757..126adfeac 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,13 +23,12 @@ exclude = ''' ''' [tool.poetry] -name = "pinecone-python-client" +name = "pinecone" version = "2.2.2" description = "The official Python client for Pinecone's vector database" authors = ["Zachary Proser "] license = "https://github.com/pinecone-io/pinecone-python-client/blob/main/LICENSE.txt" readme = "README.md" -packages = [{include = "pinecone_python_client"}] [tool.poetry.dependencies] python = "^3.9" @@ -42,7 +41,7 @@ python-dateutil = ">=2.5.3" urllib3 = ">=1.21.1" tqdm = ">=4.64.1" numpy = ">=1.22.0" -grpciol = ">=1.44.0" +grpcio = ">=1.44.0" grpc-gateway-protoc-gen-openapiv2 = "0.1.0" googleapis-common-protos = ">=1.53.0" lz4 = ">=3.1.3" From d768ae34ac7de1cfce38221413b131ebd723305c Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Thu, 17 Aug 2023 15:51:24 +0000 Subject: [PATCH 03/31] Add contributing + local development guide --- CONTRIBUTING.md | 124 +++++++++++++++++++++++++++ README.md | 2 + docs/pinecone-python-client-fork.png | Bin 0 -> 47754 bytes 3 files changed, 126 insertions(+) create mode 100644 CONTRIBUTING.md create mode 100644 docs/pinecone-python-client-fork.png diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..ab16ecfae --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,124 @@ +# Contributing + +## Developing locally with Poetry + +[Poetry](https://python-poetry.org/) is a tool that combines [virtualenv](https://virtualenv.pypa.io/en/latest/) usage with dependency management, to provide a consistent experience for project maintainers and contributors who need to develop the pinecone-python-client +as a library. + +A common need when making changes to the Pinecone client is to test your changes against existing Python code or Jupyter Notebooks that load the Pinecone client as a library. + +Developers want to be able +to see their changes to the library immediately reflected in their main application code, as well as to track all changes they make in git, so that they can be contributed back in the form of a pull request. + +The Pinecone Python client therefore supports Poetry as its primary means of enabling a consistent local development experience. + +### Step 1. Fork the Pinecone python client repository + +On the [GitHub repoository page](https://github.com/pinecone-io/pinecone-python-client) page, click the fork button at the top of the screen and create a personal fork of the repository: + +![Create a GitHub fork of the Pinecone Python client](./docs/pinecone-python-client-fork.png) + +It will take a few seconds for your fork to be ready. When it's ready, **clone your fork** of the Pinecone python client repository to your machine. + +Change directory into the repository, as we'll be setting up a virtualenv from within the root of the repository. + +### Step 1. Install Poetry + +Visit [the Poetry site](https://python-poetry.org/) for installation instructions. + +### Step 2. Install dependencies + +Run `poetry install` from the root of the project. + +### Step 3. Activate the Poetry virtual environment and verify success + +Run `poetry shell` from the root of the project. At this point, you now have a virtualenv set up in this directory, which you can verify by running: + +`poetry env info` + +You should see something similar to the following output: + +```bash +Virtualenv +Python: 3.9.16 +Implementation: CPython +Path: /home/youruser/.cache/pypoetry/virtualenvs/pinecone-fWu70vbC-py3.9 +Executable: /home/youruser/.cache/pypoetry/virtualenvs/pinecone-fWu70vbC-py3.9/bin/python +Valid: True + +System +Platform: linux +OS: posix +Python: 3.9.16 +Path: /home/linuxbrew/.linuxbrew/opt/python@3.9 +``` +If you want to extract only the path to your new virtualenv, you can run `poetry env info --path` + +## Loading your virtualenv in another shell + +It's a common need when developing against this client to load it as part of some other application or Jupyter Notebook code, modify +it directly, see your changes reflected immediately and also have your changes tracked in git so you can contribute them back. + +It's important to understand that, by default, if you open a new shell or terminal window, or, for example, a new pane in a tmux session, +your new shell will not yet reference the new virtualenv you created in the previous step. + +### Step 1. Get the path to your virtualenv + +We're going to first get the path to the virtualenv we just created, by running: + +```bash +poetry env info --path +``` + +You'll get a path similar to this one: `/home/youruser/.cache/pypoetry/virtualenvs/pinecone-fWu70vbC-py3.9/` + +### Step 2. Load your existing virtualenv in your new shell + +Within this path is a shell script that lives at `/bin/activate`. Importantly, you cannot simply run this script, but you +must instead source it like so: + +```bash +source /home/youruser/.cache/pypoetry/virtualenvs/pinecone-fWu70vbC-py3.9/bin/activate +``` +In the above example, ensure you're using your own virtualenv path as returned by `poetry env info --path`. + +### Step 3. Test out your virtualenv + +Now, we can test that our virtualenv is working properly by adding a new test module and function to the `pinecone` client within our virtualenv +and running it from the second shell. + +#### Create a new test file in pinecone-python-client +In the root of your working directory of the `pinecone-python-client` where you first ran `poetry shell`, add a new file named `hello-world.py` under the `pinecone` folder. + +In that file write the following: + +```python +def hello(): + print("Hello, from your virtualenv!") +``` +Save the file. + +#### Create a new test file in your second shell + +In your second shell, where you ran `source` to load your virtualenv, create a python file named `test.py` and write the following: + +```python +from pinecone import hello_virtualenv + +hello_virtualenv.hello() +``` + +Save the file. Run it with your Python binary. Depending on your system, this may either be `python` or `python3`: + +```bash +python3 test.py +``` + +You should see the following output: + +```bash +❯ python3 test.py +Hello, from your virtualenv! +``` + +If you experience any issues please [file a new issue](https://github.com/pinecone-io/pinecone-python-client/issues/new) diff --git a/README.md b/README.md index 272692c67..bc9d90710 100644 --- a/README.md +++ b/README.md @@ -259,4 +259,6 @@ pinecone.init(api_key="YOUR_API_KEY", environment="us-west1-gcp") pinecone.delete_collection("example-collection") ``` +# Contributing +If you'd like to make a contribution, or get setup locally to develop the Pinecone python client, please see our [contributing guide](./CONTRIBUTING.md) diff --git a/docs/pinecone-python-client-fork.png b/docs/pinecone-python-client-fork.png new file mode 100644 index 0000000000000000000000000000000000000000..6eff5d96c2c6c5fcdc3cb031a996eed5605753a2 GIT binary patch literal 47754 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 literal 0 HcmV?d00001 From cf02eddc2f319f2314f8323e9c0dd6ce348668a9 Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Thu, 17 Aug 2023 16:02:50 +0000 Subject: [PATCH 04/31] Contrib guide: Add info on what the guide will do --- CONTRIBUTING.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ab16ecfae..d1e7d96c8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,12 +5,14 @@ [Poetry](https://python-poetry.org/) is a tool that combines [virtualenv](https://virtualenv.pypa.io/en/latest/) usage with dependency management, to provide a consistent experience for project maintainers and contributors who need to develop the pinecone-python-client as a library. -A common need when making changes to the Pinecone client is to test your changes against existing Python code or Jupyter Notebooks that load the Pinecone client as a library. +A common need when making changes to the Pinecone client is to test your changes against existing Python code or Jupyter Notebooks that `pip install` the Pinecone Python client as a library. -Developers want to be able -to see their changes to the library immediately reflected in their main application code, as well as to track all changes they make in git, so that they can be contributed back in the form of a pull request. +Developers want to be able to see their changes to the library immediately reflected in their main application code, as well as to track all changes they make in git, so that they can be contributed back in the form of a pull request. -The Pinecone Python client therefore supports Poetry as its primary means of enabling a consistent local development experience. +The Pinecone Python client therefore supports Poetry as its primary means of enabling a consistent local development experience. This guide will walk you through the setup process so that you can: +1. Make local changes to the Pinecone Python client that are separated from your system's Python installation +2. Make local changes to the Pinecone Python client that are immediately reflected in other applications that `import pinecone` +3. Track all your local changes to the Pinecone Python client so that you can contribute your fixes and feature additions back via GitHub pull requests ### Step 1. Fork the Pinecone python client repository From d811b8623c48c6d870ab61ec35724e1f3fd0a9d9 Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Thu, 17 Aug 2023 16:39:13 +0000 Subject: [PATCH 05/31] Clarify virtualenv setup --- CONTRIBUTING.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d1e7d96c8..819cf3690 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,7 +11,7 @@ Developers want to be able to see their changes to the library immediately refle The Pinecone Python client therefore supports Poetry as its primary means of enabling a consistent local development experience. This guide will walk you through the setup process so that you can: 1. Make local changes to the Pinecone Python client that are separated from your system's Python installation -2. Make local changes to the Pinecone Python client that are immediately reflected in other applications that `import pinecone` +2. Make local changes to the Pinecone Python client that are immediately reflected in other local code that imports the pinecone client 3. Track all your local changes to the Pinecone Python client so that you can contribute your fixes and feature additions back via GitHub pull requests ### Step 1. Fork the Pinecone python client repository @@ -90,7 +90,7 @@ Now, we can test that our virtualenv is working properly by adding a new test mo and running it from the second shell. #### Create a new test file in pinecone-python-client -In the root of your working directory of the `pinecone-python-client` where you first ran `poetry shell`, add a new file named `hello-world.py` under the `pinecone` folder. +In the root of your working directory of the `pinecone-python-client` where you first ran `poetry shell`, add a new file named `hello_virtualenv.py` under the `pinecone` folder. In that file write the following: @@ -101,6 +101,7 @@ def hello(): Save the file. #### Create a new test file in your second shell +This step demonstrates how you can immediately test your latest Pinecone client code from any local Python application or Jupyter Notebook: In your second shell, where you ran `source` to load your virtualenv, create a python file named `test.py` and write the following: From cecf2de32e709c08e114d8e37d29f23007d463c2 Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Thu, 17 Aug 2023 23:15:35 +0000 Subject: [PATCH 06/31] Update and move Poetry CI actions. Author -> support@pinecone.io --- .../poetry-ci => workflows/poetry-smoke-tests.yaml} | 10 ++++++++-- pyproject.toml | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) rename .github/{actions/poetry-ci => workflows/poetry-smoke-tests.yaml} (67%) diff --git a/.github/actions/poetry-ci b/.github/workflows/poetry-smoke-tests.yaml similarity index 67% rename from .github/actions/poetry-ci rename to .github/workflows/poetry-smoke-tests.yaml index 1211104ea..fb5cd7dc3 100644 --- a/.github/actions/poetry-ci +++ b/.github/workflows/poetry-smoke-tests.yaml @@ -1,8 +1,8 @@ -name: Poetry CI +name: Poetry Smoke Tests on: push: - branches: [ your-branch ] + branches: [ '**' ] # This will run the action on all branches jobs: test: @@ -22,6 +22,12 @@ jobs: - name: Install Dependencies run: poetry install + - name: Build Project + run: poetry build + + - name: Start Poetry Shell (Optional) + run: poetry shell + - name: Run Tests run: poetry run pytest # or your test command diff --git a/pyproject.toml b/pyproject.toml index 126adfeac..29fa65732 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ exclude = ''' name = "pinecone" version = "2.2.2" description = "The official Python client for Pinecone's vector database" -authors = ["Zachary Proser "] +authors = ["Pinecone.io "] license = "https://github.com/pinecone-io/pinecone-python-client/blob/main/LICENSE.txt" readme = "README.md" From 9833122ab4fa557c24677a5bd5db3a99413c21e8 Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Thu, 17 Aug 2023 23:29:58 +0000 Subject: [PATCH 07/31] Update pyproject.toml to accept Python >=3.8,<4.0 --- poetry.lock | 63 ++++++++++++++++++++++++++------------------------ pyproject.toml | 2 +- 2 files changed, 34 insertions(+), 31 deletions(-) diff --git a/poetry.lock b/poetry.lock index c3297dfaf..43ee5984f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -422,36 +422,39 @@ tests = ["psutil", "pytest (!=3.3.0)", "pytest-cov"] [[package]] name = "numpy" -version = "1.25.2" +version = "1.24.4" description = "Fundamental package for array computing in Python" optional = false -python-versions = ">=3.9" -files = [ - {file = "numpy-1.25.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db3ccc4e37a6873045580d413fe79b68e47a681af8db2e046f1dacfa11f86eb3"}, - {file = "numpy-1.25.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:90319e4f002795ccfc9050110bbbaa16c944b1c37c0baeea43c5fb881693ae1f"}, - {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4a913e29b418d096e696ddd422d8a5d13ffba4ea91f9f60440a3b759b0187"}, - {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f08f2e037bba04e707eebf4bc934f1972a315c883a9e0ebfa8a7756eabf9e357"}, - {file = "numpy-1.25.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bec1e7213c7cb00d67093247f8c4db156fd03075f49876957dca4711306d39c9"}, - {file = "numpy-1.25.2-cp310-cp310-win32.whl", hash = "sha256:7dc869c0c75988e1c693d0e2d5b26034644399dd929bc049db55395b1379e044"}, - {file = "numpy-1.25.2-cp310-cp310-win_amd64.whl", hash = "sha256:834b386f2b8210dca38c71a6e0f4fd6922f7d3fcff935dbe3a570945acb1b545"}, - {file = "numpy-1.25.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5462d19336db4560041517dbb7759c21d181a67cb01b36ca109b2ae37d32418"}, - {file = "numpy-1.25.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5652ea24d33585ea39eb6a6a15dac87a1206a692719ff45d53c5282e66d4a8f"}, - {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d60fbae8e0019865fc4784745814cff1c421df5afee233db6d88ab4f14655a2"}, - {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e7f0f7f6d0eee8364b9a6304c2845b9c491ac706048c7e8cf47b83123b8dbf"}, - {file = "numpy-1.25.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bb33d5a1cf360304754913a350edda36d5b8c5331a8237268c48f91253c3a364"}, - {file = "numpy-1.25.2-cp311-cp311-win32.whl", hash = "sha256:5883c06bb92f2e6c8181df7b39971a5fb436288db58b5a1c3967702d4278691d"}, - {file = "numpy-1.25.2-cp311-cp311-win_amd64.whl", hash = "sha256:5c97325a0ba6f9d041feb9390924614b60b99209a71a69c876f71052521d42a4"}, - {file = "numpy-1.25.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b79e513d7aac42ae918db3ad1341a015488530d0bb2a6abcbdd10a3a829ccfd3"}, - {file = "numpy-1.25.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb942bfb6f84df5ce05dbf4b46673ffed0d3da59f13635ea9b926af3deb76926"}, - {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0746410e73384e70d286f93abf2520035250aad8c5714240b0492a7302fdca"}, - {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7806500e4f5bdd04095e849265e55de20d8cc4b661b038957354327f6d9b295"}, - {file = "numpy-1.25.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8b77775f4b7df768967a7c8b3567e309f617dd5e99aeb886fa14dc1a0791141f"}, - {file = "numpy-1.25.2-cp39-cp39-win32.whl", hash = "sha256:2792d23d62ec51e50ce4d4b7d73de8f67a2fd3ea710dcbc8563a51a03fb07b01"}, - {file = "numpy-1.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:76b4115d42a7dfc5d485d358728cdd8719be33cc5ec6ec08632a5d6fca2ed380"}, - {file = "numpy-1.25.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a1329e26f46230bf77b02cc19e900db9b52f398d6722ca853349a782d4cff55"}, - {file = "numpy-1.25.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3abc71e8b6edba80a01a52e66d83c5d14433cbcd26a40c329ec7ed09f37901"}, - {file = "numpy-1.25.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1b9735c27cea5d995496f46a8b1cd7b408b3f34b6d50459d9ac8fe3a20cc17bf"}, - {file = "numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760"}, +python-versions = ">=3.8" +files = [ + {file = "numpy-1.24.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64"}, + {file = "numpy-1.24.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1"}, + {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4"}, + {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6"}, + {file = "numpy-1.24.4-cp310-cp310-win32.whl", hash = "sha256:4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc"}, + {file = "numpy-1.24.4-cp310-cp310-win_amd64.whl", hash = "sha256:b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e"}, + {file = "numpy-1.24.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810"}, + {file = "numpy-1.24.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254"}, + {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7"}, + {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5"}, + {file = "numpy-1.24.4-cp311-cp311-win32.whl", hash = "sha256:4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d"}, + {file = "numpy-1.24.4-cp311-cp311-win_amd64.whl", hash = "sha256:b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694"}, + {file = "numpy-1.24.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61"}, + {file = "numpy-1.24.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f"}, + {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e"}, + {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc"}, + {file = "numpy-1.24.4-cp38-cp38-win32.whl", hash = "sha256:4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2"}, + {file = "numpy-1.24.4-cp38-cp38-win_amd64.whl", hash = "sha256:692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706"}, + {file = "numpy-1.24.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400"}, + {file = "numpy-1.24.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f"}, + {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9"}, + {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d"}, + {file = "numpy-1.24.4-cp39-cp39-win32.whl", hash = "sha256:6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835"}, + {file = "numpy-1.24.4-cp39-cp39-win_amd64.whl", hash = "sha256:befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8"}, + {file = "numpy-1.24.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef"}, + {file = "numpy-1.24.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a"}, + {file = "numpy-1.24.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2"}, + {file = "numpy-1.24.4.tar.gz", hash = "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463"}, ] [[package]] @@ -986,5 +989,5 @@ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] [metadata] lock-version = "2.0" -python-versions = "^3.9" -content-hash = "90063556a0e108fc90d2617f45f07b876d285bbd2564ac032be7588aaa060294" +python-versions = ">=3.8,<4.0" +content-hash = "7d3085e54f84d284290d5e06fe03f85b1390dabd478bddd77768517c03e58f8d" diff --git a/pyproject.toml b/pyproject.toml index 29fa65732..52f0f8524 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ license = "https://github.com/pinecone-io/pinecone-python-client/blob/main/LICEN readme = "README.md" [tool.poetry.dependencies] -python = "^3.9" +python = ">=3.8,<4.0" requests = "^2.31.0" pyyaml = ">=5.4" loguru = "0.5.0" From 31cec9b81ade93796b1b3e80d475b2c1f4b42339 Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Thu, 17 Aug 2023 23:52:19 +0000 Subject: [PATCH 08/31] Delete requirements files. Deps will be managed by Poetry -pyproject.toml will now be the source of truth for dependencies --- requirements-grpc.txt | 5 ----- requirements.txt | 10 ---------- test-requirements.txt | 9 --------- 3 files changed, 24 deletions(-) delete mode 100644 requirements-grpc.txt delete mode 100644 requirements.txt delete mode 100644 test-requirements.txt diff --git a/requirements-grpc.txt b/requirements-grpc.txt deleted file mode 100644 index ed784f7ed..000000000 --- a/requirements-grpc.txt +++ /dev/null @@ -1,5 +0,0 @@ -grpcio>=1.44.0 -grpc-gateway-protoc-gen-openapiv2==0.1.0 -googleapis-common-protos>=1.53.0 -lz4>=3.1.3 -protobuf~=3.20.0 diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 9732771a3..000000000 --- a/requirements.txt +++ /dev/null @@ -1,10 +0,0 @@ -requests>=2.19.0 -pyyaml>=5.4 -loguru>=0.5.0 -typing-extensions>=3.7.4 -dnspython>=2.0.0 -# openapi generated client: -python_dateutil >= 2.5.3 -urllib3 >= 1.21.1 -tqdm >= 4.64.1 -numpy >= 1.22.0 \ No newline at end of file diff --git a/test-requirements.txt b/test-requirements.txt deleted file mode 100644 index 5249bbb44..000000000 --- a/test-requirements.txt +++ /dev/null @@ -1,9 +0,0 @@ -pytest==6.2.4 -pytest-asyncio==0.15.1 -pytest-cov==2.10.1 -pytest-mock==3.6.1 -tox==3.27.0 -pytest-timeout==1.4.2 -urllib3_mock==0.3.3 -responses>=0.8.1 -pandas>=1.3.5 From f0dc25c162f89a14d536ca6f7feb191e375f4f20 Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Fri, 18 Aug 2023 00:21:08 +0000 Subject: [PATCH 09/31] Convert Makefile tests target to poetry --- Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 188d13398..f158f2775 100644 --- a/Makefile +++ b/Makefile @@ -10,8 +10,11 @@ develop: pip3 install -e .[grpc] tests: + @echo "Installing dependencies..." + poetry install + @echo "Running tests..." + poetry run pytest --cov=pinecone --timeout=120 tests/unit # skipping flake8 for now - pip3 install --upgrade --quiet tox==3.27.0 && TOX_SKIP_ENV='flake|docs' tox version: python3 setup.py --version From 511ceb017efa4871582a54c7fb4b08230b791b1e Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Fri, 18 Aug 2023 00:26:28 +0000 Subject: [PATCH 10/31] Update develop, version, package targets to Poetry equivalents --- Makefile | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index f158f2775..73ec0976f 100644 --- a/Makefile +++ b/Makefile @@ -7,30 +7,24 @@ image: MODULE=pinecone ../scripts/build.sh ./ develop: - pip3 install -e .[grpc] + poetry install -E grpc tests: @echo "Installing dependencies..." poetry install @echo "Running tests..." - poetry run pytest --cov=pinecone --timeout=120 tests/unit # skipping flake8 for now + poetry run pytest --cov=pinecone --timeout=120 tests/unit version: - python3 setup.py --version + poetry version package: - pip3 install -U wheel && python3 setup.py sdist bdist_wheel + poetry build upload: - pip3 install --upgrade --quiet twine && \ - twine upload \ - --verbose \ - --non-interactive \ - --username ${PYPI_USERNAME} \ - --password ${PYPI_PASSWORD} \ - dist/* - + poetry publish --verbose --username ${PYPI_USERNAME} --password ${PYPI_PASSWORD} + license: # Add license header using https://github.com/google/addlicense. # If the license header already exists in a file, re-running this command has no effect. From 9398ff96852e7b77e2601f1006ea979e03c2b163 Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Fri, 18 Aug 2023 00:42:51 +0000 Subject: [PATCH 11/31] Modify testing GitHub Actions workflow to use poetry --- .github/workflows/testing.yaml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/testing.yaml b/.github/workflows/testing.yaml index c343bbfe3..7eda8fe1a 100644 --- a/.github/workflows/testing.yaml +++ b/.github/workflows/testing.yaml @@ -19,17 +19,20 @@ jobs: with: python-version: ${{ matrix.python-version }} + - name: Install Poetry + run: | + curl -sSL https://install.python-poetry.org | python - + - name: Install dependencies run: | - python -m pip install --upgrade pip - pip install tox==3.27.0 - pip install tox tox-gh-actions==2.10.0 + poetry install - name: Run tests - run: make tests TOX_PARALLEL_NO_SPINNER=1 + run: make tests - name: Build Python client run: make package - name: Build docs run: make docs + From d374a88ca21907874b48a2c678f008f5fde38b8e Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Fri, 18 Aug 2023 00:48:30 +0000 Subject: [PATCH 12/31] Add missing period. --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 819cf3690..5924857f5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -124,4 +124,4 @@ You should see the following output: Hello, from your virtualenv! ``` -If you experience any issues please [file a new issue](https://github.com/pinecone-io/pinecone-python-client/issues/new) +If you experience any issues please [file a new issue](https://github.com/pinecone-io/pinecone-python-client/issues/new). From fcae76d6f0af37bf1a7f7fd10751e6322891322d Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Tue, 22 Aug 2023 12:36:40 +0000 Subject: [PATCH 13/31] Remove obsolete comment from tox times --- Makefile | 1 - 1 file changed, 1 deletion(-) diff --git a/Makefile b/Makefile index 73ec0976f..6598ef050 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,6 @@ tests: @echo "Installing dependencies..." poetry install @echo "Running tests..." - # skipping flake8 for now poetry run pytest --cov=pinecone --timeout=120 tests/unit version: From 521412edcb4d22f9337838a252da541b48219cd0 Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Tue, 22 Aug 2023 12:37:06 +0000 Subject: [PATCH 14/31] Attempt to fix GitHub action poetry smoke tests trigger --- .github/workflows/poetry-smoke-tests.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/poetry-smoke-tests.yaml b/.github/workflows/poetry-smoke-tests.yaml index fb5cd7dc3..be9dfd80d 100644 --- a/.github/workflows/poetry-smoke-tests.yaml +++ b/.github/workflows/poetry-smoke-tests.yaml @@ -1,8 +1,7 @@ name: Poetry Smoke Tests on: - push: - branches: [ '**' ] # This will run the action on all branches + push jobs: test: From 4d47edb7f329d883ecef3c95cefd05fe8244d4eb Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Tue, 22 Aug 2023 12:38:01 +0000 Subject: [PATCH 15/31] Remove tox configuration in favor of Poetry (pyproject.toml) --- tox.ini | 39 --------------------------------------- 1 file changed, 39 deletions(-) delete mode 100644 tox.ini diff --git a/tox.ini b/tox.ini deleted file mode 100644 index 19d8f481f..000000000 --- a/tox.ini +++ /dev/null @@ -1,39 +0,0 @@ -[tox] -envlist = py{38,39,310,311},flake8,docs -skip_missing_interpreters = true - -[testenv] -setenv = HOSTNAME=hostname -deps= - -r {toxinidir}/requirements.txt - -r {toxinidir}/test-requirements.txt - -r {toxinidir}/requirements-grpc.txt -commands = - pytest --cov=pinecone --timeout=120 tests/unit {posargs} - -[gh-actions] -python = - 3.8: py38 - 3.9: py39 - 3.10: py310 - 3.11: py311 - -[flake8] -max-line-length = 120 -extend-ignore = E203 - -[testenv:flake8] -deps = flake8==3.8.4 -commands = flake8 pinecone - -[testenv:docs] -description = invoke sphinx-build to build the HTML docs -basepython = python3 -deps = sphinx==3.1.0 - sphinx_rtd_theme - sphinxcontrib-httpexample - sphinxcontrib-httpdomain - recommonmark - sphinx-markdown-tables -commands = sphinx-build -d "{toxworkdir}/docs_doctree" docs "{toxworkdir}/docs_out" --color -W -bhtml {posargs} - python -c 'import pathlib; print("documentation available under file://\{0\}".format(pathlib.Path(r"{toxworkdir}") / "docs_out" / "index.html"))' \ No newline at end of file From 526c88b170cea031e5144144b011deb601840b9c Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Tue, 22 Aug 2023 17:58:09 +0000 Subject: [PATCH 16/31] Try to hook Poetry smoke tests into testing.yml workflow --- .github/workflows/poetry-smoke-tests.yaml | 3 +-- .github/workflows/testing.yaml | 2 ++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/poetry-smoke-tests.yaml b/.github/workflows/poetry-smoke-tests.yaml index be9dfd80d..ceba92ae9 100644 --- a/.github/workflows/poetry-smoke-tests.yaml +++ b/.github/workflows/poetry-smoke-tests.yaml @@ -1,7 +1,6 @@ name: Poetry Smoke Tests -on: - push +workflow_call: {} jobs: test: diff --git a/.github/workflows/testing.yaml b/.github/workflows/testing.yaml index 7eda8fe1a..1f4388072 100644 --- a/.github/workflows/testing.yaml +++ b/.github/workflows/testing.yaml @@ -36,3 +36,5 @@ jobs: - name: Build docs run: make docs + poetry-smoke-tests: + uses: './.github/workflows/poetry-smoke-tests' From 9a00cccc4602bae96f41a626ef185283a9280c21 Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Wed, 23 Aug 2023 00:07:26 +0000 Subject: [PATCH 17/31] Add poetry workflow call .yaml extension --- .github/workflows/poetry-smoke-tests.yaml | 2 +- .github/workflows/testing.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/poetry-smoke-tests.yaml b/.github/workflows/poetry-smoke-tests.yaml index ceba92ae9..608ab370e 100644 --- a/.github/workflows/poetry-smoke-tests.yaml +++ b/.github/workflows/poetry-smoke-tests.yaml @@ -27,5 +27,5 @@ jobs: run: poetry shell - name: Run Tests - run: poetry run pytest # or your test command + run: poetry run pytest diff --git a/.github/workflows/testing.yaml b/.github/workflows/testing.yaml index 1f4388072..52a23f352 100644 --- a/.github/workflows/testing.yaml +++ b/.github/workflows/testing.yaml @@ -37,4 +37,4 @@ jobs: run: make docs poetry-smoke-tests: - uses: './.github/workflows/poetry-smoke-tests' + uses: './.github/workflows/poetry-smoke-tests.yaml' From 1f231738a7a419b12542369053e4f3df6c49b8fd Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Wed, 23 Aug 2023 00:17:12 +0000 Subject: [PATCH 18/31] Simplify and condense poetry smoke tests into testing.yaml --- .github/workflows/poetry-smoke-tests.yaml | 31 ----------------------- .github/workflows/testing.yaml | 7 +++-- 2 files changed, 5 insertions(+), 33 deletions(-) delete mode 100644 .github/workflows/poetry-smoke-tests.yaml diff --git a/.github/workflows/poetry-smoke-tests.yaml b/.github/workflows/poetry-smoke-tests.yaml deleted file mode 100644 index 608ab370e..000000000 --- a/.github/workflows/poetry-smoke-tests.yaml +++ /dev/null @@ -1,31 +0,0 @@ -name: Poetry Smoke Tests - -workflow_call: {} - -jobs: - test: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: 3.8 - - - name: Install Poetry - run: curl -sSL https://install.python-poetry.org | python - - - - name: Install Dependencies - run: poetry install - - - name: Build Project - run: poetry build - - - name: Start Poetry Shell (Optional) - run: poetry shell - - - name: Run Tests - run: poetry run pytest - diff --git a/.github/workflows/testing.yaml b/.github/workflows/testing.yaml index 52a23f352..c4f8c431d 100644 --- a/.github/workflows/testing.yaml +++ b/.github/workflows/testing.yaml @@ -36,5 +36,8 @@ jobs: - name: Build docs run: make docs - poetry-smoke-tests: - uses: './.github/workflows/poetry-smoke-tests.yaml' + - name: Build Project + run: poetry build + + - name: Start Poetry Shell (Create virtualenv) + run: poetry shell From 3274345e5958f3c78af4476a6d703278cf2ff5d2 Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Wed, 23 Aug 2023 00:23:49 +0000 Subject: [PATCH 19/31] Remove shell test --- .github/workflows/testing.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/testing.yaml b/.github/workflows/testing.yaml index c4f8c431d..738c6b8d0 100644 --- a/.github/workflows/testing.yaml +++ b/.github/workflows/testing.yaml @@ -38,6 +38,3 @@ jobs: - name: Build Project run: poetry build - - - name: Start Poetry Shell (Create virtualenv) - run: poetry shell From 2acaedea5674321126154e1107f134a0a7fc9eb2 Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Wed, 23 Aug 2023 16:48:34 +0000 Subject: [PATCH 20/31] Update release process to factor in Poetry -Our pinecone/__version__ file has been the source of truth for our release process -Poetry uses pyproject.toml. For the time being, we need to update both files. They should both always contain the same version --- .github/workflows/publish-to-pypi.yaml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish-to-pypi.yaml b/.github/workflows/publish-to-pypi.yaml index 375b9b860..abc2f184b 100644 --- a/.github/workflows/publish-to-pypi.yaml +++ b/.github/workflows/publish-to-pypi.yaml @@ -71,6 +71,10 @@ jobs: exit 1 fi + - name: Poetry bump pyproject toml version + run: | + poetry version ${{ inputs.releaseLevel }} + - name: Set up Git run: | git config --global user.name "Pinecone CI" @@ -99,7 +103,16 @@ jobs: - name: Commit changes, if not prerelease if: ${{ inputs.isPrerelease == false }} run: | + # Add the original pinecone client version file to git + # Even though Poetry is now the preferred means of working + # with this project, since this __version__ file has been the + # one source of truth for our release process. We need to maintain + # both files for the time being, and they should always contain the + # identical package version git add pinecone/__version__ + # Add also the pyproject.toml, which is Poetry's source of truth, so + # that we maintain the exact same version across the two files + git add pyproject.toml git commit -m "[skip ci] Bump version to ${{ steps.bump.outputs.VERSION_TAG }}" - name: Tag version @@ -116,4 +129,4 @@ jobs: - name: Push tags (production release) if: ${{ inputs.isPrerelease == false }} - run: git push --follow-tags \ No newline at end of file + run: git push --follow-tags From 3d34d34350de3bd0aff5c76d0b37760f4857af48 Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Thu, 24 Aug 2023 00:21:07 +0000 Subject: [PATCH 21/31] Separate gRPC dependencies via poetry install --extras "grpc" --- .github/workflows/testing.yaml | 8 ++++++++ poetry.lock | 5 ++++- pyproject.toml | 10 ++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/.github/workflows/testing.yaml b/.github/workflows/testing.yaml index 738c6b8d0..1e36b6a8a 100644 --- a/.github/workflows/testing.yaml +++ b/.github/workflows/testing.yaml @@ -27,6 +27,14 @@ jobs: run: | poetry install + # We separate the gRPC dependencies from the REST client's install + # behavior, so we test installing the grpc dependencies here as well + # The dependencies that are specific to gRPC are defined in pyproject.toml + # under tool.poetry.extras + - name: Install gRPC dependencies + run: | + poetry install --extras "grpc" + - name: Run tests run: make tests diff --git a/poetry.lock b/poetry.lock index 43ee5984f..955ddd9be 100644 --- a/poetry.lock +++ b/poetry.lock @@ -987,7 +987,10 @@ files = [ [package.extras] dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] +[extras] +grpc = ["googleapis-common-protos", "grpc-gateway-protoc-gen-openapiv2", "grpcio", "lz4", "protobuf"] + [metadata] lock-version = "2.0" python-versions = ">=3.8,<4.0" -content-hash = "7d3085e54f84d284290d5e06fe03f85b1390dabd478bddd77768517c03e58f8d" +content-hash = "555989cee957f6a0f6427d215a9cc2d5aede797010d1027ec3f5569def029b96" diff --git a/pyproject.toml b/pyproject.toml index 52f0f8524..70471c7a0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -58,6 +58,16 @@ urllib3_mock = "0.3.3" responses = ">=0.8.1" pandas = ">=1.3.5" +# Poetry's concept of extras is what allows us to separate the gRPC dependencies, +# will will only be installed if you run `poetry install --extras "grpc"`, +# from the base dependencies. +# +# Note that Poetry expects the dependencies defined in either tool.poetry.dependencies +# or tool.poetry.dev-dependencies, but only referencedby name in the grpc entry under +# tool.poetry.extras +[tool.poetry.extras] +grpc = ["grpcio", "grpc-gateway-protoc-gen-openapiv2", "googleapis-common-protos", "lz4", "protobuf"] + [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" From a3cc295f7ab04137460b1f0f379acca8861d650c Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Mon, 28 Aug 2023 22:28:40 +0000 Subject: [PATCH 22/31] Update author in pyproject.toml. Delete setup.py and setup.cfg --- pyproject.toml | 2 +- setup.cfg | 4 ---- setup.py | 62 -------------------------------------------------- 3 files changed, 1 insertion(+), 67 deletions(-) delete mode 100644 setup.cfg delete mode 100644 setup.py diff --git a/pyproject.toml b/pyproject.toml index 70471c7a0..780f78710 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ exclude = ''' name = "pinecone" version = "2.2.2" description = "The official Python client for Pinecone's vector database" -authors = ["Pinecone.io "] +authors = ["Pinecone Systems, Inc. "] license = "https://github.com/pinecone-io/pinecone-python-client/blob/main/LICENSE.txt" readme = "README.md" diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index ee6a564e4..000000000 --- a/setup.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[metadata] -# This includes the license file(s) in the wheel. -# https://wheel.readthedocs.io/en/stable/user_guide.html#including-license-files-in-the-generated-wheel-file -license_files = LICENSE.txt \ No newline at end of file diff --git a/setup.py b/setup.py deleted file mode 100644 index 9384b1bd4..000000000 --- a/setup.py +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env python - - -import os - -import setuptools - -long_desc = """# Pinecone - -Pinecone is the vector database for machine learning applications. Build vector-based personalization, ranking, and search systems that are accurate, fast, and scalable. Use simple APIs with zero maintenance. -""" - -def read(fname): - with open(os.path.join(os.path.dirname(__file__), fname), "r", encoding="utf-8") as fh: - return fh.read() - - -setuptools.setup( - name="pinecone-client", - version=read("pinecone/__version__").strip(), - description="Pinecone client and SDK", - license='Apache 2.0', - long_description=read("README.md"), - long_description_content_type="text/markdown", - url="https://www.pinecone.io/", - project_urls={ - "Homepage": "https://www.pinecone.io", - "Documentation": "https://pinecone.io/docs", - "Contact": "https://www.pinecone.io/contact/", - }, - author="Pinecone Systems, Inc.", - author_email="support@pinecone.io", - keywords="Pinecone vector database cloud", - packages=setuptools.find_packages(), - install_requires=read("requirements.txt"), - extras_require={ - "grpc": read("requirements-grpc.txt"), - }, - include_package_data=True, - python_requires=">=3.8", - entry_points={ - 'console_scripts': ['pinecone=pinecone.cli:main'], - }, - classifiers=[ - "License :: OSI Approved :: Apache Software License", - "Development Status :: 5 - Production/Stable" - "Intended Audience :: Developers", - "Intended Audience :: Information Technology", - "Intended Audience :: Science/Research", - "Intended Audience :: System Administrators", - "Operating System :: OS Independent", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Topic :: Database", - "Topic :: Software Development", - "Topic :: Software Development :: Libraries", - "Topic :: Software Development :: Libraries :: Application Frameworks", - "Topic :: Software Development :: Libraries :: Python Modules" - ] -) From f9f7be97a6c629e69a5eb770653a970d80ce7fb5 Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Fri, 1 Sep 2023 20:57:26 -0400 Subject: [PATCH 23/31] Update repo-level package name to match what setup.py had -The repo level package is pinecone-client - e.g., pip install \ pinecone-client, and the pinecone subdirectory is the module --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 780f78710..9a4b9e06a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,7 @@ exclude = ''' ''' [tool.poetry] -name = "pinecone" +name = "pinecone-client" version = "2.2.2" description = "The official Python client for Pinecone's vector database" authors = ["Pinecone Systems, Inc. "] From 007541e90d96d88cb5d7e9191be350593cef053d Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Fri, 15 Sep 2023 20:25:10 +0000 Subject: [PATCH 24/31] Swap top-level package name back to pinecone --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 9a4b9e06a..780f78710 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,7 @@ exclude = ''' ''' [tool.poetry] -name = "pinecone-client" +name = "pinecone" version = "2.2.2" description = "The official Python client for Pinecone's vector database" authors = ["Pinecone Systems, Inc. "] From f14e3463f03b256a912559f496a5b93b46619628 Mon Sep 17 00:00:00 2001 From: Zack Proser Date: Thu, 28 Sep 2023 18:02:30 -0400 Subject: [PATCH 25/31] Update pyproject.toml Co-authored-by: Austin DeNoble --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 780f78710..ce1b4b7e9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -63,7 +63,7 @@ pandas = ">=1.3.5" # from the base dependencies. # # Note that Poetry expects the dependencies defined in either tool.poetry.dependencies -# or tool.poetry.dev-dependencies, but only referencedby name in the grpc entry under +# or tool.poetry.dev-dependencies, but they're only referenced by name in the grpc entry under # tool.poetry.extras [tool.poetry.extras] grpc = ["grpcio", "grpc-gateway-protoc-gen-openapiv2", "googleapis-common-protos", "lz4", "protobuf"] From 3c0e92a347e5e4dbc7bd7bbfe81c1d3c327a5358 Mon Sep 17 00:00:00 2001 From: Zack Proser Date: Thu, 28 Sep 2023 18:03:40 -0400 Subject: [PATCH 26/31] Update CONTRIBUTING.md Co-authored-by: Austin DeNoble --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5924857f5..1def52e7e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,7 +16,7 @@ The Pinecone Python client therefore supports Poetry as its primary means of ena ### Step 1. Fork the Pinecone python client repository -On the [GitHub repoository page](https://github.com/pinecone-io/pinecone-python-client) page, click the fork button at the top of the screen and create a personal fork of the repository: +On the [GitHub repository page](https://github.com/pinecone-io/pinecone-python-client) page, click the fork button at the top of the screen and create a personal fork of the repository: ![Create a GitHub fork of the Pinecone Python client](./docs/pinecone-python-client-fork.png) From 6f28544061a2f57014bc261059f2df79bb939ff2 Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Fri, 29 Sep 2023 13:32:14 +0000 Subject: [PATCH 27/31] Remove unused tox dependency from pyproject.toml --- pyproject.toml | 2 -- 1 file changed, 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index ce1b4b7e9..f31075274 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,6 @@ exclude = ''' | \.git # root of the project | \.hg | \.mypy_cache - | \.tox | \.venv | _build | buck-out @@ -52,7 +51,6 @@ pytest = "6.2.4" pytest-asyncio = "0.15.1" pytest-cov = "2.10.1" pytest-mock = "3.6.1" -tox = "3.27.0" pytest-timeout = "1.4.2" urllib3_mock = "0.3.3" responses = ">=0.8.1" From 7b17f7e36630ff69849cd2d10bfae430083f8bbf Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Fri, 29 Sep 2023 13:33:25 +0000 Subject: [PATCH 28/31] Fix typo in pyproject.toml comment about dev deps --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index f31075274..13c4827f1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -57,7 +57,7 @@ responses = ">=0.8.1" pandas = ">=1.3.5" # Poetry's concept of extras is what allows us to separate the gRPC dependencies, -# will will only be installed if you run `poetry install --extras "grpc"`, +# which will only be installed if you run `poetry install --extras "grpc"`, # from the base dependencies. # # Note that Poetry expects the dependencies defined in either tool.poetry.dependencies From e1f779db26b038930169f17956512262c3eae614 Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Fri, 29 Sep 2023 14:28:37 +0000 Subject: [PATCH 29/31] Bump version to 2.3.0. Migrate setup.py changes from main --- pinecone/__version__ | 2 +- pyproject.toml | 29 +++++++++++++++++++++++++---- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/pinecone/__version__ b/pinecone/__version__ index 047615559..530cdd91a 100644 --- a/pinecone/__version__ +++ b/pinecone/__version__ @@ -1 +1 @@ -2.2.4 \ No newline at end of file +2.2.4 diff --git a/pyproject.toml b/pyproject.toml index 13c4827f1..11149a693 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.black] line-length = 120 -target-version = ['py34'] +target-version = ['py38'] include = '\.pyi?$' exclude = ''' @@ -23,11 +23,32 @@ exclude = ''' [tool.poetry] name = "pinecone" -version = "2.2.2" -description = "The official Python client for Pinecone's vector database" +version = "2.3.0" +description = "Pinecone client and SDK" authors = ["Pinecone Systems, Inc. "] -license = "https://github.com/pinecone-io/pinecone-python-client/blob/main/LICENSE.txt" +license = "Apache-2.0" readme = "README.md" +homepage = "https://www.pinecone.io" +documentation = "https://pinecone.io/docs" +keywords = ["Pinecone", "vector", "database", "cloud"] +classifiers=[ + "License :: OSI Approved :: Apache Software License", + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Intended Audience :: Science/Research", + "Intended Audience :: System Administrators", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Topic :: Database", + "Topic :: Software Development", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development :: Libraries :: Application Frameworks", + "Topic :: Software Development :: Libraries :: Python Modules" +] [tool.poetry.dependencies] python = ">=3.8,<4.0" From 0cad103025289accef965943ea0b7c7813e57524 Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Fri, 29 Sep 2023 15:06:06 +0000 Subject: [PATCH 30/31] Harmonize versions with main --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 11149a693..525792200 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,7 @@ exclude = ''' [tool.poetry] name = "pinecone" -version = "2.3.0" +version = "2.2.4" description = "Pinecone client and SDK" authors = ["Pinecone Systems, Inc. "] license = "Apache-2.0" From 15fd509d45abbecb350024e6825da126cb4c29d4 Mon Sep 17 00:00:00 2001 From: Zachary Proser Date: Fri, 29 Sep 2023 15:09:57 +0000 Subject: [PATCH 31/31] Update poetry.lock after removing tox dependency --- poetry.lock | 327 ++++++++++++++++++---------------------------------- 1 file changed, 115 insertions(+), 212 deletions(-) diff --git a/poetry.lock b/poetry.lock index 955ddd9be..67264d79f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -136,79 +136,68 @@ files = [ [[package]] name = "coverage" -version = "7.3.0" +version = "7.3.1" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db76a1bcb51f02b2007adacbed4c88b6dee75342c37b05d1822815eed19edee5"}, - {file = "coverage-7.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c02cfa6c36144ab334d556989406837336c1d05215a9bdf44c0bc1d1ac1cb637"}, - {file = "coverage-7.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:477c9430ad5d1b80b07f3c12f7120eef40bfbf849e9e7859e53b9c93b922d2af"}, - {file = "coverage-7.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce2ee86ca75f9f96072295c5ebb4ef2a43cecf2870b0ca5e7a1cbdd929cf67e1"}, - {file = "coverage-7.3.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68d8a0426b49c053013e631c0cdc09b952d857efa8f68121746b339912d27a12"}, - {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b3eb0c93e2ea6445b2173da48cb548364f8f65bf68f3d090404080d338e3a689"}, - {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:90b6e2f0f66750c5a1178ffa9370dec6c508a8ca5265c42fbad3ccac210a7977"}, - {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:96d7d761aea65b291a98c84e1250cd57b5b51726821a6f2f8df65db89363be51"}, - {file = "coverage-7.3.0-cp310-cp310-win32.whl", hash = "sha256:63c5b8ecbc3b3d5eb3a9d873dec60afc0cd5ff9d9f1c75981d8c31cfe4df8527"}, - {file = "coverage-7.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:97c44f4ee13bce914272589b6b41165bbb650e48fdb7bd5493a38bde8de730a1"}, - {file = "coverage-7.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:74c160285f2dfe0acf0f72d425f3e970b21b6de04157fc65adc9fd07ee44177f"}, - {file = "coverage-7.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b543302a3707245d454fc49b8ecd2c2d5982b50eb63f3535244fd79a4be0c99d"}, - {file = "coverage-7.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad0f87826c4ebd3ef484502e79b39614e9c03a5d1510cfb623f4a4a051edc6fd"}, - {file = "coverage-7.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:13c6cbbd5f31211d8fdb477f0f7b03438591bdd077054076eec362cf2207b4a7"}, - {file = "coverage-7.3.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fac440c43e9b479d1241fe9d768645e7ccec3fb65dc3a5f6e90675e75c3f3e3a"}, - {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3c9834d5e3df9d2aba0275c9f67989c590e05732439b3318fa37a725dff51e74"}, - {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4c8e31cf29b60859876474034a83f59a14381af50cbe8a9dbaadbf70adc4b214"}, - {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7a9baf8e230f9621f8e1d00c580394a0aa328fdac0df2b3f8384387c44083c0f"}, - {file = "coverage-7.3.0-cp311-cp311-win32.whl", hash = "sha256:ccc51713b5581e12f93ccb9c5e39e8b5d4b16776d584c0f5e9e4e63381356482"}, - {file = "coverage-7.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:887665f00ea4e488501ba755a0e3c2cfd6278e846ada3185f42d391ef95e7e70"}, - {file = "coverage-7.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d000a739f9feed900381605a12a61f7aaced6beae832719ae0d15058a1e81c1b"}, - {file = "coverage-7.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:59777652e245bb1e300e620ce2bef0d341945842e4eb888c23a7f1d9e143c446"}, - {file = "coverage-7.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9737bc49a9255d78da085fa04f628a310c2332b187cd49b958b0e494c125071"}, - {file = "coverage-7.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5247bab12f84a1d608213b96b8af0cbb30d090d705b6663ad794c2f2a5e5b9fe"}, - {file = "coverage-7.3.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2ac9a1de294773b9fa77447ab7e529cf4fe3910f6a0832816e5f3d538cfea9a"}, - {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:85b7335c22455ec12444cec0d600533a238d6439d8d709d545158c1208483873"}, - {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:36ce5d43a072a036f287029a55b5c6a0e9bd73db58961a273b6dc11a2c6eb9c2"}, - {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:211a4576e984f96d9fce61766ffaed0115d5dab1419e4f63d6992b480c2bd60b"}, - {file = "coverage-7.3.0-cp312-cp312-win32.whl", hash = "sha256:56afbf41fa4a7b27f6635bc4289050ac3ab7951b8a821bca46f5b024500e6321"}, - {file = "coverage-7.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:7f297e0c1ae55300ff688568b04ff26b01c13dfbf4c9d2b7d0cb688ac60df479"}, - {file = "coverage-7.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac0dec90e7de0087d3d95fa0533e1d2d722dcc008bc7b60e1143402a04c117c1"}, - {file = "coverage-7.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:438856d3f8f1e27f8e79b5410ae56650732a0dcfa94e756df88c7e2d24851fcd"}, - {file = "coverage-7.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1084393c6bda8875c05e04fce5cfe1301a425f758eb012f010eab586f1f3905e"}, - {file = "coverage-7.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49ab200acf891e3dde19e5aa4b0f35d12d8b4bd805dc0be8792270c71bd56c54"}, - {file = "coverage-7.3.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a67e6bbe756ed458646e1ef2b0778591ed4d1fcd4b146fc3ba2feb1a7afd4254"}, - {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8f39c49faf5344af36042b293ce05c0d9004270d811c7080610b3e713251c9b0"}, - {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7df91fb24c2edaabec4e0eee512ff3bc6ec20eb8dccac2e77001c1fe516c0c84"}, - {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:34f9f0763d5fa3035a315b69b428fe9c34d4fc2f615262d6be3d3bf3882fb985"}, - {file = "coverage-7.3.0-cp38-cp38-win32.whl", hash = "sha256:bac329371d4c0d456e8d5f38a9b0816b446581b5f278474e416ea0c68c47dcd9"}, - {file = "coverage-7.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:b859128a093f135b556b4765658d5d2e758e1fae3e7cc2f8c10f26fe7005e543"}, - {file = "coverage-7.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fc0ed8d310afe013db1eedd37176d0839dc66c96bcfcce8f6607a73ffea2d6ba"}, - {file = "coverage-7.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61260ec93f99f2c2d93d264b564ba912bec502f679793c56f678ba5251f0393"}, - {file = "coverage-7.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97af9554a799bd7c58c0179cc8dbf14aa7ab50e1fd5fa73f90b9b7215874ba28"}, - {file = "coverage-7.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3558e5b574d62f9c46b76120a5c7c16c4612dc2644c3d48a9f4064a705eaee95"}, - {file = "coverage-7.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37d5576d35fcb765fca05654f66aa71e2808d4237d026e64ac8b397ffa66a56a"}, - {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:07ea61bcb179f8f05ffd804d2732b09d23a1238642bf7e51dad62082b5019b34"}, - {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:80501d1b2270d7e8daf1b64b895745c3e234289e00d5f0e30923e706f110334e"}, - {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4eddd3153d02204f22aef0825409091a91bf2a20bce06fe0f638f5c19a85de54"}, - {file = "coverage-7.3.0-cp39-cp39-win32.whl", hash = "sha256:2d22172f938455c156e9af2612650f26cceea47dc86ca048fa4e0b2d21646ad3"}, - {file = "coverage-7.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:60f64e2007c9144375dd0f480a54d6070f00bb1a28f65c408370544091c9bc9e"}, - {file = "coverage-7.3.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:5492a6ce3bdb15c6ad66cb68a0244854d9917478877a25671d70378bdc8562d0"}, - {file = "coverage-7.3.0.tar.gz", hash = "sha256:49dbb19cdcafc130f597d9e04a29d0a032ceedf729e41b181f51cd170e6ee865"}, + {file = "coverage-7.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cd0f7429ecfd1ff597389907045ff209c8fdb5b013d38cfa7c60728cb484b6e3"}, + {file = "coverage-7.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:966f10df9b2b2115da87f50f6a248e313c72a668248be1b9060ce935c871f276"}, + {file = "coverage-7.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0575c37e207bb9b98b6cf72fdaaa18ac909fb3d153083400c2d48e2e6d28bd8e"}, + {file = "coverage-7.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:245c5a99254e83875c7fed8b8b2536f040997a9b76ac4c1da5bff398c06e860f"}, + {file = "coverage-7.3.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c96dd7798d83b960afc6c1feb9e5af537fc4908852ef025600374ff1a017392"}, + {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:de30c1aa80f30af0f6b2058a91505ea6e36d6535d437520067f525f7df123887"}, + {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:50dd1e2dd13dbbd856ffef69196781edff26c800a74f070d3b3e3389cab2600d"}, + {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9c0c19f70d30219113b18fe07e372b244fb2a773d4afde29d5a2f7930765136"}, + {file = "coverage-7.3.1-cp310-cp310-win32.whl", hash = "sha256:770f143980cc16eb601ccfd571846e89a5fe4c03b4193f2e485268f224ab602f"}, + {file = "coverage-7.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:cdd088c00c39a27cfa5329349cc763a48761fdc785879220d54eb785c8a38520"}, + {file = "coverage-7.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:74bb470399dc1989b535cb41f5ca7ab2af561e40def22d7e188e0a445e7639e3"}, + {file = "coverage-7.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:025ded371f1ca280c035d91b43252adbb04d2aea4c7105252d3cbc227f03b375"}, + {file = "coverage-7.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6191b3a6ad3e09b6cfd75b45c6aeeffe7e3b0ad46b268345d159b8df8d835f9"}, + {file = "coverage-7.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7eb0b188f30e41ddd659a529e385470aa6782f3b412f860ce22b2491c89b8593"}, + {file = "coverage-7.3.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75c8f0df9dfd8ff745bccff75867d63ef336e57cc22b2908ee725cc552689ec8"}, + {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7eb3cd48d54b9bd0e73026dedce44773214064be93611deab0b6a43158c3d5a0"}, + {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ac3c5b7e75acac31e490b7851595212ed951889918d398b7afa12736c85e13ce"}, + {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5b4ee7080878077af0afa7238df1b967f00dc10763f6e1b66f5cced4abebb0a3"}, + {file = "coverage-7.3.1-cp311-cp311-win32.whl", hash = "sha256:229c0dd2ccf956bf5aeede7e3131ca48b65beacde2029f0361b54bf93d36f45a"}, + {file = "coverage-7.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:c6f55d38818ca9596dc9019eae19a47410d5322408140d9a0076001a3dcb938c"}, + {file = "coverage-7.3.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5289490dd1c3bb86de4730a92261ae66ea8d44b79ed3cc26464f4c2cde581fbc"}, + {file = "coverage-7.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca833941ec701fda15414be400c3259479bfde7ae6d806b69e63b3dc423b1832"}, + {file = "coverage-7.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd694e19c031733e446c8024dedd12a00cda87e1c10bd7b8539a87963685e969"}, + {file = "coverage-7.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aab8e9464c00da5cb9c536150b7fbcd8850d376d1151741dd0d16dfe1ba4fd26"}, + {file = "coverage-7.3.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87d38444efffd5b056fcc026c1e8d862191881143c3aa80bb11fcf9dca9ae204"}, + {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8a07b692129b8a14ad7a37941a3029c291254feb7a4237f245cfae2de78de037"}, + {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2829c65c8faaf55b868ed7af3c7477b76b1c6ebeee99a28f59a2cb5907a45760"}, + {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1f111a7d85658ea52ffad7084088277135ec5f368457275fc57f11cebb15607f"}, + {file = "coverage-7.3.1-cp312-cp312-win32.whl", hash = "sha256:c397c70cd20f6df7d2a52283857af622d5f23300c4ca8e5bd8c7a543825baa5a"}, + {file = "coverage-7.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:5ae4c6da8b3d123500f9525b50bf0168023313963e0e2e814badf9000dd6ef92"}, + {file = "coverage-7.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca70466ca3a17460e8fc9cea7123c8cbef5ada4be3140a1ef8f7b63f2f37108f"}, + {file = "coverage-7.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f2781fd3cabc28278dc982a352f50c81c09a1a500cc2086dc4249853ea96b981"}, + {file = "coverage-7.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6407424621f40205bbe6325686417e5e552f6b2dba3535dd1f90afc88a61d465"}, + {file = "coverage-7.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:04312b036580ec505f2b77cbbdfb15137d5efdfade09156961f5277149f5e344"}, + {file = "coverage-7.3.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac9ad38204887349853d7c313f53a7b1c210ce138c73859e925bc4e5d8fc18e7"}, + {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:53669b79f3d599da95a0afbef039ac0fadbb236532feb042c534fbb81b1a4e40"}, + {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:614f1f98b84eb256e4f35e726bfe5ca82349f8dfa576faabf8a49ca09e630086"}, + {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f1a317fdf5c122ad642db8a97964733ab7c3cf6009e1a8ae8821089993f175ff"}, + {file = "coverage-7.3.1-cp38-cp38-win32.whl", hash = "sha256:defbbb51121189722420a208957e26e49809feafca6afeef325df66c39c4fdb3"}, + {file = "coverage-7.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:f4f456590eefb6e1b3c9ea6328c1e9fa0f1006e7481179d749b3376fc793478e"}, + {file = "coverage-7.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f12d8b11a54f32688b165fd1a788c408f927b0960984b899be7e4c190ae758f1"}, + {file = "coverage-7.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f09195dda68d94a53123883de75bb97b0e35f5f6f9f3aa5bf6e496da718f0cb6"}, + {file = "coverage-7.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6601a60318f9c3945be6ea0f2a80571f4299b6801716f8a6e4846892737ebe4"}, + {file = "coverage-7.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07d156269718670d00a3b06db2288b48527fc5f36859425ff7cec07c6b367745"}, + {file = "coverage-7.3.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:636a8ac0b044cfeccae76a36f3b18264edcc810a76a49884b96dd744613ec0b7"}, + {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5d991e13ad2ed3aced177f524e4d670f304c8233edad3210e02c465351f785a0"}, + {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:586649ada7cf139445da386ab6f8ef00e6172f11a939fc3b2b7e7c9082052fa0"}, + {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4aba512a15a3e1e4fdbfed2f5392ec221434a614cc68100ca99dcad7af29f3f8"}, + {file = "coverage-7.3.1-cp39-cp39-win32.whl", hash = "sha256:6bc6f3f4692d806831c136c5acad5ccedd0262aa44c087c46b7101c77e139140"}, + {file = "coverage-7.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:553d7094cb27db58ea91332e8b5681bac107e7242c23f7629ab1316ee73c4981"}, + {file = "coverage-7.3.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:220eb51f5fb38dfdb7e5d54284ca4d0cd70ddac047d750111a68ab1798945194"}, + {file = "coverage-7.3.1.tar.gz", hash = "sha256:6cb7fe1581deb67b782c153136541e20901aa312ceedaf1467dcb35255787952"}, ] [package.extras] toml = ["tomli"] -[[package]] -name = "distlib" -version = "0.3.7" -description = "Distribution utilities" -optional = false -python-versions = "*" -files = [ - {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, - {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, -] - [[package]] name = "dnspython" version = "2.4.2" @@ -228,21 +217,6 @@ idna = ["idna (>=2.1,<4.0)"] trio = ["trio (>=0.14,<0.23)"] wmi = ["wmi (>=1.5.1,<2.0.0)"] -[[package]] -name = "filelock" -version = "3.12.2" -description = "A platform independent file lock." -optional = false -python-versions = ">=3.7" -files = [ - {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, - {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, -] - -[package.extras] -docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] - [[package]] name = "googleapis-common-protos" version = "1.60.0" @@ -276,60 +250,60 @@ googleapis-common-protos = "*" [[package]] name = "grpcio" -version = "1.57.0" +version = "1.58.0" description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.7" files = [ - {file = "grpcio-1.57.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:092fa155b945015754bdf988be47793c377b52b88d546e45c6a9f9579ac7f7b6"}, - {file = "grpcio-1.57.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:2f7349786da979a94690cc5c2b804cab4e8774a3cf59be40d037c4342c906649"}, - {file = "grpcio-1.57.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:82640e57fb86ea1d71ea9ab54f7e942502cf98a429a200b2e743d8672171734f"}, - {file = "grpcio-1.57.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40b72effd4c789de94ce1be2b5f88d7b9b5f7379fe9645f198854112a6567d9a"}, - {file = "grpcio-1.57.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f708a6a17868ad8bf586598bee69abded4996b18adf26fd2d91191383b79019"}, - {file = "grpcio-1.57.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:60fe15288a0a65d5c1cb5b4a62b1850d07336e3ba728257a810317be14f0c527"}, - {file = "grpcio-1.57.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6907b1cf8bb29b058081d2aad677b15757a44ef2d4d8d9130271d2ad5e33efca"}, - {file = "grpcio-1.57.0-cp310-cp310-win32.whl", hash = "sha256:57b183e8b252825c4dd29114d6c13559be95387aafc10a7be645462a0fc98bbb"}, - {file = "grpcio-1.57.0-cp310-cp310-win_amd64.whl", hash = "sha256:7b400807fa749a9eb286e2cd893e501b110b4d356a218426cb9c825a0474ca56"}, - {file = "grpcio-1.57.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:c6ebecfb7a31385393203eb04ed8b6a08f5002f53df3d59e5e795edb80999652"}, - {file = "grpcio-1.57.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:00258cbe3f5188629828363ae8ff78477ce976a6f63fb2bb5e90088396faa82e"}, - {file = "grpcio-1.57.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:23e7d8849a0e58b806253fd206ac105b328171e01b8f18c7d5922274958cc87e"}, - {file = "grpcio-1.57.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5371bcd861e679d63b8274f73ac281751d34bd54eccdbfcd6aa00e692a82cd7b"}, - {file = "grpcio-1.57.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aed90d93b731929e742967e236f842a4a2174dc5db077c8f9ad2c5996f89f63e"}, - {file = "grpcio-1.57.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fe752639919aad9ffb0dee0d87f29a6467d1ef764f13c4644d212a9a853a078d"}, - {file = "grpcio-1.57.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fada6b07ec4f0befe05218181f4b85176f11d531911b64c715d1875c4736d73a"}, - {file = "grpcio-1.57.0-cp311-cp311-win32.whl", hash = "sha256:bb396952cfa7ad2f01061fbc7dc1ad91dd9d69243bcb8110cf4e36924785a0fe"}, - {file = "grpcio-1.57.0-cp311-cp311-win_amd64.whl", hash = "sha256:e503cb45ed12b924b5b988ba9576dc9949b2f5283b8e33b21dcb6be74a7c58d0"}, - {file = "grpcio-1.57.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:fd173b4cf02b20f60860dc2ffe30115c18972d7d6d2d69df97ac38dee03be5bf"}, - {file = "grpcio-1.57.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:d7f8df114d6b4cf5a916b98389aeaf1e3132035420a88beea4e3d977e5f267a5"}, - {file = "grpcio-1.57.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:76c44efa4ede1f42a9d5b2fed1fe9377e73a109bef8675fb0728eb80b0b8e8f2"}, - {file = "grpcio-1.57.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4faea2cfdf762a664ab90589b66f416274887641ae17817de510b8178356bf73"}, - {file = "grpcio-1.57.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c60b83c43faeb6d0a9831f0351d7787a0753f5087cc6fa218d78fdf38e5acef0"}, - {file = "grpcio-1.57.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b363bbb5253e5f9c23d8a0a034dfdf1b7c9e7f12e602fc788c435171e96daccc"}, - {file = "grpcio-1.57.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:f1fb0fd4a1e9b11ac21c30c169d169ef434c6e9344ee0ab27cfa6f605f6387b2"}, - {file = "grpcio-1.57.0-cp37-cp37m-win_amd64.whl", hash = "sha256:34950353539e7d93f61c6796a007c705d663f3be41166358e3d88c45760c7d98"}, - {file = "grpcio-1.57.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:871f9999e0211f9551f368612460442a5436d9444606184652117d6a688c9f51"}, - {file = "grpcio-1.57.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:a8a8e560e8dbbdf29288872e91efd22af71e88b0e5736b0daf7773c1fecd99f0"}, - {file = "grpcio-1.57.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:2313b124e475aa9017a9844bdc5eafb2d5abdda9d456af16fc4535408c7d6da6"}, - {file = "grpcio-1.57.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4098b6b638d9e0ca839a81656a2fd4bc26c9486ea707e8b1437d6f9d61c3941"}, - {file = "grpcio-1.57.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e5b58e32ae14658085c16986d11e99abd002ddbf51c8daae8a0671fffb3467f"}, - {file = "grpcio-1.57.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0f80bf37f09e1caba6a8063e56e2b87fa335add314cf2b78ebf7cb45aa7e3d06"}, - {file = "grpcio-1.57.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5b7a4ce8f862fe32b2a10b57752cf3169f5fe2915acfe7e6a1e155db3da99e79"}, - {file = "grpcio-1.57.0-cp38-cp38-win32.whl", hash = "sha256:9338bacf172e942e62e5889b6364e56657fbf8ac68062e8b25c48843e7b202bb"}, - {file = "grpcio-1.57.0-cp38-cp38-win_amd64.whl", hash = "sha256:e1cb52fa2d67d7f7fab310b600f22ce1ff04d562d46e9e0ac3e3403c2bb4cc16"}, - {file = "grpcio-1.57.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:fee387d2fab144e8a34e0e9c5ca0f45c9376b99de45628265cfa9886b1dbe62b"}, - {file = "grpcio-1.57.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:b53333627283e7241fcc217323f225c37783b5f0472316edcaa4479a213abfa6"}, - {file = "grpcio-1.57.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:f19ac6ac0a256cf77d3cc926ef0b4e64a9725cc612f97228cd5dc4bd9dbab03b"}, - {file = "grpcio-1.57.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3fdf04e402f12e1de8074458549337febb3b45f21076cc02ef4ff786aff687e"}, - {file = "grpcio-1.57.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5613a2fecc82f95d6c51d15b9a72705553aa0d7c932fad7aed7afb51dc982ee5"}, - {file = "grpcio-1.57.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b670c2faa92124b7397b42303e4d8eb64a4cd0b7a77e35a9e865a55d61c57ef9"}, - {file = "grpcio-1.57.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7a635589201b18510ff988161b7b573f50c6a48fae9cb567657920ca82022b37"}, - {file = "grpcio-1.57.0-cp39-cp39-win32.whl", hash = "sha256:d78d8b86fcdfa1e4c21f8896614b6cc7ee01a2a758ec0c4382d662f2a62cf766"}, - {file = "grpcio-1.57.0-cp39-cp39-win_amd64.whl", hash = "sha256:20ec6fc4ad47d1b6e12deec5045ec3cd5402d9a1597f738263e98f490fe07056"}, - {file = "grpcio-1.57.0.tar.gz", hash = "sha256:4b089f7ad1eb00a104078bab8015b0ed0ebcb3b589e527ab009c53893fd4e613"}, + {file = "grpcio-1.58.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:3e6bebf1dfdbeb22afd95650e4f019219fef3ab86d3fca8ebade52e4bc39389a"}, + {file = "grpcio-1.58.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:cde11577d5b6fd73a00e6bfa3cf5f428f3f33c2d2878982369b5372bbc4acc60"}, + {file = "grpcio-1.58.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:a2d67ff99e70e86b2be46c1017ae40b4840d09467d5455b2708de6d4c127e143"}, + {file = "grpcio-1.58.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ed979b273a81de36fc9c6716d9fb09dd3443efa18dcc8652501df11da9583e9"}, + {file = "grpcio-1.58.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:458899d2ebd55d5ca2350fd3826dfd8fcb11fe0f79828ae75e2b1e6051d50a29"}, + {file = "grpcio-1.58.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bc7ffef430b80345729ff0a6825e9d96ac87efe39216e87ac58c6c4ef400de93"}, + {file = "grpcio-1.58.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5b23d75e5173faa3d1296a7bedffb25afd2fddb607ef292dfc651490c7b53c3d"}, + {file = "grpcio-1.58.0-cp310-cp310-win32.whl", hash = "sha256:fad9295fe02455d4f158ad72c90ef8b4bcaadfdb5efb5795f7ab0786ad67dd58"}, + {file = "grpcio-1.58.0-cp310-cp310-win_amd64.whl", hash = "sha256:bc325fed4d074367bebd465a20763586e5e1ed5b943e9d8bc7c162b1f44fd602"}, + {file = "grpcio-1.58.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:652978551af02373a5a313e07bfef368f406b5929cf2d50fa7e4027f913dbdb4"}, + {file = "grpcio-1.58.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:9f13a171281ebb4d7b1ba9f06574bce2455dcd3f2f6d1fbe0fd0d84615c74045"}, + {file = "grpcio-1.58.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:8774219e21b05f750eef8adc416e9431cf31b98f6ce9def288e4cea1548cbd22"}, + {file = "grpcio-1.58.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09206106848462763f7f273ca93d2d2d4d26cab475089e0de830bb76be04e9e8"}, + {file = "grpcio-1.58.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62831d5e251dd7561d9d9e83a0b8655084b2a1f8ea91e4bd6b3cedfefd32c9d2"}, + {file = "grpcio-1.58.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:212f38c6a156862098f6bdc9a79bf850760a751d259d8f8f249fc6d645105855"}, + {file = "grpcio-1.58.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4b12754af201bb993e6e2efd7812085ddaaef21d0a6f0ff128b97de1ef55aa4a"}, + {file = "grpcio-1.58.0-cp311-cp311-win32.whl", hash = "sha256:3886b4d56bd4afeac518dbc05933926198aa967a7d1d237a318e6fbc47141577"}, + {file = "grpcio-1.58.0-cp311-cp311-win_amd64.whl", hash = "sha256:002f228d197fea12797a14e152447044e14fb4fdb2eb5d6cfa496f29ddbf79ef"}, + {file = "grpcio-1.58.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:b5e8db0aff0a4819946215f156bd722b6f6c8320eb8419567ffc74850c9fd205"}, + {file = "grpcio-1.58.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:201e550b7e2ede113b63e718e7ece93cef5b0fbf3c45e8fe4541a5a4305acd15"}, + {file = "grpcio-1.58.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:d79b660681eb9bc66cc7cbf78d1b1b9e335ee56f6ea1755d34a31108b80bd3c8"}, + {file = "grpcio-1.58.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ef8d4a76d2c7d8065aba829f8d0bc0055495c998dce1964ca5b302d02514fb3"}, + {file = "grpcio-1.58.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cba491c638c76d3dc6c191d9c75041ca5b8f5c6de4b8327ecdcab527f130bb4"}, + {file = "grpcio-1.58.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6801ff6652ecd2aae08ef994a3e49ff53de29e69e9cd0fd604a79ae4e545a95c"}, + {file = "grpcio-1.58.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:24edec346e69e672daf12b2c88e95c6f737f3792d08866101d8c5f34370c54fd"}, + {file = "grpcio-1.58.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7e473a7abad9af48e3ab5f3b5d237d18208024d28ead65a459bd720401bd2f8f"}, + {file = "grpcio-1.58.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:4891bbb4bba58acd1d620759b3be11245bfe715eb67a4864c8937b855b7ed7fa"}, + {file = "grpcio-1.58.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:e9f995a8a421405958ff30599b4d0eec244f28edc760de82f0412c71c61763d2"}, + {file = "grpcio-1.58.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:2f85f87e2f087d9f632c085b37440a3169fda9cdde80cb84057c2fc292f8cbdf"}, + {file = "grpcio-1.58.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb6b92036ff312d5b4182fa72e8735d17aceca74d0d908a7f08e375456f03e07"}, + {file = "grpcio-1.58.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d81c2b2b24c32139dd2536972f1060678c6b9fbd106842a9fcdecf07b233eccd"}, + {file = "grpcio-1.58.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:fbcecb6aedd5c1891db1d70efbfbdc126c986645b5dd616a045c07d6bd2dfa86"}, + {file = "grpcio-1.58.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92ae871a902cf19833328bd6498ec007b265aabf2fda845ab5bd10abcaf4c8c6"}, + {file = "grpcio-1.58.0-cp38-cp38-win32.whl", hash = "sha256:dc72e04620d49d3007771c0e0348deb23ca341c0245d610605dddb4ac65a37cb"}, + {file = "grpcio-1.58.0-cp38-cp38-win_amd64.whl", hash = "sha256:1c1c5238c6072470c7f1614bf7c774ffde6b346a100521de9ce791d1e4453afe"}, + {file = "grpcio-1.58.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:fe643af248442221db027da43ed43e53b73e11f40c9043738de9a2b4b6ca7697"}, + {file = "grpcio-1.58.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:128eb1f8e70676d05b1b0c8e6600320fc222b3f8c985a92224248b1367122188"}, + {file = "grpcio-1.58.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:039003a5e0ae7d41c86c768ef8b3ee2c558aa0a23cf04bf3c23567f37befa092"}, + {file = "grpcio-1.58.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f061722cad3f9aabb3fbb27f3484ec9d4667b7328d1a7800c3c691a98f16bb0"}, + {file = "grpcio-1.58.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba0af11938acf8cd4cf815c46156bcde36fa5850518120920d52620cc3ec1830"}, + {file = "grpcio-1.58.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d4cef77ad2fed42b1ba9143465856d7e737279854e444925d5ba45fc1f3ba727"}, + {file = "grpcio-1.58.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:24765a627eb4d9288ace32d5104161c3654128fe27f2808ecd6e9b0cfa7fc8b9"}, + {file = "grpcio-1.58.0-cp39-cp39-win32.whl", hash = "sha256:f0241f7eb0d2303a545136c59bc565a35c4fc3b924ccbd69cb482f4828d6f31c"}, + {file = "grpcio-1.58.0-cp39-cp39-win_amd64.whl", hash = "sha256:dcfba7befe3a55dab6fe1eb7fc9359dc0c7f7272b30a70ae0af5d5b063842f28"}, + {file = "grpcio-1.58.0.tar.gz", hash = "sha256:532410c51ccd851b706d1fbc00a87be0f5312bd6f8e5dbf89d4e99c7f79d7499"}, ] [package.extras] -protobuf = ["grpcio-tools (>=1.57.0)"] +protobuf = ["grpcio-tools (>=1.58.0)"] [[package]] name = "idna" @@ -535,21 +509,6 @@ sql-other = ["SQLAlchemy (>=1.4.16)"] test = ["hypothesis (>=6.34.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] xml = ["lxml (>=4.6.3)"] -[[package]] -name = "platformdirs" -version = "3.10.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -optional = false -python-versions = ">=3.7" -files = [ - {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, - {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, -] - -[package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] - [[package]] name = "pluggy" version = "0.13.1" @@ -712,13 +671,13 @@ six = ">=1.5" [[package]] name = "pytz" -version = "2023.3" +version = "2023.3.post1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, - {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, ] [[package]] @@ -833,42 +792,6 @@ files = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] - -[[package]] -name = "tox" -version = "3.27.0" -description = "tox is a generic virtualenv management and test command line tool" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" -files = [ - {file = "tox-3.27.0-py2.py3-none-any.whl", hash = "sha256:89e4bc6df3854e9fc5582462e328dd3660d7d865ba625ae5881bbc63836a6324"}, - {file = "tox-3.27.0.tar.gz", hash = "sha256:d2c945f02a03d4501374a3d5430877380deb69b218b1df9b7f1d2f2a10befaf9"}, -] - -[package.dependencies] -colorama = {version = ">=0.4.1", markers = "platform_system == \"Windows\""} -filelock = ">=3.0.0" -packaging = ">=14" -pluggy = ">=0.12.0" -py = ">=1.4.17" -six = ">=1.14.0" -tomli = {version = ">=2.0.1", markers = "python_version >= \"3.7\" and python_version < \"3.11\""} -virtualenv = ">=16.0.0,<20.0.0 || >20.0.0,<20.0.1 || >20.0.1,<20.0.2 || >20.0.2,<20.0.3 || >20.0.3,<20.0.4 || >20.0.4,<20.0.5 || >20.0.5,<20.0.6 || >20.0.6,<20.0.7 || >20.0.7" - -[package.extras] -docs = ["pygments-github-lexers (>=0.0.5)", "sphinx (>=2.0.0)", "sphinxcontrib-autoprogram (>=0.1.5)", "towncrier (>=18.5.0)"] -testing = ["flaky (>=3.4.0)", "freezegun (>=0.3.11)", "pathlib2 (>=2.3.3)", "psutil (>=5.6.1)", "pytest (>=4.0.0)", "pytest-cov (>=2.5.1)", "pytest-mock (>=1.10.0)", "pytest-randomly (>=1.0.0)"] - [[package]] name = "tqdm" version = "4.66.1" @@ -891,24 +814,24 @@ telegram = ["requests"] [[package]] name = "types-pyyaml" -version = "6.0.12.11" +version = "6.0.12.12" description = "Typing stubs for PyYAML" optional = false python-versions = "*" files = [ - {file = "types-PyYAML-6.0.12.11.tar.gz", hash = "sha256:7d340b19ca28cddfdba438ee638cd4084bde213e501a3978738543e27094775b"}, - {file = "types_PyYAML-6.0.12.11-py3-none-any.whl", hash = "sha256:a461508f3096d1d5810ec5ab95d7eeecb651f3a15b71959999988942063bf01d"}, + {file = "types-PyYAML-6.0.12.12.tar.gz", hash = "sha256:334373d392fde0fdf95af5c3f1661885fa10c52167b14593eb856289e1855062"}, + {file = "types_PyYAML-6.0.12.12-py3-none-any.whl", hash = "sha256:c05bc6c158facb0676674b7f11fe3960db4f389718e19e62bd2b84d6205cfd24"}, ] [[package]] name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, ] [[package]] @@ -924,13 +847,13 @@ files = [ [[package]] name = "urllib3" -version = "2.0.4" +version = "2.0.5" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.7" files = [ - {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, - {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, + {file = "urllib3-2.0.5-py3-none-any.whl", hash = "sha256:ef16afa8ba34a1f989db38e1dbbe0c302e4289a47856990d0682e374563ce35e"}, + {file = "urllib3-2.0.5.tar.gz", hash = "sha256:13abf37382ea2ce6fb744d4dad67838eec857c9f4f57009891805e0b5e123594"}, ] [package.extras] @@ -953,26 +876,6 @@ files = [ [package.extras] tests = ["flake8", "pytest", "pytest-cov", "requests"] -[[package]] -name = "virtualenv" -version = "20.24.3" -description = "Virtual Python Environment builder" -optional = false -python-versions = ">=3.7" -files = [ - {file = "virtualenv-20.24.3-py3-none-any.whl", hash = "sha256:95a6e9398b4967fbcb5fef2acec5efaf9aa4972049d9ae41f95e0972a683fd02"}, - {file = "virtualenv-20.24.3.tar.gz", hash = "sha256:e5c3b4ce817b0b328af041506a2a299418c98747c4b1e68cb7527e74ced23efc"}, -] - -[package.dependencies] -distlib = ">=0.3.7,<1" -filelock = ">=3.12.2,<4" -platformdirs = ">=3.9.1,<4" - -[package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] - [[package]] name = "win32-setctime" version = "1.1.0" @@ -993,4 +896,4 @@ grpc = ["googleapis-common-protos", "grpc-gateway-protoc-gen-openapiv2", "grpcio [metadata] lock-version = "2.0" python-versions = ">=3.8,<4.0" -content-hash = "555989cee957f6a0f6427d215a9cc2d5aede797010d1027ec3f5569def029b96" +content-hash = "c9df04173f9f51f9615c40f400f5703a8cab68d10ecb811113f2cae92d64ec7a"