Compare commits

...

50 Commits

Author SHA1 Message Date
af55db8f70 bump (#445)
Signed-off-by: Jess Frazelle <github@jessfraz.com>
2025-05-23 10:08:45 -07:00
cf383e2405 Update api spec (#444)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-22 12:58:39 -07:00
26cc03ef01 Update api spec (#443)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-20 16:17:10 -07:00
d81ecb7615 Update api spec (#442)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-19 13:18:51 -07:00
1afdcc70b5 Bump ruff from 0.11.9 to 0.11.10 in the patch group (#440)
Bumps the patch group with 1 update: [ruff](https://github.com/astral-sh/ruff).


Updates `ruff` from 0.11.9 to 0.11.10
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.11.9...0.11.10)

---
updated-dependencies:
- dependency-name: ruff
  dependency-version: 0.11.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-19 10:50:31 -04:00
c9ef09320d Bump types-python-dateutil from 2.9.0.20241206 to 2.9.0.20250516 (#441)
Bumps [types-python-dateutil](https://github.com/typeshed-internal/stub_uploader) from 2.9.0.20241206 to 2.9.0.20250516.
- [Commits](https://github.com/typeshed-internal/stub_uploader/commits)

---
updated-dependencies:
- dependency-name: types-python-dateutil
  dependency-version: 2.9.0.20250516
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-19 10:50:04 -04:00
243ae12ed3 Update api spec (#439)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-15 14:47:53 -07:00
ed50b95b1e Update api spec (#438)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-15 09:07:45 -07:00
6b0cc4a2b1 Update api spec (#437)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-15 00:25:49 -07:00
9b8fab62c6 Bump ruff from 0.11.8 to 0.11.9 in the patch group (#436)
Bumps the patch group with 1 update: [ruff](https://github.com/astral-sh/ruff).


Updates `ruff` from 0.11.8 to 0.11.9
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.11.8...0.11.9)

---
updated-dependencies:
- dependency-name: ruff
  dependency-version: 0.11.9
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-12 13:15:13 -04:00
24e80f4568 Update api spec (#435)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-11 11:51:16 -07:00
1744ab6385 Update api spec (#434)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-09 08:31:30 -07:00
06a646e558 Update api spec (#433)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-08 12:57:30 -07:00
2fd4d315db Update api spec (#432)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-07 15:39:47 -07:00
04efe52feb Bump the patch group with 3 updates (#431)
Bumps the patch group with 3 updates: [pymongo](https://github.com/mongodb/mongo-python-driver), [pydantic](https://github.com/pydantic/pydantic) and [ruff](https://github.com/astral-sh/ruff).


Updates `pymongo` from 4.12.0 to 4.12.1
- [Release notes](https://github.com/mongodb/mongo-python-driver/releases)
- [Changelog](https://github.com/mongodb/mongo-python-driver/blob/master/doc/changelog.rst)
- [Commits](https://github.com/mongodb/mongo-python-driver/compare/4.12.0...4.12.1)

Updates `pydantic` from 2.11.3 to 2.11.4
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.11.3...v2.11.4)

Updates `ruff` from 0.11.7 to 0.11.8
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.11.7...0.11.8)

---
updated-dependencies:
- dependency-name: pymongo
  dependency-version: 4.12.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: patch
- dependency-name: pydantic
  dependency-version: 2.11.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: patch
- dependency-name: ruff
  dependency-version: 0.11.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 10:23:39 -04:00
0d44cc2c23 Update api spec (#430)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-04 20:54:39 -07:00
0e32cfdae8 updates
Signed-off-by: Jess Frazelle <github@jessfraz.com>
2025-05-04 19:19:18 -07:00
7733b0658c Update api spec (#429)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-04 19:07:57 -07:00
cfcad06e60 Update api spec (#428)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-02 12:07:08 -07:00
6572a92004 Update api spec (#427)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-05-01 11:42:30 -07:00
2bd736096a Update api spec (#426)
YOYO NEW API SPEC!

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-30 19:47:38 -07:00
c8a1761f16 Update api spec (#425)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-29 10:05:00 -07:00
282bffa217 Bump the patch group with 2 updates (#423)
Bumps the patch group with 2 updates: [pydantic-extra-types](https://github.com/pydantic/pydantic-extra-types) and [ruff](https://github.com/astral-sh/ruff).


Updates `pydantic-extra-types` from 2.10.3 to 2.10.4
- [Release notes](https://github.com/pydantic/pydantic-extra-types/releases)
- [Changelog](https://github.com/pydantic/pydantic-extra-types/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic-extra-types/compare/v2.10.3...v2.10.4)

Updates `ruff` from 0.11.6 to 0.11.7
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.11.6...0.11.7)

---
updated-dependencies:
- dependency-name: pydantic-extra-types
  dependency-version: 2.10.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: patch
- dependency-name: ruff
  dependency-version: 0.11.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-28 07:05:56 -07:00
d31c0f8428 Update api spec (#424)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-28 07:02:00 -07:00
4f8c3b25f4 Bump ruff from 0.11.5 to 0.11.6 in the patch group (#422)
Bumps the patch group with 1 update: [ruff](https://github.com/astral-sh/ruff).


Updates `ruff` from 0.11.5 to 0.11.6
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.11.5...0.11.6)

---
updated-dependencies:
- dependency-name: ruff
  dependency-version: 0.11.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-21 10:39:14 -04:00
bb348045ec Update api spec (#421)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-16 09:26:08 -07:00
b1b98b6954 Bump pymongo from 4.11.3 to 4.12.0 in the minor group (#420)
Bumps the minor group with 1 update: [pymongo](https://github.com/mongodb/mongo-python-driver).


Updates `pymongo` from 4.11.3 to 4.12.0
- [Release notes](https://github.com/mongodb/mongo-python-driver/releases)
- [Changelog](https://github.com/mongodb/mongo-python-driver/blob/master/doc/changelog.rst)
- [Commits](https://github.com/mongodb/mongo-python-driver/compare/4.11.3...4.12.0)

---
updated-dependencies:
- dependency-name: pymongo
  dependency-version: 4.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-14 10:13:24 -04:00
983f812268 Bump the patch group with 2 updates (#419)
Bumps the patch group with 2 updates: [pydantic](https://github.com/pydantic/pydantic) and [ruff](https://github.com/astral-sh/ruff).


Updates `pydantic` from 2.11.2 to 2.11.3
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.11.2...v2.11.3)

Updates `ruff` from 0.11.4 to 0.11.5
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.11.4...0.11.5)

---
updated-dependencies:
- dependency-name: pydantic
  dependency-version: 2.11.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: patch
- dependency-name: ruff
  dependency-version: 0.11.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-14 10:12:16 -04:00
71dc1e9e00 Update api spec (#418)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-10 20:13:22 -07:00
583d5636aa Bump actions/create-github-app-token from 1 to 2 in the major group (#417)
Bumps the major group with 1 update: [actions/create-github-app-token](https://github.com/actions/create-github-app-token).


Updates `actions/create-github-app-token` from 1 to 2
- [Release notes](https://github.com/actions/create-github-app-token/releases)
- [Commits](https://github.com/actions/create-github-app-token/compare/v1...v2)

---
updated-dependencies:
- dependency-name: actions/create-github-app-token
  dependency-version: '2'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-10 19:56:40 -07:00
cafa54f343 Bump sphinxext-opengraph from 0.9.1 to 0.10.0 in the minor group (#416)
Bumps the minor group with 1 update: [sphinxext-opengraph](https://github.com/sphinx-doc/sphinxext-opengraph).


Updates `sphinxext-opengraph` from 0.9.1 to 0.10.0
- [Release notes](https://github.com/sphinx-doc/sphinxext-opengraph/releases)
- [Commits](https://github.com/sphinx-doc/sphinxext-opengraph/compare/v0.9.1...v0.10.0)

---
updated-dependencies:
- dependency-name: sphinxext-opengraph
  dependency-version: 0.10.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-07 10:59:34 -04:00
ea0afa0955 Bump the patch group with 2 updates (#415)
Bumps the patch group with 2 updates: [pytest-cov](https://github.com/pytest-dev/pytest-cov) and [ruff](https://github.com/astral-sh/ruff).


Updates `pytest-cov` from 6.1.0 to 6.1.1
- [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest-cov/compare/v6.1.0...v6.1.1)

Updates `ruff` from 0.11.3 to 0.11.4
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.11.3...0.11.4)

---
updated-dependencies:
- dependency-name: pytest-cov
  dependency-version: 6.1.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: patch
- dependency-name: ruff
  dependency-version: 0.11.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-07 10:12:32 -04:00
ab4eebfdb1 Update api spec (#414)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-03 20:02:50 -07:00
a7f6433735 Update api spec (#411)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-03 09:15:39 -07:00
d32c643b1e Bump python from 3.9 to 3.13 in the minor group (#412)
Bumps the minor group with 1 update: python.


Updates `python` from 3.9 to 3.13

---
updated-dependencies:
- dependency-name: python
  dependency-version: '3.13'
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-03 08:50:07 -07:00
c071f4011b Bump the patch group with 2 updates (#413)
Bumps the patch group with 2 updates: [pydantic](https://github.com/pydantic/pydantic) and [ruff](https://github.com/astral-sh/ruff).


Updates `pydantic` from 2.11.1 to 2.11.2
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.11.1...v2.11.2)

Updates `ruff` from 0.11.2 to 0.11.3
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.11.2...0.11.3)

---
updated-dependencies:
- dependency-name: pydantic
  dependency-version: 2.11.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: patch
- dependency-name: ruff
  dependency-version: 0.11.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-03 17:22:55 +02:00
29926d6a92 Update dependabot config (#400)
Update dependabot config from KittyCAD/ciso
2025-04-03 16:21:57 +02:00
c5733f8dc1 Fix git unmodified check in CI (#409)
the diff-index picks up changes if files have been touched
2025-04-03 16:21:26 +02:00
5711856363 Update api spec (#410)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-04-01 15:08:02 -07:00
7f453e7de8 Bump pytest-cov from 6.0.0 to 6.1.0 (#407)
Bumps [pytest-cov](https://github.com/pytest-dev/pytest-cov) from 6.0.0 to 6.1.0.
- [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest-cov/compare/v6.0.0...v6.1.0)

---
updated-dependencies:
- dependency-name: pytest-cov
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-01 10:09:47 -04:00
ebcc2ff650 Update api spec (#406)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-31 17:14:58 -07:00
7663ef0a1a Bump pydantic from 2.10.6 to 2.11.1 (#405)
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.10.6 to 2.11.1.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.10.6...v2.11.1)

---
updated-dependencies:
- dependency-name: pydantic
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 09:57:32 -04:00
69b0706d4a Update api spec (#404)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-29 17:13:59 -07:00
7e5d830ef9 Bump pytest-asyncio from 0.25.3 to 0.26.0 (#403)
Bumps [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) from 0.25.3 to 0.26.0.
- [Release notes](https://github.com/pytest-dev/pytest-asyncio/releases)
- [Commits](https://github.com/pytest-dev/pytest-asyncio/compare/v0.25.3...v0.26.0)

---
updated-dependencies:
- dependency-name: pytest-asyncio
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-25 09:27:12 -04:00
5164f71fef Bump ruff from 0.11.0 to 0.11.2 (#402)
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.11.0 to 0.11.2.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.11.0...0.11.2)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-24 09:05:42 -04:00
cfeea4d9a5 Bump pymongo from 4.11.2 to 4.11.3 (#399)
Bumps [pymongo](https://github.com/mongodb/mongo-python-driver) from 4.11.2 to 4.11.3.
- [Release notes](https://github.com/mongodb/mongo-python-driver/releases)
- [Changelog](https://github.com/mongodb/mongo-python-driver/blob/4.11.3/doc/changelog.rst)
- [Commits](https://github.com/mongodb/mongo-python-driver/compare/4.11.2...4.11.3)

---
updated-dependencies:
- dependency-name: pymongo
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-19 08:15:39 -07:00
cbd2c2122d Bump ruff from 0.10.0 to 0.11.0 (#398)
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.10.0 to 0.11.0.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.10.0...0.11.0)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-17 11:12:33 -04:00
8d945dec10 Bump ruff from 0.9.10 to 0.10.0 (#397)
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.9.10 to 0.10.0.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.9.10...0.10.0)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-14 11:19:21 -04:00
8dc7cef38c Update api spec (#396)
* YOYO NEW API SPEC!

* I have generated the latest API!

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-13 17:22:14 -07:00
aa1343af89 Bump attrs from 25.2.0 to 25.3.0 (#395)
Bumps [attrs](https://github.com/sponsors/hynek) from 25.2.0 to 25.3.0.
- [Commits](https://github.com/sponsors/hynek/commits)

---
updated-dependencies:
- dependency-name: attrs
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-13 11:24:40 -04:00
89 changed files with 6895 additions and 3136 deletions

111
.github/dependabot.yml vendored
View File

@ -1,21 +1,96 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
# DO NOT EDIT THIS FILE. This dependabot file was generated
# by https://github.com/KittyCAD/ciso Changes to this file should be addressed in
# the ciso repository.
version: 2
updates:
- package-ecosystem: "pip" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "daily"
reviewers:
- jessfraz
- greg-kcio
- package-ecosystem: "github-actions" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "daily"
reviewers:
- jessfraz
- greg-kcio
- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
day: monday
time: '03:00'
timezone: America/Los_Angeles
open-pull-requests-limit: 5
groups:
security:
applies-to: security-updates
update-types:
- major
- minor
- patch
patch:
applies-to: version-updates
update-types:
- patch
major:
applies-to: version-updates
update-types:
- major
minor:
applies-to: version-updates
update-types:
- minor
- patch
- package-ecosystem: pip
directory: /
schedule:
interval: weekly
day: monday
time: '03:00'
timezone: America/Los_Angeles
open-pull-requests-limit: 5
reviewers:
- greg-kcio
- jessfraz
groups:
security:
applies-to: security-updates
update-types:
- major
- minor
- patch
patch:
applies-to: version-updates
update-types:
- patch
major:
applies-to: version-updates
update-types:
- major
minor:
applies-to: version-updates
update-types:
- minor
- patch
- package-ecosystem: docker
directory: /
schedule:
interval: weekly
day: monday
time: '03:00'
timezone: America/Los_Angeles
open-pull-requests-limit: 5
reviewers:
- greg-kcio
- jessfraz
groups:
security:
applies-to: security-updates
update-types:
- major
- minor
- patch
patch:
applies-to: version-updates
update-types:
- patch
major:
applies-to: version-updates
update-types:
- major
minor:
applies-to: version-updates
update-types:
- minor
- patch

View File

@ -46,7 +46,7 @@ jobs:
- name: Check for modified files
id: git-check
run: echo ::set-output name=modified::$(if git diff-index --ignore-submodules --quiet HEAD --; then echo "false"; else echo "true"; fi)
run: echo "modified=$(if [[ -z $(git status --porcelain --untracked-files=no --ignore-submodules) ]]; then echo "false"; else echo "true"; fi)" >> "$GITHUB_OUTPUT"
- name: Commit changes, if any
if: steps.git-check.outputs.modified == 'true'

View File

@ -15,7 +15,7 @@ jobs:
name: update-spec
runs-on: ubuntu-latest
steps:
- uses: actions/create-github-app-token@v1
- uses: actions/create-github-app-token@v2
id: app-token
with:
# required

View File

@ -1,4 +1,4 @@
FROM python:3.9
FROM python:3.13
RUN pip install \
poetry

File diff suppressed because it is too large Load Diff

View File

@ -78,7 +78,7 @@ def sync(
) -> Optional[Union[ApiToken, Error]]:
"""This endpoint allows us to run API calls from our discord bot on behalf of a user. The user must have a discord account linked to their Zoo Account via oauth2 for this to work.
You must be a Zoo employee to use this endpoint.""" # noqa: E501
You must be a Zoo admin to use this endpoint.""" # noqa: E501
return sync_detailed(
discord_id=discord_id,
@ -109,7 +109,7 @@ async def asyncio(
) -> Optional[Union[ApiToken, Error]]:
"""This endpoint allows us to run API calls from our discord bot on behalf of a user. The user must have a discord account linked to their Zoo Account via oauth2 for this to work.
You must be a Zoo employee to use this endpoint.""" # noqa: E501
You must be a Zoo admin to use this endpoint.""" # noqa: E501
return (
await asyncio_detailed(

View File

@ -0,0 +1,129 @@
from typing import Any, Dict, Optional, Union
import httpx
from ...client import Client
from ...models.code_option import CodeOption
from ...models.error import Error
from ...models.kcl_model import KclModel
from ...types import Response
def _get_kwargs(
code_option: CodeOption,
*,
client: Client,
) -> Dict[str, Any]:
url = "{}/ml/convert/proprietary-to-kcl".format(
client.base_url,
) # noqa: E501
if code_option is not None:
if "?" in url:
url = url + "&code_option=" + str(code_option)
else:
url = url + "?code_option=" + str(code_option)
headers: Dict[str, Any] = client.get_headers()
cookies: Dict[str, Any] = client.get_cookies()
return {
"url": url,
"headers": headers,
"cookies": cookies,
"timeout": client.get_timeout(),
}
def _parse_response(*, response: httpx.Response) -> Optional[Union[KclModel, Error]]:
if response.status_code == 201:
response_201 = KclModel(**response.json())
return response_201
if response.status_code == 400:
response_4XX = Error(**response.json())
return response_4XX
if response.status_code == 500:
response_5XX = Error(**response.json())
return response_5XX
return Error(**response.json())
def _build_response(
*, response: httpx.Response
) -> Response[Optional[Union[KclModel, Error]]]:
return Response(
status_code=response.status_code,
content=response.content,
headers=response.headers,
parsed=_parse_response(response=response),
)
def sync_detailed(
code_option: CodeOption,
*,
client: Client,
) -> Response[Optional[Union[KclModel, Error]]]:
kwargs = _get_kwargs(
code_option=code_option,
client=client,
)
response = httpx.post(
verify=client.verify_ssl,
**kwargs,
)
return _build_response(response=response)
def sync(
code_option: CodeOption,
*,
client: Client,
) -> Optional[Union[KclModel, Error]]:
"""This endpoint is used to convert a proprietary CAD format to KCL. The file passed MUST have feature tree data.
A STEP file does not have feature tree data, so it will not work. A sldprt file does have feature tree data, so it will work.
Input filepaths will be normalized and re-canonicalized to be under the current working directory -- so returned paths may differ from provided paths, and care must be taken when handling user provided paths.""" # noqa: E501
return sync_detailed(
code_option=code_option,
client=client,
).parsed
async def asyncio_detailed(
code_option: CodeOption,
*,
client: Client,
) -> Response[Optional[Union[KclModel, Error]]]:
kwargs = _get_kwargs(
code_option=code_option,
client=client,
)
async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
response = await _client.post(**kwargs)
return _build_response(response=response)
async def asyncio(
code_option: CodeOption,
*,
client: Client,
) -> Optional[Union[KclModel, Error]]:
"""This endpoint is used to convert a proprietary CAD format to KCL. The file passed MUST have feature tree data.
A STEP file does not have feature tree data, so it will not work. A sldprt file does have feature tree data, so it will work.
Input filepaths will be normalized and re-canonicalized to be under the current working directory -- so returned paths may differ from provided paths, and care must be taken when handling user provided paths.""" # noqa: E501
return (
await asyncio_detailed(
code_option=code_option,
client=client,
)
).parsed

View File

@ -87,7 +87,9 @@ def sync(
You always get the whole code back, even if you only changed a small part of it. This endpoint will always return all the code back, including files that were not changed. If your original source code imported a stl/gltf/step/etc file, the output will not include that file since the model will never change non-kcl files. The endpoint will only return the kcl files that were changed.
This operation is performed asynchronously, the `id` of the operation will be returned. You can use the `id` returned from the request to get status information about the async operation from the `/async/operations/{id}` endpoint.""" # noqa: E501
This operation is performed asynchronously, the `id` of the operation will be returned. You can use the `id` returned from the request to get status information about the async operation from the `/async/operations/{id}` endpoint.
Input filepaths will be normalized and re-canonicalized to be under the current working directory -- so returned paths may differ from provided paths, and care must be taken when handling user provided paths.""" # noqa: E501
return sync_detailed(
body=body,
@ -122,7 +124,9 @@ async def asyncio(
You always get the whole code back, even if you only changed a small part of it. This endpoint will always return all the code back, including files that were not changed. If your original source code imported a stl/gltf/step/etc file, the output will not include that file since the model will never change non-kcl files. The endpoint will only return the kcl files that were changed.
This operation is performed asynchronously, the `id` of the operation will be returned. You can use the `id` returned from the request to get status information about the async operation from the `/async/operations/{id}` endpoint.""" # noqa: E501
This operation is performed asynchronously, the `id` of the operation will be returned. You can use the `id` returned from the request to get status information about the async operation from the `/async/operations/{id}` endpoint.
Input filepaths will be normalized and re-canonicalized to be under the current working directory -- so returned paths may differ from provided paths, and care must be taken when handling user provided paths.""" # noqa: E501
return (
await asyncio_detailed(

View File

@ -27,11 +27,18 @@ def _get_kwargs(
webrtc: bool,
*,
client: Client,
api_call_id: Optional[str] = None,
pool: Optional[str] = None,
replay: Optional[str] = None,
) -> Dict[str, Any]:
url = "{}/ws/modeling/commands".format(client.base_url) # noqa: E501
if api_call_id is not None:
if "?" in url:
url = url + "&api_call_id=" + str(api_call_id)
else:
url = url + "?api_call_id=" + str(api_call_id)
if fps is not None:
if "?" in url:
url = url + "&fps=" + str(fps)
@ -107,12 +114,14 @@ def sync(
webrtc: bool,
*,
client: Client,
api_call_id: Optional[str] = None,
pool: Optional[str] = None,
replay: Optional[str] = None,
) -> ClientConnectionSync:
"""Pass those commands to the engine via websocket, and pass responses back to the client. Basically, this is a websocket proxy between the frontend/client and the engine.""" # noqa: E501
kwargs = _get_kwargs(
api_call_id=api_call_id,
fps=fps,
pool=pool,
post_effect=post_effect,
@ -143,12 +152,14 @@ async def asyncio(
webrtc: bool,
*,
client: Client,
api_call_id: Optional[str] = None,
pool: Optional[str] = None,
replay: Optional[str] = None,
) -> ClientConnectionAsync:
"""Pass those commands to the engine via websocket, and pass responses back to the client. Basically, this is a websocket proxy between the frontend/client and the engine.""" # noqa: E501
kwargs = _get_kwargs(
api_call_id=api_call_id,
fps=fps,
pool=pool,
post_effect=post_effect,
@ -184,6 +195,7 @@ class WebSocket:
video_res_width: int,
webrtc: bool,
client: Client,
api_call_id: Optional[str] = None,
pool: Optional[str] = None,
replay: Optional[str] = None,
):
@ -196,6 +208,7 @@ class WebSocket:
video_res_width,
webrtc,
client=client,
api_call_id=api_call_id,
pool=pool,
replay=replay,
)

View File

@ -85,7 +85,7 @@ def sync(
*,
client: Client,
) -> Optional[Union[ZooProductSubscriptions, Error]]:
"""You must be a Zoo employee to perform this request.""" # noqa: E501
"""You must be a Zoo admin to perform this request.""" # noqa: E501
return sync_detailed(
id=id,
@ -118,7 +118,7 @@ async def asyncio(
*,
client: Client,
) -> Optional[Union[ZooProductSubscriptions, Error]]:
"""You must be a Zoo employee to perform this request.""" # noqa: E501
"""You must be a Zoo admin to perform this request.""" # noqa: E501
return (
await asyncio_detailed(

View File

@ -10,6 +10,7 @@ from ...types import Response
def _get_kwargs(
include_total_due: bool,
id: Uuid,
*,
client: Client,
@ -19,6 +20,12 @@ def _get_kwargs(
id=id,
) # noqa: E501
if include_total_due is not None:
if "?" in url:
url = url + "&include_total_due=" + str(include_total_due).lower()
else:
url = url + "?include_total_due=" + str(include_total_due).lower()
headers: Dict[str, Any] = client.get_headers()
cookies: Dict[str, Any] = client.get_cookies()
@ -57,11 +64,13 @@ def _build_response(
def sync_detailed(
include_total_due: bool,
id: Uuid,
*,
client: Client,
) -> Response[Optional[Union[CustomerBalance, Error]]]:
kwargs = _get_kwargs(
include_total_due=include_total_due,
id=id,
client=client,
)
@ -75,6 +84,7 @@ def sync_detailed(
def sync(
include_total_due: bool,
id: Uuid,
*,
client: Client,
@ -82,17 +92,20 @@ def sync(
"""This endpoint requires authentication by a Zoo employee. It gets the balance information for the specified org.""" # noqa: E501
return sync_detailed(
include_total_due=include_total_due,
id=id,
client=client,
).parsed
async def asyncio_detailed(
include_total_due: bool,
id: Uuid,
*,
client: Client,
) -> Response[Optional[Union[CustomerBalance, Error]]]:
kwargs = _get_kwargs(
include_total_due=include_total_due,
id=id,
client=client,
)
@ -104,6 +117,7 @@ async def asyncio_detailed(
async def asyncio(
include_total_due: bool,
id: Uuid,
*,
client: Client,
@ -112,6 +126,7 @@ async def asyncio(
return (
await asyncio_detailed(
include_total_due=include_total_due,
id=id,
client=client,
)

View File

@ -11,6 +11,7 @@ from ...types import Response
def _get_kwargs(
id: UserIdentifier,
include_total_due: bool,
*,
client: Client,
) -> Dict[str, Any]:
@ -19,6 +20,12 @@ def _get_kwargs(
id=id,
) # noqa: E501
if include_total_due is not None:
if "?" in url:
url = url + "&include_total_due=" + str(include_total_due).lower()
else:
url = url + "?include_total_due=" + str(include_total_due).lower()
headers: Dict[str, Any] = client.get_headers()
cookies: Dict[str, Any] = client.get_cookies()
@ -58,11 +65,13 @@ def _build_response(
def sync_detailed(
id: UserIdentifier,
include_total_due: bool,
*,
client: Client,
) -> Response[Optional[Union[CustomerBalance, Error]]]:
kwargs = _get_kwargs(
id=id,
include_total_due=include_total_due,
client=client,
)
@ -76,6 +85,7 @@ def sync_detailed(
def sync(
id: UserIdentifier,
include_total_due: bool,
*,
client: Client,
) -> Optional[Union[CustomerBalance, Error]]:
@ -83,17 +93,20 @@ def sync(
return sync_detailed(
id=id,
include_total_due=include_total_due,
client=client,
).parsed
async def asyncio_detailed(
id: UserIdentifier,
include_total_due: bool,
*,
client: Client,
) -> Response[Optional[Union[CustomerBalance, Error]]]:
kwargs = _get_kwargs(
id=id,
include_total_due=include_total_due,
client=client,
)
@ -105,6 +118,7 @@ async def asyncio_detailed(
async def asyncio(
id: UserIdentifier,
include_total_due: bool,
*,
client: Client,
) -> Optional[Union[CustomerBalance, Error]]:
@ -113,6 +127,7 @@ async def asyncio(
return (
await asyncio_detailed(
id=id,
include_total_due=include_total_due,
client=client,
)
).parsed

View File

@ -9,6 +9,7 @@ from ...types import Response
def _get_kwargs(
include_total_due: bool,
*,
client: Client,
) -> Dict[str, Any]:
@ -16,6 +17,12 @@ def _get_kwargs(
client.base_url,
) # noqa: E501
if include_total_due is not None:
if "?" in url:
url = url + "&include_total_due=" + str(include_total_due).lower()
else:
url = url + "?include_total_due=" + str(include_total_due).lower()
headers: Dict[str, Any] = client.get_headers()
cookies: Dict[str, Any] = client.get_cookies()
@ -54,10 +61,12 @@ def _build_response(
def sync_detailed(
include_total_due: bool,
*,
client: Client,
) -> Response[Optional[Union[CustomerBalance, Error]]]:
kwargs = _get_kwargs(
include_total_due=include_total_due,
client=client,
)
@ -70,21 +79,25 @@ def sync_detailed(
def sync(
include_total_due: bool,
*,
client: Client,
) -> Optional[Union[CustomerBalance, Error]]:
"""This endpoint requires authentication by an org admin. It gets the balance information for the authenticated user's org.""" # noqa: E501
return sync_detailed(
include_total_due=include_total_due,
client=client,
).parsed
async def asyncio_detailed(
include_total_due: bool,
*,
client: Client,
) -> Response[Optional[Union[CustomerBalance, Error]]]:
kwargs = _get_kwargs(
include_total_due=include_total_due,
client=client,
)
@ -95,6 +108,7 @@ async def asyncio_detailed(
async def asyncio(
include_total_due: bool,
*,
client: Client,
) -> Optional[Union[CustomerBalance, Error]]:
@ -102,6 +116,7 @@ async def asyncio(
return (
await asyncio_detailed(
include_total_due=include_total_due,
client=client,
)
).parsed

View File

@ -9,6 +9,7 @@ from ...types import Response
def _get_kwargs(
include_total_due: bool,
*,
client: Client,
) -> Dict[str, Any]:
@ -16,6 +17,12 @@ def _get_kwargs(
client.base_url,
) # noqa: E501
if include_total_due is not None:
if "?" in url:
url = url + "&include_total_due=" + str(include_total_due).lower()
else:
url = url + "?include_total_due=" + str(include_total_due).lower()
headers: Dict[str, Any] = client.get_headers()
cookies: Dict[str, Any] = client.get_cookies()
@ -54,10 +61,12 @@ def _build_response(
def sync_detailed(
include_total_due: bool,
*,
client: Client,
) -> Response[Optional[Union[CustomerBalance, Error]]]:
kwargs = _get_kwargs(
include_total_due=include_total_due,
client=client,
)
@ -70,21 +79,25 @@ def sync_detailed(
def sync(
include_total_due: bool,
*,
client: Client,
) -> Optional[Union[CustomerBalance, Error]]:
"""This endpoint requires authentication by any Zoo user. It gets the balance information for the authenticated user.""" # noqa: E501
return sync_detailed(
include_total_due=include_total_due,
client=client,
).parsed
async def asyncio_detailed(
include_total_due: bool,
*,
client: Client,
) -> Response[Optional[Union[CustomerBalance, Error]]]:
kwargs = _get_kwargs(
include_total_due=include_total_due,
client=client,
)
@ -95,6 +108,7 @@ async def asyncio_detailed(
async def asyncio(
include_total_due: bool,
*,
client: Client,
) -> Optional[Union[CustomerBalance, Error]]:
@ -102,6 +116,7 @@ async def asyncio(
return (
await asyncio_detailed(
include_total_due=include_total_due,
client=client,
)
).parsed

View File

@ -12,6 +12,7 @@ from ...types import Response
def _get_kwargs(
id: Uuid,
include_total_due: bool,
body: UpdatePaymentBalance,
*,
client: Client,
@ -21,6 +22,12 @@ def _get_kwargs(
id=id,
) # noqa: E501
if include_total_due is not None:
if "?" in url:
url = url + "&include_total_due=" + str(include_total_due).lower()
else:
url = url + "?include_total_due=" + str(include_total_due).lower()
headers: Dict[str, Any] = client.get_headers()
cookies: Dict[str, Any] = client.get_cookies()
@ -61,12 +68,14 @@ def _build_response(
def sync_detailed(
id: Uuid,
include_total_due: bool,
body: UpdatePaymentBalance,
*,
client: Client,
) -> Response[Optional[Union[CustomerBalance, Error]]]:
kwargs = _get_kwargs(
id=id,
include_total_due=include_total_due,
body=body,
client=client,
)
@ -81,6 +90,7 @@ def sync_detailed(
def sync(
id: Uuid,
include_total_due: bool,
body: UpdatePaymentBalance,
*,
client: Client,
@ -89,6 +99,7 @@ def sync(
return sync_detailed(
id=id,
include_total_due=include_total_due,
body=body,
client=client,
).parsed
@ -96,12 +107,14 @@ def sync(
async def asyncio_detailed(
id: Uuid,
include_total_due: bool,
body: UpdatePaymentBalance,
*,
client: Client,
) -> Response[Optional[Union[CustomerBalance, Error]]]:
kwargs = _get_kwargs(
id=id,
include_total_due=include_total_due,
body=body,
client=client,
)
@ -114,6 +127,7 @@ async def asyncio_detailed(
async def asyncio(
id: Uuid,
include_total_due: bool,
body: UpdatePaymentBalance,
*,
client: Client,
@ -123,6 +137,7 @@ async def asyncio(
return (
await asyncio_detailed(
id=id,
include_total_due=include_total_due,
body=body,
client=client,
)

View File

@ -12,6 +12,7 @@ from ...types import Response
def _get_kwargs(
id: UserIdentifier,
include_total_due: bool,
body: UpdatePaymentBalance,
*,
client: Client,
@ -21,6 +22,12 @@ def _get_kwargs(
id=id,
) # noqa: E501
if include_total_due is not None:
if "?" in url:
url = url + "&include_total_due=" + str(include_total_due).lower()
else:
url = url + "?include_total_due=" + str(include_total_due).lower()
headers: Dict[str, Any] = client.get_headers()
cookies: Dict[str, Any] = client.get_cookies()
@ -61,12 +68,14 @@ def _build_response(
def sync_detailed(
id: UserIdentifier,
include_total_due: bool,
body: UpdatePaymentBalance,
*,
client: Client,
) -> Response[Optional[Union[CustomerBalance, Error]]]:
kwargs = _get_kwargs(
id=id,
include_total_due=include_total_due,
body=body,
client=client,
)
@ -81,6 +90,7 @@ def sync_detailed(
def sync(
id: UserIdentifier,
include_total_due: bool,
body: UpdatePaymentBalance,
*,
client: Client,
@ -89,6 +99,7 @@ def sync(
return sync_detailed(
id=id,
include_total_due=include_total_due,
body=body,
client=client,
).parsed
@ -96,12 +107,14 @@ def sync(
async def asyncio_detailed(
id: UserIdentifier,
include_total_due: bool,
body: UpdatePaymentBalance,
*,
client: Client,
) -> Response[Optional[Union[CustomerBalance, Error]]]:
kwargs = _get_kwargs(
id=id,
include_total_due=include_total_due,
body=body,
client=client,
)
@ -114,6 +127,7 @@ async def asyncio_detailed(
async def asyncio(
id: UserIdentifier,
include_total_due: bool,
body: UpdatePaymentBalance,
*,
client: Client,
@ -123,6 +137,7 @@ async def asyncio(
return (
await asyncio_detailed(
id=id,
include_total_due=include_total_due,
body=body,
client=client,
)

View File

@ -79,9 +79,7 @@ def sync(
) -> Optional[Union[User, Error]]:
"""To get information about yourself, use `/users/me` as the endpoint. By doing so you will get the user information for the authenticated user.
Alternatively, to get information about the authenticated user, use `/user` endpoint.
To get information about any Zoo user, you must be a Zoo employee.""" # noqa: E501
Alternatively, to get information about the authenticated user, use `/user` endpoint.""" # noqa: E501
return sync_detailed(
id=id,
@ -112,9 +110,7 @@ async def asyncio(
) -> Optional[Union[User, Error]]:
"""To get information about yourself, use `/users/me` as the endpoint. By doing so you will get the user information for the authenticated user.
Alternatively, to get information about the authenticated user, use `/user` endpoint.
To get information about any Zoo user, you must be a Zoo employee.""" # noqa: E501
Alternatively, to get information about the authenticated user, use `/user` endpoint.""" # noqa: E501
return (
await asyncio_detailed(

View File

@ -81,9 +81,7 @@ def sync(
) -> Optional[Union[ExtendedUser, Error]]:
"""To get information about yourself, use `/users-extended/me` as the endpoint. By doing so you will get the user information for the authenticated user.
Alternatively, to get information about the authenticated user, use `/user/extended` endpoint.
To get information about any Zoo user, you must be a Zoo employee.""" # noqa: E501
Alternatively, to get information about the authenticated user, use `/user/extended` endpoint.""" # noqa: E501
return sync_detailed(
id=id,
@ -114,9 +112,7 @@ async def asyncio(
) -> Optional[Union[ExtendedUser, Error]]:
"""To get information about yourself, use `/users-extended/me` as the endpoint. By doing so you will get the user information for the authenticated user.
Alternatively, to get information about the authenticated user, use `/user/extended` endpoint.
To get information about any Zoo user, you must be a Zoo employee.""" # noqa: E501
Alternatively, to get information about the authenticated user, use `/user/extended` endpoint.""" # noqa: E501
return (
await asyncio_detailed(

View File

@ -0,0 +1,107 @@
from typing import Any, Dict, Optional
import httpx
from ...client import Client
from ...models.crm_data import CrmData
from ...models.error import Error
from ...types import Response
def _get_kwargs(
body: CrmData,
*,
client: Client,
) -> Dict[str, Any]:
url = "{}/user/crm".format(
client.base_url,
) # noqa: E501
headers: Dict[str, Any] = client.get_headers()
cookies: Dict[str, Any] = client.get_cookies()
return {
"url": url,
"headers": headers,
"cookies": cookies,
"timeout": client.get_timeout(),
"content": body.model_dump_json(),
}
def _parse_response(*, response: httpx.Response) -> Optional[Error]:
return None
if response.status_code == 400:
response_4XX = Error(**response.json())
return response_4XX
if response.status_code == 500:
response_5XX = Error(**response.json())
return response_5XX
return Error(**response.json())
def _build_response(*, response: httpx.Response) -> Response[Optional[Error]]:
return Response(
status_code=response.status_code,
content=response.content,
headers=response.headers,
parsed=_parse_response(response=response),
)
def sync_detailed(
body: CrmData,
*,
client: Client,
) -> Response[Optional[Error]]:
kwargs = _get_kwargs(
body=body,
client=client,
)
response = httpx.patch(
verify=client.verify_ssl,
**kwargs,
)
return _build_response(response=response)
def sync(
body: CrmData,
*,
client: Client,
) -> Optional[Error]:
return sync_detailed(
body=body,
client=client,
).parsed
async def asyncio_detailed(
body: CrmData,
*,
client: Client,
) -> Response[Optional[Error]]:
kwargs = _get_kwargs(
body=body,
client=client,
)
async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
response = await _client.patch(**kwargs)
return _build_response(response=response)
async def asyncio(
body: CrmData,
*,
client: Client,
) -> Optional[Error]:
return (
await asyncio_detailed(
body=body,
client=client,
)
).parsed

View File

@ -1,18 +1,19 @@
from typing import Any, Dict, Optional, Union
from typing import Any, Dict, Optional
import httpx
from ...client import Client
from ...models.error import Error
from ...models.metadata import Metadata
from ...models.inquiry_form import InquiryForm
from ...types import Response
def _get_kwargs(
body: InquiryForm,
*,
client: Client,
) -> Dict[str, Any]:
url = "{}/_meta/info".format(
url = "{}/website/form".format(
client.base_url,
) # noqa: E501
@ -24,13 +25,12 @@ def _get_kwargs(
"headers": headers,
"cookies": cookies,
"timeout": client.get_timeout(),
"content": body.model_dump_json(),
}
def _parse_response(*, response: httpx.Response) -> Optional[Union[Metadata, Error]]:
if response.status_code == 200:
response_200 = Metadata(**response.json())
return response_200
def _parse_response(*, response: httpx.Response) -> Optional[Error]:
return None
if response.status_code == 400:
response_4XX = Error(**response.json())
return response_4XX
@ -40,9 +40,7 @@ def _parse_response(*, response: httpx.Response) -> Optional[Union[Metadata, Err
return Error(**response.json())
def _build_response(
*, response: httpx.Response
) -> Response[Optional[Union[Metadata, Error]]]:
def _build_response(*, response: httpx.Response) -> Response[Optional[Error]]:
return Response(
status_code=response.status_code,
content=response.content,
@ -52,14 +50,16 @@ def _build_response(
def sync_detailed(
body: InquiryForm,
*,
client: Client,
) -> Response[Optional[Union[Metadata, Error]]]:
) -> Response[Optional[Error]]:
kwargs = _get_kwargs(
body=body,
client=client,
)
response = httpx.get(
response = httpx.put(
verify=client.verify_ssl,
**kwargs,
)
@ -68,42 +68,44 @@ def sync_detailed(
def sync(
body: InquiryForm,
*,
client: Client,
) -> Optional[Union[Metadata, Error]]:
"""This includes information on any of our other distributed systems it is connected to.
You must be a Zoo employee to perform this request.""" # noqa: E501
) -> Optional[Error]:
"""users and is not authenticated.""" # noqa: E501
return sync_detailed(
body=body,
client=client,
).parsed
async def asyncio_detailed(
body: InquiryForm,
*,
client: Client,
) -> Response[Optional[Union[Metadata, Error]]]:
) -> Response[Optional[Error]]:
kwargs = _get_kwargs(
body=body,
client=client,
)
async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
response = await _client.get(**kwargs)
response = await _client.put(**kwargs)
return _build_response(response=response)
async def asyncio(
body: InquiryForm,
*,
client: Client,
) -> Optional[Union[Metadata, Error]]:
"""This includes information on any of our other distributed systems it is connected to.
You must be a Zoo employee to perform this request.""" # noqa: E501
) -> Optional[Error]:
"""users and is not authenticated.""" # noqa: E501
return (
await asyncio_detailed(
body=body,
client=client,
)
).parsed

View File

@ -0,0 +1,107 @@
from typing import Any, Dict, Optional
import httpx
from ...client import Client
from ...models.error import Error
from ...models.subscribe import Subscribe
from ...types import Response
def _get_kwargs(
body: Subscribe,
*,
client: Client,
) -> Dict[str, Any]:
url = "{}/website/subscribe".format(
client.base_url,
) # noqa: E501
headers: Dict[str, Any] = client.get_headers()
cookies: Dict[str, Any] = client.get_cookies()
return {
"url": url,
"headers": headers,
"cookies": cookies,
"timeout": client.get_timeout(),
"content": body.model_dump_json(),
}
def _parse_response(*, response: httpx.Response) -> Optional[Error]:
return None
if response.status_code == 400:
response_4XX = Error(**response.json())
return response_4XX
if response.status_code == 500:
response_5XX = Error(**response.json())
return response_5XX
return Error(**response.json())
def _build_response(*, response: httpx.Response) -> Response[Optional[Error]]:
return Response(
status_code=response.status_code,
content=response.content,
headers=response.headers,
parsed=_parse_response(response=response),
)
def sync_detailed(
body: Subscribe,
*,
client: Client,
) -> Response[Optional[Error]]:
kwargs = _get_kwargs(
body=body,
client=client,
)
response = httpx.put(
verify=client.verify_ssl,
**kwargs,
)
return _build_response(response=response)
def sync(
body: Subscribe,
*,
client: Client,
) -> Optional[Error]:
return sync_detailed(
body=body,
client=client,
).parsed
async def asyncio_detailed(
body: Subscribe,
*,
client: Client,
) -> Response[Optional[Error]]:
kwargs = _get_kwargs(
body=body,
client=client,
)
async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
response = await _client.put(**kwargs)
return _build_response(response=response)
async def asyncio(
body: Subscribe,
*,
client: Client,
) -> Optional[Error]:
return (
await asyncio_detailed(
body=body,
client=client,
)
).parsed

View File

@ -0,0 +1,111 @@
from typing import Any, Dict, Optional
import httpx
from ...client import Client
from ...models.error import Error
from ...models.inquiry_form import InquiryForm
from ...types import Response
def _get_kwargs(
body: InquiryForm,
*,
client: Client,
) -> Dict[str, Any]:
url = "{}/user/form".format(
client.base_url,
) # noqa: E501
headers: Dict[str, Any] = client.get_headers()
cookies: Dict[str, Any] = client.get_cookies()
return {
"url": url,
"headers": headers,
"cookies": cookies,
"timeout": client.get_timeout(),
"content": body.model_dump_json(),
}
def _parse_response(*, response: httpx.Response) -> Optional[Error]:
return None
if response.status_code == 400:
response_4XX = Error(**response.json())
return response_4XX
if response.status_code == 500:
response_5XX = Error(**response.json())
return response_5XX
return Error(**response.json())
def _build_response(*, response: httpx.Response) -> Response[Optional[Error]]:
return Response(
status_code=response.status_code,
content=response.content,
headers=response.headers,
parsed=_parse_response(response=response),
)
def sync_detailed(
body: InquiryForm,
*,
client: Client,
) -> Response[Optional[Error]]:
kwargs = _get_kwargs(
body=body,
client=client,
)
response = httpx.put(
verify=client.verify_ssl,
**kwargs,
)
return _build_response(response=response)
def sync(
body: InquiryForm,
*,
client: Client,
) -> Optional[Error]:
"""It gets attached to the user's account.""" # noqa: E501
return sync_detailed(
body=body,
client=client,
).parsed
async def asyncio_detailed(
body: InquiryForm,
*,
client: Client,
) -> Response[Optional[Error]]:
kwargs = _get_kwargs(
body=body,
client=client,
)
async with httpx.AsyncClient(verify=client.verify_ssl) as _client:
response = await _client.put(**kwargs)
return _build_response(response=response)
async def asyncio(
body: InquiryForm,
*,
client: Client,
) -> Optional[Error]:
"""It gets attached to the user's account.""" # noqa: E501
return (
await asyncio_detailed(
body=body,
client=client,
)
).parsed

View File

@ -48,7 +48,6 @@ from kittycad.api.meta import (
create_debug_uploads,
create_event,
get_ipinfo,
get_metadata,
get_pricing_subscriptions,
get_schema,
internal_get_api_token_for_discord_user,
@ -56,6 +55,7 @@ from kittycad.api.meta import (
)
from kittycad.api.ml import (
create_kcl_code_completions,
create_proprietary_to_kcl,
create_text_to_cad,
create_text_to_cad_iteration,
create_text_to_cad_model_feedback,
@ -157,6 +157,10 @@ from kittycad.api.users import (
get_user_shortlinks,
list_users,
list_users_extended,
patch_user_crm,
put_public_form,
put_public_subscribe,
put_user_form_self,
update_user_privacy_settings,
update_user_self,
update_user_shortlink,
@ -188,7 +192,7 @@ from kittycad.models import (
Invoice,
IpAddrInfo,
KclCodeCompletionResponse,
Metadata,
KclModel,
MlPrompt,
MlPromptResultsPage,
Onboarding,
@ -235,8 +239,10 @@ from kittycad.models.api_token_uuid import ApiTokenUuid
from kittycad.models.base64data import Base64Data
from kittycad.models.billing_info import BillingInfo
from kittycad.models.code_language import CodeLanguage
from kittycad.models.code_option import CodeOption
from kittycad.models.create_shortlink_request import CreateShortlinkRequest
from kittycad.models.created_at_sort_mode import CreatedAtSortMode
from kittycad.models.crm_data import CrmData
from kittycad.models.email_authentication_form import EmailAuthenticationForm
from kittycad.models.enterprise_subscription_tier_price import (
EnterpriseSubscriptionTierPrice,
@ -249,6 +255,8 @@ from kittycad.models.idp_metadata_source import (
IdpMetadataSource,
OptionBase64EncodedXml,
)
from kittycad.models.inquiry_form import InquiryForm
from kittycad.models.inquiry_type import InquiryType
from kittycad.models.kcl_code_completion_params import KclCodeCompletionParams
from kittycad.models.kcl_code_completion_request import KclCodeCompletionRequest
from kittycad.models.ml_feedback import MlFeedback
@ -272,6 +280,7 @@ from kittycad.models.source_position import SourcePosition
from kittycad.models.source_range import SourceRange
from kittycad.models.source_range_prompt import SourceRangePrompt
from kittycad.models.store_coupon_params import StoreCouponParams
from kittycad.models.subscribe import Subscribe
from kittycad.models.text_to_cad_create_body import TextToCadCreateBody
from kittycad.models.text_to_cad_iteration_body import TextToCadIterationBody
from kittycad.models.text_to_cad_multi_file_iteration_body import (
@ -340,47 +349,6 @@ async def test_get_schema_async():
)
@pytest.mark.skip
def test_get_metadata():
# Create our client.
client = ClientFromEnv()
result: Optional[Union[Metadata, Error]] = get_metadata.sync(
client=client,
)
if isinstance(result, Error) or result is None:
print(result)
raise Exception("Error in response")
body: Metadata = result
print(body)
# OR if you need more info (e.g. status_code)
response: Response[Optional[Union[Metadata, Error]]] = get_metadata.sync_detailed(
client=client,
)
# OR run async
@pytest.mark.asyncio
@pytest.mark.skip
async def test_get_metadata_async():
# Create our client.
client = ClientFromEnv()
result: Optional[Union[Metadata, Error]] = await get_metadata.asyncio(
client=client,
)
# OR run async with more info
response: Response[
Optional[Union[Metadata, Error]]
] = await get_metadata.asyncio_detailed(
client=client,
)
@pytest.mark.skip
def test_get_ipinfo():
# Create our client.
@ -1899,6 +1867,53 @@ async def test_get_ml_prompt_async():
)
@pytest.mark.skip
def test_create_proprietary_to_kcl():
# Create our client.
client = ClientFromEnv()
result: Optional[Union[KclModel, Error]] = create_proprietary_to_kcl.sync(
client=client,
code_option=CodeOption.PARSE,
)
if isinstance(result, Error) or result is None:
print(result)
raise Exception("Error in response")
body: KclModel = result
print(body)
# OR if you need more info (e.g. status_code)
response: Response[Optional[Union[KclModel, Error]]] = (
create_proprietary_to_kcl.sync_detailed(
client=client,
code_option=CodeOption.PARSE,
)
)
# OR run async
@pytest.mark.asyncio
@pytest.mark.skip
async def test_create_proprietary_to_kcl_async():
# Create our client.
client = ClientFromEnv()
result: Optional[Union[KclModel, Error]] = await create_proprietary_to_kcl.asyncio(
client=client,
code_option=CodeOption.PARSE,
)
# OR run async with more info
response: Response[
Optional[Union[KclModel, Error]]
] = await create_proprietary_to_kcl.asyncio_detailed(
client=client,
code_option=CodeOption.PARSE,
)
@pytest.mark.skip
def test_create_kcl_code_completions():
# Create our client.
@ -3010,6 +3025,7 @@ def test_get_payment_balance_for_org():
result: Optional[Union[CustomerBalance, Error]] = get_payment_balance_for_org.sync(
client=client,
include_total_due=False,
)
if isinstance(result, Error) or result is None:
@ -3023,6 +3039,7 @@ def test_get_payment_balance_for_org():
response: Response[Optional[Union[CustomerBalance, Error]]] = (
get_payment_balance_for_org.sync_detailed(
client=client,
include_total_due=False,
)
)
@ -3038,6 +3055,7 @@ async def test_get_payment_balance_for_org_async():
Union[CustomerBalance, Error]
] = await get_payment_balance_for_org.asyncio(
client=client,
include_total_due=False,
)
# OR run async with more info
@ -3045,6 +3063,7 @@ async def test_get_payment_balance_for_org_async():
Optional[Union[CustomerBalance, Error]]
] = await get_payment_balance_for_org.asyncio_detailed(
client=client,
include_total_due=False,
)
@ -4226,6 +4245,7 @@ def test_get_payment_balance_for_any_org():
result: Optional[Union[CustomerBalance, Error]] = (
get_payment_balance_for_any_org.sync(
client=client,
include_total_due=False,
id=Uuid("<string>"),
)
)
@ -4241,6 +4261,7 @@ def test_get_payment_balance_for_any_org():
response: Response[Optional[Union[CustomerBalance, Error]]] = (
get_payment_balance_for_any_org.sync_detailed(
client=client,
include_total_due=False,
id=Uuid("<string>"),
)
)
@ -4257,6 +4278,7 @@ async def test_get_payment_balance_for_any_org_async():
Union[CustomerBalance, Error]
] = await get_payment_balance_for_any_org.asyncio(
client=client,
include_total_due=False,
id=Uuid("<string>"),
)
@ -4265,6 +4287,7 @@ async def test_get_payment_balance_for_any_org_async():
Optional[Union[CustomerBalance, Error]]
] = await get_payment_balance_for_any_org.asyncio_detailed(
client=client,
include_total_due=False,
id=Uuid("<string>"),
)
@ -4278,6 +4301,7 @@ def test_update_payment_balance_for_any_org():
update_payment_balance_for_any_org.sync(
client=client,
id=Uuid("<string>"),
include_total_due=False,
body=UpdatePaymentBalance(),
)
)
@ -4294,6 +4318,7 @@ def test_update_payment_balance_for_any_org():
update_payment_balance_for_any_org.sync_detailed(
client=client,
id=Uuid("<string>"),
include_total_due=False,
body=UpdatePaymentBalance(),
)
)
@ -4311,6 +4336,7 @@ async def test_update_payment_balance_for_any_org_async():
] = await update_payment_balance_for_any_org.asyncio(
client=client,
id=Uuid("<string>"),
include_total_due=False,
body=UpdatePaymentBalance(),
)
@ -4320,6 +4346,7 @@ async def test_update_payment_balance_for_any_org_async():
] = await update_payment_balance_for_any_org.asyncio_detailed(
client=client,
id=Uuid("<string>"),
include_total_due=False,
body=UpdatePaymentBalance(),
)
@ -5674,6 +5701,49 @@ async def test_delete_api_token_for_user_async():
)
@pytest.mark.skip
def test_patch_user_crm():
# Create our client.
client = ClientFromEnv()
result: Optional[Error] = patch_user_crm.sync(
client=client,
body=CrmData(),
)
if isinstance(result, Error) or result is None:
print(result)
raise Exception("Error in response")
body: Error = result
print(body)
# OR if you need more info (e.g. status_code)
response: Response[Optional[Error]] = patch_user_crm.sync_detailed(
client=client,
body=CrmData(),
)
# OR run async
@pytest.mark.asyncio
@pytest.mark.skip
async def test_patch_user_crm_async():
# Create our client.
client = ClientFromEnv()
result: Optional[Error] = await patch_user_crm.asyncio(
client=client,
body=CrmData(),
)
# OR run async with more info
response: Response[Optional[Error]] = await patch_user_crm.asyncio_detailed(
client=client,
body=CrmData(),
)
@pytest.mark.skip
def test_get_user_self_extended():
# Create our client.
@ -5717,6 +5787,73 @@ async def test_get_user_self_extended_async():
)
@pytest.mark.skip
def test_put_user_form_self():
# Create our client.
client = ClientFromEnv()
result: Optional[Error] = put_user_form_self.sync(
client=client,
body=InquiryForm(
email="<string>",
first_name="<string>",
inquiry_type=InquiryType.GENERAL_INQUIRY,
last_name="<string>",
message="<string>",
),
)
if isinstance(result, Error) or result is None:
print(result)
raise Exception("Error in response")
body: Error = result
print(body)
# OR if you need more info (e.g. status_code)
response: Response[Optional[Error]] = put_user_form_self.sync_detailed(
client=client,
body=InquiryForm(
email="<string>",
first_name="<string>",
inquiry_type=InquiryType.GENERAL_INQUIRY,
last_name="<string>",
message="<string>",
),
)
# OR run async
@pytest.mark.asyncio
@pytest.mark.skip
async def test_put_user_form_self_async():
# Create our client.
client = ClientFromEnv()
result: Optional[Error] = await put_user_form_self.asyncio(
client=client,
body=InquiryForm(
email="<string>",
first_name="<string>",
inquiry_type=InquiryType.GENERAL_INQUIRY,
last_name="<string>",
message="<string>",
),
)
# OR run async with more info
response: Response[Optional[Error]] = await put_user_form_self.asyncio_detailed(
client=client,
body=InquiryForm(
email="<string>",
first_name="<string>",
inquiry_type=InquiryType.GENERAL_INQUIRY,
last_name="<string>",
message="<string>",
),
)
@pytest.mark.skip
def test_get_oauth2_providers_for_user():
# Create our client.
@ -6067,6 +6204,7 @@ def test_get_payment_balance_for_user():
result: Optional[Union[CustomerBalance, Error]] = get_payment_balance_for_user.sync(
client=client,
include_total_due=False,
)
if isinstance(result, Error) or result is None:
@ -6080,6 +6218,7 @@ def test_get_payment_balance_for_user():
response: Response[Optional[Union[CustomerBalance, Error]]] = (
get_payment_balance_for_user.sync_detailed(
client=client,
include_total_due=False,
)
)
@ -6095,6 +6234,7 @@ async def test_get_payment_balance_for_user_async():
Union[CustomerBalance, Error]
] = await get_payment_balance_for_user.asyncio(
client=client,
include_total_due=False,
)
# OR run async with more info
@ -6102,6 +6242,7 @@ async def test_get_payment_balance_for_user_async():
Optional[Union[CustomerBalance, Error]]
] = await get_payment_balance_for_user.asyncio_detailed(
client=client,
include_total_due=False,
)
@ -7344,6 +7485,7 @@ def test_get_payment_balance_for_any_user():
get_payment_balance_for_any_user.sync(
client=client,
id=UserIdentifier("<string>"),
include_total_due=False,
)
)
@ -7359,6 +7501,7 @@ def test_get_payment_balance_for_any_user():
get_payment_balance_for_any_user.sync_detailed(
client=client,
id=UserIdentifier("<string>"),
include_total_due=False,
)
)
@ -7375,6 +7518,7 @@ async def test_get_payment_balance_for_any_user_async():
] = await get_payment_balance_for_any_user.asyncio(
client=client,
id=UserIdentifier("<string>"),
include_total_due=False,
)
# OR run async with more info
@ -7383,6 +7527,7 @@ async def test_get_payment_balance_for_any_user_async():
] = await get_payment_balance_for_any_user.asyncio_detailed(
client=client,
id=UserIdentifier("<string>"),
include_total_due=False,
)
@ -7395,6 +7540,7 @@ def test_update_payment_balance_for_any_user():
update_payment_balance_for_any_user.sync(
client=client,
id=UserIdentifier("<string>"),
include_total_due=False,
body=UpdatePaymentBalance(),
)
)
@ -7411,6 +7557,7 @@ def test_update_payment_balance_for_any_user():
update_payment_balance_for_any_user.sync_detailed(
client=client,
id=UserIdentifier("<string>"),
include_total_due=False,
body=UpdatePaymentBalance(),
)
)
@ -7428,6 +7575,7 @@ async def test_update_payment_balance_for_any_user_async():
] = await update_payment_balance_for_any_user.asyncio(
client=client,
id=UserIdentifier("<string>"),
include_total_due=False,
body=UpdatePaymentBalance(),
)
@ -7437,10 +7585,129 @@ async def test_update_payment_balance_for_any_user_async():
] = await update_payment_balance_for_any_user.asyncio_detailed(
client=client,
id=UserIdentifier("<string>"),
include_total_due=False,
body=UpdatePaymentBalance(),
)
@pytest.mark.skip
def test_put_public_form():
# Create our client.
client = ClientFromEnv()
result: Optional[Error] = put_public_form.sync(
client=client,
body=InquiryForm(
email="<string>",
first_name="<string>",
inquiry_type=InquiryType.GENERAL_INQUIRY,
last_name="<string>",
message="<string>",
),
)
if isinstance(result, Error) or result is None:
print(result)
raise Exception("Error in response")
body: Error = result
print(body)
# OR if you need more info (e.g. status_code)
response: Response[Optional[Error]] = put_public_form.sync_detailed(
client=client,
body=InquiryForm(
email="<string>",
first_name="<string>",
inquiry_type=InquiryType.GENERAL_INQUIRY,
last_name="<string>",
message="<string>",
),
)
# OR run async
@pytest.mark.asyncio
@pytest.mark.skip
async def test_put_public_form_async():
# Create our client.
client = ClientFromEnv()
result: Optional[Error] = await put_public_form.asyncio(
client=client,
body=InquiryForm(
email="<string>",
first_name="<string>",
inquiry_type=InquiryType.GENERAL_INQUIRY,
last_name="<string>",
message="<string>",
),
)
# OR run async with more info
response: Response[Optional[Error]] = await put_public_form.asyncio_detailed(
client=client,
body=InquiryForm(
email="<string>",
first_name="<string>",
inquiry_type=InquiryType.GENERAL_INQUIRY,
last_name="<string>",
message="<string>",
),
)
@pytest.mark.skip
def test_put_public_subscribe():
# Create our client.
client = ClientFromEnv()
result: Optional[Error] = put_public_subscribe.sync(
client=client,
body=Subscribe(
email="<string>",
),
)
if isinstance(result, Error) or result is None:
print(result)
raise Exception("Error in response")
body: Error = result
print(body)
# OR if you need more info (e.g. status_code)
response: Response[Optional[Error]] = put_public_subscribe.sync_detailed(
client=client,
body=Subscribe(
email="<string>",
),
)
# OR run async
@pytest.mark.asyncio
@pytest.mark.skip
async def test_put_public_subscribe_async():
# Create our client.
client = ClientFromEnv()
result: Optional[Error] = await put_public_subscribe.asyncio(
client=client,
body=Subscribe(
email="<string>",
),
)
# OR run async with more info
response: Response[Optional[Error]] = await put_public_subscribe.asyncio_detailed(
client=client,
body=Subscribe(
email="<string>",
),
)
@pytest.mark.skip
def test_create_executor_term():
# Create our client.
@ -7493,6 +7760,7 @@ def test_modeling_commands_ws():
video_res_height=10,
video_res_width=10,
webrtc=False,
api_call_id=None, # Optional[str]
pool=None, # Optional[str]
replay=None, # Optional[str]
) as websocket:
@ -7530,6 +7798,7 @@ async def test_modeling_commands_ws_async():
video_res_height=10,
video_res_width=10,
webrtc=False,
api_call_id=None, # Optional[str]
pool=None, # Optional[str]
replay=None, # Optional[str]
)

View File

@ -4,6 +4,7 @@ from .account_provider import AccountProvider
from .add_hole_from_offset import AddHoleFromOffset
from .add_org_member import AddOrgMember
from .address_details import AddressDetails
from .adjacency_info import AdjacencyInfo
from .angle import Angle
from .annotation_line_end import AnnotationLineEnd
from .annotation_line_end_options import AnnotationLineEndOptions
@ -17,6 +18,7 @@ from .api_call_query_group_by import ApiCallQueryGroupBy
from .api_call_status import ApiCallStatus
from .api_call_with_price import ApiCallWithPrice
from .api_call_with_price_results_page import ApiCallWithPriceResultsPage
from .api_endpoint import ApiEndpoint
from .api_error import ApiError
from .api_token import ApiToken
from .api_token_results_page import ApiTokenResultsPage
@ -32,7 +34,9 @@ from .axis_direction_pair import AxisDirectionPair
from .batch_response import BatchResponse
from .billing_info import BillingInfo
from .block_reason import BlockReason
from .cache_metadata import CacheMetadata
from .boolean_intersection import BooleanIntersection
from .boolean_subtract import BooleanSubtract
from .boolean_union import BooleanUnion
from .camera_drag_end import CameraDragEnd
from .camera_drag_interaction_type import CameraDragInteractionType
from .camera_drag_move import CameraDragMove
@ -44,17 +48,18 @@ from .card_details import CardDetails
from .center_of_mass import CenterOfMass
from .client_metrics import ClientMetrics
from .close_path import ClosePath
from .cluster import Cluster
from .code_language import CodeLanguage
from .code_option import CodeOption
from .code_output import CodeOutput
from .color import Color
from .complementary_edges import ComplementaryEdges
from .component_transform import ComponentTransform
from .connection import Connection
from .country_code import CountryCode
from .coupon import Coupon
from .create_shortlink_request import CreateShortlinkRequest
from .create_shortlink_response import CreateShortlinkResponse
from .created_at_sort_mode import CreatedAtSortMode
from .crm_data import CrmData
from .currency import Currency
from .curve_get_control_points import CurveGetControlPoints
from .curve_get_end_points import CurveGetEndPoints
@ -63,6 +68,7 @@ from .curve_set_constraint import CurveSetConstraint
from .curve_type import CurveType
from .customer import Customer
from .customer_balance import CustomerBalance
from .cut_strategy import CutStrategy
from .cut_type import CutType
from .default_camera_center_to_scene import DefaultCameraCenterToScene
from .default_camera_center_to_selection import DefaultCameraCenterToSelection
@ -79,14 +85,15 @@ from .density import Density
from .der_encoded_key_pair import DerEncodedKeyPair
from .device_access_token_request_form import DeviceAccessTokenRequestForm
from .device_access_token_uuid import DeviceAccessTokenUuid
from .device_auth_confirm_params import DeviceAuthConfirmParams
from .device_auth_request_form import DeviceAuthRequestForm
from .device_auth_verify_params import DeviceAuthVerifyParams
from .direction import Direction
from .disable_dry_run import DisableDryRun
from .discount import Discount
from .discount_code import DiscountCode
from .distance_type import DistanceType
from .dxf_storage import DxfStorage
from .edge_info import EdgeInfo
from .edge_lines_visible import EdgeLinesVisible
from .email_authentication_form import EmailAuthenticationForm
from .empty import Empty
@ -112,7 +119,6 @@ from .entity_mirror import EntityMirror
from .entity_mirror_across_edge import EntityMirrorAcrossEdge
from .entity_set_opacity import EntitySetOpacity
from .entity_type import EntityType
from .environment import Environment
from .error import Error
from .error_code import ErrorCode
from .event import Event
@ -127,6 +133,7 @@ from .extrude import Extrude
from .extruded_face_info import ExtrudedFaceInfo
from .extrusion_face_cap_type import ExtrusionFaceCapType
from .extrusion_face_info import ExtrusionFaceInfo
from .face_edge_info import FaceEdgeInfo
from .face_get_center import FaceGetCenter
from .face_get_gradient import FaceGetGradient
from .face_get_position import FaceGetPosition
@ -140,9 +147,7 @@ from .file_export_format import FileExportFormat
from .file_import_format import FileImportFormat
from .file_mass import FileMass
from .file_surface_area import FileSurfaceArea
from .file_system_metadata import FileSystemMetadata
from .file_volume import FileVolume
from .gateway import Gateway
from .get_entity_type import GetEntityType
from .get_num_objects import GetNumObjects
from .get_sketch_mode_plane import GetSketchModePlane
@ -161,26 +166,22 @@ from .import_file import ImportFile
from .import_files import ImportFiles
from .imported_geometry import ImportedGeometry
from .input_format3d import InputFormat3d
from .inquiry_form import InquiryForm
from .inquiry_type import InquiryType
from .invoice import Invoice
from .invoice_line_item import InvoiceLineItem
from .invoice_status import InvoiceStatus
from .ip_addr_info import IpAddrInfo
from .jetstream import Jetstream
from .jetstream_api_stats import JetstreamApiStats
from .jetstream_config import JetstreamConfig
from .jetstream_stats import JetstreamStats
from .kcl_code_completion_params import KclCodeCompletionParams
from .kcl_code_completion_request import KclCodeCompletionRequest
from .kcl_code_completion_response import KclCodeCompletionResponse
from .leaf_node import LeafNode
from .kcl_model import KclModel
from .length_unit import LengthUnit
from .loft import Loft
from .make_axes_gizmo import MakeAxesGizmo
from .make_offset_path import MakeOffsetPath
from .make_plane import MakePlane
from .mass import Mass
from .meta_cluster_info import MetaClusterInfo
from .metadata import Metadata
from .method import Method
from .ml_feedback import MlFeedback
from .ml_prompt import MlPrompt
@ -213,6 +214,8 @@ from .object_visible import ObjectVisible
from .ok_modeling_cmd_response import OkModelingCmdResponse
from .ok_web_socket_response_data import OkWebSocketResponseData
from .onboarding import Onboarding
from .opposite_for_angle import OppositeForAngle
from .opposite_for_length_unit import OppositeForLengthUnit
from .org import Org
from .org_details import OrgDetails
from .org_member import OrgMember
@ -253,6 +256,7 @@ from .project_entity_to_plane import ProjectEntityToPlane
from .project_points_to_plane import ProjectPointsToPlane
from .raw_file import RawFile
from .reconfigure_stream import ReconfigureStream
from .relative_to import RelativeTo
from .remove_scene_objects import RemoveSceneObjects
from .revolve import Revolve
from .revolve_about_edge import RevolveAboutEdge
@ -293,6 +297,7 @@ from .side_face import SideFace
from .sketch_mode_disable import SketchModeDisable
from .solid2d_add_hole import Solid2dAddHole
from .solid3d_fillet_edge import Solid3dFilletEdge
from .solid3d_get_adjacency_info import Solid3dGetAdjacencyInfo
from .solid3d_get_all_edge_faces import Solid3dGetAllEdgeFaces
from .solid3d_get_all_opposite_edges import Solid3dGetAllOppositeEdges
from .solid3d_get_common_edge import Solid3dGetCommonEdge
@ -307,6 +312,7 @@ from .source_range_prompt import SourceRangePrompt
from .start_path import StartPath
from .stl_storage import StlStorage
from .store_coupon_params import StoreCouponParams
from .subscribe import Subscribe
from .subscription_tier_feature import SubscriptionTierFeature
from .subscription_tier_price import SubscriptionTierPrice
from .subscription_tier_type import SubscriptionTierType

View File

@ -0,0 +1,17 @@
from typing import Optional
from pydantic import BaseModel, ConfigDict
from ..models.edge_info import EdgeInfo
class AdjacencyInfo(BaseModel):
"""Edge info struct (useful for maintaining mappings between edges and faces and adjacent/opposite edges)."""
adjacent_info: Optional[EdgeInfo] = None
opposite_info: Optional[EdgeInfo] = None
original_info: Optional[EdgeInfo] = None
model_config = ConfigDict(protected_namespaces=())

View File

@ -0,0 +1,15 @@
from enum import Enum
class ApiEndpoint(str, Enum):
"""Types of API endpoints.""" # noqa: E501
"""# The modeling API. """ # noqa: E501
MODELING = "modeling"
"""# Machine learning API. """ # noqa: E501
ML = "ml"
"""# File API. """ # noqa: E501
FILE = "file"
def __str__(self) -> str:
return str(self.value)

View File

@ -305,12 +305,18 @@ class OptionTextToCadMultiFileIteration(BaseModel):
id: Uuid
kcl_version: Optional[str] = None
model: TextToCadModel
model_version: str
outputs: Optional[Dict[str, str]] = None
project_name: Optional[str] = None
prompt: Optional[str] = None
source_ranges: List[SourceRangePrompt]
started_at: Optional[datetime.datetime] = None

View File

@ -0,0 +1,11 @@
from typing import List, Optional
from pydantic import BaseModel, ConfigDict
class BooleanIntersection(BaseModel):
"""The response from the 'BooleanIntersection'."""
extra_solid_ids: Optional[List[str]] = None
model_config = ConfigDict(protected_namespaces=())

View File

@ -0,0 +1,11 @@
from typing import List, Optional
from pydantic import BaseModel, ConfigDict
class BooleanSubtract(BaseModel):
"""The response from the 'BooleanSubtract'."""
extra_solid_ids: Optional[List[str]] = None
model_config = ConfigDict(protected_namespaces=())

View File

@ -0,0 +1,11 @@
from typing import List, Optional
from pydantic import BaseModel, ConfigDict
class BooleanUnion(BaseModel):
"""The response from the 'BooleanUnion'."""
extra_solid_ids: Optional[List[str]] = None
model_config = ConfigDict(protected_namespaces=())

View File

@ -1,11 +0,0 @@
from pydantic import BaseModel, ConfigDict
class CacheMetadata(BaseModel):
"""Metadata about our cache.
This is mostly used for internal purposes and debugging."""
ok: bool
model_config = ConfigDict(protected_namespaces=())

View File

@ -1,7 +1,7 @@
from typing import List
from pydantic import BaseModel, ConfigDict
from ..models.point3d import Point3d
from ..models.point4d import Point4d
from ..models.world_coordinate_system import WorldCoordinateSystem
@ -18,9 +18,9 @@ class CameraViewState(BaseModel):
ortho_scale_factor: float
pivot_position: List[float]
pivot_position: Point3d
pivot_rotation: List[float]
pivot_rotation: Point4d
world_coord_system: WorldCoordinateSystem

View File

@ -1,23 +1,39 @@
from typing import Optional
from pydantic import BaseModel, ConfigDict
class ClientMetrics(BaseModel):
"""ClientMetrics contains information regarding the state of the peer."""
rtc_frames_decoded: int
rtc_frame_height: Optional[int] = None
rtc_frames_dropped: int
rtc_frame_width: Optional[int] = None
rtc_frames_per_second: int
rtc_frames_decoded: Optional[int] = None
rtc_frames_received: int
rtc_frames_dropped: Optional[int] = None
rtc_freeze_count: int
rtc_frames_per_second: Optional[int] = None
rtc_jitter_sec: float
rtc_frames_received: Optional[int] = None
rtc_keyframes_decoded: int
rtc_freeze_count: Optional[int] = None
rtc_total_freezes_duration_sec: float
rtc_jitter_sec: Optional[float] = None
rtc_keyframes_decoded: Optional[int] = None
rtc_packets_lost: Optional[int] = None
rtc_pause_count: Optional[int] = None
rtc_pli_count: Optional[int] = None
rtc_stun_rtt_sec: Optional[float] = None
rtc_total_freezes_duration_sec: Optional[float] = None
rtc_total_pauses_duration_sec: Optional[float] = None
model_config = ConfigDict(protected_namespaces=())

View File

@ -1,21 +0,0 @@
from typing import List, Optional
from pydantic import BaseModel, ConfigDict
class Cluster(BaseModel):
"""Cluster information."""
addr: Optional[str] = None
auth_timeout: int = 0
cluster_port: int = 0
name: str = ""
tls_timeout: int = 0
urls: List[str] = []
model_config = ConfigDict(protected_namespaces=())

View File

@ -0,0 +1,17 @@
from enum import Enum
class CodeOption(str, Enum):
"""Code option for running and verifying kcl.
<details><summary>JSON schema</summary>
```json { "title": "CodeOption", "description": "Code option for running and verifying kcl.", "type": "string", "enum": [ "parse", "execute", "cleanup", "mock_execute" ] } ``` </details>""" # noqa: E501
PARSE = "parse"
EXECUTE = "execute"
CLEANUP = "cleanup"
MOCK_EXECUTE = "mock_execute"
def __str__(self) -> str:
return str(self.value)

View File

@ -0,0 +1,13 @@
from typing import List, Optional
from pydantic import BaseModel, ConfigDict
class ComplementaryEdges(BaseModel):
"""Struct to contain the edge information of a wall of an extrude/rotate/loft/sweep."""
adjacent_ids: List[str]
opposite_id: Optional[str] = None
model_config = ConfigDict(protected_namespaces=())

View File

@ -7,7 +7,7 @@ from ..models.transform_by_for_point4d import TransformByForPoint4d
class ComponentTransform(BaseModel):
"""Container that holds a translate, rotate and scale."""
"""Container that holds a translate, rotate and scale. Defaults to no change, everything stays the same (i.e. the identity function)."""
rotate_angle_axis: Optional[TransformByForPoint4d] = None

View File

@ -1,134 +0,0 @@
import datetime
from typing import Dict
from pydantic import BaseModel, ConfigDict
from ..models.cluster import Cluster
from ..models.gateway import Gateway
from ..models.jetstream import Jetstream
from ..models.leaf_node import LeafNode
class Connection(BaseModel):
"""Metadata about a pub-sub connection.
This is mostly used for internal purposes and debugging."""
auth_timeout: int = 0
cluster: Cluster = {
"addr": None,
"auth_timeout": 0,
"cluster_port": 0,
"name": "",
"tls_timeout": 0,
"urls": [],
} # type: ignore
config_load_time: datetime.datetime
connections: int = 0
cores: int = 0
cpu: float = 0.0
gateway: Gateway = {
"auth_timeout": 0,
"host": "",
"name": "",
"port": 0,
"tls_timeout": 0,
} # type: ignore
git_commit: str = ""
go: str = ""
gomaxprocs: int = 0
host: str
http_base_path: str = ""
http_host: str = ""
http_port: int = 0
http_req_stats: Dict[str, int]
https_port: int = 0
in_bytes: int = 0
in_msgs: int = 0
jetstream: Jetstream = {
"config": {"domain": "", "max_memory": 0, "max_storage": 0, "store_dir": ""},
"meta": {"cluster_size": 0, "leader": "", "name": ""},
"stats": {
"accounts": 0,
"api": {"errors": 0, "inflight": 0, "total": 0},
"ha_assets": 0,
"memory": 0,
"reserved_memory": 0,
"reserved_store": 0,
"store": 0,
},
} # type: ignore
leaf: LeafNode = {"auth_timeout": 0, "host": "", "port": 0, "tls_timeout": 0} # type: ignore
leafnodes: int = 0
max_connections: int = 0
max_control_line: int = 0
max_payload: int = 0
max_pending: int = 0
mem: int = 0
now: datetime.datetime
out_bytes: int = 0
out_msgs: int = 0
ping_interval: int = 0
ping_max: int = 0
port: int = 0
proto: int = 0
remotes: int = 0
routes: int = 0
server_id: str = ""
server_name: str = ""
slow_consumers: int = 0
start: datetime.datetime
subscriptions: int = 0
system_account: str = ""
tls_timeout: int = 0
total_connections: int = 0
uptime: str = ""
version: str = ""
write_deadline: int = 0
model_config = ConfigDict(protected_namespaces=())

View File

@ -0,0 +1,15 @@
from typing import Optional
from pydantic import BaseModel, ConfigDict
class CrmData(BaseModel):
"""The data for subscribing a user to the newsletter."""
cad_industry: Optional[str] = None
cad_user_type: Optional[str] = None
number_of_cad_users: Optional[str] = None
model_config = ConfigDict(protected_namespaces=())

View File

@ -21,17 +21,19 @@ class CustomerBalance(BaseModel):
modeling_app_enterprise_price: Optional[SubscriptionTierPrice] = None
monthly_credits_remaining: float
monthly_api_credits_remaining: int
pre_pay_cash_remaining: float
monthly_api_credits_remaining_monetary_value: float
pre_pay_credits_remaining: float
stable_api_credits_remaining: int
stable_api_credits_remaining_monetary_value: float
subscription_details: Optional[ZooProductSubscriptions] = None
subscription_id: Optional[str] = None
total_due: float
total_due: Optional[float] = None
updated_at: datetime.datetime

View File

@ -0,0 +1,15 @@
from enum import Enum
class CutStrategy(str, Enum):
"""What strategy (algorithm) should be used for cutting? Defaults to Automatic.""" # noqa: E501
"""# Basic fillet cut. This has limitations, like the filletted edges can't touch each other. But it's very fast and simple. """ # noqa: E501
BASIC = "basic"
"""# More complicated fillet cut. It works for more use-cases, like edges that touch each other. But it's slower than the Basic method. """ # noqa: E501
CSG = "csg"
"""# Tries the Basic method, and if that doesn't work, tries the CSG strategy. """ # noqa: E501
AUTOMATIC = "automatic"
def __str__(self) -> str:
return str(self.value)

View File

@ -0,0 +1,9 @@
from pydantic import BaseModel, ConfigDict
class DeviceAuthConfirmParams(BaseModel):
"""The request parameters to confirm the `user_code` for the OAuth 2.0 Device Authorization Grant."""
user_code: str
model_config = ConfigDict(protected_namespaces=())

View File

@ -1,9 +0,0 @@
from pydantic import BaseModel, ConfigDict
class DeviceAuthVerifyParams(BaseModel):
"""The request parameters to verify the `user_code` for the OAuth 2.0 Device Authorization Grant."""
user_code: str
model_config = ConfigDict(protected_namespaces=())

View File

@ -0,0 +1,13 @@
from typing import List
from pydantic import BaseModel, ConfigDict
class EdgeInfo(BaseModel):
"""A list of faces for a specific edge."""
edge_id: str
faces: List[str]
model_config = ConfigDict(protected_namespaces=())

View File

@ -1,11 +1,15 @@
from typing import List
from typing import List, Optional
from pydantic import BaseModel, ConfigDict
from ..models.face_edge_info import FaceEdgeInfo
class EntityCircularPattern(BaseModel):
"""The response from the `EntityCircularPattern` command."""
entity_ids: List[str]
entity_face_edge_ids: Optional[List[FaceEdgeInfo]] = None
entity_ids: Optional[List[str]] = None
model_config = ConfigDict(protected_namespaces=())

View File

@ -1,7 +1,15 @@
from typing import List, Optional
from pydantic import BaseModel, ConfigDict
from ..models.face_edge_info import FaceEdgeInfo
class EntityClone(BaseModel):
"""The response from the `EntityClone` command."""
entity_ids: Optional[List[str]] = None
face_edge_ids: Optional[List[FaceEdgeInfo]] = None
model_config = ConfigDict(protected_namespaces=())

View File

@ -1,11 +1,15 @@
from typing import List
from typing import List, Optional
from pydantic import BaseModel, ConfigDict
from ..models.face_edge_info import FaceEdgeInfo
class EntityLinearPattern(BaseModel):
"""The response from the `EntityLinearPattern` command."""
entity_ids: List[str]
entity_face_edge_ids: Optional[List[FaceEdgeInfo]] = None
entity_ids: Optional[List[str]] = None
model_config = ConfigDict(protected_namespaces=())

View File

@ -1,11 +1,15 @@
from typing import List
from typing import List, Optional
from pydantic import BaseModel, ConfigDict
from ..models.face_edge_info import FaceEdgeInfo
class EntityLinearPatternTransform(BaseModel):
"""The response from the `EntityLinearPatternTransform` command."""
entity_ids: List[str]
entity_face_edge_ids: Optional[List[FaceEdgeInfo]] = None
entity_ids: Optional[List[str]] = None
model_config = ConfigDict(protected_namespaces=())

View File

@ -1,11 +1,15 @@
from typing import List
from typing import List, Optional
from pydantic import BaseModel, ConfigDict
from ..models.face_edge_info import FaceEdgeInfo
class EntityMirror(BaseModel):
"""The response from the `EntityMirror` endpoint."""
entity_ids: List[str]
entity_face_edge_ids: Optional[List[FaceEdgeInfo]] = None
entity_ids: Optional[List[str]] = None
model_config = ConfigDict(protected_namespaces=())

View File

@ -1,11 +1,15 @@
from typing import List
from typing import List, Optional
from pydantic import BaseModel, ConfigDict
from ..models.face_edge_info import FaceEdgeInfo
class EntityMirrorAcrossEdge(BaseModel):
"""The response from the `EntityMirrorAcrossEdge` endpoint."""
entity_ids: List[str]
entity_face_edge_ids: Optional[List[FaceEdgeInfo]] = None
entity_ids: Optional[List[str]] = None
model_config = ConfigDict(protected_namespaces=())

View File

@ -1,15 +0,0 @@
from enum import Enum
class Environment(str, Enum):
"""The environment the server is running in.""" # noqa: E501
"""# The development environment. This is for running locally. """ # noqa: E501
DEVELOPMENT = "DEVELOPMENT"
"""# The preview environment. This is when PRs are created and a service is deployed for testing. """ # noqa: E501
PREVIEW = "PREVIEW"
"""# The production environment. """ # noqa: E501
PRODUCTION = "PRODUCTION"
def __str__(self) -> str:
return str(self.value)

View File

@ -20,6 +20,8 @@ class ExtendedUser(BaseModel):
created_at: datetime.datetime
deletion_scheduled: bool = False
discord: Optional[str] = None
email: Optional[str] = None
@ -36,6 +38,8 @@ class ExtendedUser(BaseModel):
image: str
is_onboarded: bool = False
is_service_account: bool = False
last_name: Optional[str] = None

View File

@ -0,0 +1,15 @@
from typing import List
from pydantic import BaseModel, ConfigDict
class FaceEdgeInfo(BaseModel):
"""Faces and edges id info (most used in identifying geometry in patterned and mirrored objects)."""
edges: List[str]
faces: List[str]
object_id: str
model_config = ConfigDict(protected_namespaces=())

View File

@ -1,11 +0,0 @@
from pydantic import BaseModel, ConfigDict
class FileSystemMetadata(BaseModel):
"""Metadata about our file system.
This is mostly used for internal purposes and debugging."""
ok: bool
model_config = ConfigDict(protected_namespaces=())

View File

@ -1,17 +0,0 @@
from pydantic import BaseModel, ConfigDict
class Gateway(BaseModel):
"""Gateway information."""
auth_timeout: int = 0
host: str = ""
name: str = ""
port: int = 0
tls_timeout: int = 0
model_config = ConfigDict(protected_namespaces=())

View File

@ -0,0 +1,27 @@
from typing import Optional
from pydantic import BaseModel, ConfigDict
from ..models.inquiry_type import InquiryType
class InquiryForm(BaseModel):
"""The form for a public inquiry submission."""
company: Optional[str] = None
email: str
first_name: str
industry: Optional[str] = None
inquiry_type: InquiryType
last_name: str
message: str
phone: Optional[str] = None
model_config = ConfigDict(protected_namespaces=())

View File

@ -0,0 +1,25 @@
from enum import Enum
class InquiryType(str, Enum):
"""The type of inquiry.""" # noqa: E501
"""# General inquiry about the service or product. """ # noqa: E501
GENERAL_INQUIRY = "general_inquiry"
"""# Questions related to sales or purchasing. """ # noqa: E501
SALES_QUESTION = "sales_question"
"""# Inquiry from a developer, typically technical in nature. """ # noqa: E501
DEVELOPER_INQUIRY = "developer_inquiry"
"""# Opportunity for partnership or collaboration. """ # noqa: E501
PARTNERSHIP_OPPORTUNITY = "partnership_opportunity"
"""# Other inquiries related to sales that do not fit predefined categories. """ # noqa: E501
OTHER_SALES_INQUIRY = "other_sales_inquiry"
"""# Request for technical support or troubleshooting. """ # noqa: E501
TECHNICAL_SUPPORT = "technical_support"
"""# Questions or requests related to account management. """ # noqa: E501
ACCOUNT_MANAGEMENT = "account_management"
"""# Other support-related inquiries that do not fit predefined categories. """ # noqa: E501
OTHER_SUPPORT_INQUIRY = "other_support_inquiry"
def __str__(self) -> str:
return str(self.value)

View File

@ -1,30 +0,0 @@
from pydantic import BaseModel, ConfigDict
from ..models.jetstream_config import JetstreamConfig
from ..models.jetstream_stats import JetstreamStats
from ..models.meta_cluster_info import MetaClusterInfo
class Jetstream(BaseModel):
"""Jetstream information."""
config: JetstreamConfig = {
"domain": "",
"max_memory": 0,
"max_storage": 0,
"store_dir": "",
} # type: ignore
meta: MetaClusterInfo = {"cluster_size": 0, "leader": "", "name": ""} # type: ignore
stats: JetstreamStats = {
"accounts": 0,
"api": {"errors": 0, "inflight": 0, "total": 0},
"ha_assets": 0,
"memory": 0,
"reserved_memory": 0,
"reserved_store": 0,
"store": 0,
} # type: ignore
model_config = ConfigDict(protected_namespaces=())

View File

@ -1,13 +0,0 @@
from pydantic import BaseModel, ConfigDict
class JetstreamApiStats(BaseModel):
"""Jetstream API statistics."""
errors: int = 0
inflight: int = 0
total: int = 0
model_config = ConfigDict(protected_namespaces=())

View File

@ -1,15 +0,0 @@
from pydantic import BaseModel, ConfigDict
class JetstreamConfig(BaseModel):
"""Jetstream configuration."""
domain: str = ""
max_memory: int = 0
max_storage: int = 0
store_dir: str = ""
model_config = ConfigDict(protected_namespaces=())

View File

@ -1,23 +0,0 @@
from pydantic import BaseModel, ConfigDict
from ..models.jetstream_api_stats import JetstreamApiStats
class JetstreamStats(BaseModel):
"""Jetstream statistics."""
accounts: int = 0
api: JetstreamApiStats = {"errors": 0, "inflight": 0, "total": 0} # type: ignore
ha_assets: int = 0
memory: int = 0
reserved_memory: int = 0
reserved_store: int = 0
store: int = 0
model_config = ConfigDict(protected_namespaces=())

View File

@ -0,0 +1,9 @@
from pydantic import BaseModel, ConfigDict
class KclModel(BaseModel):
"""The response containing the KCL code."""
code: str
model_config = ConfigDict(protected_namespaces=())

View File

@ -1,15 +0,0 @@
from pydantic import BaseModel, ConfigDict
class LeafNode(BaseModel):
"""Leaf node information."""
auth_timeout: int = 0
host: str = ""
port: int = 0
tls_timeout: int = 0
model_config = ConfigDict(protected_namespaces=())

View File

@ -1,13 +0,0 @@
from pydantic import BaseModel, ConfigDict
class MetaClusterInfo(BaseModel):
"""Jetstream statistics."""
cluster_size: int = 0
leader: str = ""
name: str = ""
model_config = ConfigDict(protected_namespaces=())

View File

@ -1,24 +0,0 @@
from pydantic import BaseModel, ConfigDict
from ..models.cache_metadata import CacheMetadata
from ..models.connection import Connection
from ..models.environment import Environment
from ..models.file_system_metadata import FileSystemMetadata
class Metadata(BaseModel):
"""Metadata about our currently running server.
This is mostly used for internal purposes and debugging."""
cache: CacheMetadata
environment: Environment
fs: FileSystemMetadata
git_hash: str
pubsub: Connection
model_config = ConfigDict(protected_namespaces=())

View File

@ -2,6 +2,7 @@ from typing import List, Optional
from pydantic import BaseModel, ConfigDict
from ..models.api_endpoint import ApiEndpoint
from ..models.modeling_app_share_links import ModelingAppShareLinks
from ..models.modeling_app_subscription_tier_name import ModelingAppSubscriptionTierName
from ..models.subscription_tier_feature import SubscriptionTierFeature
@ -21,11 +22,17 @@ class ModelingAppSubscriptionTier(BaseModel):
description: str
endpoints_included: Optional[List[ApiEndpoint]] = None
features: Optional[List[SubscriptionTierFeature]] = None
monthly_pay_as_you_go_api_credits: int = 0
monthly_pay_as_you_go_api_credits_monetary_value: float
name: ModelingAppSubscriptionTierName
pay_as_you_go_credits: float
pay_as_you_go_api_credit_price: float = 0.0
price: SubscriptionTierPrice

View File

@ -11,6 +11,7 @@ from ..models.camera_movement import CameraMovement
from ..models.camera_view_state import CameraViewState
from ..models.color import Color
from ..models.component_transform import ComponentTransform
from ..models.cut_strategy import CutStrategy
from ..models.cut_type import CutType
from ..models.distance_type import DistanceType
from ..models.entity_type import EntityType
@ -20,6 +21,8 @@ from ..models.import_file import ImportFile
from ..models.input_format3d import InputFormat3d
from ..models.length_unit import LengthUnit
from ..models.modeling_cmd_id import ModelingCmdId
from ..models.opposite_for_angle import OppositeForAngle
from ..models.opposite_for_length_unit import OppositeForLengthUnit
from ..models.output_format2d import OutputFormat2d
from ..models.output_format3d import OutputFormat3d
from ..models.path_component_constraint_bound import PathComponentConstraintBound
@ -28,6 +31,7 @@ from ..models.path_segment import PathSegment
from ..models.perspective_camera_parameters import PerspectiveCameraParameters
from ..models.point2d import Point2d
from ..models.point3d import Point3d
from ..models.relative_to import RelativeTo
from ..models.scene_selection_type import SceneSelectionType
from ..models.scene_tool_type import SceneToolType
from ..models.transform import Transform
@ -89,6 +93,8 @@ class OptionExtrude(BaseModel):
faces: Optional[ExtrudedFaceInfo] = None
opposite: OppositeForLengthUnit = "None" # type: ignore
target: ModelingCmdId
type: Literal["extrude"] = "extrude"
@ -99,6 +105,8 @@ class OptionExtrude(BaseModel):
class OptionSweep(BaseModel):
"""Extrude the object along a path."""
relative_to: RelativeTo = "sketch_plane" # type: ignore
sectional: bool
target: ModelingCmdId
@ -121,6 +129,8 @@ class OptionRevolve(BaseModel):
axis_is_2d: bool
opposite: OppositeForAngle = "None" # type: ignore
origin: Point3d
target: ModelingCmdId
@ -155,6 +165,8 @@ class OptionRevolveAboutEdge(BaseModel):
edge_id: str
opposite: OppositeForAngle = "None" # type: ignore
target: ModelingCmdId
tolerance: LengthUnit
@ -809,14 +821,18 @@ class OptionSolid3DFilletEdge(BaseModel):
cut_type: CutType = "fillet" # type: ignore
edge_id: str
edge_id: Optional[str] = None
face_id: Optional[str] = None
edge_ids: List[str] = []
extra_face_ids: List[str] = []
object_id: str
radius: LengthUnit
strategy: CutStrategy = "automatic" # type: ignore
tolerance: LengthUnit
type: Literal["solid3d_fillet_edge"] = "solid3d_fillet_edge"
@ -1480,6 +1496,18 @@ class OptionSolid3DGetExtrusionFaceInfo(BaseModel):
model_config = ConfigDict(protected_namespaces=())
class OptionSolid3DGetAdjacencyInfo(BaseModel):
"""Get a concise description of all of solids edges."""
edge_id: str
object_id: str
type: Literal["solid3d_get_adjacency_info"] = "solid3d_get_adjacency_info"
model_config = ConfigDict(protected_namespaces=())
class OptionSelectClear(BaseModel):
"""Clear the selection"""
@ -1516,6 +1544,44 @@ class OptionSetObjectTransform(BaseModel):
model_config = ConfigDict(protected_namespaces=())
class OptionBooleanUnion(BaseModel):
"""Create a new solid from combining other smaller solids. In other words, every part of the input solids will be included in the output solid."""
solid_ids: List[str]
tolerance: LengthUnit
type: Literal["boolean_union"] = "boolean_union"
model_config = ConfigDict(protected_namespaces=())
class OptionBooleanIntersection(BaseModel):
"""Create a new solid from intersecting several other solids. In other words, the part of the input solids where they all overlap will be the output solid."""
solid_ids: List[str]
tolerance: LengthUnit
type: Literal["boolean_intersection"] = "boolean_intersection"
model_config = ConfigDict(protected_namespaces=())
class OptionBooleanSubtract(BaseModel):
"""Create a new solid from subtracting several other solids. The 'target' is what will be cut from. The 'tool' is what will be cut out from 'target'."""
target_ids: List[str]
tolerance: LengthUnit
tool_ids: List[str]
type: Literal["boolean_subtract"] = "boolean_subtract"
model_config = ConfigDict(protected_namespaces=())
class OptionMakeOffsetPath(BaseModel):
"""Make a new path by offsetting an object by a given distance. The new path's ID will be the ID of this command."""
@ -1674,10 +1740,14 @@ ModelingCmd = RootModel[
OptionOrientToFace,
OptionViewIsometric,
OptionSolid3DGetExtrusionFaceInfo,
OptionSolid3DGetAdjacencyInfo,
OptionSelectClear,
OptionSelectGet,
OptionGetNumObjects,
OptionSetObjectTransform,
OptionBooleanUnion,
OptionBooleanIntersection,
OptionBooleanSubtract,
OptionMakeOffsetPath,
OptionAddHoleFromOffset,
OptionSetGridReferencePlane,

View File

@ -8,6 +8,8 @@ class OAuth2ClientInfo(BaseModel):
csrf_token: Optional[str] = None
oidc_nonce: Optional[str] = None
pkce_code_verifier: Optional[str] = None
url: Optional[str] = None

View File

@ -4,11 +4,16 @@ from pydantic import BaseModel, ConfigDict, Field, RootModel
from typing_extensions import Annotated
from ..models.add_hole_from_offset import AddHoleFromOffset
from ..models.adjacency_info import AdjacencyInfo
from ..models.boolean_intersection import BooleanIntersection
from ..models.boolean_subtract import BooleanSubtract
from ..models.boolean_union import BooleanUnion
from ..models.camera_drag_end import CameraDragEnd
from ..models.camera_drag_move import CameraDragMove
from ..models.camera_drag_start import CameraDragStart
from ..models.center_of_mass import CenterOfMass
from ..models.close_path import ClosePath
from ..models.complementary_edges import ComplementaryEdges
from ..models.curve_get_control_points import CurveGetControlPoints
from ..models.curve_get_end_points import CurveGetEndPoints
from ..models.curve_get_type import CurveGetType
@ -28,6 +33,7 @@ from ..models.default_camera_set_view import DefaultCameraSetView
from ..models.default_camera_zoom import DefaultCameraZoom
from ..models.density import Density
from ..models.disable_dry_run import DisableDryRun
from ..models.edge_info import EdgeInfo
from ..models.edge_lines_visible import EdgeLinesVisible
from ..models.enable_dry_run import EnableDryRun
from ..models.enable_sketch_mode import EnableSketchMode
@ -55,6 +61,7 @@ from ..models.export3d import Export3d
from ..models.extend_path import ExtendPath
from ..models.extrude import Extrude
from ..models.extrusion_face_info import ExtrusionFaceInfo
from ..models.face_edge_info import FaceEdgeInfo
from ..models.face_get_center import FaceGetCenter
from ..models.face_get_gradient import FaceGetGradient
from ..models.face_get_position import FaceGetPosition
@ -116,6 +123,7 @@ from ..models.set_tool import SetTool
from ..models.sketch_mode_disable import SketchModeDisable
from ..models.solid2d_add_hole import Solid2dAddHole
from ..models.solid3d_fillet_edge import Solid3dFilletEdge
from ..models.solid3d_get_adjacency_info import Solid3dGetAdjacencyInfo
from ..models.solid3d_get_all_edge_faces import Solid3dGetAllEdgeFaces
from ..models.solid3d_get_all_opposite_edges import Solid3dGetAllOppositeEdges
from ..models.solid3d_get_common_edge import Solid3dGetCommonEdge
@ -956,6 +964,16 @@ class OptionSelectGet(BaseModel):
model_config = ConfigDict(protected_namespaces=())
class OptionSolid3DGetAdjacencyInfo(BaseModel):
""""""
data: Solid3dGetAdjacencyInfo
type: Literal["solid3d_get_adjacency_info"] = "solid3d_get_adjacency_info"
model_config = ConfigDict(protected_namespaces=())
class OptionSolid3DGetAllEdgeFaces(BaseModel):
""""""
@ -1298,6 +1316,26 @@ class OptionEntityGetDistance(BaseModel):
model_config = ConfigDict(protected_namespaces=())
class OptionFaceEdgeInfo(BaseModel):
""""""
data: FaceEdgeInfo
type: Literal["face_edge_info"] = "face_edge_info"
model_config = ConfigDict(protected_namespaces=())
class OptionEdgeInfo(BaseModel):
""""""
data: EdgeInfo
type: Literal["edge_info"] = "edge_info"
model_config = ConfigDict(protected_namespaces=())
class OptionEntityClone(BaseModel):
""""""
@ -1408,6 +1446,26 @@ class OptionExtrusionFaceInfo(BaseModel):
model_config = ConfigDict(protected_namespaces=())
class OptionComplementaryEdges(BaseModel):
""""""
data: ComplementaryEdges
type: Literal["complementary_edges"] = "complementary_edges"
model_config = ConfigDict(protected_namespaces=())
class OptionAdjacencyInfo(BaseModel):
""""""
data: AdjacencyInfo
type: Literal["adjacency_info"] = "adjacency_info"
model_config = ConfigDict(protected_namespaces=())
class OptionSetGridReferencePlane(BaseModel):
""""""
@ -1418,6 +1476,36 @@ class OptionSetGridReferencePlane(BaseModel):
model_config = ConfigDict(protected_namespaces=())
class OptionBooleanUnion(BaseModel):
""""""
data: BooleanUnion
type: Literal["boolean_union"] = "boolean_union"
model_config = ConfigDict(protected_namespaces=())
class OptionBooleanIntersection(BaseModel):
""""""
data: BooleanIntersection
type: Literal["boolean_intersection"] = "boolean_intersection"
model_config = ConfigDict(protected_namespaces=())
class OptionBooleanSubtract(BaseModel):
""""""
data: BooleanSubtract
type: Literal["boolean_subtract"] = "boolean_subtract"
model_config = ConfigDict(protected_namespaces=())
OkModelingCmdResponse = RootModel[
Annotated[
Union[
@ -1503,6 +1591,7 @@ OkModelingCmdResponse = RootModel[
OptionAddHoleFromOffset,
OptionDefaultCameraFocusOn,
OptionSelectGet,
OptionSolid3DGetAdjacencyInfo,
OptionSolid3DGetAllEdgeFaces,
OptionSolid3DGetAllOppositeEdges,
OptionSolid3DGetOppositeEdge,
@ -1537,6 +1626,8 @@ OkModelingCmdResponse = RootModel[
OptionCenterOfMass,
OptionGetSketchModePlane,
OptionEntityGetDistance,
OptionFaceEdgeInfo,
OptionEdgeInfo,
OptionEntityClone,
OptionEntityLinearPatternTransform,
OptionEntityLinearPattern,
@ -1548,7 +1639,12 @@ OkModelingCmdResponse = RootModel[
OptionEntityMakeHelixFromEdge,
OptionSolid3DGetExtrusionFaceInfo,
OptionExtrusionFaceInfo,
OptionComplementaryEdges,
OptionAdjacencyInfo,
OptionSetGridReferencePlane,
OptionBooleanUnion,
OptionBooleanIntersection,
OptionBooleanSubtract,
],
Field(discriminator="type"),
]

View File

@ -170,6 +170,24 @@ class OptionPong(BaseModel):
model_config = ConfigDict(protected_namespaces=())
class DebugData(BaseModel):
""""""
name: str
model_config = ConfigDict(protected_namespaces=())
class OptionDebug(BaseModel):
"""Information about the connected instance"""
data: DebugData
type: Literal["debug"] = "debug"
model_config = ConfigDict(protected_namespaces=())
OkWebSocketResponseData = RootModel[
Annotated[
Union[
@ -182,6 +200,7 @@ OkWebSocketResponseData = RootModel[
OptionMetricsRequest,
OptionModelingSessionData,
OptionPong,
OptionDebug,
],
Field(discriminator="type"),
]

View File

@ -0,0 +1,17 @@
from typing import Any
from pydantic import GetCoreSchemaHandler
from pydantic_core import CoreSchema, core_schema
class OppositeForAngle(str):
""""""
def __str__(self) -> str:
return self
@classmethod
def __get_pydantic_core_schema__(
cls, source_type: Any, handler: GetCoreSchemaHandler
) -> CoreSchema:
return core_schema.no_info_after_validator_function(cls, handler(str))

View File

@ -0,0 +1,17 @@
from typing import Any
from pydantic import GetCoreSchemaHandler
from pydantic_core import CoreSchema, core_schema
class OppositeForLengthUnit(str):
""""""
def __str__(self) -> str:
return self
@classmethod
def __get_pydantic_core_schema__(
cls, source_type: Any, handler: GetCoreSchemaHandler
) -> CoreSchema:
return core_schema.no_info_after_validator_function(cls, handler(str))

View File

@ -1,4 +1,5 @@
from typing import Literal, Union
import datetime
from typing import Literal, Optional, Union
from pydantic import BaseModel, ConfigDict, Field, RootModel
from typing_extensions import Annotated
@ -16,6 +17,8 @@ from ..models.unit_length import UnitLength
class OptionFbx(BaseModel):
"""Autodesk Filmbox (FBX) format."""
created: Optional[datetime.datetime] = None
storage: FbxStorage
type: Literal["fbx"] = "fbx"
@ -68,6 +71,8 @@ class OptionStep(BaseModel):
coords: System
created: Optional[datetime.datetime] = None
type: Literal["step"] = "step"
model_config = ConfigDict(protected_namespaces=())

View File

@ -93,6 +93,22 @@ class OptionArcTo(BaseModel):
model_config = ConfigDict(protected_namespaces=())
class OptionCircularInvolute(BaseModel):
"""Adds a circular involute from the current position that goes through the given end_radius and is rotated around the current point by angle."""
angle: Angle
end_radius: LengthUnit
reverse: bool
start_radius: LengthUnit
type: Literal["circular_involute"] = "circular_involute"
model_config = ConfigDict(protected_namespaces=())
PathSegment = RootModel[
Annotated[
Union[
@ -102,6 +118,7 @@ PathSegment = RootModel[
OptionTangentialArc,
OptionTangentialArcTo,
OptionArcTo,
OptionCircularInvolute,
],
Field(discriminator="type"),
]

View File

@ -0,0 +1,13 @@
from enum import Enum
class RelativeTo(str, Enum):
"""What is the given geometry relative to?""" # noqa: E501
"""# Local/relative to a position centered within the plane being sketched on """ # noqa: E501
SKETCH_PLANE = "sketch_plane"
"""# Local/relative to the trajectory curve """ # noqa: E501
TRAJECTORY_CURVE = "trajectory_curve"
def __str__(self) -> str:
return str(self.value)

View File

@ -0,0 +1,13 @@
from typing import List
from pydantic import BaseModel, ConfigDict
from ..models.adjacency_info import AdjacencyInfo
class Solid3dGetAdjacencyInfo(BaseModel):
"""Extrusion face info struct (useful for maintaining mappings between source path segment ids and extrusion faces) This includes the opposite and adjacent faces and edges."""
edges: List[AdjacencyInfo]
model_config = ConfigDict(protected_namespaces=())

View File

@ -0,0 +1,9 @@
from pydantic import BaseModel, ConfigDict
class Subscribe(BaseModel):
"""The data for subscribing a user to the newsletter."""
email: str
model_config = ConfigDict(protected_namespaces=())

View File

@ -6,12 +6,12 @@ class SupportTier(str, Enum):
"""# Community support. """ # noqa: E501
COMMUNITY = "community"
"""# Standard support. """ # noqa: E501
STANDARD = "standard"
"""# Standard email support. """ # noqa: E501
STANDARD_EMAIL = "standard_email"
"""# Priority email support. """ # noqa: E501
PRIORITY_EMAIL = "priority_email"
"""# Premium support. """ # noqa: E501
PREMIUM = "premium"
"""# Priority support. """ # noqa: E501
PRIORITY = "priority"
def __str__(self) -> str:
return str(self.value)

View File

@ -23,12 +23,18 @@ class TextToCadMultiFileIteration(BaseModel):
id: Uuid
kcl_version: Optional[str] = None
model: TextToCadModel
model_version: str
outputs: Optional[Dict[str, str]] = None
project_name: Optional[str] = None
prompt: Optional[str] = None
source_ranges: List[SourceRangePrompt]
started_at: Optional[datetime.datetime] = None

View File

@ -6,12 +6,14 @@ from ..models.source_range_prompt import SourceRangePrompt
class TextToCadMultiFileIterationBody(BaseModel):
"""Body for generating models from text."""
"""Body for iterating on models from text prompts."""
kcl_version: Optional[str] = None
project_name: Optional[str] = None
source_ranges: List[SourceRangePrompt]
prompt: Optional[str] = None
source_ranges: Optional[List[SourceRangePrompt]] = None
model_config = ConfigDict(protected_namespaces=())

View File

@ -6,10 +6,8 @@ from pydantic import BaseModel, ConfigDict
class UpdatePaymentBalance(BaseModel):
"""The data for updating a balance."""
monthly_credits_remaining: Optional[float] = None
monthly_api_credits_remaining_monetary_value: Optional[float] = None
pre_pay_cash_remaining: Optional[float] = None
pre_pay_credits_remaining: Optional[float] = None
stable_api_credits_remaining_monetary_value: Optional[float] = None
model_config = ConfigDict(protected_namespaces=())

View File

@ -16,6 +16,8 @@ class UpdateUser(BaseModel):
image: str
is_onboarded: Optional[bool] = None
last_name: Optional[str] = None
phone: str = ""

View File

@ -18,6 +18,8 @@ class User(BaseModel):
created_at: datetime.datetime
deletion_scheduled: bool = False
discord: Optional[str] = None
email: Optional[str] = None
@ -32,6 +34,8 @@ class User(BaseModel):
image: str
is_onboarded: bool = False
is_service_account: bool = False
last_name: Optional[str] = None

View File

@ -75,6 +75,14 @@ class OptionMetricsResponse(BaseModel):
model_config = ConfigDict(protected_namespaces=())
class OptionDebug(BaseModel):
"""Return information about the connected instance"""
type: Literal["debug"] = "debug"
model_config = ConfigDict(protected_namespaces=())
class OptionHeaders(BaseModel):
"""Authentication header request."""
@ -94,6 +102,7 @@ WebSocketRequest = RootModel[
OptionModelingCmdBatchReq,
OptionPing,
OptionMetricsResponse,
OptionDebug,
OptionHeaders,
],
Field(discriminator="type"),

View File

@ -2,6 +2,7 @@ from typing import List, Optional
from pydantic import BaseModel, ConfigDict
from ..models.api_endpoint import ApiEndpoint
from ..models.modeling_app_share_links import ModelingAppShareLinks
from ..models.modeling_app_subscription_tier_name import ModelingAppSubscriptionTierName
from ..models.subscription_tier_feature import SubscriptionTierFeature
@ -21,11 +22,17 @@ class ZooProductSubscription(BaseModel):
description: str
endpoints_included: Optional[List[ApiEndpoint]] = None
features: Optional[List[SubscriptionTierFeature]] = None
monthly_pay_as_you_go_api_credits: int = 0
monthly_pay_as_you_go_api_credits_monetary_value: float
name: ModelingAppSubscriptionTierName
pay_as_you_go_credits: float
pay_as_you_go_api_credit_price: float = 0.0
price: SubscriptionTierPrice

View File

@ -6,10 +6,10 @@ class ZooTool(str, Enum):
"""# The modeling app. """ # noqa: E501
MODELING_APP = "modeling_app"
"""# The Text-to-CAD UI. """ # noqa: E501
TEXT_TO_CAD = "text_to_cad"
"""# The Diff Chrome Extension. """ # noqa: E501
DIFF_CHROME_EXTENSION = "diff_chrome_extension"
"""# The Text-to-CAD UI. """ # noqa: E501
TEXT_TO_CAD = "text_to_cad"
def __str__(self) -> str:
return str(self.value)

443
poetry.lock generated
View File

@ -84,14 +84,14 @@ reference = "pypi-public"
[[package]]
name = "attrs"
version = "25.2.0"
version = "25.3.0"
description = "Classes Without Boilerplate"
optional = false
python-versions = ">=3.8"
groups = ["main", "dev"]
files = [
{file = "attrs-25.2.0-py3-none-any.whl", hash = "sha256:611344ff0a5fed735d86d7784610c84f8126b95e549bcad9ff61b4242f2d386b"},
{file = "attrs-25.2.0.tar.gz", hash = "sha256:18a06db706db43ac232cce80443fcd9f2500702059ecf53489e3c5a3f417acaf"},
{file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"},
{file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"},
]
[package.extras]
@ -1423,20 +1423,21 @@ reference = "pypi-public"
[[package]]
name = "pydantic"
version = "2.10.6"
version = "2.11.4"
description = "Data validation using Python type hints"
optional = false
python-versions = ">=3.8"
python-versions = ">=3.9"
groups = ["main"]
files = [
{file = "pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"},
{file = "pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"},
{file = "pydantic-2.11.4-py3-none-any.whl", hash = "sha256:d9615eaa9ac5a063471da949c8fc16376a84afb5024688b3ff885693506764eb"},
{file = "pydantic-2.11.4.tar.gz", hash = "sha256:32738d19d63a226a52eed76645a98ee07c1f410ee41d93b4afbfa85ed8111c2d"},
]
[package.dependencies]
annotated-types = ">=0.6.0"
pydantic-core = "2.27.2"
pydantic-core = "2.33.2"
typing-extensions = ">=4.12.2"
typing-inspection = ">=0.4.0"
[package.extras]
email = ["email-validator (>=2.0.0)"]
@ -1449,112 +1450,111 @@ reference = "pypi-public"
[[package]]
name = "pydantic-core"
version = "2.27.2"
version = "2.33.2"
description = "Core functionality for Pydantic validation and serialization"
optional = false
python-versions = ">=3.8"
python-versions = ">=3.9"
groups = ["main"]
files = [
{file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"},
{file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"},
{file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a"},
{file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5"},
{file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c"},
{file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7"},
{file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a"},
{file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236"},
{file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962"},
{file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9"},
{file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af"},
{file = "pydantic_core-2.27.2-cp310-cp310-win32.whl", hash = "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4"},
{file = "pydantic_core-2.27.2-cp310-cp310-win_amd64.whl", hash = "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31"},
{file = "pydantic_core-2.27.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc"},
{file = "pydantic_core-2.27.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7"},
{file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15"},
{file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306"},
{file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99"},
{file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459"},
{file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048"},
{file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d"},
{file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b"},
{file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474"},
{file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6"},
{file = "pydantic_core-2.27.2-cp311-cp311-win32.whl", hash = "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c"},
{file = "pydantic_core-2.27.2-cp311-cp311-win_amd64.whl", hash = "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc"},
{file = "pydantic_core-2.27.2-cp311-cp311-win_arm64.whl", hash = "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4"},
{file = "pydantic_core-2.27.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0"},
{file = "pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef"},
{file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7"},
{file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934"},
{file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6"},
{file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c"},
{file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2"},
{file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4"},
{file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3"},
{file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4"},
{file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57"},
{file = "pydantic_core-2.27.2-cp312-cp312-win32.whl", hash = "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc"},
{file = "pydantic_core-2.27.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9"},
{file = "pydantic_core-2.27.2-cp312-cp312-win_arm64.whl", hash = "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b"},
{file = "pydantic_core-2.27.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b"},
{file = "pydantic_core-2.27.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154"},
{file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9"},
{file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9"},
{file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1"},
{file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a"},
{file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e"},
{file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4"},
{file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27"},
{file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee"},
{file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1"},
{file = "pydantic_core-2.27.2-cp313-cp313-win32.whl", hash = "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130"},
{file = "pydantic_core-2.27.2-cp313-cp313-win_amd64.whl", hash = "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee"},
{file = "pydantic_core-2.27.2-cp313-cp313-win_arm64.whl", hash = "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b"},
{file = "pydantic_core-2.27.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d3e8d504bdd3f10835468f29008d72fc8359d95c9c415ce6e767203db6127506"},
{file = "pydantic_core-2.27.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:521eb9b7f036c9b6187f0b47318ab0d7ca14bd87f776240b90b21c1f4f149320"},
{file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85210c4d99a0114f5a9481b44560d7d1e35e32cc5634c656bc48e590b669b145"},
{file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d716e2e30c6f140d7560ef1538953a5cd1a87264c737643d481f2779fc247fe1"},
{file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f66d89ba397d92f840f8654756196d93804278457b5fbede59598a1f9f90b228"},
{file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:669e193c1c576a58f132e3158f9dfa9662969edb1a250c54d8fa52590045f046"},
{file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdbe7629b996647b99c01b37f11170a57ae675375b14b8c13b8518b8320ced5"},
{file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d262606bf386a5ba0b0af3b97f37c83d7011439e3dc1a9298f21efb292e42f1a"},
{file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cabb9bcb7e0d97f74df8646f34fc76fbf793b7f6dc2438517d7a9e50eee4f14d"},
{file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:d2d63f1215638d28221f664596b1ccb3944f6e25dd18cd3b86b0a4c408d5ebb9"},
{file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bca101c00bff0adb45a833f8451b9105d9df18accb8743b08107d7ada14bd7da"},
{file = "pydantic_core-2.27.2-cp38-cp38-win32.whl", hash = "sha256:f6f8e111843bbb0dee4cb6594cdc73e79b3329b526037ec242a3e49012495b3b"},
{file = "pydantic_core-2.27.2-cp38-cp38-win_amd64.whl", hash = "sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad"},
{file = "pydantic_core-2.27.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c10eb4f1659290b523af58fa7cffb452a61ad6ae5613404519aee4bfbf1df993"},
{file = "pydantic_core-2.27.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef592d4bad47296fb11f96cd7dc898b92e795032b4894dfb4076cfccd43a9308"},
{file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c61709a844acc6bf0b7dce7daae75195a10aac96a596ea1b776996414791ede4"},
{file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c5f762659e47fdb7b16956c71598292f60a03aa92f8b6351504359dbdba6cf"},
{file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c9775e339e42e79ec99c441d9730fccf07414af63eac2f0e48e08fd38a64d76"},
{file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57762139821c31847cfb2df63c12f725788bd9f04bc2fb392790959b8f70f118"},
{file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d1e85068e818c73e048fe28cfc769040bb1f475524f4745a5dc621f75ac7630"},
{file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:097830ed52fd9e427942ff3b9bc17fab52913b2f50f2880dc4a5611446606a54"},
{file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044a50963a614ecfae59bb1eaf7ea7efc4bc62f49ed594e18fa1e5d953c40e9f"},
{file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:4e0b4220ba5b40d727c7f879eac379b822eee5d8fff418e9d3381ee45b3b0362"},
{file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e4f4bb20d75e9325cc9696c6802657b58bc1dbbe3022f32cc2b2b632c3fbb96"},
{file = "pydantic_core-2.27.2-cp39-cp39-win32.whl", hash = "sha256:cca63613e90d001b9f2f9a9ceb276c308bfa2a43fafb75c8031c4f66039e8c6e"},
{file = "pydantic_core-2.27.2-cp39-cp39-win_amd64.whl", hash = "sha256:77d1bca19b0f7021b3a982e6f903dcd5b2b06076def36a652e3907f596e29f67"},
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e"},
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8"},
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3"},
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f"},
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133"},
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc"},
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50"},
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9"},
{file = "pydantic_core-2.27.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151"},
{file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c33939a82924da9ed65dab5a65d427205a73181d8098e79b6b426bdf8ad4e656"},
{file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:00bad2484fa6bda1e216e7345a798bd37c68fb2d97558edd584942aa41b7d278"},
{file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c817e2b40aba42bac6f457498dacabc568c3b7a986fc9ba7c8d9d260b71485fb"},
{file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:251136cdad0cb722e93732cb45ca5299fb56e1344a833640bf93b2803f8d1bfd"},
{file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2088237af596f0a524d3afc39ab3b036e8adb054ee57cbb1dcf8e09da5b29cc"},
{file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d4041c0b966a84b4ae7a09832eb691a35aec90910cd2dbe7a208de59be77965b"},
{file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:8083d4e875ebe0b864ffef72a4304827015cff328a1be6e22cc850753bfb122b"},
{file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f141ee28a0ad2123b6611b6ceff018039df17f32ada8b534e6aa039545a3efb2"},
{file = "pydantic_core-2.27.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7d0c8399fcc1848491f00e0314bd59fb34a9c008761bcb422a057670c3f65e35"},
{file = "pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39"},
{file = "pydantic_core-2.33.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2b3d326aaef0c0399d9afffeb6367d5e26ddc24d351dbc9c636840ac355dc5d8"},
{file = "pydantic_core-2.33.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e5b2671f05ba48b94cb90ce55d8bdcaaedb8ba00cc5359f6810fc918713983d"},
{file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0069c9acc3f3981b9ff4cdfaf088e98d83440a4c7ea1bc07460af3d4dc22e72d"},
{file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d53b22f2032c42eaaf025f7c40c2e3b94568ae077a606f006d206a463bc69572"},
{file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0405262705a123b7ce9f0b92f123334d67b70fd1f20a9372b907ce1080c7ba02"},
{file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b25d91e288e2c4e0662b8038a28c6a07eaac3e196cfc4ff69de4ea3db992a1b"},
{file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdfe4b3789761f3bcb4b1ddf33355a71079858958e3a552f16d5af19768fef2"},
{file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efec8db3266b76ef9607c2c4c419bdb06bf335ae433b80816089ea7585816f6a"},
{file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:031c57d67ca86902726e0fae2214ce6770bbe2f710dc33063187a68744a5ecac"},
{file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:f8de619080e944347f5f20de29a975c2d815d9ddd8be9b9b7268e2e3ef68605a"},
{file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73662edf539e72a9440129f231ed3757faab89630d291b784ca99237fb94db2b"},
{file = "pydantic_core-2.33.2-cp310-cp310-win32.whl", hash = "sha256:0a39979dcbb70998b0e505fb1556a1d550a0781463ce84ebf915ba293ccb7e22"},
{file = "pydantic_core-2.33.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0379a2b24882fef529ec3b4987cb5d003b9cda32256024e6fe1586ac45fc640"},
{file = "pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7"},
{file = "pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246"},
{file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f"},
{file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc"},
{file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de"},
{file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a"},
{file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef"},
{file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e"},
{file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d"},
{file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30"},
{file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf"},
{file = "pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51"},
{file = "pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab"},
{file = "pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65"},
{file = "pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc"},
{file = "pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7"},
{file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025"},
{file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011"},
{file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f"},
{file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88"},
{file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1"},
{file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b"},
{file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1"},
{file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6"},
{file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea"},
{file = "pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290"},
{file = "pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2"},
{file = "pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab"},
{file = "pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f"},
{file = "pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6"},
{file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef"},
{file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a"},
{file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916"},
{file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a"},
{file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d"},
{file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56"},
{file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5"},
{file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e"},
{file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162"},
{file = "pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849"},
{file = "pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9"},
{file = "pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9"},
{file = "pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac"},
{file = "pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5"},
{file = "pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9"},
{file = "pydantic_core-2.33.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a2b911a5b90e0374d03813674bf0a5fbbb7741570dcd4b4e85a2e48d17def29d"},
{file = "pydantic_core-2.33.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6fa6dfc3e4d1f734a34710f391ae822e0a8eb8559a85c6979e14e65ee6ba2954"},
{file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c54c939ee22dc8e2d545da79fc5381f1c020d6d3141d3bd747eab59164dc89fb"},
{file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53a57d2ed685940a504248187d5685e49eb5eef0f696853647bf37c418c538f7"},
{file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09fb9dd6571aacd023fe6aaca316bd01cf60ab27240d7eb39ebd66a3a15293b4"},
{file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0e6116757f7959a712db11f3e9c0a99ade00a5bbedae83cb801985aa154f071b"},
{file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d55ab81c57b8ff8548c3e4947f119551253f4e3787a7bbc0b6b3ca47498a9d3"},
{file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c20c462aa4434b33a2661701b861604913f912254e441ab8d78d30485736115a"},
{file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:44857c3227d3fb5e753d5fe4a3420d6376fa594b07b621e220cd93703fe21782"},
{file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:eb9b459ca4df0e5c87deb59d37377461a538852765293f9e6ee834f0435a93b9"},
{file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9fcd347d2cc5c23b06de6d3b7b8275be558a0c90549495c699e379a80bf8379e"},
{file = "pydantic_core-2.33.2-cp39-cp39-win32.whl", hash = "sha256:83aa99b1285bc8f038941ddf598501a86f1536789740991d7d8756e34f1e74d9"},
{file = "pydantic_core-2.33.2-cp39-cp39-win_amd64.whl", hash = "sha256:f481959862f57f29601ccced557cc2e817bce7533ab8e01a797a48b49c9692b3"},
{file = "pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5c4aa4e82353f65e548c476b37e64189783aa5384903bfea4f41580f255fddfa"},
{file = "pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d946c8bf0d5c24bf4fe333af284c59a19358aa3ec18cb3dc4370080da1e8ad29"},
{file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d"},
{file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e"},
{file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c"},
{file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0e03262ab796d986f978f79c943fc5f620381be7287148b8010b4097f79a39ec"},
{file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1a8695a8d00c73e50bff9dfda4d540b7dee29ff9b8053e38380426a85ef10052"},
{file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fa754d1850735a0b0e03bcffd9d4b4343eb417e47196e4485d9cca326073a42c"},
{file = "pydantic_core-2.33.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a11c8d26a50bfab49002947d3d237abe4d9e4b5bdc8846a63537b6488e197808"},
{file = "pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8"},
{file = "pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593"},
{file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612"},
{file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7"},
{file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e"},
{file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8"},
{file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf"},
{file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb"},
{file = "pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1"},
{file = "pydantic_core-2.33.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:87acbfcf8e90ca885206e98359d7dca4bcbb35abdc0ff66672a293e1d7a19101"},
{file = "pydantic_core-2.33.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:7f92c15cd1e97d4b12acd1cc9004fa092578acfa57b67ad5e43a197175d01a64"},
{file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3f26877a748dc4251cfcfda9dfb5f13fcb034f5308388066bcfe9031b63ae7d"},
{file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac89aea9af8cd672fa7b510e7b8c33b0bba9a43186680550ccf23020f32d535"},
{file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:970919794d126ba8645f3837ab6046fb4e72bbc057b3709144066204c19a455d"},
{file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:3eb3fe62804e8f859c49ed20a8451342de53ed764150cb14ca71357c765dc2a6"},
{file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:3abcd9392a36025e3bd55f9bd38d908bd17962cc49bc6da8e7e96285336e2bca"},
{file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3a1c81334778f9e3af2f8aeb7a960736e5cab1dfebfb26aabca09afd2906c039"},
{file = "pydantic_core-2.33.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2807668ba86cb38c6817ad9bc66215ab8584d1d304030ce4f0887336f28a5e27"},
{file = "pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc"},
]
[package.dependencies]
@ -1567,14 +1567,14 @@ reference = "pypi-public"
[[package]]
name = "pydantic-extra-types"
version = "2.10.3"
version = "2.10.4"
description = "Extra Pydantic types."
optional = false
python-versions = ">=3.8"
groups = ["main"]
files = [
{file = "pydantic_extra_types-2.10.3-py3-none-any.whl", hash = "sha256:e8b372752b49019cd8249cc192c62a820d8019f5382a8789d0f887338a59c0f3"},
{file = "pydantic_extra_types-2.10.3.tar.gz", hash = "sha256:dcc0a7b90ac9ef1b58876c9b8fdede17fbdde15420de9d571a9fccde2ae175bb"},
{file = "pydantic_extra_types-2.10.4-py3-none-any.whl", hash = "sha256:ce064595af3cab05e39ae062752432dcd0362ff80f7e695b61a3493a4d842db7"},
{file = "pydantic_extra_types-2.10.4.tar.gz", hash = "sha256:bf8236a63d061eb3ecb1b2afa78ba0f97e3f67aa11dbbff56ec90491e8772edc"},
]
[package.dependencies]
@ -1582,9 +1582,9 @@ pydantic = ">=2.5.2"
typing-extensions = "*"
[package.extras]
all = ["pendulum (>=3.0.0,<4.0.0)", "phonenumbers (>=8,<9)", "pycountry (>=23)", "pymongo (>=4.0.0,<5.0.0)", "python-ulid (>=1,<2) ; python_version < \"3.9\"", "python-ulid (>=1,<4) ; python_version >= \"3.9\"", "pytz (>=2024.1)", "semver (>=3.0.2)", "semver (>=3.0.2,<3.1.0)", "tzdata (>=2024.1)"]
all = ["pendulum (>=3.0.0,<4.0.0)", "phonenumbers (>=8,<10)", "pycountry (>=23)", "pymongo (>=4.0.0,<5.0.0)", "python-ulid (>=1,<2) ; python_version < \"3.9\"", "python-ulid (>=1,<4) ; python_version >= \"3.9\"", "pytz (>=2024.1)", "semver (>=3.0.2)", "semver (>=3.0.2,<3.1.0)", "tzdata (>=2024.1)"]
pendulum = ["pendulum (>=3.0.0,<4.0.0)"]
phonenumbers = ["phonenumbers (>=8,<9)"]
phonenumbers = ["phonenumbers (>=8,<10)"]
pycountry = ["pycountry (>=23)"]
python-ulid = ["python-ulid (>=1,<2) ; python_version < \"3.9\"", "python-ulid (>=1,<4) ; python_version >= \"3.9\""]
semver = ["semver (>=3.0.2)"]
@ -1635,69 +1635,69 @@ reference = "pypi-public"
[[package]]
name = "pymongo"
version = "4.11.2"
version = "4.12.1"
description = "Python driver for MongoDB <http://www.mongodb.org>"
optional = false
python-versions = ">=3.9"
groups = ["main"]
files = [
{file = "pymongo-4.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2a5184fd5ff4d96eb7758316646c9cc47ca8b8a8125853a537fe7a47ae50fe51"},
{file = "pymongo-4.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:979cc5ea601f1c1c33824bd4550ab4aa71b367cf5206697cc915840cc495dd73"},
{file = "pymongo-4.11.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b08c83538635c04694a22a5b6bf6b8156a3c9bc35bcdfb12de157ad1f0fc4d41"},
{file = "pymongo-4.11.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ebb30e04c362576351fb34b1360b3fcfa6e2227a4bafa9bab2acba9c705239d"},
{file = "pymongo-4.11.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4fca5a81546ab91b7ad0fbab754a6932ffc3240fa8ab06b238a3cb97e1395b2"},
{file = "pymongo-4.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5848c7180103a7d9bacb32ddf41cd4ec2bfac35f94eaef77d323c8cc8c2ea665"},
{file = "pymongo-4.11.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81273ed1faf58e89c9e0f6290c8026aa31d8d9e45ea8bf0d96713e0433fd1764"},
{file = "pymongo-4.11.2-cp310-cp310-win32.whl", hash = "sha256:842de0a38ac2579e1c640564e36749c3b596095e7c8701384a70ed1acf16632b"},
{file = "pymongo-4.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:1d679e099d15dac7fd25513dd91032869e291abf2bf6fac33494fc973b0e2346"},
{file = "pymongo-4.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c87ad59bbc88bc41a0396ee87f2d0ad45d23db5649fd0ee2eff6fbc35c046db0"},
{file = "pymongo-4.11.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ad13aee24d77aef19606eff569bea18124be097a64767ab631e7980f4b3a0a74"},
{file = "pymongo-4.11.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9ace309794cc5ad5be94b873ad17e85dda09c3bb54c150aa71e9c03447d6763"},
{file = "pymongo-4.11.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec7c1cfa6dc290f8d7bd85a6ab1e942a2fac4671b2d8c67437fc7c33b2d4e8b4"},
{file = "pymongo-4.11.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0c6dfa545205547fb9205243a7327de02141c17cc6910544f2805b07ad45a96"},
{file = "pymongo-4.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cedc2e38e0186676f96e1d76f40aa2cc016f392ed71f0649a67fd2520dcb35b"},
{file = "pymongo-4.11.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74ebb54f450e557e6f0e950790bab9c9f190243077262e72085ff8feff17a10f"},
{file = "pymongo-4.11.2-cp311-cp311-win32.whl", hash = "sha256:ef32b5622dcf7cac2f81af5e14ce9989802bf19b691adb8ad00484e4fa9391c6"},
{file = "pymongo-4.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:ab4c1dd1970e34d37c8ab22a2c28578cfe694347997d3692b8440541f4798d85"},
{file = "pymongo-4.11.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b9955ddeffa7b236a985ed9c9ab87ca6c98eb02d7bd5034960f385fbfbdb54a0"},
{file = "pymongo-4.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b94a9c22b31c158d254ba74ad41f928b0c3a208caac8d1436ddff711459b3cad"},
{file = "pymongo-4.11.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d05014366bea8b6e403591f81f9ef03871bace4802dc7afe7a066836b2f64e50"},
{file = "pymongo-4.11.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfbfabc46b1bb9253a3916e3c5c5112a0799d2b82bac789528acc579d7294508"},
{file = "pymongo-4.11.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7bb3de24ec209c44b8b70196252f4294bbf61095747153b0deab358c7085764b"},
{file = "pymongo-4.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e75c88f2a765005a3a93fb2367d11451efc90c3a288ade84c247621e3044ff64"},
{file = "pymongo-4.11.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:13a395554584a50dec350f69df0dc240be11d2b59399f1371311d07bb18133b5"},
{file = "pymongo-4.11.2-cp312-cp312-win32.whl", hash = "sha256:d563d16a693c6e38180a54e2a07cb41111422e99267e46304cd6d616a3759d68"},
{file = "pymongo-4.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:9609849dfd00f2c2e3d17403cdce1a0d81494dc5a4d602d6584a0326be0d46c9"},
{file = "pymongo-4.11.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:587328d77d03d380342290d6494df6e7becca25c0621c3ad0be41e3ae751540d"},
{file = "pymongo-4.11.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:57474d83511292e06f2da585fd3a6cb013d1cba6173df30b3658efb46f74d579"},
{file = "pymongo-4.11.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29fc4707d5f3918c6ee39250439ff41a70d96dc91ae5bfbc1a74bc204775cb82"},
{file = "pymongo-4.11.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0734940f9f347904796a98481fb4100859f121017e68b756e7426b66d8b2e176"},
{file = "pymongo-4.11.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63239e2466d8324564cb4725c12fdd2be0ddfa7d250b4d0e41a47cd269c4cc1c"},
{file = "pymongo-4.11.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:164865b78bd9e0ec6fdbe2ee58fc1a33666f32f8c455af3c9897c5c58c7b3d00"},
{file = "pymongo-4.11.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fbbc3ba041cf2e3f1f4eac293af15ce91cfbac68540f6b3733b834ad768aa319"},
{file = "pymongo-4.11.2-cp313-cp313-win32.whl", hash = "sha256:5da59332ec88ea662c4a9a99f84b322ed6b9d2999bfb947e186936ccae3941be"},
{file = "pymongo-4.11.2-cp313-cp313-win_amd64.whl", hash = "sha256:a4ba602980f43aa9998b0b8e77fd907cec9c7a845c385dc4e08a8b5716d2a85f"},
{file = "pymongo-4.11.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:77c7edf2dc7f0e46a66f440a0d291ae76533a2ead308d176681745b334d714a9"},
{file = "pymongo-4.11.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7f98a4493a221ee5330dad1721181731f122b7492caac7f56cf7d0a695c88ee2"},
{file = "pymongo-4.11.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f28d42f9f6d8a5ae05a62401a9cb7c44c5d448dc58299a0ce657084d070ea5f6"},
{file = "pymongo-4.11.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5a1cfff63667179d4f165124af5843cfd865bc1e774a2bd76fc56592c5dfe5fa"},
{file = "pymongo-4.11.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c012d44b841320148095b59e246cc0c8891f3ca125dcfa3cc9d89dc1573948b"},
{file = "pymongo-4.11.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3410b5ee877430a99ed29b0e2bad8827015d313bbef19dbdba4f470049258d1"},
{file = "pymongo-4.11.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:36f9a3276dfb28b526eb5ca9511b627788cea6c4c8783a0dc609be1999b3506e"},
{file = "pymongo-4.11.2-cp313-cp313t-win32.whl", hash = "sha256:e04a102ccb4c9f5a6b06108aa5fc26bfe77c18747bf5b0fbd5f4a3a4298ddb53"},
{file = "pymongo-4.11.2-cp313-cp313t-win_amd64.whl", hash = "sha256:54e24645ceeddaa3224909f073e2695ff3e5c393a82c1e16cd46236d2681651f"},
{file = "pymongo-4.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8402f5d09540f4a0542624245009f3aec8a9c7d2b7c1a09d6d399a64f6000d5e"},
{file = "pymongo-4.11.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6e26ffb4c05b9abdd9d063020c39dfeef6d6fc79945a606ecd35add528e86bbe"},
{file = "pymongo-4.11.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9486db58c8d8048b59baac821885d91316a7219a97da13122142fdad1de916c0"},
{file = "pymongo-4.11.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:830eeeb7536b901c40aa20c913d431c1d9d10711ee01692d6fb9e4aa891e8444"},
{file = "pymongo-4.11.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fea45642c3289304437dd0f459aee47b9dff994f8fff990dd3fd723c0f22caf1"},
{file = "pymongo-4.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f01c5d7634db67b4e386735edcb7419041ddc3cdaa95dbdb0bbe19fd8f08dda"},
{file = "pymongo-4.11.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db32510aba8968b62531135ff86c689075e3c6d60636636287ff060469226d07"},
{file = "pymongo-4.11.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a3572eb86d55ddbb20134f6c5c2af5aeb05120188ca907596561ffeaa4c2644"},
{file = "pymongo-4.11.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:80b5dc9a8d99d3891cff2664ad21e11bd4d9448a2dd00509bb9c057be31d0a6a"},
{file = "pymongo-4.11.2-cp39-cp39-win32.whl", hash = "sha256:3481ece566991a796a63bd5ffc3822cc974554485e5790653369e1fe96998b41"},
{file = "pymongo-4.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:84643c86a41bc254466be3be0d85e7bc3f4c9ceb4eca44ee7ac751b12fec4785"},
{file = "pymongo-4.11.2.tar.gz", hash = "sha256:d0ee3e0275f67bddcd83b2263818b7c4ae7af1ecafebe7eb7fd16389457ec210"},
{file = "pymongo-4.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1897c64a11e19aae4e85126441f319c3bf3fb7b60d122f51528cab2b95caaad3"},
{file = "pymongo-4.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0ba42b4f2046595f64c492ef73c92ac78c502db59024c9be0113d0a33ed60c15"},
{file = "pymongo-4.12.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:777800dc731ea7713635a44dcfb93d88eb2be4b31883feb3238afce5d32ef6d5"},
{file = "pymongo-4.12.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:670bb6c9163f2623d8e3c42ff029dc89d2e8bf41feeeea4c11a8a21f9a9b0df7"},
{file = "pymongo-4.12.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c9d447042433b3574df8d7d1b3bb9b1f1277d019534b29a39fd92670ab72d4e"},
{file = "pymongo-4.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0c8dbb6a10753cbbbcb3e8ab723f87cb520de855e667a32dd2889e73323e82f"},
{file = "pymongo-4.12.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0bd0cc14726baa07081abe8ecda309a1049992b84b37d3c50c5fbd7f935b8925"},
{file = "pymongo-4.12.1-cp310-cp310-win32.whl", hash = "sha256:e75c42dedc5f59a985976f8bc2e2f0b90c44ce40fa9a2e99b147ec7e64c735a2"},
{file = "pymongo-4.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:13953f8bbdbfee00530ac9f5c09a2474b81cd76648925012b5cfd2727293bd17"},
{file = "pymongo-4.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:72b45f7e72b2db4cd7abd40c38c57ed4105d7be0d4dce85a6b77a730e8a613f7"},
{file = "pymongo-4.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0f3104bd97642f508f70a83af256b9d88e9a7319e8048c27f1c8ca6572ad7b7f"},
{file = "pymongo-4.12.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:730a19d96ef902ee8d8f9e84738142d355096becb677ec82489dc9ad8e54d8e9"},
{file = "pymongo-4.12.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:40dd2b771387e3ac297399b7b4d9a4bfffbaabba6f17c79996e8462cde3e7c30"},
{file = "pymongo-4.12.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5e5968da22f5534fc678dad58d3e9f7305bf53abc94968c800335b1f511ab8b"},
{file = "pymongo-4.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc5fad32274a1de9dfe13d06da169cf2a405a98f049595aafda13af02921853e"},
{file = "pymongo-4.12.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:808168f5f4398c0057d15f21b1453de323157447915179c7afedf4334d2a1815"},
{file = "pymongo-4.12.1-cp311-cp311-win32.whl", hash = "sha256:ee69dba3e023e0fa1b547b4f7a41182618f2e612df09ff954bba32de0111a596"},
{file = "pymongo-4.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:40e2812e5b546f7ceef4abf82c31d4790d9878f2a0d43a67a2645de3eb06bdca"},
{file = "pymongo-4.12.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a7b771aa2f0854ddf7861e8ce2365f29df9159393543d047e43d8475bc4b8813"},
{file = "pymongo-4.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:34fd8681b6fa6e1025dd1000004f6b81cbf1961f145b8c58bd15e3957976068d"},
{file = "pymongo-4.12.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:981e19b8f1040247dee5f7879e45f640f7e21a4d87eabb19283ce5a2927dd2e7"},
{file = "pymongo-4.12.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9a487dc1fe92736987a156325d3d9c66cbde6eac658b2875f5f222b6d82edca"},
{file = "pymongo-4.12.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1525051c13984365c4a9b88ee2d63009fae277921bc89a0d323b52c51f91cbac"},
{file = "pymongo-4.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ad689e0e4f364809084f9e5888b2dcd6f0431b682a1c68f3fdf241e20e14475"},
{file = "pymongo-4.12.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f9b18abca210c2917041ab2a380c12f6ddd2810844f1d64afb39caf8a15425e"},
{file = "pymongo-4.12.1-cp312-cp312-win32.whl", hash = "sha256:d9d90fec041c6d695a639c26ca83577aa74383f5e3744fd7931537b208d5a1b5"},
{file = "pymongo-4.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:d004b13e4f03d73a3ad38505ba84b61a2c8ba0a304f02fe1b27bfc986c244192"},
{file = "pymongo-4.12.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:90de2b060d69c22658ada162a5380a0f88cb8c0149023241b9e379732bd36152"},
{file = "pymongo-4.12.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:edf4e05331ac875d3b27b4654b74d81e44607af4aa7d6bcd4a31801ca164e6fd"},
{file = "pymongo-4.12.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa7a817c9afb7b8775d98c469ddb3fe9c17daf53225394c1a74893cf45d3ade9"},
{file = "pymongo-4.12.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f9d142ca531694e9324b3c9ba86c0e905c5f857599c4018a386c4dc02ca490fa"},
{file = "pymongo-4.12.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5d4c0461f5cd84d9fe87d5a84b1bc16371c4dd64d56dcfe5e69b15c0545a5ac"},
{file = "pymongo-4.12.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43afd2f39182731ac9fb81bbc9439d539e4bd2eda72cdee829d2fa906a1c4d37"},
{file = "pymongo-4.12.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:827ac668c003da7b175b8e5f521850e2c182b4638a3dec96d97f0866d5508a1e"},
{file = "pymongo-4.12.1-cp313-cp313-win32.whl", hash = "sha256:7c2269b37f034124a245eaeb34ce031cee64610437bd597d4a883304babda3cd"},
{file = "pymongo-4.12.1-cp313-cp313-win_amd64.whl", hash = "sha256:3b28ecd1305b89089be14f137ffbdf98a3b9f5c8dbbb2be4dec084f2813fbd5f"},
{file = "pymongo-4.12.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f27b22a8215caff68bdf46b5b61ccd843a68334f2aa4658e8d5ecb5d3fbebb3b"},
{file = "pymongo-4.12.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e9d23a3c290cf7409515466a7f11069b70e38ea2b786bbd7437bdc766c9e176"},
{file = "pymongo-4.12.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efeb430f7ca8649a6544a50caefead343d1fd096d04b6b6a002c6ce81148a85c"},
{file = "pymongo-4.12.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a34e4a08bbcff56fdee86846afbc9ce751de95706ca189463e01bf5de3dd9927"},
{file = "pymongo-4.12.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b063344e0282537f05dbb11147591cbf58fc09211e24fc374749e343f880910a"},
{file = "pymongo-4.12.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3f7941e01b3e5d4bfb3b4711425e809df8c471b92d1da8d6fab92c7e334a4cb"},
{file = "pymongo-4.12.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b41235014031739f32be37ff13992f51091dae9a5189d3bcc22a5bf81fd90dae"},
{file = "pymongo-4.12.1-cp313-cp313t-win32.whl", hash = "sha256:9a1f07fe83a8a34651257179bd38d0f87bd9d90577fcca23364145c5e8ba1bc0"},
{file = "pymongo-4.12.1-cp313-cp313t-win_amd64.whl", hash = "sha256:46d86cf91ee9609d0713242a1d99fa9e9c60b4315e1a067b9a9e769bedae629d"},
{file = "pymongo-4.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0517c363f31f770cfa450df7d52a73340168bde71fac423b2b3eea0336468f3e"},
{file = "pymongo-4.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:07c6e9ade249fa811fa344467889f61221eb533b8465de7e1c467cca03b38a1e"},
{file = "pymongo-4.12.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e95211e335a2a762fd9dfb084579e6ebaec59cd2c6848d7a898af3342ef63f06"},
{file = "pymongo-4.12.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d4285d7ffedc7adc0531949e66d5f884801c522e7a30cdfcf80e2727b9dbee8c"},
{file = "pymongo-4.12.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71edcd51265e69d73d10f032164983701d3efa768c946a2736ec4d40793bf63e"},
{file = "pymongo-4.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3e90b2114e876c0a2864f729f32b025114920c6f00898a6d5ef41dba98d8690"},
{file = "pymongo-4.12.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5db1a20d0223af2bbbbfd5f8b7f1ff0f08628c245096bad12ddeee86db226925"},
{file = "pymongo-4.12.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:457eed26aa307c8d92edaf9be2ba9551b54af72bc7cd555706644374f155331c"},
{file = "pymongo-4.12.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27806c4310203a19af868f4aedd09615ffa613d4e13570954df10193b29f7fd3"},
{file = "pymongo-4.12.1-cp39-cp39-win32.whl", hash = "sha256:3dc3c26f52214119b86decdd8ef4595610cfbff67401f47be14eb433afb1d838"},
{file = "pymongo-4.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:7af466b5dc2c6dcdce78677b4d60886c48c70810c3ebe355f210a0f9ededb156"},
{file = "pymongo-4.12.1.tar.gz", hash = "sha256:8921bac7f98cccb593d76c4d8eaa1447e7d537ba9a2a202973e92372a05bd1eb"},
]
[package.dependencies]
@ -1706,7 +1706,7 @@ dnspython = ">=1.16.0,<3.0.0"
[package.extras]
aws = ["pymongo-auth-aws (>=1.1.0,<2.0.0)"]
docs = ["furo (==2024.8.6)", "readthedocs-sphinx-search (>=0.3,<1.0)", "sphinx (>=5.3,<9)", "sphinx-autobuild (>=2020.9.1)", "sphinx-rtd-theme (>=2,<4)", "sphinxcontrib-shellcheck (>=1,<2)"]
encryption = ["certifi ; os_name == \"nt\" or sys_platform == \"darwin\"", "pymongo-auth-aws (>=1.1.0,<2.0.0)", "pymongocrypt (>=1.12.0,<2.0.0)"]
encryption = ["certifi ; os_name == \"nt\" or sys_platform == \"darwin\"", "pymongo-auth-aws (>=1.1.0,<2.0.0)", "pymongocrypt (>=1.13.0,<2.0.0)"]
gssapi = ["pykerberos ; os_name != \"nt\"", "winkerberos (>=0.5.0) ; os_name == \"nt\""]
ocsp = ["certifi ; os_name == \"nt\" or sys_platform == \"darwin\"", "cryptography (>=2.5)", "pyopenssl (>=17.2.0)", "requests (<3.0.0)", "service-identity (>=18.1.0)"]
snappy = ["python-snappy"]
@ -1748,18 +1748,19 @@ reference = "pypi-public"
[[package]]
name = "pytest-asyncio"
version = "0.25.3"
version = "0.26.0"
description = "Pytest support for asyncio"
optional = false
python-versions = ">=3.9"
groups = ["dev"]
files = [
{file = "pytest_asyncio-0.25.3-py3-none-any.whl", hash = "sha256:9e89518e0f9bd08928f97a3482fdc4e244df17529460bc038291ccaf8f85c7c3"},
{file = "pytest_asyncio-0.25.3.tar.gz", hash = "sha256:fc1da2cf9f125ada7e710b4ddad05518d4cee187ae9412e9ac9271003497f07a"},
{file = "pytest_asyncio-0.26.0-py3-none-any.whl", hash = "sha256:7b51ed894f4fbea1340262bdae5135797ebbe21d8638978e35d31c6d19f72fb0"},
{file = "pytest_asyncio-0.26.0.tar.gz", hash = "sha256:c4df2a697648241ff39e7f0e4a73050b03f123f760673956cf0d72a4990e312f"},
]
[package.dependencies]
pytest = ">=8.2,<9"
typing-extensions = {version = ">=4.12", markers = "python_version < \"3.10\""}
[package.extras]
docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1)"]
@ -1772,14 +1773,14 @@ reference = "pypi-public"
[[package]]
name = "pytest-cov"
version = "6.0.0"
version = "6.1.1"
description = "Pytest plugin for measuring coverage."
optional = false
python-versions = ">=3.9"
groups = ["dev"]
files = [
{file = "pytest-cov-6.0.0.tar.gz", hash = "sha256:fde0b595ca248bb8e2d76f020b465f3b107c9632e6a1d1705f17834c89dcadc0"},
{file = "pytest_cov-6.0.0-py3-none-any.whl", hash = "sha256:eee6f1b9e61008bd34975a4d5bab25801eb31898b032dd55addc93e96fcaaa35"},
{file = "pytest_cov-6.1.1-py3-none-any.whl", hash = "sha256:bddf29ed2d0ab6f4df17b4c55b0a657287db8684af9c42ea546b21b1041b3dde"},
{file = "pytest_cov-6.1.1.tar.gz", hash = "sha256:46935f7aaefba760e716c2ebfbe1c216240b9592966e7da99ea8292d4d3e2a0a"},
]
[package.dependencies]
@ -2212,30 +2213,30 @@ reference = "pypi-public"
[[package]]
name = "ruff"
version = "0.9.10"
version = "0.11.10"
description = "An extremely fast Python linter and code formatter, written in Rust."
optional = false
python-versions = ">=3.7"
groups = ["dev"]
files = [
{file = "ruff-0.9.10-py3-none-linux_armv6l.whl", hash = "sha256:eb4d25532cfd9fe461acc83498361ec2e2252795b4f40b17e80692814329e42d"},
{file = "ruff-0.9.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:188a6638dab1aa9bb6228a7302387b2c9954e455fb25d6b4470cb0641d16759d"},
{file = "ruff-0.9.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5284dcac6b9dbc2fcb71fdfc26a217b2ca4ede6ccd57476f52a587451ebe450d"},
{file = "ruff-0.9.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47678f39fa2a3da62724851107f438c8229a3470f533894b5568a39b40029c0c"},
{file = "ruff-0.9.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:99713a6e2766b7a17147b309e8c915b32b07a25c9efd12ada79f217c9c778b3e"},
{file = "ruff-0.9.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:524ee184d92f7c7304aa568e2db20f50c32d1d0caa235d8ddf10497566ea1a12"},
{file = "ruff-0.9.10-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:df92aeac30af821f9acf819fc01b4afc3dfb829d2782884f8739fb52a8119a16"},
{file = "ruff-0.9.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de42e4edc296f520bb84954eb992a07a0ec5a02fecb834498415908469854a52"},
{file = "ruff-0.9.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d257f95b65806104b6b1ffca0ea53f4ef98454036df65b1eda3693534813ecd1"},
{file = "ruff-0.9.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b60dec7201c0b10d6d11be00e8f2dbb6f40ef1828ee75ed739923799513db24c"},
{file = "ruff-0.9.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:d838b60007da7a39c046fcdd317293d10b845001f38bcb55ba766c3875b01e43"},
{file = "ruff-0.9.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:ccaf903108b899beb8e09a63ffae5869057ab649c1e9231c05ae354ebc62066c"},
{file = "ruff-0.9.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f9567d135265d46e59d62dc60c0bfad10e9a6822e231f5b24032dba5a55be6b5"},
{file = "ruff-0.9.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5f202f0d93738c28a89f8ed9eaba01b7be339e5d8d642c994347eaa81c6d75b8"},
{file = "ruff-0.9.10-py3-none-win32.whl", hash = "sha256:bfb834e87c916521ce46b1788fbb8484966e5113c02df216680102e9eb960029"},
{file = "ruff-0.9.10-py3-none-win_amd64.whl", hash = "sha256:f2160eeef3031bf4b17df74e307d4c5fb689a6f3a26a2de3f7ef4044e3c484f1"},
{file = "ruff-0.9.10-py3-none-win_arm64.whl", hash = "sha256:5fd804c0327a5e5ea26615550e706942f348b197d5475ff34c19733aee4b2e69"},
{file = "ruff-0.9.10.tar.gz", hash = "sha256:9bacb735d7bada9cfb0f2c227d3658fc443d90a727b47f206fb33f52f3c0eac7"},
{file = "ruff-0.11.10-py3-none-linux_armv6l.whl", hash = "sha256:859a7bfa7bc8888abbea31ef8a2b411714e6a80f0d173c2a82f9041ed6b50f58"},
{file = "ruff-0.11.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:968220a57e09ea5e4fd48ed1c646419961a0570727c7e069842edd018ee8afed"},
{file = "ruff-0.11.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:1067245bad978e7aa7b22f67113ecc6eb241dca0d9b696144256c3a879663bca"},
{file = "ruff-0.11.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4854fd09c7aed5b1590e996a81aeff0c9ff51378b084eb5a0b9cd9518e6cff2"},
{file = "ruff-0.11.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8b4564e9f99168c0f9195a0fd5fa5928004b33b377137f978055e40008a082c5"},
{file = "ruff-0.11.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b6a9cc5b62c03cc1fea0044ed8576379dbaf751d5503d718c973d5418483641"},
{file = "ruff-0.11.10-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:607ecbb6f03e44c9e0a93aedacb17b4eb4f3563d00e8b474298a201622677947"},
{file = "ruff-0.11.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7b3a522fa389402cd2137df9ddefe848f727250535c70dafa840badffb56b7a4"},
{file = "ruff-0.11.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2f071b0deed7e9245d5820dac235cbdd4ef99d7b12ff04c330a241ad3534319f"},
{file = "ruff-0.11.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a60e3a0a617eafba1f2e4186d827759d65348fa53708ca547e384db28406a0b"},
{file = "ruff-0.11.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:da8ec977eaa4b7bf75470fb575bea2cb41a0e07c7ea9d5a0a97d13dbca697bf2"},
{file = "ruff-0.11.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:ddf8967e08227d1bd95cc0851ef80d2ad9c7c0c5aab1eba31db49cf0a7b99523"},
{file = "ruff-0.11.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5a94acf798a82db188f6f36575d80609072b032105d114b0f98661e1679c9125"},
{file = "ruff-0.11.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:3afead355f1d16d95630df28d4ba17fb2cb9c8dfac8d21ced14984121f639bad"},
{file = "ruff-0.11.10-py3-none-win32.whl", hash = "sha256:dc061a98d32a97211af7e7f3fa1d4ca2fcf919fb96c28f39551f35fc55bdbc19"},
{file = "ruff-0.11.10-py3-none-win_amd64.whl", hash = "sha256:5cc725fbb4d25b0f185cb42df07ab6b76c4489b4bfb740a175f3a59c70e8a224"},
{file = "ruff-0.11.10-py3-none-win_arm64.whl", hash = "sha256:ef69637b35fb8b210743926778d0e45e1bffa850a7c61e428c6b971549b5f5d1"},
{file = "ruff-0.11.10.tar.gz", hash = "sha256:d522fb204b4959909ecac47da02830daec102eeb100fb50ea9554818d47a5fa6"},
]
[package.source]
@ -2613,18 +2614,22 @@ reference = "pypi-public"
[[package]]
name = "sphinxext-opengraph"
version = "0.9.1"
version = "0.10.0"
description = "Sphinx Extension to enable OGP support"
optional = false
python-versions = ">=3.8"
python-versions = ">=3.9"
groups = ["dev"]
files = [
{file = "sphinxext-opengraph-0.9.1.tar.gz", hash = "sha256:dd2868a1e7c9497977fbbf44cc0844a42af39ca65fe1bb0272518af225d06fc5"},
{file = "sphinxext_opengraph-0.9.1-py3-none-any.whl", hash = "sha256:b3b230cc6a5b5189139df937f0d9c7b23c7c204493b22646273687969dcb760e"},
{file = "sphinxext_opengraph-0.10.0-py3-none-any.whl", hash = "sha256:8afd33f96a02d9506d9dc8f284840888ca8948482ac93015a68d88493df43712"},
{file = "sphinxext_opengraph-0.10.0.tar.gz", hash = "sha256:5781149c1dfc306c3701661acdd02c512c2e6f21d2253487bf0b39639017fc24"},
]
[package.dependencies]
sphinx = ">=4.0"
Sphinx = ">=6.0"
[package.extras]
rtd = ["furo (>=2024)", "sphinx (>=8.1.0,<8.2.0)", "sphinx-design"]
social-cards = ["matplotlib (>=3)"]
[package.source]
type = "legacy"
@ -2765,14 +2770,14 @@ reference = "pypi-public"
[[package]]
name = "types-python-dateutil"
version = "2.9.0.20241206"
version = "2.9.0.20250516"
description = "Typing stubs for python-dateutil"
optional = false
python-versions = ">=3.8"
python-versions = ">=3.9"
groups = ["dev"]
files = [
{file = "types_python_dateutil-2.9.0.20241206-py3-none-any.whl", hash = "sha256:e248a4bc70a486d3e3ec84d0dc30eec3a5f979d6e7ee4123ae043eedbb987f53"},
{file = "types_python_dateutil-2.9.0.20241206.tar.gz", hash = "sha256:18f493414c26ffba692a72369fea7a154c502646301ebfe3d56a04b3767284cb"},
{file = "types_python_dateutil-2.9.0.20250516-py3-none-any.whl", hash = "sha256:2b2b3f57f9c6a61fba26a9c0ffb9ea5681c9b83e69cd897c6b5f668d9c0cab93"},
{file = "types_python_dateutil-2.9.0.20250516.tar.gz", hash = "sha256:13e80d6c9c47df23ad773d54b2826bd52dbbb41be87c3f339381c1700ad21ee5"},
]
[package.source]
@ -2835,6 +2840,26 @@ type = "legacy"
url = "https://pypi.org/simple"
reference = "pypi-public"
[[package]]
name = "typing-inspection"
version = "0.4.0"
description = "Runtime typing introspection tools"
optional = false
python-versions = ">=3.9"
groups = ["main"]
files = [
{file = "typing_inspection-0.4.0-py3-none-any.whl", hash = "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f"},
{file = "typing_inspection-0.4.0.tar.gz", hash = "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122"},
]
[package.dependencies]
typing-extensions = ">=4.12.0"
[package.source]
type = "legacy"
url = "https://pypi.org/simple"
reference = "pypi-public"
[[package]]
name = "urllib3"
version = "2.2.3"
@ -2971,4 +2996,4 @@ reference = "pypi-public"
[metadata]
lock-version = "2.1"
python-versions = ">=3.9,<4.0"
content-hash = "8fe1757709d021659da230b1b6d4aba1fd79576ec7d44de1280d696d6c56862e"
content-hash = "679e9384e1bf5fd33be0513fc15546c27a1e43510bef22bc3d0c9535e73635f1"

View File

@ -1,6 +1,6 @@
[tool.poetry]
name = "kittycad"
version = "0.7.6"
version = "0.7.8"
description = "A client library for accessing KittyCAD"
authors = []
@ -35,15 +35,15 @@ openapi-spec-validator = "^0.7.1"
prance = "^23.6.21"
pyenchant = "^3.2.2"
pytest = "^8.3.5"
pytest-asyncio = "^0.25.3"
pytest-cov = "^6.0.0"
ruff = "^0.9.10"
pytest-asyncio = "^0.26.0"
pytest-cov = "^6.1.1"
ruff = "^0.11.10"
Sphinx = "^7.1.2"
sphinx-autoapi = "^3.6.0"
sphinx-autodoc-typehints = "^2.3.0"
sphinxcontrib-spelling = "^8.0.0"
sphinx-copybutton = "^0.5.2"
sphinxext-opengraph = "^0.9.1"
sphinxext-opengraph = "^0.10.0"
sphinx-rtd-theme = "^3.0.2"
toml = "^0.10.2"
types-python-dateutil = "^2.9.0"

5882
spec.json

File diff suppressed because it is too large Load Diff