From 97ff007b7b0e80561953d886865acd83d4836c08 Mon Sep 17 00:00:00 2001 From: Marek Pastorek Date: Thu, 28 Nov 2024 15:01:25 +0100 Subject: [PATCH 1/5] Added blueprints-provider Signed-off-by: Marek --- blueprints-provider/python/CHANGELOG.md | 2 + blueprints-provider/python/README.md | 0 blueprints-provider/python/RELEASE.md | 0 .../python/frinx_api/__init__.py | 0 .../frinx_api/blueprints_provider/__init__.py | 257 ++++++++++ blueprints-provider/python/poetry.lock | 477 ++++++++++++++++++ blueprints-provider/python/pyproject.toml | 82 +++ 7 files changed, 818 insertions(+) create mode 100644 blueprints-provider/python/CHANGELOG.md create mode 100644 blueprints-provider/python/README.md create mode 100644 blueprints-provider/python/RELEASE.md create mode 100644 blueprints-provider/python/frinx_api/__init__.py create mode 100644 blueprints-provider/python/frinx_api/blueprints_provider/__init__.py create mode 100644 blueprints-provider/python/poetry.lock create mode 100644 blueprints-provider/python/pyproject.toml diff --git a/blueprints-provider/python/CHANGELOG.md b/blueprints-provider/python/CHANGELOG.md new file mode 100644 index 0000000..76a1a3b --- /dev/null +++ b/blueprints-provider/python/CHANGELOG.md @@ -0,0 +1,2 @@ +# 0.1.0 +- Init \ No newline at end of file diff --git a/blueprints-provider/python/README.md b/blueprints-provider/python/README.md new file mode 100644 index 0000000..e69de29 diff --git a/blueprints-provider/python/RELEASE.md b/blueprints-provider/python/RELEASE.md new file mode 100644 index 0000000..e69de29 diff --git a/blueprints-provider/python/frinx_api/__init__.py b/blueprints-provider/python/frinx_api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/blueprints-provider/python/frinx_api/blueprints_provider/__init__.py b/blueprints-provider/python/frinx_api/blueprints_provider/__init__.py new file mode 100644 index 0000000..432d3ab --- /dev/null +++ b/blueprints-provider/python/frinx_api/blueprints_provider/__init__.py @@ -0,0 +1,257 @@ +# generated by datamodel-codegen: +# filename: schema.graphql +# timestamp: 2024-11-28T13:43:41+00:00 + +from __future__ import annotations + +from enum import Enum +from typing import List, Literal, Optional, TypeAlias, Union + +from pydantic import BaseModel, Field + +Boolean: TypeAlias = bool +""" +The `Boolean` scalar type represents `true` or `false`. +""" + + +DateTime: TypeAlias = str +""" +A type representing a formatted java.time.LocalDateTime (UTC). +""" + + +ID: TypeAlias = str +""" +The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `"4"`) or integer (such as `4`) input value will be accepted as an ID. +""" + + +Int: TypeAlias = int +""" +The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1. +""" + + +JSON: TypeAlias = str +""" +A type representing a JSON type (JSON). +""" + + +String: TypeAlias = str +""" +The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text. +""" + + +class BlueprintType(Enum): + """ + Specifies the type of blueprint. + """ + + INSTALL = 'INSTALL' + PERFORMANCE = 'PERFORMANCE' + STREAM = 'STREAM' + TOPOLOGY_LLDP = 'TOPOLOGY_LLDP' + TOPOLOGY_MPLS = 'TOPOLOGY_MPLS' + TOPOLOGY_PTP = 'TOPOLOGY_PTP' + TOPOLOGY_SYNCE = 'TOPOLOGY_SYNCE' + + +class ConnectionType(Enum): + """ + Management protocol used for creation of connection to the device. + """ + + CLI = 'CLI' + GNMI = 'GNMI' + NETCONF = 'NETCONF' + SNMP = 'SNMP' + + +class Connection(BaseModel): + """ + Represents a connection in a graph. + """ + + edges: List[Edge] = Field( + ..., description='List of edges within the blueprint connection.' + ) + pageInfo: PageInfo = Field( + ..., description='Pagination information for the blueprint connection.' + ) + typename__: Optional[Literal['Connection']] = Field( + 'Connection', alias='__typename' + ) + + +class Edge(BaseModel): + """ + Represents an edge in the graph. + """ + + cursor: Optional[String] = Field(None, description='Cursor for pagination.') + node: Node = Field(..., description='Node associated with the edge.') + typename__: Optional[Literal['Edge']] = Field('Edge', alias='__typename') + + +class BlueprintConnection(Connection): + """ + Represents a connection in the blueprint graph. + """ + + edges: List[BlueprintEdge] = Field( + ..., description='List of edges within the blueprint connection.' + ) + pageInfo: PageInfo = Field( + ..., description='Pagination information for the blueprint connection.' + ) + typename__: Optional[Literal['BlueprintConnection']] = Field( + 'BlueprintConnection', alias='__typename' + ) + + +class BlueprintEdge(Edge): + """ + Represents an edge in the blueprint graph. + """ + + cursor: Optional[String] = Field(None, description='Cursor for pagination.') + node: BlueprintNode = Field( + ..., description='Node associated with the blueprint edge.' + ) + typename__: Optional[Literal['BlueprintEdge']] = Field( + 'BlueprintEdge', alias='__typename' + ) + + +class BlueprintMetadata(BaseModel): + """ + Metadata associated with a blueprint. + """ + + createdAt: DateTime = Field( + ..., description='Timestamp of the blueprint creation (UTC).' + ) + updatedAt: DateTime = Field( + ..., + description='Timestamp of the last blueprint update (UTC).\nIf the blueprint was not updated, the value is equal to the creation timestamp.\nRemoving the blueprint is considered as an update.', + ) + typename__: Optional[Literal['BlueprintMetadata']] = Field( + 'BlueprintMetadata', alias='__typename' + ) + + +class BlueprintNode(BaseModel): + """ + Information about the blueprint - identifier, patterns used for matching the device, and the template content. + """ + + blueprintType: BlueprintType = Field( + ..., description='Specifies the type of blueprint.' + ) + connectionType: ConnectionType = Field( + ..., + description='Management protocol used for creation of connection to the device.', + ) + modelPattern: Optional[String] = Field( + None, + description="Regular expression pattern for matching the model of the device (for example, 'vsr .+'", + ) + name: String = Field( + ..., description='Unique human-readable name of the blueprint.' + ) + template: String = Field( + ..., + description='Settings associated with the blueprint in JSON format (e.g. installation parameters or stream parameters).', + ) + vendorPattern: Optional[String] = Field( + None, + description="Regular expression pattern for matching the vendor of the device (for example, '.*wrt').", + ) + versionPattern: Optional[String] = Field( + None, + description="Regular expression pattern for matching the version of the device (for example, 'v[0-9]+').", + ) + typename__: Optional[Literal['BlueprintNode']] = Field( + 'BlueprintNode', alias='__typename' + ) + + +class BlueprintOutput(BaseModel): + """ + Information about the persisted blueprint - generated identifier, blueprint content, and metadata. + """ + + id: ID = Field( + ..., + description="Unique identifier of the blueprint in the format 'blueprint/[id]', where [id] is represented by automatically generated database identifier.", + ) + metadata: BlueprintMetadata = Field( + ..., + description='Metadata associated with the blueprint - creation and update timestamps.', + ) + node: BlueprintNode = Field( + ..., + description='Blueprint content - name, connection type, template, and patterns.', + ) + typename__: Optional[Literal['BlueprintOutput']] = Field( + 'BlueprintOutput', alias='__typename' + ) + + +class PageInfo(BaseModel): + """ + Contains pagination information for a connection. Indicates if there are more pages and the position of the last fetched item. + """ + + endCursor: Optional[String] = Field( + None, + description='The cursor for the last item in the current page of results. Use this cursor to fetch the next set of items.', + ) + hasNextPage: Boolean = Field( + ..., + description='Indicates whether there is a next page of items available after the current one.', + ) + typename__: Optional[Literal['PageInfo']] = Field('PageInfo', alias='__typename') + + +class BlueprintNodeInput(BaseModel): + """ + Information about the blueprint - identifier, patterns used for matching the device, and the template content. + """ + + blueprintType: BlueprintType = Field( + ..., description='Specifies the type of blueprint.' + ) + connectionType: ConnectionType = Field( + ..., + description='Management protocol used for creation of connection to the device.', + ) + modelPattern: Optional[String] = Field( + None, + description="Regular expression pattern for matching the model of the device (for example, 'vsr .+'", + ) + name: String = Field( + ..., description='Unique human-readable name of the blueprint.' + ) + template: String = Field( + ..., + description='Settings associated with the blueprint in JSON format (e.g. installation parameters or stream parameters).', + ) + vendorPattern: Optional[String] = Field( + None, + description="Regular expression pattern for matching the vendor of the device (for example, '.*wrt').", + ) + versionPattern: Optional[String] = Field( + None, + description="Regular expression pattern for matching the version of the device (for example, 'v[0-9]+').", + ) + typename__: Optional[Literal['BlueprintNodeInput']] = Field( + 'BlueprintNodeInput', alias='__typename' + ) + + +# Represents a node in a graph. +Node: TypeAlias = BlueprintNode diff --git a/blueprints-provider/python/poetry.lock b/blueprints-provider/python/poetry.lock new file mode 100644 index 0000000..6ba598f --- /dev/null +++ b/blueprints-provider/python/poetry.lock @@ -0,0 +1,477 @@ +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. + +[[package]] +name = "annotated-types" +version = "0.7.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +files = [ + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, +] + +[[package]] +name = "certifi" +version = "2024.8.30" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, + {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.0" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"}, + {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, + {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, +] + +[[package]] +name = "graphql-pydantic-converter" +version = "1.2.2" +description = "Convert pydantic schema to pydantic datamodel and build request from it" +optional = false +python-versions = "<4.0,>=3.10" +files = [ + {file = "graphql_pydantic_converter-1.2.2-py3-none-any.whl", hash = "sha256:6fe78e92bc2659b0f1849cbf044601a482652f0576c1e234bb7559c10ab7dc5f"}, + {file = "graphql_pydantic_converter-1.2.2.tar.gz", hash = "sha256:97f9e8c70a63c63054048969fcfc96f143d8f7cb8499c6f3abd06d2a616bdbd8"}, +] + +[package.dependencies] +pydantic = ">=2,<3" +requests = ">=2.31.0,<3.0.0" + +[[package]] +name = "idna" +version = "3.10" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.6" +files = [ + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, +] + +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + +[[package]] +name = "mypy" +version = "1.3.0" +description = "Optional static typing for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mypy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c1eb485cea53f4f5284e5baf92902cd0088b24984f4209e25981cc359d64448d"}, + {file = "mypy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4c99c3ecf223cf2952638da9cd82793d8f3c0c5fa8b6ae2b2d9ed1e1ff51ba85"}, + {file = "mypy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:550a8b3a19bb6589679a7c3c31f64312e7ff482a816c96e0cecec9ad3a7564dd"}, + {file = "mypy-1.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cbc07246253b9e3d7d74c9ff948cd0fd7a71afcc2b77c7f0a59c26e9395cb152"}, + {file = "mypy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:a22435632710a4fcf8acf86cbd0d69f68ac389a3892cb23fbad176d1cddaf228"}, + {file = "mypy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6e33bb8b2613614a33dff70565f4c803f889ebd2f859466e42b46e1df76018dd"}, + {file = "mypy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7d23370d2a6b7a71dc65d1266f9a34e4cde9e8e21511322415db4b26f46f6b8c"}, + {file = "mypy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:658fe7b674769a0770d4b26cb4d6f005e88a442fe82446f020be8e5f5efb2fae"}, + {file = "mypy-1.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6e42d29e324cdda61daaec2336c42512e59c7c375340bd202efa1fe0f7b8f8ca"}, + {file = "mypy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:d0b6c62206e04061e27009481cb0ec966f7d6172b5b936f3ead3d74f29fe3dcf"}, + {file = "mypy-1.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:76ec771e2342f1b558c36d49900dfe81d140361dd0d2df6cd71b3db1be155409"}, + {file = "mypy-1.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebc95f8386314272bbc817026f8ce8f4f0d2ef7ae44f947c4664efac9adec929"}, + {file = "mypy-1.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:faff86aa10c1aa4a10e1a301de160f3d8fc8703b88c7e98de46b531ff1276a9a"}, + {file = "mypy-1.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:8c5979d0deb27e0f4479bee18ea0f83732a893e81b78e62e2dda3e7e518c92ee"}, + {file = "mypy-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c5d2cc54175bab47011b09688b418db71403aefad07cbcd62d44010543fc143f"}, + {file = "mypy-1.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:87df44954c31d86df96c8bd6e80dfcd773473e877ac6176a8e29898bfb3501cb"}, + {file = "mypy-1.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:473117e310febe632ddf10e745a355714e771ffe534f06db40702775056614c4"}, + {file = "mypy-1.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:74bc9b6e0e79808bf8678d7678b2ae3736ea72d56eede3820bd3849823e7f305"}, + {file = "mypy-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:44797d031a41516fcf5cbfa652265bb994e53e51994c1bd649ffcd0c3a7eccbf"}, + {file = "mypy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ddae0f39ca146972ff6bb4399f3b2943884a774b8771ea0a8f50e971f5ea5ba8"}, + {file = "mypy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c4c42c60a8103ead4c1c060ac3cdd3ff01e18fddce6f1016e08939647a0e703"}, + {file = "mypy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e86c2c6852f62f8f2b24cb7a613ebe8e0c7dc1402c61d36a609174f63e0ff017"}, + {file = "mypy-1.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f9dca1e257d4cc129517779226753dbefb4f2266c4eaad610fc15c6a7e14283e"}, + {file = "mypy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:95d8d31a7713510685b05fbb18d6ac287a56c8f6554d88c19e73f724a445448a"}, + {file = "mypy-1.3.0-py3-none-any.whl", hash = "sha256:a8763e72d5d9574d45ce5881962bc8e9046bf7b375b0abf031f3e6811732a897"}, + {file = "mypy-1.3.0.tar.gz", hash = "sha256:e1f4d16e296f5135624b34e8fb741eb0eadedca90862405b1f1fde2040b9bd11"}, +] + +[package.dependencies] +mypy-extensions = ">=1.0.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = ">=3.10" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] +python2 = ["typed-ast (>=1.4.0,<2)"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "nodeenv" +version = "1.9.1" +description = "Node.js virtual environment builder" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, + {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, +] + +[[package]] +name = "pydantic" +version = "2.10.2" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic-2.10.2-py3-none-any.whl", hash = "sha256:cfb96e45951117c3024e6b67b25cdc33a3cb7b2fa62e239f7af1378358a1d99e"}, + {file = "pydantic-2.10.2.tar.gz", hash = "sha256:2bc2d7f17232e0841cbba4641e65ba1eb6fafb3a08de3a091ff3ce14a197c4fa"}, +] + +[package.dependencies] +annotated-types = ">=0.6.0" +pydantic-core = "2.27.1" +typing-extensions = ">=4.12.2" + +[package.extras] +email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata"] + +[[package]] +name = "pydantic-core" +version = "2.27.1" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic_core-2.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:71a5e35c75c021aaf400ac048dacc855f000bdfed91614b4a726f7432f1f3d6a"}, + {file = "pydantic_core-2.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:121ceb0e822f79163dd4699e4c54f5ad38b157084d97b34de8b232bcaad70278"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4603137322c18eaf2e06a4495f426aa8d8388940f3c457e7548145011bb68e05"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a33cd6ad9017bbeaa9ed78a2e0752c5e250eafb9534f308e7a5f7849b0b1bfb4"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15cc53a3179ba0fcefe1e3ae50beb2784dede4003ad2dfd24f81bba4b23a454f"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45d9c5eb9273aa50999ad6adc6be5e0ecea7e09dbd0d31bd0c65a55a2592ca08"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bf7b66ce12a2ac52d16f776b31d16d91033150266eb796967a7e4621707e4f6"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:655d7dd86f26cb15ce8a431036f66ce0318648f8853d709b4167786ec2fa4807"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:5556470f1a2157031e676f776c2bc20acd34c1990ca5f7e56f1ebf938b9ab57c"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206"}, + {file = "pydantic_core-2.27.1-cp310-none-win32.whl", hash = "sha256:f5a823165e6d04ccea61a9f0576f345f8ce40ed533013580e087bd4d7442b52c"}, + {file = "pydantic_core-2.27.1-cp310-none-win_amd64.whl", hash = "sha256:57866a76e0b3823e0b56692d1a0bf722bffb324839bb5b7226a7dbd6c9a40b17"}, + {file = "pydantic_core-2.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac3b20653bdbe160febbea8aa6c079d3df19310d50ac314911ed8cc4eb7f8cb8"}, + {file = "pydantic_core-2.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a5a8e19d7c707c4cadb8c18f5f60c843052ae83c20fa7d44f41594c644a1d330"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f7059ca8d64fea7f238994c97d91f75965216bcbe5f695bb44f354893f11d52"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bed0f8a0eeea9fb72937ba118f9db0cb7e90773462af7962d382445f3005e5a4"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3cb37038123447cf0f3ea4c74751f6a9d7afef0eb71aa07bf5f652b5e6a132c"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84286494f6c5d05243456e04223d5a9417d7f443c3b76065e75001beb26f88de"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acc07b2cfc5b835444b44a9956846b578d27beeacd4b52e45489e93276241025"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4fefee876e07a6e9aad7a8c8c9f85b0cdbe7df52b8a9552307b09050f7512c7e"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:258c57abf1188926c774a4c94dd29237e77eda19462e5bb901d88adcab6af919"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:35c14ac45fcfdf7167ca76cc80b2001205a8d5d16d80524e13508371fb8cdd9c"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d1b26e1dff225c31897696cab7d4f0a315d4c0d9e8666dbffdb28216f3b17fdc"}, + {file = "pydantic_core-2.27.1-cp311-none-win32.whl", hash = "sha256:2cdf7d86886bc6982354862204ae3b2f7f96f21a3eb0ba5ca0ac42c7b38598b9"}, + {file = "pydantic_core-2.27.1-cp311-none-win_amd64.whl", hash = "sha256:3af385b0cee8df3746c3f406f38bcbfdc9041b5c2d5ce3e5fc6637256e60bbc5"}, + {file = "pydantic_core-2.27.1-cp311-none-win_arm64.whl", hash = "sha256:81f2ec23ddc1b476ff96563f2e8d723830b06dceae348ce02914a37cb4e74b89"}, + {file = "pydantic_core-2.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9cbd94fc661d2bab2bc702cddd2d3370bbdcc4cd0f8f57488a81bcce90c7a54f"}, + {file = "pydantic_core-2.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5f8c4718cd44ec1580e180cb739713ecda2bdee1341084c1467802a417fe0f02"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15aae984e46de8d376df515f00450d1522077254ef6b7ce189b38ecee7c9677c"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ba5e3963344ff25fc8c40da90f44b0afca8cfd89d12964feb79ac1411a260ac"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:992cea5f4f3b29d6b4f7f1726ed8ee46c8331c6b4eed6db5b40134c6fe1768bb"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0325336f348dbee6550d129b1627cb8f5351a9dc91aad141ffb96d4937bd9529"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7597c07fbd11515f654d6ece3d0e4e5093edc30a436c63142d9a4b8e22f19c35"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3bbd5d8cc692616d5ef6fbbbd50dbec142c7e6ad9beb66b78a96e9c16729b089"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:dc61505e73298a84a2f317255fcc72b710b72980f3a1f670447a21efc88f8381"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:e1f735dc43da318cad19b4173dd1ffce1d84aafd6c9b782b3abc04a0d5a6f5bb"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f4e5658dbffe8843a0f12366a4c2d1c316dbe09bb4dfbdc9d2d9cd6031de8aae"}, + {file = "pydantic_core-2.27.1-cp312-none-win32.whl", hash = "sha256:672ebbe820bb37988c4d136eca2652ee114992d5d41c7e4858cdd90ea94ffe5c"}, + {file = "pydantic_core-2.27.1-cp312-none-win_amd64.whl", hash = "sha256:66ff044fd0bb1768688aecbe28b6190f6e799349221fb0de0e6f4048eca14c16"}, + {file = "pydantic_core-2.27.1-cp312-none-win_arm64.whl", hash = "sha256:9a3b0793b1bbfd4146304e23d90045f2a9b5fd5823aa682665fbdaf2a6c28f3e"}, + {file = "pydantic_core-2.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f216dbce0e60e4d03e0c4353c7023b202d95cbaeff12e5fd2e82ea0a66905073"}, + {file = "pydantic_core-2.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a2e02889071850bbfd36b56fd6bc98945e23670773bc7a76657e90e6b6603c08"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42b0e23f119b2b456d07ca91b307ae167cc3f6c846a7b169fca5326e32fdc6cf"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:764be71193f87d460a03f1f7385a82e226639732214b402f9aa61f0d025f0737"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c00666a3bd2f84920a4e94434f5974d7bbc57e461318d6bb34ce9cdbbc1f6b2"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ccaa88b24eebc0f849ce0a4d09e8a408ec5a94afff395eb69baf868f5183107"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65af9088ac534313e1963443d0ec360bb2b9cba6c2909478d22c2e363d98a51"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206b5cf6f0c513baffaeae7bd817717140770c74528f3e4c3e1cec7871ddd61a"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:062f60e512fc7fff8b8a9d680ff0ddaaef0193dba9fa83e679c0c5f5fbd018bc"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:a0697803ed7d4af5e4c1adf1670af078f8fcab7a86350e969f454daf598c4960"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:58ca98a950171f3151c603aeea9303ef6c235f692fe555e883591103da709b23"}, + {file = "pydantic_core-2.27.1-cp313-none-win32.whl", hash = "sha256:8065914ff79f7eab1599bd80406681f0ad08f8e47c880f17b416c9f8f7a26d05"}, + {file = "pydantic_core-2.27.1-cp313-none-win_amd64.whl", hash = "sha256:ba630d5e3db74c79300d9a5bdaaf6200172b107f263c98a0539eeecb857b2337"}, + {file = "pydantic_core-2.27.1-cp313-none-win_arm64.whl", hash = "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5"}, + {file = "pydantic_core-2.27.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:5897bec80a09b4084aee23f9b73a9477a46c3304ad1d2d07acca19723fb1de62"}, + {file = "pydantic_core-2.27.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d0165ab2914379bd56908c02294ed8405c252250668ebcb438a55494c69f44ab"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b9af86e1d8e4cfc82c2022bfaa6f459381a50b94a29e95dcdda8442d6d83864"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f6c8a66741c5f5447e047ab0ba7a1c61d1e95580d64bce852e3df1f895c4067"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a42d6a8156ff78981f8aa56eb6394114e0dedb217cf8b729f438f643608cbcd"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64c65f40b4cd8b0e049a8edde07e38b476da7e3aaebe63287c899d2cff253fa5"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdcf339322a3fae5cbd504edcefddd5a50d9ee00d968696846f089b4432cf78"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bf99c8404f008750c846cb4ac4667b798a9f7de673ff719d705d9b2d6de49c5f"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8f1edcea27918d748c7e5e4d917297b2a0ab80cad10f86631e488b7cddf76a36"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:159cac0a3d096f79ab6a44d77a961917219707e2a130739c64d4dd46281f5c2a"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:029d9757eb621cc6e1848fa0b0310310de7301057f623985698ed7ebb014391b"}, + {file = "pydantic_core-2.27.1-cp38-none-win32.whl", hash = "sha256:a28af0695a45f7060e6f9b7092558a928a28553366519f64083c63a44f70e618"}, + {file = "pydantic_core-2.27.1-cp38-none-win_amd64.whl", hash = "sha256:2d4567c850905d5eaaed2f7a404e61012a51caf288292e016360aa2b96ff38d4"}, + {file = "pydantic_core-2.27.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:e9386266798d64eeb19dd3677051f5705bf873e98e15897ddb7d76f477131967"}, + {file = "pydantic_core-2.27.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4228b5b646caa73f119b1ae756216b59cc6e2267201c27d3912b592c5e323b60"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b3dfe500de26c52abe0477dde16192ac39c98f05bf2d80e76102d394bd13854"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aee66be87825cdf72ac64cb03ad4c15ffef4143dbf5c113f64a5ff4f81477bf9"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b748c44bb9f53031c8cbc99a8a061bc181c1000c60a30f55393b6e9c45cc5bd"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ca038c7f6a0afd0b2448941b6ef9d5e1949e999f9e5517692eb6da58e9d44be"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e0bd57539da59a3e4671b90a502da9a28c72322a4f17866ba3ac63a82c4498e"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ac6c2c45c847bbf8f91930d88716a0fb924b51e0c6dad329b793d670ec5db792"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b94d4ba43739bbe8b0ce4262bcc3b7b9f31459ad120fb595627eaeb7f9b9ca01"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:00e6424f4b26fe82d44577b4c842d7df97c20be6439e8e685d0d715feceb9fb9"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:38de0a70160dd97540335b7ad3a74571b24f1dc3ed33f815f0880682e6880131"}, + {file = "pydantic_core-2.27.1-cp39-none-win32.whl", hash = "sha256:7ccebf51efc61634f6c2344da73e366c75e735960b5654b63d7e6f69a5885fa3"}, + {file = "pydantic_core-2.27.1-cp39-none-win_amd64.whl", hash = "sha256:a57847b090d7892f123726202b7daa20df6694cbd583b67a592e856bff603d6c"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3fa80ac2bd5856580e242dbc202db873c60a01b20309c8319b5c5986fbe53ce6"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d950caa237bb1954f1b8c9227b5065ba6875ac9771bb8ec790d956a699b78676"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e4216e64d203e39c62df627aa882f02a2438d18a5f21d7f721621f7a5d3611d"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02a3d637bd387c41d46b002f0e49c52642281edacd2740e5a42f7017feea3f2c"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:161c27ccce13b6b0c8689418da3885d3220ed2eae2ea5e9b2f7f3d48f1d52c27"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:19910754e4cc9c63bc1c7f6d73aa1cfee82f42007e407c0f413695c2f7ed777f"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:e173486019cc283dc9778315fa29a363579372fe67045e971e89b6365cc035ed"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:af52d26579b308921b73b956153066481f064875140ccd1dfd4e77db89dbb12f"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:981fb88516bd1ae8b0cbbd2034678a39dedc98752f264ac9bc5839d3923fa04c"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5fde892e6c697ce3e30c61b239330fc5d569a71fefd4eb6512fc6caec9dd9e2f"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:816f5aa087094099fff7edabb5e01cc370eb21aa1a1d44fe2d2aefdfb5599b31"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c10c309e18e443ddb108f0ef64e8729363adbfd92d6d57beec680f6261556f3"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98476c98b02c8e9b2eec76ac4156fd006628b1b2d0ef27e548ffa978393fd154"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3027001c28434e7ca5a6e1e527487051136aa81803ac812be51802150d880dd"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:7699b1df36a48169cdebda7ab5a2bac265204003f153b4bd17276153d997670a"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1c39b07d90be6b48968ddc8c19e7585052088fd7ec8d568bb31ff64c70ae3c97"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:46ccfe3032b3915586e469d4972973f893c0a2bb65669194a5bdea9bacc088c2"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:62ba45e21cf6571d7f716d903b5b7b6d2617e2d5d67c0923dc47b9d41369f840"}, + {file = "pydantic_core-2.27.1.tar.gz", hash = "sha256:62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "pyright" +version = "1.1.389" +description = "Command line wrapper for pyright" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyright-1.1.389-py3-none-any.whl", hash = "sha256:41e9620bba9254406dc1f621a88ceab5a88af4c826feb4f614d95691ed243a60"}, + {file = "pyright-1.1.389.tar.gz", hash = "sha256:716bf8cc174ab8b4dcf6828c3298cac05c5ed775dda9910106a5dcfe4c7fe220"}, +] + +[package.dependencies] +nodeenv = ">=1.6.0" +typing-extensions = ">=4.1" + +[package.extras] +all = ["nodejs-wheel-binaries", "twine (>=3.4.1)"] +dev = ["twine (>=3.4.1)"] +nodejs = ["nodejs-wheel-binaries"] + +[[package]] +name = "requests" +version = "2.32.3" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.8" +files = [ + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "ruff" +version = "0.0.263" +description = "An extremely fast Python linter, written in Rust." +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.0.263-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:ee6c7a77f142c427fa73e1f5f603fc1a39413a36fe6966ed0fc55e97f6921d9c"}, + {file = "ruff-0.0.263-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:c3b7d4b365207f3e4c40d235127091478e595b31e35b6cd57d940920cdfae68b"}, + {file = "ruff-0.0.263-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebc778d95f29c9917e6e7608b2b67815707e6ab8eb5af9341617beda479c3edf"}, + {file = "ruff-0.0.263-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4f75fa1632ea065b8f10678e7b6ae9873f84d5046bdf146990112751e98af42a"}, + {file = "ruff-0.0.263-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddcee0d91629a4fa4bc9faebf5b94d4615d50d1cd76d1098fa71fbe1c54f4104"}, + {file = "ruff-0.0.263-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:4010b156f2e9fa6e74b5581098467f6ff68beac48945599b3a9239481e578ab4"}, + {file = "ruff-0.0.263-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:15386933dd8e03aafa3186f9e996d6823105492817311338fbcb64d0ecbcd95f"}, + {file = "ruff-0.0.263-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04e0b280dd246448564c892bce5607d820ad1f14944f3d535db98692e2a7ac07"}, + {file = "ruff-0.0.263-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82c41f276106017b6f075dd2f2cc68e1a0b434cc75488f816fc98bd41982628d"}, + {file = "ruff-0.0.263-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3e9fcee3f81129eabc75da005d839235e32d7d374f2d4c0db0c708dad4703d6e"}, + {file = "ruff-0.0.263-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:981e3c4d773f7ff52479c4fd74a65e408f1e13fa5f889b72214d400cd1299ce4"}, + {file = "ruff-0.0.263-py3-none-musllinux_1_2_i686.whl", hash = "sha256:bed1d3fba306e3f7e13ce226927b84200350e25abd1e754e06ee361c6d41de15"}, + {file = "ruff-0.0.263-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7890499c2c3dcb1e60de2a8b4c5f5775b2bfcdff7d3e68e38db5cb2d65b12006"}, + {file = "ruff-0.0.263-py3-none-win32.whl", hash = "sha256:c2b79919ebd93674b93dfc2c843e264bf8e52fbe737467e9b58521775c85f4ad"}, + {file = "ruff-0.0.263-py3-none-win_amd64.whl", hash = "sha256:9af932f665e177de62e172901704257fd6e5bfabb95893867ff7382a851459d3"}, + {file = "ruff-0.0.263-py3-none-win_arm64.whl", hash = "sha256:ddf4503595b560bfa5fae92fa2e4cb09ec465ee4cf88cc248f10ad2e956deec3"}, + {file = "ruff-0.0.263.tar.gz", hash = "sha256:1008f211ad8aa1d998517ac5bf3d68fbc68ec516d1da89b6081f25ff2f30b687"}, +] + +[[package]] +name = "tomli" +version = "2.1.0" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.8" +files = [ + {file = "tomli-2.1.0-py3-none-any.whl", hash = "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391"}, + {file = "tomli-2.1.0.tar.gz", hash = "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8"}, +] + +[[package]] +name = "typing-extensions" +version = "4.12.2" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, +] + +[[package]] +name = "urllib3" +version = "2.2.3" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, + {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.10" +content-hash = "a127c9c1e17f86092546bd3f9acc1c0a2df2114a20b6649c5f7f2498958a79d8" diff --git a/blueprints-provider/python/pyproject.toml b/blueprints-provider/python/pyproject.toml new file mode 100644 index 0000000..85a94b8 --- /dev/null +++ b/blueprints-provider/python/pyproject.toml @@ -0,0 +1,82 @@ +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" + +[tool.poetry.dependencies] +python = "^3.10" +pydantic = "^2" + +[tool.poetry.group.dev.dependencies] +ruff = "^0.0.263" +mypy = "1.3.0" +pyright = "^1.1.317" + +[tool.poetry] +packages = [{ include = "frinx_api" }] +name = "frinx-blueprints-provider-api" +description = "Frinx Blueprints Provider graphql schema transformed to pydantic basemodels" +authors = ["Marek Pastorek "] +version = "0.1.0" +readme = ["README.md", "CHANGELOG.md", "RELEASE.md"] +keywords = ["blueprints-provider", "api"] +license = "Apache 2.0" + +[project.urls] +Homepage = 'https://github.com/FRINXio/frinx-python-sdk' +Source = 'https://github.com/FRINXio/frinx-python-sdk' + +[tool.pyright] +include = ['frinx_api'] +reportGeneralTypeIssues = "none" +reportIncompatibleVariableOverride = false + +[tool.ruff] +line-length = 120 +extend-select = ['Q', 'RUF100', 'C90', 'UP', 'I', 'E', 'F', 'N', 'PL'] +fixable = ["A", "B", "C", "D", "E", "F", "G", "I", "N", "Q", "S", "T", "W", "ANN", "ARG", "BLE", "COM", "DJ", "DTZ", "EM", "ERA", "EXE", "FBT", "ICN", "INP", "ISC", "NPY", "PD", "PGH", "PIE", "PL", "PT", "PTH", "PYI", "RET", "RSE", "RUF", "SIM", "SLF", "TCH", "TID", "TRY", "UP", "YTT"] +ignore = ["E501"] + +target-version = "py310" + +[tool.ruff.isort] +known-first-party = ['frinx_api'] +force-single-line = true + +[tool.ruff.flake8-quotes] +inline-quotes = 'single' +multiline-quotes = 'double' + +[tool.ruff.mccabe] +max-complexity = 14 + +[tool.ruff.pydocstyle] +convention = "google" + +[tool.ruff.pylint] +max-args = 10 + +[tool.ruff.pyupgrade] +# Preserve types, even if a file imports `from __future__ import annotations`. +keep-runtime-typing = true + +[tool.ruff.pep8-naming] +# Allow Pydantic's `@validator` decorator to trigger class method treatment. +classmethod-decorators = ["classmethod", "pydantic.validator", "pydantic.root_validator"] + +[tool.mypy] +python_version = "3.10" +plugins = [ "pydantic.mypy" ] +explicit_package_bases = true +namespace_packages = true +strict = true +pretty = true +ignore_missing_imports = true +disallow_untyped_defs= true +disallow_subclassing_any = false +warn_unused_ignores = false + +[tool.pydantic-mypy] +init_forbid_extra = true +init_typed = true +warn_required_dynamic_aliases = true +warn_untyped_fields = true \ No newline at end of file From f7eb52479b194e242c32fee7ba43a77e1268d74b Mon Sep 17 00:00:00 2001 From: Marek Pastorek Date: Fri, 29 Nov 2024 14:35:45 +0100 Subject: [PATCH 2/5] added tool wrapper to generate Pydantic model from GraphQL schema Signed-off-by: Marek --- blueprints-provider/python/README.md | 22 + .../frinx_api/blueprints_provider/__init__.py | 4 +- performance-monitor/python/README.md | 5 +- .../frinx_api/performance_monitor/__init__.py | 402 +- topology-discovery/python/README.md | 5 +- .../frinx_api/topology_discovery/__init__.py | 3735 +++++++++-------- utils/graphql-pydantic-generator/CHANGELOG.md | 2 + utils/graphql-pydantic-generator/README.md | 25 + .../graphql_pydantic_generator/__init__.py | 0 .../graphql_pydantic_generator/__main__.py | 52 + utils/graphql-pydantic-generator/poetry.lock | 794 ++++ .../graphql-pydantic-generator/pyproject.toml | 87 + 12 files changed, 3083 insertions(+), 2050 deletions(-) create mode 100644 utils/graphql-pydantic-generator/CHANGELOG.md create mode 100644 utils/graphql-pydantic-generator/README.md create mode 100644 utils/graphql-pydantic-generator/graphql_pydantic_generator/__init__.py create mode 100644 utils/graphql-pydantic-generator/graphql_pydantic_generator/__main__.py create mode 100644 utils/graphql-pydantic-generator/poetry.lock create mode 100644 utils/graphql-pydantic-generator/pyproject.toml diff --git a/blueprints-provider/python/README.md b/blueprints-provider/python/README.md index e69de29..71c9b64 100644 --- a/blueprints-provider/python/README.md +++ b/blueprints-provider/python/README.md @@ -0,0 +1,22 @@ +# Frinx Blueprints Provider Api in Python + + +Blueprints Provider Graphql Schema transformed to Pydantic basemodel. +This package has been tested with Python 3.10. + + +## Getting started + +```python + +``` +### Prerequisites + +- Python 3.10+ is required to use this package. +- Usage with grapqhl-pydantic-generator + +### Install the package + +```bash +poetry add git+https://github.com/FRINXio/frinx-services-python-api.git@main#subdirectory=blueprint-provider/python +``` diff --git a/blueprints-provider/python/frinx_api/blueprints_provider/__init__.py b/blueprints-provider/python/frinx_api/blueprints_provider/__init__.py index 432d3ab..73cea49 100644 --- a/blueprints-provider/python/frinx_api/blueprints_provider/__init__.py +++ b/blueprints-provider/python/frinx_api/blueprints_provider/__init__.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: -# filename: schema.graphql -# timestamp: 2024-11-28T13:43:41+00:00 +# filename: +# timestamp: 2024-11-29T13:27:51+00:00 from __future__ import annotations diff --git a/performance-monitor/python/README.md b/performance-monitor/python/README.md index 89fee77..77265bf 100644 --- a/performance-monitor/python/README.md +++ b/performance-monitor/python/README.md @@ -7,13 +7,10 @@ This package has been tested with Python 3.10. ## Getting started -```python - -``` ### Prerequisites - Python 3.10+ is required to use this package. -- Usage with grapqhl-pydantic-converter +- Usage with grapqhl-pydantic-generator ### Install the package diff --git a/performance-monitor/python/frinx_api/performance_monitor/__init__.py b/performance-monitor/python/frinx_api/performance_monitor/__init__.py index f0f55af..35d8fb9 100644 --- a/performance-monitor/python/frinx_api/performance_monitor/__init__.py +++ b/performance-monitor/python/frinx_api/performance_monitor/__init__.py @@ -1,229 +1,199 @@ -from __future__ import annotations - -import typing - -from graphql_pydantic_converter.graphql_types import ENUM -from graphql_pydantic_converter.graphql_types import Input -from graphql_pydantic_converter.graphql_types import Interface -from graphql_pydantic_converter.graphql_types import Payload -from graphql_pydantic_converter.graphql_types import Query -from pydantic import BaseModel -from pydantic import Field -from pydantic import PrivateAttr - -Datetime: typing.TypeAlias = typing.Any -Float: typing.TypeAlias = float -Boolean: typing.TypeAlias = bool -String: typing.TypeAlias = str -Int: typing.TypeAlias = int - - -class BucketUnit(ENUM): - MICROSECONDS = 'microseconds' - MILLISECONDS = 'milliseconds' - SECONDS = 'seconds' - MINUTES = 'minutes' - HOURS = 'hours' - DAYS = 'days' - WEEKS = 'weeks' - MONTHS = 'months' - YEARS = 'years' - CENTURIES = 'centuries' - - -class MetricsInterface(Interface): - cpu: typing.Optional[Boolean] = Field(default=None) - memory: typing.Optional[Boolean] = Field(default=None) - - -class BucketWidth(Input): - unit: BucketUnit - value: Float - - -class PageInfo(Payload): - has_next_page: typing.Optional[Boolean] = Field(default=False, alias='hasNextPage') - end_cursor: typing.Optional[Boolean] = Field(default=False, alias='endCursor') - - -class PageInfoPayload(BaseModel): - has_next_page: typing.Optional[typing.Optional[Boolean]] = Field(default=None, alias='hasNextPage') - end_cursor: typing.Optional[typing.Optional[String]] = Field(default=None, alias='endCursor') - - -class CurrentUtilizationQuery(Query): - _name: str = PrivateAttr('currentUtilization') - device: String = Field(json_schema_extra={'type': 'String!'}) - payload: CurrentUtilization - - -class BulkCurrentUtilizationQuery(Query): - _name: str = PrivateAttr('bulkCurrentUtilization') - devices: typing.Optional[list[String]] = Field(default=None, json_schema_extra={'type': '[String!]!'}) - payload: CurrentUtilization - - -class UtilizationQuery(Query): - _name: str = PrivateAttr('utilization') - device: String = Field(json_schema_extra={'type': 'String!'}) - bucket_width: typing.Optional[BucketWidth] = Field(default=None, json_schema_extra={'type': 'BucketWidth'}) - start_time: typing.Optional[Datetime] = Field(default=None, json_schema_extra={'type': 'Datetime'}) - end_time: typing.Optional[Datetime] = Field(default=None, json_schema_extra={'type': 'Datetime'}) - first: typing.Optional[Int] = Field(default=None, json_schema_extra={'type': 'Int'}) - after: typing.Optional[String] = Field(default=None, json_schema_extra={'type': 'String'}) - payload: UtilizationConnection - - -class BulkUtilizationQuery(Query): - _name: str = PrivateAttr('bulkUtilization') - devices: typing.Optional[list[String]] = Field(default=None, json_schema_extra={'type': '[String!]!'}) - bucket_width: typing.Optional[BucketWidth] = Field(default=None, json_schema_extra={'type': 'BucketWidth'}) - start_time: typing.Optional[Datetime] = Field(default=None, json_schema_extra={'type': 'Datetime'}) - end_time: typing.Optional[Datetime] = Field(default=None, json_schema_extra={'type': 'Datetime'}) - first: typing.Optional[Int] = Field(default=None, json_schema_extra={'type': 'Int'}) - after: typing.Optional[String] = Field(default=None, json_schema_extra={'type': 'String'}) - payload: BulkUtilizationConnection - - -class CurrentUtilizationQueryResponse(BaseModel): - data: typing.Optional[CurrentUtilizationData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class CurrentUtilizationData(BaseModel): - current_utilization: CurrentUtilizationPayload = Field(alias='currentUtilization') - - -class BulkCurrentUtilizationQueryResponse(BaseModel): - data: typing.Optional[BulkCurrentUtilizationData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) +# generated by datamodel-codegen: +# filename: +# timestamp: 2024-11-29T13:27:01+00:00 +from __future__ import annotations -class BulkCurrentUtilizationData(BaseModel): - bulk_current_utilization: typing.Optional[list[CurrentUtilizationPayload]] = Field(alias='bulkCurrentUtilization') - - -class UtilizationQueryResponse(BaseModel): - data: typing.Optional[UtilizationData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class UtilizationData(BaseModel): - utilization: UtilizationConnectionPayload - - -class BulkUtilizationQueryResponse(BaseModel): - data: typing.Optional[BulkUtilizationData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class BulkUtilizationData(BaseModel): - bulk_utilization: BulkUtilizationConnectionPayload = Field(alias='bulkUtilization') - - -class MetricsNode(Payload): - cpu: typing.Optional[Boolean] = Field(default=False) - memory: typing.Optional[Boolean] = Field(default=False) - - -class MetricsNodePayload(BaseModel): - cpu: typing.Optional[typing.Optional[Float]] = Field(default=None) - memory: typing.Optional[typing.Optional[Float]] = Field(default=None) - - -class MetricsWithCursorNode(Payload): - cursor: typing.Optional[Boolean] = Field(default=False) - cpu: typing.Optional[Boolean] = Field(default=False) - memory: typing.Optional[Boolean] = Field(default=False) - - -class MetricsWithCursorNodePayload(BaseModel): - cursor: typing.Optional[typing.Optional[String]] = Field(default=None) - cpu: typing.Optional[typing.Optional[Float]] = Field(default=None) - memory: typing.Optional[typing.Optional[Float]] = Field(default=None) - - -class MetricsWithDeviceNode(Payload): - device: typing.Optional[Boolean] = Field(default=False) - cpu: typing.Optional[Boolean] = Field(default=False) - memory: typing.Optional[Boolean] = Field(default=False) - - -class MetricsWithDeviceNodePayload(BaseModel): - device: typing.Optional[typing.Optional[String]] = Field(default=None) - cpu: typing.Optional[typing.Optional[Float]] = Field(default=None) - memory: typing.Optional[typing.Optional[Float]] = Field(default=None) - - -class CurrentUtilization(Payload): - device: typing.Optional[Boolean] = Field(default=False) - device_metrics: typing.Optional[MetricsNode] = Field(default=None, alias='deviceMetrics') - - -class CurrentUtilizationPayload(BaseModel): - device: typing.Optional[typing.Optional[String]] = Field(default=None) - device_metrics: typing.Optional[MetricsNodePayload] = Field(default=None, alias='deviceMetrics') - - -class UtilizationConnection(Payload): - page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo') - device: typing.Optional[Boolean] = Field(default=False) - device_metrics: typing.Optional[MetricsWithCursorNode] = Field(default=None, alias='deviceMetrics') - +from enum import Enum +from typing import List, Literal, Optional, TypeAlias -class UtilizationConnectionPayload(BaseModel): - page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo') - device: typing.Optional[typing.Optional[String]] = Field(default=None) - device_metrics: typing.Optional[typing.Optional[list[MetricsWithCursorNodePayload]]] = Field(default=None, alias='deviceMetrics') +from pydantic import BaseModel, Field +Boolean: TypeAlias = bool +""" +The `Boolean` scalar type represents `true` or `false`. +""" -class BulkUtilizationConnection(Payload): - page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo') - metrics: typing.Optional[MetricsEdge] = Field(default=None) +Datetime: TypeAlias = str +""" +Represents a datetime value. +""" -class BulkUtilizationConnectionPayload(BaseModel): - page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo') - metrics: typing.Optional[typing.Optional[list[MetricsEdgePayload]]] = Field(default=None) +Float: TypeAlias = float +""" +The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point). +""" -class MetricsEdge(Payload): - cursor: typing.Optional[Boolean] = Field(default=False) - device_metrics: typing.Optional[MetricsWithDeviceNode] = Field(default=None, alias='deviceMetrics') +Int: TypeAlias = int +""" +The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1. +""" -class MetricsEdgePayload(BaseModel): - cursor: typing.Optional[typing.Optional[String]] = Field(default=None) - device_metrics: typing.Optional[typing.Optional[list[MetricsWithDeviceNodePayload]]] = Field(default=None, alias='deviceMetrics') +String: TypeAlias = str +""" +The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text. +""" + + +class BucketUnit(Enum): + """ + Bucket width unit types. + """ + + centuries = 'centuries' + days = 'days' + hours = 'hours' + microseconds = 'microseconds' + milliseconds = 'milliseconds' + minutes = 'minutes' + months = 'months' + seconds = 'seconds' + weeks = 'weeks' + years = 'years' + + +class MetricsInterface(BaseModel): + """ + Interface representing device metrics. + """ + + cpu: Optional[Float] = Field( + None, description='The CPU utilization represented as a percentage.' + ) + memory: Optional[Float] = Field( + None, description='The memory utilization represented as a percentage.' + ) + typename__: Optional[Literal['MetricsInterface']] = Field( + 'MetricsInterface', alias='__typename' + ) + + +class BulkUtilizationConnection(BaseModel): + """ + Represents a paginated connection of utilization data for multiple devices. + """ + + metrics: List[MetricsEdge] = Field( + ..., + description='A list of metrics for multiple devices, each with associated cursor information.', + ) + pageInfo: PageInfo = Field( + ..., description='Information about the current page of results.' + ) + typename__: Optional[Literal['BulkUtilizationConnection']] = Field( + 'BulkUtilizationConnection', alias='__typename' + ) + + +class CurrentUtilization(BaseModel): + """ + Represents the current sources utilization of a single device. + """ + + device: String = Field(..., description='The unique identifier for the device.') + deviceMetrics: MetricsNode = Field(..., description='The device metrics.') + typename__: Optional[Literal['CurrentUtilization']] = Field( + 'CurrentUtilization', alias='__typename' + ) + + +class MetricsEdge(BaseModel): + """ + Represents an edge in a paginated list of device metrics. + """ + + cursor: String = Field(..., description='A cursor for pagination.') + deviceMetrics: List[MetricsWithDeviceNode] = Field( + ..., description='A list of device metrics associated with a specific device.' + ) + typename__: Optional[Literal['MetricsEdge']] = Field( + 'MetricsEdge', alias='__typename' + ) + + +class MetricsNode(MetricsInterface): + """ + Base node type for metrics. + """ + + cpu: Optional[Float] = None + memory: Optional[Float] = None + typename__: Optional[Literal['MetricsNode']] = Field( + 'MetricsNode', alias='__typename' + ) + + +class MetricsWithCursorNode(MetricsInterface): + """ + Node type for metrics including a cursor. + """ + + cpu: Optional[Float] = None + cursor: Optional[String] = Field( + None, description='The cursor used for pagination.' + ) + memory: Optional[Float] = None + typename__: Optional[Literal['MetricsWithCursorNode']] = Field( + 'MetricsWithCursorNode', alias='__typename' + ) + + +class MetricsWithDeviceNode(MetricsInterface): + """ + Node type for metrics a device. + """ + + cpu: Optional[Float] = None + device: String = Field(..., description='The device identifier.') + memory: Optional[Float] = None + typename__: Optional[Literal['MetricsWithDeviceNode']] = Field( + 'MetricsWithDeviceNode', alias='__typename' + ) + + +class PageInfo(BaseModel): + """ + Pagination metadata that is usually coupled to a returned list of objects. + """ + + endCursor: Optional[String] = Field( + None, description='Pointer to the last object in the list.' + ) + hasNextPage: Boolean = Field( + ..., description='Indicates if there is a next object in the list.' + ) + typename__: Optional[Literal['PageInfo']] = Field('PageInfo', alias='__typename') + + +class UtilizationConnection(BaseModel): + """ + Represents a paginated connection of utilization data for a single device. + """ + + device: String = Field(..., description='The unique identifier for the device.') + deviceMetrics: List[MetricsWithCursorNode] = Field( + ..., description='A list of device metrics with associated cursor information.' + ) + pageInfo: PageInfo = Field( + ..., description='Information about the current page of results.' + ) + typename__: Optional[Literal['UtilizationConnection']] = Field( + 'UtilizationConnection', alias='__typename' + ) + + +class BucketWidth(BaseModel): + """ + Bucket width input type that wraps unit and value. + These two values will be join to create 'bucket_width' parameter for TimescaleDB time_bucket function. + """ -MetricsInterface.model_rebuild() -BucketWidth.model_rebuild() -PageInfo.model_rebuild() -PageInfoPayload.model_rebuild() -CurrentUtilizationQuery.model_rebuild() -BulkCurrentUtilizationQuery.model_rebuild() -UtilizationQuery.model_rebuild() -BulkUtilizationQuery.model_rebuild() -CurrentUtilizationQueryResponse.model_rebuild() -CurrentUtilizationData.model_rebuild() -BulkCurrentUtilizationQueryResponse.model_rebuild() -BulkCurrentUtilizationData.model_rebuild() -UtilizationQueryResponse.model_rebuild() -UtilizationData.model_rebuild() -BulkUtilizationQueryResponse.model_rebuild() -BulkUtilizationData.model_rebuild() -MetricsNode.model_rebuild() -MetricsNodePayload.model_rebuild() -MetricsWithCursorNode.model_rebuild() -MetricsWithCursorNodePayload.model_rebuild() -MetricsWithDeviceNode.model_rebuild() -MetricsWithDeviceNodePayload.model_rebuild() -CurrentUtilization.model_rebuild() -CurrentUtilizationPayload.model_rebuild() -UtilizationConnection.model_rebuild() -UtilizationConnectionPayload.model_rebuild() -BulkUtilizationConnection.model_rebuild() -BulkUtilizationConnectionPayload.model_rebuild() -MetricsEdge.model_rebuild() -MetricsEdgePayload.model_rebuild() + unit: BucketUnit + value: Float + typename__: Optional[Literal['BucketWidth']] = Field( + 'BucketWidth', alias='__typename' + ) diff --git a/topology-discovery/python/README.md b/topology-discovery/python/README.md index f5f3e7d..3da70fb 100644 --- a/topology-discovery/python/README.md +++ b/topology-discovery/python/README.md @@ -7,13 +7,10 @@ This package has been tested with Python 3.10. ## Getting started -```python - -``` ### Prerequisites - Python 3.10+ is required to use this package. -- Usage with grapqhl-pydantic-converter +- Usage with grapqhl-pydantic-generator ### Install the package diff --git a/topology-discovery/python/frinx_api/topology_discovery/__init__.py b/topology-discovery/python/frinx_api/topology_discovery/__init__.py index 801d0fa..e52220f 100644 --- a/topology-discovery/python/frinx_api/topology_discovery/__init__.py +++ b/topology-discovery/python/frinx_api/topology_discovery/__init__.py @@ -1,1868 +1,1955 @@ -from __future__ import annotations - -import typing - -from graphql_pydantic_converter.graphql_types import ENUM -from graphql_pydantic_converter.graphql_types import Input -from graphql_pydantic_converter.graphql_types import Interface -from graphql_pydantic_converter.graphql_types import Mutation -from graphql_pydantic_converter.graphql_types import Payload -from graphql_pydantic_converter.graphql_types import Query -from pydantic import BaseModel -from pydantic import Field -from pydantic import PrivateAttr - -String: typing.TypeAlias = str -Float: typing.TypeAlias = float -ID: typing.TypeAlias = str -Int: typing.TypeAlias = int -Boolean: typing.TypeAlias = bool -JSON: typing.TypeAlias = typing.Any - - -class CoordinatesNodeType(ENUM): - DEVICE = 'DEVICE' - NETWORK = 'NETWORK' - - -class TopologyType(ENUM): - PHYSICAL_TOPOLOGY = 'PHYSICAL_TOPOLOGY' - PTP_TOPOLOGY = 'PTP_TOPOLOGY' - ETH_TOPOLOGY = 'ETH_TOPOLOGY' - NETWORK_TOPOLOGY = 'NETWORK_TOPOLOGY' - MPLS_TOPOLOGY = 'MPLS_TOPOLOGY' - - -class GeometryType(ENUM): - POINT = 'POINT' - - -class Signalisation(ENUM): - RSVP = 'RSVP' - LDP = 'LDP' - - -class MplsOperation(ENUM): - SWAP = 'SWAP' - PUSH = 'PUSH' - POP = 'POP' - NOOP = 'NOOP' - - -class NetRoutingPathOutputCollections(ENUM): - NET_DEVICE = 'NET_DEVICE' - NET_INTERFACE = 'NET_INTERFACE' - - -class NodeStatus(ENUM): - OK = 'OK' - UNKNOWN = 'UNKNOWN' - - -class PtpPathOutputCollections(ENUM): - PTP_DEVICE = 'PTP_DEVICE' - PTP_INTERFACE = 'PTP_INTERFACE' - - -class SyncePathOutputCollections(ENUM): - SYNCE_DEVICE = 'SYNCE_DEVICE' - SYNCE_INTERFACE = 'SYNCE_INTERFACE' - - -class Node(Interface): - id: typing.Optional[Boolean] = Field(default=None) - - -class CoordinatesInput(Input): - node_type: CoordinatesNodeType = Field(alias='nodeType') - node_name: String = Field(alias='nodeName') - x: Float - y: Float - - -class DeviceMetadataFilter(Input): - device_name: typing.Optional[String] = Field(default=None, alias='deviceName') - topology_type: typing.Optional[TopologyType] = Field(default=None, alias='topologyType') - polygon: typing.Optional[list[list[None]]] = Field(default=None) - - -class MplsDeviceFilter(Input): - label: typing.Optional[String] = Field(default=None) - name: typing.Optional[String] = Field(default=None) - - -class MplsInterfaceFilter(Input): - status: typing.Optional[NodeStatus] = Field(default=None) - name: typing.Optional[String] = Field(default=None) - - -class NetDeviceFilter(Input): - ospf_area_id: typing.Optional[String] = Field(default=None, alias='ospfAreaId') - router_id: typing.Optional[String] = Field(default=None, alias='routerId') - - -class NetInterfaceFilter(Input): - ip_address: typing.Optional[String] = Field(default=None, alias='ipAddress') - - -class NetNetworkFilter(Input): - subnet: typing.Optional[String] = Field(default=None) - ospf_route_type: typing.Optional[Int] = Field(default=None, alias='ospfRouteType') - - -class PhyDeviceFilter(Input): - label: typing.Optional[String] = Field(default=None) - name: typing.Optional[String] = Field(default=None) - - -class PhyInterfaceFilter(Input): - status: typing.Optional[String] = Field(default=None) - name: typing.Optional[String] = Field(default=None) - - -class PtpDeviceFilter(Input): - label: typing.Optional[String] = Field(default=None) - name: typing.Optional[String] = Field(default=None) - clock_type: typing.Optional[String] = Field(default=None, alias='clockType') - domain: typing.Optional[Int] = Field(default=None) - ptp_profile: typing.Optional[String] = Field(default=None, alias='ptpProfile') - clock_id: typing.Optional[String] = Field(default=None, alias='clockId') - clock_class: typing.Optional[Int] = Field(default=None, alias='clockClass') - clock_accuracy: typing.Optional[String] = Field(default=None, alias='clockAccuracy') - clock_variance: typing.Optional[String] = Field(default=None, alias='clockVariance') - time_recovery_status: typing.Optional[String] = Field(default=None, alias='timeRecoveryStatus') - - -class PtpInterfaceFilter(Input): - status: typing.Optional[NodeStatus] = Field(default=None) - name: typing.Optional[String] = Field(default=None) - ptp_status: typing.Optional[String] = Field(default=None, alias='ptpStatus') - admin_oper_status: typing.Optional[String] = Field(default=None, alias='adminOperStatus') - ptsf_unusable: typing.Optional[String] = Field(default=None, alias='ptsfUnusable') - - -class SynceDeviceFilter(Input): - label: typing.Optional[String] = Field(default=None) - name: typing.Optional[String] = Field(default=None) - selected_for_use: typing.Optional[String] = Field(default=None, alias='selectedForUse') - - -class SynceInterfaceFilter(Input): - status: typing.Optional[NodeStatus] = Field(default=None) - name: typing.Optional[String] = Field(default=None) - synce_enabled: typing.Optional[Boolean] = Field(default=None, alias='synceEnabled') - rx_quality_level: typing.Optional[String] = Field(default=None, alias='rxQualityLevel') - qualified_for_use: typing.Optional[String] = Field(default=None, alias='qualifiedForUse') - not_qualified_due_to: typing.Optional[String] = Field(default=None, alias='notQualifiedDueTo') - not_selected_due_to: typing.Optional[String] = Field(default=None, alias='notSelectedDueTo') - - -class TopologyOverlayDeviceFilter(Input): - name: typing.Optional[String] = Field(default=None) - - -class TopologyOverlayInterfaceFilter(Input): - name: typing.Optional[String] = Field(default=None) - - -class CreateBackupResponse(Payload): - db_name: typing.Optional[Boolean] = Field(default=False, alias='dbName') - - -class CreateBackupResponsePayload(BaseModel): - db_name: typing.Optional[typing.Optional[String]] = Field(default=None, alias='dbName') - - -class DeleteBackupsResponse(Payload): - deleted_backups: typing.Optional[Boolean] = Field(default=False, alias='deletedBackups') - - -class DeleteBackupsResponsePayload(BaseModel): - deleted_backups: typing.Optional[typing.Optional[list[typing.Optional[String]]]] = Field(default=None, alias='deletedBackups') - - -class CoordinatesResponse(Payload): - not_installed: typing.Optional[Boolean] = Field(default=False, alias='notInstalled') - installed: typing.Optional[InstalledDevices] = Field(default=None) - - -class CoordinatesResponsePayload(BaseModel): - not_installed: typing.Optional[typing.Optional[list[typing.Optional[String]]]] = Field(default=None, alias='notInstalled') - installed: typing.Optional[InstalledDevicesPayload] = Field(default=None) - - -class InstalledDevices(Payload): - not_updated: typing.Optional[Boolean] = Field(default=False, alias='notUpdated') - updated: typing.Optional[Boolean] = Field(default=False) - - -class InstalledDevicesPayload(BaseModel): - not_updated: typing.Optional[typing.Optional[list[typing.Optional[String]]]] = Field(default=None, alias='notUpdated') - updated: typing.Optional[typing.Optional[list[typing.Optional[String]]]] = Field(default=None) - - -class TopologyResponse(Payload): - diff_data: typing.Optional[Boolean] = Field(default=False, alias='diffData') - - -class TopologyResponsePayload(BaseModel): - diff_data: typing.Optional[typing.Optional[JSON]] = Field(default=None, alias='diffData') - - -class CommonNodesResponse(Payload): - common_nodes: typing.Optional[Boolean] = Field(default=False, alias='commonNodes') - - -class CommonNodesResponsePayload(BaseModel): - common_nodes: typing.Optional[typing.Optional[list[typing.Optional[String]]]] = Field(default=None, alias='commonNodes') - - -class ProviderResponse(Payload): - supported_devices: typing.Optional[Boolean] = Field(default=False, alias='supportedDevices') - - -class ProviderResponsePayload(BaseModel): - supported_devices: typing.Optional[typing.Optional[list[typing.Optional[String]]]] = Field(default=None, alias='supportedDevices') - - -class SyncResponse(Payload): - labels: typing.Optional[Boolean] = Field(default=False) - loaded_devices: typing.Optional[Boolean] = Field(default=False, alias='loadedDevices') - devices_missing_in_inventory: typing.Optional[Boolean] = Field(default=False, alias='devicesMissingInInventory') - devices_missing_in_uniconfig: typing.Optional[Boolean] = Field(default=False, alias='devicesMissingInUniconfig') - - -class SyncResponsePayload(BaseModel): - labels: typing.Optional[typing.Optional[list[typing.Optional[String]]]] = Field(default=None) - loaded_devices: typing.Optional[typing.Optional[JSON]] = Field(default=None, alias='loadedDevices') - devices_missing_in_inventory: typing.Optional[typing.Optional[list[typing.Optional[String]]]] = Field(default=None, alias='devicesMissingInInventory') - devices_missing_in_uniconfig: typing.Optional[typing.Optional[list[typing.Optional[String]]]] = Field(default=None, alias='devicesMissingInUniconfig') - - -class NodeQuery(Query): - _name: str = PrivateAttr('node') - id: ID = Field(json_schema_extra={'type': 'ID!'}) - payload: Node - - -class PhyDevicesQuery(Query): - _name: str = PrivateAttr('phyDevices') - filters: typing.Optional[PhyDeviceFilter] = Field(default=None, json_schema_extra={'type': 'PhyDeviceFilter'}) - first: typing.Optional[Int] = Field(default=None, json_schema_extra={'type': 'Int'}) - cursor: typing.Optional[String] = Field(default=None, json_schema_extra={'type': 'String'}) - payload: PhyDeviceConnection - - -class PtpDevicesQuery(Query): - _name: str = PrivateAttr('ptpDevices') - filters: typing.Optional[PtpDeviceFilter] = Field(default=None, json_schema_extra={'type': 'PtpDeviceFilter'}) - first: typing.Optional[Int] = Field(default=None, json_schema_extra={'type': 'Int'}) - cursor: typing.Optional[String] = Field(default=None, json_schema_extra={'type': 'String'}) - payload: PtpDeviceConnection - - -class NetDevicesQuery(Query): - _name: str = PrivateAttr('netDevices') - filters: typing.Optional[NetDeviceFilter] = Field(default=None, json_schema_extra={'type': 'NetDeviceFilter'}) - first: typing.Optional[Int] = Field(default=None, json_schema_extra={'type': 'Int'}) - cursor: typing.Optional[String] = Field(default=None, json_schema_extra={'type': 'String'}) - payload: NetDeviceConnection - - -class SynceDevicesQuery(Query): - _name: str = PrivateAttr('synceDevices') - filters: typing.Optional[SynceDeviceFilter] = Field(default=None, json_schema_extra={'type': 'SynceDeviceFilter'}) - first: typing.Optional[Int] = Field(default=None, json_schema_extra={'type': 'Int'}) - cursor: typing.Optional[String] = Field(default=None, json_schema_extra={'type': 'String'}) - payload: SynceDeviceConnection - - -class MplsDevicesQuery(Query): - _name: str = PrivateAttr('mplsDevices') - filters: typing.Optional[MplsDeviceFilter] = Field(default=None, json_schema_extra={'type': 'MplsDeviceFilter'}) - first: typing.Optional[Int] = Field(default=None, json_schema_extra={'type': 'Int'}) - cursor: typing.Optional[String] = Field(default=None, json_schema_extra={'type': 'String'}) - payload: MplsDeviceConnection - - -class NetRoutingPathsQuery(Query): - _name: str = PrivateAttr('netRoutingPaths') - device_from: ID = Field(alias='deviceFrom', json_schema_extra={'type': 'ID!'}) - device_to: ID = Field(alias='deviceTo', json_schema_extra={'type': 'ID!'}) - output_collection: typing.Optional[NetRoutingPathOutputCollections] = Field(default=None, alias='outputCollection', json_schema_extra={'type': 'NetRoutingPathOutputCollections'}) - payload: NetRoutingPathConnection - - -class PtpPathToGmClockQuery(Query): - _name: str = PrivateAttr('ptpPathToGmClock') - device_from: ID = Field(alias='deviceFrom', json_schema_extra={'type': 'ID!'}) - output_collection: typing.Optional[PtpPathOutputCollections] = Field(default=None, alias='outputCollection', json_schema_extra={'type': 'PtpPathOutputCollections'}) - payload: PtpPath - - -class SyncePathToGmQuery(Query): - _name: str = PrivateAttr('syncePathToGm') - device_from: ID = Field(alias='deviceFrom', json_schema_extra={'type': 'ID!'}) - output_collection: typing.Optional[SyncePathOutputCollections] = Field(default=None, alias='outputCollection', json_schema_extra={'type': 'SyncePathOutputCollections'}) - payload: SyncePath - - -class PtpDiffSynceQuery(Query): - _name: str = PrivateAttr('ptpDiffSynce') - filters: typing.Optional[PtpDeviceFilter] = Field(default=None, json_schema_extra={'type': 'PtpDeviceFilter'}) - first: typing.Optional[Int] = Field(default=None, json_schema_extra={'type': 'Int'}) - cursor: typing.Optional[String] = Field(default=None, json_schema_extra={'type': 'String'}) - payload: PtpDiffSynceConnection - - -class BackupsQuery(Query): - _name: str = PrivateAttr('backups') - - -class TopologyDiffQuery(Query): - _name: str = PrivateAttr('topologyDiff') - new_db: String = Field(alias='newDb', json_schema_extra={'type': 'String!'}) - old_db: String = Field(alias='oldDb', json_schema_extra={'type': 'String!'}) - collection_type: TopologyType = Field(alias='collectionType', json_schema_extra={'type': 'TopologyType!'}) - payload: TopologyResponse - - -class CommonNodesQuery(Query): - _name: str = PrivateAttr('commonNodes') - selected_nodes: typing.Optional[list[String]] = Field(default=None, alias='selectedNodes', json_schema_extra={'type': '[String!]!'}) - db_name: typing.Optional[String] = Field(default=None, alias='dbName', json_schema_extra={'type': 'String'}) - topology_type: typing.Optional[TopologyType] = Field(default=None, alias='topologyType', json_schema_extra={'type': 'TopologyType'}) - payload: CommonNodesResponse - - -class ProvidersQuery(Query): - _name: str = PrivateAttr('providers') - - -class ProviderQuery(Query): - _name: str = PrivateAttr('provider') - topology_type: TopologyType = Field(alias='topologyType', json_schema_extra={'type': 'TopologyType!'}) - payload: ProviderResponse - - -class DeviceMetadataQuery(Query): - _name: str = PrivateAttr('deviceMetadata') - filters: typing.Optional[DeviceMetadataFilter] = Field(default=None, json_schema_extra={'type': 'DeviceMetadataFilter'}) - first: typing.Optional[Int] = Field(default=None, json_schema_extra={'type': 'Int'}) - cursor: typing.Optional[String] = Field(default=None, json_schema_extra={'type': 'String'}) - payload: MetadataConnection - - -class MplsLspCountQuery(Query): - _name: str = PrivateAttr('mplsLspCount') - device_id: ID = Field(alias='deviceId', json_schema_extra={'type': 'ID!'}) - payload: MplsTotalLsps - - -class MplsLspPathQuery(Query): - _name: str = PrivateAttr('mplsLspPath') - device_id: ID = Field(alias='deviceId', json_schema_extra={'type': 'ID!'}) - lsp_id: ID = Field(alias='lspId', json_schema_extra={'type': 'ID!'}) - payload: MplsLspPath - - -class TopologyOverlayQuery(Query): - _name: str = PrivateAttr('topologyOverlay') - first_topology: TopologyType = Field(alias='firstTopology', json_schema_extra={'type': 'TopologyType!'}) - second_topology: TopologyType = Field(alias='secondTopology', json_schema_extra={'type': 'TopologyType!'}) - filters: typing.Optional[TopologyOverlayDeviceFilter] = Field(default=None, json_schema_extra={'type': 'TopologyOverlayDeviceFilter'}) - first: typing.Optional[Int] = Field(default=None, json_schema_extra={'type': 'Int'}) - cursor: typing.Optional[String] = Field(default=None, json_schema_extra={'type': 'String'}) - payload: TopologyOverlayDeviceConnection - - -class NeighborsQuery(Query): - _name: str = PrivateAttr('neighbors') - device_name: String = Field(alias='deviceName', json_schema_extra={'type': 'String!'}) - topology_type: TopologyType = Field(alias='topologyType', json_schema_extra={'type': 'TopologyType!'}) - payload: Neighbor - - -class NodeQueryResponse(BaseModel): - data: typing.Optional[Node] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class PhyDevicesQueryResponse(BaseModel): - data: typing.Optional[PhyDevicesData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class PhyDevicesData(BaseModel): - phy_devices: PhyDeviceConnectionPayload = Field(alias='phyDevices') - - -class PtpDevicesQueryResponse(BaseModel): - data: typing.Optional[PtpDevicesData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class PtpDevicesData(BaseModel): - ptp_devices: PtpDeviceConnectionPayload = Field(alias='ptpDevices') - - -class NetDevicesQueryResponse(BaseModel): - data: typing.Optional[NetDevicesData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class NetDevicesData(BaseModel): - net_devices: NetDeviceConnectionPayload = Field(alias='netDevices') - - -class SynceDevicesQueryResponse(BaseModel): - data: typing.Optional[SynceDevicesData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class SynceDevicesData(BaseModel): - synce_devices: SynceDeviceConnectionPayload = Field(alias='synceDevices') - - -class MplsDevicesQueryResponse(BaseModel): - data: typing.Optional[MplsDevicesData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class MplsDevicesData(BaseModel): - mpls_devices: MplsDeviceConnectionPayload = Field(alias='mplsDevices') - - -class NetRoutingPathsQueryResponse(BaseModel): - data: typing.Optional[NetRoutingPathsData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class NetRoutingPathsData(BaseModel): - net_routing_paths: typing.Optional[NetRoutingPathConnectionPayload] = Field(alias='netRoutingPaths') - - -class PtpPathToGmClockQueryResponse(BaseModel): - data: typing.Optional[PtpPathToGmClockData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class PtpPathToGmClockData(BaseModel): - ptp_path_to_gm_clock: PtpPathPayload = Field(alias='ptpPathToGmClock') - - -class SyncePathToGmQueryResponse(BaseModel): - data: typing.Optional[SyncePathToGmData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class SyncePathToGmData(BaseModel): - synce_path_to_gm: SyncePathPayload = Field(alias='syncePathToGm') - - -class PtpDiffSynceQueryResponse(BaseModel): - data: typing.Optional[PtpDiffSynceData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class PtpDiffSynceData(BaseModel): - ptp_diff_synce: PtpDiffSynceConnectionPayload = Field(alias='ptpDiffSynce') - - -class TopologyDiffQueryResponse(BaseModel): - data: typing.Optional[TopologyDiffData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class TopologyDiffData(BaseModel): - topology_diff: TopologyResponsePayload = Field(alias='topologyDiff') - - -class CommonNodesQueryResponse(BaseModel): - data: typing.Optional[CommonNodesData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class CommonNodesData(BaseModel): - common_nodes: CommonNodesResponsePayload = Field(alias='commonNodes') - - -class ProviderQueryResponse(BaseModel): - data: typing.Optional[ProviderData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class ProviderData(BaseModel): - provider: ProviderResponsePayload - - -class DeviceMetadataQueryResponse(BaseModel): - data: typing.Optional[DeviceMetadataData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class DeviceMetadataData(BaseModel): - device_metadata: MetadataConnectionPayload = Field(alias='deviceMetadata') - - -class MplsLspCountQueryResponse(BaseModel): - data: typing.Optional[MplsLspCountData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class MplsLspCountData(BaseModel): - mpls_lsp_count: typing.Optional[list[MplsTotalLspsPayload]] = Field(alias='mplsLspCount') - - -class MplsLspPathQueryResponse(BaseModel): - data: typing.Optional[MplsLspPathData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class MplsLspPathData(BaseModel): - mpls_lsp_path: MplsLspPathPayload = Field(alias='mplsLspPath') - - -class TopologyOverlayQueryResponse(BaseModel): - data: typing.Optional[TopologyOverlayData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class TopologyOverlayData(BaseModel): - topology_overlay: TopologyOverlayDeviceConnectionPayload = Field(alias='topologyOverlay') - - -class NeighborsQueryResponse(BaseModel): - data: typing.Optional[NeighborsData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class NeighborsData(BaseModel): - neighbors: typing.Optional[list[NeighborPayload]] - - -class CreateBackupMutation(Mutation): - _name: str = PrivateAttr('createBackup') - - -class DeleteBackupsMutation(Mutation): - _name: str = PrivateAttr('deleteBackups') - delete_age: typing.Optional[Int] = Field(default=None, alias='deleteAge', json_schema_extra={'type': 'Int'}) - payload: DeleteBackupsResponse - - -class UpdateCoordinatesMutation(Mutation): - _name: str = PrivateAttr('updateCoordinates') - coordinates_list: typing.Optional[list[CoordinatesInput]] = Field(default=None, alias='coordinatesList', json_schema_extra={'type': '[CoordinatesInput!]!'}) - topology_type: typing.Optional[TopologyType] = Field(default=None, alias='topologyType', json_schema_extra={'type': 'TopologyType'}) - payload: CoordinatesResponse - - -class UpdateNodeStatusMutation(Mutation): - _name: str = PrivateAttr('updateNodeStatus') - device_name: String = Field(alias='deviceName', json_schema_extra={'type': 'String!'}) - status: NodeStatus = Field(json_schema_extra={'type': 'NodeStatus!'}) - interface_name: typing.Optional[String] = Field(default=None, alias='interfaceName', json_schema_extra={'type': 'String'}) - topology_type: typing.Optional[TopologyType] = Field(default=None, alias='topologyType', json_schema_extra={'type': 'TopologyType'}) - payload: Boolean - - -class SyncMutation(Mutation): - _name: str = PrivateAttr('sync') - topology_type: TopologyType = Field(alias='topologyType', json_schema_extra={'type': 'TopologyType!'}) - devices: typing.Optional[list[String]] = Field(default=None, json_schema_extra={'type': '[String]'}) - labels: typing.Optional[list[String]] = Field(default=None, json_schema_extra={'type': '[String]'}) - payload: SyncResponse - - -class EnableRemoteDebugSessionMutation(Mutation): - _name: str = PrivateAttr('enableRemoteDebugSession') - host: String = Field(json_schema_extra={'type': 'String!'}) - port: typing.Optional[Int] = Field(default=None, json_schema_extra={'type': 'Int'}) - stdout_to_server: typing.Optional[Boolean] = Field(default=None, alias='stdoutToServer', json_schema_extra={'type': 'Boolean'}) - stderr_to_server: typing.Optional[Boolean] = Field(default=None, alias='stderrToServer', json_schema_extra={'type': 'Boolean'}) - payload: Boolean - - -class DeleteBackupsMutationResponse(BaseModel): - data: typing.Optional[DeleteBackupsData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class DeleteBackupsData(BaseModel): - delete_backups: DeleteBackupsResponsePayload = Field(alias='deleteBackups') - - -class UpdateCoordinatesMutationResponse(BaseModel): - data: typing.Optional[UpdateCoordinatesData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class UpdateCoordinatesData(BaseModel): - update_coordinates: CoordinatesResponsePayload = Field(alias='updateCoordinates') - - -class UpdateNodeStatusMutationResponse(BaseModel): - data: typing.Optional[UpdateNodeStatusData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class UpdateNodeStatusData(BaseModel): - update_node_status: typing.Optional[JSON] = Field(alias='updateNodeStatus') - - -class SyncMutationResponse(BaseModel): - data: typing.Optional[SyncData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class SyncData(BaseModel): - sync: SyncResponsePayload - - -class EnableRemoteDebugSessionMutationResponse(BaseModel): - data: typing.Optional[EnableRemoteDebugSessionData] = Field(default=None) - errors: typing.Optional[typing.Any] = Field(default=None) - - -class EnableRemoteDebugSessionData(BaseModel): - enable_remote_debug_session: typing.Optional[String] = Field(alias='enableRemoteDebugSession') - - -class Coordinates(Payload): - x: typing.Optional[Boolean] = Field(default=False) - y: typing.Optional[Boolean] = Field(default=False) - - -class CoordinatesPayload(BaseModel): - x: typing.Optional[typing.Optional[Float]] = Field(default=None) - y: typing.Optional[typing.Optional[Float]] = Field(default=None) - - -class DeviceMetadata(Payload): - id: typing.Optional[Boolean] = Field(default=False) - device_name: typing.Optional[Boolean] = Field(default=False, alias='deviceName') - device_type: typing.Optional[Boolean] = Field(default=False, alias='deviceType') - vendor: typing.Optional[Boolean] = Field(default=False) - model: typing.Optional[Boolean] = Field(default=False) - version: typing.Optional[Boolean] = Field(default=False) - protocol_type: typing.Optional[Boolean] = Field(default=False, alias='protocolType') - geo_location: typing.Optional[DeviceGeoLocation] = Field(default=None, alias='geoLocation') - - -class DeviceMetadataPayload(BaseModel): - id: typing.Optional[typing.Optional[ID]] = Field(default=None) - device_name: typing.Optional[typing.Optional[String]] = Field(default=None, alias='deviceName') - device_type: typing.Optional[typing.Optional[String]] = Field(default=None, alias='deviceType') - vendor: typing.Optional[typing.Optional[String]] = Field(default=None) - model: typing.Optional[typing.Optional[String]] = Field(default=None) - version: typing.Optional[typing.Optional[String]] = Field(default=None) - protocol_type: typing.Optional[typing.Optional[String]] = Field(default=None, alias='protocolType') - geo_location: typing.Optional[DeviceGeoLocationPayload] = Field(default=None, alias='geoLocation') - - -class DeviceMetadataEdge(Payload): - cursor: typing.Optional[Boolean] = Field(default=False) - node: typing.Optional[DeviceMetadata] = Field(default=None) - - -class DeviceMetadataEdgePayload(BaseModel): - cursor: typing.Optional[typing.Optional[String]] = Field(default=None) - node: typing.Optional[DeviceMetadataPayload] = Field(default=None) - - -class MetadataConnection(Payload): - page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo') - edges: typing.Optional[DeviceMetadataEdge] = Field(default=None) - - -class MetadataConnectionPayload(BaseModel): - page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo') - edges: typing.Optional[typing.Optional[list[DeviceMetadataEdgePayload]]] = Field(default=None) - - -class DeviceGeoLocation(Payload): - type: typing.Optional[Boolean] = Field(default=False) - coordinates: typing.Optional[Boolean] = Field(default=False) - bbox: typing.Optional[Boolean] = Field(default=False) - - -class DeviceGeoLocationPayload(BaseModel): - type: typing.Optional[typing.Optional[GeometryType]] = Field(default=None) - coordinates: typing.Optional[typing.Optional[list[typing.Optional[Float]]]] = Field(default=None) - bbox: typing.Optional[typing.Optional[list[typing.Optional[Float]]]] = Field(default=None) - - -class MplsDevice(Payload): - id: typing.Optional[Boolean] = Field(default=False) - name: typing.Optional[Boolean] = Field(default=False) - coordinates: typing.Optional[Coordinates] = Field(default=None) - details: typing.Optional[MplsDeviceDetails] = Field(default=None) - status: typing.Optional[Boolean] = Field(default=False) - labels: typing.Optional[Boolean] = Field(default=False) - mpls_interfaces: typing.Optional[MplsInterfaceConnection] = Field(default=None, alias='mplsInterfaces') - - -class MplsDevicePayload(BaseModel): - id: typing.Optional[typing.Optional[ID]] = Field(default=None) - name: typing.Optional[typing.Optional[String]] = Field(default=None) - coordinates: typing.Optional[CoordinatesPayload] = Field(default=None) - details: typing.Optional[MplsDeviceDetailsPayload] = Field(default=None) - status: typing.Optional[typing.Optional[NodeStatus]] = Field(default=None) - labels: typing.Optional[typing.Optional[list[typing.Optional[String]]]] = Field(default=None) - mpls_interfaces: typing.Optional[MplsInterfaceConnectionPayload] = Field(default=None, alias='mplsInterfaces') - - -class MplsDeviceEdge(Payload): - cursor: typing.Optional[Boolean] = Field(default=False) - node: typing.Optional[MplsDevice] = Field(default=None) - - -class MplsDeviceEdgePayload(BaseModel): - cursor: typing.Optional[typing.Optional[String]] = Field(default=None) - node: typing.Optional[MplsDevicePayload] = Field(default=None) - - -class MplsDeviceConnection(Payload): - page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo') - edges: typing.Optional[MplsDeviceEdge] = Field(default=None) - - -class MplsDeviceConnectionPayload(BaseModel): - page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo') - edges: typing.Optional[typing.Optional[list[MplsDeviceEdgePayload]]] = Field(default=None) - - -class MplsDeviceDetails(Payload): - mpls_data: typing.Optional[MplsData] = Field(default=None, alias='mplsData') - lsp_tunnels: typing.Optional[LspTunnel] = Field(default=None, alias='lspTunnels') - router_id: typing.Optional[Boolean] = Field(default=False, alias='routerId') - - -class MplsDeviceDetailsPayload(BaseModel): - mpls_data: typing.Optional[typing.Optional[list[MplsDataPayload]]] = Field(default=None, alias='mplsData') - lsp_tunnels: typing.Optional[typing.Optional[list[LspTunnelPayload]]] = Field(default=None, alias='lspTunnels') - router_id: typing.Optional[typing.Optional[String]] = Field(default=None, alias='routerId') - - -class MplsData(Payload): - lsp_id: typing.Optional[Boolean] = Field(default=False, alias='lspId') - oper_state: typing.Optional[Boolean] = Field(default=False, alias='operState') - in_label: typing.Optional[Boolean] = Field(default=False, alias='inLabel') - in_interface: typing.Optional[Boolean] = Field(default=False, alias='inInterface') - out_label: typing.Optional[Boolean] = Field(default=False, alias='outLabel') - out_interface: typing.Optional[Boolean] = Field(default=False, alias='outInterface') - mpls_operation: typing.Optional[Boolean] = Field(default=False, alias='mplsOperation') - signalisation: typing.Optional[Boolean] = Field(default=False) - - -class MplsDataPayload(BaseModel): - lsp_id: typing.Optional[typing.Optional[String]] = Field(default=None, alias='lspId') - oper_state: typing.Optional[typing.Optional[String]] = Field(default=None, alias='operState') - in_label: typing.Optional[typing.Optional[Int]] = Field(default=None, alias='inLabel') - in_interface: typing.Optional[typing.Optional[String]] = Field(default=None, alias='inInterface') - out_label: typing.Optional[typing.Optional[Int]] = Field(default=None, alias='outLabel') - out_interface: typing.Optional[typing.Optional[String]] = Field(default=None, alias='outInterface') - mpls_operation: typing.Optional[typing.Optional[MplsOperation]] = Field(default=None, alias='mplsOperation') - signalisation: typing.Optional[typing.Optional[Signalisation]] = Field(default=None) - - -class LspTunnel(Payload): - lsp_id: typing.Optional[Boolean] = Field(default=False, alias='lspId') - signalisation: typing.Optional[Boolean] = Field(default=False) - from_device: typing.Optional[Boolean] = Field(default=False, alias='fromDevice') - to_device: typing.Optional[Boolean] = Field(default=False, alias='toDevice') - uptime: typing.Optional[Boolean] = Field(default=False) - - -class LspTunnelPayload(BaseModel): - lsp_id: typing.Optional[typing.Optional[String]] = Field(default=None, alias='lspId') - signalisation: typing.Optional[typing.Optional[Signalisation]] = Field(default=None) - from_device: typing.Optional[typing.Optional[String]] = Field(default=None, alias='fromDevice') - to_device: typing.Optional[typing.Optional[String]] = Field(default=None, alias='toDevice') - uptime: typing.Optional[typing.Optional[Int]] = Field(default=None) - - -class MplsInterface(Payload): - id: typing.Optional[Boolean] = Field(default=False) - name: typing.Optional[Boolean] = Field(default=False) - status: typing.Optional[Boolean] = Field(default=False) - mpls_device: typing.Optional[MplsDevice] = Field(default=None, alias='mplsDevice') - mpls_links: typing.Optional[MplsLinkConnection] = Field(default=None, alias='mplsLinks') - - -class MplsInterfacePayload(BaseModel): - id: typing.Optional[typing.Optional[ID]] = Field(default=None) - name: typing.Optional[typing.Optional[String]] = Field(default=None) - status: typing.Optional[typing.Optional[NodeStatus]] = Field(default=None) - mpls_device: typing.Optional[MplsDevicePayload] = Field(default=None, alias='mplsDevice') - mpls_links: typing.Optional[MplsLinkConnectionPayload] = Field(default=None, alias='mplsLinks') - - -class MplsLinkConnection(Payload): - page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo') - edges: typing.Optional[MplsLinkEdge] = Field(default=None) - - -class MplsLinkConnectionPayload(BaseModel): - page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo') - edges: typing.Optional[typing.Optional[list[MplsLinkEdgePayload]]] = Field(default=None) - - -class MplsLinkEdge(Payload): - link: typing.Optional[Boolean] = Field(default=False) - cursor: typing.Optional[Boolean] = Field(default=False) - node: typing.Optional[MplsInterface] = Field(default=None) - - -class MplsLinkEdgePayload(BaseModel): - link: typing.Optional[typing.Optional[ID]] = Field(default=None) - cursor: typing.Optional[typing.Optional[String]] = Field(default=None) - node: typing.Optional[MplsInterfacePayload] = Field(default=None) - - -class MplsInterfaceEdge(Payload): - cursor: typing.Optional[Boolean] = Field(default=False) - node: typing.Optional[MplsInterface] = Field(default=None) - - -class MplsInterfaceEdgePayload(BaseModel): - cursor: typing.Optional[typing.Optional[String]] = Field(default=None) - node: typing.Optional[MplsInterfacePayload] = Field(default=None) - - -class MplsInterfaceConnection(Payload): - page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo') - edges: typing.Optional[MplsInterfaceEdge] = Field(default=None) - - -class MplsInterfaceConnectionPayload(BaseModel): - page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo') - edges: typing.Optional[typing.Optional[list[MplsInterfaceEdgePayload]]] = Field(default=None) - - -class MplsTotalLsps(Payload): - to_device: typing.Optional[Boolean] = Field(default=False, alias='toDevice') - outcoming_lsps: typing.Optional[Boolean] = Field(default=False, alias='outcomingLsps') - incoming_lsps: typing.Optional[Boolean] = Field(default=False, alias='incomingLsps') - - -class MplsTotalLspsPayload(BaseModel): - to_device: typing.Optional[typing.Optional[String]] = Field(default=None, alias='toDevice') - outcoming_lsps: typing.Optional[typing.Optional[Int]] = Field(default=None, alias='outcomingLsps') - incoming_lsps: typing.Optional[typing.Optional[Int]] = Field(default=None, alias='incomingLsps') - - -class MplsLspMetadata(Payload): - signalisation: typing.Optional[Boolean] = Field(default=False) - from_device: typing.Optional[Boolean] = Field(default=False, alias='fromDevice') - to_device: typing.Optional[Boolean] = Field(default=False, alias='toDevice') - uptime: typing.Optional[Boolean] = Field(default=False) - - -class MplsLspMetadataPayload(BaseModel): - signalisation: typing.Optional[typing.Optional[String]] = Field(default=None) - from_device: typing.Optional[typing.Optional[String]] = Field(default=None, alias='fromDevice') - to_device: typing.Optional[typing.Optional[String]] = Field(default=None, alias='toDevice') - uptime: typing.Optional[typing.Optional[Int]] = Field(default=None) - - -class MplsLspPath(Payload): - path: typing.Optional[Boolean] = Field(default=False) - lsp_metadata: typing.Optional[MplsLspMetadata] = Field(default=None, alias='lspMetadata') - - -class MplsLspPathPayload(BaseModel): - path: typing.Optional[typing.Optional[list[typing.Optional[String]]]] = Field(default=None) - lsp_metadata: typing.Optional[MplsLspMetadataPayload] = Field(default=None, alias='lspMetadata') - - -class Neighbor(Payload): - device_id: typing.Optional[Boolean] = Field(default=False, alias='deviceId') - device_name: typing.Optional[Boolean] = Field(default=False, alias='deviceName') - - -class NeighborPayload(BaseModel): - device_id: typing.Optional[typing.Optional[String]] = Field(default=None, alias='deviceId') - device_name: typing.Optional[typing.Optional[String]] = Field(default=None, alias='deviceName') - - -class NetDevice(Payload): - id: typing.Optional[Boolean] = Field(default=False) - router_id: typing.Optional[Boolean] = Field(default=False, alias='routerId') - ospf_area_id: typing.Optional[Boolean] = Field(default=False, alias='ospfAreaId') - phy_device: typing.Optional[PhyDevice] = Field(default=None, alias='phyDevice') - net_networks: typing.Optional[NetNetworkConnection] = Field(default=None, alias='netNetworks') - net_interfaces: typing.Optional[NetInterfaceConnection] = Field(default=None, alias='netInterfaces') - - -class NetDevicePayload(BaseModel): - id: typing.Optional[typing.Optional[ID]] = Field(default=None) - router_id: typing.Optional[typing.Optional[String]] = Field(default=None, alias='routerId') - ospf_area_id: typing.Optional[typing.Optional[String]] = Field(default=None, alias='ospfAreaId') - phy_device: typing.Optional[PhyDevicePayload] = Field(default=None, alias='phyDevice') - net_networks: typing.Optional[NetNetworkConnectionPayload] = Field(default=None, alias='netNetworks') - net_interfaces: typing.Optional[NetInterfaceConnectionPayload] = Field(default=None, alias='netInterfaces') - - -class NetDeviceEdge(Payload): - cursor: typing.Optional[Boolean] = Field(default=False) - node: typing.Optional[NetDevice] = Field(default=None) - - -class NetDeviceEdgePayload(BaseModel): - cursor: typing.Optional[typing.Optional[String]] = Field(default=None) - node: typing.Optional[NetDevicePayload] = Field(default=None) - - -class NetDeviceConnection(Payload): - page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo') - edges: typing.Optional[NetDeviceEdge] = Field(default=None) - - -class NetDeviceConnectionPayload(BaseModel): - page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo') - edges: typing.Optional[typing.Optional[list[NetDeviceEdgePayload]]] = Field(default=None) - - -class NetInterface(Payload): - id: typing.Optional[Boolean] = Field(default=False) - ip_address: typing.Optional[Boolean] = Field(default=False, alias='ipAddress') - net_device: typing.Optional[NetDevice] = Field(default=None, alias='netDevice') - igp_metric: typing.Optional[Boolean] = Field(default=False) - net_links: typing.Optional[NetLinkConnection] = Field(default=None, alias='netLinks') - - -class NetInterfacePayload(BaseModel): - id: typing.Optional[typing.Optional[ID]] = Field(default=None) - ip_address: typing.Optional[typing.Optional[String]] = Field(default=None, alias='ipAddress') - net_device: typing.Optional[NetDevicePayload] = Field(default=None, alias='netDevice') - igp_metric: typing.Optional[typing.Optional[Int]] = Field(default=None) - net_links: typing.Optional[NetLinkConnectionPayload] = Field(default=None, alias='netLinks') - - -class NetInterfaceEdge(Payload): - cursor: typing.Optional[Boolean] = Field(default=False) - node: typing.Optional[NetInterface] = Field(default=None) - - -class NetInterfaceEdgePayload(BaseModel): - cursor: typing.Optional[typing.Optional[String]] = Field(default=None) - node: typing.Optional[NetInterfacePayload] = Field(default=None) - - -class NetInterfaceConnection(Payload): - page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo') - edges: typing.Optional[NetInterfaceEdge] = Field(default=None) - - -class NetInterfaceConnectionPayload(BaseModel): - page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo') - edges: typing.Optional[typing.Optional[list[NetInterfaceEdgePayload]]] = Field(default=None) - - -class NetLinkEdge(Payload): - link: typing.Optional[Boolean] = Field(default=False) - cursor: typing.Optional[Boolean] = Field(default=False) - node: typing.Optional[NetInterface] = Field(default=None) - - -class NetLinkEdgePayload(BaseModel): - link: typing.Optional[typing.Optional[ID]] = Field(default=None) - cursor: typing.Optional[typing.Optional[String]] = Field(default=None) - node: typing.Optional[NetInterfacePayload] = Field(default=None) - - -class NetLinkConnection(Payload): - page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo') - edges: typing.Optional[NetLinkEdge] = Field(default=None) - - -class NetLinkConnectionPayload(BaseModel): - page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo') - edges: typing.Optional[typing.Optional[list[NetLinkEdgePayload]]] = Field(default=None) - - -class NetNetwork(Payload): - id: typing.Optional[Boolean] = Field(default=False) - subnet: typing.Optional[Boolean] = Field(default=False) - ospf_route_type: typing.Optional[Boolean] = Field(default=False, alias='ospfRouteType') - coordinates: typing.Optional[Coordinates] = Field(default=None) - - -class NetNetworkPayload(BaseModel): - id: typing.Optional[typing.Optional[ID]] = Field(default=None) - subnet: typing.Optional[typing.Optional[String]] = Field(default=None) - ospf_route_type: typing.Optional[typing.Optional[Int]] = Field(default=None, alias='ospfRouteType') - coordinates: typing.Optional[CoordinatesPayload] = Field(default=None) - - -class NetNetworkEdge(Payload): - cursor: typing.Optional[Boolean] = Field(default=False) - node: typing.Optional[NetNetwork] = Field(default=None) - - -class NetNetworkEdgePayload(BaseModel): - cursor: typing.Optional[typing.Optional[String]] = Field(default=None) - node: typing.Optional[NetNetworkPayload] = Field(default=None) - - -class NetNetworkConnection(Payload): - page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo') - edges: typing.Optional[NetNetworkEdge] = Field(default=None) - - -class NetNetworkConnectionPayload(BaseModel): - page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo') - edges: typing.Optional[typing.Optional[list[NetNetworkEdgePayload]]] = Field(default=None) - - -class NodeInfo(Payload): - node: typing.Optional[Boolean] = Field(default=False) - weight: typing.Optional[Boolean] = Field(default=False) - - -class NodeInfoPayload(BaseModel): - node: typing.Optional[typing.Optional[ID]] = Field(default=None) - weight: typing.Optional[typing.Optional[Int]] = Field(default=None) - - -class RoutingPath(Payload): - nodes: typing.Optional[NodeInfo] = Field(default=None) - weight: typing.Optional[Boolean] = Field(default=False) - - -class RoutingPathPayload(BaseModel): - nodes: typing.Optional[typing.Optional[list[NodeInfoPayload]]] = Field(default=None) - weight: typing.Optional[typing.Optional[Int]] = Field(default=None) - - -class NetRoutingPathConnection(Payload): - edges: typing.Optional[RoutingPath] = Field(default=None) - - -class NetRoutingPathConnectionPayload(BaseModel): - edges: typing.Optional[typing.Optional[list[RoutingPathPayload]]] = Field(default=None) - - -class PageInfo(Payload): - has_next_page: typing.Optional[Boolean] = Field(default=False, alias='hasNextPage') - end_cursor: typing.Optional[Boolean] = Field(default=False, alias='endCursor') - - -class PageInfoPayload(BaseModel): - has_next_page: typing.Optional[typing.Optional[Boolean]] = Field(default=None, alias='hasNextPage') - end_cursor: typing.Optional[typing.Optional[String]] = Field(default=None, alias='endCursor') - - -class PhyDevice(Payload): - id: typing.Optional[Boolean] = Field(default=False) - name: typing.Optional[Boolean] = Field(default=False) - router_id: typing.Optional[Boolean] = Field(default=False, alias='routerId') - coordinates: typing.Optional[Coordinates] = Field(default=None) - details: typing.Optional[PhyDeviceDetails] = Field(default=None) - status: typing.Optional[Boolean] = Field(default=False) - labels: typing.Optional[Boolean] = Field(default=False) - phy_interfaces: typing.Optional[PhyInterfaceConnection] = Field(default=None, alias='phyInterfaces') - net_device: typing.Optional[NetDevice] = Field(default=None, alias='netDevice') - - -class PhyDevicePayload(BaseModel): - id: typing.Optional[typing.Optional[ID]] = Field(default=None) - name: typing.Optional[typing.Optional[String]] = Field(default=None) - router_id: typing.Optional[typing.Optional[String]] = Field(default=None, alias='routerId') - coordinates: typing.Optional[CoordinatesPayload] = Field(default=None) - details: typing.Optional[PhyDeviceDetailsPayload] = Field(default=None) - status: typing.Optional[typing.Optional[NodeStatus]] = Field(default=None) - labels: typing.Optional[typing.Optional[list[typing.Optional[String]]]] = Field(default=None) - phy_interfaces: typing.Optional[PhyInterfaceConnectionPayload] = Field(default=None, alias='phyInterfaces') - net_device: typing.Optional[NetDevicePayload] = Field(default=None, alias='netDevice') - - -class PhyDeviceEdge(Payload): - cursor: typing.Optional[Boolean] = Field(default=False) - node: typing.Optional[PhyDevice] = Field(default=None) - - -class PhyDeviceEdgePayload(BaseModel): - cursor: typing.Optional[typing.Optional[String]] = Field(default=None) - node: typing.Optional[PhyDevicePayload] = Field(default=None) - - -class PhyDeviceConnection(Payload): - page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo') - edges: typing.Optional[PhyDeviceEdge] = Field(default=None) - - -class PhyDeviceConnectionPayload(BaseModel): - page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo') - edges: typing.Optional[typing.Optional[list[PhyDeviceEdgePayload]]] = Field(default=None) - - -class PhyDeviceDetails(Payload): - device_type: typing.Optional[Boolean] = Field(default=False, alias='deviceType') - sw_version: typing.Optional[Boolean] = Field(default=False, alias='swVersion') - - -class PhyDeviceDetailsPayload(BaseModel): - device_type: typing.Optional[typing.Optional[String]] = Field(default=None, alias='deviceType') - sw_version: typing.Optional[typing.Optional[String]] = Field(default=None, alias='swVersion') - - -class PhyInterface(Payload): - id: typing.Optional[Boolean] = Field(default=False) - name: typing.Optional[Boolean] = Field(default=False) - status: typing.Optional[Boolean] = Field(default=False) - phy_device: typing.Optional[PhyDevice] = Field(default=None, alias='phyDevice') - details: typing.Optional[PhyInterfaceDetails] = Field(default=None) - phy_links: typing.Optional[PhyLinkConnection] = Field(default=None, alias='phyLinks') - - -class PhyInterfacePayload(BaseModel): - id: typing.Optional[typing.Optional[ID]] = Field(default=None) - name: typing.Optional[typing.Optional[String]] = Field(default=None) - status: typing.Optional[typing.Optional[NodeStatus]] = Field(default=None) - phy_device: typing.Optional[PhyDevicePayload] = Field(default=None, alias='phyDevice') - details: typing.Optional[PhyInterfaceDetailsPayload] = Field(default=None) - phy_links: typing.Optional[PhyLinkConnectionPayload] = Field(default=None, alias='phyLinks') - - -class PhyInterfaceEdge(Payload): - cursor: typing.Optional[Boolean] = Field(default=False) - node: typing.Optional[PhyInterface] = Field(default=None) - - -class PhyInterfaceEdgePayload(BaseModel): - cursor: typing.Optional[typing.Optional[String]] = Field(default=None) - node: typing.Optional[PhyInterfacePayload] = Field(default=None) - - -class PhyInterfaceConnection(Payload): - page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo') - edges: typing.Optional[PhyInterfaceEdge] = Field(default=None) - - -class PhyInterfaceConnectionPayload(BaseModel): - page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo') - edges: typing.Optional[typing.Optional[list[PhyInterfaceEdgePayload]]] = Field(default=None) - - -class PhyInterfaceDetails(Payload): - max_speed: typing.Optional[Boolean] = Field(default=False, alias='maxSpeed') - - -class PhyInterfaceDetailsPayload(BaseModel): - max_speed: typing.Optional[typing.Optional[Float]] = Field(default=None, alias='maxSpeed') - - -class PhyLinkEdge(Payload): - link: typing.Optional[Boolean] = Field(default=False) - cursor: typing.Optional[Boolean] = Field(default=False) - node: typing.Optional[PhyInterface] = Field(default=None) - - -class PhyLinkEdgePayload(BaseModel): - link: typing.Optional[typing.Optional[ID]] = Field(default=None) - cursor: typing.Optional[typing.Optional[String]] = Field(default=None) - node: typing.Optional[PhyInterfacePayload] = Field(default=None) - - -class PhyLinkConnection(Payload): - page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo') - edges: typing.Optional[PhyLinkEdge] = Field(default=None) - - -class PhyLinkConnectionPayload(BaseModel): - page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo') - edges: typing.Optional[typing.Optional[list[PhyLinkEdgePayload]]] = Field(default=None) - - -class PtpDevice(Payload): - id: typing.Optional[Boolean] = Field(default=False) - name: typing.Optional[Boolean] = Field(default=False) - coordinates: typing.Optional[Coordinates] = Field(default=None) - details: typing.Optional[PtpDeviceDetails] = Field(default=None) - status: typing.Optional[Boolean] = Field(default=False) - labels: typing.Optional[Boolean] = Field(default=False) - ptp_interfaces: typing.Optional[PtpInterfaceConnection] = Field(default=None, alias='ptpInterfaces') - - -class PtpDevicePayload(BaseModel): - id: typing.Optional[typing.Optional[ID]] = Field(default=None) - name: typing.Optional[typing.Optional[String]] = Field(default=None) - coordinates: typing.Optional[CoordinatesPayload] = Field(default=None) - details: typing.Optional[PtpDeviceDetailsPayload] = Field(default=None) - status: typing.Optional[typing.Optional[NodeStatus]] = Field(default=None) - labels: typing.Optional[typing.Optional[list[typing.Optional[String]]]] = Field(default=None) - ptp_interfaces: typing.Optional[PtpInterfaceConnectionPayload] = Field(default=None, alias='ptpInterfaces') - - -class PtpDeviceEdge(Payload): - cursor: typing.Optional[Boolean] = Field(default=False) - node: typing.Optional[PtpDevice] = Field(default=None) - - -class PtpDeviceEdgePayload(BaseModel): - cursor: typing.Optional[typing.Optional[String]] = Field(default=None) - node: typing.Optional[PtpDevicePayload] = Field(default=None) - - -class PtpDeviceConnection(Payload): - page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo') - edges: typing.Optional[PtpDeviceEdge] = Field(default=None) - - -class PtpDeviceConnectionPayload(BaseModel): - page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo') - edges: typing.Optional[typing.Optional[list[PtpDeviceEdgePayload]]] = Field(default=None) - - -class PtpDeviceDetails(Payload): - clock_type: typing.Optional[Boolean] = Field(default=False, alias='clockType') - domain: typing.Optional[Boolean] = Field(default=False) - ptp_profile: typing.Optional[Boolean] = Field(default=False, alias='ptpProfile') - clock_id: typing.Optional[Boolean] = Field(default=False, alias='clockId') - parent_clock_id: typing.Optional[Boolean] = Field(default=False, alias='parentClockId') - gm_clock_id: typing.Optional[Boolean] = Field(default=False, alias='gmClockId') - clock_class: typing.Optional[Boolean] = Field(default=False, alias='clockClass') - clock_accuracy: typing.Optional[Boolean] = Field(default=False, alias='clockAccuracy') - clock_variance: typing.Optional[Boolean] = Field(default=False, alias='clockVariance') - time_recovery_status: typing.Optional[Boolean] = Field(default=False, alias='timeRecoveryStatus') - global_priority: typing.Optional[Boolean] = Field(default=False, alias='globalPriority') - user_priority: typing.Optional[Boolean] = Field(default=False, alias='userPriority') - ptp_port_state: typing.Optional[Boolean] = Field(default=False, alias='ptpPortState') - - -class PtpDeviceDetailsPayload(BaseModel): - clock_type: typing.Optional[typing.Optional[String]] = Field(default=None, alias='clockType') - domain: typing.Optional[typing.Optional[Int]] = Field(default=None) - ptp_profile: typing.Optional[typing.Optional[String]] = Field(default=None, alias='ptpProfile') - clock_id: typing.Optional[typing.Optional[String]] = Field(default=None, alias='clockId') - parent_clock_id: typing.Optional[typing.Optional[String]] = Field(default=None, alias='parentClockId') - gm_clock_id: typing.Optional[typing.Optional[String]] = Field(default=None, alias='gmClockId') - clock_class: typing.Optional[typing.Optional[Int]] = Field(default=None, alias='clockClass') - clock_accuracy: typing.Optional[typing.Optional[String]] = Field(default=None, alias='clockAccuracy') - clock_variance: typing.Optional[typing.Optional[String]] = Field(default=None, alias='clockVariance') - time_recovery_status: typing.Optional[typing.Optional[String]] = Field(default=None, alias='timeRecoveryStatus') - global_priority: typing.Optional[typing.Optional[Int]] = Field(default=None, alias='globalPriority') - user_priority: typing.Optional[typing.Optional[Int]] = Field(default=None, alias='userPriority') - ptp_port_state: typing.Optional[typing.Optional[String]] = Field(default=None, alias='ptpPortState') - - -class PtpInterface(Payload): - id: typing.Optional[Boolean] = Field(default=False) - name: typing.Optional[Boolean] = Field(default=False) - status: typing.Optional[Boolean] = Field(default=False) - details: typing.Optional[PtpInterfaceDetails] = Field(default=None) - ptp_device: typing.Optional[PtpDevice] = Field(default=None, alias='ptpDevice') - ptp_links: typing.Optional[PtpLinkConnection] = Field(default=None, alias='ptpLinks') - - -class PtpInterfacePayload(BaseModel): - id: typing.Optional[typing.Optional[ID]] = Field(default=None) - name: typing.Optional[typing.Optional[String]] = Field(default=None) - status: typing.Optional[typing.Optional[NodeStatus]] = Field(default=None) - details: typing.Optional[PtpInterfaceDetailsPayload] = Field(default=None) - ptp_device: typing.Optional[PtpDevicePayload] = Field(default=None, alias='ptpDevice') - ptp_links: typing.Optional[PtpLinkConnectionPayload] = Field(default=None, alias='ptpLinks') - - -class PtpInterfaceEdge(Payload): - cursor: typing.Optional[Boolean] = Field(default=False) - node: typing.Optional[PtpInterface] = Field(default=None) - - -class PtpInterfaceEdgePayload(BaseModel): - cursor: typing.Optional[typing.Optional[String]] = Field(default=None) - node: typing.Optional[PtpInterfacePayload] = Field(default=None) - - -class PtpInterfaceConnection(Payload): - page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo') - edges: typing.Optional[PtpInterfaceEdge] = Field(default=None) - - -class PtpInterfaceConnectionPayload(BaseModel): - page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo') - edges: typing.Optional[typing.Optional[list[PtpInterfaceEdgePayload]]] = Field(default=None) - - -class PtpLinkEdge(Payload): - link: typing.Optional[Boolean] = Field(default=False) - cursor: typing.Optional[Boolean] = Field(default=False) - node: typing.Optional[PtpInterface] = Field(default=None) - - -class PtpLinkEdgePayload(BaseModel): - link: typing.Optional[typing.Optional[ID]] = Field(default=None) - cursor: typing.Optional[typing.Optional[String]] = Field(default=None) - node: typing.Optional[PtpInterfacePayload] = Field(default=None) - - -class PtpLinkConnection(Payload): - page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo') - edges: typing.Optional[PtpLinkEdge] = Field(default=None) - - -class PtpLinkConnectionPayload(BaseModel): - page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo') - edges: typing.Optional[typing.Optional[list[PtpLinkEdgePayload]]] = Field(default=None) - - -class PtpInterfaceDetails(Payload): - ptp_status: typing.Optional[Boolean] = Field(default=False, alias='ptpStatus') - ptsf_unusable: typing.Optional[Boolean] = Field(default=False, alias='ptsfUnusable') - admin_oper_status: typing.Optional[Boolean] = Field(default=False, alias='adminOperStatus') - - -class PtpInterfaceDetailsPayload(BaseModel): - ptp_status: typing.Optional[typing.Optional[String]] = Field(default=None, alias='ptpStatus') - ptsf_unusable: typing.Optional[typing.Optional[String]] = Field(default=None, alias='ptsfUnusable') - admin_oper_status: typing.Optional[typing.Optional[String]] = Field(default=None, alias='adminOperStatus') - - -class PtpPath(Payload): - nodes: typing.Optional[Boolean] = Field(default=False) - complete: typing.Optional[Boolean] = Field(default=False) - - -class PtpPathPayload(BaseModel): - nodes: typing.Optional[typing.Optional[list[typing.Optional[ID]]]] = Field(default=None) - complete: typing.Optional[typing.Optional[Boolean]] = Field(default=None) - - -class PtpDiffSynce(Payload): - id: typing.Optional[Boolean] = Field(default=False) - ptp_upstream_interface: typing.Optional[Boolean] = Field(default=False, alias='ptpUpstreamInterface') - ptp_upstream_interface_name: typing.Optional[Boolean] = Field(default=False, alias='ptpUpstreamInterfaceName') - ptp_upstream_interface_status: typing.Optional[Boolean] = Field(default=False, alias='ptpUpstreamInterfaceStatus') - synce_id: typing.Optional[Boolean] = Field(default=False, alias='synceId') - synce_upstream_interface_name: typing.Optional[Boolean] = Field(default=False, alias='synceUpstreamInterfaceName') - - -class PtpDiffSyncePayload(BaseModel): - id: typing.Optional[typing.Optional[ID]] = Field(default=None) - ptp_upstream_interface: typing.Optional[typing.Optional[ID]] = Field(default=None, alias='ptpUpstreamInterface') - ptp_upstream_interface_name: typing.Optional[typing.Optional[String]] = Field(default=None, alias='ptpUpstreamInterfaceName') - ptp_upstream_interface_status: typing.Optional[typing.Optional[String]] = Field(default=None, alias='ptpUpstreamInterfaceStatus') - synce_id: typing.Optional[typing.Optional[ID]] = Field(default=None, alias='synceId') - synce_upstream_interface_name: typing.Optional[typing.Optional[String]] = Field(default=None, alias='synceUpstreamInterfaceName') - - -class PtpDiffSynceEdge(Payload): - cursor: typing.Optional[Boolean] = Field(default=False) - node: typing.Optional[PtpDiffSynce] = Field(default=None) - - -class PtpDiffSynceEdgePayload(BaseModel): - cursor: typing.Optional[typing.Optional[String]] = Field(default=None) - node: typing.Optional[PtpDiffSyncePayload] = Field(default=None) - - -class PtpDiffSynceConnection(Payload): - page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo') - edges: typing.Optional[PtpDiffSynceEdge] = Field(default=None) - - -class PtpDiffSynceConnectionPayload(BaseModel): - page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo') - edges: typing.Optional[typing.Optional[list[PtpDiffSynceEdgePayload]]] = Field(default=None) - - -class SynceDevice(Payload): - id: typing.Optional[Boolean] = Field(default=False) - name: typing.Optional[Boolean] = Field(default=False) - coordinates: typing.Optional[Coordinates] = Field(default=None) - details: typing.Optional[SynceDeviceDetails] = Field(default=None) - status: typing.Optional[Boolean] = Field(default=False) - labels: typing.Optional[Boolean] = Field(default=False) - synce_interfaces: typing.Optional[SynceInterfaceConnection] = Field(default=None, alias='synceInterfaces') - - -class SynceDevicePayload(BaseModel): - id: typing.Optional[typing.Optional[ID]] = Field(default=None) - name: typing.Optional[typing.Optional[String]] = Field(default=None) - coordinates: typing.Optional[CoordinatesPayload] = Field(default=None) - details: typing.Optional[SynceDeviceDetailsPayload] = Field(default=None) - status: typing.Optional[typing.Optional[NodeStatus]] = Field(default=None) - labels: typing.Optional[typing.Optional[list[typing.Optional[String]]]] = Field(default=None) - synce_interfaces: typing.Optional[SynceInterfaceConnectionPayload] = Field(default=None, alias='synceInterfaces') - - -class SynceDeviceEdge(Payload): - cursor: typing.Optional[Boolean] = Field(default=False) - node: typing.Optional[SynceDevice] = Field(default=None) - - -class SynceDeviceEdgePayload(BaseModel): - cursor: typing.Optional[typing.Optional[String]] = Field(default=None) - node: typing.Optional[SynceDevicePayload] = Field(default=None) - - -class SynceDeviceConnection(Payload): - page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo') - edges: typing.Optional[SynceDeviceEdge] = Field(default=None) - - -class SynceDeviceConnectionPayload(BaseModel): - page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo') - edges: typing.Optional[typing.Optional[list[SynceDeviceEdgePayload]]] = Field(default=None) - - -class SynceDeviceDetails(Payload): - selected_for_use: typing.Optional[Boolean] = Field(default=False, alias='selectedForUse') - - -class SynceDeviceDetailsPayload(BaseModel): - selected_for_use: typing.Optional[typing.Optional[String]] = Field(default=None, alias='selectedForUse') - - -class SynceInterface(Payload): - id: typing.Optional[Boolean] = Field(default=False) - name: typing.Optional[Boolean] = Field(default=False) - status: typing.Optional[Boolean] = Field(default=False) - synce_device: typing.Optional[SynceDevice] = Field(default=None, alias='synceDevice') - synce_links: typing.Optional[SynceLinkConnection] = Field(default=None, alias='synceLinks') - details: typing.Optional[SynceInterfaceDetails] = Field(default=None) - - -class SynceInterfacePayload(BaseModel): - id: typing.Optional[typing.Optional[ID]] = Field(default=None) - name: typing.Optional[typing.Optional[String]] = Field(default=None) - status: typing.Optional[typing.Optional[NodeStatus]] = Field(default=None) - synce_device: typing.Optional[SynceDevicePayload] = Field(default=None, alias='synceDevice') - synce_links: typing.Optional[SynceLinkConnectionPayload] = Field(default=None, alias='synceLinks') - details: typing.Optional[SynceInterfaceDetailsPayload] = Field(default=None) - - -class SynceLinkConnection(Payload): - page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo') - edges: typing.Optional[SynceLinkEdge] = Field(default=None) +# generated by datamodel-codegen: +# filename: +# timestamp: 2024-11-29T13:24:32+00:00 +from __future__ import annotations -class SynceLinkConnectionPayload(BaseModel): - page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo') - edges: typing.Optional[typing.Optional[list[SynceLinkEdgePayload]]] = Field(default=None) +from enum import Enum +from typing import List, Literal, Optional, TypeAlias +from pydantic import BaseModel, Field -class SynceLinkEdge(Payload): - link: typing.Optional[Boolean] = Field(default=False) - cursor: typing.Optional[Boolean] = Field(default=False) - node: typing.Optional[SynceInterface] = Field(default=None) +Boolean: TypeAlias = bool +""" +The `Boolean` scalar type represents `true` or `false`. +""" -class SynceLinkEdgePayload(BaseModel): - link: typing.Optional[typing.Optional[ID]] = Field(default=None) - cursor: typing.Optional[typing.Optional[String]] = Field(default=None) - node: typing.Optional[SynceInterfacePayload] = Field(default=None) +Float: TypeAlias = float +""" +The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point). +""" -class SynceInterfaceEdge(Payload): - cursor: typing.Optional[Boolean] = Field(default=False) - node: typing.Optional[SynceInterface] = Field(default=None) +ID: TypeAlias = str +""" +The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `"4"`) or integer (such as `4`) input value will be accepted as an ID. +""" -class SynceInterfaceEdgePayload(BaseModel): - cursor: typing.Optional[typing.Optional[String]] = Field(default=None) - node: typing.Optional[SynceInterfacePayload] = Field(default=None) +Int: TypeAlias = int +""" +The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1. +""" -class SynceInterfaceConnection(Payload): - page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo') - edges: typing.Optional[SynceInterfaceEdge] = Field(default=None) +JSON: TypeAlias = str +""" +JSON document. +""" -class SynceInterfaceConnectionPayload(BaseModel): - page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo') - edges: typing.Optional[typing.Optional[list[SynceInterfaceEdgePayload]]] = Field(default=None) +String: TypeAlias = str +""" +The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text. +""" -class SynceInterfaceDetails(Payload): - synce_enabled: typing.Optional[Boolean] = Field(default=False, alias='synceEnabled') - rx_quality_level: typing.Optional[Boolean] = Field(default=False, alias='rxQualityLevel') - qualified_for_use: typing.Optional[Boolean] = Field(default=False, alias='qualifiedForUse') - not_qualified_due_to: typing.Optional[Boolean] = Field(default=False, alias='notQualifiedDueTo') - not_selected_due_to: typing.Optional[Boolean] = Field(default=False, alias='notSelectedDueTo') +class BgpLsProtocolType(Enum): + """ + BGP-LS Protocol types. + """ + ISIS = 'ISIS' + OSPF = 'OSPF' -class SynceInterfaceDetailsPayload(BaseModel): - synce_enabled: typing.Optional[typing.Optional[Boolean]] = Field(default=None, alias='synceEnabled') - rx_quality_level: typing.Optional[typing.Optional[String]] = Field(default=None, alias='rxQualityLevel') - qualified_for_use: typing.Optional[typing.Optional[String]] = Field(default=None, alias='qualifiedForUse') - not_qualified_due_to: typing.Optional[typing.Optional[String]] = Field(default=None, alias='notQualifiedDueTo') - not_selected_due_to: typing.Optional[typing.Optional[String]] = Field(default=None, alias='notSelectedDueTo') +class CoordinatesNodeType(Enum): + """ + Type of the node in the topology for which the coordinates are being updated. + """ -class SyncePath(Payload): - nodes: typing.Optional[Boolean] = Field(default=False) - complete: typing.Optional[Boolean] = Field(default=False) + DEVICE = 'DEVICE' + NETWORK = 'NETWORK' -class SyncePathPayload(BaseModel): - nodes: typing.Optional[typing.Optional[list[typing.Optional[ID]]]] = Field(default=None) - complete: typing.Optional[typing.Optional[Boolean]] = Field(default=None) +class GeometryType(Enum): + """ + Type of geometry. + """ + POINT = 'POINT' -class TopologyOverlayDevice(Payload): - id: typing.Optional[Boolean] = Field(default=False) - name: typing.Optional[Boolean] = Field(default=False) - second_topology_id: typing.Optional[Boolean] = Field(default=False, alias='secondTopologyId') - topology_overlay_interfaces: typing.Optional[TopologyOverlayInterfaceConnection] = Field(default=None, alias='topologyOverlayInterfaces') +class MplsOperation(Enum): + NOOP = 'NOOP' + POP = 'POP' + PUSH = 'PUSH' + SWAP = 'SWAP' -class TopologyOverlayDevicePayload(BaseModel): - id: typing.Optional[typing.Optional[ID]] = Field(default=None) - name: typing.Optional[typing.Optional[String]] = Field(default=None) - second_topology_id: typing.Optional[typing.Optional[ID]] = Field(default=None, alias='secondTopologyId') - topology_overlay_interfaces: typing.Optional[TopologyOverlayInterfaceConnectionPayload] = Field(default=None, alias='topologyOverlayInterfaces') +class NetRoutingPathOutputCollections(Enum): + """ + Types of the nodes that should be included in the returned path. + """ -class TopologyOverlayDeviceConnection(Payload): - page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo') - edges: typing.Optional[TopologyOverlayDeviceEdge] = Field(default=None) + NET_DEVICE = 'NET_DEVICE' + NET_INTERFACE = 'NET_INTERFACE' -class TopologyOverlayDeviceConnectionPayload(BaseModel): - page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo') - edges: typing.Optional[typing.Optional[list[TopologyOverlayDeviceEdgePayload]]] = Field(default=None) +class NodeStatus(Enum): + """ + Status of the node from the view of the device registry. + """ + OK = 'OK' + UNKNOWN = 'UNKNOWN' -class TopologyOverlayDeviceEdge(Payload): - cursor: typing.Optional[Boolean] = Field(default=False) - node: typing.Optional[TopologyOverlayDevice] = Field(default=None) +class PtpPathOutputCollections(Enum): + """ + Types of the nodes that should be included in the returned path. + """ -class TopologyOverlayDeviceEdgePayload(BaseModel): - cursor: typing.Optional[typing.Optional[String]] = Field(default=None) - node: typing.Optional[TopologyOverlayDevicePayload] = Field(default=None) + PTP_DEVICE = 'PTP_DEVICE' + PTP_INTERFACE = 'PTP_INTERFACE' -class TopologyOverlayInterface(Payload): - id: typing.Optional[Boolean] = Field(default=False) - name: typing.Optional[Boolean] = Field(default=False) - second_topology_id: typing.Optional[Boolean] = Field(default=False, alias='secondTopologyId') - topology_overlay_device: typing.Optional[TopologyOverlayDevice] = Field(default=None, alias='topologyOverlayDevice') - topology_overlay_links: typing.Optional[TopologyOverlayLinkConnection] = Field(default=None, alias='topologyOverlayLinks') +class Signalisation(Enum): + LDP = 'LDP' + RSVP = 'RSVP' -class TopologyOverlayInterfacePayload(BaseModel): - id: typing.Optional[typing.Optional[ID]] = Field(default=None) - name: typing.Optional[typing.Optional[String]] = Field(default=None) - second_topology_id: typing.Optional[typing.Optional[ID]] = Field(default=None, alias='secondTopologyId') - topology_overlay_device: typing.Optional[TopologyOverlayDevicePayload] = Field(default=None, alias='topologyOverlayDevice') - topology_overlay_links: typing.Optional[TopologyOverlayLinkConnectionPayload] = Field(default=None, alias='topologyOverlayLinks') +class SyncePathOutputCollections(Enum): + """ + Types of the nodes that should be included in the returned path. + """ + SYNCE_DEVICE = 'SYNCE_DEVICE' + SYNCE_INTERFACE = 'SYNCE_INTERFACE' -class TopologyOverlayInterfaceConnection(Payload): - page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo') - edges: typing.Optional[TopologyOverlayInterfaceEdge] = Field(default=None) +class TopologyType(Enum): + """ + Present topology types. + """ -class TopologyOverlayInterfaceConnectionPayload(BaseModel): - page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo') - edges: typing.Optional[typing.Optional[list[TopologyOverlayInterfaceEdgePayload]]] = Field(default=None) + ETH_TOPOLOGY = 'ETH_TOPOLOGY' + MPLS_TOPOLOGY = 'MPLS_TOPOLOGY' + NETWORK_TOPOLOGY = 'NETWORK_TOPOLOGY' + PHYSICAL_TOPOLOGY = 'PHYSICAL_TOPOLOGY' + PTP_TOPOLOGY = 'PTP_TOPOLOGY' -class TopologyOverlayInterfaceEdge(Payload): - cursor: typing.Optional[Boolean] = Field(default=False) - node: typing.Optional[TopologyOverlayInterface] = Field(default=None) - - -class TopologyOverlayInterfaceEdgePayload(BaseModel): - cursor: typing.Optional[typing.Optional[String]] = Field(default=None) - node: typing.Optional[TopologyOverlayInterfacePayload] = Field(default=None) - - -class TopologyOverlayLinkConnection(Payload): - page_info: typing.Optional[PageInfo] = Field(default=None, alias='pageInfo') - edges: typing.Optional[TopologyOverlayLinkEdge] = Field(default=None) - - -class TopologyOverlayLinkConnectionPayload(BaseModel): - page_info: typing.Optional[PageInfoPayload] = Field(default=None, alias='pageInfo') - edges: typing.Optional[typing.Optional[list[TopologyOverlayLinkEdgePayload]]] = Field(default=None) - - -class TopologyOverlayLinkEdge(Payload): - link: typing.Optional[TopologyOverlayLinkIds] = Field(default=None) - cursor: typing.Optional[Boolean] = Field(default=False) - node: typing.Optional[TopologyOverlayInterface] = Field(default=None) - - -class TopologyOverlayLinkEdgePayload(BaseModel): - link: typing.Optional[TopologyOverlayLinkIdsPayload] = Field(default=None) - cursor: typing.Optional[typing.Optional[String]] = Field(default=None) - node: typing.Optional[TopologyOverlayInterfacePayload] = Field(default=None) - - -class TopologyOverlayLinkIds(Payload): - first_topology_link_id: typing.Optional[Boolean] = Field(default=False, alias='firstTopologyLinkId') - second_topology_link_id: typing.Optional[Boolean] = Field(default=False, alias='secondTopologyLinkId') - - -class TopologyOverlayLinkIdsPayload(BaseModel): - first_topology_link_id: typing.Optional[typing.Optional[ID]] = Field(default=None, alias='firstTopologyLinkId') - second_topology_link_id: typing.Optional[typing.Optional[ID]] = Field(default=None, alias='secondTopologyLinkId') - - -Node.model_rebuild() -CoordinatesInput.model_rebuild() -DeviceMetadataFilter.model_rebuild() -MplsDeviceFilter.model_rebuild() -MplsInterfaceFilter.model_rebuild() -NetDeviceFilter.model_rebuild() -NetInterfaceFilter.model_rebuild() -NetNetworkFilter.model_rebuild() -PhyDeviceFilter.model_rebuild() -PhyInterfaceFilter.model_rebuild() -PtpDeviceFilter.model_rebuild() -PtpInterfaceFilter.model_rebuild() -SynceDeviceFilter.model_rebuild() -SynceInterfaceFilter.model_rebuild() -TopologyOverlayDeviceFilter.model_rebuild() -TopologyOverlayInterfaceFilter.model_rebuild() -CreateBackupResponse.model_rebuild() -CreateBackupResponsePayload.model_rebuild() -DeleteBackupsResponse.model_rebuild() -DeleteBackupsResponsePayload.model_rebuild() -CoordinatesResponse.model_rebuild() -CoordinatesResponsePayload.model_rebuild() -InstalledDevices.model_rebuild() -InstalledDevicesPayload.model_rebuild() -TopologyResponse.model_rebuild() -TopologyResponsePayload.model_rebuild() -CommonNodesResponse.model_rebuild() -CommonNodesResponsePayload.model_rebuild() -ProviderResponse.model_rebuild() -ProviderResponsePayload.model_rebuild() -SyncResponse.model_rebuild() -SyncResponsePayload.model_rebuild() -NodeQuery.model_rebuild() -PhyDevicesQuery.model_rebuild() -PtpDevicesQuery.model_rebuild() -NetDevicesQuery.model_rebuild() -SynceDevicesQuery.model_rebuild() -MplsDevicesQuery.model_rebuild() -NetRoutingPathsQuery.model_rebuild() -PtpPathToGmClockQuery.model_rebuild() -SyncePathToGmQuery.model_rebuild() -PtpDiffSynceQuery.model_rebuild() -BackupsQuery.model_rebuild() -TopologyDiffQuery.model_rebuild() -CommonNodesQuery.model_rebuild() -ProvidersQuery.model_rebuild() -ProviderQuery.model_rebuild() -DeviceMetadataQuery.model_rebuild() -MplsLspCountQuery.model_rebuild() -MplsLspPathQuery.model_rebuild() -TopologyOverlayQuery.model_rebuild() -NeighborsQuery.model_rebuild() -NodeQueryResponse.model_rebuild() -PhyDevicesQueryResponse.model_rebuild() -PhyDevicesData.model_rebuild() -PtpDevicesQueryResponse.model_rebuild() -PtpDevicesData.model_rebuild() -NetDevicesQueryResponse.model_rebuild() -NetDevicesData.model_rebuild() -SynceDevicesQueryResponse.model_rebuild() -SynceDevicesData.model_rebuild() -MplsDevicesQueryResponse.model_rebuild() -MplsDevicesData.model_rebuild() -NetRoutingPathsQueryResponse.model_rebuild() -NetRoutingPathsData.model_rebuild() -PtpPathToGmClockQueryResponse.model_rebuild() -PtpPathToGmClockData.model_rebuild() -SyncePathToGmQueryResponse.model_rebuild() -SyncePathToGmData.model_rebuild() -PtpDiffSynceQueryResponse.model_rebuild() -PtpDiffSynceData.model_rebuild() -TopologyDiffQueryResponse.model_rebuild() -TopologyDiffData.model_rebuild() -CommonNodesQueryResponse.model_rebuild() -CommonNodesData.model_rebuild() -ProviderQueryResponse.model_rebuild() -ProviderData.model_rebuild() -DeviceMetadataQueryResponse.model_rebuild() -DeviceMetadataData.model_rebuild() -MplsLspCountQueryResponse.model_rebuild() -MplsLspCountData.model_rebuild() -MplsLspPathQueryResponse.model_rebuild() -MplsLspPathData.model_rebuild() -TopologyOverlayQueryResponse.model_rebuild() -TopologyOverlayData.model_rebuild() -NeighborsQueryResponse.model_rebuild() -NeighborsData.model_rebuild() -CreateBackupMutation.model_rebuild() -DeleteBackupsMutation.model_rebuild() -UpdateCoordinatesMutation.model_rebuild() -UpdateNodeStatusMutation.model_rebuild() -SyncMutation.model_rebuild() -EnableRemoteDebugSessionMutation.model_rebuild() -DeleteBackupsMutationResponse.model_rebuild() -DeleteBackupsData.model_rebuild() -UpdateCoordinatesMutationResponse.model_rebuild() -UpdateCoordinatesData.model_rebuild() -UpdateNodeStatusMutationResponse.model_rebuild() -UpdateNodeStatusData.model_rebuild() -SyncMutationResponse.model_rebuild() -SyncData.model_rebuild() -EnableRemoteDebugSessionMutationResponse.model_rebuild() -EnableRemoteDebugSessionData.model_rebuild() -Coordinates.model_rebuild() -CoordinatesPayload.model_rebuild() -DeviceMetadata.model_rebuild() -DeviceMetadataPayload.model_rebuild() -DeviceMetadataEdge.model_rebuild() -DeviceMetadataEdgePayload.model_rebuild() -MetadataConnection.model_rebuild() -MetadataConnectionPayload.model_rebuild() -DeviceGeoLocation.model_rebuild() -DeviceGeoLocationPayload.model_rebuild() -MplsDevice.model_rebuild() -MplsDevicePayload.model_rebuild() -MplsDeviceEdge.model_rebuild() -MplsDeviceEdgePayload.model_rebuild() -MplsDeviceConnection.model_rebuild() -MplsDeviceConnectionPayload.model_rebuild() -MplsDeviceDetails.model_rebuild() -MplsDeviceDetailsPayload.model_rebuild() -MplsData.model_rebuild() -MplsDataPayload.model_rebuild() -LspTunnel.model_rebuild() -LspTunnelPayload.model_rebuild() -MplsInterface.model_rebuild() -MplsInterfacePayload.model_rebuild() -MplsLinkConnection.model_rebuild() -MplsLinkConnectionPayload.model_rebuild() -MplsLinkEdge.model_rebuild() -MplsLinkEdgePayload.model_rebuild() -MplsInterfaceEdge.model_rebuild() -MplsInterfaceEdgePayload.model_rebuild() -MplsInterfaceConnection.model_rebuild() -MplsInterfaceConnectionPayload.model_rebuild() -MplsTotalLsps.model_rebuild() -MplsTotalLspsPayload.model_rebuild() -MplsLspMetadata.model_rebuild() -MplsLspMetadataPayload.model_rebuild() -MplsLspPath.model_rebuild() -MplsLspPathPayload.model_rebuild() -Neighbor.model_rebuild() -NeighborPayload.model_rebuild() -NetDevice.model_rebuild() -NetDevicePayload.model_rebuild() -NetDeviceEdge.model_rebuild() -NetDeviceEdgePayload.model_rebuild() -NetDeviceConnection.model_rebuild() -NetDeviceConnectionPayload.model_rebuild() -NetInterface.model_rebuild() -NetInterfacePayload.model_rebuild() -NetInterfaceEdge.model_rebuild() -NetInterfaceEdgePayload.model_rebuild() -NetInterfaceConnection.model_rebuild() -NetInterfaceConnectionPayload.model_rebuild() -NetLinkEdge.model_rebuild() -NetLinkEdgePayload.model_rebuild() -NetLinkConnection.model_rebuild() -NetLinkConnectionPayload.model_rebuild() -NetNetwork.model_rebuild() -NetNetworkPayload.model_rebuild() -NetNetworkEdge.model_rebuild() -NetNetworkEdgePayload.model_rebuild() -NetNetworkConnection.model_rebuild() -NetNetworkConnectionPayload.model_rebuild() -NodeInfo.model_rebuild() -NodeInfoPayload.model_rebuild() -RoutingPath.model_rebuild() -RoutingPathPayload.model_rebuild() -NetRoutingPathConnection.model_rebuild() -NetRoutingPathConnectionPayload.model_rebuild() -PageInfo.model_rebuild() -PageInfoPayload.model_rebuild() -PhyDevice.model_rebuild() -PhyDevicePayload.model_rebuild() -PhyDeviceEdge.model_rebuild() -PhyDeviceEdgePayload.model_rebuild() -PhyDeviceConnection.model_rebuild() -PhyDeviceConnectionPayload.model_rebuild() -PhyDeviceDetails.model_rebuild() -PhyDeviceDetailsPayload.model_rebuild() -PhyInterface.model_rebuild() -PhyInterfacePayload.model_rebuild() -PhyInterfaceEdge.model_rebuild() -PhyInterfaceEdgePayload.model_rebuild() -PhyInterfaceConnection.model_rebuild() -PhyInterfaceConnectionPayload.model_rebuild() -PhyInterfaceDetails.model_rebuild() -PhyInterfaceDetailsPayload.model_rebuild() -PhyLinkEdge.model_rebuild() -PhyLinkEdgePayload.model_rebuild() -PhyLinkConnection.model_rebuild() -PhyLinkConnectionPayload.model_rebuild() -PtpDevice.model_rebuild() -PtpDevicePayload.model_rebuild() -PtpDeviceEdge.model_rebuild() -PtpDeviceEdgePayload.model_rebuild() -PtpDeviceConnection.model_rebuild() -PtpDeviceConnectionPayload.model_rebuild() -PtpDeviceDetails.model_rebuild() -PtpDeviceDetailsPayload.model_rebuild() -PtpInterface.model_rebuild() -PtpInterfacePayload.model_rebuild() -PtpInterfaceEdge.model_rebuild() -PtpInterfaceEdgePayload.model_rebuild() -PtpInterfaceConnection.model_rebuild() -PtpInterfaceConnectionPayload.model_rebuild() -PtpLinkEdge.model_rebuild() -PtpLinkEdgePayload.model_rebuild() -PtpLinkConnection.model_rebuild() -PtpLinkConnectionPayload.model_rebuild() -PtpInterfaceDetails.model_rebuild() -PtpInterfaceDetailsPayload.model_rebuild() -PtpPath.model_rebuild() -PtpPathPayload.model_rebuild() -PtpDiffSynce.model_rebuild() -PtpDiffSyncePayload.model_rebuild() -PtpDiffSynceEdge.model_rebuild() -PtpDiffSynceEdgePayload.model_rebuild() -PtpDiffSynceConnection.model_rebuild() -PtpDiffSynceConnectionPayload.model_rebuild() -SynceDevice.model_rebuild() -SynceDevicePayload.model_rebuild() -SynceDeviceEdge.model_rebuild() -SynceDeviceEdgePayload.model_rebuild() -SynceDeviceConnection.model_rebuild() -SynceDeviceConnectionPayload.model_rebuild() -SynceDeviceDetails.model_rebuild() -SynceDeviceDetailsPayload.model_rebuild() -SynceInterface.model_rebuild() -SynceInterfacePayload.model_rebuild() -SynceLinkConnection.model_rebuild() -SynceLinkConnectionPayload.model_rebuild() -SynceLinkEdge.model_rebuild() -SynceLinkEdgePayload.model_rebuild() -SynceInterfaceEdge.model_rebuild() -SynceInterfaceEdgePayload.model_rebuild() -SynceInterfaceConnection.model_rebuild() -SynceInterfaceConnectionPayload.model_rebuild() -SynceInterfaceDetails.model_rebuild() -SynceInterfaceDetailsPayload.model_rebuild() -SyncePath.model_rebuild() -SyncePathPayload.model_rebuild() -TopologyOverlayDevice.model_rebuild() -TopologyOverlayDevicePayload.model_rebuild() -TopologyOverlayDeviceConnection.model_rebuild() -TopologyOverlayDeviceConnectionPayload.model_rebuild() -TopologyOverlayDeviceEdge.model_rebuild() -TopologyOverlayDeviceEdgePayload.model_rebuild() -TopologyOverlayInterface.model_rebuild() -TopologyOverlayInterfacePayload.model_rebuild() -TopologyOverlayInterfaceConnection.model_rebuild() -TopologyOverlayInterfaceConnectionPayload.model_rebuild() -TopologyOverlayInterfaceEdge.model_rebuild() -TopologyOverlayInterfaceEdgePayload.model_rebuild() -TopologyOverlayLinkConnection.model_rebuild() -TopologyOverlayLinkConnectionPayload.model_rebuild() -TopologyOverlayLinkEdge.model_rebuild() -TopologyOverlayLinkEdgePayload.model_rebuild() -TopologyOverlayLinkIds.model_rebuild() -TopologyOverlayLinkIdsPayload.model_rebuild() +class Node(BaseModel): + """ + Generic node that can be identified using Globally Unique ID. + """ + + id: ID = Field(..., description='Unique identifier of the object.') + typename__: Optional[Literal['Node']] = Field('Node', alias='__typename') + + +class CommonNodesResponse(BaseModel): + """ + Response from the commonNodes query that wraps the list of found common nodes in the database. + """ + + commonNodes: List[String] = Field( + ..., + description='List of the common node names. Common nodes contain connection to all nodes specified on the input.', + ) + typename__: Optional[Literal['CommonNodesResponse']] = Field( + 'CommonNodesResponse', alias='__typename' + ) + + +class Coordinates(BaseModel): + """ + Coordinates of the node on the graph. + """ + + x: Float = Field(..., description='Horizontal coordinate of the node on the graph.') + y: Float = Field(..., description='Vertical coordinate of the node on the graph.') + typename__: Optional[Literal['Coordinates']] = Field( + 'Coordinates', alias='__typename' + ) + + +class CoordinatesResponse(BaseModel): + """ + Response from the updateCoordinates query that contains information about updated coordinated of selected nodes. + """ + + installed: InstalledDevices = Field( + ..., description='Devices that exist in the database.' + ) + notInstalled: List[String] = Field( + ..., description='List of node names that do not exist in the database.' + ) + typename__: Optional[Literal['CoordinatesResponse']] = Field( + 'CoordinatesResponse', alias='__typename' + ) + + +class CreateBackupResponse(BaseModel): + """ + Response from the createBackup mutation that contains information about created backup. + """ + + dbName: String = Field( + ..., + description='Name of the created backup database. Format: f"backup_{datetime.today().strftime(\'%Y%m%d%H%M%S\')}".', + ) + typename__: Optional[Literal['CreateBackupResponse']] = Field( + 'CreateBackupResponse', alias='__typename' + ) + + +class DeleteBackupsResponse(BaseModel): + """ + Response from the deleteBackups mutation that contains information about removed backups. + """ + + deletedBackups: List[String] = Field( + ..., description='Names of the removed databases that contained backups.' + ) + typename__: Optional[Literal['DeleteBackupsResponse']] = Field( + 'DeleteBackupsResponse', alias='__typename' + ) + + +class DeviceGeoLocation(BaseModel): + """ + Device GeoLocation data. + """ + + bbox: Optional[List[Optional[Float]]] = Field( + None, + description='Defining the area around the device, with four elements indicating its boundaries.', + ) + coordinates: List[Float] = Field( + ..., + description='Device location coordinates providing longitude and latitude (in this order, based on GeoJSON convention).', + ) + type: GeometryType = Field(..., description='Type of geometry.') + typename__: Optional[Literal['DeviceGeoLocation']] = Field( + 'DeviceGeoLocation', alias='__typename' + ) + + +class DeviceMetadata(Node): + """ + Representation of the device in the metadata. + """ + + deviceName: String = Field(..., description='Human readable name of the device.') + deviceType: Optional[String] = Field( + None, description='Type of the device (ex. router).' + ) + geoLocation: Optional[DeviceGeoLocation] = Field( + None, description='Device geographic data of point type in GeoJson format.' + ) + id: ID = Field(..., description='Unique identifier of the object.') + model: Optional[String] = Field(None, description='Model of the device (XR, ASR).') + protocolType: Optional[List[String]] = Field( + None, + description='Protocol used for management for the device (cli, netconf, gnmi).', + ) + vendor: Optional[String] = Field( + None, description='Vendor of the device (ex. Cisco).' + ) + version: Optional[String] = Field( + None, description='Version of the device software (ex. 6.0.1).' + ) + typename__: Optional[Literal['DeviceMetadata']] = Field( + 'DeviceMetadata', alias='__typename' + ) + + +class DeviceMetadataEdge(BaseModel): + """ + Grouped Metadata device object and associated cursor used by pagination. + """ + + cursor: String = Field(..., description='Pagination cursor for this edge.') + node: Optional[DeviceMetadata] = Field( + None, description='The associated MetadataDevice object.' + ) + typename__: Optional[Literal['DeviceMetadataEdge']] = Field( + 'DeviceMetadataEdge', alias='__typename' + ) + + +class InstalledDevices(BaseModel): + notUpdated: List[String] = Field( + ..., description='List of node names which coordinates have not been updated.' + ) + updated: List[String] = Field( + ..., description='List of node names which coordinates have been updated.' + ) + typename__: Optional[Literal['InstalledDevices']] = Field( + 'InstalledDevices', alias='__typename' + ) + + +class LspTunnel(BaseModel): + """ + LSP Tunnel (related to tunnel originating from this device). + """ + + fromDevice: Optional[String] = Field( + None, description='From which device is the tunnel originating.' + ) + lspId: String = Field(..., description='Name of the link state packet.') + signalisation: Signalisation = Field(..., description='Type of signalisation.') + toDevice: Optional[String] = Field(None, description='Where is the tunnel headed.') + uptime: Optional[Int] = Field(None, description='Uptime of the tunnel in seconds.') + typename__: Optional[Literal['LspTunnel']] = Field('LspTunnel', alias='__typename') + + +class MetadataConnection(BaseModel): + """ + Grouped list of Metadata device objects and pagination metadata. + """ + + edges: Optional[List[Optional[DeviceMetadataEdge]]] = Field( + None, description='List of Metadata device objects.' + ) + pageInfo: PageInfo = Field(..., description='Pagination metadata.') + typename__: Optional[Literal['MetadataConnection']] = Field( + 'MetadataConnection', alias='__typename' + ) + + +class MplsData(BaseModel): + """ + MPLS Data (related to all tunnels). + """ + + inInterface: Optional[String] = Field(None, description='The input interface.') + inLabel: Optional[Int] = Field(None, description='The input label.') + lspId: String = Field(..., description='Name of the link state packet.') + mplsOperation: Optional[MplsOperation] = Field( + None, description='The operation type.' + ) + operState: Optional[String] = Field( + None, description='Operational state of the device.' + ) + outInterface: Optional[String] = Field(None, description='The input interface.') + outLabel: Optional[Int] = Field(None, description='The output label.') + signalisation: Optional[Signalisation] = Field( + None, description='Type of signalisation.' + ) + typename__: Optional[Literal['MplsData']] = Field('MplsData', alias='__typename') + + +class MplsDevice(Node): + """ + Representation of the device in the MPLS topology. + """ + + coordinates: Coordinates = Field( + ..., description='Coordinates of the device node on the graph.' + ) + details: MplsDeviceDetails = Field(..., description='Details of the device.') + id: ID = Field(..., description='Unique identifier of the object.') + labels: Optional[List[String]] = Field( + None, + description='List of strings that can be used for grouping of synced devices.', + ) + mplsInterfaces: MplsInterfaceConnection = Field( + ..., description='List of ports that are present on the device.' + ) + name: String = Field(..., description='Human readable name of the device.') + status: NodeStatus = Field( + ..., description='Status of the device from the view of the synced topology.' + ) + typename__: Optional[Literal['MplsDevice']] = Field( + 'MplsDevice', alias='__typename' + ) + + +class MplsDeviceConnection(BaseModel): + """ + Grouped list of MplsDevice objects and pagination metadata. + """ + + edges: Optional[List[Optional[MplsDeviceEdge]]] = Field( + None, description='List of MplsDevice objects.' + ) + pageInfo: PageInfo = Field(..., description='Pagination metadata.') + typename__: Optional[Literal['MplsDeviceConnection']] = Field( + 'MplsDeviceConnection', alias='__typename' + ) + + +class MplsDeviceDetails(BaseModel): + """ + Details specific to MPLS (Multi-Protocol Label Switching). + """ + + lspTunnels: Optional[List[Optional[LspTunnel]]] = None + mplsData: Optional[List[Optional[MplsData]]] = None + routerId: Optional[String] = None + typename__: Optional[Literal['MplsDeviceDetails']] = Field( + 'MplsDeviceDetails', alias='__typename' + ) + + +class MplsDeviceEdge(BaseModel): + """ + Grouped MplsDevice object and associated cursor used by pagination. + """ + + cursor: String = Field(..., description='Pagination cursor for this edge.') + node: Optional[MplsDevice] = Field( + None, description='The associated MplsDevice object.' + ) + typename__: Optional[Literal['MplsDeviceEdge']] = Field( + 'MplsDeviceEdge', alias='__typename' + ) + + +class MplsInterface(Node): + """ + Port attached to the MPLS device. + """ + + id: ID = Field(..., description='Unique identifier of the object.') + mplsDevice: Optional[MplsDevice] = Field( + None, description='Device that owns this interface.' + ) + mplsLinks: Optional[MplsLinkConnection] = Field( + None, description='Link to connected remote MPLS device.' + ) + name: String = Field(..., description='Human readable name of the network port.') + status: NodeStatus = Field( + ..., + description="Status of the interface from the view of the synced topology ('ok' or 'unknown').", + ) + typename__: Optional[Literal['MplsInterface']] = Field( + 'MplsInterface', alias='__typename' + ) + + +class MplsInterfaceConnection(BaseModel): + """ + Grouped list of MplsInterface objects and pagination metadata. + """ + + edges: Optional[List[Optional[MplsInterfaceEdge]]] = Field( + None, description='List of MplsInterface objects.' + ) + pageInfo: PageInfo = Field(..., description='Pagination metadata.') + typename__: Optional[Literal['MplsInterfaceConnection']] = Field( + 'MplsInterfaceConnection', alias='__typename' + ) + + +class MplsInterfaceEdge(BaseModel): + """ + Grouped MplsInterface object and associated cursor used by pagination. + """ + + cursor: String = Field(..., description='Pagination cursor for this edge.') + node: Optional[MplsInterface] = Field( + None, description='The associated MplsInterface object.' + ) + typename__: Optional[Literal['MplsInterfaceEdge']] = Field( + 'MplsInterfaceEdge', alias='__typename' + ) + + +class MplsLinkConnection(BaseModel): + """ + Grouped list of MplsLinks objects and pagination metadata. + """ + + edges: Optional[List[Optional[MplsLinkEdge]]] = Field( + None, description='List of MplsInterface objects.' + ) + pageInfo: PageInfo = Field(..., description='Pagination metadata.') + typename__: Optional[Literal['MplsLinkConnection']] = Field( + 'MplsLinkConnection', alias='__typename' + ) + + +class MplsLinkEdge(BaseModel): + """ + Grouped MplsLink object and associated cursor used by pagination. + """ + + cursor: String = Field(..., description='Pagination cursor for this edge.') + link: Optional[ID] = Field( + None, + description='Identifier of the link that connects this interface to the interface on the remote device', + ) + node: Optional[MplsInterface] = Field( + None, description='The associated MplsInterface object.' + ) + typename__: Optional[Literal['MplsLinkEdge']] = Field( + 'MplsLinkEdge', alias='__typename' + ) + + +class MplsLspMetadata(BaseModel): + fromDevice: String = Field( + ..., description='From which device is the tunnel originating.' + ) + signalisation: String = Field(..., description='Type of signalisation.') + toDevice: String = Field(..., description='Where is the tunnel headed.') + uptime: Optional[Int] = Field(None, description='Uptime of the tunnel in seconds.') + typename__: Optional[Literal['MplsLspMetadata']] = Field( + 'MplsLspMetadata', alias='__typename' + ) + + +class MplsLspPath(BaseModel): + lspMetadata: Optional[MplsLspMetadata] = Field(None, description='LSP metadata.') + path: Optional[List[Optional[String]]] = Field( + None, description='Ordered list of link IDs & device IDs on the path.' + ) + typename__: Optional[Literal['MplsLspPath']] = Field( + 'MplsLspPath', alias='__typename' + ) + + +class MplsTotalLsps(BaseModel): + incomingLsps: Optional[Int] = Field(None, description='Number of incoming LSPs.') + outcomingLsps: Optional[Int] = Field(None, description='Number of outcoming LSPs.') + toDevice: Optional[String] = Field( + None, description='To which device the LSP is headed.' + ) + typename__: Optional[Literal['MplsTotalLsps']] = Field( + 'MplsTotalLsps', alias='__typename' + ) + + +class Neighbor(BaseModel): + """ + Metadata information about a neighbor device. + """ + + deviceId: String = Field( + ..., + description='Identifier of the neighbor device document (for example, MplsDevice/1).', + ) + deviceName: String = Field( + ..., + description='Human-readable name of the neighbor device (for example, CPE_01).', + ) + typename__: Optional[Literal['Neighbor']] = Field('Neighbor', alias='__typename') + + +class NetDevice(Node): + """ + Representation of the routing entity in the network topology. + """ + + coordinates: Coordinates = Field( + ..., description='Coordinates of the device node on the graph.' + ) + id: ID = Field(..., description='Unique identifier of the object.') + netInterfaces: NetInterfaceConnection = Field( + ..., + description='Interfaces that are used for connecting to other routing entities.', + ) + netNetworks: NetNetworkConnection = Field( + ..., description='Networks that are attached to the routing entity.' + ) + ospfAreaId: String = Field( + ..., + description='Identifier of OSPF area formatted as IPv4 address (for example, 0.0.0.0 represents area 0).', + ) + phyDevice: Optional[PhyDevice] = Field( + None, description='Linked device in the physical topology.' + ) + routerId: String = Field( + ..., + description='Identifier of the routing entity (usually IPv4 address). RouterId and ospfAreaId together compose a unique key.', + ) + typename__: Optional[Literal['NetDevice']] = Field('NetDevice', alias='__typename') + + +class NetDeviceConnection(BaseModel): + """ + Grouped list of NetDevice objects and pagination metadata. + """ + + edges: Optional[List[Optional[NetDeviceEdge]]] = Field( + None, description='List of NetDevice objects.' + ) + pageInfo: PageInfo = Field(..., description='Pagination metadata.') + typename__: Optional[Literal['NetDeviceConnection']] = Field( + 'NetDeviceConnection', alias='__typename' + ) + + +class NetDeviceEdge(BaseModel): + """ + Grouped NetDevice object and associated cursor used by pagination. + """ + + cursor: String = Field(..., description='Pagination cursor for this edge.') + node: Optional[NetDevice] = Field( + None, description='The associated NetDevice object.' + ) + typename__: Optional[Literal['NetDeviceEdge']] = Field( + 'NetDeviceEdge', alias='__typename' + ) + + +class NetInterface(Node): + """ + Network interface attached to the network device. + """ + + id: ID = Field(..., description='Unique identifier of the object.') + igpMetric: Optional[Int] = Field( + None, description='IGP metric configured on the network interface.' + ) + ipAddress: String = Field( + ..., description='IP address configured on the interface.' + ) + netDevice: Optional[NetDevice] = Field( + None, description='Routing entity that owns this interface.' + ) + netLinks: NetLinkConnection = Field( + ..., description='Links to connected remote network devices.' + ) + typename__: Optional[Literal['NetInterface']] = Field( + 'NetInterface', alias='__typename' + ) + + +class NetInterfaceConnection(BaseModel): + """ + Grouped list of NetInterface objects and pagination metadata. + """ + + edges: Optional[List[Optional[NetInterfaceEdge]]] = Field( + None, description='List of NetInterface objects.' + ) + pageInfo: PageInfo = Field(..., description='Pagination metadata.') + typename__: Optional[Literal['NetInterfaceConnection']] = Field( + 'NetInterfaceConnection', alias='__typename' + ) + + +class NetInterfaceEdge(BaseModel): + """ + Grouped NetInterface object and associated cursor used by pagination. + """ + + cursor: String = Field(..., description='Pagination cursor for this edge.') + node: Optional[NetInterface] = Field( + None, description='The associated NetInterface object.' + ) + typename__: Optional[Literal['NetInterfaceEdge']] = Field( + 'NetInterfaceEdge', alias='__typename' + ) + + +class NetLinkAttributes(BaseModel): + adminGroup: Optional[List[Optional[Int]]] = Field( + None, + description='A list of admin group masks on the network interface. (Group Number)', + ) + igpMetric: Optional[Int] = Field( + None, description='IGP metric configured on the network interface.' + ) + maxLinkBandwidth: Optional[Float] = Field( + None, + description='The maximum link bandwidth of the network interface. (Bytes per second)', + ) + maxReservableLinkBandwidth: Optional[Float] = Field( + None, + description='The maximum reservable link bandwidth of the network interface. (Bytes per second)', + ) + sharedRiskLinkGroup: Optional[List[Optional[Int]]] = Field( + None, description='A list of shared risk link groups on the network interface.' + ) + trafficEngineeringMetric: Optional[Int] = Field( + None, description='Traffic Engineering metric on the network interface.' + ) + unreservedBandwidth: Optional[List[Optional[Float]]] = Field( + None, + description='The unreserved bandwidth on the network interface. (Bytes per second)', + ) + typename__: Optional[Literal['NetLinkAttributes']] = Field( + 'NetLinkAttributes', alias='__typename' + ) + + +class NetLinkConnection(BaseModel): + """ + Grouped list of NetLinks objects and pagination metadata. + """ + + edges: Optional[List[Optional[NetLinkEdge]]] = Field( + None, description='List of NetInterface objects.' + ) + pageInfo: PageInfo = Field(..., description='Pagination metadata.') + typename__: Optional[Literal['NetLinkConnection']] = Field( + 'NetLinkConnection', alias='__typename' + ) + + +class NetLinkEdge(BaseModel): + attributes: Optional[NetLinkAttributes] = Field( + None, description='List of attributes associated to the link.' + ) + cursor: String = Field(..., description='Pagination cursor for this edge.') + link: Optional[ID] = Field( + None, + description='Identifier of the link that connects this interface to the interface on the remote device', + ) + node: Optional[NetInterface] = Field( + None, description='The associated NetInterface object.' + ) + typename__: Optional[Literal['NetLinkEdge']] = Field( + 'NetLinkEdge', alias='__typename' + ) + + +class NetNetwork(Node): + """ + IP subnet in the network topology. + """ + + coordinates: Coordinates = Field( + ..., description='Coordinates of the network node on the graph.' + ) + id: ID = Field(..., description='Unique identifier of the object.') + ospfRouteType: Int = Field(..., description='Type of the OSPF network (LSA type).') + subnet: String = Field( + ..., + description='Network address including prefix length expressed in the CIDR notation (e.g. 10.0.0.0/24).', + ) + typename__: Optional[Literal['NetNetwork']] = Field( + 'NetNetwork', alias='__typename' + ) + + +class NetNetworkConnection(BaseModel): + """ + Grouped list of NetNetwork objects and pagination metadata. + """ + + edges: Optional[List[Optional[NetNetworkEdge]]] = Field( + None, description='List of NetNetwork objects.' + ) + pageInfo: Optional[PageInfo] = Field(None, description='Pagination metadata.') + typename__: Optional[Literal['NetNetworkConnection']] = Field( + 'NetNetworkConnection', alias='__typename' + ) + + +class NetNetworkEdge(BaseModel): + cursor: String = Field(..., description='Pagination cursor for this edge.') + node: Optional[NetNetwork] = Field( + None, description='The associated NetNetwork object.' + ) + typename__: Optional[Literal['NetNetworkEdge']] = Field( + 'NetNetworkEdge', alias='__typename' + ) + + +class NetRoutingPathConnection(BaseModel): + """ + Computed routing paths from source to destination device. + """ + + edges: Optional[List[RoutingPath]] = Field( + None, + description='List of routing paths from source to destination device. Ordered from shortest to longest path based on weight.', + ) + typename__: Optional[Literal['NetRoutingPathConnection']] = Field( + 'NetRoutingPathConnection', alias='__typename' + ) + + +class NodeCoordinates(BaseModel): + """ + Represents the coordinates of a specific node in the topology. + """ + + nodeId: String = Field(..., description='Name of the node in the topology.') + x: Float = Field( + ..., + description='Refreshed horizontal coordinate of the node on the graph. Value is between 0.0 and 1.0.', + ) + y: Float = Field( + ..., + description='Refreshed vertical coordinate of the node on the graph. Value is between 0.0 and 1.0.', + ) + typename__: Optional[Literal['NodeCoordinates']] = Field( + 'NodeCoordinates', alias='__typename' + ) + + +class NodeInfo(BaseModel): + """ + Information about a node that is part of the computed path. + """ + + node: ID = Field(..., description='Unique identifier of the node on the path.') + weight: Optional[Int] = Field( + None, + description='Weight of the node on the path. Weight is present only on the nodes of NetDevice type.', + ) + typename__: Optional[Literal['NodeInfo']] = Field('NodeInfo', alias='__typename') + + +class PageInfo(BaseModel): + """ + Pagination metadata that is usually coupled to a returned list of objects. + """ + + endCursor: Optional[String] = Field( + None, description='Pointer to the last object in the list.' + ) + hasNextPage: Boolean = Field( + ..., description='Indicates if there is a next object in the list.' + ) + typename__: Optional[Literal['PageInfo']] = Field('PageInfo', alias='__typename') + + +class PhyDevice(Node): + """ + Representation of the device in the physical topology. + """ + + coordinates: Coordinates = Field( + ..., description='Coordinates of the device node on the graph.' + ) + details: PhyDeviceDetails = Field(..., description='Details of the device.') + id: ID = Field(..., description='Unique identifier of the object.') + labels: Optional[List[String]] = Field( + None, + description='List of strings that can be used for grouping of synced devices.', + ) + name: String = Field(..., description='Human readable name of the device.') + netDevice: Optional[NetDevice] = Field( + None, description='Linked device in the network topology.' + ) + phyInterfaces: PhyInterfaceConnection = Field( + ..., description='List of ports that are present on the device.' + ) + routerId: Optional[String] = Field( + None, + description='Identifier of the corresponding routing entity in the network topology.', + ) + status: NodeStatus = Field( + ..., description='Status of the device from the view of the synced topology.' + ) + typename__: Optional[Literal['PhyDevice']] = Field('PhyDevice', alias='__typename') + + +class PhyDeviceConnection(BaseModel): + """ + Grouped list of PhyDevice objects and pagination metadata. + """ + + edges: Optional[List[Optional[PhyDeviceEdge]]] = Field( + None, description='List of PhyDevice objects.' + ) + pageInfo: PageInfo = Field(..., description='Pagination metadata.') + typename__: Optional[Literal['PhyDeviceConnection']] = Field( + 'PhyDeviceConnection', alias='__typename' + ) + + +class PhyDeviceDetails(BaseModel): + """ + Details of the device. + """ + + deviceType: Optional[String] = Field( + None, + description='Device type (e.g. device model, vendor, chassis, hardware details, etc.)', + ) + swVersion: Optional[String] = Field( + None, + description='Version of the network operating system running on the device.', + ) + typename__: Optional[Literal['PhyDeviceDetails']] = Field( + 'PhyDeviceDetails', alias='__typename' + ) + + +class PhyDeviceEdge(BaseModel): + """ + Grouped PhyDevice object and associated cursor used by pagination. + """ + + cursor: String = Field(..., description='Pagination cursor for this edge.') + node: Optional[PhyDevice] = Field( + None, description='The associated PhyDevice object.' + ) + typename__: Optional[Literal['PhyDeviceEdge']] = Field( + 'PhyDeviceEdge', alias='__typename' + ) + + +class PhyInterface(Node): + """ + Port attached to the physical device. + """ + + details: Optional[PhyInterfaceDetails] = Field( + None, description='Details of the interface.' + ) + id: ID = Field(..., description='Unique identifier of the object.') + name: String = Field(..., description='Human readable name of the network port.') + phyDevice: Optional[PhyDevice] = Field( + None, description='Device that owns this interface.' + ) + phyLinks: PhyLinkConnection = Field( + ..., description='List of links connected to remote physical device.' + ) + status: NodeStatus = Field( + ..., + description="Status of the interface from the view of the synced topology ('ok' or 'unknown').", + ) + typename__: Optional[Literal['PhyInterface']] = Field( + 'PhyInterface', alias='__typename' + ) + + +class PhyInterfaceConnection(BaseModel): + """ + Grouped list of PhyInterface objects and pagination metadata. + """ + + edges: Optional[List[Optional[PhyInterfaceEdge]]] = Field( + None, description='List of PhyInterface objects.' + ) + pageInfo: PageInfo = Field(..., description='Pagination metadata.') + typename__: Optional[Literal['PhyInterfaceConnection']] = Field( + 'PhyInterfaceConnection', alias='__typename' + ) + + +class PhyInterfaceDetails(BaseModel): + """ + Details of the interface. + """ + + maxSpeed: Optional[Float] = Field( + None, description='Max operational interface bandwidth in Mbit.' + ) + typename__: Optional[Literal['PhyInterfaceDetails']] = Field( + 'PhyInterfaceDetails', alias='__typename' + ) + + +class PhyInterfaceEdge(BaseModel): + """ + Grouped PhyInterface object and associated cursor used by pagination. + """ + + cursor: String = Field(..., description='Pagination cursor for this edge.') + node: Optional[PhyInterface] = Field( + None, description='The associated PhyInterface object.' + ) + typename__: Optional[Literal['PhyInterfaceEdge']] = Field( + 'PhyInterfaceEdge', alias='__typename' + ) + + +class PhyLinkConnection(BaseModel): + """ + Grouped list of PhyLinks objects and pagination metadata. + """ + + edges: Optional[List[Optional[PhyLinkEdge]]] = Field( + None, description='List of PhyInterface objects.' + ) + pageInfo: PageInfo = Field(..., description='Pagination metadata.') + typename__: Optional[Literal['PhyLinkConnection']] = Field( + 'PhyLinkConnection', alias='__typename' + ) + + +class PhyLinkEdge(BaseModel): + cursor: String = Field(..., description='Pagination cursor for this edge.') + link: Optional[ID] = Field( + None, + description='Identifier of the link that connects this interface to the interface on the remote device', + ) + node: Optional[PhyInterface] = Field( + None, description='The associated PhyInterface object.' + ) + typename__: Optional[Literal['PhyLinkEdge']] = Field( + 'PhyLinkEdge', alias='__typename' + ) + + +class ProviderResponse(BaseModel): + """ + Response from the provider query that contains information about supported device types in the specified topology. + """ + + supportedDevices: List[String] = Field( + ..., + description='List of the supported device types in the specified topology (e.g. ios, ios xe, sros, etc.)', + ) + typename__: Optional[Literal['ProviderResponse']] = Field( + 'ProviderResponse', alias='__typename' + ) + + +class PtpDevice(Node): + """ + Representation of the device in the ptp topology. + """ + + coordinates: Coordinates = Field( + ..., description='Coordinates of the device node on the graph.' + ) + details: PtpDeviceDetails = Field(..., description='Details of the device.') + id: ID = Field(..., description='Unique identifier of the object.') + labels: Optional[List[String]] = Field( + None, + description='List of strings that can be used for grouping of synced devices.', + ) + name: String = Field(..., description='Human readable name of the device.') + ptpInterfaces: PtpInterfaceConnection = Field( + ..., description='List of ports that are present on the device.' + ) + status: NodeStatus = Field( + ..., description='Status of the device from the view of the synced topology.' + ) + typename__: Optional[Literal['PtpDevice']] = Field('PtpDevice', alias='__typename') + + +class PtpDeviceConnection(BaseModel): + """ + Grouped list of PtpDevice objects and pagination metadata. + """ + + edges: Optional[List[Optional[PtpDeviceEdge]]] = Field( + None, description='List of PtpDevice objects.' + ) + pageInfo: PageInfo = Field(..., description='Pagination metadata.') + typename__: Optional[Literal['PtpDeviceConnection']] = Field( + 'PtpDeviceConnection', alias='__typename' + ) + + +class PtpDeviceDetails(BaseModel): + """ + Details specific to PTP (Precision Time Protocol). + """ + + clockAccuracy: Optional[String] = Field( + None, + description='How accurate is the clock output to primary reference. This parameter is often automatically determined\nby the device based on the characteristics of its internal clock oscillator and how well it can track\nthe reference time.', + ) + clockClass: Optional[Int] = Field( + None, description='Measure of clock traceability.' + ) + clockId: Optional[String] = Field( + None, description='Unique identifier of the clock.' + ) + clockType: Optional[String] = Field( + None, description='Type of clock (e.g., ordinary, master).' + ) + clockVariance: Optional[String] = Field( + None, + description="Measure of clock precision. How much the clock-output varies when not synchronized to another source.\nThe variance is determined by assessing how much the local clock deviates from the ideal time over a certain period,\noften expressed in parts per billion (ppb) or as the standard deviation of the clock's offset.", + ) + domain: Optional[Int] = Field(None, description='Domain of the PTP network.') + globalPriority: Optional[Int] = Field( + None, description='Global priority of the clock (the first priority).' + ) + gmClockId: Optional[String] = Field( + None, description='Unique identifier of the grandmaster clock.' + ) + parentClockId: Optional[String] = Field( + None, description='Unique identifier of the parent clock.' + ) + ptpPortState: Optional[String] = Field( + None, description='The port state of the device.' + ) + ptpProfile: Optional[String] = Field( + None, description='PTP profile used (e.g., ITU-T G.8275.1).' + ) + timeRecoveryStatus: Optional[String] = Field( + None, + description='Indicates the current state of the time recovery process. Time recovery is the process of adjusting\nthe local clock to synchronize with a more accurate reference clock.', + ) + userPriority: Optional[Int] = Field( + None, description='User defined value of the second priority.' + ) + typename__: Optional[Literal['PtpDeviceDetails']] = Field( + 'PtpDeviceDetails', alias='__typename' + ) + + +class PtpDeviceEdge(BaseModel): + """ + Grouped PtpDevice object and associated cursor used by pagination. + """ + + cursor: String = Field(..., description='Pagination cursor for this edge.') + node: Optional[PtpDevice] = Field( + None, description='The associated PtpDevice object.' + ) + typename__: Optional[Literal['PtpDeviceEdge']] = Field( + 'PtpDeviceEdge', alias='__typename' + ) + + +class PtpDiffSynce(Node): + """ + A Ptp node that uses a different upstream path in SyncE topology + """ + + id: ID = Field(..., description='Ptp node id') + ptpUpstreamInterface: Optional[ID] = Field( + None, description="Ptp node's upstream interface" + ) + ptpUpstreamInterfaceName: Optional[String] = Field( + None, description="Ptp node's upstream interface name" + ) + ptpUpstreamInterfaceStatus: Optional[String] = Field( + None, description="Ptp node's upstream interface status" + ) + synceId: Optional[ID] = Field( + None, description='SyncE node id. This is the same device as identified' + ) + synceUpstreamInterfaceName: Optional[String] = Field( + None, description="Synce node's upstream interface name" + ) + typename__: Optional[Literal['PtpDiffSynce']] = Field( + 'PtpDiffSynce', alias='__typename' + ) + + +class PtpDiffSynceConnection(BaseModel): + """ + Grouped list of PtpDiffSynceDevice objects and pagination metadata. + """ + + edges: Optional[List[Optional[PtpDiffSynceEdge]]] = Field( + None, description='List of PtpDiffSynce objects.' + ) + pageInfo: PageInfo = Field(..., description='Pagination metadata.') + typename__: Optional[Literal['PtpDiffSynceConnection']] = Field( + 'PtpDiffSynceConnection', alias='__typename' + ) + + +class PtpDiffSynceEdge(BaseModel): + """ + Grouped PtpDiffSynceDevice object and associated cursor used by pagination. + """ + + cursor: String = Field(..., description='Pagination cursor for this edge.') + node: Optional[PtpDiffSynce] = Field( + None, description='The associated PtpDiffSynce object.' + ) + typename__: Optional[Literal['PtpDiffSynceEdge']] = Field( + 'PtpDiffSynceEdge', alias='__typename' + ) + + +class PtpInterface(Node): + """ + Port attached to the ptp device. + """ + + details: Optional[PtpInterfaceDetails] = Field( + None, description='Interface details specific to PTP (Precision Time Protocol).' + ) + id: ID = Field(..., description='Unique identifier of the object.') + name: String = Field(..., description='Human readable name of the network port.') + ptpDevice: Optional[PtpDevice] = Field( + None, description='Device that owns this interface.' + ) + ptpLinks: PtpLinkConnection = Field( + ..., description='List of links connected to remote ptp devices.' + ) + status: NodeStatus = Field( + ..., + description="Status of the interface from the view of the synced topology ('ok' or 'unknown').", + ) + typename__: Optional[Literal['PtpInterface']] = Field( + 'PtpInterface', alias='__typename' + ) + + +class PtpInterfaceConnection(BaseModel): + """ + Grouped list of PtpInterface objects and pagination metadata. + """ + + edges: Optional[List[Optional[PtpInterfaceEdge]]] = Field( + None, description='List of PtpInterface objects.' + ) + pageInfo: PageInfo = Field(..., description='Pagination metadata.') + typename__: Optional[Literal['PtpInterfaceConnection']] = Field( + 'PtpInterfaceConnection', alias='__typename' + ) + + +class PtpInterfaceDetails(BaseModel): + """ + PTP interface details. + """ + + adminOperStatus: String = Field( + ..., + description="Administrative/operational status of the interface (e.g. 'up/up', 'up/down').", + ) + ptpStatus: String = Field( + ..., + description="State of the PTP process on the interface (e.g. 'master', 'slave', 'disabled', 'passive', 'unknown').", + ) + ptsfUnusable: String = Field( + ..., + description='Unusable packet timing signal received by the slave, for example, where the packet delay variation is excessive,\nresulting in the slave being unable to meet the output clock performance requirements.', + ) + typename__: Optional[Literal['PtpInterfaceDetails']] = Field( + 'PtpInterfaceDetails', alias='__typename' + ) + + +class PtpInterfaceEdge(BaseModel): + """ + Grouped PtpInterface object and associated cursor used by pagination. + """ + + cursor: String = Field(..., description='Pagination cursor for this edge.') + node: Optional[PtpInterface] = Field( + None, description='The associated PtpInterface object.' + ) + typename__: Optional[Literal['PtpInterfaceEdge']] = Field( + 'PtpInterfaceEdge', alias='__typename' + ) + + +class PtpLinkConnection(BaseModel): + """ + Grouped list of PtpLinks objects and pagination metadata. + """ + + edges: Optional[List[Optional[PtpLinkEdge]]] = Field( + None, description='List of PtpInterface objects.' + ) + pageInfo: PageInfo = Field(..., description='Pagination metadata.') + typename__: Optional[Literal['PtpLinkConnection']] = Field( + 'PtpLinkConnection', alias='__typename' + ) + + +class PtpLinkEdge(BaseModel): + """ + Grouped PtpLink object and associated cursor used by pagination. + """ + + cursor: String = Field(..., description='Pagination cursor for this edge.') + link: Optional[ID] = Field( + None, + description='Identifier of the link that connects this interface to the interface on the remote device', + ) + node: Optional[PtpInterface] = Field( + None, description='The associated PtpInterface object.' + ) + typename__: Optional[Literal['PtpLinkEdge']] = Field( + 'PtpLinkEdge', alias='__typename' + ) + + +class PtpPath(BaseModel): + """ + Computed path from source to destination PTP clock device. + """ + + complete: Boolean = Field( + ..., + description='True if path is complete - the last element in the path represents GM clock, False otherwise.', + ) + nodes: Optional[List[ID]] = Field( + None, + description='Ordered list of node identifiers that compose path from source clock to destination clock.', + ) + typename__: Optional[Literal['PtpPath']] = Field('PtpPath', alias='__typename') + + +class RefreshCoordinatesResponse(BaseModel): + """ + Response containing a list of nodes with refreshed coordinates. + """ + + nodes: List[NodeCoordinates] = Field( + ..., description='List of refreshed nodes with their new coordinates.' + ) + typename__: Optional[Literal['RefreshCoordinatesResponse']] = Field( + 'RefreshCoordinatesResponse', alias='__typename' + ) + + +class RoutingPath(BaseModel): + """ + Computed routing path from source to destination device. + """ + + nodes: List[NodeInfo] = Field( + ..., + description='Ordered list of nodes that compose path from source to destination device.', + ) + weight: Int = Field(..., description='Total weight of the path.') + typename__: Optional[Literal['RoutingPath']] = Field( + 'RoutingPath', alias='__typename' + ) + + +class SyncResponse(BaseModel): + """ + Response from the sync query that contains information about synced devices from the network to topology. + """ + + devicesMissingInInventory: Optional[List[Optional[String]]] = Field( + None, + description='List of devices that are installed in UniConfig but are missing their metadata in DeviceMetadata collection in the\ndatabase.', + ) + devicesMissingInUniconfig: Optional[List[Optional[String]]] = Field( + None, description='List of devices that are not installed in UniConfig.' + ) + labels: List[String] = Field( + ..., + description='List of string labels that are used for grouping of synced devices.\nList content should be the same as the list of labels in the input of the sync query.', + ) + loadedDevices: JSON = Field( + ..., + description='Dictionary of devices and neighbors that are successfully synced from network to target topology.\nJSON format:\n{\n "R1": [\n {\n "from_interface": "GigabitEthernet0/0/0/0",\n "to_interface": "GigabitEthernet0/0/0/0",\n "to_device": "R7"\n },\n {\n "from_interface": "GigabitEthernet0/0/0/1",\n "to_interface": "GigabitEthernet0/0/0/1",\n "to_device": "R2"\n }\n ],\n "R2": [\n {\n "from_interface": "GigabitEthernet0/0/0/0",\n "to_interface": "GigabitEthernet0/0/0/0",\n "to_device": "R3"\n }\n ]\n}', + ) + typename__: Optional[Literal['SyncResponse']] = Field( + 'SyncResponse', alias='__typename' + ) + + +class SynceDevice(Node): + """ + Representation of the device in the synce topology. + """ + + coordinates: Coordinates = Field( + ..., description='Coordinates of the device node on the graph.' + ) + details: SynceDeviceDetails = Field(..., description='Details of the device.') + id: ID = Field(..., description='Unique identifier of the object.') + labels: Optional[List[String]] = Field( + None, + description='List of strings that can be used for grouping of synced devices.', + ) + name: String = Field(..., description='Human readable name of the device.') + status: NodeStatus = Field( + ..., description='Status of the device from the view of the synced topology.' + ) + synceInterfaces: SynceInterfaceConnection = Field( + ..., description='List of ports that are present on the device.' + ) + typename__: Optional[Literal['SynceDevice']] = Field( + 'SynceDevice', alias='__typename' + ) + + +class SynceDeviceConnection(BaseModel): + """ + Grouped list of SynceDevice objects and pagination metadata. + """ + + edges: Optional[List[Optional[SynceDeviceEdge]]] = Field( + None, description='List of SynceDevice objects.' + ) + pageInfo: PageInfo = Field(..., description='Pagination metadata.') + typename__: Optional[Literal['SynceDeviceConnection']] = Field( + 'SynceDeviceConnection', alias='__typename' + ) + + +class SynceDeviceDetails(BaseModel): + """ + Details specific to SyncE (Synchronous Ethernet). + """ + + selectedForUse: Optional[String] = Field( + None, + description='Identifier of the reference (for example, source interface) that is used to synchronize the clock.', + ) + typename__: Optional[Literal['SynceDeviceDetails']] = Field( + 'SynceDeviceDetails', alias='__typename' + ) + + +class SynceDeviceEdge(BaseModel): + """ + Grouped SynceDevice object and associated cursor used by pagination. + """ + + cursor: String = Field(..., description='Pagination cursor for this edge.') + node: Optional[SynceDevice] = Field( + None, description='The associated SynceDevice object.' + ) + typename__: Optional[Literal['SynceDeviceEdge']] = Field( + 'SynceDeviceEdge', alias='__typename' + ) + + +class SynceInterface(Node): + """ + Port attached to the SyncE device. + """ + + details: Optional[SynceInterfaceDetails] = Field( + None, description='Interface details specific to SyncE operation.' + ) + id: ID = Field(..., description='Unique identifier of the object.') + name: String = Field(..., description='Human readable name of the network port.') + status: NodeStatus = Field( + ..., + description="Status of the interface from the view of the synced topology ('ok' or 'unknown').", + ) + synceDevice: Optional[SynceDevice] = Field( + None, description='Device that owns this interface.' + ) + synceLinks: Optional[SynceLinkConnection] = Field( + None, description='Link to connected remote synce device.' + ) + typename__: Optional[Literal['SynceInterface']] = Field( + 'SynceInterface', alias='__typename' + ) + + +class SynceInterfaceConnection(BaseModel): + """ + Grouped list of SynceInterface objects and pagination metadata. + """ + + edges: Optional[List[Optional[SynceInterfaceEdge]]] = Field( + None, description='List of SynceInterface objects.' + ) + pageInfo: PageInfo = Field(..., description='Pagination metadata.') + typename__: Optional[Literal['SynceInterfaceConnection']] = Field( + 'SynceInterfaceConnection', alias='__typename' + ) + + +class SynceInterfaceDetails(BaseModel): + """ + Details specific to SyncE (Synchronous Ethernet). + """ + + notQualifiedDueTo: Optional[String] = Field( + None, + description="Information about why the interface is not qualified for SyncE synchronization\n(set to 'unknown' if the interface is qualified).", + ) + notSelectedDueTo: Optional[String] = Field( + None, + description="Information about why the interface is not selected for SyncE synchronization\n(set to 'unknown' if the interface is selected).", + ) + qualifiedForUse: Optional[String] = Field( + None, + description='Statement of whether the interface is qualified for SyncE synchronization.', + ) + rxQualityLevel: Optional[String] = Field( + None, + description="Quality of the received SyncE signal (for example, 'DNU' or 'PRC').", + ) + synceEnabled: Optional[Boolean] = Field( + None, description='Configured SyncE on the port.' + ) + typename__: Optional[Literal['SynceInterfaceDetails']] = Field( + 'SynceInterfaceDetails', alias='__typename' + ) + + +class SynceInterfaceEdge(BaseModel): + """ + Grouped SynceInterface object and associated cursor used by pagination. + """ + + cursor: String = Field(..., description='Pagination cursor for this edge.') + node: Optional[SynceInterface] = Field( + None, description='The associated SynceInterface object.' + ) + typename__: Optional[Literal['SynceInterfaceEdge']] = Field( + 'SynceInterfaceEdge', alias='__typename' + ) + + +class SynceLinkConnection(BaseModel): + """ + Grouped list of SynceLinks objects and pagination metadata. + """ + + edges: Optional[List[Optional[SynceLinkEdge]]] = Field( + None, description='List of SynceInterface objects.' + ) + pageInfo: PageInfo = Field(..., description='Pagination metadata.') + typename__: Optional[Literal['SynceLinkConnection']] = Field( + 'SynceLinkConnection', alias='__typename' + ) + + +class SynceLinkEdge(BaseModel): + """ + Grouped SynceLink object and associated cursor used by pagination. + """ + + cursor: String = Field(..., description='Pagination cursor for this edge.') + link: Optional[ID] = Field( + None, + description='Identifier of the link that connects this interface to the interface on the remote device', + ) + node: Optional[SynceInterface] = Field( + None, description='The associated SynceInterface object.' + ) + typename__: Optional[Literal['SynceLinkEdge']] = Field( + 'SynceLinkEdge', alias='__typename' + ) + + +class SyncePath(BaseModel): + """ + Computed path from source to destination SYNCE device. + """ + + complete: Boolean = Field( + ..., + description='True if path is complete - the last element in the path represents GM, False otherwise.', + ) + nodes: Optional[List[ID]] = Field( + None, + description='Ordered list of node identifiers that compose path from source device to destination device.', + ) + typename__: Optional[Literal['SyncePath']] = Field('SyncePath', alias='__typename') + + +class TopologyDevice(BaseModel): + """ + Topology and device identifier of a device. + """ + + deviceId: ID = Field(..., description='Topology-specific device identifier.') + topologyId: TopologyType = Field( + ..., description='Identifier of the topology in which device is present.' + ) + typename__: Optional[Literal['TopologyDevice']] = Field( + 'TopologyDevice', alias='__typename' + ) + + +class TopologyOverlayDevice(BaseModel): + id: ID = Field(..., description='Unique identifier of the object.') + name: String = Field(..., description='Device name.') + secondTopologyId: Optional[ID] = Field( + None, description='Document device ID from the second topology (can be null).' + ) + topologyOverlayInterfaces: TopologyOverlayInterfaceConnection = Field( + ..., description='List of ports that are present on the device.' + ) + typename__: Optional[Literal['TopologyOverlayDevice']] = Field( + 'TopologyOverlayDevice', alias='__typename' + ) + + +class TopologyOverlayDeviceConnection(BaseModel): + """ + Grouped list of TopologyOverlayDevice objects and pagination metadata. + """ + + edges: Optional[List[Optional[TopologyOverlayDeviceEdge]]] = Field( + None, description='List of TopologyOverlayDeviceEdge objects.' + ) + pageInfo: PageInfo = Field(..., description='Pagination metadata.') + typename__: Optional[Literal['TopologyOverlayDeviceConnection']] = Field( + 'TopologyOverlayDeviceConnection', alias='__typename' + ) + + +class TopologyOverlayDeviceEdge(BaseModel): + """ + Grouped TopologyOverlayDeviceEdge object and associated cursor used by pagination. + """ + + cursor: String = Field(..., description='Pagination cursor for this edge.') + node: Optional[TopologyOverlayDevice] = Field( + None, description='The associated TopologyOverlayDevice object.' + ) + typename__: Optional[Literal['TopologyOverlayDeviceEdge']] = Field( + 'TopologyOverlayDeviceEdge', alias='__typename' + ) + + +class TopologyOverlayInterface(BaseModel): + id: ID = Field(..., description='Document interface ID from the first topology') + name: String = Field(..., description='Interface name.') + secondTopologyId: Optional[ID] = Field( + None, description='Document device ID from the second topology (can be null).' + ) + topologyOverlayDevice: Optional[TopologyOverlayDevice] = Field( + None, description='Topology overlay device that owns this interface.' + ) + topologyOverlayLinks: Optional[TopologyOverlayLinkConnection] = Field( + None, description='Topology overlay neighbor interface' + ) + typename__: Optional[Literal['TopologyOverlayInterface']] = Field( + 'TopologyOverlayInterface', alias='__typename' + ) + + +class TopologyOverlayInterfaceConnection(BaseModel): + """ + Grouped list of TopologyOverlayInterface objects and pagination metadata. + """ + + edges: Optional[List[Optional[TopologyOverlayInterfaceEdge]]] = Field( + None, description='List of TopologyOverlayInterface objects.' + ) + pageInfo: PageInfo = Field(..., description='Pagination metadata.') + typename__: Optional[Literal['TopologyOverlayInterfaceConnection']] = Field( + 'TopologyOverlayInterfaceConnection', alias='__typename' + ) + + +class TopologyOverlayInterfaceEdge(BaseModel): + """ + Grouped TopologyOverlayInterface object and associated cursor used by pagination. + """ + + cursor: String = Field(..., description='Pagination cursor for this edge.') + node: Optional[TopologyOverlayInterface] = Field( + None, description='The associated TopologyOverlayInterface object.' + ) + typename__: Optional[Literal['TopologyOverlayInterfaceEdge']] = Field( + 'TopologyOverlayInterfaceEdge', alias='__typename' + ) + + +class TopologyOverlayLinkConnection(BaseModel): + """ + Grouped list of TopologyOverlayLinks objects and pagination metadata. + """ + + edges: Optional[List[Optional[TopologyOverlayLinkEdge]]] = Field( + None, description='List of TopologyOverlayInterface objects.' + ) + pageInfo: PageInfo = Field(..., description='Pagination metadata.') + typename__: Optional[Literal['TopologyOverlayLinkConnection']] = Field( + 'TopologyOverlayLinkConnection', alias='__typename' + ) + + +class TopologyOverlayLinkEdge(BaseModel): + cursor: String = Field(..., description='Pagination cursor for this edge.') + link: Optional[TopologyOverlayLinkIds] = Field( + None, + description='Identifier of the link that connects this interface to the interface on the remote device', + ) + node: Optional[TopologyOverlayInterface] = Field( + None, description='The associated TopologyOverlayInterface object.' + ) + typename__: Optional[Literal['TopologyOverlayLinkEdge']] = Field( + 'TopologyOverlayLinkEdge', alias='__typename' + ) + + +class TopologyOverlayLinkIds(BaseModel): + firstTopologyLinkId: ID = Field( + ..., + description='Identifier of the link that connects this interface to the interface on the remote device on the first topology.', + ) + secondTopologyLinkId: Optional[ID] = Field( + None, + description='Identifier of the link that connects this interface to the interface on the remote device on the second topology.', + ) + typename__: Optional[Literal['TopologyOverlayLinkIds']] = Field( + 'TopologyOverlayLinkIds', alias='__typename' + ) + + +class TopologyResponse(BaseModel): + """ + Response from the topologyDiff query that contains diff between two databases. + """ + + diffData: Optional[JSON] = Field( + None, + description='Created diff between two databases. Format of the output JSON (\'data\' represents database document):\n{\n "added": {"PhyDevice": [{data}], "PhyInterface": [], ...},\n "deleted": {"PhyDevice": [{data}], "PhyInterface": [], ...},\n "changed": {"PhyDevice": [{"new": {data}, "old"}: {data}], "PhyInterface": [{"new": {data}, "old": {data}], ...}\n}', + ) + typename__: Optional[Literal['TopologyResponse']] = Field( + 'TopologyResponse', alias='__typename' + ) + + +class CoordinatesInput(BaseModel): + """ + Input of the updateCoordinates mutation that contains information about updated coordinates of a node. + """ + + nodeName: String = Field(..., description='Name of the node in the topology.') + nodeType: CoordinatesNodeType = Field( + ..., description='Type of the node in the topology.' + ) + protocolType: Optional[BgpLsProtocolType] = Field( + None, + description='Type of protocol (In case of network devices, necessary in case of NETWORK nodeType)', + ) + x: Float = Field( + ..., description='Updated horizontal coordinate of the node on the graph.' + ) + y: Float = Field( + ..., description='Updated vertical coordinate of the node on the graph.' + ) + typename__: Optional[Literal['CoordinatesInput']] = Field( + 'CoordinatesInput', alias='__typename' + ) + + +class DeviceMetadataFilter(BaseModel): + """ + Filter for Metadata device type based on device name, or other attributes. + """ + + deviceName: Optional[String] = Field(None, description='Regex of device name.') + polygon: Optional[List[List[List[Float]]]] = Field( + None, + description='A GeoJSON Polygon shape used for filtering devices based on their location in this area.\n\nThe GeoJSON Polygon consists of a series of closed LineString objects (ring-like).\nThese Linear Ring objects consist of four or more coordinate pairs with the first and last coordinate\npair being equal. Coordinate pairs of a Polygon are an array of linear ring coordinate arrays.\nThe first element in the array represents the exterior ring.\nAny subsequent elements represent interior rings (holes within the surface).\n\nThe orientation of the first linear ring is crucial: the right-hand-rule is applied, so that the area to the left\nof the path of the linear ring (when walking on the surface of the Earth) is considered to be the “interior”\nof the polygon. All other linear rings must be contained within this interior.\n\nExample with a hole:\n[\n [\n [100.0, 0.0],\n [101.0, 0.0],\n [101.0, 1.0],\n [100.0, 1.0],\n [100.0, 0.0]\n ],\n [\n [100.8, 0.8],\n [100.8, 0.2],\n [100.2, 0.2],\n [100.2, 0.8],\n [100.8, 0.8]\n ]\n]', + ) + topologyType: Optional[TopologyType] = Field( + None, description='Topology in which device must be present.' + ) + typename__: Optional[Literal['DeviceMetadataFilter']] = Field( + 'DeviceMetadataFilter', alias='__typename' + ) + + +class MplsDeviceFilter(BaseModel): + """ + Filter for MplsDevice type based on device label and device name. + """ + + label: Optional[String] = Field(None, description='Device label.') + name: Optional[String] = Field(None, description='Regex of device name.') + typename__: Optional[Literal['MplsDeviceFilter']] = Field( + 'MplsDeviceFilter', alias='__typename' + ) + + +class MplsInterfaceFilter(BaseModel): + """ + Filter for MplsInterface type based on the current interface status and name of the device. + """ + + name: Optional[String] = Field(None, description='Regex of interface name.') + status: Optional[NodeStatus] = Field( + None, + description='Status of the interface from the view of the synced topology.', + ) + typename__: Optional[Literal['MplsInterfaceFilter']] = Field( + 'MplsInterfaceFilter', alias='__typename' + ) + + +class NetDeviceFilter(BaseModel): + """ + Filter for NetDevice type based on router identifier and area identifier. + """ + + ospfAreaId: Optional[String] = Field( + None, + description='OSPF area identifier formatted as IPv4 address (for example, 0.0.0.0 represents area 0).', + ) + routerId: Optional[String] = Field( + None, + description='Regex of router identifier of the routing entity (usually IPv4 address).', + ) + typename__: Optional[Literal['NetDeviceFilter']] = Field( + 'NetDeviceFilter', alias='__typename' + ) + + +class NetInterfaceFilter(BaseModel): + """ + Filter for NetInterface type based on the configured IP address. + """ + + ipAddress: Optional[String] = Field( + None, description='Regex of IP address configured on the interface.' + ) + typename__: Optional[Literal['NetInterfaceFilter']] = Field( + 'NetInterfaceFilter', alias='__typename' + ) + + +class NetNetworkFilter(BaseModel): + """ + Filter for NetNetwork type based on the subnet and route type. + """ + + ospfRouteType: Optional[Int] = Field( + None, description='Type of the OSPF network (LSA type).' + ) + subnet: Optional[String] = Field( + None, + description='Regex of network address including prefix length (e.g. 10.0.0.0/24)', + ) + typename__: Optional[Literal['NetNetworkFilter']] = Field( + 'NetNetworkFilter', alias='__typename' + ) + + +class PhyDeviceFilter(BaseModel): + """ + Filter for PhyDevice type based on device label and device name. + """ + + label: Optional[String] = Field(None, description='Device label.') + name: Optional[String] = Field(None, description='Regex of device name.') + typename__: Optional[Literal['PhyDeviceFilter']] = Field( + 'PhyDeviceFilter', alias='__typename' + ) + + +class PhyInterfaceFilter(BaseModel): + """ + Filter for PhyInterface type based on the current interface status and name of the device. + """ + + name: Optional[String] = Field(None, description='Regex of interface name.') + status: Optional[String] = Field( + None, + description='Status of the interface from the view of the synced topology.', + ) + typename__: Optional[Literal['PhyInterfaceFilter']] = Field( + 'PhyInterfaceFilter', alias='__typename' + ) + + +class PtpDeviceFilter(BaseModel): + """ + Filter for PtpDevice type based on device label and device name. + """ + + clockAccuracy: Optional[String] = Field( + None, description='Regex: clock accuracy to primary reference.' + ) + clockClass: Optional[Int] = Field( + None, description='Measure of clock traceability.' + ) + clockId: Optional[String] = Field( + None, description='Regex: Unique identifier of the clock.' + ) + clockType: Optional[String] = Field( + None, description='Regex: Type of clock (e.g., ordinary, master).' + ) + clockVariance: Optional[String] = Field( + None, description='Regex: measure of clock precision.' + ) + domain: Optional[Int] = Field(None, description='Domain of the PTP network.') + label: Optional[String] = Field(None, description='Device label.') + name: Optional[String] = Field(None, description='Regex of device name.') + ptpProfile: Optional[String] = Field( + None, description='PTP profile used (e.g., ITU-T G.8275.1).' + ) + timeRecoveryStatus: Optional[String] = Field( + None, + description='Regex: indicates the current state of the time recovery process.', + ) + typename__: Optional[Literal['PtpDeviceFilter']] = Field( + 'PtpDeviceFilter', alias='__typename' + ) + + +class PtpInterfaceFilter(BaseModel): + """ + Filter for PtpInterface type based on the current interface status and name of the device. + """ + + adminOperStatus: Optional[String] = Field( + None, + description="Regex of administrative/operational status on the interface (e.g. 'up/up', 'up/down').", + ) + name: Optional[String] = Field(None, description='Regex of interface name.') + ptpStatus: Optional[String] = Field( + None, description='Regex of the PTP process status on the interface.' + ) + ptsfUnusable: Optional[String] = Field( + None, + description='Regex of unusable packet timing signal received by the slave.', + ) + status: Optional[NodeStatus] = Field( + None, + description='Status of the interface from the view of the synced topology.', + ) + typename__: Optional[Literal['PtpInterfaceFilter']] = Field( + 'PtpInterfaceFilter', alias='__typename' + ) + + +class SynceDeviceFilter(BaseModel): + """ + Filter for SynceDevice type based on device label and device name. + """ + + label: Optional[String] = Field(None, description='Device label.') + name: Optional[String] = Field(None, description='Regex of device name.') + selectedForUse: Optional[String] = Field( + None, + description='Regex: identifier of the reference (for example, source interface) that is used to synchronize the clock.', + ) + typename__: Optional[Literal['SynceDeviceFilter']] = Field( + 'SynceDeviceFilter', alias='__typename' + ) + + +class SynceInterfaceFilter(BaseModel): + """ + Filter for SynceInterface type based on the current interface status and name of the device. + """ + + name: Optional[String] = Field(None, description='Regex of interface name.') + notQualifiedDueTo: Optional[String] = Field( + None, + description='Regex: Information about why the interface is not qualified for SyncE synchronization.', + ) + notSelectedDueTo: Optional[String] = Field( + None, + description='Regex: Information about why the interface is not selected for SyncE synchronization.', + ) + qualifiedForUse: Optional[String] = Field( + None, + description='Regex: Statement of whether the interface is qualified for SyncE synchronization.', + ) + rxQualityLevel: Optional[String] = Field( + None, + description="Regex: Quality of the received SyncE signal (for example, 'DNU' or 'PRC').", + ) + status: Optional[NodeStatus] = Field( + None, + description='Status of the interface from the view of the synced topology.', + ) + synceEnabled: Optional[Boolean] = Field( + None, description='Configured SyncE on the port.' + ) + typename__: Optional[Literal['SynceInterfaceFilter']] = Field( + 'SynceInterfaceFilter', alias='__typename' + ) + + +class TopologyOverlayDeviceFilter(BaseModel): + """ + Filter for TopologyOverlayDevice type based on device name. + """ + + name: Optional[String] = Field(None, description='Regex of device name.') + typename__: Optional[Literal['TopologyOverlayDeviceFilter']] = Field( + 'TopologyOverlayDeviceFilter', alias='__typename' + ) + + +class TopologyOverlayInterfaceFilter(BaseModel): + """ + Filter for TopologyOverlayInterface type based on the name of the device. + """ + + name: Optional[String] = Field(None, description='Regex of interface name.') + typename__: Optional[Literal['TopologyOverlayInterfaceFilter']] = Field( + 'TopologyOverlayInterfaceFilter', alias='__typename' + ) diff --git a/utils/graphql-pydantic-generator/CHANGELOG.md b/utils/graphql-pydantic-generator/CHANGELOG.md new file mode 100644 index 0000000..5eb95f4 --- /dev/null +++ b/utils/graphql-pydantic-generator/CHANGELOG.md @@ -0,0 +1,2 @@ +# 0.1.0 +- Tool to generate Pydantic V2 model classes from GraphQL files. diff --git a/utils/graphql-pydantic-generator/README.md b/utils/graphql-pydantic-generator/README.md new file mode 100644 index 0000000..e98f236 --- /dev/null +++ b/utils/graphql-pydantic-generator/README.md @@ -0,0 +1,25 @@ +# GraphQL Pydantic Generator + +## Overview + +A utility wrapper for datamodel-code-generator that generates Pydantic v2 model from single GraphQL schema file, or +from directory that contains multiple GraphQL schema files including any nested subdirectories with other GraphQL +schem files. + +## Usage + +1. Activate or create a new virtualenv +```bash +user@ntb:~$ cd frinx-services-python-api/utils/graphql-pydantic-generator +user@ntb:~/frinx-services-python-api/utils/graphql-pydantic-generator$ poetry env use 3.10 +``` + +2. Install the project dependencies +```bash +user@ntb:~/frinx-services-python-api/utils/graphql-pydantic-generator$ poetry install +``` + +3. Generate Pydantic model from GraphQL schema +```bash +user@ntb:~/frinx-services-python-api/utils/graphql-pydantic-generator$ poetry run generate --input_path ~/topology-discovery/topology_discovery/api/graphql/schemas/ --output_path ~/frinx-services-python-api/topology-discovery/python/frinx_api/topology_discovery/__init__.py +``` \ No newline at end of file diff --git a/utils/graphql-pydantic-generator/graphql_pydantic_generator/__init__.py b/utils/graphql-pydantic-generator/graphql_pydantic_generator/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/utils/graphql-pydantic-generator/graphql_pydantic_generator/__main__.py b/utils/graphql-pydantic-generator/graphql_pydantic_generator/__main__.py new file mode 100644 index 0000000..cb75269 --- /dev/null +++ b/utils/graphql-pydantic-generator/graphql_pydantic_generator/__main__.py @@ -0,0 +1,52 @@ +from pathlib import Path + +import click +from datamodel_code_generator import DataModelType, InputFileType +from datamodel_code_generator import generate as generate_pydantic +from graphql import build_schema, print_schema + + +@click.command() +@click.option('--input_path', '-i', required=True, type=click.Path(exists=True, file_okay=True), + help='Path to single GraphQL file or folder with multiple GraphQL schemas.') +@click.option('--output_path', '-o', required=True, type=click.Path(), + help='Path to where generated Pydantic classes will be placed.') +def generate(input_path: str, output_path: str): + if not output_path.endswith('.py'): + click.echo(f'Failed. The parameter --output_path has to contain python file.') + return + + schema = join_graphql_files(input_path=input_path) + if schema == "": + click.echo(f'Failed. There are no GraphQL schema to generate Pydantic model.') + return + + generate_pydantic( + input_=schema, + input_file_type=InputFileType.GraphQL, + output=Path(output_path), + output_model_type=DataModelType.PydanticV2BaseModel, + ) + click.echo(f'Successful') + +def join_graphql_files(input_path: str) -> str: + path = Path(input_path) + + schema: str + if path.is_dir(): + schemas = [] + for file in path.glob("**/*.graphql"): + with open(file, "r", encoding="utf-8") as f: + schemas.append(f.read()) + schema = print_schema(build_schema("\n".join(schemas))) + elif path.is_file(): + with open(path, "r", encoding="utf-8") as f: + schema = print_schema(build_schema(f.read())) + else: + click.echo(f'Failed. Input has to by GraphQL file or directory with GraphQL files.') + + return schema + + +if __name__ == "__main__": + generate() diff --git a/utils/graphql-pydantic-generator/poetry.lock b/utils/graphql-pydantic-generator/poetry.lock new file mode 100644 index 0000000..ed14a10 --- /dev/null +++ b/utils/graphql-pydantic-generator/poetry.lock @@ -0,0 +1,794 @@ +# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. + +[[package]] +name = "annotated-types" +version = "0.7.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +files = [ + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, +] + +[[package]] +name = "argcomplete" +version = "3.5.1" +description = "Bash tab completion for argparse" +optional = false +python-versions = ">=3.8" +files = [ + {file = "argcomplete-3.5.1-py3-none-any.whl", hash = "sha256:1a1d148bdaa3e3b93454900163403df41448a248af01b6e849edc5ac08e6c363"}, + {file = "argcomplete-3.5.1.tar.gz", hash = "sha256:eb1ee355aa2557bd3d0145de7b06b2a45b0ce461e1e7813f5d066039ab4177b4"}, +] + +[package.extras] +test = ["coverage", "mypy", "pexpect", "ruff", "wheel"] + +[[package]] +name = "black" +version = "24.10.0" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.9" +files = [ + {file = "black-24.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6668650ea4b685440857138e5fe40cde4d652633b1bdffc62933d0db4ed9812"}, + {file = "black-24.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1c536fcf674217e87b8cc3657b81809d3c085d7bf3ef262ead700da345bfa6ea"}, + {file = "black-24.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:649fff99a20bd06c6f727d2a27f401331dc0cc861fb69cde910fe95b01b5928f"}, + {file = "black-24.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:fe4d6476887de70546212c99ac9bd803d90b42fc4767f058a0baa895013fbb3e"}, + {file = "black-24.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5a2221696a8224e335c28816a9d331a6c2ae15a2ee34ec857dcf3e45dbfa99ad"}, + {file = "black-24.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f9da3333530dbcecc1be13e69c250ed8dfa67f43c4005fb537bb426e19200d50"}, + {file = "black-24.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4007b1393d902b48b36958a216c20c4482f601569d19ed1df294a496eb366392"}, + {file = "black-24.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:394d4ddc64782e51153eadcaaca95144ac4c35e27ef9b0a42e121ae7e57a9175"}, + {file = "black-24.10.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b5e39e0fae001df40f95bd8cc36b9165c5e2ea88900167bddf258bacef9bbdc3"}, + {file = "black-24.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d37d422772111794b26757c5b55a3eade028aa3fde43121ab7b673d050949d65"}, + {file = "black-24.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:14b3502784f09ce2443830e3133dacf2c0110d45191ed470ecb04d0f5f6fcb0f"}, + {file = "black-24.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:30d2c30dc5139211dda799758559d1b049f7f14c580c409d6ad925b74a4208a8"}, + {file = "black-24.10.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1cbacacb19e922a1d75ef2b6ccaefcd6e93a2c05ede32f06a21386a04cedb981"}, + {file = "black-24.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1f93102e0c5bb3907451063e08b9876dbeac810e7da5a8bfb7aeb5a9ef89066b"}, + {file = "black-24.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ddacb691cdcdf77b96f549cf9591701d8db36b2f19519373d60d31746068dbf2"}, + {file = "black-24.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:680359d932801c76d2e9c9068d05c6b107f2584b2a5b88831c83962eb9984c1b"}, + {file = "black-24.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:17374989640fbca88b6a448129cd1745c5eb8d9547b464f281b251dd00155ccd"}, + {file = "black-24.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:63f626344343083322233f175aaf372d326de8436f5928c042639a4afbbf1d3f"}, + {file = "black-24.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfa1d0cb6200857f1923b602f978386a3a2758a65b52e0950299ea014be6800"}, + {file = "black-24.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:2cd9c95431d94adc56600710f8813ee27eea544dd118d45896bb734e9d7a0dc7"}, + {file = "black-24.10.0-py3-none-any.whl", hash = "sha256:3bb2b7a1f7b685f85b11fed1ef10f8a9148bceb49853e47a294a3dd963c1dd7d"}, + {file = "black-24.10.0.tar.gz", hash = "sha256:846ea64c97afe3bc677b761787993be4991810ecc7a4a937816dd6bddedc4875"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.10)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "datamodel-code-generator" +version = "0.26.3" +description = "Datamodel Code Generator" +optional = false +python-versions = "<4.0,>=3.8" +files = [ + {file = "datamodel_code_generator-0.26.3-py3-none-any.whl", hash = "sha256:f1f8f1cef14f138fa239f987d4640837bb68d53c5f08d8673a7bde275b929fd8"}, + {file = "datamodel_code_generator-0.26.3.tar.gz", hash = "sha256:b58e0800eb6448e1d1df02f4586207c1e3631c4a188531d154b00b3cf2f95fd8"}, +] + +[package.dependencies] +argcomplete = ">=1.10,<4.0" +black = ">=19.10b0" +genson = ">=1.2.1,<2.0" +inflect = ">=4.1.0,<6.0" +isort = ">=4.3.21,<6.0" +jinja2 = ">=2.10.1,<4.0" +packaging = "*" +pydantic = [ + {version = ">=1.10.0,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.4.0 || >2.4.0,<3.0", extras = ["email"], markers = "python_version >= \"3.12\" and python_version < \"4.0\""}, + {version = ">=1.10.0,<2.4.0 || >2.4.0,<3.0", extras = ["email"], markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, + {version = ">=1.9.0,<2.4.0 || >2.4.0,<3.0", extras = ["email"], markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, +] +pyyaml = ">=6.0.1" +toml = {version = ">=0.10.0,<1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +debug = ["PySnooper (>=0.4.1,<2.0.0)"] +graphql = ["graphql-core (>=3.2.3,<4.0.0)"] +http = ["httpx"] +validation = ["openapi-spec-validator (>=0.2.8,<0.7.0)", "prance (>=0.18.2)"] + +[[package]] +name = "dnspython" +version = "2.7.0" +description = "DNS toolkit" +optional = false +python-versions = ">=3.9" +files = [ + {file = "dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86"}, + {file = "dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1"}, +] + +[package.extras] +dev = ["black (>=23.1.0)", "coverage (>=7.0)", "flake8 (>=7)", "hypercorn (>=0.16.0)", "mypy (>=1.8)", "pylint (>=3)", "pytest (>=7.4)", "pytest-cov (>=4.1.0)", "quart-trio (>=0.11.0)", "sphinx (>=7.2.0)", "sphinx-rtd-theme (>=2.0.0)", "twine (>=4.0.0)", "wheel (>=0.42.0)"] +dnssec = ["cryptography (>=43)"] +doh = ["h2 (>=4.1.0)", "httpcore (>=1.0.0)", "httpx (>=0.26.0)"] +doq = ["aioquic (>=1.0.0)"] +idna = ["idna (>=3.7)"] +trio = ["trio (>=0.23)"] +wmi = ["wmi (>=1.5.1)"] + +[[package]] +name = "email-validator" +version = "2.2.0" +description = "A robust email address syntax and deliverability validation library." +optional = false +python-versions = ">=3.8" +files = [ + {file = "email_validator-2.2.0-py3-none-any.whl", hash = "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631"}, + {file = "email_validator-2.2.0.tar.gz", hash = "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7"}, +] + +[package.dependencies] +dnspython = ">=2.0.0" +idna = ">=2.0.0" + +[[package]] +name = "exceptiongroup" +version = "1.2.2" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "genson" +version = "1.3.0" +description = "GenSON is a powerful, user-friendly JSON Schema generator." +optional = false +python-versions = "*" +files = [ + {file = "genson-1.3.0-py3-none-any.whl", hash = "sha256:468feccd00274cc7e4c09e84b08704270ba8d95232aa280f65b986139cec67f7"}, + {file = "genson-1.3.0.tar.gz", hash = "sha256:e02db9ac2e3fd29e65b5286f7135762e2cd8a986537c075b06fc5f1517308e37"}, +] + +[[package]] +name = "graphql-core" +version = "3.2.5" +description = "GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL." +optional = false +python-versions = "<4,>=3.6" +files = [ + {file = "graphql_core-3.2.5-py3-none-any.whl", hash = "sha256:2f150d5096448aa4f8ab26268567bbfeef823769893b39c1a2e1409590939c8a"}, + {file = "graphql_core-3.2.5.tar.gz", hash = "sha256:e671b90ed653c808715645e3998b7ab67d382d55467b7e2978549111bbabf8d5"}, +] + +[[package]] +name = "idna" +version = "3.10" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.6" +files = [ + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, +] + +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + +[[package]] +name = "inflect" +version = "5.6.2" +description = "Correctly generate plurals, singular nouns, ordinals, indefinite articles; convert numbers to words" +optional = false +python-versions = ">=3.7" +files = [ + {file = "inflect-5.6.2-py3-none-any.whl", hash = "sha256:b45d91a4a28a4e617ff1821117439b06eaa86e2a4573154af0149e9be6687238"}, + {file = "inflect-5.6.2.tar.gz", hash = "sha256:aadc7ed73928f5e014129794bbac03058cca35d0a973a5fc4eb45c7fa26005f9"}, +] + +[package.extras] +docs = ["jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx"] +testing = ["pygments", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "isort" +version = "5.13.2" +description = "A Python utility / library to sort Python imports." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, + {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, +] + +[package.extras] +colors = ["colorama (>=0.4.6)"] + +[[package]] +name = "jinja2" +version = "3.1.4" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "markupsafe" +version = "3.0.2" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.9" +files = [ + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, + {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, +] + +[[package]] +name = "mypy" +version = "1.3.0" +description = "Optional static typing for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mypy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c1eb485cea53f4f5284e5baf92902cd0088b24984f4209e25981cc359d64448d"}, + {file = "mypy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4c99c3ecf223cf2952638da9cd82793d8f3c0c5fa8b6ae2b2d9ed1e1ff51ba85"}, + {file = "mypy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:550a8b3a19bb6589679a7c3c31f64312e7ff482a816c96e0cecec9ad3a7564dd"}, + {file = "mypy-1.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cbc07246253b9e3d7d74c9ff948cd0fd7a71afcc2b77c7f0a59c26e9395cb152"}, + {file = "mypy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:a22435632710a4fcf8acf86cbd0d69f68ac389a3892cb23fbad176d1cddaf228"}, + {file = "mypy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6e33bb8b2613614a33dff70565f4c803f889ebd2f859466e42b46e1df76018dd"}, + {file = "mypy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7d23370d2a6b7a71dc65d1266f9a34e4cde9e8e21511322415db4b26f46f6b8c"}, + {file = "mypy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:658fe7b674769a0770d4b26cb4d6f005e88a442fe82446f020be8e5f5efb2fae"}, + {file = "mypy-1.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6e42d29e324cdda61daaec2336c42512e59c7c375340bd202efa1fe0f7b8f8ca"}, + {file = "mypy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:d0b6c62206e04061e27009481cb0ec966f7d6172b5b936f3ead3d74f29fe3dcf"}, + {file = "mypy-1.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:76ec771e2342f1b558c36d49900dfe81d140361dd0d2df6cd71b3db1be155409"}, + {file = "mypy-1.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebc95f8386314272bbc817026f8ce8f4f0d2ef7ae44f947c4664efac9adec929"}, + {file = "mypy-1.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:faff86aa10c1aa4a10e1a301de160f3d8fc8703b88c7e98de46b531ff1276a9a"}, + {file = "mypy-1.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:8c5979d0deb27e0f4479bee18ea0f83732a893e81b78e62e2dda3e7e518c92ee"}, + {file = "mypy-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c5d2cc54175bab47011b09688b418db71403aefad07cbcd62d44010543fc143f"}, + {file = "mypy-1.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:87df44954c31d86df96c8bd6e80dfcd773473e877ac6176a8e29898bfb3501cb"}, + {file = "mypy-1.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:473117e310febe632ddf10e745a355714e771ffe534f06db40702775056614c4"}, + {file = "mypy-1.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:74bc9b6e0e79808bf8678d7678b2ae3736ea72d56eede3820bd3849823e7f305"}, + {file = "mypy-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:44797d031a41516fcf5cbfa652265bb994e53e51994c1bd649ffcd0c3a7eccbf"}, + {file = "mypy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ddae0f39ca146972ff6bb4399f3b2943884a774b8771ea0a8f50e971f5ea5ba8"}, + {file = "mypy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c4c42c60a8103ead4c1c060ac3cdd3ff01e18fddce6f1016e08939647a0e703"}, + {file = "mypy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e86c2c6852f62f8f2b24cb7a613ebe8e0c7dc1402c61d36a609174f63e0ff017"}, + {file = "mypy-1.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f9dca1e257d4cc129517779226753dbefb4f2266c4eaad610fc15c6a7e14283e"}, + {file = "mypy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:95d8d31a7713510685b05fbb18d6ac287a56c8f6554d88c19e73f724a445448a"}, + {file = "mypy-1.3.0-py3-none-any.whl", hash = "sha256:a8763e72d5d9574d45ce5881962bc8e9046bf7b375b0abf031f3e6811732a897"}, + {file = "mypy-1.3.0.tar.gz", hash = "sha256:e1f4d16e296f5135624b34e8fb741eb0eadedca90862405b1f1fde2040b9bd11"}, +] + +[package.dependencies] +mypy-extensions = ">=1.0.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = ">=3.10" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] +python2 = ["typed-ast (>=1.4.0,<2)"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "nodeenv" +version = "1.9.1" +description = "Node.js virtual environment builder" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, + {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, +] + +[[package]] +name = "packaging" +version = "24.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, +] + +[[package]] +name = "pathspec" +version = "0.12.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, +] + +[[package]] +name = "platformdirs" +version = "4.3.6" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, + {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.11.2)"] + +[[package]] +name = "pluggy" +version = "1.5.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pydantic" +version = "2.10.2" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic-2.10.2-py3-none-any.whl", hash = "sha256:cfb96e45951117c3024e6b67b25cdc33a3cb7b2fa62e239f7af1378358a1d99e"}, + {file = "pydantic-2.10.2.tar.gz", hash = "sha256:2bc2d7f17232e0841cbba4641e65ba1eb6fafb3a08de3a091ff3ce14a197c4fa"}, +] + +[package.dependencies] +annotated-types = ">=0.6.0" +email-validator = {version = ">=2.0.0", optional = true, markers = "extra == \"email\""} +pydantic-core = "2.27.1" +typing-extensions = ">=4.12.2" + +[package.extras] +email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata"] + +[[package]] +name = "pydantic-core" +version = "2.27.1" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic_core-2.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:71a5e35c75c021aaf400ac048dacc855f000bdfed91614b4a726f7432f1f3d6a"}, + {file = "pydantic_core-2.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:121ceb0e822f79163dd4699e4c54f5ad38b157084d97b34de8b232bcaad70278"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4603137322c18eaf2e06a4495f426aa8d8388940f3c457e7548145011bb68e05"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a33cd6ad9017bbeaa9ed78a2e0752c5e250eafb9534f308e7a5f7849b0b1bfb4"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15cc53a3179ba0fcefe1e3ae50beb2784dede4003ad2dfd24f81bba4b23a454f"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45d9c5eb9273aa50999ad6adc6be5e0ecea7e09dbd0d31bd0c65a55a2592ca08"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bf7b66ce12a2ac52d16f776b31d16d91033150266eb796967a7e4621707e4f6"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:655d7dd86f26cb15ce8a431036f66ce0318648f8853d709b4167786ec2fa4807"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:5556470f1a2157031e676f776c2bc20acd34c1990ca5f7e56f1ebf938b9ab57c"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206"}, + {file = "pydantic_core-2.27.1-cp310-none-win32.whl", hash = "sha256:f5a823165e6d04ccea61a9f0576f345f8ce40ed533013580e087bd4d7442b52c"}, + {file = "pydantic_core-2.27.1-cp310-none-win_amd64.whl", hash = "sha256:57866a76e0b3823e0b56692d1a0bf722bffb324839bb5b7226a7dbd6c9a40b17"}, + {file = "pydantic_core-2.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac3b20653bdbe160febbea8aa6c079d3df19310d50ac314911ed8cc4eb7f8cb8"}, + {file = "pydantic_core-2.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a5a8e19d7c707c4cadb8c18f5f60c843052ae83c20fa7d44f41594c644a1d330"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f7059ca8d64fea7f238994c97d91f75965216bcbe5f695bb44f354893f11d52"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bed0f8a0eeea9fb72937ba118f9db0cb7e90773462af7962d382445f3005e5a4"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3cb37038123447cf0f3ea4c74751f6a9d7afef0eb71aa07bf5f652b5e6a132c"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84286494f6c5d05243456e04223d5a9417d7f443c3b76065e75001beb26f88de"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acc07b2cfc5b835444b44a9956846b578d27beeacd4b52e45489e93276241025"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4fefee876e07a6e9aad7a8c8c9f85b0cdbe7df52b8a9552307b09050f7512c7e"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:258c57abf1188926c774a4c94dd29237e77eda19462e5bb901d88adcab6af919"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:35c14ac45fcfdf7167ca76cc80b2001205a8d5d16d80524e13508371fb8cdd9c"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d1b26e1dff225c31897696cab7d4f0a315d4c0d9e8666dbffdb28216f3b17fdc"}, + {file = "pydantic_core-2.27.1-cp311-none-win32.whl", hash = "sha256:2cdf7d86886bc6982354862204ae3b2f7f96f21a3eb0ba5ca0ac42c7b38598b9"}, + {file = "pydantic_core-2.27.1-cp311-none-win_amd64.whl", hash = "sha256:3af385b0cee8df3746c3f406f38bcbfdc9041b5c2d5ce3e5fc6637256e60bbc5"}, + {file = "pydantic_core-2.27.1-cp311-none-win_arm64.whl", hash = "sha256:81f2ec23ddc1b476ff96563f2e8d723830b06dceae348ce02914a37cb4e74b89"}, + {file = "pydantic_core-2.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9cbd94fc661d2bab2bc702cddd2d3370bbdcc4cd0f8f57488a81bcce90c7a54f"}, + {file = "pydantic_core-2.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5f8c4718cd44ec1580e180cb739713ecda2bdee1341084c1467802a417fe0f02"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15aae984e46de8d376df515f00450d1522077254ef6b7ce189b38ecee7c9677c"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ba5e3963344ff25fc8c40da90f44b0afca8cfd89d12964feb79ac1411a260ac"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:992cea5f4f3b29d6b4f7f1726ed8ee46c8331c6b4eed6db5b40134c6fe1768bb"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0325336f348dbee6550d129b1627cb8f5351a9dc91aad141ffb96d4937bd9529"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7597c07fbd11515f654d6ece3d0e4e5093edc30a436c63142d9a4b8e22f19c35"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3bbd5d8cc692616d5ef6fbbbd50dbec142c7e6ad9beb66b78a96e9c16729b089"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:dc61505e73298a84a2f317255fcc72b710b72980f3a1f670447a21efc88f8381"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:e1f735dc43da318cad19b4173dd1ffce1d84aafd6c9b782b3abc04a0d5a6f5bb"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f4e5658dbffe8843a0f12366a4c2d1c316dbe09bb4dfbdc9d2d9cd6031de8aae"}, + {file = "pydantic_core-2.27.1-cp312-none-win32.whl", hash = "sha256:672ebbe820bb37988c4d136eca2652ee114992d5d41c7e4858cdd90ea94ffe5c"}, + {file = "pydantic_core-2.27.1-cp312-none-win_amd64.whl", hash = "sha256:66ff044fd0bb1768688aecbe28b6190f6e799349221fb0de0e6f4048eca14c16"}, + {file = "pydantic_core-2.27.1-cp312-none-win_arm64.whl", hash = "sha256:9a3b0793b1bbfd4146304e23d90045f2a9b5fd5823aa682665fbdaf2a6c28f3e"}, + {file = "pydantic_core-2.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f216dbce0e60e4d03e0c4353c7023b202d95cbaeff12e5fd2e82ea0a66905073"}, + {file = "pydantic_core-2.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a2e02889071850bbfd36b56fd6bc98945e23670773bc7a76657e90e6b6603c08"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42b0e23f119b2b456d07ca91b307ae167cc3f6c846a7b169fca5326e32fdc6cf"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:764be71193f87d460a03f1f7385a82e226639732214b402f9aa61f0d025f0737"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c00666a3bd2f84920a4e94434f5974d7bbc57e461318d6bb34ce9cdbbc1f6b2"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ccaa88b24eebc0f849ce0a4d09e8a408ec5a94afff395eb69baf868f5183107"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65af9088ac534313e1963443d0ec360bb2b9cba6c2909478d22c2e363d98a51"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206b5cf6f0c513baffaeae7bd817717140770c74528f3e4c3e1cec7871ddd61a"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:062f60e512fc7fff8b8a9d680ff0ddaaef0193dba9fa83e679c0c5f5fbd018bc"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:a0697803ed7d4af5e4c1adf1670af078f8fcab7a86350e969f454daf598c4960"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:58ca98a950171f3151c603aeea9303ef6c235f692fe555e883591103da709b23"}, + {file = "pydantic_core-2.27.1-cp313-none-win32.whl", hash = "sha256:8065914ff79f7eab1599bd80406681f0ad08f8e47c880f17b416c9f8f7a26d05"}, + {file = "pydantic_core-2.27.1-cp313-none-win_amd64.whl", hash = "sha256:ba630d5e3db74c79300d9a5bdaaf6200172b107f263c98a0539eeecb857b2337"}, + {file = "pydantic_core-2.27.1-cp313-none-win_arm64.whl", hash = "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5"}, + {file = "pydantic_core-2.27.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:5897bec80a09b4084aee23f9b73a9477a46c3304ad1d2d07acca19723fb1de62"}, + {file = "pydantic_core-2.27.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d0165ab2914379bd56908c02294ed8405c252250668ebcb438a55494c69f44ab"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b9af86e1d8e4cfc82c2022bfaa6f459381a50b94a29e95dcdda8442d6d83864"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f6c8a66741c5f5447e047ab0ba7a1c61d1e95580d64bce852e3df1f895c4067"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a42d6a8156ff78981f8aa56eb6394114e0dedb217cf8b729f438f643608cbcd"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64c65f40b4cd8b0e049a8edde07e38b476da7e3aaebe63287c899d2cff253fa5"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdcf339322a3fae5cbd504edcefddd5a50d9ee00d968696846f089b4432cf78"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bf99c8404f008750c846cb4ac4667b798a9f7de673ff719d705d9b2d6de49c5f"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8f1edcea27918d748c7e5e4d917297b2a0ab80cad10f86631e488b7cddf76a36"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:159cac0a3d096f79ab6a44d77a961917219707e2a130739c64d4dd46281f5c2a"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:029d9757eb621cc6e1848fa0b0310310de7301057f623985698ed7ebb014391b"}, + {file = "pydantic_core-2.27.1-cp38-none-win32.whl", hash = "sha256:a28af0695a45f7060e6f9b7092558a928a28553366519f64083c63a44f70e618"}, + {file = "pydantic_core-2.27.1-cp38-none-win_amd64.whl", hash = "sha256:2d4567c850905d5eaaed2f7a404e61012a51caf288292e016360aa2b96ff38d4"}, + {file = "pydantic_core-2.27.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:e9386266798d64eeb19dd3677051f5705bf873e98e15897ddb7d76f477131967"}, + {file = "pydantic_core-2.27.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4228b5b646caa73f119b1ae756216b59cc6e2267201c27d3912b592c5e323b60"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b3dfe500de26c52abe0477dde16192ac39c98f05bf2d80e76102d394bd13854"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aee66be87825cdf72ac64cb03ad4c15ffef4143dbf5c113f64a5ff4f81477bf9"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b748c44bb9f53031c8cbc99a8a061bc181c1000c60a30f55393b6e9c45cc5bd"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ca038c7f6a0afd0b2448941b6ef9d5e1949e999f9e5517692eb6da58e9d44be"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e0bd57539da59a3e4671b90a502da9a28c72322a4f17866ba3ac63a82c4498e"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ac6c2c45c847bbf8f91930d88716a0fb924b51e0c6dad329b793d670ec5db792"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b94d4ba43739bbe8b0ce4262bcc3b7b9f31459ad120fb595627eaeb7f9b9ca01"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:00e6424f4b26fe82d44577b4c842d7df97c20be6439e8e685d0d715feceb9fb9"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:38de0a70160dd97540335b7ad3a74571b24f1dc3ed33f815f0880682e6880131"}, + {file = "pydantic_core-2.27.1-cp39-none-win32.whl", hash = "sha256:7ccebf51efc61634f6c2344da73e366c75e735960b5654b63d7e6f69a5885fa3"}, + {file = "pydantic_core-2.27.1-cp39-none-win_amd64.whl", hash = "sha256:a57847b090d7892f123726202b7daa20df6694cbd583b67a592e856bff603d6c"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3fa80ac2bd5856580e242dbc202db873c60a01b20309c8319b5c5986fbe53ce6"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d950caa237bb1954f1b8c9227b5065ba6875ac9771bb8ec790d956a699b78676"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e4216e64d203e39c62df627aa882f02a2438d18a5f21d7f721621f7a5d3611d"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02a3d637bd387c41d46b002f0e49c52642281edacd2740e5a42f7017feea3f2c"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:161c27ccce13b6b0c8689418da3885d3220ed2eae2ea5e9b2f7f3d48f1d52c27"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:19910754e4cc9c63bc1c7f6d73aa1cfee82f42007e407c0f413695c2f7ed777f"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:e173486019cc283dc9778315fa29a363579372fe67045e971e89b6365cc035ed"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:af52d26579b308921b73b956153066481f064875140ccd1dfd4e77db89dbb12f"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:981fb88516bd1ae8b0cbbd2034678a39dedc98752f264ac9bc5839d3923fa04c"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5fde892e6c697ce3e30c61b239330fc5d569a71fefd4eb6512fc6caec9dd9e2f"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:816f5aa087094099fff7edabb5e01cc370eb21aa1a1d44fe2d2aefdfb5599b31"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c10c309e18e443ddb108f0ef64e8729363adbfd92d6d57beec680f6261556f3"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98476c98b02c8e9b2eec76ac4156fd006628b1b2d0ef27e548ffa978393fd154"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3027001c28434e7ca5a6e1e527487051136aa81803ac812be51802150d880dd"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:7699b1df36a48169cdebda7ab5a2bac265204003f153b4bd17276153d997670a"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1c39b07d90be6b48968ddc8c19e7585052088fd7ec8d568bb31ff64c70ae3c97"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:46ccfe3032b3915586e469d4972973f893c0a2bb65669194a5bdea9bacc088c2"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:62ba45e21cf6571d7f716d903b5b7b6d2617e2d5d67c0923dc47b9d41369f840"}, + {file = "pydantic_core-2.27.1.tar.gz", hash = "sha256:62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "pyright" +version = "1.1.389" +description = "Command line wrapper for pyright" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyright-1.1.389-py3-none-any.whl", hash = "sha256:41e9620bba9254406dc1f621a88ceab5a88af4c826feb4f614d95691ed243a60"}, + {file = "pyright-1.1.389.tar.gz", hash = "sha256:716bf8cc174ab8b4dcf6828c3298cac05c5ed775dda9910106a5dcfe4c7fe220"}, +] + +[package.dependencies] +nodeenv = ">=1.6.0" +typing-extensions = ">=4.1" + +[package.extras] +all = ["nodejs-wheel-binaries", "twine (>=3.4.1)"] +dev = ["twine (>=3.4.1)"] +nodejs = ["nodejs-wheel-binaries"] + +[[package]] +name = "pytest" +version = "7.4.4" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, + {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pyyaml" +version = "6.0.2" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, +] + +[[package]] +name = "ruff" +version = "0.0.263" +description = "An extremely fast Python linter, written in Rust." +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.0.263-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:ee6c7a77f142c427fa73e1f5f603fc1a39413a36fe6966ed0fc55e97f6921d9c"}, + {file = "ruff-0.0.263-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:c3b7d4b365207f3e4c40d235127091478e595b31e35b6cd57d940920cdfae68b"}, + {file = "ruff-0.0.263-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebc778d95f29c9917e6e7608b2b67815707e6ab8eb5af9341617beda479c3edf"}, + {file = "ruff-0.0.263-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4f75fa1632ea065b8f10678e7b6ae9873f84d5046bdf146990112751e98af42a"}, + {file = "ruff-0.0.263-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddcee0d91629a4fa4bc9faebf5b94d4615d50d1cd76d1098fa71fbe1c54f4104"}, + {file = "ruff-0.0.263-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:4010b156f2e9fa6e74b5581098467f6ff68beac48945599b3a9239481e578ab4"}, + {file = "ruff-0.0.263-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:15386933dd8e03aafa3186f9e996d6823105492817311338fbcb64d0ecbcd95f"}, + {file = "ruff-0.0.263-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04e0b280dd246448564c892bce5607d820ad1f14944f3d535db98692e2a7ac07"}, + {file = "ruff-0.0.263-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82c41f276106017b6f075dd2f2cc68e1a0b434cc75488f816fc98bd41982628d"}, + {file = "ruff-0.0.263-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3e9fcee3f81129eabc75da005d839235e32d7d374f2d4c0db0c708dad4703d6e"}, + {file = "ruff-0.0.263-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:981e3c4d773f7ff52479c4fd74a65e408f1e13fa5f889b72214d400cd1299ce4"}, + {file = "ruff-0.0.263-py3-none-musllinux_1_2_i686.whl", hash = "sha256:bed1d3fba306e3f7e13ce226927b84200350e25abd1e754e06ee361c6d41de15"}, + {file = "ruff-0.0.263-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7890499c2c3dcb1e60de2a8b4c5f5775b2bfcdff7d3e68e38db5cb2d65b12006"}, + {file = "ruff-0.0.263-py3-none-win32.whl", hash = "sha256:c2b79919ebd93674b93dfc2c843e264bf8e52fbe737467e9b58521775c85f4ad"}, + {file = "ruff-0.0.263-py3-none-win_amd64.whl", hash = "sha256:9af932f665e177de62e172901704257fd6e5bfabb95893867ff7382a851459d3"}, + {file = "ruff-0.0.263-py3-none-win_arm64.whl", hash = "sha256:ddf4503595b560bfa5fae92fa2e4cb09ec465ee4cf88cc248f10ad2e956deec3"}, + {file = "ruff-0.0.263.tar.gz", hash = "sha256:1008f211ad8aa1d998517ac5bf3d68fbc68ec516d1da89b6081f25ff2f30b687"}, +] + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] + +[[package]] +name = "tomli" +version = "2.2.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.8" +files = [ + {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, + {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, + {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, + {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, + {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, + {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, + {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, + {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, + {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, +] + +[[package]] +name = "typing-extensions" +version = "4.12.2" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, +] + +[metadata] +lock-version = "2.0" +python-versions = "^3.10" +content-hash = "9b80af86b1ee055b8afd15ef17bc03856738a447d169f5571f8ddc6e7dbd1d22" diff --git a/utils/graphql-pydantic-generator/pyproject.toml b/utils/graphql-pydantic-generator/pyproject.toml new file mode 100644 index 0000000..a98ac64 --- /dev/null +++ b/utils/graphql-pydantic-generator/pyproject.toml @@ -0,0 +1,87 @@ +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" + +[tool.poetry.dependencies] +python = "^3.10" +pydantic = "^2" +click = "^8.1.7" +graphql-core = "^3.2.5" +datamodel-code-generator = "^0.26.3" + +[tool.poetry.group.dev.dependencies] +ruff = "^0.0.263" +mypy = "1.3.0" +pyright = "^1.1.323" +pytest = "^7.4.1" + +[tool.poetry] +packages = [{ include = "graphql_pydantic_generator" }] +name = "graphql-pydantic-generator" +description = "A utility wrapper for datamodel-code-generator that processes a root directory containing GraphQL schema files, including any nested subdirectories, merges all the schemas into a single file, and generates Pydantic classes." +authors = ["Marek Pastorek "] +version = '0.1.0' +readme = ["README.md", "CHANGELOG.md"] +keywords = ["graphql", "pydantic", "generator"] +license = "Apache 2.0" + +[tool.poetry.scripts] +generate = "graphql_pydantic_generator.__main__:generate" + +[tool.pyright] +include = ['graphql_pydantic_generator'] +reportGeneralTypeIssues = "information" +reportCallIssue = "information" +reportIncompatibleVariableOverride = "information" + +[tool.ruff] +line-length = 120 +extend-select = ['Q', 'RUF100', 'C90', 'UP', 'I', 'E', 'F', 'N', 'PL'] +fixable = ["A", "B", "C", "D", "E", "F", "G", "I", "N", "Q", "S", "T", "W", "ANN", "ARG", "BLE", "COM", "DJ", "DTZ", "EM", "ERA", "EXE", "FBT", "ICN", "INP", "ISC", "NPY", "PD", "PGH", "PIE", "PL", "PT", "PTH", "PYI", "RET", "RSE", "RUF", "SIM", "SLF", "TCH", "TID", "TRY", "UP", "YTT"] +target-version = "py310" +exclude = ['tests'] + +[tool.ruff.isort] +known-first-party = ['graphql_pydantic_generator', 'tests'] +force-single-line = true + +[tool.ruff.flake8-quotes] +inline-quotes = 'single' +multiline-quotes = 'double' + +[tool.ruff.mccabe] +max-complexity = 14 + +[tool.ruff.pydocstyle] +convention = "google" + +[tool.ruff.pylint] +max-args = 10 +max-branches=14 + +[tool.ruff.pyupgrade] +keep-runtime-typing = true + +[tool.ruff.pep8-naming] +classmethod-decorators = ["classmethod"] + +[tool.mypy] +python_version = "3.10" +plugins = [ "pydantic.mypy" ] +explicit_package_bases = true +namespace_packages = true +strict = true +pretty = true +ignore_missing_imports = true +disallow_untyped_defs= true +disallow_subclassing_any = false +warn_unused_ignores = false + +[tool.pydantic-mypy] +init_forbid_extra = true +init_typed = true +warn_required_dynamic_aliases = true +warn_untyped_fields = true + +[tool.pytest.ini_options] +python_files = 'tests/*' \ No newline at end of file From 9cdcda6263f35e1f331b1facfa7cb27c1ea87e6a Mon Sep 17 00:00:00 2001 From: Marek Pastorek Date: Mon, 2 Dec 2024 10:57:46 +0100 Subject: [PATCH 3/5] fixed mypy Signed-off-by: Marek --- .../frinx_api/blueprints_provider/__init__.py | 6 +- blueprints-provider/python/poetry.lock | 232 ++------- blueprints-provider/python/pyproject.toml | 3 +- .../frinx_api/performance_monitor/__init__.py | 6 +- performance-monitor/python/poetry.lock | 433 ++++++----------- performance-monitor/python/pyproject.toml | 3 +- .../frinx_api/topology_discovery/__init__.py | 26 +- topology-discovery/python/poetry.lock | 451 ++++++++++-------- topology-discovery/python/pyproject.toml | 2 +- utils/graphql-pydantic-generator/README.md | 9 +- 10 files changed, 467 insertions(+), 704 deletions(-) diff --git a/blueprints-provider/python/frinx_api/blueprints_provider/__init__.py b/blueprints-provider/python/frinx_api/blueprints_provider/__init__.py index 73cea49..5463a04 100644 --- a/blueprints-provider/python/frinx_api/blueprints_provider/__init__.py +++ b/blueprints-provider/python/frinx_api/blueprints_provider/__init__.py @@ -103,13 +103,13 @@ class BlueprintConnection(Connection): edges: List[BlueprintEdge] = Field( ..., description='List of edges within the blueprint connection.' - ) + ) # type: ignore pageInfo: PageInfo = Field( ..., description='Pagination information for the blueprint connection.' ) typename__: Optional[Literal['BlueprintConnection']] = Field( 'BlueprintConnection', alias='__typename' - ) + ) # type: ignore class BlueprintEdge(Edge): @@ -123,7 +123,7 @@ class BlueprintEdge(Edge): ) typename__: Optional[Literal['BlueprintEdge']] = Field( 'BlueprintEdge', alias='__typename' - ) + ) # type: ignore class BlueprintMetadata(BaseModel): diff --git a/blueprints-provider/python/poetry.lock b/blueprints-provider/python/poetry.lock index 6ba598f..5e50a50 100644 --- a/blueprints-provider/python/poetry.lock +++ b/blueprints-provider/python/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. [[package]] name = "annotated-types" @@ -11,160 +11,6 @@ files = [ {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, ] -[[package]] -name = "certifi" -version = "2024.8.30" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -files = [ - {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, - {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, -] - -[[package]] -name = "charset-normalizer" -version = "3.4.0" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"}, - {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, - {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, -] - -[[package]] -name = "graphql-pydantic-converter" -version = "1.2.2" -description = "Convert pydantic schema to pydantic datamodel and build request from it" -optional = false -python-versions = "<4.0,>=3.10" -files = [ - {file = "graphql_pydantic_converter-1.2.2-py3-none-any.whl", hash = "sha256:6fe78e92bc2659b0f1849cbf044601a482652f0576c1e234bb7559c10ab7dc5f"}, - {file = "graphql_pydantic_converter-1.2.2.tar.gz", hash = "sha256:97f9e8c70a63c63054048969fcfc96f143d8f7cb8499c6f3abd06d2a616bdbd8"}, -] - -[package.dependencies] -pydantic = ">=2,<3" -requests = ">=2.31.0,<3.0.0" - -[[package]] -name = "idna" -version = "3.10" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.6" -files = [ - {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, - {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, -] - -[package.extras] -all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] - [[package]] name = "mypy" version = "1.3.0" @@ -385,27 +231,6 @@ all = ["nodejs-wheel-binaries", "twine (>=3.4.1)"] dev = ["twine (>=3.4.1)"] nodejs = ["nodejs-wheel-binaries"] -[[package]] -name = "requests" -version = "2.32.3" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.8" -files = [ - {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, - {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - [[package]] name = "ruff" version = "0.0.263" @@ -434,13 +259,43 @@ files = [ [[package]] name = "tomli" -version = "2.1.0" +version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" files = [ - {file = "tomli-2.1.0-py3-none-any.whl", hash = "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391"}, - {file = "tomli-2.1.0.tar.gz", hash = "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, + {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, + {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, + {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, + {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, + {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, + {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, + {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, + {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, ] [[package]] @@ -454,24 +309,7 @@ files = [ {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] -[[package]] -name = "urllib3" -version = "2.2.3" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.8" -files = [ - {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, - {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -h2 = ["h2 (>=4,<5)"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "a127c9c1e17f86092546bd3f9acc1c0a2df2114a20b6649c5f7f2498958a79d8" +content-hash = "1a1972d58ba299ed658091ad1a0c8706d365d55f29e84a16fd3dcb781ca85e43" diff --git a/blueprints-provider/python/pyproject.toml b/blueprints-provider/python/pyproject.toml index 85a94b8..79af901 100644 --- a/blueprints-provider/python/pyproject.toml +++ b/blueprints-provider/python/pyproject.toml @@ -79,4 +79,5 @@ warn_unused_ignores = false init_forbid_extra = true init_typed = true warn_required_dynamic_aliases = true -warn_untyped_fields = true \ No newline at end of file +warn_untyped_fields = true +ignore_missing_imports = true \ No newline at end of file diff --git a/performance-monitor/python/frinx_api/performance_monitor/__init__.py b/performance-monitor/python/frinx_api/performance_monitor/__init__.py index 35d8fb9..41e15fc 100644 --- a/performance-monitor/python/frinx_api/performance_monitor/__init__.py +++ b/performance-monitor/python/frinx_api/performance_monitor/__init__.py @@ -124,7 +124,7 @@ class MetricsNode(MetricsInterface): memory: Optional[Float] = None typename__: Optional[Literal['MetricsNode']] = Field( 'MetricsNode', alias='__typename' - ) + ) # type: ignore class MetricsWithCursorNode(MetricsInterface): @@ -139,7 +139,7 @@ class MetricsWithCursorNode(MetricsInterface): memory: Optional[Float] = None typename__: Optional[Literal['MetricsWithCursorNode']] = Field( 'MetricsWithCursorNode', alias='__typename' - ) + ) # type: ignore class MetricsWithDeviceNode(MetricsInterface): @@ -152,7 +152,7 @@ class MetricsWithDeviceNode(MetricsInterface): memory: Optional[Float] = None typename__: Optional[Literal['MetricsWithDeviceNode']] = Field( 'MetricsWithDeviceNode', alias='__typename' - ) + ) # type: ignore class PageInfo(BaseModel): diff --git a/performance-monitor/python/poetry.lock b/performance-monitor/python/poetry.lock index ea52c58..5e50a50 100644 --- a/performance-monitor/python/poetry.lock +++ b/performance-monitor/python/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. [[package]] name = "annotated-types" @@ -11,145 +11,6 @@ files = [ {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, ] -[[package]] -name = "certifi" -version = "2024.8.30" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -files = [ - {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, - {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, -] - -[[package]] -name = "charset-normalizer" -version = "3.3.2" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, -] - -[[package]] -name = "graphql-pydantic-converter" -version = "1.2.2" -description = "Convert pydantic schema to pydantic datamodel and build request from it" -optional = false -python-versions = "<4.0,>=3.10" -files = [ - {file = "graphql_pydantic_converter-1.2.2-py3-none-any.whl", hash = "sha256:6fe78e92bc2659b0f1849cbf044601a482652f0576c1e234bb7559c10ab7dc5f"}, - {file = "graphql_pydantic_converter-1.2.2.tar.gz", hash = "sha256:97f9e8c70a63c63054048969fcfc96f143d8f7cb8499c6f3abd06d2a616bdbd8"}, -] - -[package.dependencies] -pydantic = ">=2,<3" -requests = ">=2.31.0,<3.0.0" - -[[package]] -name = "idna" -version = "3.10" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.6" -files = [ - {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, - {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, -] - -[package.extras] -all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] - [[package]] name = "mypy" version = "1.3.0" @@ -220,22 +81,19 @@ files = [ [[package]] name = "pydantic" -version = "2.9.1" +version = "2.10.2" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.9.1-py3-none-any.whl", hash = "sha256:7aff4db5fdf3cf573d4b3c30926a510a10e19a0774d38fc4967f78beb6deb612"}, - {file = "pydantic-2.9.1.tar.gz", hash = "sha256:1363c7d975c7036df0db2b4a61f2e062fbc0aa5ab5f2772e0ffc7191a4f4bce2"}, + {file = "pydantic-2.10.2-py3-none-any.whl", hash = "sha256:cfb96e45951117c3024e6b67b25cdc33a3cb7b2fa62e239f7af1378358a1d99e"}, + {file = "pydantic-2.10.2.tar.gz", hash = "sha256:2bc2d7f17232e0841cbba4641e65ba1eb6fafb3a08de3a091ff3ce14a197c4fa"}, ] [package.dependencies] annotated-types = ">=0.6.0" -pydantic-core = "2.23.3" -typing-extensions = [ - {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, - {version = ">=4.6.1", markers = "python_version < \"3.13\""}, -] +pydantic-core = "2.27.1" +typing-extensions = ">=4.12.2" [package.extras] email = ["email-validator (>=2.0.0)"] @@ -243,100 +101,111 @@ timezone = ["tzdata"] [[package]] name = "pydantic-core" -version = "2.23.3" +version = "2.27.1" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.23.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:7f10a5d1b9281392f1bf507d16ac720e78285dfd635b05737c3911637601bae6"}, - {file = "pydantic_core-2.23.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3c09a7885dd33ee8c65266e5aa7fb7e2f23d49d8043f089989726391dd7350c5"}, - {file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6470b5a1ec4d1c2e9afe928c6cb37eb33381cab99292a708b8cb9aa89e62429b"}, - {file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9172d2088e27d9a185ea0a6c8cebe227a9139fd90295221d7d495944d2367700"}, - {file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86fc6c762ca7ac8fbbdff80d61b2c59fb6b7d144aa46e2d54d9e1b7b0e780e01"}, - {file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0cb80fd5c2df4898693aa841425ea1727b1b6d2167448253077d2a49003e0ed"}, - {file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03667cec5daf43ac4995cefa8aaf58f99de036204a37b889c24a80927b629cec"}, - {file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:047531242f8e9c2db733599f1c612925de095e93c9cc0e599e96cf536aaf56ba"}, - {file = "pydantic_core-2.23.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5499798317fff7f25dbef9347f4451b91ac2a4330c6669821c8202fd354c7bee"}, - {file = "pydantic_core-2.23.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bbb5e45eab7624440516ee3722a3044b83fff4c0372efe183fd6ba678ff681fe"}, - {file = "pydantic_core-2.23.3-cp310-none-win32.whl", hash = "sha256:8b5b3ed73abb147704a6e9f556d8c5cb078f8c095be4588e669d315e0d11893b"}, - {file = "pydantic_core-2.23.3-cp310-none-win_amd64.whl", hash = "sha256:2b603cde285322758a0279995b5796d64b63060bfbe214b50a3ca23b5cee3e83"}, - {file = "pydantic_core-2.23.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c889fd87e1f1bbeb877c2ee56b63bb297de4636661cc9bbfcf4b34e5e925bc27"}, - {file = "pydantic_core-2.23.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea85bda3189fb27503af4c45273735bcde3dd31c1ab17d11f37b04877859ef45"}, - {file = "pydantic_core-2.23.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7f7f72f721223f33d3dc98a791666ebc6a91fa023ce63733709f4894a7dc611"}, - {file = "pydantic_core-2.23.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b2b55b0448e9da68f56b696f313949cda1039e8ec7b5d294285335b53104b61"}, - {file = "pydantic_core-2.23.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c24574c7e92e2c56379706b9a3f07c1e0c7f2f87a41b6ee86653100c4ce343e5"}, - {file = "pydantic_core-2.23.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2b05e6ccbee333a8f4b8f4d7c244fdb7a979e90977ad9c51ea31261e2085ce0"}, - {file = "pydantic_core-2.23.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2c409ce1c219c091e47cb03feb3c4ed8c2b8e004efc940da0166aaee8f9d6c8"}, - {file = "pydantic_core-2.23.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d965e8b325f443ed3196db890d85dfebbb09f7384486a77461347f4adb1fa7f8"}, - {file = "pydantic_core-2.23.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f56af3a420fb1ffaf43ece3ea09c2d27c444e7c40dcb7c6e7cf57aae764f2b48"}, - {file = "pydantic_core-2.23.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5b01a078dd4f9a52494370af21aa52964e0a96d4862ac64ff7cea06e0f12d2c5"}, - {file = "pydantic_core-2.23.3-cp311-none-win32.whl", hash = "sha256:560e32f0df04ac69b3dd818f71339983f6d1f70eb99d4d1f8e9705fb6c34a5c1"}, - {file = "pydantic_core-2.23.3-cp311-none-win_amd64.whl", hash = "sha256:c744fa100fdea0d000d8bcddee95213d2de2e95b9c12be083370b2072333a0fa"}, - {file = "pydantic_core-2.23.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:e0ec50663feedf64d21bad0809f5857bac1ce91deded203efc4a84b31b2e4305"}, - {file = "pydantic_core-2.23.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:db6e6afcb95edbe6b357786684b71008499836e91f2a4a1e55b840955b341dbb"}, - {file = "pydantic_core-2.23.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98ccd69edcf49f0875d86942f4418a4e83eb3047f20eb897bffa62a5d419c8fa"}, - {file = "pydantic_core-2.23.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a678c1ac5c5ec5685af0133262103defb427114e62eafeda12f1357a12140162"}, - {file = "pydantic_core-2.23.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:01491d8b4d8db9f3391d93b0df60701e644ff0894352947f31fff3e52bd5c801"}, - {file = "pydantic_core-2.23.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fcf31facf2796a2d3b7fe338fe8640aa0166e4e55b4cb108dbfd1058049bf4cb"}, - {file = "pydantic_core-2.23.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7200fd561fb3be06827340da066df4311d0b6b8eb0c2116a110be5245dceb326"}, - {file = "pydantic_core-2.23.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dc1636770a809dee2bd44dd74b89cc80eb41172bcad8af75dd0bc182c2666d4c"}, - {file = "pydantic_core-2.23.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:67a5def279309f2e23014b608c4150b0c2d323bd7bccd27ff07b001c12c2415c"}, - {file = "pydantic_core-2.23.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:748bdf985014c6dd3e1e4cc3db90f1c3ecc7246ff5a3cd4ddab20c768b2f1dab"}, - {file = "pydantic_core-2.23.3-cp312-none-win32.whl", hash = "sha256:255ec6dcb899c115f1e2a64bc9ebc24cc0e3ab097775755244f77360d1f3c06c"}, - {file = "pydantic_core-2.23.3-cp312-none-win_amd64.whl", hash = "sha256:40b8441be16c1e940abebed83cd006ddb9e3737a279e339dbd6d31578b802f7b"}, - {file = "pydantic_core-2.23.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:6daaf5b1ba1369a22c8b050b643250e3e5efc6a78366d323294aee54953a4d5f"}, - {file = "pydantic_core-2.23.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d015e63b985a78a3d4ccffd3bdf22b7c20b3bbd4b8227809b3e8e75bc37f9cb2"}, - {file = "pydantic_core-2.23.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3fc572d9b5b5cfe13f8e8a6e26271d5d13f80173724b738557a8c7f3a8a3791"}, - {file = "pydantic_core-2.23.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f6bd91345b5163ee7448bee201ed7dd601ca24f43f439109b0212e296eb5b423"}, - {file = "pydantic_core-2.23.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc379c73fd66606628b866f661e8785088afe2adaba78e6bbe80796baf708a63"}, - {file = "pydantic_core-2.23.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbdce4b47592f9e296e19ac31667daed8753c8367ebb34b9a9bd89dacaa299c9"}, - {file = "pydantic_core-2.23.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc3cf31edf405a161a0adad83246568647c54404739b614b1ff43dad2b02e6d5"}, - {file = "pydantic_core-2.23.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8e22b477bf90db71c156f89a55bfe4d25177b81fce4aa09294d9e805eec13855"}, - {file = "pydantic_core-2.23.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:0a0137ddf462575d9bce863c4c95bac3493ba8e22f8c28ca94634b4a1d3e2bb4"}, - {file = "pydantic_core-2.23.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:203171e48946c3164fe7691fc349c79241ff8f28306abd4cad5f4f75ed80bc8d"}, - {file = "pydantic_core-2.23.3-cp313-none-win32.whl", hash = "sha256:76bdab0de4acb3f119c2a4bff740e0c7dc2e6de7692774620f7452ce11ca76c8"}, - {file = "pydantic_core-2.23.3-cp313-none-win_amd64.whl", hash = "sha256:37ba321ac2a46100c578a92e9a6aa33afe9ec99ffa084424291d84e456f490c1"}, - {file = "pydantic_core-2.23.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d063c6b9fed7d992bcbebfc9133f4c24b7a7f215d6b102f3e082b1117cddb72c"}, - {file = "pydantic_core-2.23.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6cb968da9a0746a0cf521b2b5ef25fc5a0bee9b9a1a8214e0a1cfaea5be7e8a4"}, - {file = "pydantic_core-2.23.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edbefe079a520c5984e30e1f1f29325054b59534729c25b874a16a5048028d16"}, - {file = "pydantic_core-2.23.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cbaaf2ef20d282659093913da9d402108203f7cb5955020bd8d1ae5a2325d1c4"}, - {file = "pydantic_core-2.23.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fb539d7e5dc4aac345846f290cf504d2fd3c1be26ac4e8b5e4c2b688069ff4cf"}, - {file = "pydantic_core-2.23.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e6f33503c5495059148cc486867e1d24ca35df5fc064686e631e314d959ad5b"}, - {file = "pydantic_core-2.23.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04b07490bc2f6f2717b10c3969e1b830f5720b632f8ae2f3b8b1542394c47a8e"}, - {file = "pydantic_core-2.23.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:03795b9e8a5d7fda05f3873efc3f59105e2dcff14231680296b87b80bb327295"}, - {file = "pydantic_core-2.23.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c483dab0f14b8d3f0df0c6c18d70b21b086f74c87ab03c59250dbf6d3c89baba"}, - {file = "pydantic_core-2.23.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8b2682038e255e94baf2c473dca914a7460069171ff5cdd4080be18ab8a7fd6e"}, - {file = "pydantic_core-2.23.3-cp38-none-win32.whl", hash = "sha256:f4a57db8966b3a1d1a350012839c6a0099f0898c56512dfade8a1fe5fb278710"}, - {file = "pydantic_core-2.23.3-cp38-none-win_amd64.whl", hash = "sha256:13dd45ba2561603681a2676ca56006d6dee94493f03d5cadc055d2055615c3ea"}, - {file = "pydantic_core-2.23.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:82da2f4703894134a9f000e24965df73cc103e31e8c31906cc1ee89fde72cbd8"}, - {file = "pydantic_core-2.23.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dd9be0a42de08f4b58a3cc73a123f124f65c24698b95a54c1543065baca8cf0e"}, - {file = "pydantic_core-2.23.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89b731f25c80830c76fdb13705c68fef6a2b6dc494402987c7ea9584fe189f5d"}, - {file = "pydantic_core-2.23.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c6de1ec30c4bb94f3a69c9f5f2182baeda5b809f806676675e9ef6b8dc936f28"}, - {file = "pydantic_core-2.23.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb68b41c3fa64587412b104294b9cbb027509dc2f6958446c502638d481525ef"}, - {file = "pydantic_core-2.23.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c3980f2843de5184656aab58698011b42763ccba11c4a8c35936c8dd6c7068c"}, - {file = "pydantic_core-2.23.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94f85614f2cba13f62c3c6481716e4adeae48e1eaa7e8bac379b9d177d93947a"}, - {file = "pydantic_core-2.23.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:510b7fb0a86dc8f10a8bb43bd2f97beb63cffad1203071dc434dac26453955cd"}, - {file = "pydantic_core-2.23.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1eba2f7ce3e30ee2170410e2171867ea73dbd692433b81a93758ab2de6c64835"}, - {file = "pydantic_core-2.23.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4b259fd8409ab84b4041b7b3f24dcc41e4696f180b775961ca8142b5b21d0e70"}, - {file = "pydantic_core-2.23.3-cp39-none-win32.whl", hash = "sha256:40d9bd259538dba2f40963286009bf7caf18b5112b19d2b55b09c14dde6db6a7"}, - {file = "pydantic_core-2.23.3-cp39-none-win_amd64.whl", hash = "sha256:5a8cd3074a98ee70173a8633ad3c10e00dcb991ecec57263aacb4095c5efb958"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f399e8657c67313476a121a6944311fab377085ca7f490648c9af97fc732732d"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6b5547d098c76e1694ba85f05b595720d7c60d342f24d5aad32c3049131fa5c4"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0dda0290a6f608504882d9f7650975b4651ff91c85673341789a476b1159f211"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65b6e5da855e9c55a0c67f4db8a492bf13d8d3316a59999cfbaf98cc6e401961"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:09e926397f392059ce0afdcac920df29d9c833256354d0c55f1584b0b70cf07e"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:87cfa0ed6b8c5bd6ae8b66de941cece179281239d482f363814d2b986b79cedc"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e61328920154b6a44d98cabcb709f10e8b74276bc709c9a513a8c37a18786cc4"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce3317d155628301d649fe5e16a99528d5680af4ec7aa70b90b8dacd2d725c9b"}, - {file = "pydantic_core-2.23.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e89513f014c6be0d17b00a9a7c81b1c426f4eb9224b15433f3d98c1a071f8433"}, - {file = "pydantic_core-2.23.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:4f62c1c953d7ee375df5eb2e44ad50ce2f5aff931723b398b8bc6f0ac159791a"}, - {file = "pydantic_core-2.23.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2718443bc671c7ac331de4eef9b673063b10af32a0bb385019ad61dcf2cc8f6c"}, - {file = "pydantic_core-2.23.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0d90e08b2727c5d01af1b5ef4121d2f0c99fbee692c762f4d9d0409c9da6541"}, - {file = "pydantic_core-2.23.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b676583fc459c64146debea14ba3af54e540b61762dfc0613dc4e98c3f66eeb"}, - {file = "pydantic_core-2.23.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:50e4661f3337977740fdbfbae084ae5693e505ca2b3130a6d4eb0f2281dc43b8"}, - {file = "pydantic_core-2.23.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:68f4cf373f0de6abfe599a38307f4417c1c867ca381c03df27c873a9069cda25"}, - {file = "pydantic_core-2.23.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:59d52cf01854cb26c46958552a21acb10dd78a52aa34c86f284e66b209db8cab"}, - {file = "pydantic_core-2.23.3.tar.gz", hash = "sha256:3cb0f65d8b4121c1b015c60104a685feb929a29d7cf204387c7f2688c7974690"}, + {file = "pydantic_core-2.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:71a5e35c75c021aaf400ac048dacc855f000bdfed91614b4a726f7432f1f3d6a"}, + {file = "pydantic_core-2.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:121ceb0e822f79163dd4699e4c54f5ad38b157084d97b34de8b232bcaad70278"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4603137322c18eaf2e06a4495f426aa8d8388940f3c457e7548145011bb68e05"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a33cd6ad9017bbeaa9ed78a2e0752c5e250eafb9534f308e7a5f7849b0b1bfb4"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15cc53a3179ba0fcefe1e3ae50beb2784dede4003ad2dfd24f81bba4b23a454f"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45d9c5eb9273aa50999ad6adc6be5e0ecea7e09dbd0d31bd0c65a55a2592ca08"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bf7b66ce12a2ac52d16f776b31d16d91033150266eb796967a7e4621707e4f6"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:655d7dd86f26cb15ce8a431036f66ce0318648f8853d709b4167786ec2fa4807"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:5556470f1a2157031e676f776c2bc20acd34c1990ca5f7e56f1ebf938b9ab57c"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206"}, + {file = "pydantic_core-2.27.1-cp310-none-win32.whl", hash = "sha256:f5a823165e6d04ccea61a9f0576f345f8ce40ed533013580e087bd4d7442b52c"}, + {file = "pydantic_core-2.27.1-cp310-none-win_amd64.whl", hash = "sha256:57866a76e0b3823e0b56692d1a0bf722bffb324839bb5b7226a7dbd6c9a40b17"}, + {file = "pydantic_core-2.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac3b20653bdbe160febbea8aa6c079d3df19310d50ac314911ed8cc4eb7f8cb8"}, + {file = "pydantic_core-2.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a5a8e19d7c707c4cadb8c18f5f60c843052ae83c20fa7d44f41594c644a1d330"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f7059ca8d64fea7f238994c97d91f75965216bcbe5f695bb44f354893f11d52"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bed0f8a0eeea9fb72937ba118f9db0cb7e90773462af7962d382445f3005e5a4"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3cb37038123447cf0f3ea4c74751f6a9d7afef0eb71aa07bf5f652b5e6a132c"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84286494f6c5d05243456e04223d5a9417d7f443c3b76065e75001beb26f88de"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acc07b2cfc5b835444b44a9956846b578d27beeacd4b52e45489e93276241025"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4fefee876e07a6e9aad7a8c8c9f85b0cdbe7df52b8a9552307b09050f7512c7e"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:258c57abf1188926c774a4c94dd29237e77eda19462e5bb901d88adcab6af919"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:35c14ac45fcfdf7167ca76cc80b2001205a8d5d16d80524e13508371fb8cdd9c"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d1b26e1dff225c31897696cab7d4f0a315d4c0d9e8666dbffdb28216f3b17fdc"}, + {file = "pydantic_core-2.27.1-cp311-none-win32.whl", hash = "sha256:2cdf7d86886bc6982354862204ae3b2f7f96f21a3eb0ba5ca0ac42c7b38598b9"}, + {file = "pydantic_core-2.27.1-cp311-none-win_amd64.whl", hash = "sha256:3af385b0cee8df3746c3f406f38bcbfdc9041b5c2d5ce3e5fc6637256e60bbc5"}, + {file = "pydantic_core-2.27.1-cp311-none-win_arm64.whl", hash = "sha256:81f2ec23ddc1b476ff96563f2e8d723830b06dceae348ce02914a37cb4e74b89"}, + {file = "pydantic_core-2.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9cbd94fc661d2bab2bc702cddd2d3370bbdcc4cd0f8f57488a81bcce90c7a54f"}, + {file = "pydantic_core-2.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5f8c4718cd44ec1580e180cb739713ecda2bdee1341084c1467802a417fe0f02"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15aae984e46de8d376df515f00450d1522077254ef6b7ce189b38ecee7c9677c"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ba5e3963344ff25fc8c40da90f44b0afca8cfd89d12964feb79ac1411a260ac"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:992cea5f4f3b29d6b4f7f1726ed8ee46c8331c6b4eed6db5b40134c6fe1768bb"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0325336f348dbee6550d129b1627cb8f5351a9dc91aad141ffb96d4937bd9529"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7597c07fbd11515f654d6ece3d0e4e5093edc30a436c63142d9a4b8e22f19c35"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3bbd5d8cc692616d5ef6fbbbd50dbec142c7e6ad9beb66b78a96e9c16729b089"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:dc61505e73298a84a2f317255fcc72b710b72980f3a1f670447a21efc88f8381"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:e1f735dc43da318cad19b4173dd1ffce1d84aafd6c9b782b3abc04a0d5a6f5bb"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f4e5658dbffe8843a0f12366a4c2d1c316dbe09bb4dfbdc9d2d9cd6031de8aae"}, + {file = "pydantic_core-2.27.1-cp312-none-win32.whl", hash = "sha256:672ebbe820bb37988c4d136eca2652ee114992d5d41c7e4858cdd90ea94ffe5c"}, + {file = "pydantic_core-2.27.1-cp312-none-win_amd64.whl", hash = "sha256:66ff044fd0bb1768688aecbe28b6190f6e799349221fb0de0e6f4048eca14c16"}, + {file = "pydantic_core-2.27.1-cp312-none-win_arm64.whl", hash = "sha256:9a3b0793b1bbfd4146304e23d90045f2a9b5fd5823aa682665fbdaf2a6c28f3e"}, + {file = "pydantic_core-2.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f216dbce0e60e4d03e0c4353c7023b202d95cbaeff12e5fd2e82ea0a66905073"}, + {file = "pydantic_core-2.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a2e02889071850bbfd36b56fd6bc98945e23670773bc7a76657e90e6b6603c08"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42b0e23f119b2b456d07ca91b307ae167cc3f6c846a7b169fca5326e32fdc6cf"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:764be71193f87d460a03f1f7385a82e226639732214b402f9aa61f0d025f0737"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c00666a3bd2f84920a4e94434f5974d7bbc57e461318d6bb34ce9cdbbc1f6b2"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ccaa88b24eebc0f849ce0a4d09e8a408ec5a94afff395eb69baf868f5183107"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65af9088ac534313e1963443d0ec360bb2b9cba6c2909478d22c2e363d98a51"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206b5cf6f0c513baffaeae7bd817717140770c74528f3e4c3e1cec7871ddd61a"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:062f60e512fc7fff8b8a9d680ff0ddaaef0193dba9fa83e679c0c5f5fbd018bc"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:a0697803ed7d4af5e4c1adf1670af078f8fcab7a86350e969f454daf598c4960"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:58ca98a950171f3151c603aeea9303ef6c235f692fe555e883591103da709b23"}, + {file = "pydantic_core-2.27.1-cp313-none-win32.whl", hash = "sha256:8065914ff79f7eab1599bd80406681f0ad08f8e47c880f17b416c9f8f7a26d05"}, + {file = "pydantic_core-2.27.1-cp313-none-win_amd64.whl", hash = "sha256:ba630d5e3db74c79300d9a5bdaaf6200172b107f263c98a0539eeecb857b2337"}, + {file = "pydantic_core-2.27.1-cp313-none-win_arm64.whl", hash = "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5"}, + {file = "pydantic_core-2.27.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:5897bec80a09b4084aee23f9b73a9477a46c3304ad1d2d07acca19723fb1de62"}, + {file = "pydantic_core-2.27.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d0165ab2914379bd56908c02294ed8405c252250668ebcb438a55494c69f44ab"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b9af86e1d8e4cfc82c2022bfaa6f459381a50b94a29e95dcdda8442d6d83864"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f6c8a66741c5f5447e047ab0ba7a1c61d1e95580d64bce852e3df1f895c4067"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a42d6a8156ff78981f8aa56eb6394114e0dedb217cf8b729f438f643608cbcd"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64c65f40b4cd8b0e049a8edde07e38b476da7e3aaebe63287c899d2cff253fa5"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdcf339322a3fae5cbd504edcefddd5a50d9ee00d968696846f089b4432cf78"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bf99c8404f008750c846cb4ac4667b798a9f7de673ff719d705d9b2d6de49c5f"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8f1edcea27918d748c7e5e4d917297b2a0ab80cad10f86631e488b7cddf76a36"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:159cac0a3d096f79ab6a44d77a961917219707e2a130739c64d4dd46281f5c2a"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:029d9757eb621cc6e1848fa0b0310310de7301057f623985698ed7ebb014391b"}, + {file = "pydantic_core-2.27.1-cp38-none-win32.whl", hash = "sha256:a28af0695a45f7060e6f9b7092558a928a28553366519f64083c63a44f70e618"}, + {file = "pydantic_core-2.27.1-cp38-none-win_amd64.whl", hash = "sha256:2d4567c850905d5eaaed2f7a404e61012a51caf288292e016360aa2b96ff38d4"}, + {file = "pydantic_core-2.27.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:e9386266798d64eeb19dd3677051f5705bf873e98e15897ddb7d76f477131967"}, + {file = "pydantic_core-2.27.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4228b5b646caa73f119b1ae756216b59cc6e2267201c27d3912b592c5e323b60"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b3dfe500de26c52abe0477dde16192ac39c98f05bf2d80e76102d394bd13854"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aee66be87825cdf72ac64cb03ad4c15ffef4143dbf5c113f64a5ff4f81477bf9"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b748c44bb9f53031c8cbc99a8a061bc181c1000c60a30f55393b6e9c45cc5bd"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ca038c7f6a0afd0b2448941b6ef9d5e1949e999f9e5517692eb6da58e9d44be"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e0bd57539da59a3e4671b90a502da9a28c72322a4f17866ba3ac63a82c4498e"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ac6c2c45c847bbf8f91930d88716a0fb924b51e0c6dad329b793d670ec5db792"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b94d4ba43739bbe8b0ce4262bcc3b7b9f31459ad120fb595627eaeb7f9b9ca01"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:00e6424f4b26fe82d44577b4c842d7df97c20be6439e8e685d0d715feceb9fb9"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:38de0a70160dd97540335b7ad3a74571b24f1dc3ed33f815f0880682e6880131"}, + {file = "pydantic_core-2.27.1-cp39-none-win32.whl", hash = "sha256:7ccebf51efc61634f6c2344da73e366c75e735960b5654b63d7e6f69a5885fa3"}, + {file = "pydantic_core-2.27.1-cp39-none-win_amd64.whl", hash = "sha256:a57847b090d7892f123726202b7daa20df6694cbd583b67a592e856bff603d6c"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3fa80ac2bd5856580e242dbc202db873c60a01b20309c8319b5c5986fbe53ce6"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d950caa237bb1954f1b8c9227b5065ba6875ac9771bb8ec790d956a699b78676"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e4216e64d203e39c62df627aa882f02a2438d18a5f21d7f721621f7a5d3611d"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02a3d637bd387c41d46b002f0e49c52642281edacd2740e5a42f7017feea3f2c"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:161c27ccce13b6b0c8689418da3885d3220ed2eae2ea5e9b2f7f3d48f1d52c27"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:19910754e4cc9c63bc1c7f6d73aa1cfee82f42007e407c0f413695c2f7ed777f"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:e173486019cc283dc9778315fa29a363579372fe67045e971e89b6365cc035ed"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:af52d26579b308921b73b956153066481f064875140ccd1dfd4e77db89dbb12f"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:981fb88516bd1ae8b0cbbd2034678a39dedc98752f264ac9bc5839d3923fa04c"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5fde892e6c697ce3e30c61b239330fc5d569a71fefd4eb6512fc6caec9dd9e2f"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:816f5aa087094099fff7edabb5e01cc370eb21aa1a1d44fe2d2aefdfb5599b31"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c10c309e18e443ddb108f0ef64e8729363adbfd92d6d57beec680f6261556f3"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98476c98b02c8e9b2eec76ac4156fd006628b1b2d0ef27e548ffa978393fd154"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3027001c28434e7ca5a6e1e527487051136aa81803ac812be51802150d880dd"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:7699b1df36a48169cdebda7ab5a2bac265204003f153b4bd17276153d997670a"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1c39b07d90be6b48968ddc8c19e7585052088fd7ec8d568bb31ff64c70ae3c97"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:46ccfe3032b3915586e469d4972973f893c0a2bb65669194a5bdea9bacc088c2"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:62ba45e21cf6571d7f716d903b5b7b6d2617e2d5d67c0923dc47b9d41369f840"}, + {file = "pydantic_core-2.27.1.tar.gz", hash = "sha256:62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235"}, ] [package.dependencies] @@ -344,42 +213,23 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pyright" -version = "1.1.380" +version = "1.1.389" description = "Command line wrapper for pyright" optional = false python-versions = ">=3.7" files = [ - {file = "pyright-1.1.380-py3-none-any.whl", hash = "sha256:a6404392053d8848bacc7aebcbd9d318bb46baf1a1a000359305481920f43879"}, - {file = "pyright-1.1.380.tar.gz", hash = "sha256:e6ceb1a5f7e9f03106e0aa1d6fbb4d97735a5e7ffb59f3de6b2db590baf935b2"}, + {file = "pyright-1.1.389-py3-none-any.whl", hash = "sha256:41e9620bba9254406dc1f621a88ceab5a88af4c826feb4f614d95691ed243a60"}, + {file = "pyright-1.1.389.tar.gz", hash = "sha256:716bf8cc174ab8b4dcf6828c3298cac05c5ed775dda9910106a5dcfe4c7fe220"}, ] [package.dependencies] nodeenv = ">=1.6.0" +typing-extensions = ">=4.1" [package.extras] -all = ["twine (>=3.4.1)"] +all = ["nodejs-wheel-binaries", "twine (>=3.4.1)"] dev = ["twine (>=3.4.1)"] - -[[package]] -name = "requests" -version = "2.32.3" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.8" -files = [ - {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, - {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +nodejs = ["nodejs-wheel-binaries"] [[package]] name = "ruff" @@ -409,13 +259,43 @@ files = [ [[package]] name = "tomli" -version = "2.0.1" +version = "2.2.1" description = "A lil' TOML parser" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, + {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, + {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, + {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, + {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, + {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, + {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, + {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, + {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, ] [[package]] @@ -429,24 +309,7 @@ files = [ {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] -[[package]] -name = "urllib3" -version = "2.2.3" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.8" -files = [ - {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, - {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -h2 = ["h2 (>=4,<5)"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "a127c9c1e17f86092546bd3f9acc1c0a2df2114a20b6649c5f7f2498958a79d8" +content-hash = "1a1972d58ba299ed658091ad1a0c8706d365d55f29e84a16fd3dcb781ca85e43" diff --git a/performance-monitor/python/pyproject.toml b/performance-monitor/python/pyproject.toml index 244f2ce..0ecfd0a 100644 --- a/performance-monitor/python/pyproject.toml +++ b/performance-monitor/python/pyproject.toml @@ -5,7 +5,6 @@ build-backend = "poetry.core.masonry.api" [tool.poetry.dependencies] python = "^3.10" pydantic = "^2" -graphql-pydantic-converter = "^1.2" [tool.poetry.group.dev.dependencies] ruff = "^0.0.263" @@ -81,4 +80,4 @@ init_forbid_extra = true init_typed = true warn_required_dynamic_aliases = true warn_untyped_fields = true - +ignore_missing_imports = true diff --git a/topology-discovery/python/frinx_api/topology_discovery/__init__.py b/topology-discovery/python/frinx_api/topology_discovery/__init__.py index e52220f..2e8493a 100644 --- a/topology-discovery/python/frinx_api/topology_discovery/__init__.py +++ b/topology-discovery/python/frinx_api/topology_discovery/__init__.py @@ -254,7 +254,7 @@ class DeviceMetadata(Node): ) typename__: Optional[Literal['DeviceMetadata']] = Field( 'DeviceMetadata', alias='__typename' - ) + ) # type: ignore class DeviceMetadataEdge(BaseModel): @@ -357,7 +357,7 @@ class MplsDevice(Node): ) typename__: Optional[Literal['MplsDevice']] = Field( 'MplsDevice', alias='__typename' - ) + ) # type: ignore class MplsDeviceConnection(BaseModel): @@ -420,7 +420,7 @@ class MplsInterface(Node): ) typename__: Optional[Literal['MplsInterface']] = Field( 'MplsInterface', alias='__typename' - ) + ) # type: ignore class MplsInterfaceConnection(BaseModel): @@ -559,7 +559,7 @@ class NetDevice(Node): ..., description='Identifier of the routing entity (usually IPv4 address). RouterId and ospfAreaId together compose a unique key.', ) - typename__: Optional[Literal['NetDevice']] = Field('NetDevice', alias='__typename') + typename__: Optional[Literal['NetDevice']] = Field('NetDevice', alias='__typename') # type: ignore class NetDeviceConnection(BaseModel): @@ -610,7 +610,7 @@ class NetInterface(Node): ) typename__: Optional[Literal['NetInterface']] = Field( 'NetInterface', alias='__typename' - ) + ) # type: ignore class NetInterfaceConnection(BaseModel): @@ -719,7 +719,7 @@ class NetNetwork(Node): ) typename__: Optional[Literal['NetNetwork']] = Field( 'NetNetwork', alias='__typename' - ) + ) # type: ignore class NetNetworkConnection(BaseModel): @@ -834,7 +834,7 @@ class PhyDevice(Node): status: NodeStatus = Field( ..., description='Status of the device from the view of the synced topology.' ) - typename__: Optional[Literal['PhyDevice']] = Field('PhyDevice', alias='__typename') + typename__: Optional[Literal['PhyDevice']] = Field('PhyDevice', alias='__typename') # type: ignore class PhyDeviceConnection(BaseModel): @@ -905,7 +905,7 @@ class PhyInterface(Node): ) typename__: Optional[Literal['PhyInterface']] = Field( 'PhyInterface', alias='__typename' - ) + ) # type: ignore class PhyInterfaceConnection(BaseModel): @@ -1012,7 +1012,7 @@ class PtpDevice(Node): status: NodeStatus = Field( ..., description='Status of the device from the view of the synced topology.' ) - typename__: Optional[Literal['PtpDevice']] = Field('PtpDevice', alias='__typename') + typename__: Optional[Literal['PtpDevice']] = Field('PtpDevice', alias='__typename') # type: ignore class PtpDeviceConnection(BaseModel): @@ -1116,7 +1116,7 @@ class PtpDiffSynce(Node): ) typename__: Optional[Literal['PtpDiffSynce']] = Field( 'PtpDiffSynce', alias='__typename' - ) + ) # type: ignore class PtpDiffSynceConnection(BaseModel): @@ -1169,7 +1169,7 @@ class PtpInterface(Node): ) typename__: Optional[Literal['PtpInterface']] = Field( 'PtpInterface', alias='__typename' - ) + ) # type: ignore class PtpInterfaceConnection(BaseModel): @@ -1346,7 +1346,7 @@ class SynceDevice(Node): ) typename__: Optional[Literal['SynceDevice']] = Field( 'SynceDevice', alias='__typename' - ) + ) # type: ignore class SynceDeviceConnection(BaseModel): @@ -1413,7 +1413,7 @@ class SynceInterface(Node): ) typename__: Optional[Literal['SynceInterface']] = Field( 'SynceInterface', alias='__typename' - ) + ) # type: ignore class SynceInterfaceConnection(BaseModel): diff --git a/topology-discovery/python/poetry.lock b/topology-discovery/python/poetry.lock index ea52c58..a75f7c0 100644 --- a/topology-discovery/python/poetry.lock +++ b/topology-discovery/python/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. [[package]] name = "annotated-types" @@ -24,101 +24,116 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.3.2" +version = "3.4.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"}, + {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, + {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, ] [[package]] @@ -220,22 +235,19 @@ files = [ [[package]] name = "pydantic" -version = "2.9.1" +version = "2.10.2" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.9.1-py3-none-any.whl", hash = "sha256:7aff4db5fdf3cf573d4b3c30926a510a10e19a0774d38fc4967f78beb6deb612"}, - {file = "pydantic-2.9.1.tar.gz", hash = "sha256:1363c7d975c7036df0db2b4a61f2e062fbc0aa5ab5f2772e0ffc7191a4f4bce2"}, + {file = "pydantic-2.10.2-py3-none-any.whl", hash = "sha256:cfb96e45951117c3024e6b67b25cdc33a3cb7b2fa62e239f7af1378358a1d99e"}, + {file = "pydantic-2.10.2.tar.gz", hash = "sha256:2bc2d7f17232e0841cbba4641e65ba1eb6fafb3a08de3a091ff3ce14a197c4fa"}, ] [package.dependencies] annotated-types = ">=0.6.0" -pydantic-core = "2.23.3" -typing-extensions = [ - {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, - {version = ">=4.6.1", markers = "python_version < \"3.13\""}, -] +pydantic-core = "2.27.1" +typing-extensions = ">=4.12.2" [package.extras] email = ["email-validator (>=2.0.0)"] @@ -243,100 +255,111 @@ timezone = ["tzdata"] [[package]] name = "pydantic-core" -version = "2.23.3" +version = "2.27.1" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.23.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:7f10a5d1b9281392f1bf507d16ac720e78285dfd635b05737c3911637601bae6"}, - {file = "pydantic_core-2.23.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3c09a7885dd33ee8c65266e5aa7fb7e2f23d49d8043f089989726391dd7350c5"}, - {file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6470b5a1ec4d1c2e9afe928c6cb37eb33381cab99292a708b8cb9aa89e62429b"}, - {file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9172d2088e27d9a185ea0a6c8cebe227a9139fd90295221d7d495944d2367700"}, - {file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86fc6c762ca7ac8fbbdff80d61b2c59fb6b7d144aa46e2d54d9e1b7b0e780e01"}, - {file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0cb80fd5c2df4898693aa841425ea1727b1b6d2167448253077d2a49003e0ed"}, - {file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03667cec5daf43ac4995cefa8aaf58f99de036204a37b889c24a80927b629cec"}, - {file = "pydantic_core-2.23.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:047531242f8e9c2db733599f1c612925de095e93c9cc0e599e96cf536aaf56ba"}, - {file = "pydantic_core-2.23.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5499798317fff7f25dbef9347f4451b91ac2a4330c6669821c8202fd354c7bee"}, - {file = "pydantic_core-2.23.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bbb5e45eab7624440516ee3722a3044b83fff4c0372efe183fd6ba678ff681fe"}, - {file = "pydantic_core-2.23.3-cp310-none-win32.whl", hash = "sha256:8b5b3ed73abb147704a6e9f556d8c5cb078f8c095be4588e669d315e0d11893b"}, - {file = "pydantic_core-2.23.3-cp310-none-win_amd64.whl", hash = "sha256:2b603cde285322758a0279995b5796d64b63060bfbe214b50a3ca23b5cee3e83"}, - {file = "pydantic_core-2.23.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c889fd87e1f1bbeb877c2ee56b63bb297de4636661cc9bbfcf4b34e5e925bc27"}, - {file = "pydantic_core-2.23.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea85bda3189fb27503af4c45273735bcde3dd31c1ab17d11f37b04877859ef45"}, - {file = "pydantic_core-2.23.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7f7f72f721223f33d3dc98a791666ebc6a91fa023ce63733709f4894a7dc611"}, - {file = "pydantic_core-2.23.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b2b55b0448e9da68f56b696f313949cda1039e8ec7b5d294285335b53104b61"}, - {file = "pydantic_core-2.23.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c24574c7e92e2c56379706b9a3f07c1e0c7f2f87a41b6ee86653100c4ce343e5"}, - {file = "pydantic_core-2.23.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2b05e6ccbee333a8f4b8f4d7c244fdb7a979e90977ad9c51ea31261e2085ce0"}, - {file = "pydantic_core-2.23.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2c409ce1c219c091e47cb03feb3c4ed8c2b8e004efc940da0166aaee8f9d6c8"}, - {file = "pydantic_core-2.23.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d965e8b325f443ed3196db890d85dfebbb09f7384486a77461347f4adb1fa7f8"}, - {file = "pydantic_core-2.23.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f56af3a420fb1ffaf43ece3ea09c2d27c444e7c40dcb7c6e7cf57aae764f2b48"}, - {file = "pydantic_core-2.23.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5b01a078dd4f9a52494370af21aa52964e0a96d4862ac64ff7cea06e0f12d2c5"}, - {file = "pydantic_core-2.23.3-cp311-none-win32.whl", hash = "sha256:560e32f0df04ac69b3dd818f71339983f6d1f70eb99d4d1f8e9705fb6c34a5c1"}, - {file = "pydantic_core-2.23.3-cp311-none-win_amd64.whl", hash = "sha256:c744fa100fdea0d000d8bcddee95213d2de2e95b9c12be083370b2072333a0fa"}, - {file = "pydantic_core-2.23.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:e0ec50663feedf64d21bad0809f5857bac1ce91deded203efc4a84b31b2e4305"}, - {file = "pydantic_core-2.23.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:db6e6afcb95edbe6b357786684b71008499836e91f2a4a1e55b840955b341dbb"}, - {file = "pydantic_core-2.23.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98ccd69edcf49f0875d86942f4418a4e83eb3047f20eb897bffa62a5d419c8fa"}, - {file = "pydantic_core-2.23.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a678c1ac5c5ec5685af0133262103defb427114e62eafeda12f1357a12140162"}, - {file = "pydantic_core-2.23.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:01491d8b4d8db9f3391d93b0df60701e644ff0894352947f31fff3e52bd5c801"}, - {file = "pydantic_core-2.23.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fcf31facf2796a2d3b7fe338fe8640aa0166e4e55b4cb108dbfd1058049bf4cb"}, - {file = "pydantic_core-2.23.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7200fd561fb3be06827340da066df4311d0b6b8eb0c2116a110be5245dceb326"}, - {file = "pydantic_core-2.23.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dc1636770a809dee2bd44dd74b89cc80eb41172bcad8af75dd0bc182c2666d4c"}, - {file = "pydantic_core-2.23.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:67a5def279309f2e23014b608c4150b0c2d323bd7bccd27ff07b001c12c2415c"}, - {file = "pydantic_core-2.23.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:748bdf985014c6dd3e1e4cc3db90f1c3ecc7246ff5a3cd4ddab20c768b2f1dab"}, - {file = "pydantic_core-2.23.3-cp312-none-win32.whl", hash = "sha256:255ec6dcb899c115f1e2a64bc9ebc24cc0e3ab097775755244f77360d1f3c06c"}, - {file = "pydantic_core-2.23.3-cp312-none-win_amd64.whl", hash = "sha256:40b8441be16c1e940abebed83cd006ddb9e3737a279e339dbd6d31578b802f7b"}, - {file = "pydantic_core-2.23.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:6daaf5b1ba1369a22c8b050b643250e3e5efc6a78366d323294aee54953a4d5f"}, - {file = "pydantic_core-2.23.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d015e63b985a78a3d4ccffd3bdf22b7c20b3bbd4b8227809b3e8e75bc37f9cb2"}, - {file = "pydantic_core-2.23.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3fc572d9b5b5cfe13f8e8a6e26271d5d13f80173724b738557a8c7f3a8a3791"}, - {file = "pydantic_core-2.23.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f6bd91345b5163ee7448bee201ed7dd601ca24f43f439109b0212e296eb5b423"}, - {file = "pydantic_core-2.23.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc379c73fd66606628b866f661e8785088afe2adaba78e6bbe80796baf708a63"}, - {file = "pydantic_core-2.23.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbdce4b47592f9e296e19ac31667daed8753c8367ebb34b9a9bd89dacaa299c9"}, - {file = "pydantic_core-2.23.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc3cf31edf405a161a0adad83246568647c54404739b614b1ff43dad2b02e6d5"}, - {file = "pydantic_core-2.23.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8e22b477bf90db71c156f89a55bfe4d25177b81fce4aa09294d9e805eec13855"}, - {file = "pydantic_core-2.23.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:0a0137ddf462575d9bce863c4c95bac3493ba8e22f8c28ca94634b4a1d3e2bb4"}, - {file = "pydantic_core-2.23.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:203171e48946c3164fe7691fc349c79241ff8f28306abd4cad5f4f75ed80bc8d"}, - {file = "pydantic_core-2.23.3-cp313-none-win32.whl", hash = "sha256:76bdab0de4acb3f119c2a4bff740e0c7dc2e6de7692774620f7452ce11ca76c8"}, - {file = "pydantic_core-2.23.3-cp313-none-win_amd64.whl", hash = "sha256:37ba321ac2a46100c578a92e9a6aa33afe9ec99ffa084424291d84e456f490c1"}, - {file = "pydantic_core-2.23.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d063c6b9fed7d992bcbebfc9133f4c24b7a7f215d6b102f3e082b1117cddb72c"}, - {file = "pydantic_core-2.23.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6cb968da9a0746a0cf521b2b5ef25fc5a0bee9b9a1a8214e0a1cfaea5be7e8a4"}, - {file = "pydantic_core-2.23.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edbefe079a520c5984e30e1f1f29325054b59534729c25b874a16a5048028d16"}, - {file = "pydantic_core-2.23.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cbaaf2ef20d282659093913da9d402108203f7cb5955020bd8d1ae5a2325d1c4"}, - {file = "pydantic_core-2.23.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fb539d7e5dc4aac345846f290cf504d2fd3c1be26ac4e8b5e4c2b688069ff4cf"}, - {file = "pydantic_core-2.23.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e6f33503c5495059148cc486867e1d24ca35df5fc064686e631e314d959ad5b"}, - {file = "pydantic_core-2.23.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04b07490bc2f6f2717b10c3969e1b830f5720b632f8ae2f3b8b1542394c47a8e"}, - {file = "pydantic_core-2.23.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:03795b9e8a5d7fda05f3873efc3f59105e2dcff14231680296b87b80bb327295"}, - {file = "pydantic_core-2.23.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c483dab0f14b8d3f0df0c6c18d70b21b086f74c87ab03c59250dbf6d3c89baba"}, - {file = "pydantic_core-2.23.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8b2682038e255e94baf2c473dca914a7460069171ff5cdd4080be18ab8a7fd6e"}, - {file = "pydantic_core-2.23.3-cp38-none-win32.whl", hash = "sha256:f4a57db8966b3a1d1a350012839c6a0099f0898c56512dfade8a1fe5fb278710"}, - {file = "pydantic_core-2.23.3-cp38-none-win_amd64.whl", hash = "sha256:13dd45ba2561603681a2676ca56006d6dee94493f03d5cadc055d2055615c3ea"}, - {file = "pydantic_core-2.23.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:82da2f4703894134a9f000e24965df73cc103e31e8c31906cc1ee89fde72cbd8"}, - {file = "pydantic_core-2.23.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dd9be0a42de08f4b58a3cc73a123f124f65c24698b95a54c1543065baca8cf0e"}, - {file = "pydantic_core-2.23.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89b731f25c80830c76fdb13705c68fef6a2b6dc494402987c7ea9584fe189f5d"}, - {file = "pydantic_core-2.23.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c6de1ec30c4bb94f3a69c9f5f2182baeda5b809f806676675e9ef6b8dc936f28"}, - {file = "pydantic_core-2.23.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb68b41c3fa64587412b104294b9cbb027509dc2f6958446c502638d481525ef"}, - {file = "pydantic_core-2.23.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c3980f2843de5184656aab58698011b42763ccba11c4a8c35936c8dd6c7068c"}, - {file = "pydantic_core-2.23.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94f85614f2cba13f62c3c6481716e4adeae48e1eaa7e8bac379b9d177d93947a"}, - {file = "pydantic_core-2.23.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:510b7fb0a86dc8f10a8bb43bd2f97beb63cffad1203071dc434dac26453955cd"}, - {file = "pydantic_core-2.23.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1eba2f7ce3e30ee2170410e2171867ea73dbd692433b81a93758ab2de6c64835"}, - {file = "pydantic_core-2.23.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4b259fd8409ab84b4041b7b3f24dcc41e4696f180b775961ca8142b5b21d0e70"}, - {file = "pydantic_core-2.23.3-cp39-none-win32.whl", hash = "sha256:40d9bd259538dba2f40963286009bf7caf18b5112b19d2b55b09c14dde6db6a7"}, - {file = "pydantic_core-2.23.3-cp39-none-win_amd64.whl", hash = "sha256:5a8cd3074a98ee70173a8633ad3c10e00dcb991ecec57263aacb4095c5efb958"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f399e8657c67313476a121a6944311fab377085ca7f490648c9af97fc732732d"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6b5547d098c76e1694ba85f05b595720d7c60d342f24d5aad32c3049131fa5c4"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0dda0290a6f608504882d9f7650975b4651ff91c85673341789a476b1159f211"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65b6e5da855e9c55a0c67f4db8a492bf13d8d3316a59999cfbaf98cc6e401961"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:09e926397f392059ce0afdcac920df29d9c833256354d0c55f1584b0b70cf07e"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:87cfa0ed6b8c5bd6ae8b66de941cece179281239d482f363814d2b986b79cedc"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e61328920154b6a44d98cabcb709f10e8b74276bc709c9a513a8c37a18786cc4"}, - {file = "pydantic_core-2.23.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce3317d155628301d649fe5e16a99528d5680af4ec7aa70b90b8dacd2d725c9b"}, - {file = "pydantic_core-2.23.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e89513f014c6be0d17b00a9a7c81b1c426f4eb9224b15433f3d98c1a071f8433"}, - {file = "pydantic_core-2.23.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:4f62c1c953d7ee375df5eb2e44ad50ce2f5aff931723b398b8bc6f0ac159791a"}, - {file = "pydantic_core-2.23.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2718443bc671c7ac331de4eef9b673063b10af32a0bb385019ad61dcf2cc8f6c"}, - {file = "pydantic_core-2.23.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0d90e08b2727c5d01af1b5ef4121d2f0c99fbee692c762f4d9d0409c9da6541"}, - {file = "pydantic_core-2.23.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b676583fc459c64146debea14ba3af54e540b61762dfc0613dc4e98c3f66eeb"}, - {file = "pydantic_core-2.23.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:50e4661f3337977740fdbfbae084ae5693e505ca2b3130a6d4eb0f2281dc43b8"}, - {file = "pydantic_core-2.23.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:68f4cf373f0de6abfe599a38307f4417c1c867ca381c03df27c873a9069cda25"}, - {file = "pydantic_core-2.23.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:59d52cf01854cb26c46958552a21acb10dd78a52aa34c86f284e66b209db8cab"}, - {file = "pydantic_core-2.23.3.tar.gz", hash = "sha256:3cb0f65d8b4121c1b015c60104a685feb929a29d7cf204387c7f2688c7974690"}, + {file = "pydantic_core-2.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:71a5e35c75c021aaf400ac048dacc855f000bdfed91614b4a726f7432f1f3d6a"}, + {file = "pydantic_core-2.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:121ceb0e822f79163dd4699e4c54f5ad38b157084d97b34de8b232bcaad70278"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4603137322c18eaf2e06a4495f426aa8d8388940f3c457e7548145011bb68e05"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a33cd6ad9017bbeaa9ed78a2e0752c5e250eafb9534f308e7a5f7849b0b1bfb4"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15cc53a3179ba0fcefe1e3ae50beb2784dede4003ad2dfd24f81bba4b23a454f"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45d9c5eb9273aa50999ad6adc6be5e0ecea7e09dbd0d31bd0c65a55a2592ca08"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bf7b66ce12a2ac52d16f776b31d16d91033150266eb796967a7e4621707e4f6"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:655d7dd86f26cb15ce8a431036f66ce0318648f8853d709b4167786ec2fa4807"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:5556470f1a2157031e676f776c2bc20acd34c1990ca5f7e56f1ebf938b9ab57c"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206"}, + {file = "pydantic_core-2.27.1-cp310-none-win32.whl", hash = "sha256:f5a823165e6d04ccea61a9f0576f345f8ce40ed533013580e087bd4d7442b52c"}, + {file = "pydantic_core-2.27.1-cp310-none-win_amd64.whl", hash = "sha256:57866a76e0b3823e0b56692d1a0bf722bffb324839bb5b7226a7dbd6c9a40b17"}, + {file = "pydantic_core-2.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac3b20653bdbe160febbea8aa6c079d3df19310d50ac314911ed8cc4eb7f8cb8"}, + {file = "pydantic_core-2.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a5a8e19d7c707c4cadb8c18f5f60c843052ae83c20fa7d44f41594c644a1d330"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f7059ca8d64fea7f238994c97d91f75965216bcbe5f695bb44f354893f11d52"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bed0f8a0eeea9fb72937ba118f9db0cb7e90773462af7962d382445f3005e5a4"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3cb37038123447cf0f3ea4c74751f6a9d7afef0eb71aa07bf5f652b5e6a132c"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84286494f6c5d05243456e04223d5a9417d7f443c3b76065e75001beb26f88de"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acc07b2cfc5b835444b44a9956846b578d27beeacd4b52e45489e93276241025"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4fefee876e07a6e9aad7a8c8c9f85b0cdbe7df52b8a9552307b09050f7512c7e"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:258c57abf1188926c774a4c94dd29237e77eda19462e5bb901d88adcab6af919"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:35c14ac45fcfdf7167ca76cc80b2001205a8d5d16d80524e13508371fb8cdd9c"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d1b26e1dff225c31897696cab7d4f0a315d4c0d9e8666dbffdb28216f3b17fdc"}, + {file = "pydantic_core-2.27.1-cp311-none-win32.whl", hash = "sha256:2cdf7d86886bc6982354862204ae3b2f7f96f21a3eb0ba5ca0ac42c7b38598b9"}, + {file = "pydantic_core-2.27.1-cp311-none-win_amd64.whl", hash = "sha256:3af385b0cee8df3746c3f406f38bcbfdc9041b5c2d5ce3e5fc6637256e60bbc5"}, + {file = "pydantic_core-2.27.1-cp311-none-win_arm64.whl", hash = "sha256:81f2ec23ddc1b476ff96563f2e8d723830b06dceae348ce02914a37cb4e74b89"}, + {file = "pydantic_core-2.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9cbd94fc661d2bab2bc702cddd2d3370bbdcc4cd0f8f57488a81bcce90c7a54f"}, + {file = "pydantic_core-2.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5f8c4718cd44ec1580e180cb739713ecda2bdee1341084c1467802a417fe0f02"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15aae984e46de8d376df515f00450d1522077254ef6b7ce189b38ecee7c9677c"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ba5e3963344ff25fc8c40da90f44b0afca8cfd89d12964feb79ac1411a260ac"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:992cea5f4f3b29d6b4f7f1726ed8ee46c8331c6b4eed6db5b40134c6fe1768bb"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0325336f348dbee6550d129b1627cb8f5351a9dc91aad141ffb96d4937bd9529"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7597c07fbd11515f654d6ece3d0e4e5093edc30a436c63142d9a4b8e22f19c35"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3bbd5d8cc692616d5ef6fbbbd50dbec142c7e6ad9beb66b78a96e9c16729b089"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:dc61505e73298a84a2f317255fcc72b710b72980f3a1f670447a21efc88f8381"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:e1f735dc43da318cad19b4173dd1ffce1d84aafd6c9b782b3abc04a0d5a6f5bb"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f4e5658dbffe8843a0f12366a4c2d1c316dbe09bb4dfbdc9d2d9cd6031de8aae"}, + {file = "pydantic_core-2.27.1-cp312-none-win32.whl", hash = "sha256:672ebbe820bb37988c4d136eca2652ee114992d5d41c7e4858cdd90ea94ffe5c"}, + {file = "pydantic_core-2.27.1-cp312-none-win_amd64.whl", hash = "sha256:66ff044fd0bb1768688aecbe28b6190f6e799349221fb0de0e6f4048eca14c16"}, + {file = "pydantic_core-2.27.1-cp312-none-win_arm64.whl", hash = "sha256:9a3b0793b1bbfd4146304e23d90045f2a9b5fd5823aa682665fbdaf2a6c28f3e"}, + {file = "pydantic_core-2.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f216dbce0e60e4d03e0c4353c7023b202d95cbaeff12e5fd2e82ea0a66905073"}, + {file = "pydantic_core-2.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a2e02889071850bbfd36b56fd6bc98945e23670773bc7a76657e90e6b6603c08"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42b0e23f119b2b456d07ca91b307ae167cc3f6c846a7b169fca5326e32fdc6cf"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:764be71193f87d460a03f1f7385a82e226639732214b402f9aa61f0d025f0737"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c00666a3bd2f84920a4e94434f5974d7bbc57e461318d6bb34ce9cdbbc1f6b2"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ccaa88b24eebc0f849ce0a4d09e8a408ec5a94afff395eb69baf868f5183107"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65af9088ac534313e1963443d0ec360bb2b9cba6c2909478d22c2e363d98a51"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206b5cf6f0c513baffaeae7bd817717140770c74528f3e4c3e1cec7871ddd61a"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:062f60e512fc7fff8b8a9d680ff0ddaaef0193dba9fa83e679c0c5f5fbd018bc"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:a0697803ed7d4af5e4c1adf1670af078f8fcab7a86350e969f454daf598c4960"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:58ca98a950171f3151c603aeea9303ef6c235f692fe555e883591103da709b23"}, + {file = "pydantic_core-2.27.1-cp313-none-win32.whl", hash = "sha256:8065914ff79f7eab1599bd80406681f0ad08f8e47c880f17b416c9f8f7a26d05"}, + {file = "pydantic_core-2.27.1-cp313-none-win_amd64.whl", hash = "sha256:ba630d5e3db74c79300d9a5bdaaf6200172b107f263c98a0539eeecb857b2337"}, + {file = "pydantic_core-2.27.1-cp313-none-win_arm64.whl", hash = "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5"}, + {file = "pydantic_core-2.27.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:5897bec80a09b4084aee23f9b73a9477a46c3304ad1d2d07acca19723fb1de62"}, + {file = "pydantic_core-2.27.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d0165ab2914379bd56908c02294ed8405c252250668ebcb438a55494c69f44ab"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b9af86e1d8e4cfc82c2022bfaa6f459381a50b94a29e95dcdda8442d6d83864"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f6c8a66741c5f5447e047ab0ba7a1c61d1e95580d64bce852e3df1f895c4067"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a42d6a8156ff78981f8aa56eb6394114e0dedb217cf8b729f438f643608cbcd"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64c65f40b4cd8b0e049a8edde07e38b476da7e3aaebe63287c899d2cff253fa5"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdcf339322a3fae5cbd504edcefddd5a50d9ee00d968696846f089b4432cf78"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bf99c8404f008750c846cb4ac4667b798a9f7de673ff719d705d9b2d6de49c5f"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8f1edcea27918d748c7e5e4d917297b2a0ab80cad10f86631e488b7cddf76a36"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:159cac0a3d096f79ab6a44d77a961917219707e2a130739c64d4dd46281f5c2a"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:029d9757eb621cc6e1848fa0b0310310de7301057f623985698ed7ebb014391b"}, + {file = "pydantic_core-2.27.1-cp38-none-win32.whl", hash = "sha256:a28af0695a45f7060e6f9b7092558a928a28553366519f64083c63a44f70e618"}, + {file = "pydantic_core-2.27.1-cp38-none-win_amd64.whl", hash = "sha256:2d4567c850905d5eaaed2f7a404e61012a51caf288292e016360aa2b96ff38d4"}, + {file = "pydantic_core-2.27.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:e9386266798d64eeb19dd3677051f5705bf873e98e15897ddb7d76f477131967"}, + {file = "pydantic_core-2.27.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4228b5b646caa73f119b1ae756216b59cc6e2267201c27d3912b592c5e323b60"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b3dfe500de26c52abe0477dde16192ac39c98f05bf2d80e76102d394bd13854"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aee66be87825cdf72ac64cb03ad4c15ffef4143dbf5c113f64a5ff4f81477bf9"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b748c44bb9f53031c8cbc99a8a061bc181c1000c60a30f55393b6e9c45cc5bd"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ca038c7f6a0afd0b2448941b6ef9d5e1949e999f9e5517692eb6da58e9d44be"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e0bd57539da59a3e4671b90a502da9a28c72322a4f17866ba3ac63a82c4498e"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ac6c2c45c847bbf8f91930d88716a0fb924b51e0c6dad329b793d670ec5db792"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b94d4ba43739bbe8b0ce4262bcc3b7b9f31459ad120fb595627eaeb7f9b9ca01"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:00e6424f4b26fe82d44577b4c842d7df97c20be6439e8e685d0d715feceb9fb9"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:38de0a70160dd97540335b7ad3a74571b24f1dc3ed33f815f0880682e6880131"}, + {file = "pydantic_core-2.27.1-cp39-none-win32.whl", hash = "sha256:7ccebf51efc61634f6c2344da73e366c75e735960b5654b63d7e6f69a5885fa3"}, + {file = "pydantic_core-2.27.1-cp39-none-win_amd64.whl", hash = "sha256:a57847b090d7892f123726202b7daa20df6694cbd583b67a592e856bff603d6c"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3fa80ac2bd5856580e242dbc202db873c60a01b20309c8319b5c5986fbe53ce6"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d950caa237bb1954f1b8c9227b5065ba6875ac9771bb8ec790d956a699b78676"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e4216e64d203e39c62df627aa882f02a2438d18a5f21d7f721621f7a5d3611d"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02a3d637bd387c41d46b002f0e49c52642281edacd2740e5a42f7017feea3f2c"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:161c27ccce13b6b0c8689418da3885d3220ed2eae2ea5e9b2f7f3d48f1d52c27"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:19910754e4cc9c63bc1c7f6d73aa1cfee82f42007e407c0f413695c2f7ed777f"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:e173486019cc283dc9778315fa29a363579372fe67045e971e89b6365cc035ed"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:af52d26579b308921b73b956153066481f064875140ccd1dfd4e77db89dbb12f"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:981fb88516bd1ae8b0cbbd2034678a39dedc98752f264ac9bc5839d3923fa04c"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5fde892e6c697ce3e30c61b239330fc5d569a71fefd4eb6512fc6caec9dd9e2f"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:816f5aa087094099fff7edabb5e01cc370eb21aa1a1d44fe2d2aefdfb5599b31"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c10c309e18e443ddb108f0ef64e8729363adbfd92d6d57beec680f6261556f3"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98476c98b02c8e9b2eec76ac4156fd006628b1b2d0ef27e548ffa978393fd154"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3027001c28434e7ca5a6e1e527487051136aa81803ac812be51802150d880dd"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:7699b1df36a48169cdebda7ab5a2bac265204003f153b4bd17276153d997670a"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1c39b07d90be6b48968ddc8c19e7585052088fd7ec8d568bb31ff64c70ae3c97"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:46ccfe3032b3915586e469d4972973f893c0a2bb65669194a5bdea9bacc088c2"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:62ba45e21cf6571d7f716d903b5b7b6d2617e2d5d67c0923dc47b9d41369f840"}, + {file = "pydantic_core-2.27.1.tar.gz", hash = "sha256:62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235"}, ] [package.dependencies] @@ -344,21 +367,23 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pyright" -version = "1.1.380" +version = "1.1.389" description = "Command line wrapper for pyright" optional = false python-versions = ">=3.7" files = [ - {file = "pyright-1.1.380-py3-none-any.whl", hash = "sha256:a6404392053d8848bacc7aebcbd9d318bb46baf1a1a000359305481920f43879"}, - {file = "pyright-1.1.380.tar.gz", hash = "sha256:e6ceb1a5f7e9f03106e0aa1d6fbb4d97735a5e7ffb59f3de6b2db590baf935b2"}, + {file = "pyright-1.1.389-py3-none-any.whl", hash = "sha256:41e9620bba9254406dc1f621a88ceab5a88af4c826feb4f614d95691ed243a60"}, + {file = "pyright-1.1.389.tar.gz", hash = "sha256:716bf8cc174ab8b4dcf6828c3298cac05c5ed775dda9910106a5dcfe4c7fe220"}, ] [package.dependencies] nodeenv = ">=1.6.0" +typing-extensions = ">=4.1" [package.extras] -all = ["twine (>=3.4.1)"] +all = ["nodejs-wheel-binaries", "twine (>=3.4.1)"] dev = ["twine (>=3.4.1)"] +nodejs = ["nodejs-wheel-binaries"] [[package]] name = "requests" @@ -409,13 +434,43 @@ files = [ [[package]] name = "tomli" -version = "2.0.1" +version = "2.2.1" description = "A lil' TOML parser" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, + {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, + {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, + {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, + {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, + {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, + {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, + {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, + {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, ] [[package]] diff --git a/topology-discovery/python/pyproject.toml b/topology-discovery/python/pyproject.toml index bf02c5e..79843ff 100644 --- a/topology-discovery/python/pyproject.toml +++ b/topology-discovery/python/pyproject.toml @@ -81,4 +81,4 @@ init_forbid_extra = true init_typed = true warn_required_dynamic_aliases = true warn_untyped_fields = true - +ignore_missing_imports = true diff --git a/utils/graphql-pydantic-generator/README.md b/utils/graphql-pydantic-generator/README.md index e98f236..ecfa373 100644 --- a/utils/graphql-pydantic-generator/README.md +++ b/utils/graphql-pydantic-generator/README.md @@ -4,7 +4,7 @@ A utility wrapper for datamodel-code-generator that generates Pydantic v2 model from single GraphQL schema file, or from directory that contains multiple GraphQL schema files including any nested subdirectories with other GraphQL -schem files. +schema files. ## Usage @@ -22,4 +22,11 @@ user@ntb:~/frinx-services-python-api/utils/graphql-pydantic-generator$ poetry in 3. Generate Pydantic model from GraphQL schema ```bash user@ntb:~/frinx-services-python-api/utils/graphql-pydantic-generator$ poetry run generate --input_path ~/topology-discovery/topology_discovery/api/graphql/schemas/ --output_path ~/frinx-services-python-api/topology-discovery/python/frinx_api/topology_discovery/__init__.py +``` + +4. Fix 'Incompatible types in assignment' mypy error +```example +typename__: Optional[Literal['SynceDevice']] = Field( + 'SynceDevice', alias='__typename' +) # type: ignore ``` \ No newline at end of file From 9358a97b14a980c884f515814769ec4c548ba595 Mon Sep 17 00:00:00 2001 From: Marek Pastorek Date: Mon, 2 Dec 2024 13:21:03 +0100 Subject: [PATCH 4/5] fixed ruff Signed-off-by: Marek --- .../frinx_api/blueprints_provider/__init__.py | 87 ++- .../frinx_api/performance_monitor/__init__.py | 46 +- .../frinx_api/topology_discovery/__init__.py | 717 +++++++++++------- .../graphql_pydantic_generator/__main__.py | 1 + 4 files changed, 538 insertions(+), 313 deletions(-) diff --git a/blueprints-provider/python/frinx_api/blueprints_provider/__init__.py b/blueprints-provider/python/frinx_api/blueprints_provider/__init__.py index 5463a04..834f318 100644 --- a/blueprints-provider/python/frinx_api/blueprints_provider/__init__.py +++ b/blueprints-provider/python/frinx_api/blueprints_provider/__init__.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: -# timestamp: 2024-11-29T13:27:51+00:00 +# timestamp: 2024-12-02T12:20:12+00:00 from __future__ import annotations @@ -50,13 +50,13 @@ class BlueprintType(Enum): Specifies the type of blueprint. """ - INSTALL = 'INSTALL' - PERFORMANCE = 'PERFORMANCE' - STREAM = 'STREAM' - TOPOLOGY_LLDP = 'TOPOLOGY_LLDP' - TOPOLOGY_MPLS = 'TOPOLOGY_MPLS' - TOPOLOGY_PTP = 'TOPOLOGY_PTP' - TOPOLOGY_SYNCE = 'TOPOLOGY_SYNCE' + install = 'INSTALL' + performance = 'PERFORMANCE' + stream = 'STREAM' + topology_lldp = 'TOPOLOGY_LLDP' + topology_mpls = 'TOPOLOGY_MPLS' + topology_ptp = 'TOPOLOGY_PTP' + topology_synce = 'TOPOLOGY_SYNCE' class ConnectionType(Enum): @@ -64,10 +64,10 @@ class ConnectionType(Enum): Management protocol used for creation of connection to the device. """ - CLI = 'CLI' - GNMI = 'GNMI' - NETCONF = 'NETCONF' - SNMP = 'SNMP' + cli = 'CLI' + gnmi = 'GNMI' + netconf = 'NETCONF' + snmp = 'SNMP' class Connection(BaseModel): @@ -78,8 +78,10 @@ class Connection(BaseModel): edges: List[Edge] = Field( ..., description='List of edges within the blueprint connection.' ) - pageInfo: PageInfo = Field( - ..., description='Pagination information for the blueprint connection.' + page_info: PageInfo = Field( + ..., + alias='pageInfo', + description='Pagination information for the blueprint connection.', ) typename__: Optional[Literal['Connection']] = Field( 'Connection', alias='__typename' @@ -103,13 +105,15 @@ class BlueprintConnection(Connection): edges: List[BlueprintEdge] = Field( ..., description='List of edges within the blueprint connection.' - ) # type: ignore - pageInfo: PageInfo = Field( - ..., description='Pagination information for the blueprint connection.' + ) + page_info: PageInfo = Field( + ..., + alias='pageInfo', + description='Pagination information for the blueprint connection.', ) typename__: Optional[Literal['BlueprintConnection']] = Field( 'BlueprintConnection', alias='__typename' - ) # type: ignore + ) class BlueprintEdge(Edge): @@ -123,7 +127,7 @@ class BlueprintEdge(Edge): ) typename__: Optional[Literal['BlueprintEdge']] = Field( 'BlueprintEdge', alias='__typename' - ) # type: ignore + ) class BlueprintMetadata(BaseModel): @@ -131,11 +135,12 @@ class BlueprintMetadata(BaseModel): Metadata associated with a blueprint. """ - createdAt: DateTime = Field( - ..., description='Timestamp of the blueprint creation (UTC).' + created_at: DateTime = Field( + ..., alias='createdAt', description='Timestamp of the blueprint creation (UTC).' ) - updatedAt: DateTime = Field( + updated_at: DateTime = Field( ..., + alias='updatedAt', description='Timestamp of the last blueprint update (UTC).\nIf the blueprint was not updated, the value is equal to the creation timestamp.\nRemoving the blueprint is considered as an update.', ) typename__: Optional[Literal['BlueprintMetadata']] = Field( @@ -148,15 +153,17 @@ class BlueprintNode(BaseModel): Information about the blueprint - identifier, patterns used for matching the device, and the template content. """ - blueprintType: BlueprintType = Field( - ..., description='Specifies the type of blueprint.' + blueprint_type: BlueprintType = Field( + ..., alias='blueprintType', description='Specifies the type of blueprint.' ) - connectionType: ConnectionType = Field( + connection_type: ConnectionType = Field( ..., + alias='connectionType', description='Management protocol used for creation of connection to the device.', ) - modelPattern: Optional[String] = Field( + model_pattern: Optional[String] = Field( None, + alias='modelPattern', description="Regular expression pattern for matching the model of the device (for example, 'vsr .+'", ) name: String = Field( @@ -166,12 +173,14 @@ class BlueprintNode(BaseModel): ..., description='Settings associated with the blueprint in JSON format (e.g. installation parameters or stream parameters).', ) - vendorPattern: Optional[String] = Field( + vendor_pattern: Optional[String] = Field( None, + alias='vendorPattern', description="Regular expression pattern for matching the vendor of the device (for example, '.*wrt').", ) - versionPattern: Optional[String] = Field( + version_pattern: Optional[String] = Field( None, + alias='versionPattern', description="Regular expression pattern for matching the version of the device (for example, 'v[0-9]+').", ) typename__: Optional[Literal['BlueprintNode']] = Field( @@ -206,12 +215,14 @@ class PageInfo(BaseModel): Contains pagination information for a connection. Indicates if there are more pages and the position of the last fetched item. """ - endCursor: Optional[String] = Field( + end_cursor: Optional[String] = Field( None, + alias='endCursor', description='The cursor for the last item in the current page of results. Use this cursor to fetch the next set of items.', ) - hasNextPage: Boolean = Field( + has_next_page: Boolean = Field( ..., + alias='hasNextPage', description='Indicates whether there is a next page of items available after the current one.', ) typename__: Optional[Literal['PageInfo']] = Field('PageInfo', alias='__typename') @@ -222,15 +233,17 @@ class BlueprintNodeInput(BaseModel): Information about the blueprint - identifier, patterns used for matching the device, and the template content. """ - blueprintType: BlueprintType = Field( - ..., description='Specifies the type of blueprint.' + blueprint_type: BlueprintType = Field( + ..., alias='blueprintType', description='Specifies the type of blueprint.' ) - connectionType: ConnectionType = Field( + connection_type: ConnectionType = Field( ..., + alias='connectionType', description='Management protocol used for creation of connection to the device.', ) - modelPattern: Optional[String] = Field( + model_pattern: Optional[String] = Field( None, + alias='modelPattern', description="Regular expression pattern for matching the model of the device (for example, 'vsr .+'", ) name: String = Field( @@ -240,12 +253,14 @@ class BlueprintNodeInput(BaseModel): ..., description='Settings associated with the blueprint in JSON format (e.g. installation parameters or stream parameters).', ) - vendorPattern: Optional[String] = Field( + vendor_pattern: Optional[String] = Field( None, + alias='vendorPattern', description="Regular expression pattern for matching the vendor of the device (for example, '.*wrt').", ) - versionPattern: Optional[String] = Field( + version_pattern: Optional[String] = Field( None, + alias='versionPattern', description="Regular expression pattern for matching the version of the device (for example, 'v[0-9]+').", ) typename__: Optional[Literal['BlueprintNodeInput']] = Field( diff --git a/performance-monitor/python/frinx_api/performance_monitor/__init__.py b/performance-monitor/python/frinx_api/performance_monitor/__init__.py index 41e15fc..294c7dc 100644 --- a/performance-monitor/python/frinx_api/performance_monitor/__init__.py +++ b/performance-monitor/python/frinx_api/performance_monitor/__init__.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: -# timestamp: 2024-11-29T13:27:01+00:00 +# timestamp: 2024-12-02T12:19:12+00:00 from __future__ import annotations @@ -81,8 +81,10 @@ class BulkUtilizationConnection(BaseModel): ..., description='A list of metrics for multiple devices, each with associated cursor information.', ) - pageInfo: PageInfo = Field( - ..., description='Information about the current page of results.' + page_info: PageInfo = Field( + ..., + alias='pageInfo', + description='Information about the current page of results.', ) typename__: Optional[Literal['BulkUtilizationConnection']] = Field( 'BulkUtilizationConnection', alias='__typename' @@ -95,7 +97,9 @@ class CurrentUtilization(BaseModel): """ device: String = Field(..., description='The unique identifier for the device.') - deviceMetrics: MetricsNode = Field(..., description='The device metrics.') + device_metrics: MetricsNode = Field( + ..., alias='deviceMetrics', description='The device metrics.' + ) typename__: Optional[Literal['CurrentUtilization']] = Field( 'CurrentUtilization', alias='__typename' ) @@ -107,8 +111,10 @@ class MetricsEdge(BaseModel): """ cursor: String = Field(..., description='A cursor for pagination.') - deviceMetrics: List[MetricsWithDeviceNode] = Field( - ..., description='A list of device metrics associated with a specific device.' + device_metrics: List[MetricsWithDeviceNode] = Field( + ..., + alias='deviceMetrics', + description='A list of device metrics associated with a specific device.', ) typename__: Optional[Literal['MetricsEdge']] = Field( 'MetricsEdge', alias='__typename' @@ -124,7 +130,7 @@ class MetricsNode(MetricsInterface): memory: Optional[Float] = None typename__: Optional[Literal['MetricsNode']] = Field( 'MetricsNode', alias='__typename' - ) # type: ignore + ) class MetricsWithCursorNode(MetricsInterface): @@ -139,7 +145,7 @@ class MetricsWithCursorNode(MetricsInterface): memory: Optional[Float] = None typename__: Optional[Literal['MetricsWithCursorNode']] = Field( 'MetricsWithCursorNode', alias='__typename' - ) # type: ignore + ) class MetricsWithDeviceNode(MetricsInterface): @@ -152,7 +158,7 @@ class MetricsWithDeviceNode(MetricsInterface): memory: Optional[Float] = None typename__: Optional[Literal['MetricsWithDeviceNode']] = Field( 'MetricsWithDeviceNode', alias='__typename' - ) # type: ignore + ) class PageInfo(BaseModel): @@ -160,11 +166,13 @@ class PageInfo(BaseModel): Pagination metadata that is usually coupled to a returned list of objects. """ - endCursor: Optional[String] = Field( - None, description='Pointer to the last object in the list.' + end_cursor: Optional[String] = Field( + None, alias='endCursor', description='Pointer to the last object in the list.' ) - hasNextPage: Boolean = Field( - ..., description='Indicates if there is a next object in the list.' + has_next_page: Boolean = Field( + ..., + alias='hasNextPage', + description='Indicates if there is a next object in the list.', ) typename__: Optional[Literal['PageInfo']] = Field('PageInfo', alias='__typename') @@ -175,11 +183,15 @@ class UtilizationConnection(BaseModel): """ device: String = Field(..., description='The unique identifier for the device.') - deviceMetrics: List[MetricsWithCursorNode] = Field( - ..., description='A list of device metrics with associated cursor information.' + device_metrics: List[MetricsWithCursorNode] = Field( + ..., + alias='deviceMetrics', + description='A list of device metrics with associated cursor information.', ) - pageInfo: PageInfo = Field( - ..., description='Information about the current page of results.' + page_info: PageInfo = Field( + ..., + alias='pageInfo', + description='Information about the current page of results.', ) typename__: Optional[Literal['UtilizationConnection']] = Field( 'UtilizationConnection', alias='__typename' diff --git a/topology-discovery/python/frinx_api/topology_discovery/__init__.py b/topology-discovery/python/frinx_api/topology_discovery/__init__.py index 2e8493a..40ad2cd 100644 --- a/topology-discovery/python/frinx_api/topology_discovery/__init__.py +++ b/topology-discovery/python/frinx_api/topology_discovery/__init__.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: -# timestamp: 2024-11-29T13:24:32+00:00 +# timestamp: 2024-12-02T11:12:29+00:00 from __future__ import annotations @@ -50,8 +50,8 @@ class BgpLsProtocolType(Enum): BGP-LS Protocol types. """ - ISIS = 'ISIS' - OSPF = 'OSPF' + isis = 'ISIS' + ospf = 'OSPF' class CoordinatesNodeType(Enum): @@ -59,8 +59,8 @@ class CoordinatesNodeType(Enum): Type of the node in the topology for which the coordinates are being updated. """ - DEVICE = 'DEVICE' - NETWORK = 'NETWORK' + device = 'DEVICE' + network = 'NETWORK' class GeometryType(Enum): @@ -68,14 +68,14 @@ class GeometryType(Enum): Type of geometry. """ - POINT = 'POINT' + point = 'POINT' class MplsOperation(Enum): - NOOP = 'NOOP' - POP = 'POP' - PUSH = 'PUSH' - SWAP = 'SWAP' + noop = 'NOOP' + pop = 'POP' + push = 'PUSH' + swap = 'SWAP' class NetRoutingPathOutputCollections(Enum): @@ -83,8 +83,8 @@ class NetRoutingPathOutputCollections(Enum): Types of the nodes that should be included in the returned path. """ - NET_DEVICE = 'NET_DEVICE' - NET_INTERFACE = 'NET_INTERFACE' + net_device = 'NET_DEVICE' + net_interface = 'NET_INTERFACE' class NodeStatus(Enum): @@ -92,8 +92,8 @@ class NodeStatus(Enum): Status of the node from the view of the device registry. """ - OK = 'OK' - UNKNOWN = 'UNKNOWN' + ok = 'OK' + unknown = 'UNKNOWN' class PtpPathOutputCollections(Enum): @@ -101,13 +101,13 @@ class PtpPathOutputCollections(Enum): Types of the nodes that should be included in the returned path. """ - PTP_DEVICE = 'PTP_DEVICE' - PTP_INTERFACE = 'PTP_INTERFACE' + ptp_device = 'PTP_DEVICE' + ptp_interface = 'PTP_INTERFACE' class Signalisation(Enum): - LDP = 'LDP' - RSVP = 'RSVP' + ldp = 'LDP' + rsvp = 'RSVP' class SyncePathOutputCollections(Enum): @@ -115,8 +115,8 @@ class SyncePathOutputCollections(Enum): Types of the nodes that should be included in the returned path. """ - SYNCE_DEVICE = 'SYNCE_DEVICE' - SYNCE_INTERFACE = 'SYNCE_INTERFACE' + synce_device = 'SYNCE_DEVICE' + synce_interface = 'SYNCE_INTERFACE' class TopologyType(Enum): @@ -124,11 +124,11 @@ class TopologyType(Enum): Present topology types. """ - ETH_TOPOLOGY = 'ETH_TOPOLOGY' - MPLS_TOPOLOGY = 'MPLS_TOPOLOGY' - NETWORK_TOPOLOGY = 'NETWORK_TOPOLOGY' - PHYSICAL_TOPOLOGY = 'PHYSICAL_TOPOLOGY' - PTP_TOPOLOGY = 'PTP_TOPOLOGY' + eth_topology = 'ETH_TOPOLOGY' + mpls_topology = 'MPLS_TOPOLOGY' + network_topology = 'NETWORK_TOPOLOGY' + physical_topology = 'PHYSICAL_TOPOLOGY' + ptp_topology = 'PTP_TOPOLOGY' class Node(BaseModel): @@ -145,8 +145,9 @@ class CommonNodesResponse(BaseModel): Response from the commonNodes query that wraps the list of found common nodes in the database. """ - commonNodes: List[String] = Field( + common_nodes: List[String] = Field( ..., + alias='commonNodes', description='List of the common node names. Common nodes contain connection to all nodes specified on the input.', ) typename__: Optional[Literal['CommonNodesResponse']] = Field( @@ -174,8 +175,10 @@ class CoordinatesResponse(BaseModel): installed: InstalledDevices = Field( ..., description='Devices that exist in the database.' ) - notInstalled: List[String] = Field( - ..., description='List of node names that do not exist in the database.' + not_installed: List[String] = Field( + ..., + alias='notInstalled', + description='List of node names that do not exist in the database.', ) typename__: Optional[Literal['CoordinatesResponse']] = Field( 'CoordinatesResponse', alias='__typename' @@ -187,8 +190,9 @@ class CreateBackupResponse(BaseModel): Response from the createBackup mutation that contains information about created backup. """ - dbName: String = Field( + db_name: String = Field( ..., + alias='dbName', description='Name of the created backup database. Format: f"backup_{datetime.today().strftime(\'%Y%m%d%H%M%S\')}".', ) typename__: Optional[Literal['CreateBackupResponse']] = Field( @@ -201,8 +205,10 @@ class DeleteBackupsResponse(BaseModel): Response from the deleteBackups mutation that contains information about removed backups. """ - deletedBackups: List[String] = Field( - ..., description='Names of the removed databases that contained backups.' + deleted_backups: List[String] = Field( + ..., + alias='deletedBackups', + description='Names of the removed databases that contained backups.', ) typename__: Optional[Literal['DeleteBackupsResponse']] = Field( 'DeleteBackupsResponse', alias='__typename' @@ -233,17 +239,22 @@ class DeviceMetadata(Node): Representation of the device in the metadata. """ - deviceName: String = Field(..., description='Human readable name of the device.') - deviceType: Optional[String] = Field( - None, description='Type of the device (ex. router).' + device_name: String = Field( + ..., alias='deviceName', description='Human readable name of the device.' + ) + device_type: Optional[String] = Field( + None, alias='deviceType', description='Type of the device (ex. router).' ) - geoLocation: Optional[DeviceGeoLocation] = Field( - None, description='Device geographic data of point type in GeoJson format.' + geo_location: Optional[DeviceGeoLocation] = Field( + None, + alias='geoLocation', + description='Device geographic data of point type in GeoJson format.', ) id: ID = Field(..., description='Unique identifier of the object.') model: Optional[String] = Field(None, description='Model of the device (XR, ASR).') - protocolType: Optional[List[String]] = Field( + protocol_type: Optional[List[String]] = Field( None, + alias='protocolType', description='Protocol used for management for the device (cli, netconf, gnmi).', ) vendor: Optional[String] = Field( @@ -254,7 +265,7 @@ class DeviceMetadata(Node): ) typename__: Optional[Literal['DeviceMetadata']] = Field( 'DeviceMetadata', alias='__typename' - ) # type: ignore + ) class DeviceMetadataEdge(BaseModel): @@ -272,8 +283,10 @@ class DeviceMetadataEdge(BaseModel): class InstalledDevices(BaseModel): - notUpdated: List[String] = Field( - ..., description='List of node names which coordinates have not been updated.' + not_updated: List[String] = Field( + ..., + alias='notUpdated', + description='List of node names which coordinates have not been updated.', ) updated: List[String] = Field( ..., description='List of node names which coordinates have been updated.' @@ -288,12 +301,18 @@ class LspTunnel(BaseModel): LSP Tunnel (related to tunnel originating from this device). """ - fromDevice: Optional[String] = Field( - None, description='From which device is the tunnel originating.' + from_device: Optional[String] = Field( + None, + alias='fromDevice', + description='From which device is the tunnel originating.', + ) + lsp_id: String = Field( + ..., alias='lspId', description='Name of the link state packet.' ) - lspId: String = Field(..., description='Name of the link state packet.') signalisation: Signalisation = Field(..., description='Type of signalisation.') - toDevice: Optional[String] = Field(None, description='Where is the tunnel headed.') + to_device: Optional[String] = Field( + None, alias='toDevice', description='Where is the tunnel headed.' + ) uptime: Optional[Int] = Field(None, description='Uptime of the tunnel in seconds.') typename__: Optional[Literal['LspTunnel']] = Field('LspTunnel', alias='__typename') @@ -306,7 +325,9 @@ class MetadataConnection(BaseModel): edges: Optional[List[Optional[DeviceMetadataEdge]]] = Field( None, description='List of Metadata device objects.' ) - pageInfo: PageInfo = Field(..., description='Pagination metadata.') + page_info: PageInfo = Field( + ..., alias='pageInfo', description='Pagination metadata.' + ) typename__: Optional[Literal['MetadataConnection']] = Field( 'MetadataConnection', alias='__typename' ) @@ -317,17 +338,27 @@ class MplsData(BaseModel): MPLS Data (related to all tunnels). """ - inInterface: Optional[String] = Field(None, description='The input interface.') - inLabel: Optional[Int] = Field(None, description='The input label.') - lspId: String = Field(..., description='Name of the link state packet.') - mplsOperation: Optional[MplsOperation] = Field( - None, description='The operation type.' + in_interface: Optional[String] = Field( + None, alias='inInterface', description='The input interface.' + ) + in_label: Optional[Int] = Field( + None, alias='inLabel', description='The input label.' ) - operState: Optional[String] = Field( - None, description='Operational state of the device.' + lsp_id: String = Field( + ..., alias='lspId', description='Name of the link state packet.' + ) + mpls_operation: Optional[MplsOperation] = Field( + None, alias='mplsOperation', description='The operation type.' + ) + oper_state: Optional[String] = Field( + None, alias='operState', description='Operational state of the device.' + ) + out_interface: Optional[String] = Field( + None, alias='outInterface', description='The input interface.' + ) + out_label: Optional[Int] = Field( + None, alias='outLabel', description='The output label.' ) - outInterface: Optional[String] = Field(None, description='The input interface.') - outLabel: Optional[Int] = Field(None, description='The output label.') signalisation: Optional[Signalisation] = Field( None, description='Type of signalisation.' ) @@ -348,8 +379,10 @@ class MplsDevice(Node): None, description='List of strings that can be used for grouping of synced devices.', ) - mplsInterfaces: MplsInterfaceConnection = Field( - ..., description='List of ports that are present on the device.' + mpls_interfaces: MplsInterfaceConnection = Field( + ..., + alias='mplsInterfaces', + description='List of ports that are present on the device.', ) name: String = Field(..., description='Human readable name of the device.') status: NodeStatus = Field( @@ -357,7 +390,7 @@ class MplsDevice(Node): ) typename__: Optional[Literal['MplsDevice']] = Field( 'MplsDevice', alias='__typename' - ) # type: ignore + ) class MplsDeviceConnection(BaseModel): @@ -368,7 +401,9 @@ class MplsDeviceConnection(BaseModel): edges: Optional[List[Optional[MplsDeviceEdge]]] = Field( None, description='List of MplsDevice objects.' ) - pageInfo: PageInfo = Field(..., description='Pagination metadata.') + page_info: PageInfo = Field( + ..., alias='pageInfo', description='Pagination metadata.' + ) typename__: Optional[Literal['MplsDeviceConnection']] = Field( 'MplsDeviceConnection', alias='__typename' ) @@ -379,9 +414,9 @@ class MplsDeviceDetails(BaseModel): Details specific to MPLS (Multi-Protocol Label Switching). """ - lspTunnels: Optional[List[Optional[LspTunnel]]] = None - mplsData: Optional[List[Optional[MplsData]]] = None - routerId: Optional[String] = None + lsp_tunnels: Optional[List[Optional[LspTunnel]]] = Field(None, alias='lspTunnels') + mpls_data: Optional[List[Optional[MplsData]]] = Field(None, alias='mplsData') + router_id: Optional[String] = Field(None, alias='routerId') typename__: Optional[Literal['MplsDeviceDetails']] = Field( 'MplsDeviceDetails', alias='__typename' ) @@ -407,11 +442,11 @@ class MplsInterface(Node): """ id: ID = Field(..., description='Unique identifier of the object.') - mplsDevice: Optional[MplsDevice] = Field( - None, description='Device that owns this interface.' + mpls_device: Optional[MplsDevice] = Field( + None, alias='mplsDevice', description='Device that owns this interface.' ) - mplsLinks: Optional[MplsLinkConnection] = Field( - None, description='Link to connected remote MPLS device.' + mpls_links: Optional[MplsLinkConnection] = Field( + None, alias='mplsLinks', description='Link to connected remote MPLS device.' ) name: String = Field(..., description='Human readable name of the network port.') status: NodeStatus = Field( @@ -420,7 +455,7 @@ class MplsInterface(Node): ) typename__: Optional[Literal['MplsInterface']] = Field( 'MplsInterface', alias='__typename' - ) # type: ignore + ) class MplsInterfaceConnection(BaseModel): @@ -431,7 +466,9 @@ class MplsInterfaceConnection(BaseModel): edges: Optional[List[Optional[MplsInterfaceEdge]]] = Field( None, description='List of MplsInterface objects.' ) - pageInfo: PageInfo = Field(..., description='Pagination metadata.') + page_info: PageInfo = Field( + ..., alias='pageInfo', description='Pagination metadata.' + ) typename__: Optional[Literal['MplsInterfaceConnection']] = Field( 'MplsInterfaceConnection', alias='__typename' ) @@ -459,7 +496,9 @@ class MplsLinkConnection(BaseModel): edges: Optional[List[Optional[MplsLinkEdge]]] = Field( None, description='List of MplsInterface objects.' ) - pageInfo: PageInfo = Field(..., description='Pagination metadata.') + page_info: PageInfo = Field( + ..., alias='pageInfo', description='Pagination metadata.' + ) typename__: Optional[Literal['MplsLinkConnection']] = Field( 'MplsLinkConnection', alias='__typename' ) @@ -484,11 +523,15 @@ class MplsLinkEdge(BaseModel): class MplsLspMetadata(BaseModel): - fromDevice: String = Field( - ..., description='From which device is the tunnel originating.' + from_device: String = Field( + ..., + alias='fromDevice', + description='From which device is the tunnel originating.', ) signalisation: String = Field(..., description='Type of signalisation.') - toDevice: String = Field(..., description='Where is the tunnel headed.') + to_device: String = Field( + ..., alias='toDevice', description='Where is the tunnel headed.' + ) uptime: Optional[Int] = Field(None, description='Uptime of the tunnel in seconds.') typename__: Optional[Literal['MplsLspMetadata']] = Field( 'MplsLspMetadata', alias='__typename' @@ -496,7 +539,9 @@ class MplsLspMetadata(BaseModel): class MplsLspPath(BaseModel): - lspMetadata: Optional[MplsLspMetadata] = Field(None, description='LSP metadata.') + lsp_metadata: Optional[MplsLspMetadata] = Field( + None, alias='lspMetadata', description='LSP metadata.' + ) path: Optional[List[Optional[String]]] = Field( None, description='Ordered list of link IDs & device IDs on the path.' ) @@ -506,10 +551,14 @@ class MplsLspPath(BaseModel): class MplsTotalLsps(BaseModel): - incomingLsps: Optional[Int] = Field(None, description='Number of incoming LSPs.') - outcomingLsps: Optional[Int] = Field(None, description='Number of outcoming LSPs.') - toDevice: Optional[String] = Field( - None, description='To which device the LSP is headed.' + incoming_lsps: Optional[Int] = Field( + None, alias='incomingLsps', description='Number of incoming LSPs.' + ) + outcoming_lsps: Optional[Int] = Field( + None, alias='outcomingLsps', description='Number of outcoming LSPs.' + ) + to_device: Optional[String] = Field( + None, alias='toDevice', description='To which device the LSP is headed.' ) typename__: Optional[Literal['MplsTotalLsps']] = Field( 'MplsTotalLsps', alias='__typename' @@ -521,12 +570,14 @@ class Neighbor(BaseModel): Metadata information about a neighbor device. """ - deviceId: String = Field( + device_id: String = Field( ..., + alias='deviceId', description='Identifier of the neighbor device document (for example, MplsDevice/1).', ) - deviceName: String = Field( + device_name: String = Field( ..., + alias='deviceName', description='Human-readable name of the neighbor device (for example, CPE_01).', ) typename__: Optional[Literal['Neighbor']] = Field('Neighbor', alias='__typename') @@ -541,25 +592,30 @@ class NetDevice(Node): ..., description='Coordinates of the device node on the graph.' ) id: ID = Field(..., description='Unique identifier of the object.') - netInterfaces: NetInterfaceConnection = Field( + net_interfaces: NetInterfaceConnection = Field( ..., + alias='netInterfaces', description='Interfaces that are used for connecting to other routing entities.', ) - netNetworks: NetNetworkConnection = Field( - ..., description='Networks that are attached to the routing entity.' + net_networks: NetNetworkConnection = Field( + ..., + alias='netNetworks', + description='Networks that are attached to the routing entity.', ) - ospfAreaId: String = Field( + ospf_area_id: String = Field( ..., + alias='ospfAreaId', description='Identifier of OSPF area formatted as IPv4 address (for example, 0.0.0.0 represents area 0).', ) - phyDevice: Optional[PhyDevice] = Field( - None, description='Linked device in the physical topology.' + phy_device: Optional[PhyDevice] = Field( + None, alias='phyDevice', description='Linked device in the physical topology.' ) - routerId: String = Field( + router_id: String = Field( ..., + alias='routerId', description='Identifier of the routing entity (usually IPv4 address). RouterId and ospfAreaId together compose a unique key.', ) - typename__: Optional[Literal['NetDevice']] = Field('NetDevice', alias='__typename') # type: ignore + typename__: Optional[Literal['NetDevice']] = Field('NetDevice', alias='__typename') class NetDeviceConnection(BaseModel): @@ -570,7 +626,9 @@ class NetDeviceConnection(BaseModel): edges: Optional[List[Optional[NetDeviceEdge]]] = Field( None, description='List of NetDevice objects.' ) - pageInfo: PageInfo = Field(..., description='Pagination metadata.') + page_info: PageInfo = Field( + ..., alias='pageInfo', description='Pagination metadata.' + ) typename__: Optional[Literal['NetDeviceConnection']] = Field( 'NetDeviceConnection', alias='__typename' ) @@ -596,21 +654,23 @@ class NetInterface(Node): """ id: ID = Field(..., description='Unique identifier of the object.') - igpMetric: Optional[Int] = Field( - None, description='IGP metric configured on the network interface.' + igp_metric: Optional[Int] = Field( + None, + alias='igpMetric', + description='IGP metric configured on the network interface.', ) - ipAddress: String = Field( - ..., description='IP address configured on the interface.' + ip_address: String = Field( + ..., alias='ipAddress', description='IP address configured on the interface.' ) - netDevice: Optional[NetDevice] = Field( - None, description='Routing entity that owns this interface.' + net_device: Optional[NetDevice] = Field( + None, alias='netDevice', description='Routing entity that owns this interface.' ) - netLinks: NetLinkConnection = Field( - ..., description='Links to connected remote network devices.' + net_links: NetLinkConnection = Field( + ..., alias='netLinks', description='Links to connected remote network devices.' ) typename__: Optional[Literal['NetInterface']] = Field( 'NetInterface', alias='__typename' - ) # type: ignore + ) class NetInterfaceConnection(BaseModel): @@ -621,7 +681,9 @@ class NetInterfaceConnection(BaseModel): edges: Optional[List[Optional[NetInterfaceEdge]]] = Field( None, description='List of NetInterface objects.' ) - pageInfo: PageInfo = Field(..., description='Pagination metadata.') + page_info: PageInfo = Field( + ..., alias='pageInfo', description='Pagination metadata.' + ) typename__: Optional[Literal['NetInterfaceConnection']] = Field( 'NetInterfaceConnection', alias='__typename' ) @@ -642,29 +704,39 @@ class NetInterfaceEdge(BaseModel): class NetLinkAttributes(BaseModel): - adminGroup: Optional[List[Optional[Int]]] = Field( + admin_group: Optional[List[Optional[Int]]] = Field( None, + alias='adminGroup', description='A list of admin group masks on the network interface. (Group Number)', ) - igpMetric: Optional[Int] = Field( - None, description='IGP metric configured on the network interface.' + igp_metric: Optional[Int] = Field( + None, + alias='igpMetric', + description='IGP metric configured on the network interface.', ) - maxLinkBandwidth: Optional[Float] = Field( + max_link_bandwidth: Optional[Float] = Field( None, + alias='maxLinkBandwidth', description='The maximum link bandwidth of the network interface. (Bytes per second)', ) - maxReservableLinkBandwidth: Optional[Float] = Field( + max_reservable_link_bandwidth: Optional[Float] = Field( None, + alias='maxReservableLinkBandwidth', description='The maximum reservable link bandwidth of the network interface. (Bytes per second)', ) - sharedRiskLinkGroup: Optional[List[Optional[Int]]] = Field( - None, description='A list of shared risk link groups on the network interface.' + shared_risk_link_group: Optional[List[Optional[Int]]] = Field( + None, + alias='sharedRiskLinkGroup', + description='A list of shared risk link groups on the network interface.', ) - trafficEngineeringMetric: Optional[Int] = Field( - None, description='Traffic Engineering metric on the network interface.' + traffic_engineering_metric: Optional[Int] = Field( + None, + alias='trafficEngineeringMetric', + description='Traffic Engineering metric on the network interface.', ) - unreservedBandwidth: Optional[List[Optional[Float]]] = Field( + unreserved_bandwidth: Optional[List[Optional[Float]]] = Field( None, + alias='unreservedBandwidth', description='The unreserved bandwidth on the network interface. (Bytes per second)', ) typename__: Optional[Literal['NetLinkAttributes']] = Field( @@ -680,7 +752,9 @@ class NetLinkConnection(BaseModel): edges: Optional[List[Optional[NetLinkEdge]]] = Field( None, description='List of NetInterface objects.' ) - pageInfo: PageInfo = Field(..., description='Pagination metadata.') + page_info: PageInfo = Field( + ..., alias='pageInfo', description='Pagination metadata.' + ) typename__: Optional[Literal['NetLinkConnection']] = Field( 'NetLinkConnection', alias='__typename' ) @@ -712,14 +786,16 @@ class NetNetwork(Node): ..., description='Coordinates of the network node on the graph.' ) id: ID = Field(..., description='Unique identifier of the object.') - ospfRouteType: Int = Field(..., description='Type of the OSPF network (LSA type).') + ospf_route_type: Int = Field( + ..., alias='ospfRouteType', description='Type of the OSPF network (LSA type).' + ) subnet: String = Field( ..., description='Network address including prefix length expressed in the CIDR notation (e.g. 10.0.0.0/24).', ) typename__: Optional[Literal['NetNetwork']] = Field( 'NetNetwork', alias='__typename' - ) # type: ignore + ) class NetNetworkConnection(BaseModel): @@ -730,7 +806,9 @@ class NetNetworkConnection(BaseModel): edges: Optional[List[Optional[NetNetworkEdge]]] = Field( None, description='List of NetNetwork objects.' ) - pageInfo: Optional[PageInfo] = Field(None, description='Pagination metadata.') + page_info: Optional[PageInfo] = Field( + None, alias='pageInfo', description='Pagination metadata.' + ) typename__: Optional[Literal['NetNetworkConnection']] = Field( 'NetNetworkConnection', alias='__typename' ) @@ -765,7 +843,9 @@ class NodeCoordinates(BaseModel): Represents the coordinates of a specific node in the topology. """ - nodeId: String = Field(..., description='Name of the node in the topology.') + node_id: String = Field( + ..., alias='nodeId', description='Name of the node in the topology.' + ) x: Float = Field( ..., description='Refreshed horizontal coordinate of the node on the graph. Value is between 0.0 and 1.0.', @@ -797,11 +877,13 @@ class PageInfo(BaseModel): Pagination metadata that is usually coupled to a returned list of objects. """ - endCursor: Optional[String] = Field( - None, description='Pointer to the last object in the list.' + end_cursor: Optional[String] = Field( + None, alias='endCursor', description='Pointer to the last object in the list.' ) - hasNextPage: Boolean = Field( - ..., description='Indicates if there is a next object in the list.' + has_next_page: Boolean = Field( + ..., + alias='hasNextPage', + description='Indicates if there is a next object in the list.', ) typename__: Optional[Literal['PageInfo']] = Field('PageInfo', alias='__typename') @@ -821,20 +903,23 @@ class PhyDevice(Node): description='List of strings that can be used for grouping of synced devices.', ) name: String = Field(..., description='Human readable name of the device.') - netDevice: Optional[NetDevice] = Field( - None, description='Linked device in the network topology.' + net_device: Optional[NetDevice] = Field( + None, alias='netDevice', description='Linked device in the network topology.' ) - phyInterfaces: PhyInterfaceConnection = Field( - ..., description='List of ports that are present on the device.' + phy_interfaces: PhyInterfaceConnection = Field( + ..., + alias='phyInterfaces', + description='List of ports that are present on the device.', ) - routerId: Optional[String] = Field( + router_id: Optional[String] = Field( None, + alias='routerId', description='Identifier of the corresponding routing entity in the network topology.', ) status: NodeStatus = Field( ..., description='Status of the device from the view of the synced topology.' ) - typename__: Optional[Literal['PhyDevice']] = Field('PhyDevice', alias='__typename') # type: ignore + typename__: Optional[Literal['PhyDevice']] = Field('PhyDevice', alias='__typename') class PhyDeviceConnection(BaseModel): @@ -845,7 +930,9 @@ class PhyDeviceConnection(BaseModel): edges: Optional[List[Optional[PhyDeviceEdge]]] = Field( None, description='List of PhyDevice objects.' ) - pageInfo: PageInfo = Field(..., description='Pagination metadata.') + page_info: PageInfo = Field( + ..., alias='pageInfo', description='Pagination metadata.' + ) typename__: Optional[Literal['PhyDeviceConnection']] = Field( 'PhyDeviceConnection', alias='__typename' ) @@ -856,12 +943,14 @@ class PhyDeviceDetails(BaseModel): Details of the device. """ - deviceType: Optional[String] = Field( + device_type: Optional[String] = Field( None, + alias='deviceType', description='Device type (e.g. device model, vendor, chassis, hardware details, etc.)', ) - swVersion: Optional[String] = Field( + sw_version: Optional[String] = Field( None, + alias='swVersion', description='Version of the network operating system running on the device.', ) typename__: Optional[Literal['PhyDeviceDetails']] = Field( @@ -893,11 +982,13 @@ class PhyInterface(Node): ) id: ID = Field(..., description='Unique identifier of the object.') name: String = Field(..., description='Human readable name of the network port.') - phyDevice: Optional[PhyDevice] = Field( - None, description='Device that owns this interface.' + phy_device: Optional[PhyDevice] = Field( + None, alias='phyDevice', description='Device that owns this interface.' ) - phyLinks: PhyLinkConnection = Field( - ..., description='List of links connected to remote physical device.' + phy_links: PhyLinkConnection = Field( + ..., + alias='phyLinks', + description='List of links connected to remote physical device.', ) status: NodeStatus = Field( ..., @@ -905,7 +996,7 @@ class PhyInterface(Node): ) typename__: Optional[Literal['PhyInterface']] = Field( 'PhyInterface', alias='__typename' - ) # type: ignore + ) class PhyInterfaceConnection(BaseModel): @@ -916,7 +1007,9 @@ class PhyInterfaceConnection(BaseModel): edges: Optional[List[Optional[PhyInterfaceEdge]]] = Field( None, description='List of PhyInterface objects.' ) - pageInfo: PageInfo = Field(..., description='Pagination metadata.') + page_info: PageInfo = Field( + ..., alias='pageInfo', description='Pagination metadata.' + ) typename__: Optional[Literal['PhyInterfaceConnection']] = Field( 'PhyInterfaceConnection', alias='__typename' ) @@ -927,8 +1020,10 @@ class PhyInterfaceDetails(BaseModel): Details of the interface. """ - maxSpeed: Optional[Float] = Field( - None, description='Max operational interface bandwidth in Mbit.' + max_speed: Optional[Float] = Field( + None, + alias='maxSpeed', + description='Max operational interface bandwidth in Mbit.', ) typename__: Optional[Literal['PhyInterfaceDetails']] = Field( 'PhyInterfaceDetails', alias='__typename' @@ -957,7 +1052,9 @@ class PhyLinkConnection(BaseModel): edges: Optional[List[Optional[PhyLinkEdge]]] = Field( None, description='List of PhyInterface objects.' ) - pageInfo: PageInfo = Field(..., description='Pagination metadata.') + page_info: PageInfo = Field( + ..., alias='pageInfo', description='Pagination metadata.' + ) typename__: Optional[Literal['PhyLinkConnection']] = Field( 'PhyLinkConnection', alias='__typename' ) @@ -982,8 +1079,9 @@ class ProviderResponse(BaseModel): Response from the provider query that contains information about supported device types in the specified topology. """ - supportedDevices: List[String] = Field( + supported_devices: List[String] = Field( ..., + alias='supportedDevices', description='List of the supported device types in the specified topology (e.g. ios, ios xe, sros, etc.)', ) typename__: Optional[Literal['ProviderResponse']] = Field( @@ -1006,13 +1104,15 @@ class PtpDevice(Node): description='List of strings that can be used for grouping of synced devices.', ) name: String = Field(..., description='Human readable name of the device.') - ptpInterfaces: PtpInterfaceConnection = Field( - ..., description='List of ports that are present on the device.' + ptp_interfaces: PtpInterfaceConnection = Field( + ..., + alias='ptpInterfaces', + description='List of ports that are present on the device.', ) status: NodeStatus = Field( ..., description='Status of the device from the view of the synced topology.' ) - typename__: Optional[Literal['PtpDevice']] = Field('PtpDevice', alias='__typename') # type: ignore + typename__: Optional[Literal['PtpDevice']] = Field('PtpDevice', alias='__typename') class PtpDeviceConnection(BaseModel): @@ -1023,7 +1123,9 @@ class PtpDeviceConnection(BaseModel): edges: Optional[List[Optional[PtpDeviceEdge]]] = Field( None, description='List of PtpDevice objects.' ) - pageInfo: PageInfo = Field(..., description='Pagination metadata.') + page_info: PageInfo = Field( + ..., alias='pageInfo', description='Pagination metadata.' + ) typename__: Optional[Literal['PtpDeviceConnection']] = Field( 'PtpDeviceConnection', alias='__typename' ) @@ -1034,45 +1136,56 @@ class PtpDeviceDetails(BaseModel): Details specific to PTP (Precision Time Protocol). """ - clockAccuracy: Optional[String] = Field( + clock_accuracy: Optional[String] = Field( None, + alias='clockAccuracy', description='How accurate is the clock output to primary reference. This parameter is often automatically determined\nby the device based on the characteristics of its internal clock oscillator and how well it can track\nthe reference time.', ) - clockClass: Optional[Int] = Field( - None, description='Measure of clock traceability.' + clock_class: Optional[Int] = Field( + None, alias='clockClass', description='Measure of clock traceability.' ) - clockId: Optional[String] = Field( - None, description='Unique identifier of the clock.' + clock_id: Optional[String] = Field( + None, alias='clockId', description='Unique identifier of the clock.' ) - clockType: Optional[String] = Field( - None, description='Type of clock (e.g., ordinary, master).' + clock_type: Optional[String] = Field( + None, alias='clockType', description='Type of clock (e.g., ordinary, master).' ) - clockVariance: Optional[String] = Field( + clock_variance: Optional[String] = Field( None, + alias='clockVariance', description="Measure of clock precision. How much the clock-output varies when not synchronized to another source.\nThe variance is determined by assessing how much the local clock deviates from the ideal time over a certain period,\noften expressed in parts per billion (ppb) or as the standard deviation of the clock's offset.", ) domain: Optional[Int] = Field(None, description='Domain of the PTP network.') - globalPriority: Optional[Int] = Field( - None, description='Global priority of the clock (the first priority).' + global_priority: Optional[Int] = Field( + None, + alias='globalPriority', + description='Global priority of the clock (the first priority).', ) - gmClockId: Optional[String] = Field( - None, description='Unique identifier of the grandmaster clock.' + gm_clock_id: Optional[String] = Field( + None, + alias='gmClockId', + description='Unique identifier of the grandmaster clock.', ) - parentClockId: Optional[String] = Field( - None, description='Unique identifier of the parent clock.' + parent_clock_id: Optional[String] = Field( + None, + alias='parentClockId', + description='Unique identifier of the parent clock.', ) - ptpPortState: Optional[String] = Field( - None, description='The port state of the device.' + ptp_port_state: Optional[String] = Field( + None, alias='ptpPortState', description='The port state of the device.' ) - ptpProfile: Optional[String] = Field( - None, description='PTP profile used (e.g., ITU-T G.8275.1).' + ptp_profile: Optional[String] = Field( + None, alias='ptpProfile', description='PTP profile used (e.g., ITU-T G.8275.1).' ) - timeRecoveryStatus: Optional[String] = Field( + time_recovery_status: Optional[String] = Field( None, + alias='timeRecoveryStatus', description='Indicates the current state of the time recovery process. Time recovery is the process of adjusting\nthe local clock to synchronize with a more accurate reference clock.', ) - userPriority: Optional[Int] = Field( - None, description='User defined value of the second priority.' + user_priority: Optional[Int] = Field( + None, + alias='userPriority', + description='User defined value of the second priority.', ) typename__: Optional[Literal['PtpDeviceDetails']] = Field( 'PtpDeviceDetails', alias='__typename' @@ -1099,24 +1212,32 @@ class PtpDiffSynce(Node): """ id: ID = Field(..., description='Ptp node id') - ptpUpstreamInterface: Optional[ID] = Field( - None, description="Ptp node's upstream interface" + ptp_upstream_interface: Optional[ID] = Field( + None, alias='ptpUpstreamInterface', description="Ptp node's upstream interface" ) - ptpUpstreamInterfaceName: Optional[String] = Field( - None, description="Ptp node's upstream interface name" + ptp_upstream_interface_name: Optional[String] = Field( + None, + alias='ptpUpstreamInterfaceName', + description="Ptp node's upstream interface name", ) - ptpUpstreamInterfaceStatus: Optional[String] = Field( - None, description="Ptp node's upstream interface status" + ptp_upstream_interface_status: Optional[String] = Field( + None, + alias='ptpUpstreamInterfaceStatus', + description="Ptp node's upstream interface status", ) - synceId: Optional[ID] = Field( - None, description='SyncE node id. This is the same device as identified' + synce_id: Optional[ID] = Field( + None, + alias='synceId', + description='SyncE node id. This is the same device as identified', ) - synceUpstreamInterfaceName: Optional[String] = Field( - None, description="Synce node's upstream interface name" + synce_upstream_interface_name: Optional[String] = Field( + None, + alias='synceUpstreamInterfaceName', + description="Synce node's upstream interface name", ) typename__: Optional[Literal['PtpDiffSynce']] = Field( 'PtpDiffSynce', alias='__typename' - ) # type: ignore + ) class PtpDiffSynceConnection(BaseModel): @@ -1127,7 +1248,9 @@ class PtpDiffSynceConnection(BaseModel): edges: Optional[List[Optional[PtpDiffSynceEdge]]] = Field( None, description='List of PtpDiffSynce objects.' ) - pageInfo: PageInfo = Field(..., description='Pagination metadata.') + page_info: PageInfo = Field( + ..., alias='pageInfo', description='Pagination metadata.' + ) typename__: Optional[Literal['PtpDiffSynceConnection']] = Field( 'PtpDiffSynceConnection', alias='__typename' ) @@ -1157,11 +1280,13 @@ class PtpInterface(Node): ) id: ID = Field(..., description='Unique identifier of the object.') name: String = Field(..., description='Human readable name of the network port.') - ptpDevice: Optional[PtpDevice] = Field( - None, description='Device that owns this interface.' + ptp_device: Optional[PtpDevice] = Field( + None, alias='ptpDevice', description='Device that owns this interface.' ) - ptpLinks: PtpLinkConnection = Field( - ..., description='List of links connected to remote ptp devices.' + ptp_links: PtpLinkConnection = Field( + ..., + alias='ptpLinks', + description='List of links connected to remote ptp devices.', ) status: NodeStatus = Field( ..., @@ -1169,7 +1294,7 @@ class PtpInterface(Node): ) typename__: Optional[Literal['PtpInterface']] = Field( 'PtpInterface', alias='__typename' - ) # type: ignore + ) class PtpInterfaceConnection(BaseModel): @@ -1180,7 +1305,9 @@ class PtpInterfaceConnection(BaseModel): edges: Optional[List[Optional[PtpInterfaceEdge]]] = Field( None, description='List of PtpInterface objects.' ) - pageInfo: PageInfo = Field(..., description='Pagination metadata.') + page_info: PageInfo = Field( + ..., alias='pageInfo', description='Pagination metadata.' + ) typename__: Optional[Literal['PtpInterfaceConnection']] = Field( 'PtpInterfaceConnection', alias='__typename' ) @@ -1191,16 +1318,19 @@ class PtpInterfaceDetails(BaseModel): PTP interface details. """ - adminOperStatus: String = Field( + admin_oper_status: String = Field( ..., + alias='adminOperStatus', description="Administrative/operational status of the interface (e.g. 'up/up', 'up/down').", ) - ptpStatus: String = Field( + ptp_status: String = Field( ..., + alias='ptpStatus', description="State of the PTP process on the interface (e.g. 'master', 'slave', 'disabled', 'passive', 'unknown').", ) - ptsfUnusable: String = Field( + ptsf_unusable: String = Field( ..., + alias='ptsfUnusable', description='Unusable packet timing signal received by the slave, for example, where the packet delay variation is excessive,\nresulting in the slave being unable to meet the output clock performance requirements.', ) typename__: Optional[Literal['PtpInterfaceDetails']] = Field( @@ -1230,7 +1360,9 @@ class PtpLinkConnection(BaseModel): edges: Optional[List[Optional[PtpLinkEdge]]] = Field( None, description='List of PtpInterface objects.' ) - pageInfo: PageInfo = Field(..., description='Pagination metadata.') + page_info: PageInfo = Field( + ..., alias='pageInfo', description='Pagination metadata.' + ) typename__: Optional[Literal['PtpLinkConnection']] = Field( 'PtpLinkConnection', alias='__typename' ) @@ -1303,19 +1435,23 @@ class SyncResponse(BaseModel): Response from the sync query that contains information about synced devices from the network to topology. """ - devicesMissingInInventory: Optional[List[Optional[String]]] = Field( + devices_missing_in_inventory: Optional[List[Optional[String]]] = Field( None, + alias='devicesMissingInInventory', description='List of devices that are installed in UniConfig but are missing their metadata in DeviceMetadata collection in the\ndatabase.', ) - devicesMissingInUniconfig: Optional[List[Optional[String]]] = Field( - None, description='List of devices that are not installed in UniConfig.' + devices_missing_in_uniconfig: Optional[List[Optional[String]]] = Field( + None, + alias='devicesMissingInUniconfig', + description='List of devices that are not installed in UniConfig.', ) labels: List[String] = Field( ..., description='List of string labels that are used for grouping of synced devices.\nList content should be the same as the list of labels in the input of the sync query.', ) - loadedDevices: JSON = Field( + loaded_devices: JSON = Field( ..., + alias='loadedDevices', description='Dictionary of devices and neighbors that are successfully synced from network to target topology.\nJSON format:\n{\n "R1": [\n {\n "from_interface": "GigabitEthernet0/0/0/0",\n "to_interface": "GigabitEthernet0/0/0/0",\n "to_device": "R7"\n },\n {\n "from_interface": "GigabitEthernet0/0/0/1",\n "to_interface": "GigabitEthernet0/0/0/1",\n "to_device": "R2"\n }\n ],\n "R2": [\n {\n "from_interface": "GigabitEthernet0/0/0/0",\n "to_interface": "GigabitEthernet0/0/0/0",\n "to_device": "R3"\n }\n ]\n}', ) typename__: Optional[Literal['SyncResponse']] = Field( @@ -1341,12 +1477,14 @@ class SynceDevice(Node): status: NodeStatus = Field( ..., description='Status of the device from the view of the synced topology.' ) - synceInterfaces: SynceInterfaceConnection = Field( - ..., description='List of ports that are present on the device.' + synce_interfaces: SynceInterfaceConnection = Field( + ..., + alias='synceInterfaces', + description='List of ports that are present on the device.', ) typename__: Optional[Literal['SynceDevice']] = Field( 'SynceDevice', alias='__typename' - ) # type: ignore + ) class SynceDeviceConnection(BaseModel): @@ -1357,7 +1495,9 @@ class SynceDeviceConnection(BaseModel): edges: Optional[List[Optional[SynceDeviceEdge]]] = Field( None, description='List of SynceDevice objects.' ) - pageInfo: PageInfo = Field(..., description='Pagination metadata.') + page_info: PageInfo = Field( + ..., alias='pageInfo', description='Pagination metadata.' + ) typename__: Optional[Literal['SynceDeviceConnection']] = Field( 'SynceDeviceConnection', alias='__typename' ) @@ -1368,8 +1508,9 @@ class SynceDeviceDetails(BaseModel): Details specific to SyncE (Synchronous Ethernet). """ - selectedForUse: Optional[String] = Field( + selected_for_use: Optional[String] = Field( None, + alias='selectedForUse', description='Identifier of the reference (for example, source interface) that is used to synchronize the clock.', ) typename__: Optional[Literal['SynceDeviceDetails']] = Field( @@ -1405,15 +1546,15 @@ class SynceInterface(Node): ..., description="Status of the interface from the view of the synced topology ('ok' or 'unknown').", ) - synceDevice: Optional[SynceDevice] = Field( - None, description='Device that owns this interface.' + synce_device: Optional[SynceDevice] = Field( + None, alias='synceDevice', description='Device that owns this interface.' ) - synceLinks: Optional[SynceLinkConnection] = Field( - None, description='Link to connected remote synce device.' + synce_links: Optional[SynceLinkConnection] = Field( + None, alias='synceLinks', description='Link to connected remote synce device.' ) typename__: Optional[Literal['SynceInterface']] = Field( 'SynceInterface', alias='__typename' - ) # type: ignore + ) class SynceInterfaceConnection(BaseModel): @@ -1424,7 +1565,9 @@ class SynceInterfaceConnection(BaseModel): edges: Optional[List[Optional[SynceInterfaceEdge]]] = Field( None, description='List of SynceInterface objects.' ) - pageInfo: PageInfo = Field(..., description='Pagination metadata.') + page_info: PageInfo = Field( + ..., alias='pageInfo', description='Pagination metadata.' + ) typename__: Optional[Literal['SynceInterfaceConnection']] = Field( 'SynceInterfaceConnection', alias='__typename' ) @@ -1435,24 +1578,28 @@ class SynceInterfaceDetails(BaseModel): Details specific to SyncE (Synchronous Ethernet). """ - notQualifiedDueTo: Optional[String] = Field( + not_qualified_due_to: Optional[String] = Field( None, + alias='notQualifiedDueTo', description="Information about why the interface is not qualified for SyncE synchronization\n(set to 'unknown' if the interface is qualified).", ) - notSelectedDueTo: Optional[String] = Field( + not_selected_due_to: Optional[String] = Field( None, + alias='notSelectedDueTo', description="Information about why the interface is not selected for SyncE synchronization\n(set to 'unknown' if the interface is selected).", ) - qualifiedForUse: Optional[String] = Field( + qualified_for_use: Optional[String] = Field( None, + alias='qualifiedForUse', description='Statement of whether the interface is qualified for SyncE synchronization.', ) - rxQualityLevel: Optional[String] = Field( + rx_quality_level: Optional[String] = Field( None, + alias='rxQualityLevel', description="Quality of the received SyncE signal (for example, 'DNU' or 'PRC').", ) - synceEnabled: Optional[Boolean] = Field( - None, description='Configured SyncE on the port.' + synce_enabled: Optional[Boolean] = Field( + None, alias='synceEnabled', description='Configured SyncE on the port.' ) typename__: Optional[Literal['SynceInterfaceDetails']] = Field( 'SynceInterfaceDetails', alias='__typename' @@ -1481,7 +1628,9 @@ class SynceLinkConnection(BaseModel): edges: Optional[List[Optional[SynceLinkEdge]]] = Field( None, description='List of SynceInterface objects.' ) - pageInfo: PageInfo = Field(..., description='Pagination metadata.') + page_info: PageInfo = Field( + ..., alias='pageInfo', description='Pagination metadata.' + ) typename__: Optional[Literal['SynceLinkConnection']] = Field( 'SynceLinkConnection', alias='__typename' ) @@ -1526,9 +1675,13 @@ class TopologyDevice(BaseModel): Topology and device identifier of a device. """ - deviceId: ID = Field(..., description='Topology-specific device identifier.') - topologyId: TopologyType = Field( - ..., description='Identifier of the topology in which device is present.' + device_id: ID = Field( + ..., alias='deviceId', description='Topology-specific device identifier.' + ) + topology_id: TopologyType = Field( + ..., + alias='topologyId', + description='Identifier of the topology in which device is present.', ) typename__: Optional[Literal['TopologyDevice']] = Field( 'TopologyDevice', alias='__typename' @@ -1538,11 +1691,15 @@ class TopologyDevice(BaseModel): class TopologyOverlayDevice(BaseModel): id: ID = Field(..., description='Unique identifier of the object.') name: String = Field(..., description='Device name.') - secondTopologyId: Optional[ID] = Field( - None, description='Document device ID from the second topology (can be null).' + second_topology_id: Optional[ID] = Field( + None, + alias='secondTopologyId', + description='Document device ID from the second topology (can be null).', ) - topologyOverlayInterfaces: TopologyOverlayInterfaceConnection = Field( - ..., description='List of ports that are present on the device.' + topology_overlay_interfaces: TopologyOverlayInterfaceConnection = Field( + ..., + alias='topologyOverlayInterfaces', + description='List of ports that are present on the device.', ) typename__: Optional[Literal['TopologyOverlayDevice']] = Field( 'TopologyOverlayDevice', alias='__typename' @@ -1557,7 +1714,9 @@ class TopologyOverlayDeviceConnection(BaseModel): edges: Optional[List[Optional[TopologyOverlayDeviceEdge]]] = Field( None, description='List of TopologyOverlayDeviceEdge objects.' ) - pageInfo: PageInfo = Field(..., description='Pagination metadata.') + page_info: PageInfo = Field( + ..., alias='pageInfo', description='Pagination metadata.' + ) typename__: Optional[Literal['TopologyOverlayDeviceConnection']] = Field( 'TopologyOverlayDeviceConnection', alias='__typename' ) @@ -1580,14 +1739,20 @@ class TopologyOverlayDeviceEdge(BaseModel): class TopologyOverlayInterface(BaseModel): id: ID = Field(..., description='Document interface ID from the first topology') name: String = Field(..., description='Interface name.') - secondTopologyId: Optional[ID] = Field( - None, description='Document device ID from the second topology (can be null).' + second_topology_id: Optional[ID] = Field( + None, + alias='secondTopologyId', + description='Document device ID from the second topology (can be null).', ) - topologyOverlayDevice: Optional[TopologyOverlayDevice] = Field( - None, description='Topology overlay device that owns this interface.' + topology_overlay_device: Optional[TopologyOverlayDevice] = Field( + None, + alias='topologyOverlayDevice', + description='Topology overlay device that owns this interface.', ) - topologyOverlayLinks: Optional[TopologyOverlayLinkConnection] = Field( - None, description='Topology overlay neighbor interface' + topology_overlay_links: Optional[TopologyOverlayLinkConnection] = Field( + None, + alias='topologyOverlayLinks', + description='Topology overlay neighbor interface', ) typename__: Optional[Literal['TopologyOverlayInterface']] = Field( 'TopologyOverlayInterface', alias='__typename' @@ -1602,7 +1767,9 @@ class TopologyOverlayInterfaceConnection(BaseModel): edges: Optional[List[Optional[TopologyOverlayInterfaceEdge]]] = Field( None, description='List of TopologyOverlayInterface objects.' ) - pageInfo: PageInfo = Field(..., description='Pagination metadata.') + page_info: PageInfo = Field( + ..., alias='pageInfo', description='Pagination metadata.' + ) typename__: Optional[Literal['TopologyOverlayInterfaceConnection']] = Field( 'TopologyOverlayInterfaceConnection', alias='__typename' ) @@ -1630,7 +1797,9 @@ class TopologyOverlayLinkConnection(BaseModel): edges: Optional[List[Optional[TopologyOverlayLinkEdge]]] = Field( None, description='List of TopologyOverlayInterface objects.' ) - pageInfo: PageInfo = Field(..., description='Pagination metadata.') + page_info: PageInfo = Field( + ..., alias='pageInfo', description='Pagination metadata.' + ) typename__: Optional[Literal['TopologyOverlayLinkConnection']] = Field( 'TopologyOverlayLinkConnection', alias='__typename' ) @@ -1651,12 +1820,14 @@ class TopologyOverlayLinkEdge(BaseModel): class TopologyOverlayLinkIds(BaseModel): - firstTopologyLinkId: ID = Field( + first_topology_link_id: ID = Field( ..., + alias='firstTopologyLinkId', description='Identifier of the link that connects this interface to the interface on the remote device on the first topology.', ) - secondTopologyLinkId: Optional[ID] = Field( + second_topology_link_id: Optional[ID] = Field( None, + alias='secondTopologyLinkId', description='Identifier of the link that connects this interface to the interface on the remote device on the second topology.', ) typename__: Optional[Literal['TopologyOverlayLinkIds']] = Field( @@ -1669,8 +1840,9 @@ class TopologyResponse(BaseModel): Response from the topologyDiff query that contains diff between two databases. """ - diffData: Optional[JSON] = Field( + diff_data: Optional[JSON] = Field( None, + alias='diffData', description='Created diff between two databases. Format of the output JSON (\'data\' represents database document):\n{\n "added": {"PhyDevice": [{data}], "PhyInterface": [], ...},\n "deleted": {"PhyDevice": [{data}], "PhyInterface": [], ...},\n "changed": {"PhyDevice": [{"new": {data}, "old"}: {data}], "PhyInterface": [{"new": {data}, "old": {data}], ...}\n}', ) typename__: Optional[Literal['TopologyResponse']] = Field( @@ -1683,12 +1855,15 @@ class CoordinatesInput(BaseModel): Input of the updateCoordinates mutation that contains information about updated coordinates of a node. """ - nodeName: String = Field(..., description='Name of the node in the topology.') - nodeType: CoordinatesNodeType = Field( - ..., description='Type of the node in the topology.' + node_name: String = Field( + ..., alias='nodeName', description='Name of the node in the topology.' ) - protocolType: Optional[BgpLsProtocolType] = Field( + node_type: CoordinatesNodeType = Field( + ..., alias='nodeType', description='Type of the node in the topology.' + ) + protocol_type: Optional[BgpLsProtocolType] = Field( None, + alias='protocolType', description='Type of protocol (In case of network devices, necessary in case of NETWORK nodeType)', ) x: Float = Field( @@ -1707,13 +1882,17 @@ class DeviceMetadataFilter(BaseModel): Filter for Metadata device type based on device name, or other attributes. """ - deviceName: Optional[String] = Field(None, description='Regex of device name.') + device_name: Optional[String] = Field( + None, alias='deviceName', description='Regex of device name.' + ) polygon: Optional[List[List[List[Float]]]] = Field( None, description='A GeoJSON Polygon shape used for filtering devices based on their location in this area.\n\nThe GeoJSON Polygon consists of a series of closed LineString objects (ring-like).\nThese Linear Ring objects consist of four or more coordinate pairs with the first and last coordinate\npair being equal. Coordinate pairs of a Polygon are an array of linear ring coordinate arrays.\nThe first element in the array represents the exterior ring.\nAny subsequent elements represent interior rings (holes within the surface).\n\nThe orientation of the first linear ring is crucial: the right-hand-rule is applied, so that the area to the left\nof the path of the linear ring (when walking on the surface of the Earth) is considered to be the “interior”\nof the polygon. All other linear rings must be contained within this interior.\n\nExample with a hole:\n[\n [\n [100.0, 0.0],\n [101.0, 0.0],\n [101.0, 1.0],\n [100.0, 1.0],\n [100.0, 0.0]\n ],\n [\n [100.8, 0.8],\n [100.8, 0.2],\n [100.2, 0.2],\n [100.2, 0.8],\n [100.8, 0.8]\n ]\n]', ) - topologyType: Optional[TopologyType] = Field( - None, description='Topology in which device must be present.' + topology_type: Optional[TopologyType] = Field( + None, + alias='topologyType', + description='Topology in which device must be present.', ) typename__: Optional[Literal['DeviceMetadataFilter']] = Field( 'DeviceMetadataFilter', alias='__typename' @@ -1752,12 +1931,14 @@ class NetDeviceFilter(BaseModel): Filter for NetDevice type based on router identifier and area identifier. """ - ospfAreaId: Optional[String] = Field( + ospf_area_id: Optional[String] = Field( None, + alias='ospfAreaId', description='OSPF area identifier formatted as IPv4 address (for example, 0.0.0.0 represents area 0).', ) - routerId: Optional[String] = Field( + router_id: Optional[String] = Field( None, + alias='routerId', description='Regex of router identifier of the routing entity (usually IPv4 address).', ) typename__: Optional[Literal['NetDeviceFilter']] = Field( @@ -1770,8 +1951,10 @@ class NetInterfaceFilter(BaseModel): Filter for NetInterface type based on the configured IP address. """ - ipAddress: Optional[String] = Field( - None, description='Regex of IP address configured on the interface.' + ip_address: Optional[String] = Field( + None, + alias='ipAddress', + description='Regex of IP address configured on the interface.', ) typename__: Optional[Literal['NetInterfaceFilter']] = Field( 'NetInterfaceFilter', alias='__typename' @@ -1783,8 +1966,8 @@ class NetNetworkFilter(BaseModel): Filter for NetNetwork type based on the subnet and route type. """ - ospfRouteType: Optional[Int] = Field( - None, description='Type of the OSPF network (LSA type).' + ospf_route_type: Optional[Int] = Field( + None, alias='ospfRouteType', description='Type of the OSPF network (LSA type).' ) subnet: Optional[String] = Field( None, @@ -1827,29 +2010,34 @@ class PtpDeviceFilter(BaseModel): Filter for PtpDevice type based on device label and device name. """ - clockAccuracy: Optional[String] = Field( - None, description='Regex: clock accuracy to primary reference.' + clock_accuracy: Optional[String] = Field( + None, + alias='clockAccuracy', + description='Regex: clock accuracy to primary reference.', ) - clockClass: Optional[Int] = Field( - None, description='Measure of clock traceability.' + clock_class: Optional[Int] = Field( + None, alias='clockClass', description='Measure of clock traceability.' ) - clockId: Optional[String] = Field( - None, description='Regex: Unique identifier of the clock.' + clock_id: Optional[String] = Field( + None, alias='clockId', description='Regex: Unique identifier of the clock.' ) - clockType: Optional[String] = Field( - None, description='Regex: Type of clock (e.g., ordinary, master).' + clock_type: Optional[String] = Field( + None, + alias='clockType', + description='Regex: Type of clock (e.g., ordinary, master).', ) - clockVariance: Optional[String] = Field( - None, description='Regex: measure of clock precision.' + clock_variance: Optional[String] = Field( + None, alias='clockVariance', description='Regex: measure of clock precision.' ) domain: Optional[Int] = Field(None, description='Domain of the PTP network.') label: Optional[String] = Field(None, description='Device label.') name: Optional[String] = Field(None, description='Regex of device name.') - ptpProfile: Optional[String] = Field( - None, description='PTP profile used (e.g., ITU-T G.8275.1).' + ptp_profile: Optional[String] = Field( + None, alias='ptpProfile', description='PTP profile used (e.g., ITU-T G.8275.1).' ) - timeRecoveryStatus: Optional[String] = Field( + time_recovery_status: Optional[String] = Field( None, + alias='timeRecoveryStatus', description='Regex: indicates the current state of the time recovery process.', ) typename__: Optional[Literal['PtpDeviceFilter']] = Field( @@ -1862,16 +2050,20 @@ class PtpInterfaceFilter(BaseModel): Filter for PtpInterface type based on the current interface status and name of the device. """ - adminOperStatus: Optional[String] = Field( + admin_oper_status: Optional[String] = Field( None, + alias='adminOperStatus', description="Regex of administrative/operational status on the interface (e.g. 'up/up', 'up/down').", ) name: Optional[String] = Field(None, description='Regex of interface name.') - ptpStatus: Optional[String] = Field( - None, description='Regex of the PTP process status on the interface.' + ptp_status: Optional[String] = Field( + None, + alias='ptpStatus', + description='Regex of the PTP process status on the interface.', ) - ptsfUnusable: Optional[String] = Field( + ptsf_unusable: Optional[String] = Field( None, + alias='ptsfUnusable', description='Regex of unusable packet timing signal received by the slave.', ) status: Optional[NodeStatus] = Field( @@ -1890,8 +2082,9 @@ class SynceDeviceFilter(BaseModel): label: Optional[String] = Field(None, description='Device label.') name: Optional[String] = Field(None, description='Regex of device name.') - selectedForUse: Optional[String] = Field( + selected_for_use: Optional[String] = Field( None, + alias='selectedForUse', description='Regex: identifier of the reference (for example, source interface) that is used to synchronize the clock.', ) typename__: Optional[Literal['SynceDeviceFilter']] = Field( @@ -1905,28 +2098,32 @@ class SynceInterfaceFilter(BaseModel): """ name: Optional[String] = Field(None, description='Regex of interface name.') - notQualifiedDueTo: Optional[String] = Field( + not_qualified_due_to: Optional[String] = Field( None, + alias='notQualifiedDueTo', description='Regex: Information about why the interface is not qualified for SyncE synchronization.', ) - notSelectedDueTo: Optional[String] = Field( + not_selected_due_to: Optional[String] = Field( None, + alias='notSelectedDueTo', description='Regex: Information about why the interface is not selected for SyncE synchronization.', ) - qualifiedForUse: Optional[String] = Field( + qualified_for_use: Optional[String] = Field( None, + alias='qualifiedForUse', description='Regex: Statement of whether the interface is qualified for SyncE synchronization.', ) - rxQualityLevel: Optional[String] = Field( + rx_quality_level: Optional[String] = Field( None, + alias='rxQualityLevel', description="Regex: Quality of the received SyncE signal (for example, 'DNU' or 'PRC').", ) status: Optional[NodeStatus] = Field( None, description='Status of the interface from the view of the synced topology.', ) - synceEnabled: Optional[Boolean] = Field( - None, description='Configured SyncE on the port.' + synce_enabled: Optional[Boolean] = Field( + None, alias='synceEnabled', description='Configured SyncE on the port.' ) typename__: Optional[Literal['SynceInterfaceFilter']] = Field( 'SynceInterfaceFilter', alias='__typename' diff --git a/utils/graphql-pydantic-generator/graphql_pydantic_generator/__main__.py b/utils/graphql-pydantic-generator/graphql_pydantic_generator/__main__.py index cb75269..2896ccc 100644 --- a/utils/graphql-pydantic-generator/graphql_pydantic_generator/__main__.py +++ b/utils/graphql-pydantic-generator/graphql_pydantic_generator/__main__.py @@ -26,6 +26,7 @@ def generate(input_path: str, output_path: str): input_file_type=InputFileType.GraphQL, output=Path(output_path), output_model_type=DataModelType.PydanticV2BaseModel, + snake_case_field=True, ) click.echo(f'Successful') From f2f38b86ea2b62c5b62f472269ac7eb8addae140 Mon Sep 17 00:00:00 2001 From: Marek Pastorek Date: Mon, 2 Dec 2024 13:55:58 +0100 Subject: [PATCH 5/5] fixed mypy Signed-off-by: Marek --- .../frinx_api/blueprints_provider/__init__.py | 19 +-- .../frinx_api/performance_monitor/__init__.py | 21 +-- .../frinx_api/topology_discovery/__init__.py | 133 +++++++++--------- utils/graphql-pydantic-generator/README.md | 7 +- .../graphql_pydantic_generator/__main__.py | 1 + 5 files changed, 98 insertions(+), 83 deletions(-) diff --git a/blueprints-provider/python/frinx_api/blueprints_provider/__init__.py b/blueprints-provider/python/frinx_api/blueprints_provider/__init__.py index 834f318..7373cf3 100644 --- a/blueprints-provider/python/frinx_api/blueprints_provider/__init__.py +++ b/blueprints-provider/python/frinx_api/blueprints_provider/__init__.py @@ -1,13 +1,16 @@ # generated by datamodel-codegen: # filename: -# timestamp: 2024-12-02T12:20:12+00:00 +# timestamp: 2024-12-02T13:18:37+00:00 from __future__ import annotations from enum import Enum -from typing import List, Literal, Optional, TypeAlias, Union +from typing import Literal +from typing import Optional +from typing import TypeAlias -from pydantic import BaseModel, Field +from pydantic import BaseModel +from pydantic import Field Boolean: TypeAlias = bool """ @@ -75,7 +78,7 @@ class Connection(BaseModel): Represents a connection in a graph. """ - edges: List[Edge] = Field( + edges: list[Edge] = Field( ..., description='List of edges within the blueprint connection.' ) page_info: PageInfo = Field( @@ -103,9 +106,9 @@ class BlueprintConnection(Connection): Represents a connection in the blueprint graph. """ - edges: List[BlueprintEdge] = Field( + edges: list[BlueprintEdge] = Field( ..., description='List of edges within the blueprint connection.' - ) + ) # type: ignore[assignment] page_info: PageInfo = Field( ..., alias='pageInfo', @@ -113,7 +116,7 @@ class BlueprintConnection(Connection): ) typename__: Optional[Literal['BlueprintConnection']] = Field( 'BlueprintConnection', alias='__typename' - ) + ) # type: ignore[assignment] class BlueprintEdge(Edge): @@ -127,7 +130,7 @@ class BlueprintEdge(Edge): ) typename__: Optional[Literal['BlueprintEdge']] = Field( 'BlueprintEdge', alias='__typename' - ) + ) # type: ignore[assignment] class BlueprintMetadata(BaseModel): diff --git a/performance-monitor/python/frinx_api/performance_monitor/__init__.py b/performance-monitor/python/frinx_api/performance_monitor/__init__.py index 294c7dc..a03694f 100644 --- a/performance-monitor/python/frinx_api/performance_monitor/__init__.py +++ b/performance-monitor/python/frinx_api/performance_monitor/__init__.py @@ -1,13 +1,16 @@ # generated by datamodel-codegen: # filename: -# timestamp: 2024-12-02T12:19:12+00:00 +# timestamp: 2024-12-02T13:15:26+00:00 from __future__ import annotations from enum import Enum -from typing import List, Literal, Optional, TypeAlias +from typing import Literal +from typing import Optional +from typing import TypeAlias -from pydantic import BaseModel, Field +from pydantic import BaseModel +from pydantic import Field Boolean: TypeAlias = bool """ @@ -77,7 +80,7 @@ class BulkUtilizationConnection(BaseModel): Represents a paginated connection of utilization data for multiple devices. """ - metrics: List[MetricsEdge] = Field( + metrics: list[MetricsEdge] = Field( ..., description='A list of metrics for multiple devices, each with associated cursor information.', ) @@ -111,7 +114,7 @@ class MetricsEdge(BaseModel): """ cursor: String = Field(..., description='A cursor for pagination.') - device_metrics: List[MetricsWithDeviceNode] = Field( + device_metrics: list[MetricsWithDeviceNode] = Field( ..., alias='deviceMetrics', description='A list of device metrics associated with a specific device.', @@ -130,7 +133,7 @@ class MetricsNode(MetricsInterface): memory: Optional[Float] = None typename__: Optional[Literal['MetricsNode']] = Field( 'MetricsNode', alias='__typename' - ) + ) # type: ignore[assignment] class MetricsWithCursorNode(MetricsInterface): @@ -145,7 +148,7 @@ class MetricsWithCursorNode(MetricsInterface): memory: Optional[Float] = None typename__: Optional[Literal['MetricsWithCursorNode']] = Field( 'MetricsWithCursorNode', alias='__typename' - ) + ) # type: ignore[assignment] class MetricsWithDeviceNode(MetricsInterface): @@ -158,7 +161,7 @@ class MetricsWithDeviceNode(MetricsInterface): memory: Optional[Float] = None typename__: Optional[Literal['MetricsWithDeviceNode']] = Field( 'MetricsWithDeviceNode', alias='__typename' - ) + ) # type: ignore[assignment] class PageInfo(BaseModel): @@ -183,7 +186,7 @@ class UtilizationConnection(BaseModel): """ device: String = Field(..., description='The unique identifier for the device.') - device_metrics: List[MetricsWithCursorNode] = Field( + device_metrics: list[MetricsWithCursorNode] = Field( ..., alias='deviceMetrics', description='A list of device metrics with associated cursor information.', diff --git a/topology-discovery/python/frinx_api/topology_discovery/__init__.py b/topology-discovery/python/frinx_api/topology_discovery/__init__.py index 40ad2cd..a11ce9c 100644 --- a/topology-discovery/python/frinx_api/topology_discovery/__init__.py +++ b/topology-discovery/python/frinx_api/topology_discovery/__init__.py @@ -1,13 +1,16 @@ # generated by datamodel-codegen: # filename: -# timestamp: 2024-12-02T11:12:29+00:00 +# timestamp: 2024-12-02T13:04:22+00:00 from __future__ import annotations from enum import Enum -from typing import List, Literal, Optional, TypeAlias +from typing import Literal +from typing import Optional +from typing import TypeAlias -from pydantic import BaseModel, Field +from pydantic import BaseModel +from pydantic import Field Boolean: TypeAlias = bool """ @@ -145,7 +148,7 @@ class CommonNodesResponse(BaseModel): Response from the commonNodes query that wraps the list of found common nodes in the database. """ - common_nodes: List[String] = Field( + common_nodes: list[String] = Field( ..., alias='commonNodes', description='List of the common node names. Common nodes contain connection to all nodes specified on the input.', @@ -175,7 +178,7 @@ class CoordinatesResponse(BaseModel): installed: InstalledDevices = Field( ..., description='Devices that exist in the database.' ) - not_installed: List[String] = Field( + not_installed: list[String] = Field( ..., alias='notInstalled', description='List of node names that do not exist in the database.', @@ -205,7 +208,7 @@ class DeleteBackupsResponse(BaseModel): Response from the deleteBackups mutation that contains information about removed backups. """ - deleted_backups: List[String] = Field( + deleted_backups: list[String] = Field( ..., alias='deletedBackups', description='Names of the removed databases that contained backups.', @@ -220,11 +223,11 @@ class DeviceGeoLocation(BaseModel): Device GeoLocation data. """ - bbox: Optional[List[Optional[Float]]] = Field( + bbox: Optional[list[Optional[Float]]] = Field( None, description='Defining the area around the device, with four elements indicating its boundaries.', ) - coordinates: List[Float] = Field( + coordinates: list[Float] = Field( ..., description='Device location coordinates providing longitude and latitude (in this order, based on GeoJSON convention).', ) @@ -252,7 +255,7 @@ class DeviceMetadata(Node): ) id: ID = Field(..., description='Unique identifier of the object.') model: Optional[String] = Field(None, description='Model of the device (XR, ASR).') - protocol_type: Optional[List[String]] = Field( + protocol_type: Optional[list[String]] = Field( None, alias='protocolType', description='Protocol used for management for the device (cli, netconf, gnmi).', @@ -265,7 +268,7 @@ class DeviceMetadata(Node): ) typename__: Optional[Literal['DeviceMetadata']] = Field( 'DeviceMetadata', alias='__typename' - ) + ) # type: ignore[assignment] class DeviceMetadataEdge(BaseModel): @@ -283,12 +286,12 @@ class DeviceMetadataEdge(BaseModel): class InstalledDevices(BaseModel): - not_updated: List[String] = Field( + not_updated: list[String] = Field( ..., alias='notUpdated', description='List of node names which coordinates have not been updated.', ) - updated: List[String] = Field( + updated: list[String] = Field( ..., description='List of node names which coordinates have been updated.' ) typename__: Optional[Literal['InstalledDevices']] = Field( @@ -322,7 +325,7 @@ class MetadataConnection(BaseModel): Grouped list of Metadata device objects and pagination metadata. """ - edges: Optional[List[Optional[DeviceMetadataEdge]]] = Field( + edges: Optional[list[Optional[DeviceMetadataEdge]]] = Field( None, description='List of Metadata device objects.' ) page_info: PageInfo = Field( @@ -375,7 +378,7 @@ class MplsDevice(Node): ) details: MplsDeviceDetails = Field(..., description='Details of the device.') id: ID = Field(..., description='Unique identifier of the object.') - labels: Optional[List[String]] = Field( + labels: Optional[list[String]] = Field( None, description='List of strings that can be used for grouping of synced devices.', ) @@ -390,7 +393,7 @@ class MplsDevice(Node): ) typename__: Optional[Literal['MplsDevice']] = Field( 'MplsDevice', alias='__typename' - ) + ) # type: ignore[assignment] class MplsDeviceConnection(BaseModel): @@ -398,7 +401,7 @@ class MplsDeviceConnection(BaseModel): Grouped list of MplsDevice objects and pagination metadata. """ - edges: Optional[List[Optional[MplsDeviceEdge]]] = Field( + edges: Optional[list[Optional[MplsDeviceEdge]]] = Field( None, description='List of MplsDevice objects.' ) page_info: PageInfo = Field( @@ -414,8 +417,8 @@ class MplsDeviceDetails(BaseModel): Details specific to MPLS (Multi-Protocol Label Switching). """ - lsp_tunnels: Optional[List[Optional[LspTunnel]]] = Field(None, alias='lspTunnels') - mpls_data: Optional[List[Optional[MplsData]]] = Field(None, alias='mplsData') + lsp_tunnels: Optional[list[Optional[LspTunnel]]] = Field(None, alias='lspTunnels') + mpls_data: Optional[list[Optional[MplsData]]] = Field(None, alias='mplsData') router_id: Optional[String] = Field(None, alias='routerId') typename__: Optional[Literal['MplsDeviceDetails']] = Field( 'MplsDeviceDetails', alias='__typename' @@ -455,7 +458,7 @@ class MplsInterface(Node): ) typename__: Optional[Literal['MplsInterface']] = Field( 'MplsInterface', alias='__typename' - ) + ) # type: ignore[assignment] class MplsInterfaceConnection(BaseModel): @@ -463,7 +466,7 @@ class MplsInterfaceConnection(BaseModel): Grouped list of MplsInterface objects and pagination metadata. """ - edges: Optional[List[Optional[MplsInterfaceEdge]]] = Field( + edges: Optional[list[Optional[MplsInterfaceEdge]]] = Field( None, description='List of MplsInterface objects.' ) page_info: PageInfo = Field( @@ -493,7 +496,7 @@ class MplsLinkConnection(BaseModel): Grouped list of MplsLinks objects and pagination metadata. """ - edges: Optional[List[Optional[MplsLinkEdge]]] = Field( + edges: Optional[list[Optional[MplsLinkEdge]]] = Field( None, description='List of MplsInterface objects.' ) page_info: PageInfo = Field( @@ -542,7 +545,7 @@ class MplsLspPath(BaseModel): lsp_metadata: Optional[MplsLspMetadata] = Field( None, alias='lspMetadata', description='LSP metadata.' ) - path: Optional[List[Optional[String]]] = Field( + path: Optional[list[Optional[String]]] = Field( None, description='Ordered list of link IDs & device IDs on the path.' ) typename__: Optional[Literal['MplsLspPath']] = Field( @@ -615,7 +618,7 @@ class NetDevice(Node): alias='routerId', description='Identifier of the routing entity (usually IPv4 address). RouterId and ospfAreaId together compose a unique key.', ) - typename__: Optional[Literal['NetDevice']] = Field('NetDevice', alias='__typename') + typename__: Optional[Literal['NetDevice']] = Field('NetDevice', alias='__typename') # type: ignore[assignment] class NetDeviceConnection(BaseModel): @@ -623,7 +626,7 @@ class NetDeviceConnection(BaseModel): Grouped list of NetDevice objects and pagination metadata. """ - edges: Optional[List[Optional[NetDeviceEdge]]] = Field( + edges: Optional[list[Optional[NetDeviceEdge]]] = Field( None, description='List of NetDevice objects.' ) page_info: PageInfo = Field( @@ -670,7 +673,7 @@ class NetInterface(Node): ) typename__: Optional[Literal['NetInterface']] = Field( 'NetInterface', alias='__typename' - ) + ) # type: ignore[assignment] class NetInterfaceConnection(BaseModel): @@ -678,7 +681,7 @@ class NetInterfaceConnection(BaseModel): Grouped list of NetInterface objects and pagination metadata. """ - edges: Optional[List[Optional[NetInterfaceEdge]]] = Field( + edges: Optional[list[Optional[NetInterfaceEdge]]] = Field( None, description='List of NetInterface objects.' ) page_info: PageInfo = Field( @@ -704,7 +707,7 @@ class NetInterfaceEdge(BaseModel): class NetLinkAttributes(BaseModel): - admin_group: Optional[List[Optional[Int]]] = Field( + admin_group: Optional[list[Optional[Int]]] = Field( None, alias='adminGroup', description='A list of admin group masks on the network interface. (Group Number)', @@ -724,7 +727,7 @@ class NetLinkAttributes(BaseModel): alias='maxReservableLinkBandwidth', description='The maximum reservable link bandwidth of the network interface. (Bytes per second)', ) - shared_risk_link_group: Optional[List[Optional[Int]]] = Field( + shared_risk_link_group: Optional[list[Optional[Int]]] = Field( None, alias='sharedRiskLinkGroup', description='A list of shared risk link groups on the network interface.', @@ -734,7 +737,7 @@ class NetLinkAttributes(BaseModel): alias='trafficEngineeringMetric', description='Traffic Engineering metric on the network interface.', ) - unreserved_bandwidth: Optional[List[Optional[Float]]] = Field( + unreserved_bandwidth: Optional[list[Optional[Float]]] = Field( None, alias='unreservedBandwidth', description='The unreserved bandwidth on the network interface. (Bytes per second)', @@ -749,7 +752,7 @@ class NetLinkConnection(BaseModel): Grouped list of NetLinks objects and pagination metadata. """ - edges: Optional[List[Optional[NetLinkEdge]]] = Field( + edges: Optional[list[Optional[NetLinkEdge]]] = Field( None, description='List of NetInterface objects.' ) page_info: PageInfo = Field( @@ -795,7 +798,7 @@ class NetNetwork(Node): ) typename__: Optional[Literal['NetNetwork']] = Field( 'NetNetwork', alias='__typename' - ) + ) # type: ignore[assignment] class NetNetworkConnection(BaseModel): @@ -803,7 +806,7 @@ class NetNetworkConnection(BaseModel): Grouped list of NetNetwork objects and pagination metadata. """ - edges: Optional[List[Optional[NetNetworkEdge]]] = Field( + edges: Optional[list[Optional[NetNetworkEdge]]] = Field( None, description='List of NetNetwork objects.' ) page_info: Optional[PageInfo] = Field( @@ -829,7 +832,7 @@ class NetRoutingPathConnection(BaseModel): Computed routing paths from source to destination device. """ - edges: Optional[List[RoutingPath]] = Field( + edges: Optional[list[RoutingPath]] = Field( None, description='List of routing paths from source to destination device. Ordered from shortest to longest path based on weight.', ) @@ -898,7 +901,7 @@ class PhyDevice(Node): ) details: PhyDeviceDetails = Field(..., description='Details of the device.') id: ID = Field(..., description='Unique identifier of the object.') - labels: Optional[List[String]] = Field( + labels: Optional[list[String]] = Field( None, description='List of strings that can be used for grouping of synced devices.', ) @@ -919,7 +922,7 @@ class PhyDevice(Node): status: NodeStatus = Field( ..., description='Status of the device from the view of the synced topology.' ) - typename__: Optional[Literal['PhyDevice']] = Field('PhyDevice', alias='__typename') + typename__: Optional[Literal['PhyDevice']] = Field('PhyDevice', alias='__typename') # type: ignore[assignment] class PhyDeviceConnection(BaseModel): @@ -927,7 +930,7 @@ class PhyDeviceConnection(BaseModel): Grouped list of PhyDevice objects and pagination metadata. """ - edges: Optional[List[Optional[PhyDeviceEdge]]] = Field( + edges: Optional[list[Optional[PhyDeviceEdge]]] = Field( None, description='List of PhyDevice objects.' ) page_info: PageInfo = Field( @@ -996,7 +999,7 @@ class PhyInterface(Node): ) typename__: Optional[Literal['PhyInterface']] = Field( 'PhyInterface', alias='__typename' - ) + ) # type: ignore[assignment] class PhyInterfaceConnection(BaseModel): @@ -1004,7 +1007,7 @@ class PhyInterfaceConnection(BaseModel): Grouped list of PhyInterface objects and pagination metadata. """ - edges: Optional[List[Optional[PhyInterfaceEdge]]] = Field( + edges: Optional[list[Optional[PhyInterfaceEdge]]] = Field( None, description='List of PhyInterface objects.' ) page_info: PageInfo = Field( @@ -1049,7 +1052,7 @@ class PhyLinkConnection(BaseModel): Grouped list of PhyLinks objects and pagination metadata. """ - edges: Optional[List[Optional[PhyLinkEdge]]] = Field( + edges: Optional[list[Optional[PhyLinkEdge]]] = Field( None, description='List of PhyInterface objects.' ) page_info: PageInfo = Field( @@ -1079,7 +1082,7 @@ class ProviderResponse(BaseModel): Response from the provider query that contains information about supported device types in the specified topology. """ - supported_devices: List[String] = Field( + supported_devices: list[String] = Field( ..., alias='supportedDevices', description='List of the supported device types in the specified topology (e.g. ios, ios xe, sros, etc.)', @@ -1099,7 +1102,7 @@ class PtpDevice(Node): ) details: PtpDeviceDetails = Field(..., description='Details of the device.') id: ID = Field(..., description='Unique identifier of the object.') - labels: Optional[List[String]] = Field( + labels: Optional[list[String]] = Field( None, description='List of strings that can be used for grouping of synced devices.', ) @@ -1112,7 +1115,7 @@ class PtpDevice(Node): status: NodeStatus = Field( ..., description='Status of the device from the view of the synced topology.' ) - typename__: Optional[Literal['PtpDevice']] = Field('PtpDevice', alias='__typename') + typename__: Optional[Literal['PtpDevice']] = Field('PtpDevice', alias='__typename') # type: ignore[assignment] class PtpDeviceConnection(BaseModel): @@ -1120,7 +1123,7 @@ class PtpDeviceConnection(BaseModel): Grouped list of PtpDevice objects and pagination metadata. """ - edges: Optional[List[Optional[PtpDeviceEdge]]] = Field( + edges: Optional[list[Optional[PtpDeviceEdge]]] = Field( None, description='List of PtpDevice objects.' ) page_info: PageInfo = Field( @@ -1237,7 +1240,7 @@ class PtpDiffSynce(Node): ) typename__: Optional[Literal['PtpDiffSynce']] = Field( 'PtpDiffSynce', alias='__typename' - ) + ) # type: ignore[assignment] class PtpDiffSynceConnection(BaseModel): @@ -1245,7 +1248,7 @@ class PtpDiffSynceConnection(BaseModel): Grouped list of PtpDiffSynceDevice objects and pagination metadata. """ - edges: Optional[List[Optional[PtpDiffSynceEdge]]] = Field( + edges: Optional[list[Optional[PtpDiffSynceEdge]]] = Field( None, description='List of PtpDiffSynce objects.' ) page_info: PageInfo = Field( @@ -1294,7 +1297,7 @@ class PtpInterface(Node): ) typename__: Optional[Literal['PtpInterface']] = Field( 'PtpInterface', alias='__typename' - ) + ) # type: ignore[assignment] class PtpInterfaceConnection(BaseModel): @@ -1302,7 +1305,7 @@ class PtpInterfaceConnection(BaseModel): Grouped list of PtpInterface objects and pagination metadata. """ - edges: Optional[List[Optional[PtpInterfaceEdge]]] = Field( + edges: Optional[list[Optional[PtpInterfaceEdge]]] = Field( None, description='List of PtpInterface objects.' ) page_info: PageInfo = Field( @@ -1357,7 +1360,7 @@ class PtpLinkConnection(BaseModel): Grouped list of PtpLinks objects and pagination metadata. """ - edges: Optional[List[Optional[PtpLinkEdge]]] = Field( + edges: Optional[list[Optional[PtpLinkEdge]]] = Field( None, description='List of PtpInterface objects.' ) page_info: PageInfo = Field( @@ -1395,7 +1398,7 @@ class PtpPath(BaseModel): ..., description='True if path is complete - the last element in the path represents GM clock, False otherwise.', ) - nodes: Optional[List[ID]] = Field( + nodes: Optional[list[ID]] = Field( None, description='Ordered list of node identifiers that compose path from source clock to destination clock.', ) @@ -1407,7 +1410,7 @@ class RefreshCoordinatesResponse(BaseModel): Response containing a list of nodes with refreshed coordinates. """ - nodes: List[NodeCoordinates] = Field( + nodes: list[NodeCoordinates] = Field( ..., description='List of refreshed nodes with their new coordinates.' ) typename__: Optional[Literal['RefreshCoordinatesResponse']] = Field( @@ -1420,7 +1423,7 @@ class RoutingPath(BaseModel): Computed routing path from source to destination device. """ - nodes: List[NodeInfo] = Field( + nodes: list[NodeInfo] = Field( ..., description='Ordered list of nodes that compose path from source to destination device.', ) @@ -1435,17 +1438,17 @@ class SyncResponse(BaseModel): Response from the sync query that contains information about synced devices from the network to topology. """ - devices_missing_in_inventory: Optional[List[Optional[String]]] = Field( + devices_missing_in_inventory: Optional[list[Optional[String]]] = Field( None, alias='devicesMissingInInventory', description='List of devices that are installed in UniConfig but are missing their metadata in DeviceMetadata collection in the\ndatabase.', ) - devices_missing_in_uniconfig: Optional[List[Optional[String]]] = Field( + devices_missing_in_uniconfig: Optional[list[Optional[String]]] = Field( None, alias='devicesMissingInUniconfig', description='List of devices that are not installed in UniConfig.', ) - labels: List[String] = Field( + labels: list[String] = Field( ..., description='List of string labels that are used for grouping of synced devices.\nList content should be the same as the list of labels in the input of the sync query.', ) @@ -1469,7 +1472,7 @@ class SynceDevice(Node): ) details: SynceDeviceDetails = Field(..., description='Details of the device.') id: ID = Field(..., description='Unique identifier of the object.') - labels: Optional[List[String]] = Field( + labels: Optional[list[String]] = Field( None, description='List of strings that can be used for grouping of synced devices.', ) @@ -1484,7 +1487,7 @@ class SynceDevice(Node): ) typename__: Optional[Literal['SynceDevice']] = Field( 'SynceDevice', alias='__typename' - ) + ) # type: ignore[assignment] class SynceDeviceConnection(BaseModel): @@ -1492,7 +1495,7 @@ class SynceDeviceConnection(BaseModel): Grouped list of SynceDevice objects and pagination metadata. """ - edges: Optional[List[Optional[SynceDeviceEdge]]] = Field( + edges: Optional[list[Optional[SynceDeviceEdge]]] = Field( None, description='List of SynceDevice objects.' ) page_info: PageInfo = Field( @@ -1554,7 +1557,7 @@ class SynceInterface(Node): ) typename__: Optional[Literal['SynceInterface']] = Field( 'SynceInterface', alias='__typename' - ) + ) # type: ignore[assignment] class SynceInterfaceConnection(BaseModel): @@ -1562,7 +1565,7 @@ class SynceInterfaceConnection(BaseModel): Grouped list of SynceInterface objects and pagination metadata. """ - edges: Optional[List[Optional[SynceInterfaceEdge]]] = Field( + edges: Optional[list[Optional[SynceInterfaceEdge]]] = Field( None, description='List of SynceInterface objects.' ) page_info: PageInfo = Field( @@ -1625,7 +1628,7 @@ class SynceLinkConnection(BaseModel): Grouped list of SynceLinks objects and pagination metadata. """ - edges: Optional[List[Optional[SynceLinkEdge]]] = Field( + edges: Optional[list[Optional[SynceLinkEdge]]] = Field( None, description='List of SynceInterface objects.' ) page_info: PageInfo = Field( @@ -1663,7 +1666,7 @@ class SyncePath(BaseModel): ..., description='True if path is complete - the last element in the path represents GM, False otherwise.', ) - nodes: Optional[List[ID]] = Field( + nodes: Optional[list[ID]] = Field( None, description='Ordered list of node identifiers that compose path from source device to destination device.', ) @@ -1711,7 +1714,7 @@ class TopologyOverlayDeviceConnection(BaseModel): Grouped list of TopologyOverlayDevice objects and pagination metadata. """ - edges: Optional[List[Optional[TopologyOverlayDeviceEdge]]] = Field( + edges: Optional[list[Optional[TopologyOverlayDeviceEdge]]] = Field( None, description='List of TopologyOverlayDeviceEdge objects.' ) page_info: PageInfo = Field( @@ -1764,7 +1767,7 @@ class TopologyOverlayInterfaceConnection(BaseModel): Grouped list of TopologyOverlayInterface objects and pagination metadata. """ - edges: Optional[List[Optional[TopologyOverlayInterfaceEdge]]] = Field( + edges: Optional[list[Optional[TopologyOverlayInterfaceEdge]]] = Field( None, description='List of TopologyOverlayInterface objects.' ) page_info: PageInfo = Field( @@ -1794,7 +1797,7 @@ class TopologyOverlayLinkConnection(BaseModel): Grouped list of TopologyOverlayLinks objects and pagination metadata. """ - edges: Optional[List[Optional[TopologyOverlayLinkEdge]]] = Field( + edges: Optional[list[Optional[TopologyOverlayLinkEdge]]] = Field( None, description='List of TopologyOverlayInterface objects.' ) page_info: PageInfo = Field( @@ -1885,7 +1888,7 @@ class DeviceMetadataFilter(BaseModel): device_name: Optional[String] = Field( None, alias='deviceName', description='Regex of device name.' ) - polygon: Optional[List[List[List[Float]]]] = Field( + polygon: Optional[list[list[list[Float]]]] = Field( None, description='A GeoJSON Polygon shape used for filtering devices based on their location in this area.\n\nThe GeoJSON Polygon consists of a series of closed LineString objects (ring-like).\nThese Linear Ring objects consist of four or more coordinate pairs with the first and last coordinate\npair being equal. Coordinate pairs of a Polygon are an array of linear ring coordinate arrays.\nThe first element in the array represents the exterior ring.\nAny subsequent elements represent interior rings (holes within the surface).\n\nThe orientation of the first linear ring is crucial: the right-hand-rule is applied, so that the area to the left\nof the path of the linear ring (when walking on the surface of the Earth) is considered to be the “interior”\nof the polygon. All other linear rings must be contained within this interior.\n\nExample with a hole:\n[\n [\n [100.0, 0.0],\n [101.0, 0.0],\n [101.0, 1.0],\n [100.0, 1.0],\n [100.0, 0.0]\n ],\n [\n [100.8, 0.8],\n [100.8, 0.2],\n [100.2, 0.2],\n [100.2, 0.8],\n [100.8, 0.8]\n ]\n]', ) diff --git a/utils/graphql-pydantic-generator/README.md b/utils/graphql-pydantic-generator/README.md index ecfa373..6191346 100644 --- a/utils/graphql-pydantic-generator/README.md +++ b/utils/graphql-pydantic-generator/README.md @@ -24,9 +24,14 @@ user@ntb:~/frinx-services-python-api/utils/graphql-pydantic-generator$ poetry in user@ntb:~/frinx-services-python-api/utils/graphql-pydantic-generator$ poetry run generate --input_path ~/topology-discovery/topology_discovery/api/graphql/schemas/ --output_path ~/frinx-services-python-api/topology-discovery/python/frinx_api/topology_discovery/__init__.py ``` +4. Find generated file (--output_path from previous step) and run mypy +```bash +user@ntb:~/frinx-services-python-api/utils/graphql-pydantic-generator$ poetry run mypy . +``` + 4. Fix 'Incompatible types in assignment' mypy error ```example typename__: Optional[Literal['SynceDevice']] = Field( 'SynceDevice', alias='__typename' -) # type: ignore +) # type: ignore[assignment] ``` \ No newline at end of file diff --git a/utils/graphql-pydantic-generator/graphql_pydantic_generator/__main__.py b/utils/graphql-pydantic-generator/graphql_pydantic_generator/__main__.py index 2896ccc..e1c718e 100644 --- a/utils/graphql-pydantic-generator/graphql_pydantic_generator/__main__.py +++ b/utils/graphql-pydantic-generator/graphql_pydantic_generator/__main__.py @@ -27,6 +27,7 @@ def generate(input_path: str, output_path: str): output=Path(output_path), output_model_type=DataModelType.PydanticV2BaseModel, snake_case_field=True, + use_standard_collections=True, ) click.echo(f'Successful')