From a08ad7d7845ce3cde5c9f9ad0cf04f2c265e1b22 Mon Sep 17 00:00:00 2001 From: Brad Keryan Date: Tue, 19 Sep 2023 11:56:56 -0500 Subject: [PATCH 01/14] workflows: Check documentation --- .github/workflows/check_nims.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/check_nims.yml b/.github/workflows/check_nims.yml index da7841794..53ca082b7 100644 --- a/.github/workflows/check_nims.yml +++ b/.github/workflows/check_nims.yml @@ -37,4 +37,11 @@ jobs: - name: Mypy static analysis (ni-measurementlink-service) run: poetry run mypy -p ni_measurementlink_service - name: Mypy static analysis (tests) - run: poetry run mypy tests \ No newline at end of file + run: poetry run mypy tests + - name: Check documentation + run: | + rm -rf docs + mkdir -p docs + touch docs/.nojekyll + poetry run sphinx-build _docs_source docs -b html + git restore docs/ \ No newline at end of file From 32d565221086cf9c14ae79ee104f4b11f940b115 Mon Sep 17 00:00:00 2001 From: Brad Keryan Date: Tue, 19 Sep 2023 12:01:03 -0500 Subject: [PATCH 02/14] workflows: Install --with docs --- .github/workflows/check_nims.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/check_nims.yml b/.github/workflows/check_nims.yml index 53ca082b7..8d2d12422 100644 --- a/.github/workflows/check_nims.yml +++ b/.github/workflows/check_nims.yml @@ -38,6 +38,8 @@ jobs: run: poetry run mypy -p ni_measurementlink_service - name: Mypy static analysis (tests) run: poetry run mypy tests + - name: Install ni-measurementlink-service with docs + run: poetry install --with docs - name: Check documentation run: | rm -rf docs From 78004b9ee37cab894f6a4caecb6f9b09ebf98eb0 Mon Sep 17 00:00:00 2001 From: Brad Keryan Date: Tue, 19 Sep 2023 12:14:01 -0500 Subject: [PATCH 03/14] workflows: Check sphinx-built exit code --- .github/workflows/check_nims.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check_nims.yml b/.github/workflows/check_nims.yml index 8d2d12422..031557446 100644 --- a/.github/workflows/check_nims.yml +++ b/.github/workflows/check_nims.yml @@ -40,10 +40,11 @@ jobs: run: poetry run mypy tests - name: Install ni-measurementlink-service with docs run: poetry install --with docs - - name: Check documentation + - name: Build docs and check for errors/warnings run: | rm -rf docs mkdir -p docs touch docs/.nojekyll poetry run sphinx-build _docs_source docs -b html - git restore docs/ \ No newline at end of file + - name: Revert docs + run: git clean -dfx docs/ && git restore docs/ \ No newline at end of file From 3e04bc480499d380dba4acc42d592833552cf7ee Mon Sep 17 00:00:00 2001 From: Brad Keryan Date: Tue, 19 Sep 2023 12:18:39 -0500 Subject: [PATCH 04/14] workflows: Tell Sphinx to convert warnings to errors --- .github/workflows/check_nims.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check_nims.yml b/.github/workflows/check_nims.yml index 031557446..98707eead 100644 --- a/.github/workflows/check_nims.yml +++ b/.github/workflows/check_nims.yml @@ -45,6 +45,6 @@ jobs: rm -rf docs mkdir -p docs touch docs/.nojekyll - poetry run sphinx-build _docs_source docs -b html + poetry run sphinx-build _docs_source docs -b html -W --keep-going - name: Revert docs run: git clean -dfx docs/ && git restore docs/ \ No newline at end of file From 1893a6a0bbf0ee082373cc34180b285e4a55aafc Mon Sep 17 00:00:00 2001 From: Brad Keryan Date: Tue, 19 Sep 2023 12:43:51 -0500 Subject: [PATCH 05/14] service: Fix docstring formatting --- ni_measurementlink_service/_datatypeinfo.py | 4 +- .../_internal/grpc_servicer.py | 18 ++----- .../_internal/parameter/metadata.py | 18 ++----- .../_internal/parameter/serializer.py | 53 +++++-------------- .../_internal/service_manager.py | 9 +--- .../measurement/service.py | 35 ++++-------- .../session_management.py | 38 ++++--------- 7 files changed, 47 insertions(+), 128 deletions(-) diff --git a/ni_measurementlink_service/_datatypeinfo.py b/ni_measurementlink_service/_datatypeinfo.py index d15fa6c46..abc56fbb1 100644 --- a/ni_measurementlink_service/_datatypeinfo.py +++ b/ni_measurementlink_service/_datatypeinfo.py @@ -9,8 +9,7 @@ class DataTypeInfo(NamedTuple): """Class that represents the information for each of the DataType enum values. - Attributes - ---------- + Attributes: grpc_field_type: Field.Kind associated with the DataType repeated: Whether the DataType is a repeated field @@ -21,7 +20,6 @@ class DataTypeInfo(NamedTuple): message_type (str): This is the gRPC full name of the message type. Required when 'grpc_field_type' is Kind.TypeMessage. Ignored for any other 'type'. - """ grpc_field_type: type_pb2.Field.Kind.ValueType diff --git a/ni_measurementlink_service/_internal/grpc_servicer.py b/ni_measurementlink_service/_internal/grpc_servicer.py index 42b5f4a78..41bbcb324 100644 --- a/ni_measurementlink_service/_internal/grpc_servicer.py +++ b/ni_measurementlink_service/_internal/grpc_servicer.py @@ -100,16 +100,13 @@ def _get_mapping_by_parameter_name( ) -> Dict[str, Any]: """Transform the mapping by id to mapping by parameter names of the measurement function. - Args - ---- + Args: mapping_by_id (Dict[int, Any]): Mapping by ID measure_function (callable): Function from which the parameter names are extracted. - Returns - ------- - Dict[str, Any]: Mapping by Parameters names based on the measurement function. - + Returns: + Dict[str, Any]: Mapping by Parameters names based on the measurement function """ signature = inspect.signature(measure_function) mapping_by_variable_name = {} @@ -132,8 +129,7 @@ def _serialize_outputs(output_metadata: Dict[int, ParameterMetadata], outputs: A class MeasurementServiceServicerV1(v1_measurement_service_pb2_grpc.MeasurementServiceServicer): """Implementation of the Measurement Service's gRPC base class. - Attributes - ---------- + Attributes: measurement_info (MeasurementInfo): Measurement info configuration_parameter_list (List): List of configuration parameters. @@ -141,7 +137,6 @@ class MeasurementServiceServicerV1(v1_measurement_service_pb2_grpc.MeasurementSe output_parameter_list (List): List of output parameters. measure_function (Callable): Registered measurement function. - """ def __init__( @@ -277,8 +272,7 @@ def _serialize_response(self, outputs: Any) -> v1_measurement_service_pb2.Measur class MeasurementServiceServicerV2(v2_measurement_service_pb2_grpc.MeasurementServiceServicer): """Implementation of the Measurement Service's gRPC base class. - Attributes - ---------- + Attributes: measurement_info (MeasurementInfo): Measurement info configuration_parameter_list (List): List of configuration parameters. @@ -286,7 +280,6 @@ class MeasurementServiceServicerV2(v2_measurement_service_pb2_grpc.MeasurementSe output_parameter_list (List): List of output parameters. measure_function (Callable): Registered measurement function. - """ def __init__( @@ -306,7 +299,6 @@ def __init__( output_parameter_list (List): List of output parameters. measure_function (Callable): Registered measurement function. - """ super().__init__() diff --git a/ni_measurementlink_service/_internal/parameter/metadata.py b/ni_measurementlink_service/_internal/parameter/metadata.py index dbc12a2dd..be7ecabd5 100644 --- a/ni_measurementlink_service/_internal/parameter/metadata.py +++ b/ni_measurementlink_service/_internal/parameter/metadata.py @@ -12,8 +12,7 @@ class ParameterMetadata(NamedTuple): """Class that represents the metadata of parameters. - Attributes - ---------- + Attributes: display_name (str): The display name of the parameter. type (type_pb2.Field): The datatype of the parameter @@ -30,7 +29,6 @@ class ParameterMetadata(NamedTuple): message_type (str): This is the gRPC full name of the message type. Required when 'type' is Kind.TypeMessage. Ignored for any other 'type'. - """ display_name: str @@ -44,14 +42,11 @@ class ParameterMetadata(NamedTuple): def validate_default_value_type(parameter_metadata: ParameterMetadata) -> None: """Validate and raise exception if the default value does not match the type info. - Args - ---- + Args: parameter_metadata (ParameterMetadata): Parameter metadata - Raises - ------ + Raises: TypeError: If default value does not match the Datatype. - """ default_value = parameter_metadata.default_value if default_value is None: @@ -148,14 +143,11 @@ def _validate_default_value_type_for_enum_type( def get_enum_values_annotation(parameter_metadata: ParameterMetadata) -> str: """Gets the value for the "ni/enum.values" annotation if it exists. - Args - ---- + Args: parameter_metadata (ParameterMetadata): Parameter metadata - Returns - ------- + Returns: str: The value of "ni/enum.values" annotation - """ if ( parameter_metadata.annotations.get("ni/type_specialization") diff --git a/ni_measurementlink_service/_internal/parameter/serializer.py b/ni_measurementlink_service/_internal/parameter/serializer.py index 7dd29f35e..e43ab57c1 100644 --- a/ni_measurementlink_service/_internal/parameter/serializer.py +++ b/ni_measurementlink_service/_internal/parameter/serializer.py @@ -23,16 +23,13 @@ def deserialize_parameters( ) -> Dict[int, Any]: """Deserialize the bytes of the parameter based on the metadata. - Args - ---- + Args: parameter_metadata_dict (Dict[int, ParameterMetadata]): Parameter metadata by ID. parameter_bytes (bytes): Byte string to deserialize. - Returns - ------- + Returns: Dict[int, Any]: Deserialized parameters by ID - """ # Getting overlapping parameters overlapping_parameter_by_id = _get_overlapping_parameters( @@ -56,16 +53,13 @@ def serialize_parameters( ) -> bytes: """Serialize the parameter values in same order based on the metadata_dict. - Args - ---- + Args: parameter_metadata_dict (Dict[int, ParameterMetadata]): Parameter metadata by ID. parameter_value (Sequence[Any]): Parameter values to serialize. - Returns - ------- + Returns: bytes: Serialized byte string containing parameter values. - """ serialize_buffer = BytesIO() # inner_encoder updates the serialize_buffer for i, parameter in enumerate(parameter_values): @@ -94,14 +88,11 @@ def serialize_parameters( def serialize_default_values(parameter_metadata_dict: Dict[int, ParameterMetadata]) -> bytes: """Serialize the Default values in the Metadata. - Args - ----- + Args: parameter_metadata_dict (Dict[int, ParameterMetadata]): Configuration metadata. - Returns - ------- + Returns: bytes: Serialized byte string containing default values. - """ default_value_parameter_array = list() default_value_parameter_array = [ @@ -115,16 +106,13 @@ def _get_field_index(parameter_bytes: bytes, tag_position: int) -> int: The tag Position should be the index of the TagValue in the ByteArray for valid field index. - Args - ---- + Args: parameter_bytes (bytes): Serialized bytes tag_position (int): Tag position - Returns - ------- + Returns: int: Filed index of the Tag Position - """ return parameter_bytes[tag_position] >> _GRPC_WIRE_TYPE_BIT_WIDTH @@ -134,20 +122,16 @@ def _get_overlapping_parameters( ) -> Dict[int, Any]: """Get the parameters present in both `parameter_metadata_dict` and `parameter_bytes`. - Args - ---- + Args: parameter_metadata_dict (Dict[int, ParameterMetadata]): Parameter metadata by ID. parameter_bytes (bytes): bytes of Parameter that need to be deserialized. - Raises - ------ + Raises: Exception: If the protobuf filed index is invalid. - Returns - ------- + Returns: Dict[int, Any]: Overlapping Parameters by ID. - """ # inner_decoder update the overlapping_parameters overlapping_parameters_by_id: Dict[int, Any] = {} @@ -180,16 +164,13 @@ def _get_missing_parameters( ) -> Dict[int, Any]: """Get the Parameters defined in `parameter_metadata_dict` but not in `parameter_by_id`. - Args - ---- + Args: parameter_metadata_dict (Dict[int, ParameterMetadata]): Parameter metadata by id. parameter_by_id (Dict[int, Any]): Parameters by ID to compare the metadata with. - Returns - ------- + Returns: Dict[int, Any]: Missing parameter(as type defaults) by ID. - """ missing_parameters = {} for key, value in parameter_metadata_dict.items(): @@ -210,16 +191,10 @@ def _deserialize_enum_parameters( ) -> None: """Converts all enums in `parameter_by_id` to the user defined enum type. - Args - ---- + Args: parameter_metadata_dict (Dict[int, ParameterMetadata]): Parameter metadata by id. parameter_by_id (Dict[int, Any]): Parameters by ID to compare the metadata with. - - Returns - ------- - None: No return value. - """ for id, value in parameter_by_id.items(): parameter_metadata = parameter_metadata_dict[id] diff --git a/ni_measurementlink_service/_internal/service_manager.py b/ni_measurementlink_service/_internal/service_manager.py index 68989b9d5..ded6cb673 100644 --- a/ni_measurementlink_service/_internal/service_manager.py +++ b/ni_measurementlink_service/_internal/service_manager.py @@ -30,11 +30,9 @@ class GrpcService: """Class that manages hosting the measurement as service and closing service. - Attributes - ---------- + Attributes: discovery_client (DiscoveryClient, optional): Instance of Discovery Client. Defaults to None. - """ def __init__(self, discovery_client: Optional[DiscoveryClient] = None) -> None: @@ -64,7 +62,6 @@ def start( """Host a gRPC service with the registered measurement method. Args: - ---- measurement_info (MeasurementInfo): Measurement info service_info (ServiceInfo): Service info @@ -75,10 +72,8 @@ def start( measure_function (Callable): Registered measurement function. - Returns - ------- + Returns: int: The port number of the server - """ interceptors: List[grpc.ServerInterceptor] = [] if ServerLogger.is_enabled(): diff --git a/ni_measurementlink_service/measurement/service.py b/ni_measurementlink_service/measurement/service.py index c18a2f39d..74a83187a 100644 --- a/ni_measurementlink_service/measurement/service.py +++ b/ni_measurementlink_service/measurement/service.py @@ -95,8 +95,7 @@ def abort(self, code: grpc.StatusCode, details: str) -> None: class MeasurementService: """Class that supports registering and hosting a python function as a gRPC service. - Attributes - ---------- + Attributes: measurement_info (info.MeasurementInfo): Measurement info service_info(info.ServiceInfo) : Service Info @@ -113,7 +112,6 @@ class MeasurementService: service. channel_pool (GrpcChannelPool): Pool of gRPC channels used by the service. - """ def __init__( @@ -227,8 +225,7 @@ def configuration( See also: :func:`.register_measurement` - Args - ---- + Args: display_name (str): Display name of the configuration. type (DataType): Data type of the configuration. @@ -248,11 +245,9 @@ def configuration( Defines the enum type associated with this configuration parameter. This is only supported when configuration type is DataType.Enum or DataType.EnumArray1D. - Returns - ------- + Returns: Callable: Callable that takes in Any Python Function and returns the same python function. - """ data_type_info = _datatypeinfo.get_type_info(type) annotations = self._make_annotations_dict( @@ -292,8 +287,7 @@ def output( See also: :func:`.register_measurement` - Args - ---- + Args: display_name (str): Display name of the output. type (DataType): Data type of the output. @@ -302,11 +296,9 @@ def output( Defines the enum type associated with this configuration parameter. This is only supported when configuration type is DataType.Enum or DataType.EnumArray1D. - Returns - ------- + Returns: Callable: Callable that takes in Any Python Function and returns the same python function. - """ data_type_info = _datatypeinfo.get_type_info(type) annotations = self._make_annotations_dict( @@ -330,15 +322,12 @@ def _output(func: _F) -> _F: def host_service(self) -> MeasurementService: """Host the registered measurement method as gRPC measurement service. - Returns - ------- + Returns: MeasurementService: Context manager that can be used with a with-statement to close the service. - Raises - ------ + Raises: Exception: If register measurement methods not available. - """ if self.measure_function is None: raise Exception("Error, must register measurement method.") @@ -417,21 +406,17 @@ def __exit__( def get_channel(self, provided_interface: str, service_class: str = "") -> grpc.Channel: """Return gRPC channel to specified service. - Args - ---- + Args: provided_interface (str): The gRPC Full Name of the service. service_class (str): The service "class" that should be matched. - Returns - ------- + Returns: grpc.Channel: A channel to the gRPC service. - Raises - ------ + Raises: Exception: If service_class is not specified and there is more than one matching service registered. - """ service_location = self.grpc_service.discovery_client.resolve_service( provided_interface, service_class diff --git a/ni_measurementlink_service/session_management.py b/ni_measurementlink_service/session_management.py index 75402f8a6..1805e220e 100644 --- a/ni_measurementlink_service/session_management.py +++ b/ni_measurementlink_service/session_management.py @@ -61,14 +61,12 @@ class PinMapContext(NamedTuple): """Container for the pin map and sites. - Attributes - ---------- + Attributes: pin_map_id: The resource id of the pin map in the Pin Map service that should be used for the call. sites: List of site numbers being used for the call. If None or empty, use all sites in the pin map. - """ pin_map_id: str @@ -78,15 +76,13 @@ class PinMapContext(NamedTuple): class ChannelMapping(NamedTuple): """Mapping of each channel to the pin and site it is connected to. - Attributes - ---------- + Attributes: pin_or_relay_name (str): The pin or relay that is mapped to a channel. site (int): The site on which the pin or relay is mapped to a channel. For system pins/relays the site number is -1 as they do not belong to a specific site. channel (str): The channel to which the pin or relay is mapped on this site. - """ pin_or_relay_name: str @@ -97,8 +93,7 @@ class ChannelMapping(NamedTuple): class SessionInformation(NamedTuple): """Container for the session information. - Attributes - ---------- + Attributes: session_name (str): Session identifier used to identify the session in the session management service, as well as in driver services such as grpc-device. @@ -121,7 +116,6 @@ class SessionInformation(NamedTuple): for a channel in this instrument resource, in the order of the channel_list. This field is empty for any SessionInformation returned from Client.reserve_all_registered_sessions. - """ session_name: str @@ -269,8 +263,7 @@ def reserve_session( Reserve the session matching the given pins, sites, and instrument type ID and return the information needed to create or access the session. - Args - ---- + Args: context (PinMapContext): Includes the pin map ID for the pin map in the Pin Map Service, as well as the list of sites for the measurement. @@ -297,11 +290,9 @@ def reserve_session( -1 or negative (infinite timeout), or any positive numeric value (wait for that number of second). - Returns - ------- + Returns: SingleSessionReservation: Context manager that can be used with a with-statement to unreserve the session. - """ session_info = self._reserve_sessions( context, pin_or_relay_names, instrument_type_id, timeout @@ -328,8 +319,7 @@ def reserve_sessions( Reserve sessions matching the given pins, sites, and instrument type ID and return the information needed to create or access the sessions. - Args - ---- + Args: context (PinMapContext): Includes the pin map ID for the pin map in the Pin Map Service, as well as the list of sites for the measurement. @@ -356,11 +346,9 @@ def reserve_sessions( -1 or negative (infinite timeout), or any positive numeric value (wait for that number of second). - Returns - ------- + Returns: MultiSessionReservation: Context manager that can be used with a with-statement to unreserve the sessions. - """ session_info = self._reserve_sessions( context, pin_or_relay_names, instrument_type_id, timeout @@ -410,14 +398,11 @@ def register_sessions(self, session_info: Iterable[SessionInformation]) -> None: Indicates that the sessions are open and will need to be closed later. Args: - ---- session_info (Iterable[SessionInformation]): Sessions to register with the session management service to track as the sessions are open. - Raises - ------ + Raises: Exception: If a session by the same name is already registered. - """ request = session_management_service_pb2.RegisterSessionsRequest( sessions=( @@ -478,8 +463,7 @@ def reserve_all_registered_sessions( ) -> MultiSessionReservation: """Reserves and gets all sessions currently registered in the Session Manager. - Args - ---- + Args: instrument_type_id (str): Instrument type ID for the measurement. If unspecified, reserve sessions for all instrument types connected in the registered pin map resource. Pin maps have built in instrument definitions using the following NI @@ -499,11 +483,9 @@ def reserve_all_registered_sessions( -1 or negative (infinite timeout), or any positive numeric value (wait for that number of second). - Returns - ------- + Returns: MultiSessionReservation: Context manager that can be used with a with-statement to unreserve the sessions. - """ request = session_management_service_pb2.ReserveAllRegisteredSessionsRequest() if instrument_type_id is not None: From 1a4183359a19a2a6910cc4a516afdd6be48a70d6 Mon Sep 17 00:00:00 2001 From: Brad Keryan Date: Tue, 19 Sep 2023 14:19:14 -0500 Subject: [PATCH 06/14] pyproject.toml: Upgrade doc dependencies --- pyproject.toml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 69480a2cd..9d4b93848 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -56,13 +56,13 @@ grpc-stubs = "^1.53" optional = true [tool.poetry.group.docs.dependencies] -Sphinx = "^5.0.1" -sphinx-rtd-theme = "^1.0.0" -sphinx-autoapi = "^1.8.4" -m2r2 = "^0.3.2" -toml = "^0.10.2" -tomlkit = "^0.11.0" -sphinx-click = "^4.1.0" +Sphinx = ">=5.0.1" +sphinx-rtd-theme = ">=1.0.0" +sphinx-autoapi = ">=1.8.4" +m2r2 = ">=0.3.2" +toml = ">=0.10.2" +tomlkit = ">=0.11.0" +sphinx-click = ">=4.1.0" [build-system] requires = ["poetry-core>=1.2.0"] From 36071c77b8f9046702604ecd9b096b4077d8d15f Mon Sep 17 00:00:00 2001 From: Brad Keryan Date: Tue, 19 Sep 2023 14:19:22 -0500 Subject: [PATCH 07/14] Update poetry.lock --- poetry.lock | 414 +++++++++++++++++++++++++++------------------------- 1 file changed, 217 insertions(+), 197 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1c3cb0a4d..eea7bc183 100644 --- a/poetry.lock +++ b/poetry.lock @@ -6,6 +6,14 @@ category = "dev" optional = false python-versions = ">=3.6" +[[package]] +name = "anyascii" +version = "0.3.2" +description = "Unicode to ASCII transliteration" +category = "dev" +optional = false +python-versions = ">=3.3" + [[package]] name = "astroid" version = "2.15.6" @@ -35,7 +43,7 @@ pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} [[package]] name = "black" -version = "23.7.0" +version = "23.9.1" description = "The uncompromising code formatter." category = "dev" optional = false @@ -48,7 +56,7 @@ packaging = ">=22.0" pathspec = ">=0.9.0" platformdirs = ">=2" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} [package.extras] colorama = ["colorama (>=0.4.3)"] @@ -93,7 +101,7 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7 [[package]] name = "coverage" -version = "7.3.0" +version = "7.3.1" description = "Code coverage measurement for Python" category = "dev" optional = false @@ -201,14 +209,14 @@ grpcio = "*" [[package]] name = "grpcio" -version = "1.57.0" +version = "1.58.0" description = "HTTP/2-based RPC framework" category = "main" optional = false python-versions = ">=3.7" [package.extras] -protobuf = ["grpcio-tools (>=1.57.0)"] +protobuf = ["grpcio-tools (>=1.58.0)"] [[package]] name = "grpcio-tools" @@ -433,11 +441,11 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co [[package]] name = "pluggy" -version = "1.2.0" +version = "1.3.0" description = "plugin and hook calling mechanisms for python" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" [package.extras] dev = ["pre-commit", "tox"] @@ -445,7 +453,7 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "protobuf" -version = "4.24.1" +version = "4.24.3" description = "" category = "main" optional = false @@ -494,7 +502,7 @@ plugins = ["importlib-metadata"] [[package]] name = "pytest" -version = "7.4.0" +version = "7.4.2" description = "pytest: simple powerful testing with Python" category = "dev" optional = false @@ -542,7 +550,7 @@ dev = ["pre-commit", "pytest-asyncio", "tox"] [[package]] name = "pytz" -version = "2023.3" +version = "2023.3.post1" description = "World timezone definitions, modern and historical" category = "dev" optional = false @@ -584,16 +592,16 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "setuptools" -version = "68.1.2" +version = "68.2.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "dev" optional = false python-versions = ">=3.8" [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5,<=7.1.2)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "snowballstemmer" @@ -605,23 +613,23 @@ python-versions = "*" [[package]] name = "sphinx" -version = "5.3.0" +version = "7.1.2" description = "Python documentation generator" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" [package.dependencies] alabaster = ">=0.7,<0.8" babel = ">=2.9" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.14,<0.20" +docutils = ">=0.18.1,<0.21" imagesize = ">=1.3" importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} Jinja2 = ">=3.0" packaging = ">=21.0" -Pygments = ">=2.12" -requests = ">=2.5.0" +Pygments = ">=2.13" +requests = ">=2.25.0" snowballstemmer = ">=2.0" sphinxcontrib-applehelp = "*" sphinxcontrib-devhelp = "*" @@ -632,36 +640,36 @@ sphinxcontrib-serializinghtml = ">=1.1.5" [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-bugbear", "flake8-comprehensions", "flake8-simplify", "isort", "mypy (>=0.981)", "sphinx-lint", "types-requests", "types-typed-ast"] -test = ["cython", "html5lib", "pytest (>=4.6)", "typed_ast"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] +test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] [[package]] name = "sphinx-autoapi" -version = "1.9.0" +version = "2.1.1" description = "Sphinx API documentation generator" category = "dev" optional = false python-versions = ">=3.7" [package.dependencies] +anyascii = "*" astroid = ">=2.7" Jinja2 = "*" PyYAML = "*" -sphinx = ">=3.0" -unidecode = "*" +sphinx = ">=5.2.0" [package.extras] -docs = ["sphinx", "sphinx-rtd-theme"] +docs = ["furo", "sphinx", "sphinx-design"] dotnet = ["sphinxcontrib-dotnetdomain"] go = ["sphinxcontrib-golangdomain"] [[package]] name = "sphinx-click" -version = "4.4.0" +version = "5.0.1" description = "Sphinx extension that automatically documents click applications" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" [package.dependencies] click = ">=7.0" @@ -784,7 +792,7 @@ python-versions = ">=3.7" [[package]] name = "tomlkit" -version = "0.11.8" +version = "0.12.1" description = "Style preserving TOML library" category = "dev" optional = false @@ -824,19 +832,11 @@ python-versions = "*" [[package]] name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" category = "dev" optional = false -python-versions = ">=3.7" - -[[package]] -name = "unidecode" -version = "1.3.6" -description = "ASCII transliterations of Unicode text" -category = "dev" -optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" [[package]] name = "urllib3" @@ -862,26 +862,30 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [[package]] name = "zipp" -version = "3.16.2" +version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "dev" optional = false python-versions = ">=3.8" [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "f96808663643ca5b62266a98c99e7c6128e06f0ec745662ec3b1b000ae86573b" +content-hash = "907f64b1338b95960d44d3834827dd69d8fa694e03367eeff3bdc89ffeb24820" [metadata.files] alabaster = [ {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, ] +anyascii = [ + {file = "anyascii-0.3.2-py3-none-any.whl", hash = "sha256:3b3beef6fc43d9036d3b0529050b0c48bfad8bc960e9e562d7223cfb94fe45d4"}, + {file = "anyascii-0.3.2.tar.gz", hash = "sha256:9d5d32ef844fe225b8bc7cba7f950534fae4da27a9bf3a6bea2cb0ea46ce4730"}, +] astroid = [ {file = "astroid-2.15.6-py3-none-any.whl", hash = "sha256:389656ca57b6108f939cf5d2f9a2a825a3be50ba9d589670f393236e0a03b91c"}, {file = "astroid-2.15.6.tar.gz", hash = "sha256:903f024859b7c7687d7a7f3a3f73b17301f8e42dfd9cc9df9d4418172d3e2dbd"}, @@ -891,28 +895,28 @@ babel = [ {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, ] black = [ - {file = "black-23.7.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587"}, - {file = "black-23.7.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f"}, - {file = "black-23.7.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be"}, - {file = "black-23.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc"}, - {file = "black-23.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a"}, - {file = "black-23.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926"}, - {file = "black-23.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6"}, - {file = "black-23.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a"}, - {file = "black-23.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087"}, - {file = "black-23.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91"}, - {file = "black-23.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491"}, - {file = "black-23.7.0-py3-none-any.whl", hash = "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96"}, - {file = "black-23.7.0.tar.gz", hash = "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb"}, + {file = "black-23.9.1-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:d6bc09188020c9ac2555a498949401ab35bb6bf76d4e0f8ee251694664df6301"}, + {file = "black-23.9.1-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:13ef033794029b85dfea8032c9d3b92b42b526f1ff4bf13b2182ce4e917f5100"}, + {file = "black-23.9.1-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:75a2dc41b183d4872d3a500d2b9c9016e67ed95738a3624f4751a0cb4818fe71"}, + {file = "black-23.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13a2e4a93bb8ca74a749b6974925c27219bb3df4d42fc45e948a5d9feb5122b7"}, + {file = "black-23.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:adc3e4442eef57f99b5590b245a328aad19c99552e0bdc7f0b04db6656debd80"}, + {file = "black-23.9.1-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:8431445bf62d2a914b541da7ab3e2b4f3bc052d2ccbf157ebad18ea126efb91f"}, + {file = "black-23.9.1-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:8fc1ddcf83f996247505db6b715294eba56ea9372e107fd54963c7553f2b6dfe"}, + {file = "black-23.9.1-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:7d30ec46de88091e4316b17ae58bbbfc12b2de05e069030f6b747dfc649ad186"}, + {file = "black-23.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:031e8c69f3d3b09e1aa471a926a1eeb0b9071f80b17689a655f7885ac9325a6f"}, + {file = "black-23.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:538efb451cd50f43aba394e9ec7ad55a37598faae3348d723b59ea8e91616300"}, + {file = "black-23.9.1-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:638619a559280de0c2aa4d76f504891c9860bb8fa214267358f0a20f27c12948"}, + {file = "black-23.9.1-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:a732b82747235e0542c03bf352c126052c0fbc458d8a239a94701175b17d4855"}, + {file = "black-23.9.1-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:cf3a4d00e4cdb6734b64bf23cd4341421e8953615cba6b3670453737a72ec204"}, + {file = "black-23.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf99f3de8b3273a8317681d8194ea222f10e0133a24a7548c73ce44ea1679377"}, + {file = "black-23.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:14f04c990259576acd093871e7e9b14918eb28f1866f91968ff5524293f9c573"}, + {file = "black-23.9.1-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:c619f063c2d68f19b2d7270f4cf3192cb81c9ec5bc5ba02df91471d0b88c4c5c"}, + {file = "black-23.9.1-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:6a3b50e4b93f43b34a9d3ef00d9b6728b4a722c997c99ab09102fd5efdb88325"}, + {file = "black-23.9.1-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:c46767e8df1b7beefb0899c4a95fb43058fa8500b6db144f4ff3ca38eb2f6393"}, + {file = "black-23.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50254ebfa56aa46a9fdd5d651f9637485068a1adf42270148cd101cdf56e0ad9"}, + {file = "black-23.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:403397c033adbc45c2bd41747da1f7fc7eaa44efbee256b53842470d4ac5a70f"}, + {file = "black-23.9.1-py3-none-any.whl", hash = "sha256:6ccd59584cc834b6d127628713e4b6b968e5f79572da66284532525a042549f9"}, + {file = "black-23.9.1.tar.gz", hash = "sha256:24b6b3ff5c6d9ea08a8888f6977eae858e1f340d7260cf56d70a49823236b62d"}, ] certifi = [ {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, @@ -1004,58 +1008,58 @@ colorama = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] coverage = [ - {file = "coverage-7.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db76a1bcb51f02b2007adacbed4c88b6dee75342c37b05d1822815eed19edee5"}, - {file = "coverage-7.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c02cfa6c36144ab334d556989406837336c1d05215a9bdf44c0bc1d1ac1cb637"}, - {file = "coverage-7.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:477c9430ad5d1b80b07f3c12f7120eef40bfbf849e9e7859e53b9c93b922d2af"}, - {file = "coverage-7.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce2ee86ca75f9f96072295c5ebb4ef2a43cecf2870b0ca5e7a1cbdd929cf67e1"}, - {file = "coverage-7.3.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68d8a0426b49c053013e631c0cdc09b952d857efa8f68121746b339912d27a12"}, - {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b3eb0c93e2ea6445b2173da48cb548364f8f65bf68f3d090404080d338e3a689"}, - {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:90b6e2f0f66750c5a1178ffa9370dec6c508a8ca5265c42fbad3ccac210a7977"}, - {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:96d7d761aea65b291a98c84e1250cd57b5b51726821a6f2f8df65db89363be51"}, - {file = "coverage-7.3.0-cp310-cp310-win32.whl", hash = "sha256:63c5b8ecbc3b3d5eb3a9d873dec60afc0cd5ff9d9f1c75981d8c31cfe4df8527"}, - {file = "coverage-7.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:97c44f4ee13bce914272589b6b41165bbb650e48fdb7bd5493a38bde8de730a1"}, - {file = "coverage-7.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:74c160285f2dfe0acf0f72d425f3e970b21b6de04157fc65adc9fd07ee44177f"}, - {file = "coverage-7.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b543302a3707245d454fc49b8ecd2c2d5982b50eb63f3535244fd79a4be0c99d"}, - {file = "coverage-7.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad0f87826c4ebd3ef484502e79b39614e9c03a5d1510cfb623f4a4a051edc6fd"}, - {file = "coverage-7.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:13c6cbbd5f31211d8fdb477f0f7b03438591bdd077054076eec362cf2207b4a7"}, - {file = "coverage-7.3.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fac440c43e9b479d1241fe9d768645e7ccec3fb65dc3a5f6e90675e75c3f3e3a"}, - {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3c9834d5e3df9d2aba0275c9f67989c590e05732439b3318fa37a725dff51e74"}, - {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4c8e31cf29b60859876474034a83f59a14381af50cbe8a9dbaadbf70adc4b214"}, - {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7a9baf8e230f9621f8e1d00c580394a0aa328fdac0df2b3f8384387c44083c0f"}, - {file = "coverage-7.3.0-cp311-cp311-win32.whl", hash = "sha256:ccc51713b5581e12f93ccb9c5e39e8b5d4b16776d584c0f5e9e4e63381356482"}, - {file = "coverage-7.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:887665f00ea4e488501ba755a0e3c2cfd6278e846ada3185f42d391ef95e7e70"}, - {file = "coverage-7.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d000a739f9feed900381605a12a61f7aaced6beae832719ae0d15058a1e81c1b"}, - {file = "coverage-7.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:59777652e245bb1e300e620ce2bef0d341945842e4eb888c23a7f1d9e143c446"}, - {file = "coverage-7.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9737bc49a9255d78da085fa04f628a310c2332b187cd49b958b0e494c125071"}, - {file = "coverage-7.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5247bab12f84a1d608213b96b8af0cbb30d090d705b6663ad794c2f2a5e5b9fe"}, - {file = "coverage-7.3.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2ac9a1de294773b9fa77447ab7e529cf4fe3910f6a0832816e5f3d538cfea9a"}, - {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:85b7335c22455ec12444cec0d600533a238d6439d8d709d545158c1208483873"}, - {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:36ce5d43a072a036f287029a55b5c6a0e9bd73db58961a273b6dc11a2c6eb9c2"}, - {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:211a4576e984f96d9fce61766ffaed0115d5dab1419e4f63d6992b480c2bd60b"}, - {file = "coverage-7.3.0-cp312-cp312-win32.whl", hash = "sha256:56afbf41fa4a7b27f6635bc4289050ac3ab7951b8a821bca46f5b024500e6321"}, - {file = "coverage-7.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:7f297e0c1ae55300ff688568b04ff26b01c13dfbf4c9d2b7d0cb688ac60df479"}, - {file = "coverage-7.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac0dec90e7de0087d3d95fa0533e1d2d722dcc008bc7b60e1143402a04c117c1"}, - {file = "coverage-7.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:438856d3f8f1e27f8e79b5410ae56650732a0dcfa94e756df88c7e2d24851fcd"}, - {file = "coverage-7.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1084393c6bda8875c05e04fce5cfe1301a425f758eb012f010eab586f1f3905e"}, - {file = "coverage-7.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49ab200acf891e3dde19e5aa4b0f35d12d8b4bd805dc0be8792270c71bd56c54"}, - {file = "coverage-7.3.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a67e6bbe756ed458646e1ef2b0778591ed4d1fcd4b146fc3ba2feb1a7afd4254"}, - {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8f39c49faf5344af36042b293ce05c0d9004270d811c7080610b3e713251c9b0"}, - {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7df91fb24c2edaabec4e0eee512ff3bc6ec20eb8dccac2e77001c1fe516c0c84"}, - {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:34f9f0763d5fa3035a315b69b428fe9c34d4fc2f615262d6be3d3bf3882fb985"}, - {file = "coverage-7.3.0-cp38-cp38-win32.whl", hash = "sha256:bac329371d4c0d456e8d5f38a9b0816b446581b5f278474e416ea0c68c47dcd9"}, - {file = "coverage-7.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:b859128a093f135b556b4765658d5d2e758e1fae3e7cc2f8c10f26fe7005e543"}, - {file = "coverage-7.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fc0ed8d310afe013db1eedd37176d0839dc66c96bcfcce8f6607a73ffea2d6ba"}, - {file = "coverage-7.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61260ec93f99f2c2d93d264b564ba912bec502f679793c56f678ba5251f0393"}, - {file = "coverage-7.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97af9554a799bd7c58c0179cc8dbf14aa7ab50e1fd5fa73f90b9b7215874ba28"}, - {file = "coverage-7.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3558e5b574d62f9c46b76120a5c7c16c4612dc2644c3d48a9f4064a705eaee95"}, - {file = "coverage-7.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37d5576d35fcb765fca05654f66aa71e2808d4237d026e64ac8b397ffa66a56a"}, - {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:07ea61bcb179f8f05ffd804d2732b09d23a1238642bf7e51dad62082b5019b34"}, - {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:80501d1b2270d7e8daf1b64b895745c3e234289e00d5f0e30923e706f110334e"}, - {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4eddd3153d02204f22aef0825409091a91bf2a20bce06fe0f638f5c19a85de54"}, - {file = "coverage-7.3.0-cp39-cp39-win32.whl", hash = "sha256:2d22172f938455c156e9af2612650f26cceea47dc86ca048fa4e0b2d21646ad3"}, - {file = "coverage-7.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:60f64e2007c9144375dd0f480a54d6070f00bb1a28f65c408370544091c9bc9e"}, - {file = "coverage-7.3.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:5492a6ce3bdb15c6ad66cb68a0244854d9917478877a25671d70378bdc8562d0"}, - {file = "coverage-7.3.0.tar.gz", hash = "sha256:49dbb19cdcafc130f597d9e04a29d0a032ceedf729e41b181f51cd170e6ee865"}, + {file = "coverage-7.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cd0f7429ecfd1ff597389907045ff209c8fdb5b013d38cfa7c60728cb484b6e3"}, + {file = "coverage-7.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:966f10df9b2b2115da87f50f6a248e313c72a668248be1b9060ce935c871f276"}, + {file = "coverage-7.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0575c37e207bb9b98b6cf72fdaaa18ac909fb3d153083400c2d48e2e6d28bd8e"}, + {file = "coverage-7.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:245c5a99254e83875c7fed8b8b2536f040997a9b76ac4c1da5bff398c06e860f"}, + {file = "coverage-7.3.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c96dd7798d83b960afc6c1feb9e5af537fc4908852ef025600374ff1a017392"}, + {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:de30c1aa80f30af0f6b2058a91505ea6e36d6535d437520067f525f7df123887"}, + {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:50dd1e2dd13dbbd856ffef69196781edff26c800a74f070d3b3e3389cab2600d"}, + {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9c0c19f70d30219113b18fe07e372b244fb2a773d4afde29d5a2f7930765136"}, + {file = "coverage-7.3.1-cp310-cp310-win32.whl", hash = "sha256:770f143980cc16eb601ccfd571846e89a5fe4c03b4193f2e485268f224ab602f"}, + {file = "coverage-7.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:cdd088c00c39a27cfa5329349cc763a48761fdc785879220d54eb785c8a38520"}, + {file = "coverage-7.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:74bb470399dc1989b535cb41f5ca7ab2af561e40def22d7e188e0a445e7639e3"}, + {file = "coverage-7.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:025ded371f1ca280c035d91b43252adbb04d2aea4c7105252d3cbc227f03b375"}, + {file = "coverage-7.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6191b3a6ad3e09b6cfd75b45c6aeeffe7e3b0ad46b268345d159b8df8d835f9"}, + {file = "coverage-7.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7eb0b188f30e41ddd659a529e385470aa6782f3b412f860ce22b2491c89b8593"}, + {file = "coverage-7.3.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75c8f0df9dfd8ff745bccff75867d63ef336e57cc22b2908ee725cc552689ec8"}, + {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7eb3cd48d54b9bd0e73026dedce44773214064be93611deab0b6a43158c3d5a0"}, + {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ac3c5b7e75acac31e490b7851595212ed951889918d398b7afa12736c85e13ce"}, + {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5b4ee7080878077af0afa7238df1b967f00dc10763f6e1b66f5cced4abebb0a3"}, + {file = "coverage-7.3.1-cp311-cp311-win32.whl", hash = "sha256:229c0dd2ccf956bf5aeede7e3131ca48b65beacde2029f0361b54bf93d36f45a"}, + {file = "coverage-7.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:c6f55d38818ca9596dc9019eae19a47410d5322408140d9a0076001a3dcb938c"}, + {file = "coverage-7.3.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5289490dd1c3bb86de4730a92261ae66ea8d44b79ed3cc26464f4c2cde581fbc"}, + {file = "coverage-7.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca833941ec701fda15414be400c3259479bfde7ae6d806b69e63b3dc423b1832"}, + {file = "coverage-7.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd694e19c031733e446c8024dedd12a00cda87e1c10bd7b8539a87963685e969"}, + {file = "coverage-7.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aab8e9464c00da5cb9c536150b7fbcd8850d376d1151741dd0d16dfe1ba4fd26"}, + {file = "coverage-7.3.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87d38444efffd5b056fcc026c1e8d862191881143c3aa80bb11fcf9dca9ae204"}, + {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8a07b692129b8a14ad7a37941a3029c291254feb7a4237f245cfae2de78de037"}, + {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2829c65c8faaf55b868ed7af3c7477b76b1c6ebeee99a28f59a2cb5907a45760"}, + {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1f111a7d85658ea52ffad7084088277135ec5f368457275fc57f11cebb15607f"}, + {file = "coverage-7.3.1-cp312-cp312-win32.whl", hash = "sha256:c397c70cd20f6df7d2a52283857af622d5f23300c4ca8e5bd8c7a543825baa5a"}, + {file = "coverage-7.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:5ae4c6da8b3d123500f9525b50bf0168023313963e0e2e814badf9000dd6ef92"}, + {file = "coverage-7.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca70466ca3a17460e8fc9cea7123c8cbef5ada4be3140a1ef8f7b63f2f37108f"}, + {file = "coverage-7.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f2781fd3cabc28278dc982a352f50c81c09a1a500cc2086dc4249853ea96b981"}, + {file = "coverage-7.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6407424621f40205bbe6325686417e5e552f6b2dba3535dd1f90afc88a61d465"}, + {file = "coverage-7.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:04312b036580ec505f2b77cbbdfb15137d5efdfade09156961f5277149f5e344"}, + {file = "coverage-7.3.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac9ad38204887349853d7c313f53a7b1c210ce138c73859e925bc4e5d8fc18e7"}, + {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:53669b79f3d599da95a0afbef039ac0fadbb236532feb042c534fbb81b1a4e40"}, + {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:614f1f98b84eb256e4f35e726bfe5ca82349f8dfa576faabf8a49ca09e630086"}, + {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f1a317fdf5c122ad642db8a97964733ab7c3cf6009e1a8ae8821089993f175ff"}, + {file = "coverage-7.3.1-cp38-cp38-win32.whl", hash = "sha256:defbbb51121189722420a208957e26e49809feafca6afeef325df66c39c4fdb3"}, + {file = "coverage-7.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:f4f456590eefb6e1b3c9ea6328c1e9fa0f1006e7481179d749b3376fc793478e"}, + {file = "coverage-7.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f12d8b11a54f32688b165fd1a788c408f927b0960984b899be7e4c190ae758f1"}, + {file = "coverage-7.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f09195dda68d94a53123883de75bb97b0e35f5f6f9f3aa5bf6e496da718f0cb6"}, + {file = "coverage-7.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6601a60318f9c3945be6ea0f2a80571f4299b6801716f8a6e4846892737ebe4"}, + {file = "coverage-7.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07d156269718670d00a3b06db2288b48527fc5f36859425ff7cec07c6b367745"}, + {file = "coverage-7.3.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:636a8ac0b044cfeccae76a36f3b18264edcc810a76a49884b96dd744613ec0b7"}, + {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5d991e13ad2ed3aced177f524e4d670f304c8233edad3210e02c465351f785a0"}, + {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:586649ada7cf139445da386ab6f8ef00e6172f11a939fc3b2b7e7c9082052fa0"}, + {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4aba512a15a3e1e4fdbfed2f5392ec221434a614cc68100ca99dcad7af29f3f8"}, + {file = "coverage-7.3.1-cp39-cp39-win32.whl", hash = "sha256:6bc6f3f4692d806831c136c5acad5ccedd0262aa44c087c46b7101c77e139140"}, + {file = "coverage-7.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:553d7094cb27db58ea91332e8b5681bac107e7242c23f7629ab1316ee73c4981"}, + {file = "coverage-7.3.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:220eb51f5fb38dfdb7e5d54284ca4d0cd70ddac047d750111a68ab1798945194"}, + {file = "coverage-7.3.1.tar.gz", hash = "sha256:6cb7fe1581deb67b782c153136541e20901aa312ceedaf1467dcb35255787952"}, ] deprecation = [ {file = "deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a"}, @@ -1090,51 +1094,51 @@ grpc-stubs = [ {file = "grpc_stubs-1.53.0.2-py3-none-any.whl", hash = "sha256:f7ed97a001f2b423c7e7249946ea2bf4a41843a081d693e6cc329df587d61050"}, ] grpcio = [ - {file = "grpcio-1.57.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:092fa155b945015754bdf988be47793c377b52b88d546e45c6a9f9579ac7f7b6"}, - {file = "grpcio-1.57.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:2f7349786da979a94690cc5c2b804cab4e8774a3cf59be40d037c4342c906649"}, - {file = "grpcio-1.57.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:82640e57fb86ea1d71ea9ab54f7e942502cf98a429a200b2e743d8672171734f"}, - {file = "grpcio-1.57.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40b72effd4c789de94ce1be2b5f88d7b9b5f7379fe9645f198854112a6567d9a"}, - {file = "grpcio-1.57.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f708a6a17868ad8bf586598bee69abded4996b18adf26fd2d91191383b79019"}, - {file = "grpcio-1.57.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:60fe15288a0a65d5c1cb5b4a62b1850d07336e3ba728257a810317be14f0c527"}, - {file = "grpcio-1.57.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6907b1cf8bb29b058081d2aad677b15757a44ef2d4d8d9130271d2ad5e33efca"}, - {file = "grpcio-1.57.0-cp310-cp310-win32.whl", hash = "sha256:57b183e8b252825c4dd29114d6c13559be95387aafc10a7be645462a0fc98bbb"}, - {file = "grpcio-1.57.0-cp310-cp310-win_amd64.whl", hash = "sha256:7b400807fa749a9eb286e2cd893e501b110b4d356a218426cb9c825a0474ca56"}, - {file = "grpcio-1.57.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:c6ebecfb7a31385393203eb04ed8b6a08f5002f53df3d59e5e795edb80999652"}, - {file = "grpcio-1.57.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:00258cbe3f5188629828363ae8ff78477ce976a6f63fb2bb5e90088396faa82e"}, - {file = "grpcio-1.57.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:23e7d8849a0e58b806253fd206ac105b328171e01b8f18c7d5922274958cc87e"}, - {file = "grpcio-1.57.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5371bcd861e679d63b8274f73ac281751d34bd54eccdbfcd6aa00e692a82cd7b"}, - {file = "grpcio-1.57.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aed90d93b731929e742967e236f842a4a2174dc5db077c8f9ad2c5996f89f63e"}, - {file = "grpcio-1.57.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fe752639919aad9ffb0dee0d87f29a6467d1ef764f13c4644d212a9a853a078d"}, - {file = "grpcio-1.57.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fada6b07ec4f0befe05218181f4b85176f11d531911b64c715d1875c4736d73a"}, - {file = "grpcio-1.57.0-cp311-cp311-win32.whl", hash = "sha256:bb396952cfa7ad2f01061fbc7dc1ad91dd9d69243bcb8110cf4e36924785a0fe"}, - {file = "grpcio-1.57.0-cp311-cp311-win_amd64.whl", hash = "sha256:e503cb45ed12b924b5b988ba9576dc9949b2f5283b8e33b21dcb6be74a7c58d0"}, - {file = "grpcio-1.57.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:fd173b4cf02b20f60860dc2ffe30115c18972d7d6d2d69df97ac38dee03be5bf"}, - {file = "grpcio-1.57.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:d7f8df114d6b4cf5a916b98389aeaf1e3132035420a88beea4e3d977e5f267a5"}, - {file = "grpcio-1.57.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:76c44efa4ede1f42a9d5b2fed1fe9377e73a109bef8675fb0728eb80b0b8e8f2"}, - {file = "grpcio-1.57.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4faea2cfdf762a664ab90589b66f416274887641ae17817de510b8178356bf73"}, - {file = "grpcio-1.57.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c60b83c43faeb6d0a9831f0351d7787a0753f5087cc6fa218d78fdf38e5acef0"}, - {file = "grpcio-1.57.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b363bbb5253e5f9c23d8a0a034dfdf1b7c9e7f12e602fc788c435171e96daccc"}, - {file = "grpcio-1.57.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:f1fb0fd4a1e9b11ac21c30c169d169ef434c6e9344ee0ab27cfa6f605f6387b2"}, - {file = "grpcio-1.57.0-cp37-cp37m-win_amd64.whl", hash = "sha256:34950353539e7d93f61c6796a007c705d663f3be41166358e3d88c45760c7d98"}, - {file = "grpcio-1.57.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:871f9999e0211f9551f368612460442a5436d9444606184652117d6a688c9f51"}, - {file = "grpcio-1.57.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:a8a8e560e8dbbdf29288872e91efd22af71e88b0e5736b0daf7773c1fecd99f0"}, - {file = "grpcio-1.57.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:2313b124e475aa9017a9844bdc5eafb2d5abdda9d456af16fc4535408c7d6da6"}, - {file = "grpcio-1.57.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4098b6b638d9e0ca839a81656a2fd4bc26c9486ea707e8b1437d6f9d61c3941"}, - {file = "grpcio-1.57.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e5b58e32ae14658085c16986d11e99abd002ddbf51c8daae8a0671fffb3467f"}, - {file = "grpcio-1.57.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0f80bf37f09e1caba6a8063e56e2b87fa335add314cf2b78ebf7cb45aa7e3d06"}, - {file = "grpcio-1.57.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5b7a4ce8f862fe32b2a10b57752cf3169f5fe2915acfe7e6a1e155db3da99e79"}, - {file = "grpcio-1.57.0-cp38-cp38-win32.whl", hash = "sha256:9338bacf172e942e62e5889b6364e56657fbf8ac68062e8b25c48843e7b202bb"}, - {file = "grpcio-1.57.0-cp38-cp38-win_amd64.whl", hash = "sha256:e1cb52fa2d67d7f7fab310b600f22ce1ff04d562d46e9e0ac3e3403c2bb4cc16"}, - {file = "grpcio-1.57.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:fee387d2fab144e8a34e0e9c5ca0f45c9376b99de45628265cfa9886b1dbe62b"}, - {file = "grpcio-1.57.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:b53333627283e7241fcc217323f225c37783b5f0472316edcaa4479a213abfa6"}, - {file = "grpcio-1.57.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:f19ac6ac0a256cf77d3cc926ef0b4e64a9725cc612f97228cd5dc4bd9dbab03b"}, - {file = "grpcio-1.57.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3fdf04e402f12e1de8074458549337febb3b45f21076cc02ef4ff786aff687e"}, - {file = "grpcio-1.57.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5613a2fecc82f95d6c51d15b9a72705553aa0d7c932fad7aed7afb51dc982ee5"}, - {file = "grpcio-1.57.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b670c2faa92124b7397b42303e4d8eb64a4cd0b7a77e35a9e865a55d61c57ef9"}, - {file = "grpcio-1.57.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7a635589201b18510ff988161b7b573f50c6a48fae9cb567657920ca82022b37"}, - {file = "grpcio-1.57.0-cp39-cp39-win32.whl", hash = "sha256:d78d8b86fcdfa1e4c21f8896614b6cc7ee01a2a758ec0c4382d662f2a62cf766"}, - {file = "grpcio-1.57.0-cp39-cp39-win_amd64.whl", hash = "sha256:20ec6fc4ad47d1b6e12deec5045ec3cd5402d9a1597f738263e98f490fe07056"}, - {file = "grpcio-1.57.0.tar.gz", hash = "sha256:4b089f7ad1eb00a104078bab8015b0ed0ebcb3b589e527ab009c53893fd4e613"}, + {file = "grpcio-1.58.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:3e6bebf1dfdbeb22afd95650e4f019219fef3ab86d3fca8ebade52e4bc39389a"}, + {file = "grpcio-1.58.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:cde11577d5b6fd73a00e6bfa3cf5f428f3f33c2d2878982369b5372bbc4acc60"}, + {file = "grpcio-1.58.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:a2d67ff99e70e86b2be46c1017ae40b4840d09467d5455b2708de6d4c127e143"}, + {file = "grpcio-1.58.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ed979b273a81de36fc9c6716d9fb09dd3443efa18dcc8652501df11da9583e9"}, + {file = "grpcio-1.58.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:458899d2ebd55d5ca2350fd3826dfd8fcb11fe0f79828ae75e2b1e6051d50a29"}, + {file = "grpcio-1.58.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bc7ffef430b80345729ff0a6825e9d96ac87efe39216e87ac58c6c4ef400de93"}, + {file = "grpcio-1.58.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5b23d75e5173faa3d1296a7bedffb25afd2fddb607ef292dfc651490c7b53c3d"}, + {file = "grpcio-1.58.0-cp310-cp310-win32.whl", hash = "sha256:fad9295fe02455d4f158ad72c90ef8b4bcaadfdb5efb5795f7ab0786ad67dd58"}, + {file = "grpcio-1.58.0-cp310-cp310-win_amd64.whl", hash = "sha256:bc325fed4d074367bebd465a20763586e5e1ed5b943e9d8bc7c162b1f44fd602"}, + {file = "grpcio-1.58.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:652978551af02373a5a313e07bfef368f406b5929cf2d50fa7e4027f913dbdb4"}, + {file = "grpcio-1.58.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:9f13a171281ebb4d7b1ba9f06574bce2455dcd3f2f6d1fbe0fd0d84615c74045"}, + {file = "grpcio-1.58.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:8774219e21b05f750eef8adc416e9431cf31b98f6ce9def288e4cea1548cbd22"}, + {file = "grpcio-1.58.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09206106848462763f7f273ca93d2d2d4d26cab475089e0de830bb76be04e9e8"}, + {file = "grpcio-1.58.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62831d5e251dd7561d9d9e83a0b8655084b2a1f8ea91e4bd6b3cedfefd32c9d2"}, + {file = "grpcio-1.58.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:212f38c6a156862098f6bdc9a79bf850760a751d259d8f8f249fc6d645105855"}, + {file = "grpcio-1.58.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4b12754af201bb993e6e2efd7812085ddaaef21d0a6f0ff128b97de1ef55aa4a"}, + {file = "grpcio-1.58.0-cp311-cp311-win32.whl", hash = "sha256:3886b4d56bd4afeac518dbc05933926198aa967a7d1d237a318e6fbc47141577"}, + {file = "grpcio-1.58.0-cp311-cp311-win_amd64.whl", hash = "sha256:002f228d197fea12797a14e152447044e14fb4fdb2eb5d6cfa496f29ddbf79ef"}, + {file = "grpcio-1.58.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:b5e8db0aff0a4819946215f156bd722b6f6c8320eb8419567ffc74850c9fd205"}, + {file = "grpcio-1.58.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:201e550b7e2ede113b63e718e7ece93cef5b0fbf3c45e8fe4541a5a4305acd15"}, + {file = "grpcio-1.58.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:d79b660681eb9bc66cc7cbf78d1b1b9e335ee56f6ea1755d34a31108b80bd3c8"}, + {file = "grpcio-1.58.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ef8d4a76d2c7d8065aba829f8d0bc0055495c998dce1964ca5b302d02514fb3"}, + {file = "grpcio-1.58.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cba491c638c76d3dc6c191d9c75041ca5b8f5c6de4b8327ecdcab527f130bb4"}, + {file = "grpcio-1.58.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6801ff6652ecd2aae08ef994a3e49ff53de29e69e9cd0fd604a79ae4e545a95c"}, + {file = "grpcio-1.58.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:24edec346e69e672daf12b2c88e95c6f737f3792d08866101d8c5f34370c54fd"}, + {file = "grpcio-1.58.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7e473a7abad9af48e3ab5f3b5d237d18208024d28ead65a459bd720401bd2f8f"}, + {file = "grpcio-1.58.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:4891bbb4bba58acd1d620759b3be11245bfe715eb67a4864c8937b855b7ed7fa"}, + {file = "grpcio-1.58.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:e9f995a8a421405958ff30599b4d0eec244f28edc760de82f0412c71c61763d2"}, + {file = "grpcio-1.58.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:2f85f87e2f087d9f632c085b37440a3169fda9cdde80cb84057c2fc292f8cbdf"}, + {file = "grpcio-1.58.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb6b92036ff312d5b4182fa72e8735d17aceca74d0d908a7f08e375456f03e07"}, + {file = "grpcio-1.58.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d81c2b2b24c32139dd2536972f1060678c6b9fbd106842a9fcdecf07b233eccd"}, + {file = "grpcio-1.58.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:fbcecb6aedd5c1891db1d70efbfbdc126c986645b5dd616a045c07d6bd2dfa86"}, + {file = "grpcio-1.58.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92ae871a902cf19833328bd6498ec007b265aabf2fda845ab5bd10abcaf4c8c6"}, + {file = "grpcio-1.58.0-cp38-cp38-win32.whl", hash = "sha256:dc72e04620d49d3007771c0e0348deb23ca341c0245d610605dddb4ac65a37cb"}, + {file = "grpcio-1.58.0-cp38-cp38-win_amd64.whl", hash = "sha256:1c1c5238c6072470c7f1614bf7c774ffde6b346a100521de9ce791d1e4453afe"}, + {file = "grpcio-1.58.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:fe643af248442221db027da43ed43e53b73e11f40c9043738de9a2b4b6ca7697"}, + {file = "grpcio-1.58.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:128eb1f8e70676d05b1b0c8e6600320fc222b3f8c985a92224248b1367122188"}, + {file = "grpcio-1.58.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:039003a5e0ae7d41c86c768ef8b3ee2c558aa0a23cf04bf3c23567f37befa092"}, + {file = "grpcio-1.58.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f061722cad3f9aabb3fbb27f3484ec9d4667b7328d1a7800c3c691a98f16bb0"}, + {file = "grpcio-1.58.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba0af11938acf8cd4cf815c46156bcde36fa5850518120920d52620cc3ec1830"}, + {file = "grpcio-1.58.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d4cef77ad2fed42b1ba9143465856d7e737279854e444925d5ba45fc1f3ba727"}, + {file = "grpcio-1.58.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:24765a627eb4d9288ace32d5104161c3654128fe27f2808ecd6e9b0cfa7fc8b9"}, + {file = "grpcio-1.58.0-cp39-cp39-win32.whl", hash = "sha256:f0241f7eb0d2303a545136c59bc565a35c4fc3b924ccbd69cb482f4828d6f31c"}, + {file = "grpcio-1.58.0-cp39-cp39-win_amd64.whl", hash = "sha256:dcfba7befe3a55dab6fe1eb7fc9359dc0c7f7272b30a70ae0af5d5b063842f28"}, + {file = "grpcio-1.58.0.tar.gz", hash = "sha256:532410c51ccd851b706d1fbc00a87be0f5312bd6f8e5dbf89d4e99c7f79d7499"}, ] grpcio-tools = [ {file = "grpcio-tools-1.49.1.tar.gz", hash = "sha256:84cc64e5b46bad43d5d7bd2fd772b656eba0366961187a847e908e2cb735db91"}, @@ -1270,6 +1274,16 @@ markupsafe = [ {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, @@ -1367,23 +1381,23 @@ platformdirs = [ {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, ] pluggy = [ - {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, - {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, + {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, + {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, ] protobuf = [ - {file = "protobuf-4.24.1-cp310-abi3-win32.whl", hash = "sha256:d414199ca605eeb498adc4d2ba82aedc0379dca4a7c364ff9bc9a179aa28e71b"}, - {file = "protobuf-4.24.1-cp310-abi3-win_amd64.whl", hash = "sha256:5906c5e79ff50fe38b2d49d37db5874e3c8010826f2362f79996d83128a8ed9b"}, - {file = "protobuf-4.24.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:970c701ee16788d74f3de20938520d7a0aebc7e4fff37096a48804c80d2908cf"}, - {file = "protobuf-4.24.1-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:fc361148e902949dcb953bbcb148c99fe8f8854291ad01107e4120361849fd0e"}, - {file = "protobuf-4.24.1-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:5d32363d14aca6e5c9e9d5918ad8fb65b091b6df66740ae9de50ac3916055e43"}, - {file = "protobuf-4.24.1-cp37-cp37m-win32.whl", hash = "sha256:df015c47d6855b8efa0b9be706c70bf7f050a4d5ac6d37fb043fbd95157a0e25"}, - {file = "protobuf-4.24.1-cp37-cp37m-win_amd64.whl", hash = "sha256:d4af4fd9e9418e819be30f8df2a16e72fbad546a7576ac7f3653be92a6966d30"}, - {file = "protobuf-4.24.1-cp38-cp38-win32.whl", hash = "sha256:302e8752c760549ed4c7a508abc86b25d46553c81989343782809e1a062a2ef9"}, - {file = "protobuf-4.24.1-cp38-cp38-win_amd64.whl", hash = "sha256:06437f0d4bb0d5f29e3d392aba69600188d4be5ad1e0a3370e581a9bf75a3081"}, - {file = "protobuf-4.24.1-cp39-cp39-win32.whl", hash = "sha256:0b2b224e9541fe9f046dd7317d05f08769c332b7e4c54d93c7f0f372dedb0b1a"}, - {file = "protobuf-4.24.1-cp39-cp39-win_amd64.whl", hash = "sha256:bd39b9094a4cc003a1f911b847ab379f89059f478c0b611ba1215053e295132e"}, - {file = "protobuf-4.24.1-py3-none-any.whl", hash = "sha256:55dd644adc27d2a624339332755fe077c7f26971045b469ebb9732a69ce1f2ca"}, - {file = "protobuf-4.24.1.tar.gz", hash = "sha256:44837a5ed9c9418ad5d502f89f28ba102e9cd172b6668bc813f21716f9273348"}, + {file = "protobuf-4.24.3-cp310-abi3-win32.whl", hash = "sha256:20651f11b6adc70c0f29efbe8f4a94a74caf61b6200472a9aea6e19898f9fcf4"}, + {file = "protobuf-4.24.3-cp310-abi3-win_amd64.whl", hash = "sha256:3d42e9e4796a811478c783ef63dc85b5a104b44aaaca85d4864d5b886e4b05e3"}, + {file = "protobuf-4.24.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:6e514e8af0045be2b56e56ae1bb14f43ce7ffa0f68b1c793670ccbe2c4fc7d2b"}, + {file = "protobuf-4.24.3-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:ba53c2f04798a326774f0e53b9c759eaef4f6a568ea7072ec6629851c8435959"}, + {file = "protobuf-4.24.3-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:f6ccbcf027761a2978c1406070c3788f6de4a4b2cc20800cc03d52df716ad675"}, + {file = "protobuf-4.24.3-cp37-cp37m-win32.whl", hash = "sha256:1b182c7181a2891e8f7f3a1b5242e4ec54d1f42582485a896e4de81aa17540c2"}, + {file = "protobuf-4.24.3-cp37-cp37m-win_amd64.whl", hash = "sha256:b0271a701e6782880d65a308ba42bc43874dabd1a0a0f41f72d2dac3b57f8e76"}, + {file = "protobuf-4.24.3-cp38-cp38-win32.whl", hash = "sha256:e29d79c913f17a60cf17c626f1041e5288e9885c8579832580209de8b75f2a52"}, + {file = "protobuf-4.24.3-cp38-cp38-win_amd64.whl", hash = "sha256:067f750169bc644da2e1ef18c785e85071b7c296f14ac53e0900e605da588719"}, + {file = "protobuf-4.24.3-cp39-cp39-win32.whl", hash = "sha256:2da777d34b4f4f7613cdf85c70eb9a90b1fbef9d36ae4a0ccfe014b0b07906f1"}, + {file = "protobuf-4.24.3-cp39-cp39-win_amd64.whl", hash = "sha256:f631bb982c5478e0c1c70eab383af74a84be66945ebf5dd6b06fc90079668d0b"}, + {file = "protobuf-4.24.3-py3-none-any.whl", hash = "sha256:f6f8dc65625dadaad0c8545319c2e2f0424fede988368893ca3844261342c11a"}, + {file = "protobuf-4.24.3.tar.gz", hash = "sha256:12e9ad2ec079b833176d2921be2cb24281fa591f0b119b208b788adc48c2561d"}, ] pycodestyle = [ {file = "pycodestyle-2.9.1-py2.py3-none-any.whl", hash = "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b"}, @@ -1402,8 +1416,8 @@ pygments = [ {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, ] pytest = [ - {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, - {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, + {file = "pytest-7.4.2-py3-none-any.whl", hash = "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002"}, + {file = "pytest-7.4.2.tar.gz", hash = "sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069"}, ] pytest-cov = [ {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, @@ -1414,8 +1428,8 @@ pytest-mock = [ {file = "pytest_mock-3.11.1-py3-none-any.whl", hash = "sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39"}, ] pytz = [ - {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, - {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, ] pywin32 = [ {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, @@ -1439,6 +1453,7 @@ pyyaml = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -1446,8 +1461,15 @@ pyyaml = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -1464,6 +1486,7 @@ pyyaml = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -1471,6 +1494,7 @@ pyyaml = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -1480,24 +1504,24 @@ requests = [ {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, ] setuptools = [ - {file = "setuptools-68.1.2-py3-none-any.whl", hash = "sha256:3d8083eed2d13afc9426f227b24fd1659489ec107c0e86cec2ffdde5c92e790b"}, - {file = "setuptools-68.1.2.tar.gz", hash = "sha256:3d4dfa6d95f1b101d695a6160a7626e15583af71a5f52176efa5d39a054d475d"}, + {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, + {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, ] snowballstemmer = [ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] sphinx = [ - {file = "Sphinx-5.3.0.tar.gz", hash = "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"}, - {file = "sphinx-5.3.0-py3-none-any.whl", hash = "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d"}, + {file = "sphinx-7.1.2-py3-none-any.whl", hash = "sha256:d170a81825b2fcacb6dfd5a0d7f578a053e45d3f2b153fecc948c37344eb4cbe"}, + {file = "sphinx-7.1.2.tar.gz", hash = "sha256:780f4d32f1d7d1126576e0e5ecc19dc32ab76cd24e950228dcf7b1f6d3d9e22f"}, ] sphinx-autoapi = [ - {file = "sphinx-autoapi-1.9.0.tar.gz", hash = "sha256:c897ea337df16ad0cde307cbdfe2bece207788dde1587fa4fc8b857d1fc5dcba"}, - {file = "sphinx_autoapi-1.9.0-py2.py3-none-any.whl", hash = "sha256:d217953273b359b699d8cb81a5a72985a3e6e15cfe3f703d9a3c201ffc30849b"}, + {file = "sphinx-autoapi-2.1.1.tar.gz", hash = "sha256:fbadb96e79020d6b0ec45d888517bf816d6b587a2d340fbe1ec31135e300a6c8"}, + {file = "sphinx_autoapi-2.1.1-py2.py3-none-any.whl", hash = "sha256:d8da890477bd18e3327cafdead9d5a44a7d798476c6fa32492100e288250a5a3"}, ] sphinx-click = [ - {file = "sphinx-click-4.4.0.tar.gz", hash = "sha256:cc67692bd28f482c7f01531c61b64e9d2f069bfcf3d24cbbb51d4a84a749fa48"}, - {file = "sphinx_click-4.4.0-py3-none-any.whl", hash = "sha256:2821c10a68fc9ee6ce7c92fad26540d8d8c8f45e6d7258f0e4fb7529ae8fab49"}, + {file = "sphinx-click-5.0.1.tar.gz", hash = "sha256:fcc7df15e56e3ff17ebf446cdd316c2eb79580b37c49579fba11e5468802ef25"}, + {file = "sphinx_click-5.0.1-py3-none-any.whl", hash = "sha256:31836ca22f746d3c26cbfdfe0c58edf0bca5783731a0b2e25bb6d59800bb75a1"}, ] sphinx-rtd-theme = [ {file = "sphinx_rtd_theme-1.3.0-py2.py3-none-any.whl", hash = "sha256:46ddef89cc2416a81ecfbeaceab1881948c014b1b6e4450b815311a89fb977b0"}, @@ -1540,8 +1564,8 @@ tomli = [ {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] tomlkit = [ - {file = "tomlkit-0.11.8-py3-none-any.whl", hash = "sha256:8c726c4c202bdb148667835f68d68780b9a003a9ec34167b6c673b38eff2a171"}, - {file = "tomlkit-0.11.8.tar.gz", hash = "sha256:9330fc7faa1db67b541b28e62018c17d20be733177d290a13b24c62d1614e0c3"}, + {file = "tomlkit-0.12.1-py3-none-any.whl", hash = "sha256:712cbd236609acc6a3e2e97253dfc52d4c2082982a88f61b640ecf0817eab899"}, + {file = "tomlkit-0.12.1.tar.gz", hash = "sha256:38e1ff8edb991273ec9f6181244a6a391ac30e9f5098e7535640ea6be97a7c86"}, ] traceloggingdynamic = [ {file = "traceloggingdynamic-1.0.0.tar.gz", hash = "sha256:09b6129438b99432733de18519017a7eed8285aeaa08c0cff6de45ac60e04b75"}, @@ -1559,12 +1583,8 @@ types-pywin32 = [ {file = "types_pywin32-306.0.0.4-py3-none-any.whl", hash = "sha256:f76a343ed6933008af85e158063963f923e54f2f461e697b2929b4178c7b77a1"}, ] typing-extensions = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, -] -unidecode = [ - {file = "Unidecode-1.3.6-py3-none-any.whl", hash = "sha256:547d7c479e4f377b430dd91ac1275d593308dce0fc464fb2ab7d41f82ec653be"}, - {file = "Unidecode-1.3.6.tar.gz", hash = "sha256:fed09cf0be8cf415b391642c2a5addfc72194407caee4f98719e40ec2a72b830"}, + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, ] urllib3 = [ {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, @@ -1648,6 +1668,6 @@ wrapt = [ {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, ] zipp = [ - {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, - {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, ] From 1fd0a191e323aa0c86637f069d738cd8401d2e7d Mon Sep 17 00:00:00 2001 From: Brad Keryan Date: Tue, 19 Sep 2023 14:20:02 -0500 Subject: [PATCH 08/14] docs: Suppress cross-reference warnings (due to aliases) --- _docs_source/conf.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/_docs_source/conf.py b/_docs_source/conf.py index d4ffa6a6f..505b00c4b 100644 --- a/_docs_source/conf.py +++ b/_docs_source/conf.py @@ -53,6 +53,13 @@ # This patterns also effect to html_static_path and html_extra_path exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] +suppress_warnings = [ + # WARNING: more than one target found for cross-reference 'MeasurementInfo': + # ni_measurementlink_service.MeasurementInfo, + # ni_measurementlink_service.measurement.info.MeasurementInfo + "ref" +] + # -- Options for HTML output ---------------------------------------------- From 5f2734d8a4d7a27d2b438621e8316724bcecf14b Mon Sep 17 00:00:00 2001 From: Brad Keryan Date: Tue, 19 Sep 2023 14:22:14 -0500 Subject: [PATCH 09/14] service: Split up NamedTuple docstrings Both the "Attributes:" section and autoapi are generating documentation for NamedTuple fields, which leads to warnings like this: WARNING: duplicate object description of ni_measurementlink_service._internal.parameter.metadata.ParameterMetadata.display_name, other instance in autoapi/ni_measurementlink_service/_internal/parameter/metadata/index, use :noindex: for one of them --- ni_measurementlink_service/_datatypeinfo.py | 25 +++--- .../_internal/parameter/metadata.py | 37 ++++---- .../session_management.py | 85 ++++++++++--------- 3 files changed, 71 insertions(+), 76 deletions(-) diff --git a/ni_measurementlink_service/_datatypeinfo.py b/ni_measurementlink_service/_datatypeinfo.py index abc56fbb1..a65e2668d 100644 --- a/ni_measurementlink_service/_datatypeinfo.py +++ b/ni_measurementlink_service/_datatypeinfo.py @@ -7,25 +7,22 @@ class DataTypeInfo(NamedTuple): - """Class that represents the information for each of the DataType enum values. - - Attributes: - grpc_field_type: Field.Kind associated with the DataType - - repeated: Whether the DataType is a repeated field - - type_specialization: Specific type when value_type - can have more than one use - - message_type (str): This is the gRPC full name of the message type. - Required when 'grpc_field_type' is Kind.TypeMessage. - Ignored for any other 'type'. - """ + """Class that represents the information for each of the DataType enum values.""" grpc_field_type: type_pb2.Field.Kind.ValueType + """Field.Kind associated with the DataType.""" + repeated: bool + """Whether the DataType is a repeated field.""" + type_specialization: TypeSpecialization = TypeSpecialization.NoType + """Specific type when value_type can have more than one use.""" + message_type: str = "" + """The gRPC full name of the message type. Required when 'grpc_field_type' is Kind.TypeMessage. + + Ignored for any other 'type'. + """ def get_type_info(data_type: DataType) -> DataTypeInfo: diff --git a/ni_measurementlink_service/_internal/parameter/metadata.py b/ni_measurementlink_service/_internal/parameter/metadata.py index be7ecabd5..2a7e4ae6b 100644 --- a/ni_measurementlink_service/_internal/parameter/metadata.py +++ b/ni_measurementlink_service/_internal/parameter/metadata.py @@ -10,33 +10,30 @@ class ParameterMetadata(NamedTuple): - """Class that represents the metadata of parameters. - - Attributes: - display_name (str): The display name of the parameter. - - type (type_pb2.Field): The datatype of the parameter - represented by the gRPC Field Enum. - - repeated (bool): Represent if the parameter is a scalar or 1D array. - - True for 1DArray and false for scalar. - - default_value (Any): The default value of the parameter. - - annotations (Dict[str,str]): Represents a set of annotations on the type. - - message_type (str): This is the gRPC full name of the message type. - Required when 'type' is Kind.TypeMessage. - Ignored for any other 'type'. - """ + """Class that represents the metadata of parameters.""" display_name: str + """The display name of the parameter.""" + type: type_pb2.Field.Kind.ValueType + """The datatype of the parameter represented by the gRPC field enum.""" + repeated: bool + """Indicates whether the parameter is a scalar or 1D array. + + True for 1D array and false for scalar.""" + default_value: Any + """The default value of the parameter.""" + annotations: Dict[str, str] + """Represents a set of annotations on the type.""" + message_type: str = "" + """The gRPC full name of the message type. + + Required when 'type' is Kind.TypeMessage. Ignored for any other 'type'. + """ def validate_default_value_type(parameter_metadata: ParameterMetadata) -> None: diff --git a/ni_measurementlink_service/session_management.py b/ni_measurementlink_service/session_management.py index 1805e220e..facb8326e 100644 --- a/ni_measurementlink_service/session_management.py +++ b/ni_measurementlink_service/session_management.py @@ -59,71 +59,72 @@ class PinMapContext(NamedTuple): - """Container for the pin map and sites. - - Attributes: - pin_map_id: The resource id of the pin map in the Pin Map service that should be used for - the call. - - sites: List of site numbers being used for the call. If None or empty, use all sites in the - pin map. - """ + """Container for the pin map and sites.""" pin_map_id: str + """The resource id of the pin map in the Pin Map service that should be used for the call.""" + sites: Optional[List[int]] + """List of site numbers being used for the call. + + If None or empty, use all sites in the pin map. + """ class ChannelMapping(NamedTuple): - """Mapping of each channel to the pin and site it is connected to. - - Attributes: - pin_or_relay_name (str): The pin or relay that is mapped to a channel. + """Mapping of each channel to the pin and site it is connected to.""" - site (int): The site on which the pin or relay is mapped to a channel. - For system pins/relays the site number is -1 as they do not belong to a specific site. + pin_or_relay_name: str + """The pin or relay that is mapped to a channel.""" - channel (str): The channel to which the pin or relay is mapped on this site. + site: int + """The site on which the pin or relay is mapped to a channel. + + For system pins/relays the site number is -1 as they do not belong to a specific site. """ - pin_or_relay_name: str - site: int channel: str + """The channel to which the pin or relay is mapped on this site.""" class SessionInformation(NamedTuple): - """Container for the session information. - - Attributes: - session_name (str): Session identifier used to identify the session in the session - management service, as well as in driver services such as grpc-device. - - resource_name (str): Resource name used to open this session in the driver. + """Container for the session information.""" - channel_list (str): Channel list used for driver initialization and measurement methods. - This field is empty for any SessionInformation returned from - Client.reserve_all_registered_sessions. + session_name: str + """Session identifier used to identify the session in the session management service, as well + as in driver services such as grpc-device. + """ - instrument_type_id (str): Instrument type ID to identify which type of instrument the - session represents. Pin maps have built in instrument definitions using the instrument - type id constants such as `INSTRUMENT_TYPE_NI_DCPOWER`. For custom instruments, the - user defined instrument type id is defined in the pin map file. + resource_name: str + """Resource name used to open this session in the driver.""" - session_exists (bool): Indicates whether the session exists in the Session Manager. This - indicates whether the session has been created. + channel_list: str + """Channel list used for driver initialization and measurement methods. - channel_mappings (Iterable[ChannelMapping]): List of site and pin/relay mappings that - correspond to each channel in the channel_list. Each item contains a mapping - for a channel in this instrument resource, in the order of the channel_list. - This field is empty for any SessionInformation returned from - Client.reserve_all_registered_sessions. + This field is empty for any SessionInformation returned from + Client.reserve_all_registered_sessions. """ - session_name: str - resource_name: str - channel_list: str instrument_type_id: str + """Instrument type ID to identify which type of instrument the session represents. + + Pin maps have built in instrument definitions using the instrument + type id constants such as `INSTRUMENT_TYPE_NI_DCPOWER`. For custom instruments, the + user defined instrument type id is defined in the pin map file. + """ + session_exists: bool + """Indicates whether the session exists in the Session Manager. + + This indicates whether the session has been created.""" + channel_mappings: Iterable[ChannelMapping] + """List of site and pin/relay mappings that correspond to each channel in the channel_list. + + Each item contains a mapping for a channel in this instrument resource, in the order of the + channel_list. This field is empty for any SessionInformation returned from + Client.reserve_all_registered_sessions. + """ def _convert_channel_mapping_from_grpc( From 0b4ef5f99a702a9b96c1cded9824a113cfb6cd51 Mon Sep 17 00:00:00 2001 From: Brad Keryan Date: Tue, 19 Sep 2023 14:38:46 -0500 Subject: [PATCH 10/14] service: Fix Sphinx "unexpected indent" errors ERROR: Unexpected indentation. WARNING: Block quote ends without a blank line; unexpected unindent. --- .../measurement/service.py | 22 ++++---- .../session_management.py | 51 +++++++------------ 2 files changed, 28 insertions(+), 45 deletions(-) diff --git a/ni_measurementlink_service/measurement/service.py b/ni_measurementlink_service/measurement/service.py index 74a83187a..584b31f35 100644 --- a/ni_measurementlink_service/measurement/service.py +++ b/ni_measurementlink_service/measurement/service.py @@ -189,18 +189,16 @@ def convert_value_to_str(value: object) -> str: def register_measurement(self, measurement_function: _F) -> _F: """Register a function as the measurement function for a measurement service. - To declare a measurement function, use this idiom: - - ``` - @measurement_service.register_measurement - @measurement_service.configuration("Configuration 1", ...) - @measurement_service.configuration("Configuration 2", ...) - @measurement_service.output("Output 1", ...) - @measurement_service.output("Output 2", ...) - def measure(configuration1, configuration2): - ... - return (output1, output2) - ``` + To declare a measurement function, use this idiom:: + + @measurement_service.register_measurement + @measurement_service.configuration("Configuration 1", ...) + @measurement_service.configuration("Configuration 2", ...) + @measurement_service.output("Output 1", ...) + @measurement_service.output("Output 2", ...) + def measure(configuration1, configuration2): + ... + return (output1, output2) See also: :func:`.configuration`, :func:`.output` """ diff --git a/ni_measurementlink_service/session_management.py b/ni_measurementlink_service/session_management.py index facb8326e..d94da2c35 100644 --- a/ni_measurementlink_service/session_management.py +++ b/ni_measurementlink_service/session_management.py @@ -274,17 +274,12 @@ def reserve_session( instrument_type_id (str): Instrument type ID for the measurement. If unspecified, reserve sessions for all instrument types connected in the registered pin map - resource. Pin maps have built in instrument definitions using the following NI - driver based instrument type ids: - "niDCPower" - "niDigitalPattern" - "niScope" - "niDMM" - "niDAQmx" - "niFGen" - "niRelayDriver" - For custom instruments the user defined instrument type id is defined in the pin - map file. + resource. + + For NI instruments, use instrument type id constants, such as INSTRUMENT_TYPE_NI_DCPOWER + or INSTRUMENT_TYPE_NI_DMM. + + For custom instruments, use the instrument type id defined in the pin map file. timeout (float): Timeout in seconds. Allowed values, 0 (non-blocking, fails immediately if resources cannot be reserved), @@ -330,17 +325,12 @@ def reserve_sessions( instrument_type_id (str): Instrument type ID for the measurement. If unspecified, reserve sessions for all instrument types connected in the registered pin map - resource. Pin maps have built in instrument definitions using the following NI - driver based instrument type ids: - "niDCPower" - "niDigitalPattern" - "niScope" - "niDMM" - "niDAQmx" - "niFGen" - "niRelayDriver" - For custom instruments the user defined instrument type id is defined in the pin - map file. + resource. + + For NI instruments, use instrument type id constants, such as INSTRUMENT_TYPE_NI_DCPOWER + or INSTRUMENT_TYPE_NI_DMM. + + For custom instruments, use the instrument type id defined in the pin map file. timeout (float): Timeout in seconds. Allowed values, 0 (non-blocking, fails immediately if resources cannot be reserved), @@ -467,17 +457,12 @@ def reserve_all_registered_sessions( Args: instrument_type_id (str): Instrument type ID for the measurement. If unspecified, reserve sessions for all instrument types connected in the registered pin map - resource. Pin maps have built in instrument definitions using the following NI - driver based instrument type ids: - "niDCPower" - "niDigitalPattern" - "niScope" - "niDMM" - "niDAQmx" - "niFGen" - "niRelayDriver" - For custom instruments the user defined instrument type id is defined in the pin - map file. + resource. + + For NI instruments, use instrument type id constants, such as INSTRUMENT_TYPE_NI_DCPOWER + or INSTRUMENT_TYPE_NI_DMM. + + For custom instruments, use the instrument type id defined in the pin map file. timeout (float): Timeout in seconds. Allowed values, 0 (non-blocking, fails immediately if resources cannot be reserved), From a865ed33d2eee476f4d6138d1b6d30ca7ec25de4 Mon Sep 17 00:00:00 2001 From: Brad Keryan Date: Tue, 19 Sep 2023 14:58:10 -0500 Subject: [PATCH 11/14] service: Fix argument indentation and some cross-references --- .../measurement/service.py | 28 ++++++++++--------- .../session_management.py | 14 +++++----- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/ni_measurementlink_service/measurement/service.py b/ni_measurementlink_service/measurement/service.py index 584b31f35..ef97cdac1 100644 --- a/ni_measurementlink_service/measurement/service.py +++ b/ni_measurementlink_service/measurement/service.py @@ -134,8 +134,8 @@ def __init__( ui_file_paths (List[Path]): List of paths to supported UIs. service_class (str): The service class from the .serviceconfig to use. - Default value is None, which will use the first service in the - .serviceconfig file. + Default value is None, which will use the first service in the + .serviceconfig file. """ if not path.exists(service_config_path): @@ -231,17 +231,19 @@ def configuration( default_value (Any): Default value of the configuration. instrument_type (Optional[str]): - Filter pins by instrument type. This is only supported when configuration type - is DataType.Pin. Pin maps have built in instrument definitions using the - NI driver based instrument type ids. These can be found as constants - in `nims.session_management`. For example, for an NI DCPower instrument - the instrument type is `nims.session_management.INSTRUMENT_TYPE_NI_DCPOWER`. - For custom instruments the user defined instrument type id is defined in the - pin map file. + Filter pins by instrument type. This is only supported when configuration type + is DataType.Pin. + + For NI instruments, use instrument type id constants defined by + :py:mod:`ni_measurementlink_service.session_management`, such as + :py:const:`~ni_measurementlink_service.session_management.INSTRUMENT_TYPE_NI_DCPOWER` + or :py:const:`~ni_measurementlink_service.session_management.INSTRUMENT_TYPE_NI_DMM`. + + For custom instruments, use the instrument type id defined in the pin map file. enum_type (Optional[SupportedEnumType]): - Defines the enum type associated with this configuration parameter. This is only - supported when configuration type is DataType.Enum or DataType.EnumArray1D. + Defines the enum type associated with this configuration parameter. This is only + supported when configuration type is DataType.Enum or DataType.EnumArray1D. Returns: Callable: Callable that takes in Any Python Function @@ -291,8 +293,8 @@ def output( type (DataType): Data type of the output. enum_type (Optional[SupportedEnumType]: - Defines the enum type associated with this configuration parameter. This is only - supported when configuration type is DataType.Enum or DataType.EnumArray1D. + Defines the enum type associated with this configuration parameter. This is only + supported when configuration type is DataType.Enum or DataType.EnumArray1D. Returns: Callable: Callable that takes in Any Python Function and diff --git a/ni_measurementlink_service/session_management.py b/ni_measurementlink_service/session_management.py index d94da2c35..812a65387 100644 --- a/ni_measurementlink_service/session_management.py +++ b/ni_measurementlink_service/session_management.py @@ -276,8 +276,8 @@ def reserve_session( reserve sessions for all instrument types connected in the registered pin map resource. - For NI instruments, use instrument type id constants, such as INSTRUMENT_TYPE_NI_DCPOWER - or INSTRUMENT_TYPE_NI_DMM. + For NI instruments, use instrument type id constants, such as + :py:const:`INSTRUMENT_TYPE_NI_DCPOWER` or :py:const:`INSTRUMENT_TYPE_NI_DMM`. For custom instruments, use the instrument type id defined in the pin map file. @@ -327,8 +327,8 @@ def reserve_sessions( reserve sessions for all instrument types connected in the registered pin map resource. - For NI instruments, use instrument type id constants, such as INSTRUMENT_TYPE_NI_DCPOWER - or INSTRUMENT_TYPE_NI_DMM. + For NI instruments, use instrument type id constants, such as + :py:const:`INSTRUMENT_TYPE_NI_DCPOWER` or :py:const:`INSTRUMENT_TYPE_NI_DMM`. For custom instruments, use the instrument type id defined in the pin map file. @@ -390,7 +390,7 @@ def register_sessions(self, session_info: Iterable[SessionInformation]) -> None: Args: session_info (Iterable[SessionInformation]): Sessions to register with the session - management service to track as the sessions are open. + management service to track as the sessions are open. Raises: Exception: If a session by the same name is already registered. @@ -459,8 +459,8 @@ def reserve_all_registered_sessions( reserve sessions for all instrument types connected in the registered pin map resource. - For NI instruments, use instrument type id constants, such as INSTRUMENT_TYPE_NI_DCPOWER - or INSTRUMENT_TYPE_NI_DMM. + For NI instruments, use instrument type id constants, such as + :py:const:`INSTRUMENT_TYPE_NI_DCPOWER` or :py:const:`INSTRUMENT_TYPE_NI_DMM`. For custom instruments, use the instrument type id defined in the pin map file. From fb8b93d5096e7c94e6f805676bc5f88eca16dd2b Mon Sep 17 00:00:00 2001 From: Brad Keryan Date: Tue, 19 Sep 2023 15:03:14 -0500 Subject: [PATCH 12/14] service: Fix lint warnings --- ni_measurementlink_service/measurement/service.py | 9 +++++---- ni_measurementlink_service/session_management.py | 10 +++++----- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/ni_measurementlink_service/measurement/service.py b/ni_measurementlink_service/measurement/service.py index ef97cdac1..2bf4ba32c 100644 --- a/ni_measurementlink_service/measurement/service.py +++ b/ni_measurementlink_service/measurement/service.py @@ -232,13 +232,14 @@ def configuration( instrument_type (Optional[str]): Filter pins by instrument type. This is only supported when configuration type - is DataType.Pin. - + is DataType.Pin. + For NI instruments, use instrument type id constants defined by :py:mod:`ni_measurementlink_service.session_management`, such as :py:const:`~ni_measurementlink_service.session_management.INSTRUMENT_TYPE_NI_DCPOWER` - or :py:const:`~ni_measurementlink_service.session_management.INSTRUMENT_TYPE_NI_DMM`. - + or + :py:const:`~ni_measurementlink_service.session_management.INSTRUMENT_TYPE_NI_DMM`. + For custom instruments, use the instrument type id defined in the pin map file. enum_type (Optional[SupportedEnumType]): diff --git a/ni_measurementlink_service/session_management.py b/ni_measurementlink_service/session_management.py index 812a65387..759d9e922 100644 --- a/ni_measurementlink_service/session_management.py +++ b/ni_measurementlink_service/session_management.py @@ -275,10 +275,10 @@ def reserve_session( instrument_type_id (str): Instrument type ID for the measurement. If unspecified, reserve sessions for all instrument types connected in the registered pin map resource. - + For NI instruments, use instrument type id constants, such as :py:const:`INSTRUMENT_TYPE_NI_DCPOWER` or :py:const:`INSTRUMENT_TYPE_NI_DMM`. - + For custom instruments, use the instrument type id defined in the pin map file. timeout (float): Timeout in seconds. Allowed values, @@ -329,7 +329,7 @@ def reserve_sessions( For NI instruments, use instrument type id constants, such as :py:const:`INSTRUMENT_TYPE_NI_DCPOWER` or :py:const:`INSTRUMENT_TYPE_NI_DMM`. - + For custom instruments, use the instrument type id defined in the pin map file. timeout (float): Timeout in seconds. Allowed values, @@ -458,10 +458,10 @@ def reserve_all_registered_sessions( instrument_type_id (str): Instrument type ID for the measurement. If unspecified, reserve sessions for all instrument types connected in the registered pin map resource. - + For NI instruments, use instrument type id constants, such as :py:const:`INSTRUMENT_TYPE_NI_DCPOWER` or :py:const:`INSTRUMENT_TYPE_NI_DMM`. - + For custom instruments, use the instrument type id defined in the pin map file. timeout (float): Timeout in seconds. Allowed values, From 8f0dbfe6b4534aa5fe30698e431552d278e24ca3 Mon Sep 17 00:00:00 2001 From: Brad Keryan Date: Wed, 20 Sep 2023 13:47:40 -0500 Subject: [PATCH 13/14] service: Fix some cross-references --- _docs_source/conf.py | 26 +++++++++++++++------ ni_measurementlink_service/_datatypeinfo.py | 15 ++++++------ 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/_docs_source/conf.py b/_docs_source/conf.py index 505b00c4b..df0d0a19e 100644 --- a/_docs_source/conf.py +++ b/_docs_source/conf.py @@ -48,18 +48,30 @@ autoapi_type = "python" autodoc_typehints = "none" +# WARNING: more than one target found for cross-reference 'MeasurementInfo': +# ni_measurementlink_service.MeasurementInfo, +# ni_measurementlink_service.measurement.info.MeasurementInfo +# +# TODO: figure out how to make :canonical: work with autoapi +def skip_aliases(app, what, name, obj, skip, options): + if name in [ + "ni_measurementlink_service.DataType", + "ni_measurementlink_service.MeasurementInfo", + "ni_measurementlink_service.ServiceInfo", + "ni_measurementlink_service.MeasurementService", + ]: + skip = True + return skip + + +def setup(sphinx): + sphinx.connect("autoapi-skip-member", skip_aliases) + # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] -suppress_warnings = [ - # WARNING: more than one target found for cross-reference 'MeasurementInfo': - # ni_measurementlink_service.MeasurementInfo, - # ni_measurementlink_service.measurement.info.MeasurementInfo - "ref" -] - # -- Options for HTML output ---------------------------------------------- diff --git a/ni_measurementlink_service/_datatypeinfo.py b/ni_measurementlink_service/_datatypeinfo.py index a65e2668d..b3f7e32ff 100644 --- a/ni_measurementlink_service/_datatypeinfo.py +++ b/ni_measurementlink_service/_datatypeinfo.py @@ -7,21 +7,22 @@ class DataTypeInfo(NamedTuple): - """Class that represents the information for each of the DataType enum values.""" + """Class that represents the information for each of the :any:`DataType` enum values.""" grpc_field_type: type_pb2.Field.Kind.ValueType - """Field.Kind associated with the DataType.""" + """`Field.Kind` associated with the :any:`DataType`.""" repeated: bool - """Whether the DataType is a repeated field.""" + """Whether the :any:`DataType` is a repeated field.""" type_specialization: TypeSpecialization = TypeSpecialization.NoType - """Specific type when value_type can have more than one use.""" + """Specific type when :any:`grpc_field_type` can have more than one use.""" message_type: str = "" - """The gRPC full name of the message type. Required when 'grpc_field_type' is Kind.TypeMessage. - - Ignored for any other 'type'. + """The gRPC full name of the message type. + + Required when :any:`grpc_field_type` is `Kind.TypeMessage`. + Ignored for any other :any:`grpc_field_type` value. """ From ad79948172762d637a96318f69641a130727b130 Mon Sep 17 00:00:00 2001 From: Brad Keryan Date: Wed, 20 Sep 2023 13:58:40 -0500 Subject: [PATCH 14/14] docs: Fix lint warnings --- _docs_source/conf.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/_docs_source/conf.py b/_docs_source/conf.py index df0d0a19e..ccf211021 100644 --- a/_docs_source/conf.py +++ b/_docs_source/conf.py @@ -5,7 +5,6 @@ import autoapi.extension import toml - # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. @@ -48,12 +47,14 @@ autoapi_type = "python" autodoc_typehints = "none" + # WARNING: more than one target found for cross-reference 'MeasurementInfo': # ni_measurementlink_service.MeasurementInfo, # ni_measurementlink_service.measurement.info.MeasurementInfo # # TODO: figure out how to make :canonical: work with autoapi def skip_aliases(app, what, name, obj, skip, options): + """Skip documentation for classes that are exported from multiple modules.""" if name in [ "ni_measurementlink_service.DataType", "ni_measurementlink_service.MeasurementInfo", @@ -65,8 +66,10 @@ def skip_aliases(app, what, name, obj, skip, options): def setup(sphinx): + """Sphinx setup callback.""" sphinx.connect("autoapi-skip-member", skip_aliases) + # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path