Repository: StackStorm/st2 (language: python)

Issue:
Python 3.8 to 3.11 mongo 7.0
python 3.12 works.  mongodb 7.0 works.
I also fixed some unit tests.
This merges in @FileMagic  and @nzlosh work on mongo 7.0.

Update from Mongo 4.4 to Mongo 7 in CI
Switches from Mongo 4.4 to Mongo 7.0 using work by @guzzijones cherry-picked from #6236.

Also updates the redis container definition in the orquesta workflow to be consistent with ci workflow changes added in #6245.
Rename `[database].ssl*` options to `[database].tls*` to support pymongo 4
pymongo 4 removes deprecated names for database connection options that were renamed some time ago. We even have a TODO about updating our usage of the deprecated names in the code:

https://github.com/StackStorm/st2/blob/7d70498bbbee9759b56ed6bab410c8a6d944970a/st2common/st2common/models/db/__init__.py#L445-L447

One change in particular could not be supported without breaking backwards compatibility: The files for `ssl_keyfile` and `ssl_certfile` must be concatenated and passed as one file in the new `tls_certificate_key_file` option.

Why update to pymongo 4 (in a follow-up PR)? We need to update pymongo to ensure we're using a version that tests with and officially supports our target MongoDB version(s) (we are planning on using MongoDB 7; see #6246 and #6236). The [pymongo4 upgrade guide](https://pymongo.readthedocs.io/en/stable/migrate-to-pymongo4.html#renamed-uri-options) has details on the option naming migration.

Each commit touches one option or aspect of this migration, so it will be useful to review each commit.

Since we're using newer `oslo.config` now, we can also be more explicit about deprecations when defining the options. So, a few of the commits make use of those newer features to improve our `st2.conf.sample` file.

In summary, these options were migrated:
- 362286882c0a8c6496a3ff6b54f58f4d3933050b `ssl` -> `tls`
- dc62d113a19ac6eac42c8370a7101e0456f69bf2 `ssl_keyfile` + `ssl_certfile` -> `tls_certificate_key_file` (files must be concatenated)
    - Also add `tls_certificate_key_file_password`
- 2094ff4e1717aa60990c3e5cbbedf217810070c7 `ssl_cert_reqs` -> `tls_allow_invalid_certificates` (from a string opt to a bool opt)
- e610bdc5bd3223def7eb39bb74be89043308179b `ssl_ca_certs` -> `tls_ca_file`
- c962d3cded54f66e5f3a2353d0faf4fbf084aa47 `ssl_match_hostnames` -> `tls_allow_invalid_hostnames` (inverted meaning)

Note: In #6246, I initially developed this using mongo's camelCase naming convention in st2.conf. After discussing with @nzlosh I went back to using snake_case to be consistent with the rest of the st2.conf options.


Discussion / hints:
@nzlosh  @cognifloyd this is now passing testing.  pytest doesn't offer a way to split tests so I removed chunk 1  chunk 2, etc.
chunk1 and chunk2 were running the exact same tests from what I can tell.  I don't see any usage of NODE_TOTAL or NODE_INDEX in our workflow code or testing code.
> chunk1 and chunk2 were running the exact same tests from what I can tell. I don't see any usage of NODE_TOTAL or NODE_INDEX in our workflow code or testing code.

The switch to pytest makes those vars obsolete. They were used by `nose-parallel`: https://pypi.org/project/nose-parallel/
I'm going to slowly review this PR. I plan to look for isolated pieces of this PR that could go in separate PRs to make each bit of functionality easier to review and check for completeness. I understand that breaking up a large PR can be painful, so I'll try to minimize that pain as much as I can.
it is mostly just pytest changes.

On Thu, Sep 12, 2024 at 22:38 Jacob Floyd ***@***.***> wrote:

> I'm going to slowly review this PR. I plan to look for isolated pieces of
> this PR that could go in separate PRs to make each bit of functionality
> easier to review and check for completeness. I understand that breaking up
> a large PR can be painful, so I'll try to minimize that pain as much as I
> can.



Fix patch:
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 29ebb59719..8d17178c7a 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -33,7 +33,7 @@ Fixed
 Changed
 ~~~~~~~
 * Bumped `jsonschema` 2.6.0 -> 3.2.0 now that python3.6 is not supported. #6118
-* Bumped many deps based on the lockfile generated by pants+pex. #6181 #6227 #6200 (by @cognifloyd and @nzlosh)
+* Bumped many deps based on the lockfile generated by pants+pex. #6181 #6227 #6200 #6252 (by @cognifloyd and @nzlosh)
 * Switch to python3's standard lib unittest from unittest2, a backport of python3 unittest features for python2. #6187 (by @nzlosh)
 * Drop Python 3.6 testing in CircleCI. #6080
   Contributed by (@philipphomberger Schwarz IT KG)
@@ -51,6 +51,9 @@ Changed
   and/or `[database].ssl_certfile`, as those options are ignored in StackStorm 3.9.0. #6250
   Contributed by @cognifloyd
 
+* Update mongoengine to 0.29 and pymongo to 4.6.3. The pymongo bump (from 3.x to 4.x) is a major update. #6252
+  Contributed by @cognifloyd
+
 Added
 ~~~~~
 * Continue introducing `pants <https://www.pantsbuild.org/docs>`_ to improve DX (Developer Experience)
diff --git a/Makefile b/Makefile
index 9a46a71d4b..653e3bad92 100644
--- a/Makefile
+++ b/Makefile
@@ -60,7 +60,7 @@ ST2TESTS_REDIS_PORT := 6379
 # Pin common pip version here across all the targets
 # Note! Periodic maintenance pip upgrades are required to be up-to-date with the latest pip security fixes and updates
 PIP_VERSION ?= 24.2
-SETUPTOOLS_VERSION ?= 74.1.2
+SETUPTOOLS_VERSION ?= 75.1.0
 PIP_OPTIONS := $(ST2_PIP_OPTIONS)
 
 ifndef PYLINT_CONCURRENCY
diff --git a/fixed-requirements.txt b/fixed-requirements.txt
index 58fcb69b90..9212394fd4 100644
--- a/fixed-requirements.txt
+++ b/fixed-requirements.txt
@@ -7,7 +7,7 @@ cffi==1.17.1
 # NOTE: 2.0 version breaks pymongo work with hosts
 dnspython==1.16.0
 cryptography==43.0.1
-eventlet==0.36.1
+eventlet==0.37.0
 flex==6.14.1
 # Note: installs gitpython==3.1.37 (security fixed) under py3.8 and gitpython==3.1.18 (latest available, vulnerable) under py3.6
 # TODO: Pin to 3.1.37 or higher after dropping python3.6 support
@@ -15,16 +15,16 @@ gitpython==3.1.43
 # Needed by gitpython, old versions used to bundle it
 gitdb==4.0.11
 # Note: greenlet is used by eventlet
-greenlet==3.0.3
+greenlet==3.1.0
 gunicorn==23.0.0
 jsonpath-rw==1.4.0
 jsonschema==3.2.0
-kombu==5.4.0
+kombu==5.4.2
 lockfile==0.12.2
 # Fix MarkupSafe to < 2.1.0 as 2.1.0 removes soft_unicode
 # >=0.23 was from jinja2
 MarkupSafe==2.0.1
-mongoengine==0.23.1
+mongoengine==0.29.1
 # required by orquesta (networkx<2.6 for py3.6, networkx<3 for py3.8)
 networkx==2.8.8
 # networkx dropped its dep on decorator in version 2.6, so the old pin is unneeded.
@@ -34,12 +34,12 @@ decorator==5.1.1
 oslo.config==9.6.0
 oslo.utils==7.3.0
 # paramiko 2.11.0 is needed by cryptography > 37.0.0
-paramiko==3.4.1
+paramiko==3.5.0
 passlib==1.7.4
 # 202403: bump to 3.0.43 for py3.10 support
 prompt-toolkit==3.0.47
 pyinotify==0.9.6 ; platform_system=="Linux"
-pymongo==3.12.3
+pymongo==4.6.3
 pyparsing==3.1.4
 zstandard==0.23.0
 # pyOpenSSL 23.1.0 supports cryptography up to 40.0.x
@@ -49,7 +49,7 @@ editor==1.6.6
 # editor dependency, required here for inclusion in st2client setup.py
 pygments==2.18.0
 python-keyczar==0.716
-pytz==2024.1
+pytz==2024.2
 pywinrm==0.5.0
 pyyaml==6.0.2
 redis==5.0.8
@@ -69,9 +69,9 @@ stevedore==5.3.0
 tenacity==9.0.0
 tooz==6.3.0
 # Note: virtualenv embeds wheels for pip, wheel, and setuptools. So pinning virtualenv pins those as well.
-# virtualenv==20.26.3 (<21) has pip==24.1 wheel==0.43.0 setuptools==70.1.0
-# lockfiles/st2.lock has pip==24.2 wheel==0.43.0 setuptools==72.1.0
-virtualenv==20.26.4
+# virtualenv==20.26.5 (<21) has pip==24.2 wheel==0.44.0 setuptools==75.1.0
+# lockfiles/st2.lock has pip==24.2 wheel==0.44.0 setuptools==75.1.0
+virtualenv==20.26.5
 webob==1.8.8
 zake==0.2.2
 # test requirements below
@@ -84,4 +84,4 @@ psutil==6.0.0
 python-dateutil==2.9.0.post0
 python-statsd==2.1.0
 orjson==3.10.7
-zipp==3.20.1
+zipp==3.20.2
diff --git a/lockfiles/st2.lock b/lockfiles/st2.lock
index 9f3d0ddaf0..2eb8205f63 100644
--- a/lockfiles/st2.lock
+++ b/lockfiles/st2.lock
@@ -34,7 +34,7 @@
 //     "logshipper@ git+https://github.com/StackStorm/logshipper.git@stackstorm_patched ; platform_system == \"Linux\"",
 //     "mail-parser==3.15.0",
 //     "mock",
-//     "mongoengine<0.24.0,>=0.21.0",
+//     "mongoengine<0.30.0,>=0.24.0",
 //     "networkx",
 //     "nose",
 //     "nose-parallel",
@@ -51,7 +51,7 @@
 //     "psutil",
 //     "pygments",
 //     "pyinotify<=0.10,>=0.9.5; platform_system == \"Linux\"",
-//     "pymongo<3.13.0,>=3.11.0",
+//     "pymongo<4.7,>=4.0.0",
 //     "pyrabbit",
 //     "pysocks",
 //     "pytest",
@@ -104,6 +104,7 @@
     "MarkupSafe<2.1.0,>=0.23",
     "dnspython<2.0.0,>=1.16.0"
   ],
+  "excluded": [],
   "locked_resolves": [
     {
       "locked_requirements": [
@@ -1100,13 +1101,13 @@
           "artifacts": [
             {
               "algorithm": "sha256",
-              "hash": "e42d0f73b718e654c223a033b8692d1a94d778a6c1deb6c3d21442746f3f727f",
-              "url": "https://files.pythonhosted.org/packages/75/af/73efcf654d8875febc6599f5a3d1eed043c1ca34a9b12950208cbf710d2a/eventlet-0.36.1-py3-none-any.whl"
+              "hash": "801ac231401e41f33a799457c78fdbfabc1c2f28bf9346d4ec4188e9aebc2067",
+              "url": "https://files.pythonhosted.org/packages/bf/1e/6590b481bd698ad281f1ee601283421ff167274c15ba73ae80385617ddec/eventlet-0.37.0-py3-none-any.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "d227fe76a63d9e6a6cef53beb8ad0b2dc40a5e7737c801f4b474cfae1db07bc5",
-              "url": "https://files.pythonhosted.org/packages/1b/df/f441947eef23192c9f179e46868ee8510a6f7b6627b76b88f07692f9c706/eventlet-0.36.1.tar.gz"
+              "hash": "fa49bf5a549cdbaa06919679979ea022ac8f8f3cf0499f26849a1cd8e64c30b1",
+              "url": "https://files.pythonhosted.org/packages/54/8c/d68a786f212bdf362ac91ab248ae94aaf413aeecfd652a08ced9a3d63427/eventlet-0.37.0.tar.gz"
             }
           ],
           "project_name": "eventlet",
@@ -1123,7 +1124,7 @@
             "twine; extra == \"dev\""
           ],
           "requires_python": ">=3.7",
-          "version": "0.36.1"
+          "version": "0.37.0"
         },
         {
           "artifacts": [
@@ -1167,33 +1168,33 @@
           "artifacts": [
             {
               "algorithm": "sha256",
-              "hash": "f6ed4c963184f4c84dd5557ce8fece759a3724b37b80c6c4f20a2f63a4dc6609",
-              "url": "https://files.pythonhosted.org/packages/2f/95/f9310f35376024e1086c59cbb438d319fc9a4ef853289ce7c661539edbd4/filelock-3.16.0-py3-none-any.whl"
+              "hash": "2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0",
+              "url": "https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "81de9eb8453c769b63369f87f11131a7ab04e367f8d97ad39dc230daa07e3bec",
-              "url": "https://files.pythonhosted.org/packages/e6/76/3981447fd369539aba35797db99a8e2ff7ed01d9aa63e9344a31658b8d81/filelock-3.16.0.tar.gz"
+              "hash": "c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435",
+              "url": "https://files.pythonhosted.org/packages/9d/db/3ef5bb276dae18d6ec2124224403d1d67bccdbefc17af4cc8f553e341ab1/filelock-3.16.1.tar.gz"
             }
           ],
           "project_name": "filelock",
           "requires_dists": [
             "covdefaults>=2.3; extra == \"testing\"",
             "coverage>=7.6.1; extra == \"testing\"",
-            "diff-cover>=9.1.1; extra == \"testing\"",
+            "diff-cover>=9.2; extra == \"testing\"",
             "furo>=2024.8.6; extra == \"docs\"",
             "pytest-asyncio>=0.24; extra == \"testing\"",
             "pytest-cov>=5; extra == \"testing\"",
             "pytest-mock>=3.14; extra == \"testing\"",
             "pytest-timeout>=2.3.1; extra == \"testing\"",
-            "pytest>=8.3.2; extra == \"testing\"",
-            "sphinx-autodoc-typehints!=1.23.4,>=2.4; extra == \"docs\"",
+            "pytest>=8.3.3; extra == \"testing\"",
+            "sphinx-autodoc-typehints>=2.4.1; extra == \"docs\"",
             "sphinx>=8.0.2; extra == \"docs\"",
             "typing-extensions>=4.12.2; python_version < \"3.11\" and extra == \"typing\"",
-            "virtualenv>=20.26.3; extra == \"testing\""
+            "virtualenv>=20.26.4; extra == \"testing\""
           ],
           "requires_python": ">=3.8",
-          "version": "3.16.0"
+          "version": "3.16.1"
         },
         {
           "artifacts": [
@@ -1356,88 +1357,88 @@
           "artifacts": [
             {
               "algorithm": "sha256",
-              "hash": "77457465d89b8263bca14759d7c1684df840b6811b2499838cc5b040a8b5b113",
-              "url": "https://files.pythonhosted.org/packages/54/4b/965a542baf157f23912e466b50fa9c49dd66132d9495d201e6c607ea16f2/greenlet-3.0.3-cp39-cp39-musllinux_1_1_x86_64.whl"
+              "hash": "5fd6e94593f6f9714dbad1aaba734b5ec04593374fa6638df61592055868f8b8",
+              "url": "https://files.pythonhosted.org/packages/31/99/04e9416ee5ad22d5ceaf01efac2e7386e17c3d4c6dd3407a3df4b9c682f6/greenlet-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "da70d4d51c8b306bb7a031d5cff6cc25ad253affe89b70352af5f1cb68e74b53",
-              "url": "https://files.pythonhosted.org/packages/0b/8a/f5140c8713f919af0e98e6aaa40cb20edaaf3739d18c4a077581e2422ac4/greenlet-3.0.3-cp39-cp39-macosx_11_0_universal2.whl"
+              "hash": "f9482c2ed414781c0af0b35d9d575226da6b728bd1a720668fa05837184965b7",
+              "url": "https://files.pythonhosted.org/packages/3b/4e/2d0428b76e39802cfc2ce53afab4b0cbbdc0ba13925180352c7f0cf51b46/greenlet-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "098d86f528c855ead3479afe84b49242e174ed262456c342d70fc7f972bc13c4",
-              "url": "https://files.pythonhosted.org/packages/13/af/8db0d63147c6362447eb49da60573b41aee5cf5864fe1e27bdbaf7060bd2/greenlet-3.0.3-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl"
+              "hash": "dd65695a8df1233309b701dec2539cc4b11e97d4fcc0f4185b4a12ce54db0491",
+              "url": "https://files.pythonhosted.org/packages/47/ff/c8ec3bcf7e23f45ed4085b6673a23b4d4763bb39e9797b787c55ed65dbc1/greenlet-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "43374442353259554ce33599da8b692d5aa96f8976d567d4badf263371fbe491",
-              "url": "https://files.pythonhosted.org/packages/17/14/3bddb1298b9a6786539ac609ba4b7c9c0842e12aa73aaa4d8d73ec8f8185/greenlet-3.0.3.tar.gz"
+              "hash": "b9505a0c8579899057cbefd4ec34d865ab99852baf1ff33a9481eb3924e2da0b",
+              "url": "https://files.pythonhosted.org/packages/50/15/b3e7de3d7e141a328b8141d85e4b01c27bcff0161e5ca2d9a490b87ae3c5/greenlet-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "1996cb9306c8595335bb157d133daf5cf9f693ef413e7673cb07e3e5871379ca",
-              "url": "https://files.pythonhosted.org/packages/3d/4a/c9590b31bfefe089d8fae72201c77761a63c1685c7f511a692a267d7f25e/greenlet-3.0.3-cp38-cp38-macosx_11_0_universal2.whl"
+              "hash": "d3c59a06c2c28a81a026ff11fbf012081ea34fb9b7052f2ed0366e14896f0a1d",
+              "url": "https://files.pythonhosted.org/packages/57/9d/2d618474cdab9f664b2cf0641e7832b1a86e03c6dbd1ff505c7cdf2c4d8e/greenlet-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "b37eef18ea55f2ffd8f00ff8fe7c8d3818abd3e25fb73fae2ca3b672e333a7a6",
-              "url": "https://files.pythonhosted.org/packages/74/82/9737e7dee4ccb9e1be2a8f17cf760458be2c36c6ff7bbaef55cbe279e729/greenlet-3.0.3-cp39-cp39-musllinux_1_1_aarch64.whl"
+              "hash": "b395121e9bbe8d02a750886f108d540abe66075e61e22f7353d9acb0b81be0f0",
+              "url": "https://files.pythonhosted.org/packages/65/1b/3d91623c3eff61c11799e7f3d6c01f6bfa9bd2d1f0181116fd0b9b108a40/greenlet-3.1.0.tar.gz"
             },
             {
               "algorithm": "sha256",
-              "hash": "81bb9c6d52e8321f09c3d165b2a78c680506d9af285bfccbad9fb7ad5a5da3e5",
-              "url": "https://files.pythonhosted.org/packages/74/9f/71df0154a13d77e92451891a087a4c5783375964132290fca70c7e80e5d4/greenlet-3.0.3-cp38-cp38-musllinux_1_1_aarch64.whl"
+              "hash": "665b21e95bc0fce5cab03b2e1d90ba9c66c510f1bb5fdc864f3a377d0f553f6b",
+              "url": "https://files.pythonhosted.org/packages/65/94/eafcd6812ad878e14b92aa0c96a28f84a35a23685d8fad0b7569235ae994/greenlet-3.1.0-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "6b66c9c1e7ccabad3a7d037b2bcb740122a7b17a53734b7d72a344ce39882a1b",
-              "url": "https://files.pythonhosted.org/packages/8a/74/498377804f8ebfb1efdfbe33e93cf3b29d77e207e9496f0c10912d5055b4/greenlet-3.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
+              "hash": "44cd313629ded43bb3b98737bba2f3e2c2c8679b55ea29ed73daea6b755fe8e7",
+              "url": "https://files.pythonhosted.org/packages/7b/da/1c095eaf7ade0d67c520ee98ab2f34b9c1279e5be96154a46fb940aa8567/greenlet-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "1551a8195c0d4a68fac7a4325efac0d541b48def35feb49d803674ac32582f61",
-              "url": "https://files.pythonhosted.org/packages/9d/ea/8bc7ed08ba274bdaff08f2cb546d832b8f44af267e03ca6e449840486915/greenlet-3.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
+              "hash": "2d004db911ed7b6218ec5c5bfe4cf70ae8aa2223dffbb5b3c69e342bb253cb28",
+              "url": "https://files.pythonhosted.org/packages/9d/e7/744b590459b7d06b6b3383036ae0a0540ece9132f5e2c6c3c640de6c36ab/greenlet-3.1.0-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "b7dcbe92cc99f08c8dd11f930de4d99ef756c3591a5377d1d9cd7dd5e896da71",
-              "url": "https://files.pythonhosted.org/packages/a2/92/f11dbbcf33809421447b24d2eefee0575c59c8569d6d03f7ca4d2b34d56f/greenlet-3.0.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl"
+              "hash": "db1b3ccb93488328c74e97ff888604a8b95ae4f35f4f56677ca57a4fc3a4220b",
+              "url": "https://files.pythonhosted.org/packages/aa/25/5aa6682f68b2c5a4ef1887e7d576cc76f6269f7c46aad71ce5163ae504ee/greenlet-3.1.0-cp39-cp39-macosx_10_9_universal2.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "64d7675ad83578e3fc149b617a444fab8efdafc9385471f868eb5ff83e446b8b",
-              "url": "https://files.pythonhosted.org/packages/af/05/b7e068070a6c143f34dfcd7e9144684271b8067e310f6da68269580db1d8/greenlet-3.0.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl"
+              "hash": "fad7a051e07f64e297e6e8399b4d6a3bdcad3d7297409e9a06ef8cbccff4f501",
+              "url": "https://files.pythonhosted.org/packages/c1/7c/6b1f3ced3867a7ca073100aab0d2d200f11b07bc60710eefbb6278cda219/greenlet-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "086152f8fbc5955df88382e8a75984e2bb1c892ad2e3c80a2508954e52295257",
-              "url": "https://files.pythonhosted.org/packages/cf/5b/2de4a398840d3b4d99c4a3476cda0d82badfa349f3f89846ada2e32e9500/greenlet-3.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl"
+              "hash": "cfcfb73aed40f550a57ea904629bdaf2e562c68fa1164fa4588e752af6efdc3f",
+              "url": "https://files.pythonhosted.org/packages/cd/84/9ed78fd909292a9aee9c713c8dc08d2335628ca56a5e675235818ca5f0e0/greenlet-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "c9db1c18f0eaad2f804728c67d6c610778456e3e1cc4ab4bbd5eeb8e6053c6fc",
-              "url": "https://files.pythonhosted.org/packages/d9/84/3d9f0255ae3681010d9eee9f4d1bd4790e41c87dcbdad5cbf893605039b5/greenlet-3.0.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl"
+              "hash": "5415b9494ff6240b09af06b91a375731febe0090218e2898d2b85f9b92abcda0",
+              "url": "https://files.pythonhosted.org/packages/d3/73/591c60545a81edc62c06325c4948865cca5904eb01388fbd11f9c5a72d5a/greenlet-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "d73a9fe764d77f87f8ec26a0c85144d6a951a6c438dfe50487df5595c6373eac",
-              "url": "https://files.pythonhosted.org/packages/dc/c3/06ca5f34b01af6d6e2fd2f97c0ad3673123a442bf4a3add548d374b1cc7c/greenlet-3.0.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl"
+              "hash": "a8870983af660798dc1b529e1fd6f1cefd94e45135a32e58bd70edd694540f33",
+              "url": "https://files.pythonhosted.org/packages/d9/b5/ad4ec97be5cd964932fe4cde80df03d9fca23ed8b5c65d54f16270af639f/greenlet-3.1.0-cp38-cp38-macosx_11_0_universal2.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "3ddc0f794e6ad661e321caa8d2f0a55ce01213c74722587256fb6566049a8b04",
-              "url": "https://files.pythonhosted.org/packages/e8/47/0fd13f50da7e43e313cce276c9ec9b5f862a8fedacdc30e7ca2a43ee7fd7/greenlet-3.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl"
+              "hash": "d58ec349e0c2c0bc6669bf2cd4982d2f93bf067860d23a0ea1fe677b0f0b1e09",
+              "url": "https://files.pythonhosted.org/packages/e2/0e/bfca17d8f0e7b7dfc918d504027bb795d1aad9ea459a90c33acb24c29034/greenlet-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "7170375bcc99f1a2fbd9c306f5be8764eaf3ac6b5cb968862cad4c7057756506",
-              "url": "https://files.pythonhosted.org/packages/fe/1f/b5cd033b55f347008235244626bb1ee2854adf9c3cb97ff406d98d6e1ea3/greenlet-3.0.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl"
+              "hash": "d45b75b0f3fd8d99f62eb7908cfa6d727b7ed190737dec7fe46d993da550b81a",
+              "url": "https://files.pythonhosted.org/packages/e7/80/b1f8b87bcb32f8aa2582e25088dc59e96dff9472d8f6d3e46b19cf9a6e89/greenlet-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "fd096eb7ffef17c456cfa587523c5f92321ae02427ff955bebe9e3c63bc9f0da",
-              "url": "https://files.pythonhosted.org/packages/ff/76/0893f4fe7b841660a5d75116c7d755c58652a4e9e12f6a72984eaa396881/greenlet-3.0.3-cp38-cp38-musllinux_1_1_x86_64.whl"
+              "hash": "c3967dcc1cd2ea61b08b0b276659242cbce5caca39e7cbc02408222fb9e6ff39",
+              "url": "https://files.pythonhosted.org/packages/f1/8c/a9f0d64d8eb142bb6931203a3768099a8016607409674970aeede2a72b53/greenlet-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl"
             }
           ],
           "project_name": "greenlet",
@@ -1448,7 +1449,7 @@
             "psutil; extra == \"test\""
           ],
           "requires_python": ">=3.7",
-          "version": "3.0.3"
+          "version": "3.1.0"
         },
         {
           "artifacts": [
@@ -1505,31 +1506,36 @@
           "artifacts": [
             {
               "algorithm": "sha256",
-              "hash": "050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac",
-              "url": "https://files.pythonhosted.org/packages/22/7e/d71db821f177828df9dea8c42ac46473366f191be53080e552e628aad991/idna-3.8-py3-none-any.whl"
+              "hash": "946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3",
+              "url": "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603",
-              "url": "https://files.pythonhosted.org/packages/e8/ac/e349c5e6d4543326c6883ee9491e3921e0d07b55fdf3cce184b40d63e72a/idna-3.8.tar.gz"
+              "hash": "12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9",
+              "url": "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz"
             }
           ],
           "project_name": "idna",
-          "requires_dists": [],
+          "requires_dists": [
+            "flake8>=7.1.1; extra == \"all\"",
+            "mypy>=1.11.2; extra == \"all\"",
+            "pytest>=8.3.2; extra == \"all\"",
+            "ruff>=0.6.2; extra == \"all\""
+          ],
           "requires_python": ">=3.6",
-          "version": "3.8"
+          "version": "3.10"
         },
         {
           "artifacts": [
             {
               "algorithm": "sha256",
-              "hash": "66f342cc6ac9818fc6ff340576acd24d65ba0b3efabb2b4ac08b598965a4a2f1",
-              "url": "https://files.pythonhosted.org/packages/c0/14/362d31bf1076b21e1bcdcb0dc61944822ff263937b804a79231df2774d28/importlib_metadata-8.4.0-py3-none-any.whl"
+              "hash": "45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b",
+              "url": "https://files.pythonhosted.org/packages/a0/d9/a1e041c5e7caa9a05c925f4bdbdfb7f006d1f74996af53467bc394c97be7/importlib_metadata-8.5.0-py3-none-any.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "9a547d3bc3608b025f93d403fdd1aae741c24fbb8314df4b155675742ce303c5",
-              "url": "https://files.pythonhosted.org/packages/c0/bd/fa8ce65b0a7d4b6d143ec23b0f5fd3f7ab80121078c465bc02baeaab22dc/importlib_metadata-8.4.0.tar.gz"
+              "hash": "71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7",
+              "url": "https://files.pythonhosted.org/packages/cd/12/33e59336dca5be0c398a7482335911a33aa0e20776128f038019f1a95f1b/importlib_metadata-8.5.0.tar.gz"
             }
           ],
           "project_name": "importlib-metadata",
@@ -1544,20 +1550,20 @@
             "packaging; extra == \"test\"",
             "pyfakefs; extra == \"test\"",
             "pytest!=8.1.*,>=6; extra == \"test\"",
-            "pytest-checkdocs>=2.4; extra == \"test\"",
-            "pytest-cov; extra == \"test\"",
-            "pytest-enabler>=2.2; extra == \"test\"",
-            "pytest-mypy; extra == \"test\"",
+            "pytest-checkdocs>=2.4; extra == \"check\"",
+            "pytest-cov; extra == \"cover\"",
+            "pytest-enabler>=2.2; extra == \"enabler\"",
+            "pytest-mypy; extra == \"type\"",
             "pytest-perf>=0.9.2; extra == \"test\"",
-            "pytest-ruff>=0.2.1; sys_platform != \"cygwin\" and extra == \"test\"",
+            "pytest-ruff>=0.2.1; sys_platform != \"cygwin\" and extra == \"check\"",
             "rst.linker>=1.9; extra == \"doc\"",
             "sphinx-lint; extra == \"doc\"",
             "sphinx>=3.5; extra == \"doc\"",
             "typing-extensions>=3.6.4; python_version < \"3.8\"",
-            "zipp>=0.5"
+            "zipp>=3.20"
           ],
           "requires_python": ">=3.8",
-          "version": "8.4.0"
+          "version": "8.5.0"
         },
         {
           "artifacts": [
@@ -1748,13 +1754,13 @@
           "artifacts": [
             {
               "algorithm": "sha256",
-              "hash": "c8dd99820467610b4febbc7a9e8a0d3d7da2d35116b67184418b51cc520ea6b6",
-              "url": "https://files.pythonhosted.org/packages/df/17/34f8ec5b9d46a1ddb598b7bf8f779c567421d05cd73742d09e549254c782/kombu-5.4.0-py3-none-any.whl"
+              "hash": "14212f5ccf022fc0a70453bb025a1dcc32782a588c49ea866884047d66e14763",
+              "url": "https://files.pythonhosted.org/packages/87/ec/7811a3cf9fdfee3ee88e54d08fcbc3fabe7c1b6e4059826c59d7b795651c/kombu-5.4.2-py3-none-any.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "ad200a8dbdaaa2bbc5f26d2ee7d707d9a1fded353a0f4bd751ce8c7d9f449c60",
-              "url": "https://files.pythonhosted.org/packages/b6/f4/d3e57b1c351bb47ce25b16e1cf6ea05df4613dbe56e3cf32ea80df1a8b4d/kombu-5.4.0.tar.gz"
+              "hash": "eef572dd2fd9fc614b37580e3caeafdd5af46c1eff31e7fba89138cdb406f2cf",
+              "url": "https://files.pythonhosted.org/packages/38/4d/b93fcb353d279839cc35d0012bee805ed0cf61c07587916bfc35dbfddaf1/kombu-5.4.2.tar.gz"
             }
           ],
           "project_name": "kombu",
@@ -1769,7 +1775,7 @@
             "confluent-kafka>=2.2.0; extra == \"confluentkafka\"",
             "kazoo>=2.8.0; extra == \"zookeeper\"",
             "librabbitmq>=2.0.0; python_version < \"3.11\" and extra == \"librabbitmq\"",
-            "msgpack==1.0.8; extra == \"msgpack\"",
+            "msgpack==1.1.0; extra == \"msgpack\"",
             "pycurl>=7.43.0.5; (sys_platform != \"win32\" and platform_python_implementation == \"CPython\") and extra == \"sqs\"",
             "pymongo>=4.1.1; extra == \"mongodb\"",
             "pyro4==4.82; extra == \"pyro\"",
@@ -1780,11 +1786,12 @@
             "softlayer-messaging>=1.0.3; extra == \"slmq\"",
             "sqlalchemy<2.1,>=1.4.48; extra == \"sqlalchemy\"",
             "typing-extensions==4.12.2; python_version < \"3.10\"",
+            "tzdata; python_version >= \"3.9\"",
             "urllib3>=1.26.16; extra == \"sqs\"",
             "vine==5.1.0"
           ],
           "requires_python": ">=3.8",
-          "version": "5.4.0"
+          "version": "5.4.2"
         },
         {
           "artifacts": [
@@ -2021,124 +2028,114 @@
           "artifacts": [
             {
               "algorithm": "sha256",
-              "hash": "3d1c8b9f5d43144bd726a3f01e58d2831c6fb112960a4a60b3a26fa85e026ab3",
-              "url": "https://files.pythonhosted.org/packages/61/a2/dbdaa22cd49441060c6403252c384457cf2dfe8698deb6b8df6ce93191e4/mongoengine-0.23.1-py3-none-any.whl"
+              "hash": "9302ec407dd60f47f62cc07684d9f6cac87f1e93283c54203851788104d33df4",
+              "url": "https://files.pythonhosted.org/packages/97/52/a0788a31f8ec2cfb508e1fb29c321d5082f0aa58bc88ba118c898e72f612/mongoengine-0.29.1-py3-none-any.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "de275e70cd58891dc46eef43369c522ce450dccb6d6f1979cbc9b93e6bdaf6cb",
-              "url": "https://files.pythonhosted.org/packages/ff/c7/856f7bb8f5f2c545d121800a50d7eb85a0af9db454d335b00f7a479863d2/mongoengine-0.23.1.tar.gz"
+              "hash": "3b43abaf2d5f0b7d39efc2b7d9e78f4d4a5dc7ce92b9889ba81a5a9b8dee3cf3",
+              "url": "https://files.pythonhosted.org/packages/32/0b/f0bd3da47c77b2d48103b42b9a38a70de9c41c979dd681a9a6aff43bf2eb/mongoengine-0.29.1.tar.gz"
             }
           ],
           "project_name": "mongoengine",
           "requires_dists": [
-            "pymongo<4.0,>=3.4"
+            "Pillow>=7.0.0; extra == \"test\"",
+            "blinker; extra == \"test\"",
+            "coverage; extra == \"test\"",
+            "pymongo<5.0,>=3.4",
+            "pytest-cov; extra == \"test\"",
+            "pytest; extra == \"test\""
           ],
-          "requires_python": ">=3.6",
-          "version": "0.23.1"
+          "requires_python": ">=3.7",
+          "version": "0.29.1"
         },
         {
           "artifacts": [
             {
               "algorithm": "sha256",
-              "hash": "5fbb160554e319f7b22ecf530a80a3ff496d38e8e07ae763b9e82fadfe96f273",
-              "url": "https://files.pythonhosted.org/packages/ff/21/1b3545b88fe47526925b37217729036df4088340cad6e665609cb36ba84e/msgpack-1.0.8-cp39-cp39-musllinux_1_1_x86_64.whl"
-            },
-            {
-              "algorithm": "sha256",
-              "hash": "95c02b0e27e706e48d0e5426d1710ca78e0f0628d6e89d5b5a5b91a5f12274f3",
-              "url": "https://files.pythonhosted.org/packages/08/4c/17adf86a8fbb02c144c7569dc4919483c01a2ac270307e2d59e1ce394087/msgpack-1.0.8.tar.gz"
-            },
-            {
-              "algorithm": "sha256",
-              "hash": "5dbf059fb4b7c240c873c1245ee112505be27497e90f7c6591261c7d3c3a8228",
-              "url": "https://files.pythonhosted.org/packages/09/b1/d80b0a71ac05655f73146492601e91b1dbb7eb0d95d8261bec1c981e8a36/msgpack-1.0.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
-            },
-            {
-              "algorithm": "sha256",
-              "hash": "4916727e31c28be8beaf11cf117d6f6f188dcc36daae4e851fee88646f5b6b18",
-              "url": "https://files.pythonhosted.org/packages/20/40/4eb8e9dc0e949bf22e5bcd74d16996ad61eb87220a1d719d6badd169be1a/msgpack-1.0.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl"
+              "hash": "c5a91481a3cc573ac8c0d9aace09345d989dc4a0202b7fcb312c88c26d4e71a8",
+              "url": "https://files.pythonhosted.org/packages/b6/54/7d8317dac590cf16b3e08e3fb74d2081e5af44eb396f0effa13f17777f30/msgpack-1.1.0-cp39-cp39-musllinux_1_2_x86_64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "bd739c9251d01e0279ce729e37b39d49a08c0420d3fee7f2a4968c0576678f77",
-              "url": "https://files.pythonhosted.org/packages/27/87/e303ebcfb1b14d4ed272b3aa54228d8d5b5caa3cea7b6ff6843a76d5affd/msgpack-1.0.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl"
+              "hash": "534480ee5690ab3cbed89d4c8971a5c631b69a8c0883ecfea96c19118510c846",
+              "url": "https://files.pythonhosted.org/packages/1b/94/a82b0db0981e9586ed5af77d6cfb343da05d7437dceaae3b35d346498110/msgpack-1.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "7938111ed1358f536daf311be244f34df7bf3cdedb3ed883787aca97778b28d8",
-              "url": "https://files.pythonhosted.org/packages/39/e2/cac717fd842a6d0d321b2f34add877033aede4f2e6321d93799ab68c6aea/msgpack-1.0.8-cp39-cp39-musllinux_1_1_aarch64.whl"
+              "hash": "3180065ec2abbe13a4ad37688b61b99d7f9e012a535b930e0e683ad6bc30155b",
+              "url": "https://files.pythonhosted.org/packages/1f/c6/e4a04c0089deace870dabcdef5c9f12798f958e2e81d5012501edaff342f/msgpack-1.1.0-cp39-cp39-musllinux_1_2_i686.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "f9904e24646570539a8950400602d66d2b2c492b9010ea7e965025cb71d0c86d",
-              "url": "https://files.pythonhosted.org/packages/42/fa/9379d11dd1b83570b2e9dc0d7c7e45aec2fb99d80540170f82d79f83132a/msgpack-1.0.8-cp39-cp39-macosx_11_0_arm64.whl"
+              "hash": "646afc8102935a388ffc3914b336d22d1c2d6209c773f3eb5dd4d6d3b6f8c1cb",
+              "url": "https://files.pythonhosted.org/packages/46/72/0454fa773fc4977ca70ae45471e38b1ab0cd831bef1990e9283d8683fe18/msgpack-1.1.0-cp38-cp38-musllinux_1_2_i686.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "1cce488457370ffd1f953846f82323cb6b2ad2190987cd4d70b2713e17268d24",
-              "url": "https://files.pythonhosted.org/packages/50/ee/b749822f36f448b7edb5e6081cdba529fc0ef9e442d5632a05602f7a8274/msgpack-1.0.8-cp38-cp38-macosx_11_0_arm64.whl"
+              "hash": "f1ba6136e650898082d9d5a5217d5906d1e138024f836ff48691784bbe1adf96",
+              "url": "https://files.pythonhosted.org/packages/55/f6/d4859a158a915be52eecd52dee9761ab3a5d84c834a1d13ffc198e068a48/msgpack-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "d3420522057ebab1728b21ad473aa950026d07cb09da41103f8e597dfbfaeb13",
-              "url": "https://files.pythonhosted.org/packages/56/33/465f6feaca727ccc898e2a73e27af942febe9c8cfc726972bcf70ab059e2/msgpack-1.0.8-cp38-cp38-musllinux_1_1_aarch64.whl"
+              "hash": "c40ffa9a15d74e05ba1fe2681ea33b9caffd886675412612d93ab17b58ea2fec",
+              "url": "https://files.pythonhosted.org/packages/77/68/6ddc40189295de4363af0597ecafb822ca7636ed1e91626f294cc8bc0d91/msgpack-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "493c5c5e44b06d6c9268ce21b302c9ca055c1fd3484c25ba41d34476c76ee746",
-              "url": "https://files.pythonhosted.org/packages/56/7a/2a9b40ca2d9ff8f9b5628b15b820676d830b006cff6ca6b3bdffbafd2142/msgpack-1.0.8-cp39-cp39-musllinux_1_1_i686.whl"
+              "hash": "f3e9b4936df53b970513eac1758f3882c88658a220b58dcc1e39606dccaaf01c",
+              "url": "https://files.pythonhosted.org/packages/92/9b/5c0dfb0009b9f96328664fecb9f8e4e9c8a1ae919e6d53986c1b813cb493/msgpack-1.1.0-cp39-cp39-macosx_11_0_arm64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "5845fdf5e5d5b78a49b826fcdc0eb2e2aa7191980e3d2cfd2a30303a74f212e2",
-              "url": "https://files.pythonhosted.org/packages/60/8c/6f32030ad034212deb6b679280d908c49fc8aac3dd604c33c9ad0ccb97a7/msgpack-1.0.8-cp38-cp38-musllinux_1_1_i686.whl"
+              "hash": "7e7b853bbc44fb03fbdba34feb4bd414322180135e2cb5164f20ce1c9795ee48",
+              "url": "https://files.pythonhosted.org/packages/93/af/d63f25bcccd3d6f06fd518ba4a321f34a4370c67b579ca5c70b4a37721b4/msgpack-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "f51bab98d52739c50c56658cc303f190785f9a2cd97b823357e7aeae54c8f68a",
-              "url": "https://files.pythonhosted.org/packages/76/2f/a06b5ca0ba80aeb5f0b50449fb57a55c2c70bc495f2569442c743ed8478d/msgpack-1.0.8-cp39-cp39-macosx_10_9_universal2.whl"
+              "hash": "8cf9e8c3a2153934a23ac160cc4cba0ec035f6867c8013cc6077a79823370346",
+              "url": "https://files.pythonhosted.org/packages/93/fc/6c7f0dcc1c913e14861e16eaf494c07fc1dde454ec726ff8cebcf348ae53/msgpack-1.1.0-cp39-cp39-musllinux_1_2_aarch64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "6a0e76621f6e1f908ae52860bdcb58e1ca85231a9b0545e64509c931dd34275a",
-              "url": "https://files.pythonhosted.org/packages/79/d2/e0a6583f4f8cc7c2768ae3fec386eb0ca19cdbea296eb6d1201f275a638a/msgpack-1.0.8-cp38-cp38-musllinux_1_1_x86_64.whl"
+              "hash": "e0856a2b7e8dcb874be44fea031d22e5b3a19121be92a1e098f46068a11b0870",
+              "url": "https://files.pythonhosted.org/packages/98/6c/3b89221b0f6b2fd92572bd752545fc96ca4e494b76e2a02be8da56451909/msgpack-1.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "73ee792784d48aa338bba28063e19a27e8d989344f34aad14ea6e1b9bd83f596",
-              "url": "https://files.pythonhosted.org/packages/7a/c7/c95fe31dd0d7bf49fd3590df8e0089a8b9b18222909439d68dcc7973fd13/msgpack-1.0.8-cp39-cp39-macosx_10_9_x86_64.whl"
+              "hash": "dd432ccc2c72b914e4cb77afce64aab761c1137cc698be3984eee260bcb2896e",
+              "url": "https://files.pythonhosted.org/packages/cb/d0/7555686ae7ff5731205df1012ede15dd9d927f6227ea151e901c7406af4f/msgpack-1.1.0.tar.gz"
             },
             {
               "algorithm": "sha256",
-              "hash": "3923a1778f7e5ef31865893fdca12a8d7dc03a44b33e2a5f3295416314c09f5d",
-              "url": "https://files.pythonhosted.org/packages/8f/aa/e637d1212560c905b97ddd1dbe1cb35b320cd15c6200f5d29acea571c708/msgpack-1.0.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl"
+              "hash": "46c34e99110762a76e3911fc923222472c9d681f1094096ac4102c18319e6468",
+              "url": "https://files.pythonhosted.org/packages/d1/7c/3a9ee6ec9fc3e47681ad39b4d344ee04ff20a776b594fba92d88d8b68356/msgpack-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "0ceea77719d45c839fd73abcb190b8390412a890df2f83fb8cf49b2a4b5c2f40",
-              "url": "https://files.pythonhosted.org/packages/a9/30/815bbd025ede86f9ac5b04d9f96480386227e35a6d438cbb95e02a31dc9e/msgpack-1.0.8-cp38-cp38-macosx_10_9_universal2.whl"
+              "hash": "471e27a5787a2e3f974ba023f9e265a8c7cfd373632247deb225617e3100a3c7",
+              "url": "https://files.pythonhosted.org/packages/ed/a1/16bd86502f1572a14c6ccfa057306be7f94ea3081ffec652308036cefbd2/msgpack-1.1.0-cp38-cp38-musllinux_1_2_aarch64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "e75753aeda0ddc4c28dce4c32ba2f6ec30b1b02f6c0b14e547841ba5b24f753f",
-              "url": "https://files.pythonhosted.org/packages/ad/61/225d64e983e51f960cac41fd1084188764fcc7430e75f609ad9d86e47839/msgpack-1.0.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl"
+              "hash": "8a706d1e74dd3dea05cb54580d9bd8b2880e9264856ce5068027eed09680aa74",
+              "url": "https://files.pythonhosted.org/packages/f7/0a/8a213cecea7b731c540f25212ba5f9a818f358237ac51a44d448bd753690/msgpack-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "a22e47578b30a3e199ab067a4d43d790249b3c0587d9a771921f86250c8435db",
-              "url": "https://files.pythonhosted.org/packages/d6/9b/108d7447e612fcdb3a7ed957e59b912a8d2fc4cab7198cad976b30be94a9/msgpack-1.0.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
+              "hash": "53258eeb7a80fc46f62fd59c876957a2d0e15e6449a9e71842b6d24419d88ca1",
+              "url": "https://files.pythonhosted.org/packages/f7/3b/544a5c5886042b80e1f4847a4757af3430f60d106d8d43bb7be72c9e9650/msgpack-1.1.0-cp39-cp39-macosx_10_9_universal2.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "1ab0bbcd4d1f7b6991ee7c753655b481c50084294218de69365f8f1970d4c151",
-              "url": "https://files.pythonhosted.org/packages/ec/21/8fb3fb9693413afc9bc0c3b796e17f9d6e7e77e9c88d34e19fd433c5486c/msgpack-1.0.8-cp38-cp38-macosx_10_9_x86_64.whl"
+              "hash": "13599f8829cfbe0158f6456374e9eea9f44eee08076291771d8ae93eda56607f",
+              "url": "https://files.pythonhosted.org/packages/fd/2f/885932948ec2f51509691684842f5870f960d908373744070400ac56e2d0/msgpack-1.1.0-cp38-cp38-musllinux_1_2_x86_64.whl"
             }
           ],
           "project_name": "msgpack",
           "requires_dists": [],
           "requires_python": ">=3.8",
-          "version": "1.0.8"
+          "version": "1.1.0"
         },
         {
           "artifacts": [
@@ -2552,13 +2549,13 @@
           "artifacts": [
             {
               "algorithm": "sha256",
-              "hash": "8e49fd2f82f84acf7ffd57c64311aa2b30e575370dc23bdb375b10262f7eac32",
-              "url": "https://files.pythonhosted.org/packages/96/6e/4a52a8923d840107024b844d83502dfa6a1e5399ad31cf9d1a4ddbaaa7e5/paramiko-3.4.1-py3-none-any.whl"
+              "hash": "1fedf06b085359051cd7d0d270cebe19e755a8a921cc2ddbfa647fb0cd7d68f9",
+              "url": "https://files.pythonhosted.org/packages/1f/66/14b2c030fcce69cba482d205c2d1462ca5c77303a263260dcb1192801c85/paramiko-3.5.0-py3-none-any.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "8b15302870af7f6652f2e038975c1d2973f06046cb5d7d65355668b3ecbece0c",
-              "url": "https://files.pythonhosted.org/packages/0b/6a/1d85cc9f5eaf49a769c7128039074bbb8127aba70756f05dfcf4326e72a1/paramiko-3.4.1.tar.gz"
+              "hash": "ad11e540da4f55cedda52931f1a3f812a8238a7af7f62a60de538cd80bb28124",
+              "url": "https://files.pythonhosted.org/packages/1b/0f/c00296e36ff7485935b83d466c4f2cf5934b84b0ad14e81796e1d9d3609b/paramiko-3.5.0.tar.gz"
             }
           ],
           "project_name": "paramiko",
@@ -2576,7 +2573,7 @@
             "pywin32>=2.1.8; platform_system == \"Windows\" and extra == \"gssapi\""
           ],
           "requires_python": ">=3.6",
-          "version": "3.4.1"
+          "version": "3.5.0"
         },
         {
           "artifacts": [
@@ -2665,13 +2662,13 @@
           "artifacts": [
             {
               "algorithm": "sha256",
-              "hash": "eb1c8582560b34ed4ba105009a4badf7f6f85768b30126f351328507b2beb617",
-              "url": "https://files.pythonhosted.org/packages/da/8b/d497999c4017b80678017ddce745cf675489c110681ad3c84a55eddfd3e7/platformdirs-4.3.2-py3-none-any.whl"
+              "hash": "73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb",
+              "url": "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "9e5e27a08aa095dd127b9f2e764d74254f482fef22b0970773bfba79d091ab8c",
-              "url": "https://files.pythonhosted.org/packages/75/a0/d7cab8409cdc7d39b037c85ac46d92434fb6595432e069251b38e5c8dd0e/platformdirs-4.3.2.tar.gz"
+              "hash": "357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907",
+              "url": "https://files.pythonhosted.org/packages/13/fc/128cc9cb8f03208bdbf93d3aa862e16d376844a14f9a0ce5cf4507372de4/platformdirs-4.3.6.tar.gz"
             }
           ],
           "project_name": "platformdirs",
@@ -2688,7 +2685,7 @@
             "sphinx>=8.0.2; extra == \"docs\""
           ],
           "requires_python": ">=3.8",
-          "version": "4.3.2"
+          "version": "4.3.6"
         },
         {
           "artifacts": [
@@ -2857,31 +2854,31 @@
           "artifacts": [
             {
               "algorithm": "sha256",
-              "hash": "cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473",
-              "url": "https://files.pythonhosted.org/packages/23/7e/5f50d07d5e70a2addbccd90ac2950f81d1edd0783630651d9268d7f1db49/pyasn1-0.6.0-py2.py3-none-any.whl"
+              "hash": "0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629",
+              "url": "https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c",
-              "url": "https://files.pythonhosted.org/packages/4a/a3/d2157f333900747f20984553aca98008b6dc843eb62f3a36030140ccec0d/pyasn1-0.6.0.tar.gz"
+              "hash": "6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034",
+              "url": "https://files.pythonhosted.org/packages/ba/e9/01f1a64245b89f039897cb0130016d79f77d52669aae6ee7b159a6c4c018/pyasn1-0.6.1.tar.gz"
             }
           ],
           "project_name": "pyasn1",
           "requires_dists": [],
           "requires_python": ">=3.8",
-          "version": "0.6.0"
+          "version": "0.6.1"
         },
         {
           "artifacts": [
             {
               "algorithm": "sha256",
-              "hash": "be04f15b66c206eed667e0bb5ab27e2b1855ea54a842e5037738099e8ca4ae0b",
-              "url": "https://files.pythonhosted.org/packages/13/68/8906226b15ef38e71dc926c321d2fe99de8048e9098b5dfd38343011c886/pyasn1_modules-0.4.0-py3-none-any.whl"
+              "hash": "49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd",
+              "url": "https://files.pythonhosted.org/packages/77/89/bc88a6711935ba795a679ea6ebee07e128050d6382eaa35a0a47c8032bdc/pyasn1_modules-0.4.1-py3-none-any.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "831dbcea1b177b28c9baddf4c6d1013c24c3accd14a1873fffaa6a2e905f17b6",
-              "url": "https://files.pythonhosted.org/packages/f7/00/e7bd1dec10667e3f2be602686537969a7ac92b0a7c5165be2e5875dc3971/pyasn1_modules-0.4.0.tar.gz"
+              "hash": "c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c",
+              "url": "https://files.pythonhosted.org/packages/1d/67/6afbf0d507f73c32d21084a79946bfcfca5fbc62a72057e9c23797a737c9/pyasn1_modules-0.4.1.tar.gz"
             }
           ],
           "project_name": "pyasn1-modules",
@@ -2889,7 +2886,7 @@
             "pyasn1<0.7.0,>=0.4.6"
           ],
           "requires_python": ">=3.8",
-          "version": "0.4.0"
+          "version": "0.4.1"
         },
         {
           "artifacts": [
@@ -2946,174 +2943,180 @@
           "artifacts": [
             {
               "algorithm": "sha256",
-              "hash": "0be605bfb8461384a4cb81e80f51eb5ca1b89851f2d0e69a75458c788a7263a4",
-              "url": "https://files.pythonhosted.org/packages/a3/6c/10b9cc7baa860ae72467344ffb6a2b6ce06181894dfdc6bc7abd34237f00/pymongo-3.12.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl"
+              "hash": "bec8e4e88984be157408f1923d25869e1b575c07711cdbdde596f66931800934",
+              "url": "https://files.pythonhosted.org/packages/07/03/26b2fb17c77ce1d288fc3178f497e6fa00209fe34d5777b67dfd899ffcdd/pymongo-4.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "e1fc4d3985868860b6585376e511bb32403c5ffb58b0ed913496c27fd791deea",
-              "url": "https://files.pythonhosted.org/packages/18/04/47c3546228ee303ad28306b1f53b1cbfaac537d4e514c715cb6877827edb/pymongo-3.12.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl"
+              "hash": "8d0ea740a2faa56f930dc82c5976d96c017ece26b29a1cddafb58721c7aab960",
+              "url": "https://files.pythonhosted.org/packages/03/34/b5dd2079cc40840ba9730e5471d68a7a64db5c324c6a8b0344fc57a3d352/pymongo-4.6.3-cp39-cp39-manylinux2014_i686.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "89d7baa847383b9814de640c6f1a8553d125ec65e2761ad146ea2e75a7ad197c",
-              "url": "https://files.pythonhosted.org/packages/1a/03/8105130d1b1d3d3dd2c5915b712a096fadaeb3d472e59a84f1127e982d6e/pymongo-3.12.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl"
+              "hash": "cd6c15242d9306ff1748681c3235284cbe9f807aeaa86cd17d85e72af626e9a7",
+              "url": "https://files.pythonhosted.org/packages/0e/ab/2dbf438193bfa14096df53c5792809465c79545b8ede2ea620d528b96608/pymongo-4.6.3-cp39-cp39-manylinux1_i686.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "517b09b1dd842390a965a896d1327c55dfe78199c9f5840595d40facbcd81854",
-              "url": "https://files.pythonhosted.org/packages/1b/63/c3023c7fd6bee4f79ce3d24b6a63b59baed2d4abec25c017183ef7805dca/pymongo-3.12.3-cp39-cp39-manylinux2014_i686.whl"
+              "hash": "b3d10bdd46cbc35a2109737d36ffbef32e7420569a87904738ad444ccb7ac2c5",
+              "url": "https://files.pythonhosted.org/packages/17/65/cffdf807c2d677f51902c69592d3ee730fad1ce345db3fd166bbcf7ff53e/pymongo-4.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "7a6e4dccae8ef5dd76052647d78f02d5d0ffaff1856277d951666c54aeba3ad2",
-              "url": "https://files.pythonhosted.org/packages/24/83/0f16452e3f8a8b4fa016b065899eb48683cc792b510a231a1981c251b480/pymongo-3.12.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
+              "hash": "aa310096450e9c461b7dfd66cbc1c41771fe36c06200440bb3e062b1d4a06b6e",
+              "url": "https://files.pythonhosted.org/packages/18/a2/029a3c80ff5d371d5d158af2066fd374fa74c7cfdfb1a86e491a4d6e0294/pymongo-4.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "80710d7591d579442c67a3bc7ae9dcba9ff95ea8414ac98001198d894fc4ff46",
-              "url": "https://files.pythonhosted.org/packages/28/f9/01f3ae759b4176ffbf7d71767433c2154f7f140e2465ad886dfaecd652f0/pymongo-3.12.3-cp38-cp38-manylinux2014_x86_64.whl"
+              "hash": "c67c19f653053ef2ebd7f1837c2978400058d6d7f66ec5760373a21eaf660158",
+              "url": "https://files.pythonhosted.org/packages/20/cd/915bb76485635e7e4892466c6518be08c90a4e45140ee29a0d8022ba104e/pymongo-4.6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "28bfd5244d32faf3e49b5a8d1fab0631e922c26e8add089312e4be19fb05af50",
-              "url": "https://files.pythonhosted.org/packages/2e/fe/a44602e61ee23ef6ae64150bb2bf86cac9241c4d668791c8e6255b598aa1/pymongo-3.12.3-cp38-cp38-manylinux2014_i686.whl"
+              "hash": "ff7d1f449fcad23d9bc8e8dc2b9972be38bcd76d99ea5f7d29b2efa929c2a7ff",
+              "url": "https://files.pythonhosted.org/packages/34/32/90e6c65123d5439719906c0976de1bf11098f9b69151a2f0baf54cd4e4c9/pymongo-4.6.3-cp39-cp39-manylinux2014_x86_64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "a1ba93be779a9b8e5e44f5c133dc1db4313661cead8a2fd27661e6cb8d942ee9",
-              "url": "https://files.pythonhosted.org/packages/3b/33/0852648d70775d288608346887f77f96b5121faa45ebd67d6ad8c717a20c/pymongo-3.12.3-cp38-cp38-macosx_10_9_x86_64.whl"
+              "hash": "e097f877de4d6af13a33ef938bf2a2350f424be5deabf8b857da95f5b080487a",
+              "url": "https://files.pythonhosted.org/packages/37/be/879d8bec367c2690d15b31a29461b54419481505c34f51bdfa6cae7c983a/pymongo-4.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "1b4c535f524c9d8c86c3afd71d199025daa070859a2bdaf94a298120b0de16db",
-              "url": "https://files.pythonhosted.org/packages/41/3c/2f7979ca86ee88ede3b6733dab55181e35754c19c8a349dbe9fdee960dfd/pymongo-3.12.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl"
+              "hash": "6de33f1b2eed91b802ec7abeb92ffb981d052f3604b45588309aae9e0f6e3c02",
+              "url": "https://files.pythonhosted.org/packages/3a/fe/3da29df3b50deaf3faa00591882d29dcdf2bd89c54a20072a2c6c715a638/pymongo-4.6.3-cp39-cp39-manylinux1_x86_64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "e4e5d163e6644c2bc84dd9f67bfa89288c23af26983d08fefcc2cbc22f6e57e6",
-              "url": "https://files.pythonhosted.org/packages/52/80/934ed944cda7414405ffd7dc47d2b2767be5032a1eb61c2282e709358771/pymongo-3.12.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl"
+              "hash": "c701de8e483fb5e53874aab642235361aac6de698146b02c644389eaa8c137b6",
+              "url": "https://files.pythonhosted.org/packages/43/b2/cfae3b3a19af88b8141677dc95a6c2b3e4a7da729a6816580c93a81f0c03/pymongo-4.6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "cebb3d8bcac4a6b48be65ebbc5c9881ed4a738e27bb96c86d9d7580a1fb09e05",
-              "url": "https://files.pythonhosted.org/packages/53/cc/0a58955ec937d61e4cba830df2ec1c909cf8c7e1cf850f7043360e3769db/pymongo-3.12.3-cp38-cp38-manylinux2014_s390x.whl"
+              "hash": "7df8b166d3db6cfead4cf55b481408d8f0935d8bd8d6dbf64507c49ef82c7200",
+              "url": "https://files.pythonhosted.org/packages/45/bc/376db78dfc82bb850c418a389f58a09e8f0a072549090bc76ff1735bff1b/pymongo-4.6.3-cp38-cp38-manylinux2014_x86_64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "bfc2d763d05ec7211313a06e8571236017d3e61d5fef97fcf34ec4b36c0b6556",
-              "url": "https://files.pythonhosted.org/packages/65/1f/b0df4f763ba6aa56aa12d63b08b2f87391adf85e84e55772f9721bdbb8f1/pymongo-3.12.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl"
+              "hash": "4d167d546352869125dc86f6fda6dffc627d8a9c8963eaee665825f2520d542b",
+              "url": "https://files.pythonhosted.org/packages/54/1a/fbd9feec63ccc6622e86926cfbb806743c850a9f303d6d0b85e01094ed38/pymongo-4.6.3-cp38-cp38-macosx_11_0_universal2.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "2577b8161eeae4dd376d13100b2137d883c10bb457dd08935f60c9f9d4b5c5f6",
-              "url": "https://files.pythonhosted.org/packages/66/fd/450ca78ed199ddbe76d3f398d124d86d8925582fef500f9baf13aabb1c52/pymongo-3.12.3-cp39-cp39-manylinux2014_aarch64.whl"
+              "hash": "7ee79e02a7c5ed34706ecb5dad19e6c7d267cf86d28c075ef3127c58f3081279",
+              "url": "https://files.pythonhosted.org/packages/5a/09/2abfa1d865627e2b900623bb9b1f9a8c52a57dee692a50b927f3549dac47/pymongo-4.6.3-cp38-cp38-manylinux1_x86_64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "8d92c6bb9174d47c2257528f64645a00bbc6324a9ff45a626192797aff01dc14",
-              "url": "https://files.pythonhosted.org/packages/72/35/9c79295df4efb913eb921bd706806404a3fbaadec69cba05bde47f474f3f/pymongo-3.12.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl"
+              "hash": "400074090b9a631f120b42c61b222fd743490c133a5d2f99c0208cefcccc964e",
+              "url": "https://files.pythonhosted.org/packages/6f/5d/b05b09299f0b03219db9e31ea404e89c056f55a0aafbb403f6710391c44d/pymongo-4.6.3.tar.gz"
             },
             {
               "algorithm": "sha256",
-              "hash": "b7df0d99e189b7027d417d4bfd9b8c53c9c7ed5a0a1495d26a6f547d820eca88",
-              "url": "https://files.pythonhosted.org/packages/72/b3/142dd8a64b12d7b101f9f4b6b32609b13ac6358b57f04f44192b40843c09/pymongo-3.12.3-cp39-cp39-manylinux1_i686.whl"
+              "hash": "9757602fb45c8ecc1883fe6db7c59c19d87eb3c645ec9342d28a6026837da931",
+              "url": "https://files.pythonhosted.org/packages/78/b9/952ebbf48bd37846ab5a256932bbd6509d86515e3f77975abc5439f40590/pymongo-4.6.3-cp38-cp38-manylinux2014_ppc64le.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "14dee106a10b77224bba5efeeb6aee025aabe88eb87a2b850c46d3ee55bdab4a",
-              "url": "https://files.pythonhosted.org/packages/97/0d/0c6c458751c418b35b7199f1dfaaa78df2900494373ae02ed8d91eb1f071/pymongo-3.12.3-cp39-cp39-manylinux2014_x86_64.whl"
+              "hash": "75107a386d4ccf5291e75cce8ca3898430e7907f4cc1208a17c9efad33a1ea84",
+              "url": "https://files.pythonhosted.org/packages/86/e4/8ac4c48c80cc999c4e91f8452c4f79f92ecc6cc50f7097177f9d4df1f608/pymongo-4.6.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "0a89cadc0062a5e53664dde043f6c097172b8c1c5f0094490095282ff9995a5f",
-              "url": "https://files.pythonhosted.org/packages/97/79/9382c00183979e6cedfb82d7c8d9667a121c19bb2ed66334da930b6f4ef2/pymongo-3.12.3.tar.gz"
+              "hash": "9e51e30d67b468a2a634ade928b30cb3e420127f148a9aec60de33f39087bdc4",
+              "url": "https://files.pythonhosted.org/packages/87/cb/5f8ef497d5f87c9d2208319b137746cb0eb01c677650f7838ff96e78a2f2/pymongo-4.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "07398d8a03545b98282f459f2603a6bb271f4448d484ed7f411121a519a7ea48",
-              "url": "https://files.pythonhosted.org/packages/9c/12/193a4455db2f149b65943a1eff80f5bc2eb680659b6505ae2fb41256458d/pymongo-3.12.3-cp39-cp39-macosx_10_9_x86_64.whl"
+              "hash": "becfa816545a48c8e740ac2fd624c1c121e1362072d68ffcf37a6b1be8ea187e",
+              "url": "https://files.pythonhosted.org/packages/8f/72/b57f4e117c625662b34ddb00a6c31b6d01f87afcba7c12760cdff88fd699/pymongo-4.6.3-cp39-cp39-manylinux2014_s390x.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "0e7a5d0b9077e8c3e57727f797ee8adf12e1d5e7534642230d98980d160d1320",
-              "url": "https://files.pythonhosted.org/packages/9e/6d/059656d398305f5dd16bce0465f89602c0ed75489b3db87ded90dfa055d7/pymongo-3.12.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl"
+              "hash": "705a9bfd619301ee7e985d6f91f68b15dfcb2f6f36b8cc225cc82d4260d2bce5",
+              "url": "https://files.pythonhosted.org/packages/92/b6/46bc46551be42ce533ea2d051dc01a0397cf11b2c2df29c719f2f28c6074/pymongo-4.6.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "4294f2c1cd069b793e31c2e6d7ac44b121cf7cedccd03ebcc30f3fc3417b314a",
-              "url": "https://files.pythonhosted.org/packages/9e/9d/75b82308fa1f7759f79758102f911ff4171708a4f24000ad47ffd224519d/pymongo-3.12.3-cp38-cp38-manylinux1_i686.whl"
+              "hash": "dde9fb6e105ce054339256a8b7a9775212ebb29596ef4e402d7bbc63b354d202",
+              "url": "https://files.pythonhosted.org/packages/96/96/b9295752c36a339c84069001c672182b9adf3721171aa71367e4dace55d2/pymongo-4.6.3-cp38-cp38-manylinux2014_s390x.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "a283425e6a474facd73072d8968812d1d9058490a5781e022ccf8895500b83ce",
-              "url": "https://files.pythonhosted.org/packages/9e/c0/98d2c2214d882f0639bc4e9f9ba15f82b6ae57a902948534de3a81182173/pymongo-3.12.3-cp39-cp39-manylinux1_x86_64.whl"
+              "hash": "4a0660ce32d8459b7f12dc3ca0141528fead62d3cce31b548f96f30902074cc0",
+              "url": "https://files.pythonhosted.org/packages/9a/61/f415d2a0f04bed261122f75309ed6384c241834335f7ea7c0e7d2309739c/pymongo-4.6.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "602284e652bb56ca8760f8e88a5280636c5b63d7946fca1c2fe0f83c37dffc64",
-              "url": "https://files.pythonhosted.org/packages/b3/16/fb0a9bd6d1b5a9158924b7b998f4aa8afbc063825716a23472daed05626d/pymongo-3.12.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl"
+              "hash": "17c1c143ba77d6e21fc8b48e93f0a5ed982a23447434e9ee4fbb6d633402506b",
+              "url": "https://files.pythonhosted.org/packages/9b/8d/d3da42d421463550a9e2927ed210c8d8795a2893839c3dd0deed3fdcbb0d/pymongo-4.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "8455176fd1b86de97d859fed4ae0ef867bf998581f584c7a1a591246dfec330f",
-              "url": "https://files.pythonhosted.org/packages/b8/05/76e0e5809d7798011ce541ed2f2447c1f9c77522bb227333cd9f604a8c85/pymongo-3.12.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl"
+              "hash": "5c8a4982f5eb767c6fbfb8fb378683d09bcab7c3251ba64357eef600d43f6c23",
+              "url": "https://files.pythonhosted.org/packages/9c/94/55367f20394d32e8497458b71215c80cb0af92a50ffb71db34525b37cacd/pymongo-4.6.3-cp39-cp39-manylinux2014_ppc64le.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "a8a3540e21213cb8ce232e68a7d0ee49cdd35194856c50b8bd87eeb572fadd42",
-              "url": "https://files.pythonhosted.org/packages/ba/fa/95bc121e929671e3a492c317170f84d0d71b3030d7bb1e6ba3a22bf0a029/pymongo-3.12.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl"
+              "hash": "2ef1b4992ee1cb8bb16745e70afa0c02c5360220a7a8bb4775888721f052d0a6",
+              "url": "https://files.pythonhosted.org/packages/af/5e/79a477afd4fec46fdb54bc4b97b8009418c872c70038ea2ac83a5cda37e4/pymongo-4.6.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "2567885ff0c8c7c0887ba6cefe4ae4af96364a66a7069f924ce0cd12eb971d04",
-              "url": "https://files.pythonhosted.org/packages/c3/14/e7e7127961b231794bb89039a1cea3b8825e4a1d0b195c4e2b874629d236/pymongo-3.12.3-cp39-cp39-manylinux2014_ppc64le.whl"
+              "hash": "6b5aec78aa4840e8d6c3881900259892ab5733a366696ca10d99d68c3d73eaaf",
+              "url": "https://files.pythonhosted.org/packages/b1/a2/b49ae5dd844cb73162f5febe8d07a1588aeac02298f3edcbaffeaae689a5/pymongo-4.6.3-cp38-cp38-manylinux2014_i686.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "bf254a1a95e95fdf4eaa25faa1ea450a6533ed7a997f9f8e49ab971b61ea514d",
-              "url": "https://files.pythonhosted.org/packages/c3/9a/101b17a28da73b170a21b24e11d05365c4a98e8fc8ab8ba0e51f1440607c/pymongo-3.12.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
+              "hash": "eaf3d594ebfd5e1f3503d81e06a5d78e33cda27418b36c2491c3d4ad4fca5972",
+              "url": "https://files.pythonhosted.org/packages/c3/b1/331a922ed1b4c0b153fef943feb63f4a0568949be443682ba1ea9348f8a2/pymongo-4.6.3-cp38-cp38-manylinux1_i686.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "f38b35ecd2628bf0267761ed659e48af7e620a7fcccfccf5774e7308fb18325c",
-              "url": "https://files.pythonhosted.org/packages/d8/50/e6b9f16ec031cdf6a11d31347ada3be4a581337ebd9d3ad644e2cb9e12d8/pymongo-3.12.3-cp38-cp38-manylinux2014_ppc64le.whl"
+              "hash": "14a82593528cddc93cfea5ee78fac95ae763a3a4e124ca79ee0b24fbbc6da1c9",
+              "url": "https://files.pythonhosted.org/packages/d0/d9/b89db700186dc65bae5b1c4e7ee0f7ab6ce3f2a9c9f62c65447944d8ad6f/pymongo-4.6.3-cp39-cp39-macosx_10_9_universal2.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "71c5c200fd37a5322706080b09c3ec8907cf01c377a7187f354fc9e9e13abc73",
-              "url": "https://files.pythonhosted.org/packages/e9/87/11ccaf5cd991f7a7406ed947f6c8f1f85a356f074a439bce48d303206baf/pymongo-3.12.3-cp39-cp39-manylinux2014_s390x.whl"
+              "hash": "af5c5112db04cf62a5d9d224a24f289aaecb47d152c08a457cca81cee061d5bd",
+              "url": "https://files.pythonhosted.org/packages/d3/c6/aefd5e7249d3034c2e3ccf876343219f2aa47e3595ab6efef8e4a79204e5/pymongo-4.6.3-cp38-cp38-manylinux2014_aarch64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "f340a2a908644ea6cccd399be0fb308c66e05d2800107345f9f0f0d59e1731c4",
-              "url": "https://files.pythonhosted.org/packages/ea/84/c558b19e8e8d3442e8394f313d74ffad4919dca963f1923567629f7dba09/pymongo-3.12.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl"
+              "hash": "53451190b8628e1ce7d1fe105dc376c3f10705127bd3b51fe3e107b9ff1851e6",
+              "url": "https://files.pythonhosted.org/packages/dc/9e/cda4b45a2d3db76be61a63b0246fcb4202fba3be1ed4906c4c068acee739/pymongo-4.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "176fdca18391e1206c32fb1d8265628a84d28333c20ad19468d91e3e98312cd1",
-              "url": "https://files.pythonhosted.org/packages/f0/4e/b2f5dc8584bc11ff871aab182ba15ab2c3d4d9f39cbd8c7749f0fd1275ea/pymongo-3.12.3-cp38-cp38-manylinux2014_aarch64.whl"
+              "hash": "0182899aafe830f25cf96c5976d724efeaaf7b6646c15424ad8dd25422b2efe1",
+              "url": "https://files.pythonhosted.org/packages/e1/03/5efaff98699c33ced7924bfe62a75ab2570c2f27f295c67a29c1eadb69b5/pymongo-4.6.3-cp39-cp39-manylinux2014_aarch64.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "845b178bd127bb074835d2eac635b980c58ec5e700ebadc8355062df708d5a71",
-              "url": "https://files.pythonhosted.org/packages/f7/0e/8185c5b8968cc3db6176d5a2f79f245da1bf963a629fda88640441cea90f/pymongo-3.12.3-cp38-cp38-manylinux1_x86_64.whl"
+              "hash": "5f465cca9b178e7bb782f952dd58e9e92f8ba056e585959465f2bb50feddef5f",
+              "url": "https://files.pythonhosted.org/packages/eb/8f/a86037dd355426c83435c950e41ad490298f439640c40e05c7e9a8d391e1/pymongo-4.6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl"
             }
           ],
           "project_name": "pymongo",
           "requires_dists": [
-            "dnspython<3.0.0,>=1.16.0; extra == \"srv\"",
-            "pykerberos; extra == \"gssapi\"",
+            "certifi; (os_name == \"nt\" or sys_platform == \"darwin\") and extra == \"encryption\"",
+            "certifi; (os_name == \"nt\" or sys_platform == \"darwin\") and extra == \"ocsp\"",
+            "cryptography>=2.5; extra == \"ocsp\"",
+            "dnspython<3.0.0,>=1.16.0",
+            "pykerberos; os_name != \"nt\" and extra == \"gssapi\"",
             "pymongo-auth-aws<2.0.0; extra == \"aws\"",
-            "pymongocrypt<2.0.0,>=1.1.0; extra == \"encryption\"",
+            "pymongo[aws]; extra == \"encryption\"",
+            "pymongocrypt<2.0.0,>=1.6.0; extra == \"encryption\"",
             "pyopenssl>=17.2.0; extra == \"ocsp\"",
+            "pytest>=7; extra == \"test\"",
             "python-snappy; extra == \"snappy\"",
             "requests<3.0.0; extra == \"ocsp\"",
             "service-identity>=18.1.0; extra == \"ocsp\"",
+            "winkerberos>=0.5.0; os_name == \"nt\" and extra == \"gssapi\"",
             "zstandard; extra == \"zstd\""
           ],
-          "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7",
-          "version": "3.12.3"
+          "requires_python": ">=3.7",
+          "version": "4.6.3"
         },
         {
           "artifacts": [
@@ -3309,13 +3312,13 @@
           "artifacts": [
             {
               "algorithm": "sha256",
-              "hash": "4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5",
-              "url": "https://files.pythonhosted.org/packages/0f/f9/cf155cf32ca7d6fa3601bc4c5dd19086af4b320b706919d48a4c79081cf9/pytest-8.3.2-py3-none-any.whl"
+              "hash": "a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2",
+              "url": "https://files.pythonhosted.org/packages/6b/77/7440a06a8ead44c7757a64362dd22df5760f9b12dc5f11b6188cd2fc27a0/pytest-8.3.3-py3-none-any.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce",
-              "url": "https://files.pythonhosted.org/packages/b4/8c/9862305bdcd6020bc7b45b1b5e7397a6caf1a33d3025b9a003b39075ffb2/pytest-8.3.2.tar.gz"
+              "hash": "70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181",
+              "url": "https://files.pythonhosted.org/packages/8b/6c/62bbd536103af674e227c41a8f3dcd022d591f6eed5facb5a0f31ee33bbc/pytest-8.3.3.tar.gz"
             }
           ],
           "project_name": "pytest",
@@ -3336,7 +3339,7 @@
             "xmlschema; extra == \"dev\""
           ],
           "requires_python": ">=3.8",
-          "version": "8.3.2"
+          "version": "8.3.3"
         },
         {
           "artifacts": [
@@ -3420,19 +3423,19 @@
           "artifacts": [
             {
               "algorithm": "sha256",
-              "hash": "328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319",
-              "url": "https://files.pythonhosted.org/packages/9c/3d/a121f284241f08268b21359bd425f7d4825cffc5ac5cd0e1b3d82ffd2b10/pytz-2024.1-py2.py3-none-any.whl"
+              "hash": "31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725",
+              "url": "https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812",
-              "url": "https://files.pythonhosted.org/packages/90/26/9f1f00a5d021fff16dee3de13d43e5e978f3d58928e129c3a62cf7eb9738/pytz-2024.1.tar.gz"
+              "hash": "2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a",
+              "url": "https://files.pythonhosted.org/packages/3a/31/3c70bf7603cc2dca0f19bdc53b4537a797747a58875b552c8c413d963a3f/pytz-2024.2.tar.gz"
             }
           ],
           "project_name": "pytz",
           "requires_dists": [],
           "requires_python": null,
-          "version": "2024.1"
+          "version": "2024.2"
         },
         {
           "artifacts": [
@@ -3879,13 +3882,13 @@
           "artifacts": [
             {
               "algorithm": "sha256",
-              "hash": "5f4c08aa4d3ebcb57a50c33b1b07e94315d7fc7230f7115e47fc99776c8ce308",
-              "url": "https://files.pythonhosted.org/packages/cb/9c/9ad11ac06b97e55ada655f8a6bea9d1d3f06e120b178cd578d80e558191d/setuptools-74.1.2-py3-none-any.whl"
+              "hash": "35ab7fd3bcd95e6b7fd704e4a1539513edad446c097797f2985e0e4b960772f2",
+              "url": "https://files.pythonhosted.org/packages/ff/ae/f19306b5a221f6a436d8f2238d5b80925004093fa3edea59835b514d9057/setuptools-75.1.0-py3-none-any.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "95b40ed940a1c67eb70fc099094bd6e99c6ee7c23aa2306f4d2697ba7916f9c6",
-              "url": "https://files.pythonhosted.org/packages/3e/2c/f0a538a2f91ce633a78daaeb34cbfb93a54bd2132a6de1f6cec028eee6ef/setuptools-74.1.2.tar.gz"
+              "hash": "d59a21b17a275fb872a9c3dae73963160ae079f1049ed956880cd7c09b120538",
+              "url": "https://files.pythonhosted.org/packages/27/b8/f21073fde99492b33ca357876430822e4800cdf522011f18041351dfa74b/setuptools-75.1.0.tar.gz"
             }
           ],
           "project_name": "setuptools",
@@ -3897,16 +3900,20 @@
             "importlib-metadata>=7.0.2; python_version < \"3.10\" and extra == \"type\"",
             "importlib-resources>=5.10.2; python_version < \"3.9\" and extra == \"core\"",
             "ini2toml[lite]>=0.14; extra == \"test\"",
+            "jaraco.collections; extra == \"core\"",
             "jaraco.develop>=7.21; (python_version >= \"3.9\" and sys_platform != \"cygwin\") and extra == \"test\"",
             "jaraco.develop>=7.21; sys_platform != \"cygwin\" and extra == \"type\"",
             "jaraco.envs>=2.2; extra == \"test\"",
+            "jaraco.functools; extra == \"core\"",
             "jaraco.packaging>=9.3; extra == \"doc\"",
             "jaraco.path>=3.2.0; extra == \"test\"",
             "jaraco.test; extra == \"test\"",
             "jaraco.text>=3.7; extra == \"core\"",
             "jaraco.tidelift>=1.4; extra == \"doc\"",
+            "more-itertools; extra == \"core\"",
             "more-itertools>=8.8; extra == \"core\"",
             "mypy==1.11.*; extra == \"type\"",
+            "packaging; extra == \"core\"",
             "packaging>=23.2; extra == \"test\"",
             "packaging>=24; extra == \"core\"",
             "pip>=19.1; extra == \"test\"",
@@ -3942,7 +3949,7 @@
             "wheel>=0.44.0; extra == \"test\""
           ],
           "requires_python": ">=3.8",
-          "version": "74.1.2"
+          "version": "75.1.0"
         },
         {
           "artifacts": [
@@ -4559,13 +4566,13 @@
           "artifacts": [
             {
               "algorithm": "sha256",
-              "hash": "a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472",
-              "url": "https://files.pythonhosted.org/packages/ca/1c/89ffc63a9605b583d5df2be791a27bc1a42b7c32bab68d3c8f2f73a98cd4/urllib3-2.2.2-py3-none-any.whl"
+              "hash": "ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac",
+              "url": "https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168",
-              "url": "https://files.pythonhosted.org/packages/43/6d/fa469ae21497ddc8bc93e5877702dca7cb8f911e337aca7452b5724f1bb6/urllib3-2.2.2.tar.gz"
+              "hash": "e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9",
+              "url": "https://files.pythonhosted.org/packages/ed/63/22ba4ebfe7430b76388e7cd448d5478814d3032121827c12a2cc287e2260/urllib3-2.2.3.tar.gz"
             }
           ],
           "project_name": "urllib3",
@@ -4577,7 +4584,7 @@
             "zstandard>=0.18.0; extra == \"zstd\""
           ],
           "requires_python": ">=3.8",
-          "version": "2.2.2"
+          "version": "2.2.3"
         },
         {
           "artifacts": [
@@ -4614,13 +4621,13 @@
           "artifacts": [
             {
               "algorithm": "sha256",
-              "hash": "48f2695d9809277003f30776d155615ffc11328e6a0a8c1f0ec80188d7874a55",
-              "url": "https://files.pythonhosted.org/packages/5d/ea/12f774a18b55754c730c8383dad8f10d7b87397d1cb6b2b944c87381bb3b/virtualenv-20.26.4-py3-none-any.whl"
+              "hash": "4f3ac17b81fba3ce3bd6f4ead2749a72da5929c01774948e243db9ba41df4ff6",
+              "url": "https://files.pythonhosted.org/packages/c6/1d/e1a44fdd6d30829ba21fc58b5d98a67e7aae8f4165f11d091e53aec12560/virtualenv-20.26.5-py3-none-any.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "c17f4e0f3e6036e9f26700446f85c76ab11df65ff6d8a9cbfad9f71aabfcf23c",
-              "url": "https://files.pythonhosted.org/packages/84/8a/134f65c3d6066153b84fc176c58877acd8165ed0b79a149ff50502597284/virtualenv-20.26.4.tar.gz"
+              "hash": "ce489cac131aa58f4b25e321d6d186171f78e6cb13fafbf32a840cee67733ff4",
+              "url": "https://files.pythonhosted.org/packages/bf/4c/66ce54c8736ff164e85117ca36b02a1e14c042a6963f85eeda82664fda4e/virtualenv-20.26.5.tar.gz"
             }
           ],
           "project_name": "virtualenv",
@@ -4650,7 +4657,7 @@
             "towncrier>=23.6; extra == \"docs\""
           ],
           "requires_python": ">=3.7",
-          "version": "20.26.4"
+          "version": "20.26.5"
         },
         {
           "artifacts": [
@@ -4993,13 +5000,13 @@
           "artifacts": [
             {
               "algorithm": "sha256",
-              "hash": "9960cd8967c8f85a56f920d5d507274e74f9ff813a0ab8889a5b5be2daf44064",
-              "url": "https://files.pythonhosted.org/packages/07/9e/c96f7a4cd0bf5625bb409b7e61e99b1130dc63a98cb8b24aeabae62d43e8/zipp-3.20.1-py3-none-any.whl"
+              "hash": "a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350",
+              "url": "https://files.pythonhosted.org/packages/62/8b/5ba542fa83c90e09eac972fc9baca7a88e7e7ca4b221a89251954019308b/zipp-3.20.2-py3-none-any.whl"
             },
             {
               "algorithm": "sha256",
-              "hash": "c22b14cc4763c5a5b04134207736c107db42e9d3ef2d9779d465f5f1bcba572b",
-              "url": "https://files.pythonhosted.org/packages/d3/8b/1239a3ef43a0d0ebdca623fb6413bc7702c321400c5fdd574f0b7aa0fbb4/zipp-3.20.1.tar.gz"
+              "hash": "bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29",
+              "url": "https://files.pythonhosted.org/packages/54/bf/5c0000c44ebc80123ecbdddba1f5dcd94a5ada602a9c225d84b5aaa55e86/zipp-3.20.2.tar.gz"
             }
           ],
           "project_name": "zipp",
@@ -5025,7 +5032,7 @@
             "sphinx>=3.5; extra == \"doc\""
           ],
           "requires_python": ">=3.8",
-          "version": "3.20.1"
+          "version": "3.20.2"
         },
         {
           "artifacts": [
@@ -5189,9 +5196,10 @@
   ],
   "only_builds": [],
   "only_wheels": [],
+  "overridden": [],
   "path_mappings": {},
-  "pex_version": "2.2.1",
-  "pip_version": "23.1.2",
+  "pex_version": "2.16.2",
+  "pip_version": "24.0",
   "prefer_older_binary": false,
   "requirements": [
     "PyYAML",
@@ -5219,7 +5227,7 @@
     "logshipper",
     "mail-parser==3.15.0",
     "mock",
-    "mongoengine<0.24.0,>=0.21.0",
+    "mongoengine<0.30.0,>=0.24.0",
     "networkx",
     "nose",
     "nose-parallel",
@@ -5236,7 +5244,7 @@
     "psutil",
     "pygments",
     "pyinotify<=0.10,>=0.9.5; platform_system == \"Linux\"",
-    "pymongo<3.13.0,>=3.11.0",
+    "pymongo<4.7,>=4.0.0",
     "pyrabbit",
     "pysocks",
     "pytest",
diff --git a/pants-plugins/uses_services/scripts/is_mongo_running.py b/pants-plugins/uses_services/scripts/is_mongo_running.py
index 637fc9ac1c..a9db658eb7 100644
--- a/pants-plugins/uses_services/scripts/is_mongo_running.py
+++ b/pants-plugins/uses_services/scripts/is_mongo_running.py
@@ -34,12 +34,14 @@ def _is_mongo_running(
         port=db_port,
         connectTimeoutMS=connection_timeout_ms,
         serverSelectionTimeoutMS=connection_timeout_ms,
+        uuidRepresentation="pythonLegacy",
     )
 
     # connection.connect() is lazy. Make a command to test the connection.
     try:
-        # The ismaster command is cheap and does not require auth
-        connection.admin.command("ismaster")
+        # The ping command is cheap and does not require auth
+        # https://www.mongodb.com/community/forums/t/how-to-use-the-new-hello-interface-for-availability/116748/
+        connection.admin.command("ping")
     except (ConnectionFailure, ServerSelectionTimeoutError):
         return False
     return True
diff --git a/requirements-pants.txt b/requirements-pants.txt
index 9fd3f26997..88cf4baaa7 100644
--- a/requirements-pants.txt
+++ b/requirements-pants.txt
@@ -28,7 +28,8 @@ kombu
 lockfile
 mock
 # mongoengine 0.24.0 has breaking changes to support pymongo 4.0
-mongoengine>=0.21.0,<0.24.0
+# mongoengine 0.29.0 is the first version to officially support mongo 7.0.
+mongoengine>=0.24.0,<0.30.0
 # networkx version is constrained in orquesta.
 networkx
 orjson
@@ -47,7 +48,9 @@ prompt-toolkit
 psutil
 pygments
 # pymongo 3.13 has backports of APIs from pymongo 4 to help w/ migration
-pymongo>=3.11.0,<3.13.0
+# pymongo 4.4 is the first version to officially support mongo 7.0.
+# pymongo 4.7 (or 4.8?) introduces support for standard python logging, which overwhelms our debug logs
+pymongo>=4.0.0,<4.7
 # pyrabbit used in an integration test
 pyrabbit
 pytest
diff --git a/requirements.txt b/requirements.txt
index 9896d5581e..e7bd73b527 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -18,21 +18,21 @@ cryptography==43.0.1
 decorator==5.1.1
 dnspython==1.16.0
 editor==1.6.6
-eventlet==0.36.1
+eventlet==0.37.0
 flex==6.14.1
 gitdb==4.0.11
 gitpython==3.1.43
-greenlet==3.0.3
+greenlet==3.1.0
 gunicorn==23.0.0
 importlib-metadata==7.1.0
 jinja2==3.1.4
 jsonpath-rw==1.4.0
 jsonschema==3.2.0
-kombu==5.4.0
+kombu==5.4.2
 lockfile==0.12.2
 logshipper@ git+https://github.com/StackStorm/logshipper.git@stackstorm_patched ; platform_system=="Linux"
 mock==5.1.0
-mongoengine==0.23.1
+mongoengine==0.29.1
 networkx==2.8.8
 nose
 nose-parallel==0.4.0
@@ -41,7 +41,7 @@ orjson==3.10.7
 orquesta@ git+https://github.com/StackStorm/orquesta.git@v1.6.0
 oslo.config==9.6.0
 oslo.utils==7.3.0
-paramiko==3.4.1
+paramiko==3.5.0
 passlib==1.7.4
 prettytable==3.10.2
 prompt-toolkit==3.0.47
@@ -49,14 +49,14 @@ psutil==6.0.0
 pyOpenSSL
 pygments==2.18.0
 pyinotify==0.9.6 ; platform_system=="Linux"
-pymongo==3.12.3
+pymongo==4.6.3
 pyparsing==3.1.4
 pyrabbit
 pysocks
 python-dateutil==2.9.0.post0
 python-json-logger
 python-statsd==2.1.0
-pytz==2024.1
+pytz==2024.2
 pywinrm==0.5.0
 pyyaml==6.0.2
 redis==5.0.8
@@ -79,5 +79,5 @@ unittest2
 webob==1.8.8
 webtest
 zake==0.2.2
-zipp==3.20.1
+zipp==3.20.2
 zstandard==0.23.0
diff --git a/st2actions/requirements.txt b/st2actions/requirements.txt
index 7e66d5f5bd..a8a6829ad9 100644
--- a/st2actions/requirements.txt
+++ b/st2actions/requirements.txt
@@ -8,10 +8,10 @@
 MarkupSafe==2.0.1
 apscheduler==3.10.4
 chardet==3.0.4
-eventlet==0.36.1
+eventlet==0.37.0
 gitpython==3.1.43
 jinja2==3.1.4
-kombu==5.4.0
+kombu==5.4.2
 lockfile==0.12.2
 logshipper@ git+https://github.com/StackStorm/logshipper.git@stackstorm_patched ; platform_system=="Linux"
 oslo.config==9.6.0
diff --git a/st2api/requirements.txt b/st2api/requirements.txt
index dd24e55005..1d3b21fe6f 100644
--- a/st2api/requirements.txt
+++ b/st2api/requirements.txt
@@ -5,14 +5,14 @@
 # If you want to update depdencies for a single component, modify the
 # in-requirements.txt for that component and then run 'make requirements' to
 # update the component requirements.txt
-eventlet==0.36.1
+eventlet==0.37.0
 gunicorn==23.0.0
 jsonschema==3.2.0
-kombu==5.4.0
-mongoengine==0.23.1
+kombu==5.4.2
+mongoengine==0.29.1
 oslo.config==9.6.0
 oslo.utils==7.3.0
-pymongo==3.12.3
+pymongo==4.6.3
 pyparsing==3.1.4
 simplejson
 six==1.16.0
diff --git a/st2auth/requirements.txt b/st2auth/requirements.txt
index c3221b3b72..15fe0915f7 100644
--- a/st2auth/requirements.txt
+++ b/st2auth/requirements.txt
@@ -6,11 +6,11 @@
 # in-requirements.txt for that component and then run 'make requirements' to
 # update the component requirements.txt
 bcrypt==4.2.0
-eventlet==0.36.1
+eventlet==0.37.0
 gunicorn==23.0.0
 oslo.config==9.6.0
 passlib==1.7.4
-pymongo==3.12.3
+pymongo==4.6.3
 six==1.16.0
 st2-auth-backend-flat-file@ git+https://github.com/StackStorm/st2-auth-backend-flat-file.git@master
 st2-auth-ldap@ git+https://github.com/StackStorm/st2-auth-ldap.git@master
diff --git a/st2client/requirements.txt b/st2client/requirements.txt
index be06f3064c..bfb2343f0a 100644
--- a/st2client/requirements.txt
+++ b/st2client/requirements.txt
@@ -20,10 +20,10 @@ pyOpenSSL
 pygments==2.18.0
 pysocks
 python-dateutil==2.9.0.post0
-pytz==2024.1
+pytz==2024.2
 pyyaml==6.0.2
 requests==2.32.3
 six==1.16.0
 sseclient-py==1.8.0
 typing-extensions==4.12.2
-zipp==3.20.1
+zipp==3.20.2
diff --git a/st2common/bin/migrations/v3.8/st2-drop-st2exporter-marker-collections b/st2common/bin/migrations/v3.8/st2-drop-st2exporter-marker-collections
index 10fa7e1913..9c94881e2d 100755
--- a/st2common/bin/migrations/v3.8/st2-drop-st2exporter-marker-collections
+++ b/st2common/bin/migrations/v3.8/st2-drop-st2exporter-marker-collections
@@ -37,7 +37,7 @@ DUMPER_MARKER_COLLECTION = "dumper_marker_d_b"
 
 def delete_marker_collections():
     db = get_db()
-    collections = db.collection_names()
+    collections = db.list_collection_names()
 
     if MARKER_COLLECTION in collections:
         print(f"Dropping {MARKER_COLLECTION} collection...")
diff --git a/st2common/requirements.txt b/st2common/requirements.txt
index 979056c2c5..3a32c235cf 100644
--- a/st2common/requirements.txt
+++ b/st2common/requirements.txt
@@ -14,24 +14,24 @@ ciso8601
 cryptography==43.0.1
 decorator==5.1.1
 dnspython==1.16.0
-eventlet==0.36.1
+eventlet==0.37.0
 flex==6.14.1
 gitdb==4.0.11
 gitpython==3.1.43
-greenlet==3.0.3
+greenlet==3.1.0
 jinja2==3.1.4
 jsonpath-rw==1.4.0
 jsonschema==3.2.0
-kombu==5.4.0
+kombu==5.4.2
 lockfile==0.12.2
-mongoengine==0.23.1
+mongoengine==0.29.1
 networkx==2.8.8
 orjson==3.10.7
 orquesta@ git+https://github.com/StackStorm/orquesta.git@v1.6.0
 oslo.config==9.6.0
-paramiko==3.4.1
+paramiko==3.5.0
 pyOpenSSL
-pymongo==3.12.3
+pymongo==4.6.3
 python-dateutil==2.9.0.post0
 python-statsd==2.1.0
 pyyaml==6.0.2
diff --git a/st2common/st2common/models/db/__init__.py b/st2common/st2common/models/db/__init__.py
index 018a419c17..2782c80b61 100644
--- a/st2common/st2common/models/db/__init__.py
+++ b/st2common/st2common/models/db/__init__.py
@@ -188,7 +188,16 @@ def _db_connect(
     # 30 seconds, which means it will block up to 30 seconds and fail if there are any SSL related
     # or other errors
     connection_timeout = cfg.CONF.database.connection_timeout
+
+    # TODO: Add uuid_representation option in st2.conf + a migration guide/script.
+    # This preserves the uuid handling from pymongo 3.x, but it is not portable:
+    # https://pymongo.readthedocs.io/en/stable/examples/uuid.html#handling-uuid-data-example
+    uuid_representation = "pythonLegacy"
+
     connection = mongoengine.connection.connect(
+        # kwargs are defined by mongoengine and pymongo.MongoClient:
+        # https://docs.mongoengine.org/apireference.html#mongoengine.connect
+        # https://pymongo.readthedocs.io/en/stable/api/pymongo/mongo_client.html#pymongo.mongo_client.MongoClient
         db_name,
         host=db_host,
         port=db_port,
@@ -197,6 +206,7 @@ def _db_connect(
         password=password,
         connectTimeoutMS=connection_timeout,
         serverSelectionTimeoutMS=connection_timeout,
+        uuidRepresentation=uuid_representation,
         **tls_kwargs,
         **compressor_kwargs,
     )
diff --git a/st2common/st2common/models/db/stormbase.py b/st2common/st2common/models/db/stormbase.py
index e75e381941..b128e80de3 100644
--- a/st2common/st2common/models/db/stormbase.py
+++ b/st2common/st2common/models/db/stormbase.py
@@ -20,6 +20,7 @@
 import bson
 import six
 import mongoengine as me
+from mongoengine.pymongo_support import LEGACY_JSON_OPTIONS
 from oslo_config import cfg
 
 from st2common.util import mongoescape
@@ -105,7 +106,8 @@ def to_serializable_dict(self, mask_secrets=False):
             if isinstance(v, JSON_UNFRIENDLY_TYPES):
                 v = str(v)
             elif isinstance(v, me.EmbeddedDocument):
-                v = json_decode(v.to_json())
+                # TODO: Allow overriding json_options.uuid_representation via cfg
+                v = json_decode(v.to_json(json_options=LEGACY_JSON_OPTIONS))
 
             serializable_dict[k] = v
 
diff --git a/st2reactor/requirements.txt b/st2reactor/requirements.txt
index e9c8b842ef..26b94bb5f6 100644
--- a/st2reactor/requirements.txt
+++ b/st2reactor/requirements.txt
@@ -6,10 +6,10 @@
 # in-requirements.txt for that component and then run 'make requirements' to
 # update the component requirements.txt
 apscheduler==3.10.4
-eventlet==0.36.1
+eventlet==0.37.0
 jsonpath-rw==1.4.0
 jsonschema==3.2.0
-kombu==5.4.0
+kombu==5.4.2
 oslo.config==9.6.0
 python-dateutil==2.9.0.post0
 six==1.16.0
diff --git a/st2stream/requirements.txt b/st2stream/requirements.txt
index 260f6c65a8..b382a77ee3 100644
--- a/st2stream/requirements.txt
+++ b/st2stream/requirements.txt
@@ -5,13 +5,13 @@
 # If you want to update depdencies for a single component, modify the
 # in-requirements.txt for that component and then run 'make requirements' to
 # update the component requirements.txt
-eventlet==0.36.1
+eventlet==0.37.0
 gunicorn==23.0.0
 jsonschema==3.2.0
-kombu==5.4.0
-mongoengine==0.23.1
+kombu==5.4.2
+mongoengine==0.29.1
 oslo.config==9.6.0
 oslo.utils==7.3.0
-pymongo==3.12.3
+pymongo==4.6.3
 pyparsing==3.1.4
 six==1.16.0


Test patch:
diff --git a/st2common/tests/unit/base.py b/st2common/tests/unit/base.py
index 65948d1d11..b17f9e98ea 100644
--- a/st2common/tests/unit/base.py
+++ b/st2common/tests/unit/base.py
@@ -14,6 +14,7 @@
 # limitations under the License.
 
 from __future__ import absolute_import
+
 import time
 
 import mongoengine
diff --git a/st2common/tests/unit/test_db.py b/st2common/tests/unit/test_db.py
index 89814fdf87..496db3b0fa 100644
--- a/st2common/tests/unit/test_db.py
+++ b/st2common/tests/unit/test_db.py
@@ -109,6 +109,13 @@ def tearDown(self):
         disconnect()
         cfg.CONF.reset()
 
+    @classmethod
+    def tearDownClass(cls):
+        # since tearDown discconnects, dropping the database in tearDownClass
+        # fails withotu establishing a new connection.
+        cls._establish_connection_and_re_create_db()
+        super().tearDownClass()
+
     def test_check_connect(self):
         """
         Tests connectivity to the db server. Requires the db server to be
@@ -378,6 +385,7 @@ def test_db_setup(self, mock_mongoengine):
                 "tlsAllowInvalidHostnames": False,
                 "connectTimeoutMS": 3000,
                 "serverSelectionTimeoutMS": 3000,
+                "uuidRepresentation": "pythonLegacy",
             },
         )
 
@@ -615,11 +623,13 @@ def test_cleanup(self):
         """
         Tests dropping the database. Requires the db server to be running.
         """
-        self.assertIn(cfg.CONF.database.db_name, self.db_connection.database_names())
+        self.assertIn(
+            cfg.CONF.database.db_name, self.db_connection.list_database_names()
+        )
 
         connection = db_cleanup()
 
-        self.assertNotIn(cfg.CONF.database.db_name, connection.database_names())
+        self.assertNotIn(cfg.CONF.database.db_name, connection.list_database_names())
 
 
 @mock.patch.object(PoolPublisher, "publish", mock.MagicMock())