diff --git a/brewblox-proto b/brewblox-proto index 619d55b2..cc7f7ded 160000 --- a/brewblox-proto +++ b/brewblox-proto @@ -1 +1 @@ -Subproject commit 619d55b27b4b79728f73e74c417c288bda5f03cf +Subproject commit cc7f7dedb3a9b9b5a50abe8171a1d64323b43a3c diff --git a/brewblox_devcon_spark/broadcast.py b/brewblox_devcon_spark/broadcast.py index fc362c6e..9eced604 100644 --- a/brewblox_devcon_spark/broadcast.py +++ b/brewblox_devcon_spark/broadcast.py @@ -8,7 +8,7 @@ from contextlib import asynccontextmanager from datetime import timedelta -from . import const, mqtt, spark_api, state_machine, utils +from . import mqtt, spark_api, state_machine, utils from .block_analysis import calculate_claims, calculate_relations from .models import HistoryEvent, ServiceStateEvent, ServiceStateEventData @@ -35,11 +35,8 @@ async def run(self): logged_blocks = await self.api.read_all_logged_blocks() # Convert list to key/value format suitable for history - history_data = { - block.id: block.data - for block in logged_blocks - if not block.id.startswith(const.GENERATED_ID_PREFIX) - } + history_data = {block.id: block.data + for block in logged_blocks} mqtt_client.publish(self.history_topic, HistoryEvent( diff --git a/brewblox_devcon_spark/codec/__init__.py b/brewblox_devcon_spark/codec/__init__.py index 21bdc003..a3fc2c9e 100644 --- a/brewblox_devcon_spark/codec/__init__.py +++ b/brewblox_devcon_spark/codec/__init__.py @@ -5,7 +5,6 @@ import logging from base64 import b64decode, b64encode from contextvars import ContextVar -from typing import Optional from google.protobuf import json_format @@ -15,8 +14,6 @@ from . import lookup, pb2, time_utils, unit_conversion from .processor import ProtobufProcessor -DEPRECATED_TYPE_INT = 65533 -DEPRECATED_TYPE_STR = 'DeprecatedObject' UNKNOWN_TYPE_STR = 'UnknownType' ERROR_TYPE_STR = 'ErrorObject' @@ -24,20 +21,6 @@ CV: ContextVar['Codec'] = ContextVar('codec.Codec') -def split_type(type_str: str) -> tuple[str, Optional[str]]: - if '.' in type_str: - return tuple(type_str.split('.', 1)) - else: - return type_str, None - - -def join_type(blockType: str, subtype: Optional[str]) -> str: - if subtype: - return f'{blockType}.{subtype}' - else: - return blockType - - class Codec: def __init__(self, filter_values=True): self._processor = ProtobufProcessor(filter_values) @@ -112,15 +95,15 @@ def encode_payload(self, if payload.blockType is None: return EncodedPayload( blockId=payload.blockId, + name=payload.name, ) - if payload.blockType == DEPRECATED_TYPE_STR: - actual_id = payload.content['actualId'] - content_bytes = actual_id.to_bytes(2, 'little') + if payload.blockType == 'Deprecated': return EncodedPayload( blockId=payload.blockId, - blockType=DEPRECATED_TYPE_INT, - content=b64encode(content_bytes).decode(), + blockType=lookup.BlockType.Value('Deprecated'), + name=payload.name, + content=payload.content['bytes'], ) # Interface-only payload @@ -130,12 +113,12 @@ def encode_payload(self, return EncodedPayload( blockId=payload.blockId, blockType=impl.type_int, + name=payload.name, ) # Payload contains data impl = next((v for v in lookup.CV_OBJECTS.get() - if v.type_str == payload.blockType - and v.subtype_str == payload.subtype)) + if v.type_str == payload.blockType)) message = impl.message_cls() payload = self._processor.pre_encode(message.DESCRIPTOR, @@ -147,14 +130,14 @@ def encode_payload(self, return EncodedPayload( blockId=payload.blockId, blockType=impl.type_int, - subtype=impl.subtype_int, + name=payload.name, content=content, maskMode=payload.maskMode, maskFields=payload.maskFields ) except StopIteration: - msg = f'No codec entry found for {payload.blockType}.{payload.subtype}' + msg = f'No codec entry found for {payload.blockType}' LOGGER.debug(msg, exc_info=True) raise exceptions.EncodeException(msg) @@ -169,19 +152,17 @@ def decode_payload(self, filter_values: bool | None = None, ) -> DecodedPayload: try: - if payload.blockType == DEPRECATED_TYPE_INT: - content_bytes = b64decode(payload.content) - content = {'actualId': int.from_bytes(content_bytes, 'little')} + if payload.blockType == lookup.BlockType.Value('Deprecated'): return DecodedPayload( blockId=payload.blockId, - blockType=DEPRECATED_TYPE_STR, - content=content + blockType='Deprecated', + name=payload.name, + content={'bytes': payload.content}, ) # First, try to find an object lookup impl = next((v for v in lookup.CV_OBJECTS.get() - if payload.blockType in [v.type_str, v.type_int] - and payload.subtype in [v.subtype_str, v.subtype_int]), None) + if payload.blockType in [v.type_str, v.type_int]), None) if impl: # We have an object lookup, and can decode the content @@ -196,7 +177,7 @@ def decode_payload(self, decoded = DecodedPayload( blockId=payload.blockId, blockType=impl.type_str, - subtype=impl.subtype_str, + name=payload.name, content=content, maskMode=payload.maskMode, maskFields=payload.maskFields @@ -214,15 +195,17 @@ def decode_payload(self, return DecodedPayload( blockId=payload.blockId, blockType=intf_impl.type_str, + name=payload.name, ) # No lookup of any kind found # We're decoding (returned) data, so would rather return a stub than raise an error - msg = f'No codec entry found for {payload.blockType}.{payload.subtype}' + msg = f'No codec entry found for {payload.blockType}' LOGGER.debug(msg, exc_info=True) return DecodedPayload( blockId=payload.blockId, blockType=UNKNOWN_TYPE_STR, + name=payload.name, content={ 'error': msg, }, @@ -234,10 +217,10 @@ def decode_payload(self, return DecodedPayload( blockId=payload.blockId, blockType=ERROR_TYPE_STR, + name=payload.name, content={ 'error': msg, 'blockType': payload.blockType, - 'subtype': payload.subtype, }, ) @@ -249,9 +232,6 @@ def setup(): __all__ = [ - 'split_type', - 'join_type', - 'Codec', 'setup', 'CV', diff --git a/brewblox_devcon_spark/codec/lookup.py b/brewblox_devcon_spark/codec/lookup.py index f18fad85..ee880129 100644 --- a/brewblox_devcon_spark/codec/lookup.py +++ b/brewblox_devcon_spark/codec/lookup.py @@ -5,7 +5,7 @@ from contextvars import ContextVar from dataclasses import dataclass -from typing import Generator, Optional, Type +from typing import Generator, Type from google.protobuf.descriptor import Descriptor, FileDescriptor from google.protobuf.internal.enum_type_wrapper import EnumTypeWrapper @@ -35,8 +35,6 @@ class InterfaceLookup: class ObjectLookup: type_str: str type_int: int - subtype_str: Optional[str] - subtype_int: Optional[int] message_cls: Type[Message] @@ -61,8 +59,6 @@ def _object_lookup_generator() -> Generator[ObjectLookup, None, None]: yield ObjectLookup( type_str=BlockType.Name(opts.objtype), type_int=opts.objtype, - subtype_str=(msg_name if opts.subtype else None), - subtype_int=opts.subtype, message_cls=msg_cls, ) @@ -76,17 +72,8 @@ def setup(): ObjectLookup( type_str='EdgeCase', type_int=9001, - subtype_str=None, - subtype_int=0, message_cls=pb2.EdgeCase_pb2.Block, ), - ObjectLookup( - type_str='EdgeCase', - type_int=9001, - subtype_str='SubCase', - subtype_int=1, - message_cls=pb2.EdgeCase_pb2.SubCase, - ), ] interfaces: list[InterfaceLookup] = [ diff --git a/brewblox_devcon_spark/codec/proto-compiled/ActuatorAnalogMock_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/ActuatorAnalogMock_pb2.py index 77936646..e4474bd1 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/ActuatorAnalogMock_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/ActuatorAnalogMock_pb2.py @@ -17,7 +17,7 @@ import Claims_pb2 as Claims__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x41\x63tuatorAnalogMock.proto\x12\x17\x62lox.ActuatorAnalogMock\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\x11\x43onstraints.proto\x1a\x0c\x43laims.proto\"\xb5\x04\n\x05\x42lock\x12\x17\n\x07\x65nabled\x18\r \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\'\n\rstoredSetting\x18\x0b \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 0\x01x\x01\x12(\n\x0e\x64\x65siredSetting\x18\t \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12!\n\x07setting\x18\x01 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12\x1f\n\x05value\x18\x02 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12\"\n\nminSetting\x18\x04 \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 x\x01\x12\"\n\nmaxSetting\x18\x05 \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 x\x01\x12 \n\x08minValue\x18\x06 \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 x\x01\x12 \n\x08maxValue\x18\x07 \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 x\x01\x12\x44\n\rconstrainedBy\x18\x08 \x01(\x0b\x32-.blox.Constraints.DeprecatedAnalogConstraints\x12@\n\x0b\x63onstraints\x18\x0e \x01(\x0b\x32#.blox.Constraints.AnalogConstraintsB\x06\x8a\xb5\x18\x02x\x01\x12!\n\tclaimedBy\x18\n \x01(\rB\x0e\x92?\x02\x38\x10\x8a\xb5\x18\x05\x18\xff\x01(\x01\x12\x35\n\x0bsettingMode\x18\x0c \x01(\x0e\x32\x18.blox.Claims.SettingModeB\x06\x8a\xb5\x18\x02x\x01:\x0e\x8a\xb5\x18\n\x18\xb1\x02J\x05\x01\x05\x13\x0f\x10\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x41\x63tuatorAnalogMock.proto\x12\x17\x62lox.ActuatorAnalogMock\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\x11\x43onstraints.proto\x1a\x0c\x43laims.proto\"\xb0\x04\n\x05\x42lock\x12\x17\n\x07\x65nabled\x18\r \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\'\n\rstoredSetting\x18\x0b \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 0\x01x\x01\x12(\n\x0e\x64\x65siredSetting\x18\t \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12!\n\x07setting\x18\x01 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12\x1f\n\x05value\x18\x02 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12\"\n\nminSetting\x18\x04 \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 x\x01\x12\"\n\nmaxSetting\x18\x05 \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 x\x01\x12 \n\x08minValue\x18\x06 \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 x\x01\x12 \n\x08maxValue\x18\x07 \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 x\x01\x12\x44\n\rconstrainedBy\x18\x08 \x01(\x0b\x32-.blox.Constraints.DeprecatedAnalogConstraints\x12@\n\x0b\x63onstraints\x18\x0e \x01(\x0b\x32#.blox.Constraints.AnalogConstraintsB\x06\x8a\xb5\x18\x02x\x01\x12\x1c\n\tclaimedBy\x18\n \x01(\rB\t\x8a\xb5\x18\x05\x18\xff\x01(\x01\x12\x35\n\x0bsettingMode\x18\x0c \x01(\x0e\x32\x18.blox.Claims.SettingModeB\x06\x8a\xb5\x18\x02x\x01:\x0e\x8a\xb5\x18\n\x18\xb1\x02J\x05\x01\x05\x13\x0f\x10\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -45,11 +45,11 @@ _BLOCK.fields_by_name['constraints']._options = None _BLOCK.fields_by_name['constraints']._serialized_options = b'\212\265\030\002x\001' _BLOCK.fields_by_name['claimedBy']._options = None - _BLOCK.fields_by_name['claimedBy']._serialized_options = b'\222?\0028\020\212\265\030\005\030\377\001(\001' + _BLOCK.fields_by_name['claimedBy']._serialized_options = b'\212\265\030\005\030\377\001(\001' _BLOCK.fields_by_name['settingMode']._options = None _BLOCK.fields_by_name['settingMode']._serialized_options = b'\212\265\030\002x\001' _BLOCK._options = None _BLOCK._serialized_options = b'\212\265\030\n\030\261\002J\005\001\005\023\017\020' _globals['_BLOCK']._serialized_start=117 - _globals['_BLOCK']._serialized_end=682 + _globals['_BLOCK']._serialized_end=677 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/ActuatorLogic_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/ActuatorLogic_pb2.py index 99be1fcb..70e1859b 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/ActuatorLogic_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/ActuatorLogic_pb2.py @@ -16,7 +16,7 @@ import IoArray_pb2 as IoArray__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13\x41\x63tuatorLogic.proto\x12\x12\x62lox.ActuatorLogic\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\rIoArray.proto\"\xc9\x01\n\x0e\x44igitalCompare\x12\x37\n\x02op\x18\x01 \x01(\x0e\x32#.blox.ActuatorLogic.DigitalOperatorB\x06\x8a\xb5\x18\x02x\x01\x12\x32\n\x06result\x18\x02 \x01(\x0e\x32\x1a.blox.ActuatorLogic.ResultB\x06\x8a\xb5\x18\x02(\x01\x12\x19\n\x02id\x18\x03 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x1bx\x01\x12/\n\x03rhs\x18\x04 \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x06\x8a\xb5\x18\x02x\x01\"\xb3\x01\n\rAnalogCompare\x12\x36\n\x02op\x18\x01 \x01(\x0e\x32\".blox.ActuatorLogic.AnalogOperatorB\x06\x8a\xb5\x18\x02x\x01\x12\x32\n\x06result\x18\x02 \x01(\x0e\x32\x1a.blox.ActuatorLogic.ResultB\x06\x8a\xb5\x18\x02(\x01\x12\x19\n\x02id\x18\x03 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x01x\x01\x12\x1b\n\x03rhs\x18\x04 \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 x\x01\"\xea\x02\n\x05\x42lock\x12\x1f\n\x08targetId\x18\x01 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x06x\x01\x12\x17\n\x07\x65nabled\x18\x03 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x34\n\x06result\x18\x04 \x01(\x0e\x32\x1a.blox.ActuatorLogic.ResultB\x08\x8a\xb5\x18\x04(\x01\x30\x01\x12\x1f\n\nexpression\x18\x05 \x01(\tB\x0b\x92?\x02p@\x8a\xb5\x18\x02x\x01\x12@\n\x07\x64igital\x18\x06 \x03(\x0b\x32\".blox.ActuatorLogic.DigitalCompareB\x0b\x92?\x02\x10\x10\x8a\xb5\x18\x02x\x01\x12>\n\x06\x61nalog\x18\x07 \x03(\x0b\x32!.blox.ActuatorLogic.AnalogCompareB\x0b\x92?\x02\x10\x10\x8a\xb5\x18\x02x\x01\x12\x1d\n\x08\x65rrorPos\x18\x08 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02(\x01\x12#\n\x0e\x64rivenTargetId\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\n\x8a\xb5\x18\x06\x18\xc2\x02J\x01\x0f*\xcb\x03\n\x06Result\x12\x10\n\x0cRESULT_FALSE\x10\x00\x12\x0f\n\x0bRESULT_TRUE\x10\x01\x12\x10\n\x0cRESULT_EMPTY\x10\x02\x12\x1a\n\x16RESULT_EMPTY_SUBSTRING\x10\x03\x12\x1a\n\x16RESULT_BLOCK_NOT_FOUND\x10\x04\x12\x1d\n\x19RESULT_INVALID_DIGITAL_OP\x10\x05\x12\x1c\n\x18RESULT_INVALID_ANALOG_OP\x10\x06\x12$\n RESULT_UNDEFINED_DIGITAL_COMPARE\x10\x08\x12#\n\x1fRESULT_UNDEFINED_ANALOG_COMPARE\x10\x07\x12\"\n\x1eRESULT_UNEXPECTED_OPEN_BRACKET\x10\x0b\x12#\n\x1fRESULT_UNEXPECTED_CLOSE_BRACKET\x10\t\x12\x1f\n\x1bRESULT_UNEXPECTED_CHARACTER\x10\x0c\x12 \n\x1cRESULT_UNEXPECTED_COMPARISON\x10\r\x12\x1e\n\x1aRESULT_UNEXPECTED_OPERATOR\x10\x0e\x12 \n\x1cRESULT_MISSING_CLOSE_BRACKET\x10\n*a\n\x0f\x44igitalOperator\x12\x0f\n\x0bOP_VALUE_IS\x10\x00\x12\x13\n\x0fOP_VALUE_IS_NOT\x10\x01\x12\x11\n\rOP_DESIRED_IS\x10\n\x12\x15\n\x11OP_DESIRED_IS_NOT\x10\x0b*X\n\x0e\x41nalogOperator\x12\x0f\n\x0bOP_VALUE_LE\x10\x00\x12\x0f\n\x0bOP_VALUE_GE\x10\x01\x12\x11\n\rOP_SETTING_LE\x10\n\x12\x11\n\rOP_SETTING_GE\x10\x0b\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13\x41\x63tuatorLogic.proto\x12\x12\x62lox.ActuatorLogic\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\rIoArray.proto\"\xc4\x01\n\x0e\x44igitalCompare\x12\x37\n\x02op\x18\x01 \x01(\x0e\x32#.blox.ActuatorLogic.DigitalOperatorB\x06\x8a\xb5\x18\x02x\x01\x12\x32\n\x06result\x18\x02 \x01(\x0e\x32\x1a.blox.ActuatorLogic.ResultB\x06\x8a\xb5\x18\x02(\x01\x12\x14\n\x02id\x18\x03 \x01(\rB\x08\x8a\xb5\x18\x04\x18\x1bx\x01\x12/\n\x03rhs\x18\x04 \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x06\x8a\xb5\x18\x02x\x01\"\xae\x01\n\rAnalogCompare\x12\x36\n\x02op\x18\x01 \x01(\x0e\x32\".blox.ActuatorLogic.AnalogOperatorB\x06\x8a\xb5\x18\x02x\x01\x12\x32\n\x06result\x18\x02 \x01(\x0e\x32\x1a.blox.ActuatorLogic.ResultB\x06\x8a\xb5\x18\x02(\x01\x12\x14\n\x02id\x18\x03 \x01(\rB\x08\x8a\xb5\x18\x04\x18\x01x\x01\x12\x1b\n\x03rhs\x18\x04 \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 x\x01\"\xe5\x02\n\x05\x42lock\x12\x1a\n\x08targetId\x18\x01 \x01(\rB\x08\x8a\xb5\x18\x04\x18\x06x\x01\x12\x17\n\x07\x65nabled\x18\x03 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x34\n\x06result\x18\x04 \x01(\x0e\x32\x1a.blox.ActuatorLogic.ResultB\x08\x8a\xb5\x18\x04(\x01\x30\x01\x12\x1f\n\nexpression\x18\x05 \x01(\tB\x0b\x92?\x02p@\x8a\xb5\x18\x02x\x01\x12@\n\x07\x64igital\x18\x06 \x03(\x0b\x32\".blox.ActuatorLogic.DigitalCompareB\x0b\x92?\x02\x10\x10\x8a\xb5\x18\x02x\x01\x12>\n\x06\x61nalog\x18\x07 \x03(\x0b\x32!.blox.ActuatorLogic.AnalogCompareB\x0b\x92?\x02\x10\x10\x8a\xb5\x18\x02x\x01\x12\x1d\n\x08\x65rrorPos\x18\x08 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02(\x01\x12#\n\x0e\x64rivenTargetId\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\n\x8a\xb5\x18\x06\x18\xc2\x02J\x01\x0f*\xcb\x03\n\x06Result\x12\x10\n\x0cRESULT_FALSE\x10\x00\x12\x0f\n\x0bRESULT_TRUE\x10\x01\x12\x10\n\x0cRESULT_EMPTY\x10\x02\x12\x1a\n\x16RESULT_EMPTY_SUBSTRING\x10\x03\x12\x1a\n\x16RESULT_BLOCK_NOT_FOUND\x10\x04\x12\x1d\n\x19RESULT_INVALID_DIGITAL_OP\x10\x05\x12\x1c\n\x18RESULT_INVALID_ANALOG_OP\x10\x06\x12$\n RESULT_UNDEFINED_DIGITAL_COMPARE\x10\x08\x12#\n\x1fRESULT_UNDEFINED_ANALOG_COMPARE\x10\x07\x12\"\n\x1eRESULT_UNEXPECTED_OPEN_BRACKET\x10\x0b\x12#\n\x1fRESULT_UNEXPECTED_CLOSE_BRACKET\x10\t\x12\x1f\n\x1bRESULT_UNEXPECTED_CHARACTER\x10\x0c\x12 \n\x1cRESULT_UNEXPECTED_COMPARISON\x10\r\x12\x1e\n\x1aRESULT_UNEXPECTED_OPERATOR\x10\x0e\x12 \n\x1cRESULT_MISSING_CLOSE_BRACKET\x10\n*a\n\x0f\x44igitalOperator\x12\x0f\n\x0bOP_VALUE_IS\x10\x00\x12\x13\n\x0fOP_VALUE_IS_NOT\x10\x01\x12\x11\n\rOP_DESIRED_IS\x10\n\x12\x15\n\x11OP_DESIRED_IS_NOT\x10\x0b*X\n\x0e\x41nalogOperator\x12\x0f\n\x0bOP_VALUE_LE\x10\x00\x12\x0f\n\x0bOP_VALUE_GE\x10\x01\x12\x11\n\rOP_SETTING_LE\x10\n\x12\x11\n\rOP_SETTING_GE\x10\x0b\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -28,7 +28,7 @@ _DIGITALCOMPARE.fields_by_name['result']._options = None _DIGITALCOMPARE.fields_by_name['result']._serialized_options = b'\212\265\030\002(\001' _DIGITALCOMPARE.fields_by_name['id']._options = None - _DIGITALCOMPARE.fields_by_name['id']._serialized_options = b'\222?\0028\020\212\265\030\004\030\033x\001' + _DIGITALCOMPARE.fields_by_name['id']._serialized_options = b'\212\265\030\004\030\033x\001' _DIGITALCOMPARE.fields_by_name['rhs']._options = None _DIGITALCOMPARE.fields_by_name['rhs']._serialized_options = b'\212\265\030\002x\001' _ANALOGCOMPARE.fields_by_name['op']._options = None @@ -36,11 +36,11 @@ _ANALOGCOMPARE.fields_by_name['result']._options = None _ANALOGCOMPARE.fields_by_name['result']._serialized_options = b'\212\265\030\002(\001' _ANALOGCOMPARE.fields_by_name['id']._options = None - _ANALOGCOMPARE.fields_by_name['id']._serialized_options = b'\222?\0028\020\212\265\030\004\030\001x\001' + _ANALOGCOMPARE.fields_by_name['id']._serialized_options = b'\212\265\030\004\030\001x\001' _ANALOGCOMPARE.fields_by_name['rhs']._options = None _ANALOGCOMPARE.fields_by_name['rhs']._serialized_options = b'\222?\0028 \212\265\030\005\020\200 x\001' _BLOCK.fields_by_name['targetId']._options = None - _BLOCK.fields_by_name['targetId']._serialized_options = b'\222?\0028\020\212\265\030\004\030\006x\001' + _BLOCK.fields_by_name['targetId']._serialized_options = b'\212\265\030\004\030\006x\001' _BLOCK.fields_by_name['enabled']._options = None _BLOCK.fields_by_name['enabled']._serialized_options = b'\212\265\030\002x\001' _BLOCK.fields_by_name['result']._options = None @@ -57,16 +57,16 @@ _BLOCK.fields_by_name['drivenTargetId']._serialized_options = b'\222?\002\030\003\212\265\030\002H\001' _BLOCK._options = None _BLOCK._serialized_options = b'\212\265\030\006\030\302\002J\001\017' - _globals['_RESULT']._serialized_start=840 - _globals['_RESULT']._serialized_end=1299 - _globals['_DIGITALOPERATOR']._serialized_start=1301 - _globals['_DIGITALOPERATOR']._serialized_end=1398 - _globals['_ANALOGOPERATOR']._serialized_start=1400 - _globals['_ANALOGOPERATOR']._serialized_end=1488 + _globals['_RESULT']._serialized_start=825 + _globals['_RESULT']._serialized_end=1284 + _globals['_DIGITALOPERATOR']._serialized_start=1286 + _globals['_DIGITALOPERATOR']._serialized_end=1383 + _globals['_ANALOGOPERATOR']._serialized_start=1385 + _globals['_ANALOGOPERATOR']._serialized_end=1473 _globals['_DIGITALCOMPARE']._serialized_start=89 - _globals['_DIGITALCOMPARE']._serialized_end=290 - _globals['_ANALOGCOMPARE']._serialized_start=293 - _globals['_ANALOGCOMPARE']._serialized_end=472 - _globals['_BLOCK']._serialized_start=475 - _globals['_BLOCK']._serialized_end=837 + _globals['_DIGITALCOMPARE']._serialized_end=285 + _globals['_ANALOGCOMPARE']._serialized_start=288 + _globals['_ANALOGCOMPARE']._serialized_end=462 + _globals['_BLOCK']._serialized_start=465 + _globals['_BLOCK']._serialized_end=822 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/ActuatorOffset_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/ActuatorOffset_pb2.py index 5acb4be2..52db40ab 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/ActuatorOffset_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/ActuatorOffset_pb2.py @@ -17,7 +17,7 @@ import Claims_pb2 as Claims__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x41\x63tuatorOffset.proto\x12\x13\x62lox.ActuatorOffset\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\x11\x43onstraints.proto\x1a\x0c\x43laims.proto\"\xe8\x04\n\x05\x42lock\x12\x17\n\x07\x65nabled\x18\n \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x1f\n\x08targetId\x18\x01 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x04x\x01\x12\"\n\x0breferenceId\x18\x03 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x04x\x01\x12)\n\rstoredSetting\x18\r \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x06\x10\x80 0\x01x\x01\x12*\n\x0e\x64\x65siredSetting\x18\x0b \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x06\x10\x80 (\x01\x30\x01\x12#\n\x07setting\x18\x06 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x06\x10\x80 (\x01\x30\x01\x12!\n\x05value\x18\x07 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x06\x10\x80 (\x01\x30\x01\x12K\n\x17referenceSettingOrValue\x18\x04 \x01(\x0e\x32\".blox.ActuatorOffset.ReferenceKindB\x06\x8a\xb5\x18\x02x\x01\x12\x44\n\rconstrainedBy\x18\x08 \x01(\x0b\x32-.blox.Constraints.DeprecatedAnalogConstraints\x12@\n\x0b\x63onstraints\x18\x0f \x01(\x0b\x32#.blox.Constraints.AnalogConstraintsB\x06\x8a\xb5\x18\x02x\x01\x12!\n\tclaimedBy\x18\x0c \x01(\rB\x0e\x92?\x02\x38\x10\x8a\xb5\x18\x05\x18\xff\x01(\x01\x12\x35\n\x0bsettingMode\x18\x0e \x01(\x0e\x32\x18.blox.Claims.SettingModeB\x06\x8a\xb5\x18\x02x\x01\x12#\n\x0e\x64rivenTargetId\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\x0e\x8a\xb5\x18\n\x18\xb4\x02J\x05\x01\x05\x13\x0f\x10*/\n\rReferenceKind\x12\x0f\n\x0bREF_SETTING\x10\x00\x12\r\n\tREF_VALUE\x10\x01\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x41\x63tuatorOffset.proto\x12\x13\x62lox.ActuatorOffset\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\x11\x43onstraints.proto\x1a\x0c\x43laims.proto\"\xd9\x04\n\x05\x42lock\x12\x17\n\x07\x65nabled\x18\n \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x1a\n\x08targetId\x18\x01 \x01(\rB\x08\x8a\xb5\x18\x04\x18\x04x\x01\x12\x1d\n\x0breferenceId\x18\x03 \x01(\rB\x08\x8a\xb5\x18\x04\x18\x04x\x01\x12)\n\rstoredSetting\x18\r \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x06\x10\x80 0\x01x\x01\x12*\n\x0e\x64\x65siredSetting\x18\x0b \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x06\x10\x80 (\x01\x30\x01\x12#\n\x07setting\x18\x06 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x06\x10\x80 (\x01\x30\x01\x12!\n\x05value\x18\x07 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x06\x10\x80 (\x01\x30\x01\x12K\n\x17referenceSettingOrValue\x18\x04 \x01(\x0e\x32\".blox.ActuatorOffset.ReferenceKindB\x06\x8a\xb5\x18\x02x\x01\x12\x44\n\rconstrainedBy\x18\x08 \x01(\x0b\x32-.blox.Constraints.DeprecatedAnalogConstraints\x12@\n\x0b\x63onstraints\x18\x0f \x01(\x0b\x32#.blox.Constraints.AnalogConstraintsB\x06\x8a\xb5\x18\x02x\x01\x12\x1c\n\tclaimedBy\x18\x0c \x01(\rB\t\x8a\xb5\x18\x05\x18\xff\x01(\x01\x12\x35\n\x0bsettingMode\x18\x0e \x01(\x0e\x32\x18.blox.Claims.SettingModeB\x06\x8a\xb5\x18\x02x\x01\x12#\n\x0e\x64rivenTargetId\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\x0e\x8a\xb5\x18\n\x18\xb4\x02J\x05\x01\x05\x13\x0f\x10*/\n\rReferenceKind\x12\x0f\n\x0bREF_SETTING\x10\x00\x12\r\n\tREF_VALUE\x10\x01\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -27,9 +27,9 @@ _BLOCK.fields_by_name['enabled']._options = None _BLOCK.fields_by_name['enabled']._serialized_options = b'\212\265\030\002x\001' _BLOCK.fields_by_name['targetId']._options = None - _BLOCK.fields_by_name['targetId']._serialized_options = b'\222?\0028\020\212\265\030\004\030\004x\001' + _BLOCK.fields_by_name['targetId']._serialized_options = b'\212\265\030\004\030\004x\001' _BLOCK.fields_by_name['referenceId']._options = None - _BLOCK.fields_by_name['referenceId']._serialized_options = b'\222?\0028\020\212\265\030\004\030\004x\001' + _BLOCK.fields_by_name['referenceId']._serialized_options = b'\212\265\030\004\030\004x\001' _BLOCK.fields_by_name['storedSetting']._options = None _BLOCK.fields_by_name['storedSetting']._serialized_options = b'\222?\0028 \212\265\030\t\010\006\020\200 0\001x\001' _BLOCK.fields_by_name['desiredSetting']._options = None @@ -43,15 +43,15 @@ _BLOCK.fields_by_name['constraints']._options = None _BLOCK.fields_by_name['constraints']._serialized_options = b'\212\265\030\002x\001' _BLOCK.fields_by_name['claimedBy']._options = None - _BLOCK.fields_by_name['claimedBy']._serialized_options = b'\222?\0028\020\212\265\030\005\030\377\001(\001' + _BLOCK.fields_by_name['claimedBy']._serialized_options = b'\212\265\030\005\030\377\001(\001' _BLOCK.fields_by_name['settingMode']._options = None _BLOCK.fields_by_name['settingMode']._serialized_options = b'\212\265\030\002x\001' _BLOCK.fields_by_name['drivenTargetId']._options = None _BLOCK.fields_by_name['drivenTargetId']._serialized_options = b'\222?\002\030\003\212\265\030\002H\001' _BLOCK._options = None _BLOCK._serialized_options = b'\212\265\030\n\030\264\002J\005\001\005\023\017\020' - _globals['_REFERENCEKIND']._serialized_start=727 - _globals['_REFERENCEKIND']._serialized_end=774 + _globals['_REFERENCEKIND']._serialized_start=712 + _globals['_REFERENCEKIND']._serialized_end=759 _globals['_BLOCK']._serialized_start=109 - _globals['_BLOCK']._serialized_end=725 + _globals['_BLOCK']._serialized_end=710 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/ActuatorPwm_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/ActuatorPwm_pb2.py index 322566a3..62890bcb 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/ActuatorPwm_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/ActuatorPwm_pb2.py @@ -17,7 +17,7 @@ import Claims_pb2 as Claims__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11\x41\x63tuatorPwm.proto\x12\x10\x62lox.ActuatorPwm\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\x11\x43onstraints.proto\x1a\x0c\x43laims.proto\"\x90\x04\n\x05\x42lock\x12\x17\n\x07\x65nabled\x18\x08 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12!\n\nactuatorId\x18\x01 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x06x\x01\x12\'\n\rstoredSetting\x18\x0b \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 0\x01x\x01\x12(\n\x0e\x64\x65siredSetting\x18\t \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12!\n\x07setting\x18\x04 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12\x1f\n\x05value\x18\x05 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12\x1b\n\x06period\x18\x03 \x01(\rB\x0b\x8a\xb5\x18\x07\x08\x03\x10\xe8\x07x\x01\x12\x44\n\rconstrainedBy\x18\x06 \x01(\x0b\x32-.blox.Constraints.DeprecatedAnalogConstraints\x12@\n\x0b\x63onstraints\x18\r \x01(\x0b\x32#.blox.Constraints.AnalogConstraintsB\x06\x8a\xb5\x18\x02x\x01\x12!\n\tclaimedBy\x18\n \x01(\rB\x0e\x92?\x02\x38\x10\x8a\xb5\x18\x05\x18\xff\x01(\x01\x12\x35\n\x0bsettingMode\x18\x0c \x01(\x0e\x32\x18.blox.Claims.SettingModeB\x06\x8a\xb5\x18\x02x\x01\x12%\n\x10\x64rivenActuatorId\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\x0e\x8a\xb5\x18\n\x18\xb3\x02J\x05\x01\x05\x13\x0f\x10\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11\x41\x63tuatorPwm.proto\x12\x10\x62lox.ActuatorPwm\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\x11\x43onstraints.proto\x1a\x0c\x43laims.proto\"\x86\x04\n\x05\x42lock\x12\x17\n\x07\x65nabled\x18\x08 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x1c\n\nactuatorId\x18\x01 \x01(\rB\x08\x8a\xb5\x18\x04\x18\x06x\x01\x12\'\n\rstoredSetting\x18\x0b \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 0\x01x\x01\x12(\n\x0e\x64\x65siredSetting\x18\t \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12!\n\x07setting\x18\x04 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12\x1f\n\x05value\x18\x05 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12\x1b\n\x06period\x18\x03 \x01(\rB\x0b\x8a\xb5\x18\x07\x08\x03\x10\xe8\x07x\x01\x12\x44\n\rconstrainedBy\x18\x06 \x01(\x0b\x32-.blox.Constraints.DeprecatedAnalogConstraints\x12@\n\x0b\x63onstraints\x18\r \x01(\x0b\x32#.blox.Constraints.AnalogConstraintsB\x06\x8a\xb5\x18\x02x\x01\x12\x1c\n\tclaimedBy\x18\n \x01(\rB\t\x8a\xb5\x18\x05\x18\xff\x01(\x01\x12\x35\n\x0bsettingMode\x18\x0c \x01(\x0e\x32\x18.blox.Claims.SettingModeB\x06\x8a\xb5\x18\x02x\x01\x12%\n\x10\x64rivenActuatorId\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\x0e\x8a\xb5\x18\n\x18\xb3\x02J\x05\x01\x05\x13\x0f\x10\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -27,7 +27,7 @@ _BLOCK.fields_by_name['enabled']._options = None _BLOCK.fields_by_name['enabled']._serialized_options = b'\212\265\030\002x\001' _BLOCK.fields_by_name['actuatorId']._options = None - _BLOCK.fields_by_name['actuatorId']._serialized_options = b'\222?\0028\020\212\265\030\004\030\006x\001' + _BLOCK.fields_by_name['actuatorId']._serialized_options = b'\212\265\030\004\030\006x\001' _BLOCK.fields_by_name['storedSetting']._options = None _BLOCK.fields_by_name['storedSetting']._serialized_options = b'\222?\0028 \212\265\030\007\020\200 0\001x\001' _BLOCK.fields_by_name['desiredSetting']._options = None @@ -41,7 +41,7 @@ _BLOCK.fields_by_name['constraints']._options = None _BLOCK.fields_by_name['constraints']._serialized_options = b'\212\265\030\002x\001' _BLOCK.fields_by_name['claimedBy']._options = None - _BLOCK.fields_by_name['claimedBy']._serialized_options = b'\222?\0028\020\212\265\030\005\030\377\001(\001' + _BLOCK.fields_by_name['claimedBy']._serialized_options = b'\212\265\030\005\030\377\001(\001' _BLOCK.fields_by_name['settingMode']._options = None _BLOCK.fields_by_name['settingMode']._serialized_options = b'\212\265\030\002x\001' _BLOCK.fields_by_name['drivenActuatorId']._options = None @@ -49,5 +49,5 @@ _BLOCK._options = None _BLOCK._serialized_options = b'\212\265\030\n\030\263\002J\005\001\005\023\017\020' _globals['_BLOCK']._serialized_start=103 - _globals['_BLOCK']._serialized_end=631 + _globals['_BLOCK']._serialized_end=621 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/Balancer_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/Balancer_pb2.py index 89bfd2b6..0092bbc3 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/Balancer_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/Balancer_pb2.py @@ -15,7 +15,7 @@ import nanopb_pb2 as nanopb__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0e\x42\x61lancer.proto\x12\rblox.Balancer\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\"r\n\x10\x42\x61lancedActuator\x12\x1a\n\x02id\x18\x01 \x01(\rB\x0e\x92?\x02\x38\x10\x8a\xb5\x18\x05\x18\xff\x01(\x01\x12!\n\trequested\x18\x02 \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 (\x01\x12\x1f\n\x07granted\x18\x03 \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 (\x01\"M\n\x05\x42lock\x12\x38\n\x07\x63lients\x18\x01 \x03(\x0b\x32\x1f.blox.Balancer.BalancedActuatorB\x06\x8a\xb5\x18\x02(\x01:\n\x8a\xb5\x18\x06\x18\xb5\x02J\x01\x07\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0e\x42\x61lancer.proto\x12\rblox.Balancer\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\"m\n\x10\x42\x61lancedActuator\x12\x15\n\x02id\x18\x01 \x01(\rB\t\x8a\xb5\x18\x05\x18\xff\x01(\x01\x12!\n\trequested\x18\x02 \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 (\x01\x12\x1f\n\x07granted\x18\x03 \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 (\x01\"M\n\x05\x42lock\x12\x38\n\x07\x63lients\x18\x01 \x03(\x0b\x32\x1f.blox.Balancer.BalancedActuatorB\x06\x8a\xb5\x18\x02(\x01:\n\x8a\xb5\x18\x06\x18\xb5\x02J\x01\x07\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -23,7 +23,7 @@ if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _BALANCEDACTUATOR.fields_by_name['id']._options = None - _BALANCEDACTUATOR.fields_by_name['id']._serialized_options = b'\222?\0028\020\212\265\030\005\030\377\001(\001' + _BALANCEDACTUATOR.fields_by_name['id']._serialized_options = b'\212\265\030\005\030\377\001(\001' _BALANCEDACTUATOR.fields_by_name['requested']._options = None _BALANCEDACTUATOR.fields_by_name['requested']._serialized_options = b'\222?\0028 \212\265\030\005\020\200 (\001' _BALANCEDACTUATOR.fields_by_name['granted']._options = None @@ -33,7 +33,7 @@ _BLOCK._options = None _BLOCK._serialized_options = b'\212\265\030\006\030\265\002J\001\007' _globals['_BALANCEDACTUATOR']._serialized_start=63 - _globals['_BALANCEDACTUATOR']._serialized_end=177 - _globals['_BLOCK']._serialized_start=179 - _globals['_BLOCK']._serialized_end=256 + _globals['_BALANCEDACTUATOR']._serialized_end=172 + _globals['_BLOCK']._serialized_start=174 + _globals['_BLOCK']._serialized_end=251 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/Constraints_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/Constraints_pb2.py index 2f54dc19..d5b37c46 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/Constraints_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/Constraints_pb2.py @@ -15,7 +15,7 @@ import nanopb_pb2 as nanopb__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11\x43onstraints.proto\x12\x10\x62lox.Constraints\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\"c\n\x0fValueConstraint\x12\x1d\n\x05value\x18\x01 \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 x\x01\x12\x17\n\x07\x65nabled\x18\x32 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x18\n\x08limiting\x18\x33 \x01(\x08\x42\x06\x8a\xb5\x18\x02(\x01\"\x9f\x01\n\x12\x42\x61lancedConstraint\x12!\n\nbalancerId\x18\x01 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x07x\x01\x12\x1a\n\x07granted\x18\x02 \x01(\rB\t\x8a\xb5\x18\x05\x10\x80 (\x01\x12\x17\n\x07\x65nabled\x18\x32 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x18\n\x08limiting\x18\x33 \x01(\x08\x42\x06\x8a\xb5\x18\x02(\x01\x12\x17\n\x02id\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\"\x90\x01\n\x12\x44urationConstraint\x12\"\n\x08\x64uration\x18\x01 \x01(\rB\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x03\x10\xe8\x07x\x01\x12\x17\n\x07\x65nabled\x18\x32 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x18\n\x08limiting\x18\x33 \x01(\x08\x42\x06\x8a\xb5\x18\x02(\x01\x12#\n\tremaining\x18\x34 \x01(\rB\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x03\x10\xe8\x07(\x01\"\xf5\x01\n\x11MutexedConstraint\x12\x1e\n\x07mutexId\x18\x01 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x08x\x01\x12\'\n\rextraHoldTime\x18\x02 \x01(\rB\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x03\x10\xe8\x07x\x01\x12\x17\n\x07hasLock\x18\x04 \x01(\x08\x42\x06\x8a\xb5\x18\x02(\x01\x12\x17\n\x07\x65nabled\x18\x32 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x18\n\x08limiting\x18\x33 \x01(\x08\x42\x06\x8a\xb5\x18\x02(\x01\x12#\n\tremaining\x18\x34 \x01(\rB\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x03\x10\xe8\x07(\x01\x12&\n\x11hasCustomHoldTime\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\"\xc3\x01\n\x11\x41nalogConstraints\x12\x36\n\x03min\x18\x01 \x01(\x0b\x32!.blox.Constraints.ValueConstraintB\x06\x8a\xb5\x18\x02x\x01\x12\x36\n\x03max\x18\x02 \x01(\x0b\x32!.blox.Constraints.ValueConstraintB\x06\x8a\xb5\x18\x02x\x01\x12>\n\x08\x62\x61lanced\x18\x03 \x01(\x0b\x32$.blox.Constraints.BalancedConstraintB\x06\x8a\xb5\x18\x02x\x01\"\xd0\x02\n\x12\x44igitalConstraints\x12<\n\x06minOff\x18\x01 \x01(\x0b\x32$.blox.Constraints.DurationConstraintB\x06\x8a\xb5\x18\x02x\x01\x12;\n\x05minOn\x18\x02 \x01(\x0b\x32$.blox.Constraints.DurationConstraintB\x06\x8a\xb5\x18\x02x\x01\x12@\n\ndelayedOff\x18\x03 \x01(\x0b\x32$.blox.Constraints.DurationConstraintB\x06\x8a\xb5\x18\x02x\x01\x12?\n\tdelayedOn\x18\x04 \x01(\x0b\x32$.blox.Constraints.DurationConstraintB\x06\x8a\xb5\x18\x02x\x01\x12<\n\x07mutexed\x18\x05 \x01(\x0b\x32#.blox.Constraints.MutexedConstraintB\x06\x8a\xb5\x18\x02x\x01\"\xb8\x01\n\x1a\x44\x65precatedAnalogConstraint\x12\x1b\n\x03min\x18\x01 \x01(\x11\x42\x0c\x92?\x02\x38 \x8a\xb5\x18\x03\x10\x80 H\x00\x12\x1b\n\x03max\x18\x02 \x01(\x11\x42\x0c\x92?\x02\x38 \x8a\xb5\x18\x03\x10\x80 H\x00\x12\x38\n\x08\x62\x61lanced\x18\x03 \x01(\x0b\x32$.blox.Constraints.BalancedConstraintH\x00\x12\x18\n\x08limiting\x18\x64 \x01(\x08\x42\x06\x8a\xb5\x18\x02(\x01\x42\x0c\n\nconstraint\"g\n\x1b\x44\x65precatedAnalogConstraints\x12H\n\x0b\x63onstraints\x18\x01 \x03(\x0b\x32,.blox.Constraints.DeprecatedAnalogConstraintB\x05\x92?\x02\x10\x08\"\xd3\x02\n\x1b\x44\x65precatedDigitalConstraint\x12 \n\x06minOff\x18\x01 \x01(\rB\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x08\x03\x10\xe8\x07H\x00\x12\x1f\n\x05minOn\x18\x02 \x01(\rB\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x08\x03\x10\xe8\x07H\x00\x12\x36\n\x07mutexed\x18\x04 \x01(\x0b\x32#.blox.Constraints.MutexedConstraintH\x00\x12$\n\ndelayedOff\x18\x05 \x01(\rB\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x08\x03\x10\xe8\x07H\x00\x12#\n\tdelayedOn\x18\x06 \x01(\rB\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x08\x03\x10\xe8\x07H\x00\x12\x1c\n\x05mutex\x18\x03 \x01(\rB\x0b\x92?\x02\x38\x10\x8a\xb5\x18\x02\x18\x08H\x00\x12\x1d\n\x08limiting\x18\x64 \x01(\rB\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12#\n\tremaining\x18\x65 \x01(\rB\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x03\x10\xe8\x07(\x01\x42\x0c\n\nconstraint\"i\n\x1c\x44\x65precatedDigitalConstraints\x12I\n\x0b\x63onstraints\x18\x01 \x03(\x0b\x32-.blox.Constraints.DeprecatedDigitalConstraintB\x05\x92?\x02\x10\x08\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11\x43onstraints.proto\x12\x10\x62lox.Constraints\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\"c\n\x0fValueConstraint\x12\x1d\n\x05value\x18\x01 \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 x\x01\x12\x17\n\x07\x65nabled\x18\x32 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x18\n\x08limiting\x18\x33 \x01(\x08\x42\x06\x8a\xb5\x18\x02(\x01\"\x9a\x01\n\x12\x42\x61lancedConstraint\x12\x1c\n\nbalancerId\x18\x01 \x01(\rB\x08\x8a\xb5\x18\x04\x18\x07x\x01\x12\x1a\n\x07granted\x18\x02 \x01(\rB\t\x8a\xb5\x18\x05\x10\x80 (\x01\x12\x17\n\x07\x65nabled\x18\x32 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x18\n\x08limiting\x18\x33 \x01(\x08\x42\x06\x8a\xb5\x18\x02(\x01\x12\x17\n\x02id\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\"\x90\x01\n\x12\x44urationConstraint\x12\"\n\x08\x64uration\x18\x01 \x01(\rB\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x03\x10\xe8\x07x\x01\x12\x17\n\x07\x65nabled\x18\x32 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x18\n\x08limiting\x18\x33 \x01(\x08\x42\x06\x8a\xb5\x18\x02(\x01\x12#\n\tremaining\x18\x34 \x01(\rB\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x03\x10\xe8\x07(\x01\"\xf0\x01\n\x11MutexedConstraint\x12\x19\n\x07mutexId\x18\x01 \x01(\rB\x08\x8a\xb5\x18\x04\x18\x08x\x01\x12\'\n\rextraHoldTime\x18\x02 \x01(\rB\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x03\x10\xe8\x07x\x01\x12\x17\n\x07hasLock\x18\x04 \x01(\x08\x42\x06\x8a\xb5\x18\x02(\x01\x12\x17\n\x07\x65nabled\x18\x32 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x18\n\x08limiting\x18\x33 \x01(\x08\x42\x06\x8a\xb5\x18\x02(\x01\x12#\n\tremaining\x18\x34 \x01(\rB\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x03\x10\xe8\x07(\x01\x12&\n\x11hasCustomHoldTime\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\"\xc3\x01\n\x11\x41nalogConstraints\x12\x36\n\x03min\x18\x01 \x01(\x0b\x32!.blox.Constraints.ValueConstraintB\x06\x8a\xb5\x18\x02x\x01\x12\x36\n\x03max\x18\x02 \x01(\x0b\x32!.blox.Constraints.ValueConstraintB\x06\x8a\xb5\x18\x02x\x01\x12>\n\x08\x62\x61lanced\x18\x03 \x01(\x0b\x32$.blox.Constraints.BalancedConstraintB\x06\x8a\xb5\x18\x02x\x01\"\xd0\x02\n\x12\x44igitalConstraints\x12<\n\x06minOff\x18\x01 \x01(\x0b\x32$.blox.Constraints.DurationConstraintB\x06\x8a\xb5\x18\x02x\x01\x12;\n\x05minOn\x18\x02 \x01(\x0b\x32$.blox.Constraints.DurationConstraintB\x06\x8a\xb5\x18\x02x\x01\x12@\n\ndelayedOff\x18\x03 \x01(\x0b\x32$.blox.Constraints.DurationConstraintB\x06\x8a\xb5\x18\x02x\x01\x12?\n\tdelayedOn\x18\x04 \x01(\x0b\x32$.blox.Constraints.DurationConstraintB\x06\x8a\xb5\x18\x02x\x01\x12<\n\x07mutexed\x18\x05 \x01(\x0b\x32#.blox.Constraints.MutexedConstraintB\x06\x8a\xb5\x18\x02x\x01\"\xb8\x01\n\x1a\x44\x65precatedAnalogConstraint\x12\x1b\n\x03min\x18\x01 \x01(\x11\x42\x0c\x92?\x02\x38 \x8a\xb5\x18\x03\x10\x80 H\x00\x12\x1b\n\x03max\x18\x02 \x01(\x11\x42\x0c\x92?\x02\x38 \x8a\xb5\x18\x03\x10\x80 H\x00\x12\x38\n\x08\x62\x61lanced\x18\x03 \x01(\x0b\x32$.blox.Constraints.BalancedConstraintH\x00\x12\x18\n\x08limiting\x18\x64 \x01(\x08\x42\x06\x8a\xb5\x18\x02(\x01\x42\x0c\n\nconstraint\"g\n\x1b\x44\x65precatedAnalogConstraints\x12H\n\x0b\x63onstraints\x18\x01 \x03(\x0b\x32,.blox.Constraints.DeprecatedAnalogConstraintB\x05\x92?\x02\x10\x08\"\xce\x02\n\x1b\x44\x65precatedDigitalConstraint\x12 \n\x06minOff\x18\x01 \x01(\rB\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x08\x03\x10\xe8\x07H\x00\x12\x1f\n\x05minOn\x18\x02 \x01(\rB\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x08\x03\x10\xe8\x07H\x00\x12\x36\n\x07mutexed\x18\x04 \x01(\x0b\x32#.blox.Constraints.MutexedConstraintH\x00\x12$\n\ndelayedOff\x18\x05 \x01(\rB\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x08\x03\x10\xe8\x07H\x00\x12#\n\tdelayedOn\x18\x06 \x01(\rB\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x08\x03\x10\xe8\x07H\x00\x12\x17\n\x05mutex\x18\x03 \x01(\rB\x06\x8a\xb5\x18\x02\x18\x08H\x00\x12\x1d\n\x08limiting\x18\x64 \x01(\rB\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12#\n\tremaining\x18\x65 \x01(\rB\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x03\x10\xe8\x07(\x01\x42\x0c\n\nconstraint\"i\n\x1c\x44\x65precatedDigitalConstraints\x12I\n\x0b\x63onstraints\x18\x01 \x03(\x0b\x32-.blox.Constraints.DeprecatedDigitalConstraintB\x05\x92?\x02\x10\x08\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -29,7 +29,7 @@ _VALUECONSTRAINT.fields_by_name['limiting']._options = None _VALUECONSTRAINT.fields_by_name['limiting']._serialized_options = b'\212\265\030\002(\001' _BALANCEDCONSTRAINT.fields_by_name['balancerId']._options = None - _BALANCEDCONSTRAINT.fields_by_name['balancerId']._serialized_options = b'\222?\0028\020\212\265\030\004\030\007x\001' + _BALANCEDCONSTRAINT.fields_by_name['balancerId']._serialized_options = b'\212\265\030\004\030\007x\001' _BALANCEDCONSTRAINT.fields_by_name['granted']._options = None _BALANCEDCONSTRAINT.fields_by_name['granted']._serialized_options = b'\212\265\030\005\020\200 (\001' _BALANCEDCONSTRAINT.fields_by_name['enabled']._options = None @@ -47,7 +47,7 @@ _DURATIONCONSTRAINT.fields_by_name['remaining']._options = None _DURATIONCONSTRAINT.fields_by_name['remaining']._serialized_options = b'\222?\0028 \212\265\030\007\010\003\020\350\007(\001' _MUTEXEDCONSTRAINT.fields_by_name['mutexId']._options = None - _MUTEXEDCONSTRAINT.fields_by_name['mutexId']._serialized_options = b'\222?\0028\020\212\265\030\004\030\010x\001' + _MUTEXEDCONSTRAINT.fields_by_name['mutexId']._serialized_options = b'\212\265\030\004\030\010x\001' _MUTEXEDCONSTRAINT.fields_by_name['extraHoldTime']._options = None _MUTEXEDCONSTRAINT.fields_by_name['extraHoldTime']._serialized_options = b'\222?\0028 \212\265\030\007\010\003\020\350\007x\001' _MUTEXEDCONSTRAINT.fields_by_name['hasLock']._options = None @@ -93,7 +93,7 @@ _DEPRECATEDDIGITALCONSTRAINT.fields_by_name['delayedOn']._options = None _DEPRECATEDDIGITALCONSTRAINT.fields_by_name['delayedOn']._serialized_options = b'\222?\0028 \212\265\030\005\010\003\020\350\007' _DEPRECATEDDIGITALCONSTRAINT.fields_by_name['mutex']._options = None - _DEPRECATEDDIGITALCONSTRAINT.fields_by_name['mutex']._serialized_options = b'\222?\0028\020\212\265\030\002\030\010' + _DEPRECATEDDIGITALCONSTRAINT.fields_by_name['mutex']._serialized_options = b'\212\265\030\002\030\010' _DEPRECATEDDIGITALCONSTRAINT.fields_by_name['limiting']._options = None _DEPRECATEDDIGITALCONSTRAINT.fields_by_name['limiting']._serialized_options = b'\222?\002\030\003\212\265\030\002H\001' _DEPRECATEDDIGITALCONSTRAINT.fields_by_name['remaining']._options = None @@ -103,21 +103,21 @@ _globals['_VALUECONSTRAINT']._serialized_start=69 _globals['_VALUECONSTRAINT']._serialized_end=168 _globals['_BALANCEDCONSTRAINT']._serialized_start=171 - _globals['_BALANCEDCONSTRAINT']._serialized_end=330 - _globals['_DURATIONCONSTRAINT']._serialized_start=333 - _globals['_DURATIONCONSTRAINT']._serialized_end=477 - _globals['_MUTEXEDCONSTRAINT']._serialized_start=480 - _globals['_MUTEXEDCONSTRAINT']._serialized_end=725 - _globals['_ANALOGCONSTRAINTS']._serialized_start=728 - _globals['_ANALOGCONSTRAINTS']._serialized_end=923 - _globals['_DIGITALCONSTRAINTS']._serialized_start=926 - _globals['_DIGITALCONSTRAINTS']._serialized_end=1262 - _globals['_DEPRECATEDANALOGCONSTRAINT']._serialized_start=1265 - _globals['_DEPRECATEDANALOGCONSTRAINT']._serialized_end=1449 - _globals['_DEPRECATEDANALOGCONSTRAINTS']._serialized_start=1451 - _globals['_DEPRECATEDANALOGCONSTRAINTS']._serialized_end=1554 - _globals['_DEPRECATEDDIGITALCONSTRAINT']._serialized_start=1557 - _globals['_DEPRECATEDDIGITALCONSTRAINT']._serialized_end=1896 - _globals['_DEPRECATEDDIGITALCONSTRAINTS']._serialized_start=1898 - _globals['_DEPRECATEDDIGITALCONSTRAINTS']._serialized_end=2003 + _globals['_BALANCEDCONSTRAINT']._serialized_end=325 + _globals['_DURATIONCONSTRAINT']._serialized_start=328 + _globals['_DURATIONCONSTRAINT']._serialized_end=472 + _globals['_MUTEXEDCONSTRAINT']._serialized_start=475 + _globals['_MUTEXEDCONSTRAINT']._serialized_end=715 + _globals['_ANALOGCONSTRAINTS']._serialized_start=718 + _globals['_ANALOGCONSTRAINTS']._serialized_end=913 + _globals['_DIGITALCONSTRAINTS']._serialized_start=916 + _globals['_DIGITALCONSTRAINTS']._serialized_end=1252 + _globals['_DEPRECATEDANALOGCONSTRAINT']._serialized_start=1255 + _globals['_DEPRECATEDANALOGCONSTRAINT']._serialized_end=1439 + _globals['_DEPRECATEDANALOGCONSTRAINTS']._serialized_start=1441 + _globals['_DEPRECATEDANALOGCONSTRAINTS']._serialized_end=1544 + _globals['_DEPRECATEDDIGITALCONSTRAINT']._serialized_start=1547 + _globals['_DEPRECATEDDIGITALCONSTRAINT']._serialized_end=1881 + _globals['_DEPRECATEDDIGITALCONSTRAINTS']._serialized_start=1883 + _globals['_DEPRECATEDDIGITALCONSTRAINTS']._serialized_end=1988 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/DS2408_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/DS2408_pb2.py index cf8a4373..7ed61c20 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/DS2408_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/DS2408_pb2.py @@ -16,7 +16,7 @@ import IoArray_pb2 as IoArray__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0c\x44S2408.proto\x12\x0b\x62lox.DS2408\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\rIoArray.proto\"\xfe\x01\n\x05\x42lock\x12\x19\n\x07\x61\x64\x64ress\x18\x01 \x01(\x06\x42\x08\x8a\xb5\x18\x04 \x01x\x01\x12\x19\n\tconnected\x18\x06 \x01(\x08\x42\x06\x8a\xb5\x18\x02(\x01\x12\x38\n\x0b\x63onnectMode\x18\t \x01(\x0e\x32\x1b.blox.DS2408.PinConnectModeB\x06\x8a\xb5\x18\x02x\x01\x12$\n\x0coneWireBusId\x18\n \x01(\rB\x0e\x92?\x02\x38\x10\x8a\xb5\x18\x05\x18\x82\x02(\x01\x12\x36\n\x08\x63hannels\x18\x0b \x03(\x0b\x32\x17.blox.IoArray.IoChannelB\x0b\x92?\x02\x10\x08\x8a\xb5\x18\x02(\x01\x12\x19\n\x04pins\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\x0c\x8a\xb5\x18\x08\x18\xbd\x02J\x03\n\x0b\t*\xfc\x01\n\tChannelId\x12\x14\n\x10\x44S2408_CHAN_NONE\x10\x00\x12\x11\n\rDS2408_CHAN_A\x10\x01\x12\x11\n\rDS2408_CHAN_B\x10\x02\x12\x11\n\rDS2408_CHAN_C\x10\x03\x12\x11\n\rDS2408_CHAN_D\x10\x04\x12\x11\n\rDS2408_CHAN_E\x10\x05\x12\x11\n\rDS2408_CHAN_F\x10\x06\x12\x11\n\rDS2408_CHAN_G\x10\x07\x12\x11\n\rDS2408_CHAN_H\x10\x08\x12\x15\n\x11\x44S2408_VALVE_NONE\x10\x00\x12\x12\n\x0e\x44S2408_VALVE_A\x10\x05\x12\x12\n\x0e\x44S2408_VALVE_B\x10\x01\x1a\x02\x10\x01*9\n\x0ePinConnectMode\x12\x11\n\rCONNECT_VALVE\x10\x00\x12\x14\n\x10\x43ONNECT_ACTUATOR\x10\x01\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0c\x44S2408.proto\x12\x0b\x62lox.DS2408\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\rIoArray.proto\"\xf9\x01\n\x05\x42lock\x12\x19\n\x07\x61\x64\x64ress\x18\x01 \x01(\x06\x42\x08\x8a\xb5\x18\x04 \x01x\x01\x12\x19\n\tconnected\x18\x06 \x01(\x08\x42\x06\x8a\xb5\x18\x02(\x01\x12\x38\n\x0b\x63onnectMode\x18\t \x01(\x0e\x32\x1b.blox.DS2408.PinConnectModeB\x06\x8a\xb5\x18\x02x\x01\x12\x1f\n\x0coneWireBusId\x18\n \x01(\rB\t\x8a\xb5\x18\x05\x18\x82\x02(\x01\x12\x36\n\x08\x63hannels\x18\x0b \x03(\x0b\x32\x17.blox.IoArray.IoChannelB\x0b\x92?\x02\x10\x08\x8a\xb5\x18\x02(\x01\x12\x19\n\x04pins\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\x0c\x8a\xb5\x18\x08\x18\xbd\x02J\x03\n\x0b\t*\xfc\x01\n\tChannelId\x12\x14\n\x10\x44S2408_CHAN_NONE\x10\x00\x12\x11\n\rDS2408_CHAN_A\x10\x01\x12\x11\n\rDS2408_CHAN_B\x10\x02\x12\x11\n\rDS2408_CHAN_C\x10\x03\x12\x11\n\rDS2408_CHAN_D\x10\x04\x12\x11\n\rDS2408_CHAN_E\x10\x05\x12\x11\n\rDS2408_CHAN_F\x10\x06\x12\x11\n\rDS2408_CHAN_G\x10\x07\x12\x11\n\rDS2408_CHAN_H\x10\x08\x12\x15\n\x11\x44S2408_VALVE_NONE\x10\x00\x12\x12\n\x0e\x44S2408_VALVE_A\x10\x05\x12\x12\n\x0e\x44S2408_VALVE_B\x10\x01\x1a\x02\x10\x01*9\n\x0ePinConnectMode\x12\x11\n\rCONNECT_VALVE\x10\x00\x12\x14\n\x10\x43ONNECT_ACTUATOR\x10\x01\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -32,17 +32,17 @@ _BLOCK.fields_by_name['connectMode']._options = None _BLOCK.fields_by_name['connectMode']._serialized_options = b'\212\265\030\002x\001' _BLOCK.fields_by_name['oneWireBusId']._options = None - _BLOCK.fields_by_name['oneWireBusId']._serialized_options = b'\222?\0028\020\212\265\030\005\030\202\002(\001' + _BLOCK.fields_by_name['oneWireBusId']._serialized_options = b'\212\265\030\005\030\202\002(\001' _BLOCK.fields_by_name['channels']._options = None _BLOCK.fields_by_name['channels']._serialized_options = b'\222?\002\020\010\212\265\030\002(\001' _BLOCK.fields_by_name['pins']._options = None _BLOCK.fields_by_name['pins']._serialized_options = b'\222?\002\030\003\212\265\030\002H\001' _BLOCK._options = None _BLOCK._serialized_options = b'\212\265\030\010\030\275\002J\003\n\013\t' - _globals['_CHANNELID']._serialized_start=332 - _globals['_CHANNELID']._serialized_end=584 - _globals['_PINCONNECTMODE']._serialized_start=586 - _globals['_PINCONNECTMODE']._serialized_end=643 + _globals['_CHANNELID']._serialized_start=327 + _globals['_CHANNELID']._serialized_end=579 + _globals['_PINCONNECTMODE']._serialized_start=581 + _globals['_PINCONNECTMODE']._serialized_end=638 _globals['_BLOCK']._serialized_start=75 - _globals['_BLOCK']._serialized_end=329 + _globals['_BLOCK']._serialized_end=324 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/DS2413_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/DS2413_pb2.py index 1eb0155a..c64799e7 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/DS2413_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/DS2413_pb2.py @@ -16,7 +16,7 @@ import IoArray_pb2 as IoArray__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0c\x44S2413.proto\x12\x0b\x62lox.DS2413\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\rIoArray.proto\"\xc5\x01\n\x05\x42lock\x12\x19\n\x07\x61\x64\x64ress\x18\x01 \x01(\x06\x42\x08\x8a\xb5\x18\x04 \x01x\x01\x12\x19\n\tconnected\x18\x06 \x01(\x08\x42\x06\x8a\xb5\x18\x02(\x01\x12$\n\x0coneWireBusId\x18\x08 \x01(\rB\x0e\x92?\x02\x38\x10\x8a\xb5\x18\x05\x18\x82\x02(\x01\x12\x38\n\x08\x63hannels\x18\t \x03(\x0b\x32\x17.blox.IoArray.IoChannelB\r\x92?\x04\x10\x02x\x01\x8a\xb5\x18\x02(\x01\x12\x19\n\x04pins\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\x0b\x8a\xb5\x18\x07\x18\xbb\x02J\x02\n\t*G\n\tChannelId\x12\x14\n\x10\x44S2413_CHAN_NONE\x10\x00\x12\x11\n\rDS2413_CHAN_A\x10\x01\x12\x11\n\rDS2413_CHAN_B\x10\x02\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0c\x44S2413.proto\x12\x0b\x62lox.DS2413\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\rIoArray.proto\"\xc0\x01\n\x05\x42lock\x12\x19\n\x07\x61\x64\x64ress\x18\x01 \x01(\x06\x42\x08\x8a\xb5\x18\x04 \x01x\x01\x12\x19\n\tconnected\x18\x06 \x01(\x08\x42\x06\x8a\xb5\x18\x02(\x01\x12\x1f\n\x0coneWireBusId\x18\x08 \x01(\rB\t\x8a\xb5\x18\x05\x18\x82\x02(\x01\x12\x38\n\x08\x63hannels\x18\t \x03(\x0b\x32\x17.blox.IoArray.IoChannelB\r\x92?\x04\x10\x02x\x01\x8a\xb5\x18\x02(\x01\x12\x19\n\x04pins\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\x0b\x8a\xb5\x18\x07\x18\xbb\x02J\x02\n\t*G\n\tChannelId\x12\x14\n\x10\x44S2413_CHAN_NONE\x10\x00\x12\x11\n\rDS2413_CHAN_A\x10\x01\x12\x11\n\rDS2413_CHAN_B\x10\x02\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -28,15 +28,15 @@ _BLOCK.fields_by_name['connected']._options = None _BLOCK.fields_by_name['connected']._serialized_options = b'\212\265\030\002(\001' _BLOCK.fields_by_name['oneWireBusId']._options = None - _BLOCK.fields_by_name['oneWireBusId']._serialized_options = b'\222?\0028\020\212\265\030\005\030\202\002(\001' + _BLOCK.fields_by_name['oneWireBusId']._serialized_options = b'\212\265\030\005\030\202\002(\001' _BLOCK.fields_by_name['channels']._options = None _BLOCK.fields_by_name['channels']._serialized_options = b'\222?\004\020\002x\001\212\265\030\002(\001' _BLOCK.fields_by_name['pins']._options = None _BLOCK.fields_by_name['pins']._serialized_options = b'\222?\002\030\003\212\265\030\002H\001' _BLOCK._options = None _BLOCK._serialized_options = b'\212\265\030\007\030\273\002J\002\n\t' - _globals['_CHANNELID']._serialized_start=274 - _globals['_CHANNELID']._serialized_end=345 + _globals['_CHANNELID']._serialized_start=269 + _globals['_CHANNELID']._serialized_end=340 _globals['_BLOCK']._serialized_start=75 - _globals['_BLOCK']._serialized_end=272 + _globals['_BLOCK']._serialized_end=267 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/DigitalActuator_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/DigitalActuator_pb2.py index 4060d412..1f44d69a 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/DigitalActuator_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/DigitalActuator_pb2.py @@ -18,7 +18,7 @@ import Claims_pb2 as Claims__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x44igitalActuator.proto\x12\x14\x62lox.DigitalActuator\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\x11\x43onstraints.proto\x1a\rIoArray.proto\x1a\x0c\x43laims.proto\"\xad\x05\n\x05\x42lock\x12\x1f\n\x08hwDevice\x18\x01 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\nx\x01\x12\x1c\n\x07\x63hannel\x18\x02 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02x\x01\x12\x39\n\x0bstoredState\x18\x0b \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x08\x8a\xb5\x18\x04\x30\x01x\x01\x12:\n\x0c\x64\x65siredState\x18\x06 \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x08\x8a\xb5\x18\x04(\x01\x30\x01\x12\x33\n\x05state\x18\x03 \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x08\x8a\xb5\x18\x04(\x01\x30\x01\x12\x16\n\x06invert\x18\x04 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x45\n\rconstrainedBy\x18\x05 \x01(\x0b\x32..blox.Constraints.DeprecatedDigitalConstraints\x12\x41\n\x0b\x63onstraints\x18\r \x01(\x0b\x32$.blox.Constraints.DigitalConstraintsB\x06\x8a\xb5\x18\x02x\x01\x12P\n\x18transitionDurationPreset\x18\x07 \x01(\x0e\x32&.blox.IoArray.TransitionDurationPresetB\x06\x8a\xb5\x18\x02x\x01\x12.\n\x19transitionDurationSetting\x18\x08 \x01(\rB\x0b\x8a\xb5\x18\x07\x08\x03\x10\xe8\x07x\x01\x12,\n\x17transitionDurationValue\x18\t \x01(\rB\x0b\x8a\xb5\x18\x07\x08\x03\x10\xe8\x07(\x01\x12!\n\tclaimedBy\x18\n \x01(\rB\x0e\x92?\x02\x38\x10\x8a\xb5\x18\x05\x18\xff\x01(\x01\x12\x35\n\x0bsettingMode\x18\x0c \x01(\x0e\x32\x18.blox.Claims.SettingModeB\x06\x8a\xb5\x18\x02x\x01:\r\x8a\xb5\x18\t\x18\xbe\x02J\x04\x06\x15\x10\x11\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x44igitalActuator.proto\x12\x14\x62lox.DigitalActuator\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\x11\x43onstraints.proto\x1a\rIoArray.proto\x1a\x0c\x43laims.proto\"\xa3\x05\n\x05\x42lock\x12\x1a\n\x08hwDevice\x18\x01 \x01(\rB\x08\x8a\xb5\x18\x04\x18\nx\x01\x12\x1c\n\x07\x63hannel\x18\x02 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02x\x01\x12\x39\n\x0bstoredState\x18\x0b \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x08\x8a\xb5\x18\x04\x30\x01x\x01\x12:\n\x0c\x64\x65siredState\x18\x06 \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x08\x8a\xb5\x18\x04(\x01\x30\x01\x12\x33\n\x05state\x18\x03 \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x08\x8a\xb5\x18\x04(\x01\x30\x01\x12\x16\n\x06invert\x18\x04 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x45\n\rconstrainedBy\x18\x05 \x01(\x0b\x32..blox.Constraints.DeprecatedDigitalConstraints\x12\x41\n\x0b\x63onstraints\x18\r \x01(\x0b\x32$.blox.Constraints.DigitalConstraintsB\x06\x8a\xb5\x18\x02x\x01\x12P\n\x18transitionDurationPreset\x18\x07 \x01(\x0e\x32&.blox.IoArray.TransitionDurationPresetB\x06\x8a\xb5\x18\x02x\x01\x12.\n\x19transitionDurationSetting\x18\x08 \x01(\rB\x0b\x8a\xb5\x18\x07\x08\x03\x10\xe8\x07x\x01\x12,\n\x17transitionDurationValue\x18\t \x01(\rB\x0b\x8a\xb5\x18\x07\x08\x03\x10\xe8\x07(\x01\x12\x1c\n\tclaimedBy\x18\n \x01(\rB\t\x8a\xb5\x18\x05\x18\xff\x01(\x01\x12\x35\n\x0bsettingMode\x18\x0c \x01(\x0e\x32\x18.blox.Claims.SettingModeB\x06\x8a\xb5\x18\x02x\x01:\r\x8a\xb5\x18\t\x18\xbe\x02J\x04\x06\x15\x10\x11\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -26,7 +26,7 @@ if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _BLOCK.fields_by_name['hwDevice']._options = None - _BLOCK.fields_by_name['hwDevice']._serialized_options = b'\222?\0028\020\212\265\030\004\030\nx\001' + _BLOCK.fields_by_name['hwDevice']._serialized_options = b'\212\265\030\004\030\nx\001' _BLOCK.fields_by_name['channel']._options = None _BLOCK.fields_by_name['channel']._serialized_options = b'\222?\0028\010\212\265\030\002x\001' _BLOCK.fields_by_name['storedState']._options = None @@ -46,11 +46,11 @@ _BLOCK.fields_by_name['transitionDurationValue']._options = None _BLOCK.fields_by_name['transitionDurationValue']._serialized_options = b'\212\265\030\007\010\003\020\350\007(\001' _BLOCK.fields_by_name['claimedBy']._options = None - _BLOCK.fields_by_name['claimedBy']._serialized_options = b'\222?\0028\020\212\265\030\005\030\377\001(\001' + _BLOCK.fields_by_name['claimedBy']._serialized_options = b'\212\265\030\005\030\377\001(\001' _BLOCK.fields_by_name['settingMode']._options = None _BLOCK.fields_by_name['settingMode']._serialized_options = b'\212\265\030\002x\001' _BLOCK._options = None _BLOCK._serialized_options = b'\212\265\030\t\030\276\002J\004\006\025\020\021' _globals['_BLOCK']._serialized_start=126 - _globals['_BLOCK']._serialized_end=811 + _globals['_BLOCK']._serialized_end=801 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/DigitalInput_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/DigitalInput_pb2.py index 00ce4435..7a37c859 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/DigitalInput_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/DigitalInput_pb2.py @@ -16,7 +16,7 @@ import IoArray_pb2 as IoArray__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12\x44igitalInput.proto\x12\x11\x62lox.DigitalInput\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\rIoArray.proto\"\xb6\x02\n\x05\x42lock\x12\x1f\n\x08hwDevice\x18\x01 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\nx\x01\x12\x1c\n\x07\x63hannel\x18\x02 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02x\x01\x12\x33\n\x05state\x18\x03 \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x08\x8a\xb5\x18\x04(\x01\x30\x01\x12\x16\n\x06invert\x18\x04 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12;\n\x08\x62\x65havior\x18\x05 \x01(\x0e\x32!.blox.DigitalInput.ToggleBehaviorB\x06\x8a\xb5\x18\x02x\x01\x12\"\n\rminActiveTime\x18\x06 \x01(\rB\x0b\x8a\xb5\x18\x07\x08\x03\x10\xe8\x07x\x01\x12\x33\n\x07hwState\x18\x07 \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x06\x8a\xb5\x18\x02(\x01:\x0b\x8a\xb5\x18\x07\x18\xca\x02J\x02\x1b\x11*-\n\x0eToggleBehavior\x12\n\n\x06\x44IRECT\x10\x00\x12\x0f\n\x0b\x41LTERNATING\x10\x01\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12\x44igitalInput.proto\x12\x11\x62lox.DigitalInput\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\rIoArray.proto\"\xb1\x02\n\x05\x42lock\x12\x1a\n\x08hwDevice\x18\x01 \x01(\rB\x08\x8a\xb5\x18\x04\x18\nx\x01\x12\x1c\n\x07\x63hannel\x18\x02 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02x\x01\x12\x33\n\x05state\x18\x03 \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x08\x8a\xb5\x18\x04(\x01\x30\x01\x12\x16\n\x06invert\x18\x04 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12;\n\x08\x62\x65havior\x18\x05 \x01(\x0e\x32!.blox.DigitalInput.ToggleBehaviorB\x06\x8a\xb5\x18\x02x\x01\x12\"\n\rminActiveTime\x18\x06 \x01(\rB\x0b\x8a\xb5\x18\x07\x08\x03\x10\xe8\x07x\x01\x12\x33\n\x07hwState\x18\x07 \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x06\x8a\xb5\x18\x02(\x01:\x0b\x8a\xb5\x18\x07\x18\xca\x02J\x02\x1b\x11*-\n\x0eToggleBehavior\x12\n\n\x06\x44IRECT\x10\x00\x12\x0f\n\x0b\x41LTERNATING\x10\x01\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -24,7 +24,7 @@ if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _BLOCK.fields_by_name['hwDevice']._options = None - _BLOCK.fields_by_name['hwDevice']._serialized_options = b'\222?\0028\020\212\265\030\004\030\nx\001' + _BLOCK.fields_by_name['hwDevice']._serialized_options = b'\212\265\030\004\030\nx\001' _BLOCK.fields_by_name['channel']._options = None _BLOCK.fields_by_name['channel']._serialized_options = b'\222?\0028\010\212\265\030\002x\001' _BLOCK.fields_by_name['state']._options = None @@ -39,8 +39,8 @@ _BLOCK.fields_by_name['hwState']._serialized_options = b'\212\265\030\002(\001' _BLOCK._options = None _BLOCK._serialized_options = b'\212\265\030\007\030\312\002J\002\033\021' - _globals['_TOGGLEBEHAVIOR']._serialized_start=399 - _globals['_TOGGLEBEHAVIOR']._serialized_end=444 + _globals['_TOGGLEBEHAVIOR']._serialized_start=394 + _globals['_TOGGLEBEHAVIOR']._serialized_end=439 _globals['_BLOCK']._serialized_start=87 - _globals['_BLOCK']._serialized_end=397 + _globals['_BLOCK']._serialized_end=392 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/DisplaySettings_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/DisplaySettings_pb2.py index bf13210f..99cdf267 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/DisplaySettings_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/DisplaySettings_pb2.py @@ -15,7 +15,7 @@ import nanopb_pb2 as nanopb__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x44isplaySettings.proto\x12\x14\x62lox.DisplaySettings\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\"\x85\x02\n\x06Widget\x12\x18\n\x03pos\x18\x01 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02x\x01\x12\x1e\n\x05\x63olor\x18\x02 \x01(\x0c\x42\x0f\x92?\x04\x08\x03x\x01\x8a\xb5\x18\x04\x38\x01x\x01\x12\x19\n\x04name\x18\x03 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01\x12#\n\ntempSensor\x18\n \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x02x\x01H\x00\x12+\n\x12setpointSensorPair\x18\x0b \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x04x\x01H\x00\x12\'\n\x0e\x61\x63tuatorAnalog\x18\x0c \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x05x\x01H\x00\x12\x1d\n\x03pid\x18\x0e \x01(\rB\x0e\x92?\x02\x38\x10\x8a\xb5\x18\x05\x18\xb0\x02x\x01H\x00\x42\x0c\n\nWidgetType\"\xc6\x01\n\x05\x42lock\x12:\n\x07widgets\x18\x01 \x03(\x0b\x32\x1c.blox.DisplaySettings.WidgetB\x0b\x92?\x02\x10\x06\x8a\xb5\x18\x02x\x01\x12\x19\n\x04name\x18\x02 \x01(\tB\x0b\x92?\x02\x08(\x8a\xb5\x18\x02x\x01\x12\x1f\n\nbrightness\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12\x1d\n\x08timeZone\x18[ \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12\x1d\n\x08tempUnit\x18\\ \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\x07\x8a\xb5\x18\x03\x18\xba\x02\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x44isplaySettings.proto\x12\x14\x62lox.DisplaySettings\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\"\xf1\x01\n\x06Widget\x12\x18\n\x03pos\x18\x01 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02x\x01\x12\x1e\n\x05\x63olor\x18\x02 \x01(\x0c\x42\x0f\x92?\x04\x08\x03x\x01\x8a\xb5\x18\x04\x38\x01x\x01\x12\x19\n\x04name\x18\x03 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01\x12\x1e\n\ntempSensor\x18\n \x01(\rB\x08\x8a\xb5\x18\x04\x18\x02x\x01H\x00\x12&\n\x12setpointSensorPair\x18\x0b \x01(\rB\x08\x8a\xb5\x18\x04\x18\x04x\x01H\x00\x12\"\n\x0e\x61\x63tuatorAnalog\x18\x0c \x01(\rB\x08\x8a\xb5\x18\x04\x18\x05x\x01H\x00\x12\x18\n\x03pid\x18\x0e \x01(\rB\t\x8a\xb5\x18\x05\x18\xb0\x02x\x01H\x00\x42\x0c\n\nWidgetType\"\xc6\x01\n\x05\x42lock\x12:\n\x07widgets\x18\x01 \x03(\x0b\x32\x1c.blox.DisplaySettings.WidgetB\x0b\x92?\x02\x10\x06\x8a\xb5\x18\x02x\x01\x12\x19\n\x04name\x18\x02 \x01(\tB\x0b\x92?\x02\x08(\x8a\xb5\x18\x02x\x01\x12\x1f\n\nbrightness\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12\x1d\n\x08timeZone\x18[ \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12\x1d\n\x08tempUnit\x18\\ \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\x07\x8a\xb5\x18\x03\x18\xba\x02\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -29,13 +29,13 @@ _WIDGET.fields_by_name['name']._options = None _WIDGET.fields_by_name['name']._serialized_options = b'\222?\002\010\020\212\265\030\002x\001' _WIDGET.fields_by_name['tempSensor']._options = None - _WIDGET.fields_by_name['tempSensor']._serialized_options = b'\222?\0028\020\212\265\030\004\030\002x\001' + _WIDGET.fields_by_name['tempSensor']._serialized_options = b'\212\265\030\004\030\002x\001' _WIDGET.fields_by_name['setpointSensorPair']._options = None - _WIDGET.fields_by_name['setpointSensorPair']._serialized_options = b'\222?\0028\020\212\265\030\004\030\004x\001' + _WIDGET.fields_by_name['setpointSensorPair']._serialized_options = b'\212\265\030\004\030\004x\001' _WIDGET.fields_by_name['actuatorAnalog']._options = None - _WIDGET.fields_by_name['actuatorAnalog']._serialized_options = b'\222?\0028\020\212\265\030\004\030\005x\001' + _WIDGET.fields_by_name['actuatorAnalog']._serialized_options = b'\212\265\030\004\030\005x\001' _WIDGET.fields_by_name['pid']._options = None - _WIDGET.fields_by_name['pid']._serialized_options = b'\222?\0028\020\212\265\030\005\030\260\002x\001' + _WIDGET.fields_by_name['pid']._serialized_options = b'\212\265\030\005\030\260\002x\001' _BLOCK.fields_by_name['widgets']._options = None _BLOCK.fields_by_name['widgets']._serialized_options = b'\222?\002\020\006\212\265\030\002x\001' _BLOCK.fields_by_name['name']._options = None @@ -49,7 +49,7 @@ _BLOCK._options = None _BLOCK._serialized_options = b'\212\265\030\003\030\272\002' _globals['_WIDGET']._serialized_start=78 - _globals['_WIDGET']._serialized_end=339 - _globals['_BLOCK']._serialized_start=342 - _globals['_BLOCK']._serialized_end=540 + _globals['_WIDGET']._serialized_end=319 + _globals['_BLOCK']._serialized_start=322 + _globals['_BLOCK']._serialized_end=520 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/FastPwm_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/FastPwm_pb2.py index 4f72ba68..4453469a 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/FastPwm_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/FastPwm_pb2.py @@ -18,7 +18,7 @@ import Claims_pb2 as Claims__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rFastPwm.proto\x12\x0c\x62lox.FastPwm\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\x11\x43onstraints.proto\x1a\rIoArray.proto\x1a\x0c\x43laims.proto\"\xe8\x05\n\x05\x42lock\x12\x17\n\x07\x65nabled\x18\x08 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x1f\n\x08hwDevice\x18\x01 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\nx\x01\x12\x1c\n\x07\x63hannel\x18\x02 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02x\x01\x12\'\n\rstoredSetting\x18\x0e \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 0\x01x\x01\x12(\n\x0e\x64\x65siredSetting\x18\x05 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12!\n\x07setting\x18\x04 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12\x1f\n\x05value\x18\x06 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12\x16\n\x06invert\x18\x0c \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x35\n\tfrequency\x18\x03 \x01(\x0e\x32\x1a.blox.IoArray.PwmFrequencyB\x06\x8a\xb5\x18\x02x\x01\x12\x44\n\rconstrainedBy\x18\x07 \x01(\x0b\x32-.blox.Constraints.DeprecatedAnalogConstraints\x12@\n\x0b\x63onstraints\x18\x10 \x01(\x0b\x32#.blox.Constraints.AnalogConstraintsB\x06\x8a\xb5\x18\x02x\x01\x12P\n\x18transitionDurationPreset\x18\t \x01(\x0e\x32&.blox.IoArray.TransitionDurationPresetB\x06\x8a\xb5\x18\x02x\x01\x12.\n\x19transitionDurationSetting\x18\n \x01(\rB\x0b\x8a\xb5\x18\x07\x08\x03\x10\xe8\x07x\x01\x12,\n\x17transitionDurationValue\x18\x0b \x01(\rB\x0b\x8a\xb5\x18\x07\x08\x03\x10\xe8\x07(\x01\x12!\n\tclaimedBy\x18\r \x01(\rB\x0e\x92?\x02\x38\x10\x8a\xb5\x18\x05\x18\xff\x01(\x01\x12\x35\n\x0bsettingMode\x18\x0f \x01(\x0e\x32\x18.blox.Claims.SettingModeB\x06\x8a\xb5\x18\x02x\x01:\x0f\x8a\xb5\x18\x0b\x18\xc9\x02J\x06\x01\x13\x05\x0f\x10\x11\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rFastPwm.proto\x12\x0c\x62lox.FastPwm\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\x11\x43onstraints.proto\x1a\rIoArray.proto\x1a\x0c\x43laims.proto\"\xde\x05\n\x05\x42lock\x12\x17\n\x07\x65nabled\x18\x08 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x1a\n\x08hwDevice\x18\x01 \x01(\rB\x08\x8a\xb5\x18\x04\x18\nx\x01\x12\x1c\n\x07\x63hannel\x18\x02 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02x\x01\x12\'\n\rstoredSetting\x18\x0e \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 0\x01x\x01\x12(\n\x0e\x64\x65siredSetting\x18\x05 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12!\n\x07setting\x18\x04 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12\x1f\n\x05value\x18\x06 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12\x16\n\x06invert\x18\x0c \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x35\n\tfrequency\x18\x03 \x01(\x0e\x32\x1a.blox.IoArray.PwmFrequencyB\x06\x8a\xb5\x18\x02x\x01\x12\x44\n\rconstrainedBy\x18\x07 \x01(\x0b\x32-.blox.Constraints.DeprecatedAnalogConstraints\x12@\n\x0b\x63onstraints\x18\x10 \x01(\x0b\x32#.blox.Constraints.AnalogConstraintsB\x06\x8a\xb5\x18\x02x\x01\x12P\n\x18transitionDurationPreset\x18\t \x01(\x0e\x32&.blox.IoArray.TransitionDurationPresetB\x06\x8a\xb5\x18\x02x\x01\x12.\n\x19transitionDurationSetting\x18\n \x01(\rB\x0b\x8a\xb5\x18\x07\x08\x03\x10\xe8\x07x\x01\x12,\n\x17transitionDurationValue\x18\x0b \x01(\rB\x0b\x8a\xb5\x18\x07\x08\x03\x10\xe8\x07(\x01\x12\x1c\n\tclaimedBy\x18\r \x01(\rB\t\x8a\xb5\x18\x05\x18\xff\x01(\x01\x12\x35\n\x0bsettingMode\x18\x0f \x01(\x0e\x32\x18.blox.Claims.SettingModeB\x06\x8a\xb5\x18\x02x\x01:\x0f\x8a\xb5\x18\x0b\x18\xc9\x02J\x06\x01\x13\x05\x0f\x10\x11\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -28,7 +28,7 @@ _BLOCK.fields_by_name['enabled']._options = None _BLOCK.fields_by_name['enabled']._serialized_options = b'\212\265\030\002x\001' _BLOCK.fields_by_name['hwDevice']._options = None - _BLOCK.fields_by_name['hwDevice']._serialized_options = b'\222?\0028\020\212\265\030\004\030\nx\001' + _BLOCK.fields_by_name['hwDevice']._serialized_options = b'\212\265\030\004\030\nx\001' _BLOCK.fields_by_name['channel']._options = None _BLOCK.fields_by_name['channel']._serialized_options = b'\222?\0028\010\212\265\030\002x\001' _BLOCK.fields_by_name['storedSetting']._options = None @@ -52,11 +52,11 @@ _BLOCK.fields_by_name['transitionDurationValue']._options = None _BLOCK.fields_by_name['transitionDurationValue']._serialized_options = b'\212\265\030\007\010\003\020\350\007(\001' _BLOCK.fields_by_name['claimedBy']._options = None - _BLOCK.fields_by_name['claimedBy']._serialized_options = b'\222?\0028\020\212\265\030\005\030\377\001(\001' + _BLOCK.fields_by_name['claimedBy']._serialized_options = b'\212\265\030\005\030\377\001(\001' _BLOCK.fields_by_name['settingMode']._options = None _BLOCK.fields_by_name['settingMode']._serialized_options = b'\212\265\030\002x\001' _BLOCK._options = None _BLOCK._serialized_options = b'\212\265\030\013\030\311\002J\006\001\023\005\017\020\021' _globals['_BLOCK']._serialized_start=110 - _globals['_BLOCK']._serialized_end=854 + _globals['_BLOCK']._serialized_end=844 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/GpioModule_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/GpioModule_pb2.py index cae95031..29c076b5 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/GpioModule_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/GpioModule_pb2.py @@ -15,7 +15,7 @@ import nanopb_pb2 as nanopb__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10GpioModule.proto\x12\x0f\x62lox.GpioModule\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\"\x9e\x02\n\x07\x43hannel\x12\x17\n\x02id\x18\x01 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02x\x01\x12\x37\n\ndeviceType\x18\x02 \x01(\x0e\x32\x1b.blox.GpioModule.DeviceTypeB\x06\x8a\xb5\x18\x02x\x01\x12\x1f\n\x08pinsMask\x18\x03 \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04P\x01x\x01\x12\x1a\n\x05width\x18\x04 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02x\x01\x12\x19\n\x04name\x18\x05 \x01(\tB\x0b\x92?\x02\x08 \x8a\xb5\x18\x02x\x01\x12#\n\x0c\x63\x61pabilities\x18\x06 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04(\x01P\x01\x12!\n\tclaimedBy\x18\x07 \x01(\rB\x0e\x92?\x02\x38\x10\x8a\xb5\x18\x05\x18\xff\x01(\x01\x12!\n\nerrorFlags\x18\x08 \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04P\x01x\x01\"\x89\x04\n\x06Status\x12#\n\x0cmoduleStatus\x18\x03 \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12$\n\rpullUpDesired\x18\x04 \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12#\n\x0cpullUpStatus\x18\x05 \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12\'\n\x10pullUpWhenActive\x18\x06 \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12)\n\x12pullUpWhenInactive\x18\x07 \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12&\n\x0fpullDownDesired\x18\x08 \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12%\n\x0epullDownStatus\x18\t \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12)\n\x12pullDownWhenActive\x18\n \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12+\n\x14pullDownWhenInactive\x18\x0b \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12\"\n\x0boverCurrent\x18\x0c \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12\x1f\n\x08openLoad\x18\r \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12&\n\x0f\x66\x61ultsHistory5m\x18\x0f \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12\'\n\x10\x66\x61ultsHistory60m\x18\x10 \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01*\xa9\x05\n\nDeviceType\x12\x11\n\rGPIO_DEV_NONE\x10\x00\x12\x13\n\x0fGPIO_DEV_SSR_2P\x10\x01\x12\x13\n\x0fGPIO_DEV_SSR_1P\x10\x02\x12 \n\x1cGPIO_DEV_MECHANICAL_RELAY_2P\x10\x03\x12*\n&GPIO_DEV_MECHANICAL_RELAY_1P_HIGH_SIDE\x10\x04\x12)\n%GPIO_DEV_MECHANICAL_RELAY_1P_LOW_SIDE\x10\x05\x12\x14\n\x10GPIO_DEV_COIL_2P\x10\x06\x12\"\n\x1eGPIO_DEV_COIL_2P_BIDIRECTIONAL\x10\x07\x12\x1e\n\x1aGPIO_DEV_COIL_1P_HIGH_SIDE\x10\x08\x12\x1d\n\x19GPIO_DEV_COIL_1P_LOW_SIDE\x10\t\x12\x15\n\x11GPIO_DEV_MOTOR_2P\x10\n\x12#\n\x1fGPIO_DEV_MOTOR_2P_BIDIRECTIONAL\x10\x0b\x12\x1f\n\x1bGPIO_DEV_MOTOR_1P_HIGH_SIDE\x10\x0c\x12\x1e\n\x1aGPIO_DEV_MOTOR_1P_LOW_SIDE\x10\r\x12\"\n\x1eGPIO_DEV_DETECT_LOW_CURRENT_2P\x10\x0e\x12&\n\"GPIO_DEV_DETECT_LOW_CURRENT_1P_GND\x10\x0f\x12\x15\n\x11GPIO_DEV_POWER_1P\x10\x11\x12)\n%GPIO_DEV_DETECT_HIGH_CURRENT_1P_POWER\x10\x12\x12\x13\n\x0fGPIO_DEV_GND_1P\x10\x13\x12\'\n#GPIO_DEV_DETECT_HIGH_CURRENT_1P_GND\x10\x14\x12#\n\x1fGPIO_DEV_DETECT_HIGH_CURRENT_2P\x10\x15*\x86\x02\n\nErrorFlags\x12\x11\n\rGPIO_ERR_NONE\x10\x00\x12\x1b\n\x17GPIO_ERR_POWER_ON_RESET\x10\x01\x12\x18\n\x14GPIO_ERR_OVERVOLTAGE\x10\x02\x12\x19\n\x15GPIO_ERR_UNDERVOLTAGE\x10\x04\x12\x18\n\x14GPIO_ERR_OVERCURRENT\x10\x08\x12\x16\n\x12GPIO_ERR_OPEN_LOAD\x10\x10\x12$\n GPIO_ERR_OVERTEMPERATURE_WARNING\x10 \x12\"\n\x1eGPIO_ERR_OVERTEMPERATURE_ERROR\x10@\x12\x17\n\x12GPIO_ERR_SPI_ERROR\x10\x80\x01\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10GpioModule.proto\x12\x0f\x62lox.GpioModule\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\"\x99\x02\n\x07\x43hannel\x12\x17\n\x02id\x18\x01 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02x\x01\x12\x37\n\ndeviceType\x18\x02 \x01(\x0e\x32\x1b.blox.GpioModule.DeviceTypeB\x06\x8a\xb5\x18\x02x\x01\x12\x1f\n\x08pinsMask\x18\x03 \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04P\x01x\x01\x12\x1a\n\x05width\x18\x04 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02x\x01\x12\x19\n\x04name\x18\x05 \x01(\tB\x0b\x92?\x02\x08 \x8a\xb5\x18\x02x\x01\x12#\n\x0c\x63\x61pabilities\x18\x06 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04(\x01P\x01\x12\x1c\n\tclaimedBy\x18\x07 \x01(\rB\t\x8a\xb5\x18\x05\x18\xff\x01(\x01\x12!\n\nerrorFlags\x18\x08 \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04P\x01x\x01\"\x89\x04\n\x06Status\x12#\n\x0cmoduleStatus\x18\x03 \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12$\n\rpullUpDesired\x18\x04 \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12#\n\x0cpullUpStatus\x18\x05 \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12\'\n\x10pullUpWhenActive\x18\x06 \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12)\n\x12pullUpWhenInactive\x18\x07 \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12&\n\x0fpullDownDesired\x18\x08 \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12%\n\x0epullDownStatus\x18\t \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12)\n\x12pullDownWhenActive\x18\n \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12+\n\x14pullDownWhenInactive\x18\x0b \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12\"\n\x0boverCurrent\x18\x0c \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12\x1f\n\x08openLoad\x18\r \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12&\n\x0f\x66\x61ultsHistory5m\x18\x0f \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01\x12\'\n\x10\x66\x61ultsHistory60m\x18\x10 \x01(\rB\r\x92?\x02\x38\x08\x8a\xb5\x18\x04(\x01P\x01*\xa9\x05\n\nDeviceType\x12\x11\n\rGPIO_DEV_NONE\x10\x00\x12\x13\n\x0fGPIO_DEV_SSR_2P\x10\x01\x12\x13\n\x0fGPIO_DEV_SSR_1P\x10\x02\x12 \n\x1cGPIO_DEV_MECHANICAL_RELAY_2P\x10\x03\x12*\n&GPIO_DEV_MECHANICAL_RELAY_1P_HIGH_SIDE\x10\x04\x12)\n%GPIO_DEV_MECHANICAL_RELAY_1P_LOW_SIDE\x10\x05\x12\x14\n\x10GPIO_DEV_COIL_2P\x10\x06\x12\"\n\x1eGPIO_DEV_COIL_2P_BIDIRECTIONAL\x10\x07\x12\x1e\n\x1aGPIO_DEV_COIL_1P_HIGH_SIDE\x10\x08\x12\x1d\n\x19GPIO_DEV_COIL_1P_LOW_SIDE\x10\t\x12\x15\n\x11GPIO_DEV_MOTOR_2P\x10\n\x12#\n\x1fGPIO_DEV_MOTOR_2P_BIDIRECTIONAL\x10\x0b\x12\x1f\n\x1bGPIO_DEV_MOTOR_1P_HIGH_SIDE\x10\x0c\x12\x1e\n\x1aGPIO_DEV_MOTOR_1P_LOW_SIDE\x10\r\x12\"\n\x1eGPIO_DEV_DETECT_LOW_CURRENT_2P\x10\x0e\x12&\n\"GPIO_DEV_DETECT_LOW_CURRENT_1P_GND\x10\x0f\x12\x15\n\x11GPIO_DEV_POWER_1P\x10\x11\x12)\n%GPIO_DEV_DETECT_HIGH_CURRENT_1P_POWER\x10\x12\x12\x13\n\x0fGPIO_DEV_GND_1P\x10\x13\x12\'\n#GPIO_DEV_DETECT_HIGH_CURRENT_1P_GND\x10\x14\x12#\n\x1fGPIO_DEV_DETECT_HIGH_CURRENT_2P\x10\x15*\x86\x02\n\nErrorFlags\x12\x11\n\rGPIO_ERR_NONE\x10\x00\x12\x1b\n\x17GPIO_ERR_POWER_ON_RESET\x10\x01\x12\x18\n\x14GPIO_ERR_OVERVOLTAGE\x10\x02\x12\x19\n\x15GPIO_ERR_UNDERVOLTAGE\x10\x04\x12\x18\n\x14GPIO_ERR_OVERCURRENT\x10\x08\x12\x16\n\x12GPIO_ERR_OPEN_LOAD\x10\x10\x12$\n GPIO_ERR_OVERTEMPERATURE_WARNING\x10 \x12\"\n\x1eGPIO_ERR_OVERTEMPERATURE_ERROR\x10@\x12\x17\n\x12GPIO_ERR_SPI_ERROR\x10\x80\x01\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -35,7 +35,7 @@ _CHANNEL.fields_by_name['capabilities']._options = None _CHANNEL.fields_by_name['capabilities']._serialized_options = b'\222?\0028\020\212\265\030\004(\001P\001' _CHANNEL.fields_by_name['claimedBy']._options = None - _CHANNEL.fields_by_name['claimedBy']._serialized_options = b'\222?\0028\020\212\265\030\005\030\377\001(\001' + _CHANNEL.fields_by_name['claimedBy']._serialized_options = b'\212\265\030\005\030\377\001(\001' _CHANNEL.fields_by_name['errorFlags']._options = None _CHANNEL.fields_by_name['errorFlags']._serialized_options = b'\222?\0028\010\212\265\030\004P\001x\001' _STATUS.fields_by_name['moduleStatus']._options = None @@ -64,12 +64,12 @@ _STATUS.fields_by_name['faultsHistory5m']._serialized_options = b'\222?\0028\010\212\265\030\004(\001P\001' _STATUS.fields_by_name['faultsHistory60m']._options = None _STATUS.fields_by_name['faultsHistory60m']._serialized_options = b'\222?\0028\010\212\265\030\004(\001P\001' - _globals['_DEVICETYPE']._serialized_start=881 - _globals['_DEVICETYPE']._serialized_end=1562 - _globals['_ERRORFLAGS']._serialized_start=1565 - _globals['_ERRORFLAGS']._serialized_end=1827 + _globals['_DEVICETYPE']._serialized_start=876 + _globals['_DEVICETYPE']._serialized_end=1557 + _globals['_ERRORFLAGS']._serialized_start=1560 + _globals['_ERRORFLAGS']._serialized_end=1822 _globals['_CHANNEL']._serialized_start=68 - _globals['_CHANNEL']._serialized_end=354 - _globals['_STATUS']._serialized_start=357 - _globals['_STATUS']._serialized_end=878 + _globals['_CHANNEL']._serialized_end=349 + _globals['_STATUS']._serialized_start=352 + _globals['_STATUS']._serialized_end=873 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/IoArray_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/IoArray_pb2.py index b7df0078..e4bc2330 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/IoArray_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/IoArray_pb2.py @@ -15,7 +15,7 @@ import brewblox_pb2 as brewblox__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rIoArray.proto\x12\x0c\x62lox.IoArray\x1a\x0cnanopb.proto\x1a\x0e\x62rewblox.proto\"l\n\tIoChannel\x12\x17\n\x02id\x18\x01 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02(\x01\x12#\n\x0c\x63\x61pabilities\x18\x02 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04(\x01P\x01\x12!\n\tclaimedBy\x18\x03 \x01(\rB\x0e\x92?\x02\x38\x10\x8a\xb5\x18\x05\x18\xff\x01(\x01*\x85\x01\n\x0c\x44igitalState\x12\x12\n\x0eSTATE_INACTIVE\x10\x00\x12\x10\n\x0cSTATE_ACTIVE\x10\x01\x12\x11\n\rSTATE_UNKNOWN\x10\x02\x12\x11\n\rSTATE_REVERSE\x10\x03\x12\x0c\n\x08Inactive\x10\x00\x12\n\n\x06\x41\x63tive\x10\x01\x12\x0b\n\x07Unknown\x10\x02\x1a\x02\x10\x01*^\n\x18TransitionDurationPreset\x12\n\n\x06ST_OFF\x10\x00\x12\x0b\n\x07ST_FAST\x10\x01\x12\r\n\tST_MEDIUM\x10\x02\x12\x0b\n\x07ST_SLOW\x10\x03\x12\r\n\tST_CUSTOM\x10\x04*\x85\x02\n\x13\x43hannelCapabilities\x12\x16\n\x12\x43HAN_SUPPORTS_NONE\x10\x00\x12 \n\x1c\x43HAN_SUPPORTS_DIGITAL_OUTPUT\x10\x01\x12\x1a\n\x16\x43HAN_SUPPORTS_PWM_80HZ\x10\x02\x12\x1b\n\x17\x43HAN_SUPPORTS_PWM_100HZ\x10\x04\x12\x1b\n\x17\x43HAN_SUPPORTS_PWM_200HZ\x10\x08\x12\x1c\n\x18\x43HAN_SUPPORTS_PWM_2000HZ\x10\x10\x12\x1f\n\x1b\x43HAN_SUPPORTS_BIDIRECTIONAL\x10 \x12\x1f\n\x1b\x43HAN_SUPPORTS_DIGITAL_INPUT\x10@*^\n\x0cPwmFrequency\x12\x11\n\rPWM_FREQ_80HZ\x10\x00\x12\x12\n\x0ePWM_FREQ_100HZ\x10\x01\x12\x12\n\x0ePWM_FREQ_200HZ\x10\x02\x12\x13\n\x0fPWM_FREQ_2000HZ\x10\x03\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rIoArray.proto\x12\x0c\x62lox.IoArray\x1a\x0cnanopb.proto\x1a\x0e\x62rewblox.proto\"g\n\tIoChannel\x12\x17\n\x02id\x18\x01 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02(\x01\x12#\n\x0c\x63\x61pabilities\x18\x02 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04(\x01P\x01\x12\x1c\n\tclaimedBy\x18\x03 \x01(\rB\t\x8a\xb5\x18\x05\x18\xff\x01(\x01*\x85\x01\n\x0c\x44igitalState\x12\x12\n\x0eSTATE_INACTIVE\x10\x00\x12\x10\n\x0cSTATE_ACTIVE\x10\x01\x12\x11\n\rSTATE_UNKNOWN\x10\x02\x12\x11\n\rSTATE_REVERSE\x10\x03\x12\x0c\n\x08Inactive\x10\x00\x12\n\n\x06\x41\x63tive\x10\x01\x12\x0b\n\x07Unknown\x10\x02\x1a\x02\x10\x01*^\n\x18TransitionDurationPreset\x12\n\n\x06ST_OFF\x10\x00\x12\x0b\n\x07ST_FAST\x10\x01\x12\r\n\tST_MEDIUM\x10\x02\x12\x0b\n\x07ST_SLOW\x10\x03\x12\r\n\tST_CUSTOM\x10\x04*\x85\x02\n\x13\x43hannelCapabilities\x12\x16\n\x12\x43HAN_SUPPORTS_NONE\x10\x00\x12 \n\x1c\x43HAN_SUPPORTS_DIGITAL_OUTPUT\x10\x01\x12\x1a\n\x16\x43HAN_SUPPORTS_PWM_80HZ\x10\x02\x12\x1b\n\x17\x43HAN_SUPPORTS_PWM_100HZ\x10\x04\x12\x1b\n\x17\x43HAN_SUPPORTS_PWM_200HZ\x10\x08\x12\x1c\n\x18\x43HAN_SUPPORTS_PWM_2000HZ\x10\x10\x12\x1f\n\x1b\x43HAN_SUPPORTS_BIDIRECTIONAL\x10 \x12\x1f\n\x1b\x43HAN_SUPPORTS_DIGITAL_INPUT\x10@*^\n\x0cPwmFrequency\x12\x11\n\rPWM_FREQ_80HZ\x10\x00\x12\x12\n\x0ePWM_FREQ_100HZ\x10\x01\x12\x12\n\x0ePWM_FREQ_200HZ\x10\x02\x12\x13\n\x0fPWM_FREQ_2000HZ\x10\x03\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -29,15 +29,15 @@ _IOCHANNEL.fields_by_name['capabilities']._options = None _IOCHANNEL.fields_by_name['capabilities']._serialized_options = b'\222?\0028\020\212\265\030\004(\001P\001' _IOCHANNEL.fields_by_name['claimedBy']._options = None - _IOCHANNEL.fields_by_name['claimedBy']._serialized_options = b'\222?\0028\020\212\265\030\005\030\377\001(\001' - _globals['_DIGITALSTATE']._serialized_start=172 - _globals['_DIGITALSTATE']._serialized_end=305 - _globals['_TRANSITIONDURATIONPRESET']._serialized_start=307 - _globals['_TRANSITIONDURATIONPRESET']._serialized_end=401 - _globals['_CHANNELCAPABILITIES']._serialized_start=404 - _globals['_CHANNELCAPABILITIES']._serialized_end=665 - _globals['_PWMFREQUENCY']._serialized_start=667 - _globals['_PWMFREQUENCY']._serialized_end=761 + _IOCHANNEL.fields_by_name['claimedBy']._serialized_options = b'\212\265\030\005\030\377\001(\001' + _globals['_DIGITALSTATE']._serialized_start=167 + _globals['_DIGITALSTATE']._serialized_end=300 + _globals['_TRANSITIONDURATIONPRESET']._serialized_start=302 + _globals['_TRANSITIONDURATIONPRESET']._serialized_end=396 + _globals['_CHANNELCAPABILITIES']._serialized_start=399 + _globals['_CHANNELCAPABILITIES']._serialized_end=660 + _globals['_PWMFREQUENCY']._serialized_start=662 + _globals['_PWMFREQUENCY']._serialized_end=756 _globals['_IOCHANNEL']._serialized_start=61 - _globals['_IOCHANNEL']._serialized_end=169 + _globals['_IOCHANNEL']._serialized_end=164 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/MotorValve_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/MotorValve_pb2.py index 07570669..c113bd3a 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/MotorValve_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/MotorValve_pb2.py @@ -18,7 +18,7 @@ import Claims_pb2 as Claims__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10MotorValve.proto\x12\x0f\x62lox.MotorValve\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\x11\x43onstraints.proto\x1a\rIoArray.proto\x1a\x0c\x43laims.proto\"\xc3\x04\n\x05\x42lock\x12\x1f\n\x08hwDevice\x18\x01 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x0bx\x01\x12\x1c\n\x07\x63hannel\x18\x02 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02x\x01\x12\x39\n\x0bstoredState\x18\t \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x08\x8a\xb5\x18\x04\x30\x01x\x01\x12:\n\x0c\x64\x65siredState\x18\x07 \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x08\x8a\xb5\x18\x04(\x01\x30\x01\x12\x33\n\x05state\x18\x03 \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x08\x8a\xb5\x18\x04(\x01\x30\x01\x12\x39\n\nvalveState\x18\x06 \x01(\x0e\x32\x1b.blox.MotorValve.ValveStateB\x08\x8a\xb5\x18\x04(\x01\x30\x01\x12\x45\n\rconstrainedBy\x18\x05 \x01(\x0b\x32..blox.Constraints.DeprecatedDigitalConstraints\x12\x41\n\x0b\x63onstraints\x18\x0b \x01(\x0b\x32$.blox.Constraints.DigitalConstraintsB\x06\x8a\xb5\x18\x02x\x01\x12!\n\tclaimedBy\x18\x08 \x01(\rB\x0e\x92?\x02\x38\x10\x8a\xb5\x18\x05\x18\xff\x01(\x01\x12\x35\n\x0bsettingMode\x18\n \x01(\x0e\x32\x18.blox.Claims.SettingModeB\x06\x8a\xb5\x18\x02x\x01\x12!\n\x0cstartChannel\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\r\x8a\xb5\x18\t\x18\xc1\x02J\x04\x06\x15\x10\x11*\x96\x01\n\nValveState\x12\x11\n\rVALVE_UNKNOWN\x10\x00\x12\x0e\n\nVALVE_OPEN\x10\x01\x12\x10\n\x0cVALVE_CLOSED\x10\x02\x12\x11\n\rVALVE_OPENING\x10\x03\x12\x11\n\rVALVE_CLOSING\x10\x04\x12\x18\n\x14VALVE_HALF_OPEN_IDLE\x10\x05\x12\x13\n\x0fVALVE_INIT_IDLE\x10\x06\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10MotorValve.proto\x12\x0f\x62lox.MotorValve\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\x11\x43onstraints.proto\x1a\rIoArray.proto\x1a\x0c\x43laims.proto\"\xb9\x04\n\x05\x42lock\x12\x1a\n\x08hwDevice\x18\x01 \x01(\rB\x08\x8a\xb5\x18\x04\x18\x0bx\x01\x12\x1c\n\x07\x63hannel\x18\x02 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02x\x01\x12\x39\n\x0bstoredState\x18\t \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x08\x8a\xb5\x18\x04\x30\x01x\x01\x12:\n\x0c\x64\x65siredState\x18\x07 \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x08\x8a\xb5\x18\x04(\x01\x30\x01\x12\x33\n\x05state\x18\x03 \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x08\x8a\xb5\x18\x04(\x01\x30\x01\x12\x39\n\nvalveState\x18\x06 \x01(\x0e\x32\x1b.blox.MotorValve.ValveStateB\x08\x8a\xb5\x18\x04(\x01\x30\x01\x12\x45\n\rconstrainedBy\x18\x05 \x01(\x0b\x32..blox.Constraints.DeprecatedDigitalConstraints\x12\x41\n\x0b\x63onstraints\x18\x0b \x01(\x0b\x32$.blox.Constraints.DigitalConstraintsB\x06\x8a\xb5\x18\x02x\x01\x12\x1c\n\tclaimedBy\x18\x08 \x01(\rB\t\x8a\xb5\x18\x05\x18\xff\x01(\x01\x12\x35\n\x0bsettingMode\x18\n \x01(\x0e\x32\x18.blox.Claims.SettingModeB\x06\x8a\xb5\x18\x02x\x01\x12!\n\x0cstartChannel\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\r\x8a\xb5\x18\t\x18\xc1\x02J\x04\x06\x15\x10\x11*\x96\x01\n\nValveState\x12\x11\n\rVALVE_UNKNOWN\x10\x00\x12\x0e\n\nVALVE_OPEN\x10\x01\x12\x10\n\x0cVALVE_CLOSED\x10\x02\x12\x11\n\rVALVE_OPENING\x10\x03\x12\x11\n\rVALVE_CLOSING\x10\x04\x12\x18\n\x14VALVE_HALF_OPEN_IDLE\x10\x05\x12\x13\n\x0fVALVE_INIT_IDLE\x10\x06\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -26,7 +26,7 @@ if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _BLOCK.fields_by_name['hwDevice']._options = None - _BLOCK.fields_by_name['hwDevice']._serialized_options = b'\222?\0028\020\212\265\030\004\030\013x\001' + _BLOCK.fields_by_name['hwDevice']._serialized_options = b'\212\265\030\004\030\013x\001' _BLOCK.fields_by_name['channel']._options = None _BLOCK.fields_by_name['channel']._serialized_options = b'\222?\0028\010\212\265\030\002x\001' _BLOCK.fields_by_name['storedState']._options = None @@ -40,15 +40,15 @@ _BLOCK.fields_by_name['constraints']._options = None _BLOCK.fields_by_name['constraints']._serialized_options = b'\212\265\030\002x\001' _BLOCK.fields_by_name['claimedBy']._options = None - _BLOCK.fields_by_name['claimedBy']._serialized_options = b'\222?\0028\020\212\265\030\005\030\377\001(\001' + _BLOCK.fields_by_name['claimedBy']._serialized_options = b'\212\265\030\005\030\377\001(\001' _BLOCK.fields_by_name['settingMode']._options = None _BLOCK.fields_by_name['settingMode']._serialized_options = b'\212\265\030\002x\001' _BLOCK.fields_by_name['startChannel']._options = None _BLOCK.fields_by_name['startChannel']._serialized_options = b'\222?\002\030\003\212\265\030\002H\001' _BLOCK._options = None _BLOCK._serialized_options = b'\212\265\030\t\030\301\002J\004\006\025\020\021' - _globals['_VALVESTATE']._serialized_start=698 - _globals['_VALVESTATE']._serialized_end=848 + _globals['_VALVESTATE']._serialized_start=688 + _globals['_VALVESTATE']._serialized_end=838 _globals['_BLOCK']._serialized_start=116 - _globals['_BLOCK']._serialized_end=695 + _globals['_BLOCK']._serialized_end=685 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/OneWireGpioModule_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/OneWireGpioModule_pb2.py index e8daca3d..6c15d768 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/OneWireGpioModule_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/OneWireGpioModule_pb2.py @@ -16,7 +16,7 @@ import GpioModule_pb2 as GpioModule__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17OneWireGpioModule.proto\x12\x16\x62lox.OneWireGpioModule\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\x10GpioModule.proto\"\x8f\x02\n\x05\x42lock\x12\x37\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x18.blox.GpioModule.ChannelB\x0b\x92?\x02\x10\x08\x8a\xb5\x18\x02x\x01\x12#\n\x0emodulePosition\x18\x02 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02x\x01\x12 \n\x10useExternalPower\x18\x0e \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12/\n\x06status\x18\x0f \x01(\x0b\x32\x17.blox.GpioModule.StatusB\x06\x8a\xb5\x18\x02(\x01\x12&\n\x11moduleStatusClear\x18Z \x01(\rB\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12 \n\x0b\x63learFaults\x18 \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\x0b\x8a\xb5\x18\x07\x18\xc5\x02J\x02\n\x0c\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17OneWireGpioModule.proto\x12\x16\x62lox.OneWireGpioModule\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\x10GpioModule.proto\"\xf6\x05\n\x05\x42lock\x12\x37\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x18.blox.GpioModule.ChannelB\x0b\x92?\x02\x10\x08\x8a\xb5\x18\x02x\x01\x12#\n\x0emodulePosition\x18\x02 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02x\x01\x12 \n\x10useExternalPower\x18\x0e \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12/\n\x06status\x18\x11 \x01(\x0b\x32\x17.blox.GpioModule.StatusB\x06\x8a\xb5\x18\x02(\x01\x12!\n\x0cmoduleStatus\x18\x03 \x01(\rB\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12\"\n\rpullUpDesired\x18\x04 \x01(\rB\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12!\n\x0cpullUpStatus\x18\x05 \x01(\rB\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12%\n\x10pullUpWhenActive\x18\x06 \x01(\rB\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12\'\n\x12pullUpWhenInactive\x18\x07 \x01(\rB\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12$\n\x0fpullDownDesired\x18\x08 \x01(\rB\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12#\n\x0epullDownStatus\x18\t \x01(\rB\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12\'\n\x12pullDownWhenActive\x18\n \x01(\rB\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12)\n\x14pullDownWhenInactive\x18\x0b \x01(\rB\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12 \n\x0boverCurrent\x18\x0c \x01(\rB\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12\x1d\n\x08openLoad\x18\r \x01(\rB\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12$\n\x0f\x66\x61ultsHistory5m\x18\x0f \x01(\rB\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12%\n\x10\x66\x61ultsHistory60m\x18\x10 \x01(\rB\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12&\n\x11moduleStatusClear\x18Z \x01(\rB\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12 \n\x0b\x63learFaults\x18 \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\x0b\x8a\xb5\x18\x07\x18\xc5\x02J\x02\n\x0c\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -31,6 +31,32 @@ _BLOCK.fields_by_name['useExternalPower']._serialized_options = b'\212\265\030\002x\001' _BLOCK.fields_by_name['status']._options = None _BLOCK.fields_by_name['status']._serialized_options = b'\212\265\030\002(\001' + _BLOCK.fields_by_name['moduleStatus']._options = None + _BLOCK.fields_by_name['moduleStatus']._serialized_options = b'\222?\002\030\003\212\265\030\002H\001' + _BLOCK.fields_by_name['pullUpDesired']._options = None + _BLOCK.fields_by_name['pullUpDesired']._serialized_options = b'\222?\002\030\003\212\265\030\002H\001' + _BLOCK.fields_by_name['pullUpStatus']._options = None + _BLOCK.fields_by_name['pullUpStatus']._serialized_options = b'\222?\002\030\003\212\265\030\002H\001' + _BLOCK.fields_by_name['pullUpWhenActive']._options = None + _BLOCK.fields_by_name['pullUpWhenActive']._serialized_options = b'\222?\002\030\003\212\265\030\002H\001' + _BLOCK.fields_by_name['pullUpWhenInactive']._options = None + _BLOCK.fields_by_name['pullUpWhenInactive']._serialized_options = b'\222?\002\030\003\212\265\030\002H\001' + _BLOCK.fields_by_name['pullDownDesired']._options = None + _BLOCK.fields_by_name['pullDownDesired']._serialized_options = b'\222?\002\030\003\212\265\030\002H\001' + _BLOCK.fields_by_name['pullDownStatus']._options = None + _BLOCK.fields_by_name['pullDownStatus']._serialized_options = b'\222?\002\030\003\212\265\030\002H\001' + _BLOCK.fields_by_name['pullDownWhenActive']._options = None + _BLOCK.fields_by_name['pullDownWhenActive']._serialized_options = b'\222?\002\030\003\212\265\030\002H\001' + _BLOCK.fields_by_name['pullDownWhenInactive']._options = None + _BLOCK.fields_by_name['pullDownWhenInactive']._serialized_options = b'\222?\002\030\003\212\265\030\002H\001' + _BLOCK.fields_by_name['overCurrent']._options = None + _BLOCK.fields_by_name['overCurrent']._serialized_options = b'\222?\002\030\003\212\265\030\002H\001' + _BLOCK.fields_by_name['openLoad']._options = None + _BLOCK.fields_by_name['openLoad']._serialized_options = b'\222?\002\030\003\212\265\030\002H\001' + _BLOCK.fields_by_name['faultsHistory5m']._options = None + _BLOCK.fields_by_name['faultsHistory5m']._serialized_options = b'\222?\002\030\003\212\265\030\002H\001' + _BLOCK.fields_by_name['faultsHistory60m']._options = None + _BLOCK.fields_by_name['faultsHistory60m']._serialized_options = b'\222?\002\030\003\212\265\030\002H\001' _BLOCK.fields_by_name['moduleStatusClear']._options = None _BLOCK.fields_by_name['moduleStatusClear']._serialized_options = b'\222?\002\030\003\212\265\030\002H\001' _BLOCK.fields_by_name['clearFaults']._options = None @@ -38,5 +64,5 @@ _BLOCK._options = None _BLOCK._serialized_options = b'\212\265\030\007\030\305\002J\002\n\014' _globals['_BLOCK']._serialized_start=100 - _globals['_BLOCK']._serialized_end=371 + _globals['_BLOCK']._serialized_end=858 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/Pid_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/Pid_pb2.py index 2e604a58..ed5e9ba1 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/Pid_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/Pid_pb2.py @@ -16,7 +16,7 @@ import SetpointSensorPair_pb2 as SetpointSensorPair__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\tPid.proto\x12\x08\x62lox.Pid\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\x18SetpointSensorPair.proto\"\x9c\x07\n\x05\x42lock\x12\x1e\n\x07inputId\x18\x01 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x04x\x01\x12\x1f\n\x08outputId\x18\x02 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x05x\x01\x12&\n\ninputValue\x18\x05 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x01\x10\x80 (\x01\x30\x01\x12(\n\x0cinputSetting\x18\x06 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x01\x10\x80 (\x01\x30\x01\x12%\n\x0boutputValue\x18\x07 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12\'\n\routputSetting\x18\x08 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12\x19\n\x07\x65nabled\x18\x0b \x01(\x08\x42\x08\x8a\xb5\x18\x04\x30\x01x\x01\x12\x18\n\x06\x61\x63tive\x18\x0c \x01(\x08\x42\x08\x8a\xb5\x18\x04(\x01\x30\x01\x12\x1c\n\x02kp\x18\r \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x02\x10\x80 x\x01\x12\x19\n\x02ti\x18\x0e \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x08\x03x\x01\x12\x19\n\x02td\x18\x0f \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x08\x03x\x01\x12\x1b\n\x01p\x18\x10 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12\x1b\n\x01i\x18\x11 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12\x1b\n\x01\x64\x18\x12 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12!\n\x05\x65rror\x18\x13 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x06\x10\x80 (\x01\x30\x01\x12\"\n\x08integral\x18\x14 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80\x02(\x01\x30\x01\x12%\n\nderivative\x18\x15 \x01(\x11\x42\x11\x92?\x02\x38 \x8a\xb5\x18\x08\x10\x80\x80 (\x01\x30\x01\x12%\n\rintegralReset\x18\x17 \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 0\x01\x12)\n\x0f\x62oilPointAdjust\x18\x18 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x06\x10\x80 x\x01\x12%\n\rboilMinOutput\x18\x19 \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 x\x01\x12 \n\x0e\x62oilModeActive\x18\x1a \x01(\x08\x42\x08\x8a\xb5\x18\x04(\x01\x30\x01\x12G\n\x10\x64\x65rivativeFilter\x18\x1b \x01(\x0e\x32%.blox.SetpointSensorPair.FilterChoiceB\x06\x8a\xb5\x18\x02(\x01\x12M\n\x16\x64\x65rivativeFilterChoice\x18\x1c \x01(\x0e\x32%.blox.SetpointSensorPair.FilterChoiceB\x06\x8a\xb5\x18\x02x\x01\x12#\n\x0e\x64rivenOutputId\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\n\x8a\xb5\x18\x06\x18\xb0\x02J\x01\x0f\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\tPid.proto\x12\x08\x62lox.Pid\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\x18SetpointSensorPair.proto\"\x92\x07\n\x05\x42lock\x12\x19\n\x07inputId\x18\x01 \x01(\rB\x08\x8a\xb5\x18\x04\x18\x04x\x01\x12\x1a\n\x08outputId\x18\x02 \x01(\rB\x08\x8a\xb5\x18\x04\x18\x05x\x01\x12&\n\ninputValue\x18\x05 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x01\x10\x80 (\x01\x30\x01\x12(\n\x0cinputSetting\x18\x06 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x01\x10\x80 (\x01\x30\x01\x12%\n\x0boutputValue\x18\x07 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12\'\n\routputSetting\x18\x08 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12\x19\n\x07\x65nabled\x18\x0b \x01(\x08\x42\x08\x8a\xb5\x18\x04\x30\x01x\x01\x12\x18\n\x06\x61\x63tive\x18\x0c \x01(\x08\x42\x08\x8a\xb5\x18\x04(\x01\x30\x01\x12\x1c\n\x02kp\x18\r \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x02\x10\x80 x\x01\x12\x19\n\x02ti\x18\x0e \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x08\x03x\x01\x12\x19\n\x02td\x18\x0f \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x08\x03x\x01\x12\x1b\n\x01p\x18\x10 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12\x1b\n\x01i\x18\x11 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12\x1b\n\x01\x64\x18\x12 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80 (\x01\x30\x01\x12!\n\x05\x65rror\x18\x13 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x06\x10\x80 (\x01\x30\x01\x12\"\n\x08integral\x18\x14 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x10\x80\x02(\x01\x30\x01\x12%\n\nderivative\x18\x15 \x01(\x11\x42\x11\x92?\x02\x38 \x8a\xb5\x18\x08\x10\x80\x80 (\x01\x30\x01\x12%\n\rintegralReset\x18\x17 \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 0\x01\x12)\n\x0f\x62oilPointAdjust\x18\x18 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x06\x10\x80 x\x01\x12%\n\rboilMinOutput\x18\x19 \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 x\x01\x12 \n\x0e\x62oilModeActive\x18\x1a \x01(\x08\x42\x08\x8a\xb5\x18\x04(\x01\x30\x01\x12G\n\x10\x64\x65rivativeFilter\x18\x1b \x01(\x0e\x32%.blox.SetpointSensorPair.FilterChoiceB\x06\x8a\xb5\x18\x02(\x01\x12M\n\x16\x64\x65rivativeFilterChoice\x18\x1c \x01(\x0e\x32%.blox.SetpointSensorPair.FilterChoiceB\x06\x8a\xb5\x18\x02x\x01\x12#\n\x0e\x64rivenOutputId\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\n\x8a\xb5\x18\x06\x18\xb0\x02J\x01\x0f\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -24,9 +24,9 @@ if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _BLOCK.fields_by_name['inputId']._options = None - _BLOCK.fields_by_name['inputId']._serialized_options = b'\222?\0028\020\212\265\030\004\030\004x\001' + _BLOCK.fields_by_name['inputId']._serialized_options = b'\212\265\030\004\030\004x\001' _BLOCK.fields_by_name['outputId']._options = None - _BLOCK.fields_by_name['outputId']._serialized_options = b'\222?\0028\020\212\265\030\004\030\005x\001' + _BLOCK.fields_by_name['outputId']._serialized_options = b'\212\265\030\004\030\005x\001' _BLOCK.fields_by_name['inputValue']._options = None _BLOCK.fields_by_name['inputValue']._serialized_options = b'\222?\0028 \212\265\030\t\010\001\020\200 (\0010\001' _BLOCK.fields_by_name['inputSetting']._options = None @@ -74,5 +74,5 @@ _BLOCK._options = None _BLOCK._serialized_options = b'\212\265\030\006\030\260\002J\001\017' _globals['_BLOCK']._serialized_start=80 - _globals['_BLOCK']._serialized_end=1004 + _globals['_BLOCK']._serialized_end=994 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/PrecisionAnalogModule_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/PrecisionAnalogModule_pb2.py index a898edb6..8a47942c 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/PrecisionAnalogModule_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/PrecisionAnalogModule_pb2.py @@ -16,7 +16,7 @@ import GpioModule_pb2 as GpioModule__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bPrecisionAnalogModule.proto\x12\x1a\x62lox.PrecisionAnalogModule\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\x10GpioModule.proto\"\xdb\x02\n\rAnalogChannel\x12I\n\nsensorType\x18\x01 \x01(\x0e\x32-.blox.PrecisionAnalogModule.AnalogChannelTypeB\x06\x8a\xb5\x18\x02x\x01\x12!\n\tclaimedBy\x18\x02 \x01(\rB\x0e\x92?\x02\x38\x10\x8a\xb5\x18\x05\x18\xff\x01(\x01\x12(\n\nresistance\x18\x04 \x01(\x11\x42\x14\x92?\x02\x38 \x8a\xb5\x18\x0b\x08\x0f\x10\x80 (\x01\x30\x01h\x01\x12,\n\x0eleadResistance\x18\x05 \x01(\x11\x42\x14\x92?\x02\x38 \x8a\xb5\x18\x0b\x08\x0f\x10\x80 (\x01\x30\x01h\x01\x12.\n\x10\x62ridgeResistance\x18\x06 \x01(\x11\x42\x14\x92?\x02\x38 \x8a\xb5\x18\x0b\x08\x0f\x10\x80 (\x01\x30\x01h\x01\x12)\n\x0c\x62ridgeOutput\x18\x07 \x01(\x11\x42\x13\x92?\x02\x38 \x8a\xb5\x18\n\x10\x80\x80\x10(\x01\x30\x01h\x01\x12)\n\x0cseebeckError\x18\x08 \x01(\x11\x42\x13\x92?\x02\x38 \x8a\xb5\x18\n\x10\x80\x80\x10(\x01\x30\x01h\x01\"\xf7\x02\n\x05\x42lock\x12;\n\x0cgpioChannels\x18\x01 \x03(\x0b\x32\x18.blox.GpioModule.ChannelB\x0b\x92?\x02\x10\x08\x8a\xb5\x18\x02x\x01\x12#\n\x0emodulePosition\x18\x02 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02x\x01\x12 \n\x10useExternalPower\x18\x03 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x33\n\ngpioStatus\x18\x04 \x01(\x0b\x32\x17.blox.GpioModule.StatusB\x06\x8a\xb5\x18\x02(\x01\x12S\n\x0e\x61nalogChannels\x18\x05 \x03(\x0b\x32).blox.PrecisionAnalogModule.AnalogChannelB\x10\x92?\x05\x10\x04\x80\x01\x01\x8a\xb5\x18\x04(\x01\x30\x01\x12*\n\x0c\x62\x61roPressure\x18\x06 \x01(\x11\x42\x14\x92?\x02\x38 \x8a\xb5\x18\x0b\x08\r\x10\x80 (\x01\x30\x01h\x01\x12+\n\x0f\x62\x61roTemperature\x18\x07 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x10\x80 (\x01\x30\x01h\x01:\x07\x8a\xb5\x18\x03\x18\xcb\x02*\xe6\x01\n\x11\x41nalogChannelType\x12\x1c\n\x18\x41NALOG_CHANNEL_TYPE_NONE\x10\x00\x12$\n ANALOG_CHANNEL_TYPE_STRAIN_GAUGE\x10\x01\x12!\n\x1d\x41NALOG_CHANNEL_TYPE_RTD_2WIRE\x10\x02\x12!\n\x1d\x41NALOG_CHANNEL_TYPE_RTD_3WIRE\x10\x03\x12!\n\x1d\x41NALOG_CHANNEL_TYPE_RTD_4WIRE\x10\x04\x12$\n ANALOG_CHANNEL_TYPE_RTD_3WIRE_LS\x10\x05\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bPrecisionAnalogModule.proto\x12\x1a\x62lox.PrecisionAnalogModule\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\x10GpioModule.proto\"\xd6\x02\n\rAnalogChannel\x12I\n\nsensorType\x18\x01 \x01(\x0e\x32-.blox.PrecisionAnalogModule.AnalogChannelTypeB\x06\x8a\xb5\x18\x02x\x01\x12\x1c\n\tclaimedBy\x18\x02 \x01(\rB\t\x8a\xb5\x18\x05\x18\xff\x01(\x01\x12(\n\nresistance\x18\x04 \x01(\x11\x42\x14\x92?\x02\x38 \x8a\xb5\x18\x0b\x08\x0f\x10\x80 (\x01\x30\x01h\x01\x12,\n\x0eleadResistance\x18\x05 \x01(\x11\x42\x14\x92?\x02\x38 \x8a\xb5\x18\x0b\x08\x0f\x10\x80 (\x01\x30\x01h\x01\x12.\n\x10\x62ridgeResistance\x18\x06 \x01(\x11\x42\x14\x92?\x02\x38 \x8a\xb5\x18\x0b\x08\x0f\x10\x80 (\x01\x30\x01h\x01\x12)\n\x0c\x62ridgeOutput\x18\x07 \x01(\x11\x42\x13\x92?\x02\x38 \x8a\xb5\x18\n\x10\x80\x80\x10(\x01\x30\x01h\x01\x12)\n\x0cseebeckError\x18\x08 \x01(\x11\x42\x13\x92?\x02\x38 \x8a\xb5\x18\n\x10\x80\x80\x10(\x01\x30\x01h\x01\"\xf7\x02\n\x05\x42lock\x12;\n\x0cgpioChannels\x18\x01 \x03(\x0b\x32\x18.blox.GpioModule.ChannelB\x0b\x92?\x02\x10\x08\x8a\xb5\x18\x02x\x01\x12#\n\x0emodulePosition\x18\x02 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02x\x01\x12 \n\x10useExternalPower\x18\x03 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x33\n\ngpioStatus\x18\x04 \x01(\x0b\x32\x17.blox.GpioModule.StatusB\x06\x8a\xb5\x18\x02(\x01\x12S\n\x0e\x61nalogChannels\x18\x05 \x03(\x0b\x32).blox.PrecisionAnalogModule.AnalogChannelB\x10\x92?\x05\x10\x04\x80\x01\x01\x8a\xb5\x18\x04(\x01\x30\x01\x12*\n\x0c\x62\x61roPressure\x18\x06 \x01(\x11\x42\x14\x92?\x02\x38 \x8a\xb5\x18\x0b\x08\r\x10\x80 (\x01\x30\x01h\x01\x12+\n\x0f\x62\x61roTemperature\x18\x07 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x10\x80 (\x01\x30\x01h\x01:\x07\x8a\xb5\x18\x03\x18\xcb\x02*\xe6\x01\n\x11\x41nalogChannelType\x12\x1c\n\x18\x41NALOG_CHANNEL_TYPE_NONE\x10\x00\x12$\n ANALOG_CHANNEL_TYPE_STRAIN_GAUGE\x10\x01\x12!\n\x1d\x41NALOG_CHANNEL_TYPE_RTD_2WIRE\x10\x02\x12!\n\x1d\x41NALOG_CHANNEL_TYPE_RTD_3WIRE\x10\x03\x12!\n\x1d\x41NALOG_CHANNEL_TYPE_RTD_4WIRE\x10\x04\x12$\n ANALOG_CHANNEL_TYPE_RTD_3WIRE_LS\x10\x05\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -26,7 +26,7 @@ _ANALOGCHANNEL.fields_by_name['sensorType']._options = None _ANALOGCHANNEL.fields_by_name['sensorType']._serialized_options = b'\212\265\030\002x\001' _ANALOGCHANNEL.fields_by_name['claimedBy']._options = None - _ANALOGCHANNEL.fields_by_name['claimedBy']._serialized_options = b'\222?\0028\020\212\265\030\005\030\377\001(\001' + _ANALOGCHANNEL.fields_by_name['claimedBy']._serialized_options = b'\212\265\030\005\030\377\001(\001' _ANALOGCHANNEL.fields_by_name['resistance']._options = None _ANALOGCHANNEL.fields_by_name['resistance']._serialized_options = b'\222?\0028 \212\265\030\013\010\017\020\200 (\0010\001h\001' _ANALOGCHANNEL.fields_by_name['leadResistance']._options = None @@ -53,10 +53,10 @@ _BLOCK.fields_by_name['baroTemperature']._serialized_options = b'\222?\0028 \212\265\030\t\020\200 (\0010\001h\001' _BLOCK._options = None _BLOCK._serialized_options = b'\212\265\030\003\030\313\002' - _globals['_ANALOGCHANNELTYPE']._serialized_start=836 - _globals['_ANALOGCHANNELTYPE']._serialized_end=1066 + _globals['_ANALOGCHANNELTYPE']._serialized_start=831 + _globals['_ANALOGCHANNELTYPE']._serialized_end=1061 _globals['_ANALOGCHANNEL']._serialized_start=108 - _globals['_ANALOGCHANNEL']._serialized_end=455 - _globals['_BLOCK']._serialized_start=458 - _globals['_BLOCK']._serialized_end=833 + _globals['_ANALOGCHANNEL']._serialized_end=450 + _globals['_BLOCK']._serialized_start=453 + _globals['_BLOCK']._serialized_end=828 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/Sequence_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/Sequence_pb2.py index 941458db..0dacd7f2 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/Sequence_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/Sequence_pb2.py @@ -16,7 +16,7 @@ import IoArray_pb2 as IoArray__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0eSequence.proto\x12\rblox.Sequence\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\rIoArray.proto\"\x1f\n\x07\x43omment\x12\x14\n\x04text\x18\x01 \x01(\tB\x06\x8a\xb5\x18\x02x\x01\"\t\n\x07Restart\"g\n\rEnableDisable\x12&\n\r__raw__target\x18\x01 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x0fx\x01H\x00\x12$\n\r__var__target\x18\x02 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x42\x08\n\x06target\"\x06\n\x04Wait\"l\n\x0cWaitDuration\x12(\n\x0f__raw__duration\x18\x01 \x01(\rB\r\x92?\x02\x38 \x8a\xb5\x18\x04\x08\x03x\x01H\x00\x12&\n\x0f__var__duration\x18\x02 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x42\n\n\x08\x64uration\"]\n\tWaitUntil\x12$\n\x0b__raw__time\x18\x01 \x01(\rB\r\x92?\x02\x38 \x8a\xb5\x18\x04X\x01x\x01H\x00\x12\"\n\x0b__var__time\x18\x02 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x42\x06\n\x04time\"\x9e\x02\n\x14WaitTemperatureRange\x12&\n\r__raw__target\x18\x01 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x02x\x01H\x00\x12$\n\r__var__target\x18\x04 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x12(\n\x0c__raw__lower\x18\x02 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x01\x10\x80 x\x01H\x01\x12#\n\x0c__var__lower\x18\x05 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x01\x12(\n\x0c__raw__upper\x18\x03 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x01\x10\x80 x\x01H\x02\x12#\n\x0c__var__upper\x18\x06 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x02\x42\x08\n\x06targetB\x07\n\x05lowerB\x07\n\x05upper\"\xc9\x01\n\x17WaitTemperatureBoundary\x12&\n\r__raw__target\x18\x01 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x02x\x01H\x00\x12$\n\r__var__target\x18\x03 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x12(\n\x0c__raw__value\x18\x02 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x01\x10\x80 x\x01H\x01\x12#\n\x0c__var__value\x18\x04 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x01\x42\x08\n\x06targetB\x07\n\x05value\"\xc3\x01\n\x0bSetSetpoint\x12&\n\r__raw__target\x18\x01 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x04x\x01H\x00\x12$\n\r__var__target\x18\x03 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x12*\n\x0e__raw__setting\x18\x02 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x01\x10\x80 x\x01H\x01\x12%\n\x0e__var__setting\x18\x04 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x01\x42\x08\n\x06targetB\t\n\x07setting\"\xca\x01\n\x0cWaitSetpoint\x12&\n\r__raw__target\x18\x01 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x04x\x01H\x00\x12$\n\r__var__target\x18\x03 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x12,\n\x10__raw__precision\x18\x02 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x06\x10\x80 x\x01H\x01\x12\'\n\x10__var__precision\x18\x04 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x01\x42\x08\n\x06targetB\x0b\n\tprecision\"\xd4\x01\n\nSetDigital\x12&\n\r__raw__target\x18\x01 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x06x\x01H\x00\x12$\n\r__var__target\x18\x03 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x12<\n\x0e__raw__setting\x18\x02 \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x06\x8a\xb5\x18\x02x\x01H\x01\x12%\n\x0e__var__setting\x18\x04 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x01\x42\x08\n\x06targetB\t\n\x07setting\"e\n\x0bWaitDigital\x12&\n\r__raw__target\x18\x01 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x06x\x01H\x00\x12$\n\r__var__target\x18\x02 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x42\x08\n\x06target\"\xd4\x01\n\x10WaitDigitalState\x12&\n\r__raw__target\x18\x01 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x1bx\x01H\x00\x12$\n\r__var__target\x18\x03 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x12:\n\x0c__raw__state\x18\x02 \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x06\x8a\xb5\x18\x02x\x01H\x01\x12#\n\x0c__var__state\x18\x04 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x01\x42\x08\n\x06targetB\x07\n\x05state\"\xbc\x01\n\x06SetPwm\x12&\n\r__raw__target\x18\x01 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x05x\x01H\x00\x12$\n\r__var__target\x18\x03 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x12(\n\x0e__raw__setting\x18\x02 \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 x\x01H\x01\x12%\n\x0e__var__setting\x18\x04 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x01\x42\x08\n\x06targetB\t\n\x07setting\"h\n\rTargetProfile\x12\'\n\r__raw__target\x18\x01 \x01(\rB\x0e\x92?\x02\x38\x10\x8a\xb5\x18\x05\x18\xb7\x02x\x01H\x00\x12$\n\r__var__target\x18\x02 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x42\x08\n\x06target\"i\n\x0eTargetSequence\x12\'\n\r__raw__target\x18\x01 \x01(\rB\x0e\x92?\x02\x38\x10\x8a\xb5\x18\x05\x18\xc6\x02x\x01H\x00\x12$\n\r__var__target\x18\x02 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x42\x08\n\x06target\"\x8a\x0c\n\x0bInstruction\x12\x31\n\x07RESTART\x18\x01 \x01(\x0b\x32\x16.blox.Sequence.RestartB\x06\x8a\xb5\x18\x02x\x01H\x00\x12\x36\n\x06\x45NABLE\x18\x02 \x01(\x0b\x32\x1c.blox.Sequence.EnableDisableB\x06\x8a\xb5\x18\x02x\x01H\x00\x12\x37\n\x07\x44ISABLE\x18\x03 \x01(\x0b\x32\x1c.blox.Sequence.EnableDisableB\x06\x8a\xb5\x18\x02x\x01H\x00\x12+\n\x04WAIT\x18\x14 \x01(\x0b\x32\x13.blox.Sequence.WaitB\x06\x8a\xb5\x18\x02x\x01H\x00\x12<\n\rWAIT_DURATION\x18\x04 \x01(\x0b\x32\x1b.blox.Sequence.WaitDurationB\x06\x8a\xb5\x18\x02x\x01H\x00\x12\x36\n\nWAIT_UNTIL\x18\x05 \x01(\x0b\x32\x18.blox.Sequence.WaitUntilB\x06\x8a\xb5\x18\x02x\x01H\x00\x12H\n\x11WAIT_TEMP_BETWEEN\x18\x06 \x01(\x0b\x32#.blox.Sequence.WaitTemperatureRangeB\x06\x8a\xb5\x18\x02x\x01H\x00\x12L\n\x15WAIT_TEMP_NOT_BETWEEN\x18\x07 \x01(\x0b\x32#.blox.Sequence.WaitTemperatureRangeB\x06\x8a\xb5\x18\x02x\x01H\x00\x12K\n\x14WAIT_TEMP_UNEXPECTED\x18\x08 \x01(\x0b\x32#.blox.Sequence.WaitTemperatureRangeB\x06\x8a\xb5\x18\x02x\x01H\x00\x12I\n\x0fWAIT_TEMP_ABOVE\x18\t \x01(\x0b\x32&.blox.Sequence.WaitTemperatureBoundaryB\x06\x8a\xb5\x18\x02x\x01H\x00\x12I\n\x0fWAIT_TEMP_BELOW\x18\n \x01(\x0b\x32&.blox.Sequence.WaitTemperatureBoundaryB\x06\x8a\xb5\x18\x02x\x01H\x00\x12:\n\x0cSET_SETPOINT\x18\x0b \x01(\x0b\x32\x1a.blox.Sequence.SetSetpointB\x06\x8a\xb5\x18\x02x\x01H\x00\x12<\n\rWAIT_SETPOINT\x18\x0c \x01(\x0b\x32\x1b.blox.Sequence.WaitSetpointB\x06\x8a\xb5\x18\x02x\x01H\x00\x12\x42\n\x13WAIT_SETPOINT_ABOVE\x18\x15 \x01(\x0b\x32\x1b.blox.Sequence.WaitSetpointB\x06\x8a\xb5\x18\x02x\x01H\x00\x12\x42\n\x13WAIT_SETPOINT_BELOW\x18\x16 \x01(\x0b\x32\x1b.blox.Sequence.WaitSetpointB\x06\x8a\xb5\x18\x02x\x01H\x00\x12\x38\n\x0bSET_DIGITAL\x18\r \x01(\x0b\x32\x19.blox.Sequence.SetDigitalB\x06\x8a\xb5\x18\x02x\x01H\x00\x12:\n\x0cWAIT_DIGITAL\x18\x0e \x01(\x0b\x32\x1a.blox.Sequence.WaitDigitalB\x06\x8a\xb5\x18\x02x\x01H\x00\x12\x46\n\x13WAIT_DIGITAL_EQUALS\x18\x17 \x01(\x0b\x32\x1f.blox.Sequence.WaitDigitalStateB\x06\x8a\xb5\x18\x02x\x01H\x00\x12\x30\n\x07SET_PWM\x18\x0f \x01(\x0b\x32\x15.blox.Sequence.SetPwmB\x06\x8a\xb5\x18\x02x\x01H\x00\x12=\n\rSTART_PROFILE\x18\x10 \x01(\x0b\x32\x1c.blox.Sequence.TargetProfileB\x06\x8a\xb5\x18\x02x\x01H\x00\x12<\n\x0cWAIT_PROFILE\x18\x11 \x01(\x0b\x32\x1c.blox.Sequence.TargetProfileB\x06\x8a\xb5\x18\x02x\x01H\x00\x12?\n\x0eSTART_SEQUENCE\x18\x12 \x01(\x0b\x32\x1d.blox.Sequence.TargetSequenceB\x06\x8a\xb5\x18\x02x\x01H\x00\x12>\n\rWAIT_SEQUENCE\x18\x13 \x01(\x0b\x32\x1d.blox.Sequence.TargetSequenceB\x06\x8a\xb5\x18\x02x\x01H\x00\x12\x32\n\x07\x43OMMENT\x18\xc8\x01 \x01(\x0b\x32\x16.blox.Sequence.CommentB\x06\x8a\xb5\x18\x02x\x01H\x00:\x06\x92?\x03\xb0\x01\x01\x42\r\n\x0binstruction\"\x9d\x04\n\x05\x42lock\x12\x19\n\x07\x65nabled\x18\x01 \x01(\x08\x42\x08\x8a\xb5\x18\x04\x30\x01x\x01\x12\x38\n\x0cinstructions\x18\x02 \x03(\x0b\x32\x1a.blox.Sequence.InstructionB\x06\x8a\xb5\x18\x02x\x01\x12#\n\x0bvariablesId\x18\x0b \x01(\rB\x0e\x92?\x02\x38\x10\x8a\xb5\x18\x05\x18\xcd\x02x\x01\x12\x1d\n\roverrideState\x18\x03 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12(\n\x11\x61\x63tiveInstruction\x18\x04 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x30\x01x\x01\x12;\n\tstoreMode\x18\x0c \x01(\x0e\x32 .blox.Sequence.SequenceStoreModeB\x06\x8a\xb5\x18\x02x\x01\x12\x35\n\x06status\x18\x08 \x01(\x0e\x32\x1d.blox.Sequence.SequenceStatusB\x06\x8a\xb5\x18\x02(\x01\x12\x33\n\x05\x65rror\x18\t \x01(\x0e\x32\x1c.blox.Sequence.SequenceErrorB\x06\x8a\xb5\x18\x02(\x01\x12#\n\x07\x65lapsed\x18\n \x01(\rB\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x03\x10\xe8\x07(\x01\x30\x01\x12/\n\x1a\x61\x63tiveInstructionStartedAt\x18\x05 \x01(\rB\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12\x1f\n\ndisabledAt\x18\x06 \x01(\rB\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12%\n\x10\x64isabledDuration\x18\x07 \x01(\rB\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\n\x8a\xb5\x18\x06\x18\xc6\x02J\x01\x0f*l\n\x0eSequenceStatus\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0c\n\x08\x44ISABLED\x10\x01\x12\n\n\x06PAUSED\x10\x02\x12\x08\n\x04NEXT\x10\x03\x12\x08\n\x04WAIT\x10\x04\x12\x07\n\x03\x45ND\x10\x05\x12\x0b\n\x07RESTART\x10\x06\x12\t\n\x05\x45RROR\x10\x07*\xd7\x01\n\rSequenceError\x12\x08\n\x04NONE\x10\x00\x12\x14\n\x10INVALID_ARGUMENT\x10\x01\x12\x12\n\x0eINVALID_TARGET\x10\x02\x12\x13\n\x0fINACTIVE_TARGET\x10\x03\x12\x13\n\x0f\x44ISABLED_TARGET\x10\x04\x12\x1d\n\x19SYSTEM_TIME_NOT_AVAILABLE\x10\x05\x12\x1b\n\x17VARIABLES_NOT_SUPPORTED\x10\x06\x12\x16\n\x12UNDEFINED_VARIABLE\x10\x07\x12\x14\n\x10INVALID_VARIABLE\x10\x08*\x8f\x02\n\x11SequenceStoreMode\x12*\n&AT_RESTORE_INSTRUCTION_RESTORE_ENABLED\x10\x00\x12)\n%AT_RESTORE_INSTRUCTION_ALWAYS_ENABLED\x10\x01\x12(\n$AT_RESTORE_INSTRUCTION_NEVER_ENABLED\x10\x02\x12(\n$AT_FIRST_INSTRUCTION_RESTORE_ENABLED\x10\x03\x12\'\n#AT_FIRST_INSTRUCTION_ALWAYS_ENABLED\x10\x04\x12&\n\"AT_FIRST_INSTRUCTION_NEVER_ENABLED\x10\x05\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0eSequence.proto\x12\rblox.Sequence\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\rIoArray.proto\"\x1f\n\x07\x43omment\x12\x14\n\x04text\x18\x01 \x01(\tB\x06\x8a\xb5\x18\x02x\x01\"\t\n\x07Restart\"b\n\rEnableDisable\x12!\n\r__raw__target\x18\x01 \x01(\rB\x08\x8a\xb5\x18\x04\x18\x0fx\x01H\x00\x12$\n\r__var__target\x18\x02 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x42\x08\n\x06target\"\x06\n\x04Wait\"l\n\x0cWaitDuration\x12(\n\x0f__raw__duration\x18\x01 \x01(\rB\r\x92?\x02\x38 \x8a\xb5\x18\x04\x08\x03x\x01H\x00\x12&\n\x0f__var__duration\x18\x02 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x42\n\n\x08\x64uration\"]\n\tWaitUntil\x12$\n\x0b__raw__time\x18\x01 \x01(\rB\r\x92?\x02\x38 \x8a\xb5\x18\x04X\x01x\x01H\x00\x12\"\n\x0b__var__time\x18\x02 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x42\x06\n\x04time\"\x99\x02\n\x14WaitTemperatureRange\x12!\n\r__raw__target\x18\x01 \x01(\rB\x08\x8a\xb5\x18\x04\x18\x02x\x01H\x00\x12$\n\r__var__target\x18\x04 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x12(\n\x0c__raw__lower\x18\x02 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x01\x10\x80 x\x01H\x01\x12#\n\x0c__var__lower\x18\x05 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x01\x12(\n\x0c__raw__upper\x18\x03 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x01\x10\x80 x\x01H\x02\x12#\n\x0c__var__upper\x18\x06 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x02\x42\x08\n\x06targetB\x07\n\x05lowerB\x07\n\x05upper\"\xc4\x01\n\x17WaitTemperatureBoundary\x12!\n\r__raw__target\x18\x01 \x01(\rB\x08\x8a\xb5\x18\x04\x18\x02x\x01H\x00\x12$\n\r__var__target\x18\x03 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x12(\n\x0c__raw__value\x18\x02 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x01\x10\x80 x\x01H\x01\x12#\n\x0c__var__value\x18\x04 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x01\x42\x08\n\x06targetB\x07\n\x05value\"\xbe\x01\n\x0bSetSetpoint\x12!\n\r__raw__target\x18\x01 \x01(\rB\x08\x8a\xb5\x18\x04\x18\x04x\x01H\x00\x12$\n\r__var__target\x18\x03 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x12*\n\x0e__raw__setting\x18\x02 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x01\x10\x80 x\x01H\x01\x12%\n\x0e__var__setting\x18\x04 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x01\x42\x08\n\x06targetB\t\n\x07setting\"\xc5\x01\n\x0cWaitSetpoint\x12!\n\r__raw__target\x18\x01 \x01(\rB\x08\x8a\xb5\x18\x04\x18\x04x\x01H\x00\x12$\n\r__var__target\x18\x03 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x12,\n\x10__raw__precision\x18\x02 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x06\x10\x80 x\x01H\x01\x12\'\n\x10__var__precision\x18\x04 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x01\x42\x08\n\x06targetB\x0b\n\tprecision\"\xcf\x01\n\nSetDigital\x12!\n\r__raw__target\x18\x01 \x01(\rB\x08\x8a\xb5\x18\x04\x18\x06x\x01H\x00\x12$\n\r__var__target\x18\x03 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x12<\n\x0e__raw__setting\x18\x02 \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x06\x8a\xb5\x18\x02x\x01H\x01\x12%\n\x0e__var__setting\x18\x04 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x01\x42\x08\n\x06targetB\t\n\x07setting\"`\n\x0bWaitDigital\x12!\n\r__raw__target\x18\x01 \x01(\rB\x08\x8a\xb5\x18\x04\x18\x06x\x01H\x00\x12$\n\r__var__target\x18\x02 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x42\x08\n\x06target\"\xcf\x01\n\x10WaitDigitalState\x12!\n\r__raw__target\x18\x01 \x01(\rB\x08\x8a\xb5\x18\x04\x18\x1bx\x01H\x00\x12$\n\r__var__target\x18\x03 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x12:\n\x0c__raw__state\x18\x02 \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x06\x8a\xb5\x18\x02x\x01H\x01\x12#\n\x0c__var__state\x18\x04 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x01\x42\x08\n\x06targetB\x07\n\x05state\"\xb7\x01\n\x06SetPwm\x12!\n\r__raw__target\x18\x01 \x01(\rB\x08\x8a\xb5\x18\x04\x18\x05x\x01H\x00\x12$\n\r__var__target\x18\x03 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x12(\n\x0e__raw__setting\x18\x02 \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 x\x01H\x01\x12%\n\x0e__var__setting\x18\x04 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x01\x42\x08\n\x06targetB\t\n\x07setting\"c\n\rTargetProfile\x12\"\n\r__raw__target\x18\x01 \x01(\rB\t\x8a\xb5\x18\x05\x18\xb7\x02x\x01H\x00\x12$\n\r__var__target\x18\x02 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x42\x08\n\x06target\"d\n\x0eTargetSequence\x12\"\n\r__raw__target\x18\x01 \x01(\rB\t\x8a\xb5\x18\x05\x18\xc6\x02x\x01H\x00\x12$\n\r__var__target\x18\x02 \x01(\tB\x0b\x92?\x02\x08\x10\x8a\xb5\x18\x02x\x01H\x00\x42\x08\n\x06target\"\x8a\x0c\n\x0bInstruction\x12\x31\n\x07RESTART\x18\x01 \x01(\x0b\x32\x16.blox.Sequence.RestartB\x06\x8a\xb5\x18\x02x\x01H\x00\x12\x36\n\x06\x45NABLE\x18\x02 \x01(\x0b\x32\x1c.blox.Sequence.EnableDisableB\x06\x8a\xb5\x18\x02x\x01H\x00\x12\x37\n\x07\x44ISABLE\x18\x03 \x01(\x0b\x32\x1c.blox.Sequence.EnableDisableB\x06\x8a\xb5\x18\x02x\x01H\x00\x12+\n\x04WAIT\x18\x14 \x01(\x0b\x32\x13.blox.Sequence.WaitB\x06\x8a\xb5\x18\x02x\x01H\x00\x12<\n\rWAIT_DURATION\x18\x04 \x01(\x0b\x32\x1b.blox.Sequence.WaitDurationB\x06\x8a\xb5\x18\x02x\x01H\x00\x12\x36\n\nWAIT_UNTIL\x18\x05 \x01(\x0b\x32\x18.blox.Sequence.WaitUntilB\x06\x8a\xb5\x18\x02x\x01H\x00\x12H\n\x11WAIT_TEMP_BETWEEN\x18\x06 \x01(\x0b\x32#.blox.Sequence.WaitTemperatureRangeB\x06\x8a\xb5\x18\x02x\x01H\x00\x12L\n\x15WAIT_TEMP_NOT_BETWEEN\x18\x07 \x01(\x0b\x32#.blox.Sequence.WaitTemperatureRangeB\x06\x8a\xb5\x18\x02x\x01H\x00\x12K\n\x14WAIT_TEMP_UNEXPECTED\x18\x08 \x01(\x0b\x32#.blox.Sequence.WaitTemperatureRangeB\x06\x8a\xb5\x18\x02x\x01H\x00\x12I\n\x0fWAIT_TEMP_ABOVE\x18\t \x01(\x0b\x32&.blox.Sequence.WaitTemperatureBoundaryB\x06\x8a\xb5\x18\x02x\x01H\x00\x12I\n\x0fWAIT_TEMP_BELOW\x18\n \x01(\x0b\x32&.blox.Sequence.WaitTemperatureBoundaryB\x06\x8a\xb5\x18\x02x\x01H\x00\x12:\n\x0cSET_SETPOINT\x18\x0b \x01(\x0b\x32\x1a.blox.Sequence.SetSetpointB\x06\x8a\xb5\x18\x02x\x01H\x00\x12<\n\rWAIT_SETPOINT\x18\x0c \x01(\x0b\x32\x1b.blox.Sequence.WaitSetpointB\x06\x8a\xb5\x18\x02x\x01H\x00\x12\x42\n\x13WAIT_SETPOINT_ABOVE\x18\x15 \x01(\x0b\x32\x1b.blox.Sequence.WaitSetpointB\x06\x8a\xb5\x18\x02x\x01H\x00\x12\x42\n\x13WAIT_SETPOINT_BELOW\x18\x16 \x01(\x0b\x32\x1b.blox.Sequence.WaitSetpointB\x06\x8a\xb5\x18\x02x\x01H\x00\x12\x38\n\x0bSET_DIGITAL\x18\r \x01(\x0b\x32\x19.blox.Sequence.SetDigitalB\x06\x8a\xb5\x18\x02x\x01H\x00\x12:\n\x0cWAIT_DIGITAL\x18\x0e \x01(\x0b\x32\x1a.blox.Sequence.WaitDigitalB\x06\x8a\xb5\x18\x02x\x01H\x00\x12\x46\n\x13WAIT_DIGITAL_EQUALS\x18\x17 \x01(\x0b\x32\x1f.blox.Sequence.WaitDigitalStateB\x06\x8a\xb5\x18\x02x\x01H\x00\x12\x30\n\x07SET_PWM\x18\x0f \x01(\x0b\x32\x15.blox.Sequence.SetPwmB\x06\x8a\xb5\x18\x02x\x01H\x00\x12=\n\rSTART_PROFILE\x18\x10 \x01(\x0b\x32\x1c.blox.Sequence.TargetProfileB\x06\x8a\xb5\x18\x02x\x01H\x00\x12<\n\x0cWAIT_PROFILE\x18\x11 \x01(\x0b\x32\x1c.blox.Sequence.TargetProfileB\x06\x8a\xb5\x18\x02x\x01H\x00\x12?\n\x0eSTART_SEQUENCE\x18\x12 \x01(\x0b\x32\x1d.blox.Sequence.TargetSequenceB\x06\x8a\xb5\x18\x02x\x01H\x00\x12>\n\rWAIT_SEQUENCE\x18\x13 \x01(\x0b\x32\x1d.blox.Sequence.TargetSequenceB\x06\x8a\xb5\x18\x02x\x01H\x00\x12\x32\n\x07\x43OMMENT\x18\xc8\x01 \x01(\x0b\x32\x16.blox.Sequence.CommentB\x06\x8a\xb5\x18\x02x\x01H\x00:\x06\x92?\x03\xb0\x01\x01\x42\r\n\x0binstruction\"\x98\x04\n\x05\x42lock\x12\x19\n\x07\x65nabled\x18\x01 \x01(\x08\x42\x08\x8a\xb5\x18\x04\x30\x01x\x01\x12\x38\n\x0cinstructions\x18\x02 \x03(\x0b\x32\x1a.blox.Sequence.InstructionB\x06\x8a\xb5\x18\x02x\x01\x12\x1e\n\x0bvariablesId\x18\x0b \x01(\rB\t\x8a\xb5\x18\x05\x18\xcd\x02x\x01\x12\x1d\n\roverrideState\x18\x03 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12(\n\x11\x61\x63tiveInstruction\x18\x04 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x30\x01x\x01\x12;\n\tstoreMode\x18\x0c \x01(\x0e\x32 .blox.Sequence.SequenceStoreModeB\x06\x8a\xb5\x18\x02x\x01\x12\x35\n\x06status\x18\x08 \x01(\x0e\x32\x1d.blox.Sequence.SequenceStatusB\x06\x8a\xb5\x18\x02(\x01\x12\x33\n\x05\x65rror\x18\t \x01(\x0e\x32\x1c.blox.Sequence.SequenceErrorB\x06\x8a\xb5\x18\x02(\x01\x12#\n\x07\x65lapsed\x18\n \x01(\rB\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x03\x10\xe8\x07(\x01\x30\x01\x12/\n\x1a\x61\x63tiveInstructionStartedAt\x18\x05 \x01(\rB\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12\x1f\n\ndisabledAt\x18\x06 \x01(\rB\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01\x12%\n\x10\x64isabledDuration\x18\x07 \x01(\rB\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\n\x8a\xb5\x18\x06\x18\xc6\x02J\x01\x0f*l\n\x0eSequenceStatus\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0c\n\x08\x44ISABLED\x10\x01\x12\n\n\x06PAUSED\x10\x02\x12\x08\n\x04NEXT\x10\x03\x12\x08\n\x04WAIT\x10\x04\x12\x07\n\x03\x45ND\x10\x05\x12\x0b\n\x07RESTART\x10\x06\x12\t\n\x05\x45RROR\x10\x07*\xd7\x01\n\rSequenceError\x12\x08\n\x04NONE\x10\x00\x12\x14\n\x10INVALID_ARGUMENT\x10\x01\x12\x12\n\x0eINVALID_TARGET\x10\x02\x12\x13\n\x0fINACTIVE_TARGET\x10\x03\x12\x13\n\x0f\x44ISABLED_TARGET\x10\x04\x12\x1d\n\x19SYSTEM_TIME_NOT_AVAILABLE\x10\x05\x12\x1b\n\x17VARIABLES_NOT_SUPPORTED\x10\x06\x12\x16\n\x12UNDEFINED_VARIABLE\x10\x07\x12\x14\n\x10INVALID_VARIABLE\x10\x08*\x8f\x02\n\x11SequenceStoreMode\x12*\n&AT_RESTORE_INSTRUCTION_RESTORE_ENABLED\x10\x00\x12)\n%AT_RESTORE_INSTRUCTION_ALWAYS_ENABLED\x10\x01\x12(\n$AT_RESTORE_INSTRUCTION_NEVER_ENABLED\x10\x02\x12(\n$AT_FIRST_INSTRUCTION_RESTORE_ENABLED\x10\x03\x12\'\n#AT_FIRST_INSTRUCTION_ALWAYS_ENABLED\x10\x04\x12&\n\"AT_FIRST_INSTRUCTION_NEVER_ENABLED\x10\x05\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -26,7 +26,7 @@ _COMMENT.fields_by_name['text']._options = None _COMMENT.fields_by_name['text']._serialized_options = b'\212\265\030\002x\001' _ENABLEDISABLE.fields_by_name['__raw__target']._options = None - _ENABLEDISABLE.fields_by_name['__raw__target']._serialized_options = b'\222?\0028\020\212\265\030\004\030\017x\001' + _ENABLEDISABLE.fields_by_name['__raw__target']._serialized_options = b'\212\265\030\004\030\017x\001' _ENABLEDISABLE.fields_by_name['__var__target']._options = None _ENABLEDISABLE.fields_by_name['__var__target']._serialized_options = b'\222?\002\010\020\212\265\030\002x\001' _WAITDURATION.fields_by_name['__raw__duration']._options = None @@ -38,7 +38,7 @@ _WAITUNTIL.fields_by_name['__var__time']._options = None _WAITUNTIL.fields_by_name['__var__time']._serialized_options = b'\222?\002\010\020\212\265\030\002x\001' _WAITTEMPERATURERANGE.fields_by_name['__raw__target']._options = None - _WAITTEMPERATURERANGE.fields_by_name['__raw__target']._serialized_options = b'\222?\0028\020\212\265\030\004\030\002x\001' + _WAITTEMPERATURERANGE.fields_by_name['__raw__target']._serialized_options = b'\212\265\030\004\030\002x\001' _WAITTEMPERATURERANGE.fields_by_name['__var__target']._options = None _WAITTEMPERATURERANGE.fields_by_name['__var__target']._serialized_options = b'\222?\002\010\020\212\265\030\002x\001' _WAITTEMPERATURERANGE.fields_by_name['__raw__lower']._options = None @@ -50,7 +50,7 @@ _WAITTEMPERATURERANGE.fields_by_name['__var__upper']._options = None _WAITTEMPERATURERANGE.fields_by_name['__var__upper']._serialized_options = b'\222?\002\010\020\212\265\030\002x\001' _WAITTEMPERATUREBOUNDARY.fields_by_name['__raw__target']._options = None - _WAITTEMPERATUREBOUNDARY.fields_by_name['__raw__target']._serialized_options = b'\222?\0028\020\212\265\030\004\030\002x\001' + _WAITTEMPERATUREBOUNDARY.fields_by_name['__raw__target']._serialized_options = b'\212\265\030\004\030\002x\001' _WAITTEMPERATUREBOUNDARY.fields_by_name['__var__target']._options = None _WAITTEMPERATUREBOUNDARY.fields_by_name['__var__target']._serialized_options = b'\222?\002\010\020\212\265\030\002x\001' _WAITTEMPERATUREBOUNDARY.fields_by_name['__raw__value']._options = None @@ -58,7 +58,7 @@ _WAITTEMPERATUREBOUNDARY.fields_by_name['__var__value']._options = None _WAITTEMPERATUREBOUNDARY.fields_by_name['__var__value']._serialized_options = b'\222?\002\010\020\212\265\030\002x\001' _SETSETPOINT.fields_by_name['__raw__target']._options = None - _SETSETPOINT.fields_by_name['__raw__target']._serialized_options = b'\222?\0028\020\212\265\030\004\030\004x\001' + _SETSETPOINT.fields_by_name['__raw__target']._serialized_options = b'\212\265\030\004\030\004x\001' _SETSETPOINT.fields_by_name['__var__target']._options = None _SETSETPOINT.fields_by_name['__var__target']._serialized_options = b'\222?\002\010\020\212\265\030\002x\001' _SETSETPOINT.fields_by_name['__raw__setting']._options = None @@ -66,7 +66,7 @@ _SETSETPOINT.fields_by_name['__var__setting']._options = None _SETSETPOINT.fields_by_name['__var__setting']._serialized_options = b'\222?\002\010\020\212\265\030\002x\001' _WAITSETPOINT.fields_by_name['__raw__target']._options = None - _WAITSETPOINT.fields_by_name['__raw__target']._serialized_options = b'\222?\0028\020\212\265\030\004\030\004x\001' + _WAITSETPOINT.fields_by_name['__raw__target']._serialized_options = b'\212\265\030\004\030\004x\001' _WAITSETPOINT.fields_by_name['__var__target']._options = None _WAITSETPOINT.fields_by_name['__var__target']._serialized_options = b'\222?\002\010\020\212\265\030\002x\001' _WAITSETPOINT.fields_by_name['__raw__precision']._options = None @@ -74,7 +74,7 @@ _WAITSETPOINT.fields_by_name['__var__precision']._options = None _WAITSETPOINT.fields_by_name['__var__precision']._serialized_options = b'\222?\002\010\020\212\265\030\002x\001' _SETDIGITAL.fields_by_name['__raw__target']._options = None - _SETDIGITAL.fields_by_name['__raw__target']._serialized_options = b'\222?\0028\020\212\265\030\004\030\006x\001' + _SETDIGITAL.fields_by_name['__raw__target']._serialized_options = b'\212\265\030\004\030\006x\001' _SETDIGITAL.fields_by_name['__var__target']._options = None _SETDIGITAL.fields_by_name['__var__target']._serialized_options = b'\222?\002\010\020\212\265\030\002x\001' _SETDIGITAL.fields_by_name['__raw__setting']._options = None @@ -82,11 +82,11 @@ _SETDIGITAL.fields_by_name['__var__setting']._options = None _SETDIGITAL.fields_by_name['__var__setting']._serialized_options = b'\222?\002\010\020\212\265\030\002x\001' _WAITDIGITAL.fields_by_name['__raw__target']._options = None - _WAITDIGITAL.fields_by_name['__raw__target']._serialized_options = b'\222?\0028\020\212\265\030\004\030\006x\001' + _WAITDIGITAL.fields_by_name['__raw__target']._serialized_options = b'\212\265\030\004\030\006x\001' _WAITDIGITAL.fields_by_name['__var__target']._options = None _WAITDIGITAL.fields_by_name['__var__target']._serialized_options = b'\222?\002\010\020\212\265\030\002x\001' _WAITDIGITALSTATE.fields_by_name['__raw__target']._options = None - _WAITDIGITALSTATE.fields_by_name['__raw__target']._serialized_options = b'\222?\0028\020\212\265\030\004\030\033x\001' + _WAITDIGITALSTATE.fields_by_name['__raw__target']._serialized_options = b'\212\265\030\004\030\033x\001' _WAITDIGITALSTATE.fields_by_name['__var__target']._options = None _WAITDIGITALSTATE.fields_by_name['__var__target']._serialized_options = b'\222?\002\010\020\212\265\030\002x\001' _WAITDIGITALSTATE.fields_by_name['__raw__state']._options = None @@ -94,7 +94,7 @@ _WAITDIGITALSTATE.fields_by_name['__var__state']._options = None _WAITDIGITALSTATE.fields_by_name['__var__state']._serialized_options = b'\222?\002\010\020\212\265\030\002x\001' _SETPWM.fields_by_name['__raw__target']._options = None - _SETPWM.fields_by_name['__raw__target']._serialized_options = b'\222?\0028\020\212\265\030\004\030\005x\001' + _SETPWM.fields_by_name['__raw__target']._serialized_options = b'\212\265\030\004\030\005x\001' _SETPWM.fields_by_name['__var__target']._options = None _SETPWM.fields_by_name['__var__target']._serialized_options = b'\222?\002\010\020\212\265\030\002x\001' _SETPWM.fields_by_name['__raw__setting']._options = None @@ -102,11 +102,11 @@ _SETPWM.fields_by_name['__var__setting']._options = None _SETPWM.fields_by_name['__var__setting']._serialized_options = b'\222?\002\010\020\212\265\030\002x\001' _TARGETPROFILE.fields_by_name['__raw__target']._options = None - _TARGETPROFILE.fields_by_name['__raw__target']._serialized_options = b'\222?\0028\020\212\265\030\005\030\267\002x\001' + _TARGETPROFILE.fields_by_name['__raw__target']._serialized_options = b'\212\265\030\005\030\267\002x\001' _TARGETPROFILE.fields_by_name['__var__target']._options = None _TARGETPROFILE.fields_by_name['__var__target']._serialized_options = b'\222?\002\010\020\212\265\030\002x\001' _TARGETSEQUENCE.fields_by_name['__raw__target']._options = None - _TARGETSEQUENCE.fields_by_name['__raw__target']._serialized_options = b'\222?\0028\020\212\265\030\005\030\306\002x\001' + _TARGETSEQUENCE.fields_by_name['__raw__target']._serialized_options = b'\212\265\030\005\030\306\002x\001' _TARGETSEQUENCE.fields_by_name['__var__target']._options = None _TARGETSEQUENCE.fields_by_name['__var__target']._serialized_options = b'\222?\002\010\020\212\265\030\002x\001' _INSTRUCTION.fields_by_name['RESTART']._options = None @@ -164,7 +164,7 @@ _BLOCK.fields_by_name['instructions']._options = None _BLOCK.fields_by_name['instructions']._serialized_options = b'\212\265\030\002x\001' _BLOCK.fields_by_name['variablesId']._options = None - _BLOCK.fields_by_name['variablesId']._serialized_options = b'\222?\0028\020\212\265\030\005\030\315\002x\001' + _BLOCK.fields_by_name['variablesId']._serialized_options = b'\212\265\030\005\030\315\002x\001' _BLOCK.fields_by_name['overrideState']._options = None _BLOCK.fields_by_name['overrideState']._serialized_options = b'\212\265\030\002x\001' _BLOCK.fields_by_name['activeInstruction']._options = None @@ -185,46 +185,46 @@ _BLOCK.fields_by_name['disabledDuration']._serialized_options = b'\222?\002\030\003\212\265\030\002H\001' _BLOCK._options = None _BLOCK._serialized_options = b'\212\265\030\006\030\306\002J\001\017' - _globals['_SEQUENCESTATUS']._serialized_start=4366 - _globals['_SEQUENCESTATUS']._serialized_end=4474 - _globals['_SEQUENCEERROR']._serialized_start=4477 - _globals['_SEQUENCEERROR']._serialized_end=4692 - _globals['_SEQUENCESTOREMODE']._serialized_start=4695 - _globals['_SEQUENCESTOREMODE']._serialized_end=4966 + _globals['_SEQUENCESTATUS']._serialized_start=4306 + _globals['_SEQUENCESTATUS']._serialized_end=4414 + _globals['_SEQUENCEERROR']._serialized_start=4417 + _globals['_SEQUENCEERROR']._serialized_end=4632 + _globals['_SEQUENCESTOREMODE']._serialized_start=4635 + _globals['_SEQUENCESTOREMODE']._serialized_end=4906 _globals['_COMMENT']._serialized_start=78 _globals['_COMMENT']._serialized_end=109 _globals['_RESTART']._serialized_start=111 _globals['_RESTART']._serialized_end=120 _globals['_ENABLEDISABLE']._serialized_start=122 - _globals['_ENABLEDISABLE']._serialized_end=225 - _globals['_WAIT']._serialized_start=227 - _globals['_WAIT']._serialized_end=233 - _globals['_WAITDURATION']._serialized_start=235 - _globals['_WAITDURATION']._serialized_end=343 - _globals['_WAITUNTIL']._serialized_start=345 - _globals['_WAITUNTIL']._serialized_end=438 - _globals['_WAITTEMPERATURERANGE']._serialized_start=441 - _globals['_WAITTEMPERATURERANGE']._serialized_end=727 - _globals['_WAITTEMPERATUREBOUNDARY']._serialized_start=730 - _globals['_WAITTEMPERATUREBOUNDARY']._serialized_end=931 - _globals['_SETSETPOINT']._serialized_start=934 - _globals['_SETSETPOINT']._serialized_end=1129 - _globals['_WAITSETPOINT']._serialized_start=1132 - _globals['_WAITSETPOINT']._serialized_end=1334 - _globals['_SETDIGITAL']._serialized_start=1337 - _globals['_SETDIGITAL']._serialized_end=1549 - _globals['_WAITDIGITAL']._serialized_start=1551 - _globals['_WAITDIGITAL']._serialized_end=1652 - _globals['_WAITDIGITALSTATE']._serialized_start=1655 - _globals['_WAITDIGITALSTATE']._serialized_end=1867 - _globals['_SETPWM']._serialized_start=1870 - _globals['_SETPWM']._serialized_end=2058 - _globals['_TARGETPROFILE']._serialized_start=2060 - _globals['_TARGETPROFILE']._serialized_end=2164 - _globals['_TARGETSEQUENCE']._serialized_start=2166 - _globals['_TARGETSEQUENCE']._serialized_end=2271 - _globals['_INSTRUCTION']._serialized_start=2274 - _globals['_INSTRUCTION']._serialized_end=3820 - _globals['_BLOCK']._serialized_start=3823 - _globals['_BLOCK']._serialized_end=4364 + _globals['_ENABLEDISABLE']._serialized_end=220 + _globals['_WAIT']._serialized_start=222 + _globals['_WAIT']._serialized_end=228 + _globals['_WAITDURATION']._serialized_start=230 + _globals['_WAITDURATION']._serialized_end=338 + _globals['_WAITUNTIL']._serialized_start=340 + _globals['_WAITUNTIL']._serialized_end=433 + _globals['_WAITTEMPERATURERANGE']._serialized_start=436 + _globals['_WAITTEMPERATURERANGE']._serialized_end=717 + _globals['_WAITTEMPERATUREBOUNDARY']._serialized_start=720 + _globals['_WAITTEMPERATUREBOUNDARY']._serialized_end=916 + _globals['_SETSETPOINT']._serialized_start=919 + _globals['_SETSETPOINT']._serialized_end=1109 + _globals['_WAITSETPOINT']._serialized_start=1112 + _globals['_WAITSETPOINT']._serialized_end=1309 + _globals['_SETDIGITAL']._serialized_start=1312 + _globals['_SETDIGITAL']._serialized_end=1519 + _globals['_WAITDIGITAL']._serialized_start=1521 + _globals['_WAITDIGITAL']._serialized_end=1617 + _globals['_WAITDIGITALSTATE']._serialized_start=1620 + _globals['_WAITDIGITALSTATE']._serialized_end=1827 + _globals['_SETPWM']._serialized_start=1830 + _globals['_SETPWM']._serialized_end=2013 + _globals['_TARGETPROFILE']._serialized_start=2015 + _globals['_TARGETPROFILE']._serialized_end=2114 + _globals['_TARGETSEQUENCE']._serialized_start=2116 + _globals['_TARGETSEQUENCE']._serialized_end=2216 + _globals['_INSTRUCTION']._serialized_start=2219 + _globals['_INSTRUCTION']._serialized_end=3765 + _globals['_BLOCK']._serialized_start=3768 + _globals['_BLOCK']._serialized_end=4304 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/SetpointProfile_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/SetpointProfile_pb2.py index dadd2130..9ca9542d 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/SetpointProfile_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/SetpointProfile_pb2.py @@ -15,7 +15,7 @@ import nanopb_pb2 as nanopb__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15SetpointProfile.proto\x12\x14\x62lox.SetpointProfile\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\"b\n\x05Point\x12\x1b\n\x04time\x18\x01 \x01(\rB\r\x92?\x02\x38 \x8a\xb5\x18\x04\x08\x03x\x01\x12\'\n\x0btemperature\x18\x02 \x01(\x05\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x01\x10\x80 x\x01H\x00\x42\x13\n\x11temperature_oneof\"\xeb\x01\n\x05\x42lock\x12\x33\n\x06points\x18\x01 \x03(\x0b\x32\x1b.blox.SetpointProfile.PointB\x06\x8a\xb5\x18\x02x\x01\x12\x17\n\x07\x65nabled\x18\x03 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12 \n\x08targetId\x18\x04 \x01(\rB\x0e\x92?\x02\x38\x10\x8a\xb5\x18\x05\x18\xaf\x02x\x01\x12#\n\x07setting\x18\x05 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x01\x10\x80 (\x01\x30\x01\x12\x1c\n\x05start\x18\x06 \x01(\rB\r\x92?\x02\x38 \x8a\xb5\x18\x04X\x01x\x01\x12#\n\x0e\x64rivenTargetId\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\n\x8a\xb5\x18\x06\x18\xb7\x02J\x01\x0f\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15SetpointProfile.proto\x12\x14\x62lox.SetpointProfile\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\"b\n\x05Point\x12\x1b\n\x04time\x18\x01 \x01(\rB\r\x92?\x02\x38 \x8a\xb5\x18\x04\x08\x03x\x01\x12\'\n\x0btemperature\x18\x02 \x01(\x05\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x01\x10\x80 x\x01H\x00\x42\x13\n\x11temperature_oneof\"\xe6\x01\n\x05\x42lock\x12\x33\n\x06points\x18\x01 \x03(\x0b\x32\x1b.blox.SetpointProfile.PointB\x06\x8a\xb5\x18\x02x\x01\x12\x17\n\x07\x65nabled\x18\x03 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x1b\n\x08targetId\x18\x04 \x01(\rB\t\x8a\xb5\x18\x05\x18\xaf\x02x\x01\x12#\n\x07setting\x18\x05 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x01\x10\x80 (\x01\x30\x01\x12\x1c\n\x05start\x18\x06 \x01(\rB\r\x92?\x02\x38 \x8a\xb5\x18\x04X\x01x\x01\x12#\n\x0e\x64rivenTargetId\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\n\x8a\xb5\x18\x06\x18\xb7\x02J\x01\x0f\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -31,7 +31,7 @@ _BLOCK.fields_by_name['enabled']._options = None _BLOCK.fields_by_name['enabled']._serialized_options = b'\212\265\030\002x\001' _BLOCK.fields_by_name['targetId']._options = None - _BLOCK.fields_by_name['targetId']._serialized_options = b'\222?\0028\020\212\265\030\005\030\257\002x\001' + _BLOCK.fields_by_name['targetId']._serialized_options = b'\212\265\030\005\030\257\002x\001' _BLOCK.fields_by_name['setting']._options = None _BLOCK.fields_by_name['setting']._serialized_options = b'\222?\0028 \212\265\030\t\010\001\020\200 (\0010\001' _BLOCK.fields_by_name['start']._options = None @@ -43,5 +43,5 @@ _globals['_POINT']._serialized_start=77 _globals['_POINT']._serialized_end=175 _globals['_BLOCK']._serialized_start=178 - _globals['_BLOCK']._serialized_end=413 + _globals['_BLOCK']._serialized_end=408 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/SetpointSensorPair_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/SetpointSensorPair_pb2.py index 41e90b67..ce3cabab 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/SetpointSensorPair_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/SetpointSensorPair_pb2.py @@ -16,7 +16,7 @@ import Claims_pb2 as Claims__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18SetpointSensorPair.proto\x12\x17\x62lox.SetpointSensorPair\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\x0c\x43laims.proto\"\x9b\x04\n\x05\x42lock\x12\x17\n\x07\x65nabled\x18\x07 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x1f\n\x08sensorId\x18\x02 \x01(\rB\r\x92?\x02\x38\x10\x8a\xb5\x18\x04\x18\x02x\x01\x12)\n\rstoredSetting\x18\x08 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x01\x10\x80 0\x01x\x01\x12*\n\x0e\x64\x65siredSetting\x18\x0f \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x01\x10\x80 (\x01\x30\x01\x12#\n\x07setting\x18\x05 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x01\x10\x80 (\x01\x30\x01\x12!\n\x05value\x18\x06 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x01\x10\x80 (\x01\x30\x01\x12+\n\x0fvalueUnfiltered\x18\x0b \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x01\x10\x80 (\x01\x30\x01\x12=\n\x06\x66ilter\x18\t \x01(\x0e\x32%.blox.SetpointSensorPair.FilterChoiceB\x06\x8a\xb5\x18\x02x\x01\x12)\n\x0f\x66ilterThreshold\x18\n \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x06\x10\x80 x\x01\x12\x13\n\x0bresetFilter\x18\x0c \x01(\x08\x12!\n\tclaimedBy\x18\r \x01(\rB\x0e\x92?\x02\x38\x10\x8a\xb5\x18\x05\x18\xff\x01(\x01\x12\x35\n\x0bsettingMode\x18\x0e \x01(\x0e\x32\x18.blox.Claims.SettingModeB\x06\x8a\xb5\x18\x02x\x01\x12#\n\x0esettingEnabled\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\x0e\x8a\xb5\x18\n\x18\xaf\x02J\x05\x01\x14\x04\x0f\x10*~\n\x0c\x46ilterChoice\x12\x0f\n\x0b\x46ILTER_NONE\x10\x00\x12\x0e\n\nFILTER_15s\x10\x01\x12\x0e\n\nFILTER_45s\x10\x02\x12\x0e\n\nFILTER_90s\x10\x03\x12\r\n\tFILTER_3m\x10\x04\x12\x0e\n\nFILTER_10m\x10\x05\x12\x0e\n\nFILTER_30m\x10\x06\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18SetpointSensorPair.proto\x12\x17\x62lox.SetpointSensorPair\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\x0c\x43laims.proto\"\x91\x04\n\x05\x42lock\x12\x17\n\x07\x65nabled\x18\x07 \x01(\x08\x42\x06\x8a\xb5\x18\x02x\x01\x12\x1a\n\x08sensorId\x18\x02 \x01(\rB\x08\x8a\xb5\x18\x04\x18\x02x\x01\x12)\n\rstoredSetting\x18\x08 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x01\x10\x80 0\x01x\x01\x12*\n\x0e\x64\x65siredSetting\x18\x0f \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x01\x10\x80 (\x01\x30\x01\x12#\n\x07setting\x18\x05 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x01\x10\x80 (\x01\x30\x01\x12!\n\x05value\x18\x06 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x01\x10\x80 (\x01\x30\x01\x12+\n\x0fvalueUnfiltered\x18\x0b \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x01\x10\x80 (\x01\x30\x01\x12=\n\x06\x66ilter\x18\t \x01(\x0e\x32%.blox.SetpointSensorPair.FilterChoiceB\x06\x8a\xb5\x18\x02x\x01\x12)\n\x0f\x66ilterThreshold\x18\n \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x06\x10\x80 x\x01\x12\x13\n\x0bresetFilter\x18\x0c \x01(\x08\x12\x1c\n\tclaimedBy\x18\r \x01(\rB\t\x8a\xb5\x18\x05\x18\xff\x01(\x01\x12\x35\n\x0bsettingMode\x18\x0e \x01(\x0e\x32\x18.blox.Claims.SettingModeB\x06\x8a\xb5\x18\x02x\x01\x12#\n\x0esettingEnabled\x18Z \x01(\x08\x42\x0b\x92?\x02\x18\x03\x8a\xb5\x18\x02H\x01:\x0e\x8a\xb5\x18\n\x18\xaf\x02J\x05\x01\x14\x04\x0f\x10*~\n\x0c\x46ilterChoice\x12\x0f\n\x0b\x46ILTER_NONE\x10\x00\x12\x0e\n\nFILTER_15s\x10\x01\x12\x0e\n\nFILTER_45s\x10\x02\x12\x0e\n\nFILTER_90s\x10\x03\x12\r\n\tFILTER_3m\x10\x04\x12\x0e\n\nFILTER_10m\x10\x05\x12\x0e\n\nFILTER_30m\x10\x06\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -26,7 +26,7 @@ _BLOCK.fields_by_name['enabled']._options = None _BLOCK.fields_by_name['enabled']._serialized_options = b'\212\265\030\002x\001' _BLOCK.fields_by_name['sensorId']._options = None - _BLOCK.fields_by_name['sensorId']._serialized_options = b'\222?\0028\020\212\265\030\004\030\002x\001' + _BLOCK.fields_by_name['sensorId']._serialized_options = b'\212\265\030\004\030\002x\001' _BLOCK.fields_by_name['storedSetting']._options = None _BLOCK.fields_by_name['storedSetting']._serialized_options = b'\222?\0028 \212\265\030\t\010\001\020\200 0\001x\001' _BLOCK.fields_by_name['desiredSetting']._options = None @@ -42,15 +42,15 @@ _BLOCK.fields_by_name['filterThreshold']._options = None _BLOCK.fields_by_name['filterThreshold']._serialized_options = b'\222?\0028 \212\265\030\007\010\006\020\200 x\001' _BLOCK.fields_by_name['claimedBy']._options = None - _BLOCK.fields_by_name['claimedBy']._serialized_options = b'\222?\0028\020\212\265\030\005\030\377\001(\001' + _BLOCK.fields_by_name['claimedBy']._serialized_options = b'\212\265\030\005\030\377\001(\001' _BLOCK.fields_by_name['settingMode']._options = None _BLOCK.fields_by_name['settingMode']._serialized_options = b'\212\265\030\002x\001' _BLOCK.fields_by_name['settingEnabled']._options = None _BLOCK.fields_by_name['settingEnabled']._serialized_options = b'\222?\002\030\003\212\265\030\002H\001' _BLOCK._options = None _BLOCK._serialized_options = b'\212\265\030\n\030\257\002J\005\001\024\004\017\020' - _globals['_FILTERCHOICE']._serialized_start=639 - _globals['_FILTERCHOICE']._serialized_end=765 + _globals['_FILTERCHOICE']._serialized_start=629 + _globals['_FILTERCHOICE']._serialized_end=755 _globals['_BLOCK']._serialized_start=98 - _globals['_BLOCK']._serialized_end=637 + _globals['_BLOCK']._serialized_end=627 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/TempSensorAnalog_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/TempSensorAnalog_pb2.py index ff742b6d..07314af7 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/TempSensorAnalog_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/TempSensorAnalog_pb2.py @@ -16,7 +16,7 @@ import PrecisionAnalogModule_pb2 as PrecisionAnalogModule__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16TempSensorAnalog.proto\x12\x15\x62lox.TempSensorAnalog\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\x1bPrecisionAnalogModule.proto\"\xe7\x02\n\x05\x42lock\x12\x41\n\x04type\x18\x01 \x01(\x0e\x32+.blox.TempSensorAnalog.TempSensorAnalogTypeB\x06\x8a\xb5\x18\x02x\x01\x12 \n\x08moduleId\x18\x02 \x01(\rB\x0e\x92?\x02\x38\x10\x8a\xb5\x18\x05\x18\xcb\x02x\x01\x12\x1c\n\x07\x63hannel\x18\x03 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02x\x01\x12!\n\x05value\x18\x04 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x01\x10\x80 (\x01\x30\x01\x12 \n\x06offset\x18\x05 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x06\x10\x80 x\x01\x12G\n\x08\x64\x65tected\x18\x06 \x01(\x0e\x32-.blox.PrecisionAnalogModule.AnalogChannelTypeB\x06\x8a\xb5\x18\x02(\x01\x12\x41\n\x04spec\x18\x07 \x01(\x0e\x32+.blox.TempSensorAnalog.TempSensorAnalogSpecB\x06\x8a\xb5\x18\x02x\x01:\n\x8a\xb5\x18\x06\x18\xcc\x02J\x01\x02*\x94\x01\n\x14TempSensorAnalogType\x12\x1c\n\x18TEMP_SENSOR_TYPE_NOT_SET\x10\x00\x12\x1e\n\x1aTEMP_SENSOR_TYPE_RTD_2WIRE\x10\x01\x12\x1e\n\x1aTEMP_SENSOR_TYPE_RTD_3WIRE\x10\x02\x12\x1e\n\x1aTEMP_SENSOR_TYPE_RTD_4WIRE\x10\x03*z\n\x14TempSensorAnalogSpec\x12\x10\n\x0cSPEC_NOT_SET\x10\x00\x12\x12\n\x0eSPEC_PT100_385\x10\x01\x12\x12\n\x0eSPEC_PT100_392\x10\x02\x12\x13\n\x0fSPEC_PT1000_385\x10\x03\x12\x13\n\x0fSPEC_PT1000_392\x10\x04\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16TempSensorAnalog.proto\x12\x15\x62lox.TempSensorAnalog\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\x1bPrecisionAnalogModule.proto\"\xe2\x02\n\x05\x42lock\x12\x41\n\x04type\x18\x01 \x01(\x0e\x32+.blox.TempSensorAnalog.TempSensorAnalogTypeB\x06\x8a\xb5\x18\x02x\x01\x12\x1b\n\x08moduleId\x18\x02 \x01(\rB\t\x8a\xb5\x18\x05\x18\xcb\x02x\x01\x12\x1c\n\x07\x63hannel\x18\x03 \x01(\rB\x0b\x92?\x02\x38\x08\x8a\xb5\x18\x02x\x01\x12!\n\x05value\x18\x04 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x01\x10\x80 (\x01\x30\x01\x12 \n\x06offset\x18\x05 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x06\x10\x80 x\x01\x12G\n\x08\x64\x65tected\x18\x06 \x01(\x0e\x32-.blox.PrecisionAnalogModule.AnalogChannelTypeB\x06\x8a\xb5\x18\x02(\x01\x12\x41\n\x04spec\x18\x07 \x01(\x0e\x32+.blox.TempSensorAnalog.TempSensorAnalogSpecB\x06\x8a\xb5\x18\x02x\x01:\n\x8a\xb5\x18\x06\x18\xcc\x02J\x01\x02*\x94\x01\n\x14TempSensorAnalogType\x12\x1c\n\x18TEMP_SENSOR_TYPE_NOT_SET\x10\x00\x12\x1e\n\x1aTEMP_SENSOR_TYPE_RTD_2WIRE\x10\x01\x12\x1e\n\x1aTEMP_SENSOR_TYPE_RTD_3WIRE\x10\x02\x12\x1e\n\x1aTEMP_SENSOR_TYPE_RTD_4WIRE\x10\x03*z\n\x14TempSensorAnalogSpec\x12\x10\n\x0cSPEC_NOT_SET\x10\x00\x12\x12\n\x0eSPEC_PT100_385\x10\x01\x12\x12\n\x0eSPEC_PT100_392\x10\x02\x12\x13\n\x0fSPEC_PT1000_385\x10\x03\x12\x13\n\x0fSPEC_PT1000_392\x10\x04\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -26,7 +26,7 @@ _BLOCK.fields_by_name['type']._options = None _BLOCK.fields_by_name['type']._serialized_options = b'\212\265\030\002x\001' _BLOCK.fields_by_name['moduleId']._options = None - _BLOCK.fields_by_name['moduleId']._serialized_options = b'\222?\0028\020\212\265\030\005\030\313\002x\001' + _BLOCK.fields_by_name['moduleId']._serialized_options = b'\212\265\030\005\030\313\002x\001' _BLOCK.fields_by_name['channel']._options = None _BLOCK.fields_by_name['channel']._serialized_options = b'\222?\0028\010\212\265\030\002x\001' _BLOCK.fields_by_name['value']._options = None @@ -39,10 +39,10 @@ _BLOCK.fields_by_name['spec']._serialized_options = b'\212\265\030\002x\001' _BLOCK._options = None _BLOCK._serialized_options = b'\212\265\030\006\030\314\002J\001\002' - _globals['_TEMPSENSORANALOGTYPE']._serialized_start=471 - _globals['_TEMPSENSORANALOGTYPE']._serialized_end=619 - _globals['_TEMPSENSORANALOGSPEC']._serialized_start=621 - _globals['_TEMPSENSORANALOGSPEC']._serialized_end=743 + _globals['_TEMPSENSORANALOGTYPE']._serialized_start=466 + _globals['_TEMPSENSORANALOGTYPE']._serialized_end=614 + _globals['_TEMPSENSORANALOGSPEC']._serialized_start=616 + _globals['_TEMPSENSORANALOGSPEC']._serialized_end=738 _globals['_BLOCK']._serialized_start=109 - _globals['_BLOCK']._serialized_end=468 + _globals['_BLOCK']._serialized_end=463 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/TempSensorCombi_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/TempSensorCombi_pb2.py index 5f549824..887642aa 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/TempSensorCombi_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/TempSensorCombi_pb2.py @@ -15,7 +15,7 @@ import nanopb_pb2 as nanopb__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15TempSensorCombi.proto\x12\x14\x62lox.TempSensorCombi\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\"\x9c\x01\n\x05\x42lock\x12!\n\x05value\x18\x01 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x01\x10\x80 (\x01\x30\x01\x12\x42\n\x0b\x63ombineFunc\x18\x02 \x01(\x0e\x32%.blox.TempSensorCombi.SensorCombiFuncB\x06\x8a\xb5\x18\x02x\x01\x12 \n\x07sensors\x18\x03 \x03(\rB\x0f\x92?\x04\x10\x08\x38\x10\x8a\xb5\x18\x04\x18\x02x\x01:\n\x8a\xb5\x18\x06\x18\xc4\x02J\x01\x02*b\n\x0fSensorCombiFunc\x12\x19\n\x15SENSOR_COMBI_FUNC_AVG\x10\x00\x12\x19\n\x15SENSOR_COMBI_FUNC_MIN\x10\x01\x12\x19\n\x15SENSOR_COMBI_FUNC_MAX\x10\x02\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15TempSensorCombi.proto\x12\x14\x62lox.TempSensorCombi\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\"\x9a\x01\n\x05\x42lock\x12!\n\x05value\x18\x01 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x01\x10\x80 (\x01\x30\x01\x12\x42\n\x0b\x63ombineFunc\x18\x02 \x01(\x0e\x32%.blox.TempSensorCombi.SensorCombiFuncB\x06\x8a\xb5\x18\x02x\x01\x12\x1e\n\x07sensors\x18\x03 \x03(\rB\r\x92?\x02\x10\x08\x8a\xb5\x18\x04\x18\x02x\x01:\n\x8a\xb5\x18\x06\x18\xc4\x02J\x01\x02*b\n\x0fSensorCombiFunc\x12\x19\n\x15SENSOR_COMBI_FUNC_AVG\x10\x00\x12\x19\n\x15SENSOR_COMBI_FUNC_MIN\x10\x01\x12\x19\n\x15SENSOR_COMBI_FUNC_MAX\x10\x02\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -27,11 +27,11 @@ _BLOCK.fields_by_name['combineFunc']._options = None _BLOCK.fields_by_name['combineFunc']._serialized_options = b'\212\265\030\002x\001' _BLOCK.fields_by_name['sensors']._options = None - _BLOCK.fields_by_name['sensors']._serialized_options = b'\222?\004\020\0108\020\212\265\030\004\030\002x\001' + _BLOCK.fields_by_name['sensors']._serialized_options = b'\222?\002\020\010\212\265\030\004\030\002x\001' _BLOCK._options = None _BLOCK._serialized_options = b'\212\265\030\006\030\304\002J\001\002' - _globals['_SENSORCOMBIFUNC']._serialized_start=236 - _globals['_SENSORCOMBIFUNC']._serialized_end=334 + _globals['_SENSORCOMBIFUNC']._serialized_start=234 + _globals['_SENSORCOMBIFUNC']._serialized_end=332 _globals['_BLOCK']._serialized_start=78 - _globals['_BLOCK']._serialized_end=234 + _globals['_BLOCK']._serialized_end=232 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/TempSensorOneWire_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/TempSensorOneWire_pb2.py index 0a5d330e..a90cafd3 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/TempSensorOneWire_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/TempSensorOneWire_pb2.py @@ -15,7 +15,7 @@ import nanopb_pb2 as nanopb__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17TempSensorOneWire.proto\x12\x16\x62lox.TempSensorOneWire\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\"\x9a\x01\n\x05\x42lock\x12!\n\x05value\x18\x01 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x01\x10\x80 (\x01\x30\x01\x12 \n\x06offset\x18\x03 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x06\x10\x80 x\x01\x12\x19\n\x07\x61\x64\x64ress\x18\x04 \x01(\x06\x42\x08\x8a\xb5\x18\x04 \x01x\x01\x12$\n\x0coneWireBusId\x18\x05 \x01(\rB\x0e\x92?\x02\x38\x10\x8a\xb5\x18\x05\x18\x82\x02(\x01:\x0b\x8a\xb5\x18\x07\x18\xae\x02J\x02\x02\tb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17TempSensorOneWire.proto\x12\x16\x62lox.TempSensorOneWire\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\"\x95\x01\n\x05\x42lock\x12!\n\x05value\x18\x01 \x01(\x11\x42\x12\x92?\x02\x38 \x8a\xb5\x18\t\x08\x01\x10\x80 (\x01\x30\x01\x12 \n\x06offset\x18\x03 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x06\x10\x80 x\x01\x12\x19\n\x07\x61\x64\x64ress\x18\x04 \x01(\x06\x42\x08\x8a\xb5\x18\x04 \x01x\x01\x12\x1f\n\x0coneWireBusId\x18\x05 \x01(\rB\t\x8a\xb5\x18\x05\x18\x82\x02(\x01:\x0b\x8a\xb5\x18\x07\x18\xae\x02J\x02\x02\tb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -29,9 +29,9 @@ _BLOCK.fields_by_name['address']._options = None _BLOCK.fields_by_name['address']._serialized_options = b'\212\265\030\004 \001x\001' _BLOCK.fields_by_name['oneWireBusId']._options = None - _BLOCK.fields_by_name['oneWireBusId']._serialized_options = b'\222?\0028\020\212\265\030\005\030\202\002(\001' + _BLOCK.fields_by_name['oneWireBusId']._serialized_options = b'\212\265\030\005\030\202\002(\001' _BLOCK._options = None _BLOCK._serialized_options = b'\212\265\030\007\030\256\002J\002\002\t' _globals['_BLOCK']._serialized_start=82 - _globals['_BLOCK']._serialized_end=236 + _globals['_BLOCK']._serialized_end=231 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/Variables_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/Variables_pb2.py index bf73be09..98d504d6 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/Variables_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/Variables_pb2.py @@ -16,7 +16,7 @@ import IoArray_pb2 as IoArray__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0fVariables.proto\x12\x0e\x62lox.Variables\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\rIoArray.proto\"\xaf\x02\n\x0cVarContainer\x12\x0f\n\x05\x65mpty\x18\x01 \x01(\x08H\x00\x12\x35\n\x07\x64igital\x18\n \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x06\x8a\xb5\x18\x02x\x01H\x00\x12 \n\x06\x61nalog\x18\x0b \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 x\x01H\x00\x12 \n\x04temp\x18\x14 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x01\x10\x80 x\x01H\x00\x12%\n\tdeltaTemp\x18\x15 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x06\x10\x80 x\x01H\x00\x12\"\n\ttimestamp\x18\x1e \x01(\rB\r\x92?\x02\x38 \x8a\xb5\x18\x04X\x01x\x01H\x00\x12!\n\x08\x64uration\x18\x1f \x01(\rB\r\x92?\x02\x38 \x8a\xb5\x18\x04\x08\x03x\x01H\x00\x12\x1e\n\x04link\x18( \x01(\rB\x0e\x92?\x02\x38\x10\x8a\xb5\x18\x05\x18\xff\x01x\x01H\x00\x42\x05\n\x03var\"\xa1\x01\n\x05\x42lock\x12?\n\tvariables\x18\x01 \x03(\x0b\x32$.blox.Variables.Block.VariablesEntryB\x06\x8a\xb5\x18\x02x\x01\x1aN\n\x0eVariablesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.blox.Variables.VarContainer:\x02\x38\x01:\x07\x8a\xb5\x18\x03\x18\xcd\x02\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0fVariables.proto\x12\x0e\x62lox.Variables\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\x1a\rIoArray.proto\"\xaa\x02\n\x0cVarContainer\x12\x0f\n\x05\x65mpty\x18\x01 \x01(\x08H\x00\x12\x35\n\x07\x64igital\x18\n \x01(\x0e\x32\x1a.blox.IoArray.DigitalStateB\x06\x8a\xb5\x18\x02x\x01H\x00\x12 \n\x06\x61nalog\x18\x0b \x01(\x11\x42\x0e\x92?\x02\x38 \x8a\xb5\x18\x05\x10\x80 x\x01H\x00\x12 \n\x04temp\x18\x14 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x01\x10\x80 x\x01H\x00\x12%\n\tdeltaTemp\x18\x15 \x01(\x11\x42\x10\x92?\x02\x38 \x8a\xb5\x18\x07\x08\x06\x10\x80 x\x01H\x00\x12\"\n\ttimestamp\x18\x1e \x01(\rB\r\x92?\x02\x38 \x8a\xb5\x18\x04X\x01x\x01H\x00\x12!\n\x08\x64uration\x18\x1f \x01(\rB\r\x92?\x02\x38 \x8a\xb5\x18\x04\x08\x03x\x01H\x00\x12\x19\n\x04link\x18( \x01(\rB\t\x8a\xb5\x18\x05\x18\xff\x01x\x01H\x00\x42\x05\n\x03var\"\xa1\x01\n\x05\x42lock\x12?\n\tvariables\x18\x01 \x03(\x0b\x32$.blox.Variables.Block.VariablesEntryB\x06\x8a\xb5\x18\x02x\x01\x1aN\n\x0eVariablesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.blox.Variables.VarContainer:\x02\x38\x01:\x07\x8a\xb5\x18\x03\x18\xcd\x02\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -36,7 +36,7 @@ _VARCONTAINER.fields_by_name['duration']._options = None _VARCONTAINER.fields_by_name['duration']._serialized_options = b'\222?\0028 \212\265\030\004\010\003x\001' _VARCONTAINER.fields_by_name['link']._options = None - _VARCONTAINER.fields_by_name['link']._serialized_options = b'\222?\0028\020\212\265\030\005\030\377\001x\001' + _VARCONTAINER.fields_by_name['link']._serialized_options = b'\212\265\030\005\030\377\001x\001' _BLOCK_VARIABLESENTRY._options = None _BLOCK_VARIABLESENTRY._serialized_options = b'8\001' _BLOCK.fields_by_name['variables']._options = None @@ -44,9 +44,9 @@ _BLOCK._options = None _BLOCK._serialized_options = b'\212\265\030\003\030\315\002' _globals['_VARCONTAINER']._serialized_start=81 - _globals['_VARCONTAINER']._serialized_end=384 - _globals['_BLOCK']._serialized_start=387 - _globals['_BLOCK']._serialized_end=548 - _globals['_BLOCK_VARIABLESENTRY']._serialized_start=461 - _globals['_BLOCK_VARIABLESENTRY']._serialized_end=539 + _globals['_VARCONTAINER']._serialized_end=379 + _globals['_BLOCK']._serialized_start=382 + _globals['_BLOCK']._serialized_end=543 + _globals['_BLOCK_VARIABLESENTRY']._serialized_start=456 + _globals['_BLOCK_VARIABLESENTRY']._serialized_end=534 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/codec/proto-compiled/brewblox_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/brewblox_pb2.py index 92916c5d..8ca937d7 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/brewblox_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/brewblox_pb2.py @@ -15,7 +15,7 @@ import nanopb_pb2 as nanopb__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0e\x62rewblox.proto\x12\x08\x62rewblox\x1a google/protobuf/descriptor.proto\x1a\x0cnanopb.proto\"|\n\x0bMessageOpts\x12$\n\x07objtype\x18\x03 \x01(\x0e\x32\x13.brewblox.BlockType\x12(\n\x04impl\x18\t \x03(\x0e\x32\x13.brewblox.BlockTypeB\x05\x92?\x02\x10\x05\x12\x16\n\x07subtype\x18\x0b \x01(\rB\x05\x92?\x02\x38\x10:\x05\x92?\x02\x30\x01\"\xb0\x02\n\tFieldOpts\x12 \n\x04unit\x18\x01 \x01(\x0e\x32\x12.brewblox.UnitType\x12\r\n\x05scale\x18\x02 \x01(\r\x12$\n\x07objtype\x18\x03 \x01(\x0e\x32\x13.brewblox.BlockType\x12\r\n\x05hexed\x18\x04 \x01(\x08\x12\x10\n\x08readonly\x18\x05 \x01(\x08\x12\x0e\n\x06logged\x18\x06 \x01(\x08\x12\x0e\n\x06stored\x18\x0f \x01(\x08\x12\x0e\n\x06hexstr\x18\x07 \x01(\x08\x12\x0f\n\x07ignored\x18\t \x01(\x08\x12\x10\n\x08\x62itfield\x18\n \x01(\x08\x12\x10\n\x08\x64\x61tetime\x18\x0b \x01(\x08\x12\x13\n\x0bipv4address\x18\x0c \x01(\x08\x12\x14\n\x0comit_if_zero\x18\r \x01(\x08\x12\x14\n\x0cnull_if_zero\x18\x0e \x01(\x08:\x05\x92?\x02\x30\x01*\xad\x02\n\x08UnitType\x12\n\n\x06NotSet\x10\x00\x12\x0b\n\x07\x43\x65lsius\x10\x01\x12\x12\n\x0eInverseCelsius\x10\x02\x12\n\n\x06Second\x10\x03\x12\n\n\x06Minute\x10\x04\x12\x08\n\x04Hour\x10\x05\x12\x10\n\x0c\x44\x65ltaCelsius\x10\x06\x12\x19\n\x15\x44\x65ltaCelsiusPerSecond\x10\x07\x12\x19\n\x15\x44\x65ltaCelsiusPerMinute\x10\x08\x12\x17\n\x13\x44\x65ltaCelsiusPerHour\x10\t\x12\x1a\n\x16\x44\x65ltaCelsiusMultSecond\x10\n\x12\x1a\n\x16\x44\x65ltaCelsiusMultMinute\x10\x0b\x12\x18\n\x14\x44\x65ltaCelsiusMultHour\x10\x0c\x12\x0c\n\x08MilliBar\x10\r\x12\x08\n\x04Volt\x10\x0e\x12\x07\n\x03Ohm\x10\x0f*\x96\x0b\n\tBlockType\x12\x0b\n\x07Invalid\x10\x00\x12\x19\n\x15ProcessValueInterface\x10\x01\x12\x17\n\x13TempSensorInterface\x10\x02\x12\x1f\n\x1bSetpointSensorPairInterface\x10\x04\x12\x1b\n\x17\x41\x63tuatorAnalogInterface\x10\x05\x12\x1c\n\x18\x41\x63tuatorDigitalInterface\x10\x06\x12\x15\n\x11\x42\x61lancerInterface\x10\x07\x12\x12\n\x0eMutexInterface\x10\x08\x12\x1a\n\x16OneWireDeviceInterface\x10\t\x12\x14\n\x10IoArrayInterface\x10\n\x12\x13\n\x0f\x44S2408Interface\x10\x0b\x12\x17\n\x13OneWireBusInterface\x10\x0c\x12\x15\n\x11IoModuleInterface\x10\r\x12\x1f\n\x1bOneWireDeviceBlockInterface\x10\x0e\x12\x14\n\x10\x45nablerInterface\x10\x0f\x12\x16\n\x12\x43laimableInterface\x10\x10\x12\x15\n\x11IoDriverInterface\x10\x11\x12\x15\n\x11SetpointInterface\x10\x12\x12\x19\n\x15StoredAnalogInterface\x10\x13\x12\x1b\n\x17StoredSetpointInterface\x10\x14\x12\x1a\n\x16StoredDigitalInterface\x10\x15\x12\x1e\n\x1a\x43onstrainedAnalogInterface\x10\x16\x12 \n\x1c\x43onstrainedSetpointInterface\x10\x17\x12\x1f\n\x1b\x43onstrainedDigitalInterface\x10\x18\x12\x1c\n\x18ScanningFactoryInterface\x10\x19\x12\x1c\n\x18I2CDiscoverableInterface\x10\x1a\x12\x14\n\x10\x44igitalInterface\x10\x1b\x12\x19\n\x15\x41nalogModuleInterface\x10\x1c\x12\x08\n\x03\x41ny\x10\xff\x01\x12\x0c\n\x07SysInfo\x10\x80\x02\x12\n\n\x05Ticks\x10\x81\x02\x12\x0f\n\nOneWireBus\x10\x82\x02\x12\x0e\n\tBoardPins\x10\x83\x02\x12\x13\n\x0eTempSensorMock\x10\xad\x02\x12\x16\n\x11TempSensorOneWire\x10\xae\x02\x12\x17\n\x12SetpointSensorPair\x10\xaf\x02\x12\x08\n\x03Pid\x10\xb0\x02\x12\x17\n\x12\x41\x63tuatorAnalogMock\x10\xb1\x02\x12\x10\n\x0b\x41\x63tuatorPin\x10\xb2\x02\x12\x10\n\x0b\x41\x63tuatorPwm\x10\xb3\x02\x12\x13\n\x0e\x41\x63tuatorOffset\x10\xb4\x02\x12\r\n\x08\x42\x61lancer\x10\xb5\x02\x12\n\n\x05Mutex\x10\xb6\x02\x12\x14\n\x0fSetpointProfile\x10\xb7\x02\x12\x11\n\x0cWiFiSettings\x10\xb8\x02\x12\x12\n\rTouchSettings\x10\xb9\x02\x12\x14\n\x0f\x44isplaySettings\x10\xba\x02\x12\x0b\n\x06\x44S2413\x10\xbb\x02\x12\x14\n\x0f\x41\x63tuatorOneWire\x10\xbc\x02\x12\x0b\n\x06\x44S2408\x10\xbd\x02\x12\x14\n\x0f\x44igitalActuator\x10\xbe\x02\x12\x0f\n\nSpark3Pins\x10\xbf\x02\x12\x0f\n\nSpark2Pins\x10\xc0\x02\x12\x0f\n\nMotorValve\x10\xc1\x02\x12\x12\n\rActuatorLogic\x10\xc2\x02\x12\r\n\x08MockPins\x10\xc3\x02\x12\x14\n\x0fTempSensorCombi\x10\xc4\x02\x12\x16\n\x11OneWireGpioModule\x10\xc5\x02\x12\r\n\x08Sequence\x10\xc6\x02\x12\x17\n\x12TempSensorExternal\x10\xc8\x02\x12\x0c\n\x07\x46\x61stPwm\x10\xc9\x02\x12\x11\n\x0c\x44igitalInput\x10\xca\x02\x12\x1a\n\x15PrecisionAnalogModule\x10\xcb\x02\x12\x15\n\x10TempSensorAnalog\x10\xcc\x02\x12\x0e\n\tVariables\x10\xcd\x02:J\n\x05\x66ield\x12\x1d.google.protobuf.FieldOptions\x18\xd1\x86\x03 \x01(\x0b\x32\x13.brewblox.FieldOptsB\x05\x92?\x02\x18\x03:L\n\x03msg\x12\x1f.google.protobuf.MessageOptions\x18\xd1\x86\x03 \x01(\x0b\x32\x15.brewblox.MessageOptsB\x05\x92?\x02\x18\x03\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0e\x62rewblox.proto\x12\x08\x62rewblox\x1a google/protobuf/descriptor.proto\x1a\x0cnanopb.proto\"|\n\x0bMessageOpts\x12$\n\x07objtype\x18\x03 \x01(\x0e\x32\x13.brewblox.BlockType\x12(\n\x04impl\x18\t \x03(\x0e\x32\x13.brewblox.BlockTypeB\x05\x92?\x02\x10\x05\x12\x16\n\x07subtype\x18\x0b \x01(\rB\x05\x92?\x02\x38\x10:\x05\x92?\x02\x30\x01\"\xb0\x02\n\tFieldOpts\x12 \n\x04unit\x18\x01 \x01(\x0e\x32\x12.brewblox.UnitType\x12\r\n\x05scale\x18\x02 \x01(\r\x12$\n\x07objtype\x18\x03 \x01(\x0e\x32\x13.brewblox.BlockType\x12\r\n\x05hexed\x18\x04 \x01(\x08\x12\x10\n\x08readonly\x18\x05 \x01(\x08\x12\x0e\n\x06logged\x18\x06 \x01(\x08\x12\x0e\n\x06stored\x18\x0f \x01(\x08\x12\x0e\n\x06hexstr\x18\x07 \x01(\x08\x12\x0f\n\x07ignored\x18\t \x01(\x08\x12\x10\n\x08\x62itfield\x18\n \x01(\x08\x12\x10\n\x08\x64\x61tetime\x18\x0b \x01(\x08\x12\x13\n\x0bipv4address\x18\x0c \x01(\x08\x12\x14\n\x0comit_if_zero\x18\r \x01(\x08\x12\x14\n\x0cnull_if_zero\x18\x0e \x01(\x08:\x05\x92?\x02\x30\x01*\xad\x02\n\x08UnitType\x12\n\n\x06NotSet\x10\x00\x12\x0b\n\x07\x43\x65lsius\x10\x01\x12\x12\n\x0eInverseCelsius\x10\x02\x12\n\n\x06Second\x10\x03\x12\n\n\x06Minute\x10\x04\x12\x08\n\x04Hour\x10\x05\x12\x10\n\x0c\x44\x65ltaCelsius\x10\x06\x12\x19\n\x15\x44\x65ltaCelsiusPerSecond\x10\x07\x12\x19\n\x15\x44\x65ltaCelsiusPerMinute\x10\x08\x12\x17\n\x13\x44\x65ltaCelsiusPerHour\x10\t\x12\x1a\n\x16\x44\x65ltaCelsiusMultSecond\x10\n\x12\x1a\n\x16\x44\x65ltaCelsiusMultMinute\x10\x0b\x12\x18\n\x14\x44\x65ltaCelsiusMultHour\x10\x0c\x12\x0c\n\x08MilliBar\x10\r\x12\x08\n\x04Volt\x10\x0e\x12\x07\n\x03Ohm\x10\x0f*\xb9\x0b\n\tBlockType\x12\x0b\n\x07Invalid\x10\x00\x12\x19\n\x15ProcessValueInterface\x10\x01\x12\x17\n\x13TempSensorInterface\x10\x02\x12\x1f\n\x1bSetpointSensorPairInterface\x10\x04\x12\x1b\n\x17\x41\x63tuatorAnalogInterface\x10\x05\x12\x1c\n\x18\x41\x63tuatorDigitalInterface\x10\x06\x12\x15\n\x11\x42\x61lancerInterface\x10\x07\x12\x12\n\x0eMutexInterface\x10\x08\x12\x1a\n\x16OneWireDeviceInterface\x10\t\x12\x14\n\x10IoArrayInterface\x10\n\x12\x13\n\x0f\x44S2408Interface\x10\x0b\x12\x17\n\x13OneWireBusInterface\x10\x0c\x12\x15\n\x11IoModuleInterface\x10\r\x12\x1f\n\x1bOneWireDeviceBlockInterface\x10\x0e\x12\x14\n\x10\x45nablerInterface\x10\x0f\x12\x16\n\x12\x43laimableInterface\x10\x10\x12\x15\n\x11IoDriverInterface\x10\x11\x12\x15\n\x11SetpointInterface\x10\x12\x12\x19\n\x15StoredAnalogInterface\x10\x13\x12\x1b\n\x17StoredSetpointInterface\x10\x14\x12\x1a\n\x16StoredDigitalInterface\x10\x15\x12\x1e\n\x1a\x43onstrainedAnalogInterface\x10\x16\x12 \n\x1c\x43onstrainedSetpointInterface\x10\x17\x12\x1f\n\x1b\x43onstrainedDigitalInterface\x10\x18\x12\x1c\n\x18ScanningFactoryInterface\x10\x19\x12\x1c\n\x18I2CDiscoverableInterface\x10\x1a\x12\x14\n\x10\x44igitalInterface\x10\x1b\x12\x19\n\x15\x41nalogModuleInterface\x10\x1c\x12\x08\n\x03\x41ny\x10\xff\x01\x12\x0c\n\x07SysInfo\x10\x80\x02\x12\n\n\x05Ticks\x10\x81\x02\x12\x0f\n\nOneWireBus\x10\x82\x02\x12\x0e\n\tBoardPins\x10\x83\x02\x12\x13\n\x0eTempSensorMock\x10\xad\x02\x12\x16\n\x11TempSensorOneWire\x10\xae\x02\x12\x17\n\x12SetpointSensorPair\x10\xaf\x02\x12\x08\n\x03Pid\x10\xb0\x02\x12\x17\n\x12\x41\x63tuatorAnalogMock\x10\xb1\x02\x12\x10\n\x0b\x41\x63tuatorPin\x10\xb2\x02\x12\x10\n\x0b\x41\x63tuatorPwm\x10\xb3\x02\x12\x13\n\x0e\x41\x63tuatorOffset\x10\xb4\x02\x12\r\n\x08\x42\x61lancer\x10\xb5\x02\x12\n\n\x05Mutex\x10\xb6\x02\x12\x14\n\x0fSetpointProfile\x10\xb7\x02\x12\x11\n\x0cWiFiSettings\x10\xb8\x02\x12\x12\n\rTouchSettings\x10\xb9\x02\x12\x14\n\x0f\x44isplaySettings\x10\xba\x02\x12\x0b\n\x06\x44S2413\x10\xbb\x02\x12\x14\n\x0f\x41\x63tuatorOneWire\x10\xbc\x02\x12\x0b\n\x06\x44S2408\x10\xbd\x02\x12\x14\n\x0f\x44igitalActuator\x10\xbe\x02\x12\x0f\n\nSpark3Pins\x10\xbf\x02\x12\x0f\n\nSpark2Pins\x10\xc0\x02\x12\x0f\n\nMotorValve\x10\xc1\x02\x12\x12\n\rActuatorLogic\x10\xc2\x02\x12\r\n\x08MockPins\x10\xc3\x02\x12\x14\n\x0fTempSensorCombi\x10\xc4\x02\x12\x16\n\x11OneWireGpioModule\x10\xc5\x02\x12\r\n\x08Sequence\x10\xc6\x02\x12\x17\n\x12TempSensorExternal\x10\xc8\x02\x12\x0c\n\x07\x46\x61stPwm\x10\xc9\x02\x12\x11\n\x0c\x44igitalInput\x10\xca\x02\x12\x1a\n\x15PrecisionAnalogModule\x10\xcb\x02\x12\x15\n\x10TempSensorAnalog\x10\xcc\x02\x12\x0e\n\tVariables\x10\xcd\x02\x12\x0f\n\tCorrupted\x10\xfc\xff\x03\x12\x10\n\nDeprecated\x10\xfd\xff\x03:J\n\x05\x66ield\x12\x1d.google.protobuf.FieldOptions\x18\xd1\x86\x03 \x01(\x0b\x32\x13.brewblox.FieldOptsB\x05\x92?\x02\x18\x03:L\n\x03msg\x12\x1f.google.protobuf.MessageOptions\x18\xd1\x86\x03 \x01(\x0b\x32\x15.brewblox.MessageOptsB\x05\x92?\x02\x18\x03\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -37,7 +37,7 @@ _globals['_UNITTYPE']._serialized_start=510 _globals['_UNITTYPE']._serialized_end=811 _globals['_BLOCKTYPE']._serialized_start=814 - _globals['_BLOCKTYPE']._serialized_end=2244 + _globals['_BLOCKTYPE']._serialized_end=2279 _globals['_MESSAGEOPTS']._serialized_start=76 _globals['_MESSAGEOPTS']._serialized_end=200 _globals['_FIELDOPTS']._serialized_start=203 diff --git a/brewblox_devcon_spark/codec/proto-compiled/command_pb2.py b/brewblox_devcon_spark/codec/proto-compiled/command_pb2.py index 8f68dc00..2c2b3f91 100644 --- a/brewblox_devcon_spark/codec/proto-compiled/command_pb2.py +++ b/brewblox_devcon_spark/codec/proto-compiled/command_pb2.py @@ -15,7 +15,7 @@ import nanopb_pb2 as nanopb__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rcommand.proto\x12\x07\x63ommand\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\"%\n\tMaskField\x12\x18\n\x07\x61\x64\x64ress\x18\x02 \x03(\rB\x07\x92?\x04\x10\x04\x38\x10\"\xbf\x01\n\x07Payload\x12\x16\n\x07\x62lockId\x18\x01 \x01(\rB\x05\x92?\x02\x38\x10\x12&\n\tblockType\x18\x02 \x01(\x0e\x32\x13.brewblox.BlockType\x12\x16\n\x07subtype\x18\x03 \x01(\rB\x05\x92?\x02\x38\x10\x12\x0f\n\x07\x63ontent\x18\x04 \x01(\t\x12#\n\x08maskMode\x18\x06 \x01(\x0e\x32\x11.command.MaskMode\x12&\n\nmaskFields\x18\x07 \x03(\x0b\x32\x12.command.MaskField\"}\n\x07Request\x12\r\n\x05msgId\x18\x01 \x01(\x05\x12\x1f\n\x06opcode\x18\x02 \x01(\x0e\x32\x0f.command.Opcode\x12!\n\x07payload\x18\x03 \x01(\x0b\x32\x10.command.Payload\x12\x1f\n\x04mode\x18\x04 \x01(\x0e\x32\x11.command.ReadMode\"\x80\x01\n\x08Response\x12\r\n\x05msgId\x18\x01 \x01(\x05\x12!\n\x05\x65rror\x18\x02 \x01(\x0e\x32\x12.command.ErrorCode\x12!\n\x07payload\x18\x03 \x03(\x0b\x32\x10.command.Payload\x12\x1f\n\x04mode\x18\x04 \x01(\x0e\x32\x11.command.ReadMode*\x8a\x02\n\x06Opcode\x12\x08\n\x04NONE\x10\x00\x12\x0b\n\x07VERSION\x10\x01\x12\x0e\n\nBLOCK_READ\x10\n\x12\x12\n\x0e\x42LOCK_READ_ALL\x10\x0b\x12\x0f\n\x0b\x42LOCK_WRITE\x10\x0c\x12\x10\n\x0c\x42LOCK_CREATE\x10\r\x12\x10\n\x0c\x42LOCK_DELETE\x10\x0e\x12\x12\n\x0e\x42LOCK_DISCOVER\x10\x0f\x12\x10\n\x0cSTORAGE_READ\x10\x14\x12\x14\n\x10STORAGE_READ_ALL\x10\x15\x12\n\n\x06REBOOT\x10\x1e\x12\x10\n\x0c\x43LEAR_BLOCKS\x10\x1f\x12\x0e\n\nCLEAR_WIFI\x10 \x12\x11\n\rFACTORY_RESET\x10!\x12\x13\n\x0f\x46IRMWARE_UPDATE\x10(*\xed\x05\n\tErrorCode\x12\x06\n\x02OK\x10\x00\x12\x11\n\rUNKNOWN_ERROR\x10\x01\x12\x12\n\x0eINVALID_OPCODE\x10\x02\x12\x15\n\x11INSUFFICIENT_HEAP\x10\x04\x12\x18\n\x14INSUFFICIENT_STORAGE\x10\x05\x12\x11\n\rNETWORK_ERROR\x10\n\x12\x16\n\x12NETWORK_READ_ERROR\x10\x0b\x12\x1a\n\x16NETWORK_DECODING_ERROR\x10\x0c\x12\x17\n\x13NETWORK_WRITE_ERROR\x10\r\x12\x1a\n\x16NETWORK_ENCODING_ERROR\x10\x0e\x12\x11\n\rSTORAGE_ERROR\x10\x14\x12\x16\n\x12STORAGE_READ_ERROR\x10\x15\x12\x1a\n\x16STORAGE_DECODING_ERROR\x10\x16\x12\x15\n\x11STORAGE_CRC_ERROR\x10\x17\x12\x17\n\x13STORAGE_WRITE_ERROR\x10\x18\x12\x1a\n\x16STORAGE_ENCODING_ERROR\x10\x19\x12\x16\n\x12\x42LOCK_NOT_WRITABLE\x10\x1e\x12\x16\n\x12\x42LOCK_NOT_READABLE\x10\x1f\x12\x17\n\x13\x42LOCK_NOT_CREATABLE\x10 \x12\x17\n\x13\x42LOCK_NOT_DELETABLE\x10!\x12\x11\n\rINVALID_BLOCK\x10(\x12\x14\n\x10INVALID_BLOCK_ID\x10)\x12\x16\n\x12INVALID_BLOCK_TYPE\x10*\x12\x19\n\x15INVALID_BLOCK_SUBTYPE\x10+\x12\x19\n\x15INVALID_BLOCK_CONTENT\x10,\x12\x18\n\x14INVALID_STORED_BLOCK\x10\x32\x12\x1b\n\x17INVALID_STORED_BLOCK_ID\x10\x33\x12\x1d\n\x19INVALID_STORED_BLOCK_TYPE\x10\x34\x12 \n\x1cINVALID_STORED_BLOCK_SUBTYPE\x10\x35\x12 \n\x1cINVALID_STORED_BLOCK_CONTENT\x10\x36*5\n\x08MaskMode\x12\x0b\n\x07NO_MASK\x10\x00\x12\r\n\tINCLUSIVE\x10\x01\x12\r\n\tEXCLUSIVE\x10\x02*/\n\x08ReadMode\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\n\n\x06STORED\x10\x01\x12\n\n\x06LOGGED\x10\x02\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rcommand.proto\x12\x07\x63ommand\x1a\x0e\x62rewblox.proto\x1a\x0cnanopb.proto\"%\n\tMaskField\x12\x18\n\x07\x61\x64\x64ress\x18\x02 \x03(\rB\x07\x92?\x04\x10\x04\x38\x10\"\xae\x01\n\x07Payload\x12\x0f\n\x07\x62lockId\x18\x01 \x01(\r\x12&\n\tblockType\x18\x02 \x01(\x0e\x32\x13.brewblox.BlockType\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x04 \x01(\t\x12#\n\x08maskMode\x18\x06 \x01(\x0e\x32\x11.command.MaskMode\x12&\n\nmaskFields\x18\x07 \x03(\x0b\x32\x12.command.MaskField\"}\n\x07Request\x12\r\n\x05msgId\x18\x01 \x01(\x05\x12\x1f\n\x06opcode\x18\x02 \x01(\x0e\x32\x0f.command.Opcode\x12!\n\x07payload\x18\x03 \x01(\x0b\x32\x10.command.Payload\x12\x1f\n\x04mode\x18\x04 \x01(\x0e\x32\x11.command.ReadMode\"\x80\x01\n\x08Response\x12\r\n\x05msgId\x18\x01 \x01(\x05\x12!\n\x05\x65rror\x18\x02 \x01(\x0e\x32\x12.command.ErrorCode\x12!\n\x07payload\x18\x03 \x03(\x0b\x32\x10.command.Payload\x12\x1f\n\x04mode\x18\x04 \x01(\x0e\x32\x11.command.ReadMode*\xbc\x02\n\x06Opcode\x12\x08\n\x04NONE\x10\x00\x12\x0b\n\x07VERSION\x10\x01\x12\x0e\n\nBLOCK_READ\x10\n\x12\x12\n\x0e\x42LOCK_READ_ALL\x10\x0b\x12\x0f\n\x0b\x42LOCK_WRITE\x10\x0c\x12\x10\n\x0c\x42LOCK_CREATE\x10\r\x12\x10\n\x0c\x42LOCK_DELETE\x10\x0e\x12\x12\n\x0e\x42LOCK_DISCOVER\x10\x0f\x12\x10\n\x0cSTORAGE_READ\x10\x14\x12\x14\n\x10STORAGE_READ_ALL\x10\x15\x12\r\n\tNAME_READ\x10\x32\x12\x11\n\rNAME_READ_ALL\x10\x33\x12\x0e\n\nNAME_WRITE\x10\x34\x12\n\n\x06REBOOT\x10\x1e\x12\x10\n\x0c\x43LEAR_BLOCKS\x10\x1f\x12\x0e\n\nCLEAR_WIFI\x10 \x12\x11\n\rFACTORY_RESET\x10!\x12\x13\n\x0f\x46IRMWARE_UPDATE\x10(*\xba\x06\n\tErrorCode\x12\x06\n\x02OK\x10\x00\x12\x11\n\rUNKNOWN_ERROR\x10\x01\x12\x12\n\x0eINVALID_OPCODE\x10\x02\x12\x15\n\x11INSUFFICIENT_HEAP\x10\x04\x12\x18\n\x14INSUFFICIENT_STORAGE\x10\x05\x12\x11\n\rNETWORK_ERROR\x10\n\x12\x16\n\x12NETWORK_READ_ERROR\x10\x0b\x12\x1a\n\x16NETWORK_DECODING_ERROR\x10\x0c\x12\x17\n\x13NETWORK_WRITE_ERROR\x10\r\x12\x1a\n\x16NETWORK_ENCODING_ERROR\x10\x0e\x12\x11\n\rSTORAGE_ERROR\x10\x14\x12\x16\n\x12STORAGE_READ_ERROR\x10\x15\x12\x1a\n\x16STORAGE_DECODING_ERROR\x10\x16\x12\x15\n\x11STORAGE_CRC_ERROR\x10\x17\x12\x17\n\x13STORAGE_WRITE_ERROR\x10\x18\x12\x1a\n\x16STORAGE_ENCODING_ERROR\x10\x19\x12\x1f\n\x1bSTORAGE_OUT_OF_BOUNDS_ERROR\x10\x1a\x12\x16\n\x12\x42LOCK_NOT_WRITABLE\x10\x1e\x12\x16\n\x12\x42LOCK_NOT_READABLE\x10\x1f\x12\x17\n\x13\x42LOCK_NOT_CREATABLE\x10 \x12\x17\n\x13\x42LOCK_NOT_DELETABLE\x10!\x12\x11\n\rINVALID_BLOCK\x10(\x12\x14\n\x10INVALID_BLOCK_ID\x10)\x12\x16\n\x12INVALID_BLOCK_TYPE\x10*\x12\x19\n\x15INVALID_BLOCK_CONTENT\x10,\x12\x16\n\x12INVALID_BLOCK_NAME\x10-\x12\x18\n\x14INVALID_STORED_BLOCK\x10\x32\x12\x1b\n\x17INVALID_STORED_BLOCK_ID\x10\x33\x12\x1d\n\x19INVALID_STORED_BLOCK_TYPE\x10\x34\x12 \n\x1cINVALID_STORED_BLOCK_CONTENT\x10\x36\x12\x1d\n\x19INVALID_STORED_BLOCK_NAME\x10\x37\x12\x16\n\x12\x44UPLICATE_BLOCK_ID\x10<\x12\x18\n\x14\x44UPLICATE_BLOCK_NAME\x10=*5\n\x08MaskMode\x12\x0b\n\x07NO_MASK\x10\x00\x12\r\n\tINCLUSIVE\x10\x01\x12\r\n\tEXCLUSIVE\x10\x02*/\n\x08ReadMode\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\n\n\x06STORED\x10\x01\x12\n\n\x06LOGGED\x10\x02\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -24,24 +24,20 @@ DESCRIPTOR._options = None _MASKFIELD.fields_by_name['address']._options = None _MASKFIELD.fields_by_name['address']._serialized_options = b'\222?\004\020\0048\020' - _PAYLOAD.fields_by_name['blockId']._options = None - _PAYLOAD.fields_by_name['blockId']._serialized_options = b'\222?\0028\020' - _PAYLOAD.fields_by_name['subtype']._options = None - _PAYLOAD.fields_by_name['subtype']._serialized_options = b'\222?\0028\020' - _globals['_OPCODE']._serialized_start=548 - _globals['_OPCODE']._serialized_end=814 - _globals['_ERRORCODE']._serialized_start=817 - _globals['_ERRORCODE']._serialized_end=1566 - _globals['_MASKMODE']._serialized_start=1568 - _globals['_MASKMODE']._serialized_end=1621 - _globals['_READMODE']._serialized_start=1623 - _globals['_READMODE']._serialized_end=1670 + _globals['_OPCODE']._serialized_start=531 + _globals['_OPCODE']._serialized_end=847 + _globals['_ERRORCODE']._serialized_start=850 + _globals['_ERRORCODE']._serialized_end=1676 + _globals['_MASKMODE']._serialized_start=1678 + _globals['_MASKMODE']._serialized_end=1731 + _globals['_READMODE']._serialized_start=1733 + _globals['_READMODE']._serialized_end=1780 _globals['_MASKFIELD']._serialized_start=56 _globals['_MASKFIELD']._serialized_end=93 _globals['_PAYLOAD']._serialized_start=96 - _globals['_PAYLOAD']._serialized_end=287 - _globals['_REQUEST']._serialized_start=289 - _globals['_REQUEST']._serialized_end=414 - _globals['_RESPONSE']._serialized_start=417 - _globals['_RESPONSE']._serialized_end=545 + _globals['_PAYLOAD']._serialized_end=270 + _globals['_REQUEST']._serialized_start=272 + _globals['_REQUEST']._serialized_end=397 + _globals['_RESPONSE']._serialized_start=400 + _globals['_RESPONSE']._serialized_end=528 # @@protoc_insertion_point(module_scope) diff --git a/brewblox_devcon_spark/command.py b/brewblox_devcon_spark/command.py index 6fa5282b..f6f0c4b6 100644 --- a/brewblox_devcon_spark/command.py +++ b/brewblox_devcon_spark/command.py @@ -58,16 +58,16 @@ def _to_payload(self, patch=False, ) -> EncodedPayload: if block.type: - (blockType, subtype) = codec.split_type(block.type) payload = DecodedPayload( blockId=block.nid, - blockType=blockType, - subypte=subtype, + blockType=block.type, + name=block.id, content=(None if identity_only else block.data), maskMode=(MaskMode.INCLUSIVE if patch else MaskMode.NO_MASK), ) else: - payload = DecodedPayload(blockId=block.nid) + payload = DecodedPayload(blockId=block.nid, + name=block.id) return self.codec.encode_payload(payload) @@ -77,8 +77,9 @@ def _to_block(self, ) -> FirmwareBlock: payload = self.codec.decode_payload(payload, mode=mode) return FirmwareBlock( + id=payload.name, nid=payload.blockId, - type=codec.join_type(payload.blockType, payload.subtype), + type=payload.blockType, data=payload.content or {}, ) @@ -201,7 +202,7 @@ async def patch_block(self, block: FirmwareBlock) -> FirmwareBlock: async def create_block(self, block: FirmwareBlock) -> FirmwareBlock: payloads = await self._execute(Opcode.BLOCK_CREATE, - payload=self._to_payload(block, patch=True)) + payload=self._to_payload(block)) return self._to_block(payloads[0]) async def delete_block(self, ident: FirmwareBlockIdentity) -> None: @@ -212,6 +213,15 @@ async def discover_blocks(self) -> list[FirmwareBlock]: payloads = await self._execute(Opcode.BLOCK_DISCOVER) return [self._to_block(v) for v in payloads] + async def read_all_block_names(self) -> list[FirmwareBlock]: + payloads = await self._execute(Opcode.NAME_READ_ALL) + return [self._to_block(v) for v in payloads] + + async def write_block_name(self, ident: FirmwareBlockIdentity) -> FirmwareBlock: + payloads = await self._execute(Opcode.NAME_WRITE, + payload=self._to_payload(ident, identity_only=True)) + return self._to_block(payloads[0]) + async def reboot(self) -> None: await self._execute(Opcode.REBOOT) diff --git a/brewblox_devcon_spark/connection/mock_connection.py b/brewblox_devcon_spark/connection/mock_connection.py index 23841e94..ca735eb8 100644 --- a/brewblox_devcon_spark/connection/mock_connection.py +++ b/brewblox_devcon_spark/connection/mock_connection.py @@ -30,6 +30,7 @@ def default_blocks() -> dict[int, FirmwareBlock]: block.nid: block for block in [ FirmwareBlock( + id='SystemInfo', nid=const.SYSINFO_NID, type='SysInfo', data={ @@ -39,21 +40,25 @@ def default_blocks() -> dict[int, FirmwareBlock]: }, ), FirmwareBlock( + id='OneWireBus', nid=const.ONEWIREBUS_NID, type='OneWireBus', data={}, ), FirmwareBlock( + id='WiFiSettings', nid=const.WIFI_SETTINGS_NID, type='WiFiSettings', data={}, ), FirmwareBlock( + id='DisplaySettings', nid=const.DISPLAY_SETTINGS_NID, type='DisplaySettings', data={}, ), FirmwareBlock( + id='SparkPins', nid=const.SPARK_PINS_NID, type='Spark3Pins', data={ @@ -82,28 +87,29 @@ def __init__(self, self._blocks: dict[int, FirmwareBlock] = default_blocks() def _to_payload(self, block: FirmwareBlock, mode: ReadMode) -> EncodedPayload: - (blockType, subtype) = codec.split_type(block.type) return self._codec.encode_payload(DecodedPayload( blockId=block.nid, - blockType=blockType, - subypte=subtype, + blockType=block.type, + name=block.id, content=block.data )) def _to_block(self, payload: EncodedPayload) -> FirmwareBlock: payload = self._codec.decode_payload(payload) return FirmwareBlock( + id=payload.name, nid=payload.blockId, - type=codec.join_type(payload.blockType, payload.subtype), + type=payload.blockType, data=payload.content, ) - def _default_block(self, block_id: int, block_type: str) -> FirmwareBlock: + def _default_block(self, block_id: str, block_nid: int, block_type: str) -> FirmwareBlock: return self._to_block( self._codec.encode_payload( DecodedPayload( - blockId=block_id, + blockId=block_nid, blockType=block_type, + name=block_id, content={} ) ) @@ -168,6 +174,7 @@ async def handle_command(self, elif request.opcode in [ Opcode.BLOCK_READ, Opcode.STORAGE_READ, + Opcode.NAME_READ, ]: block = self._blocks.get(request.payload.blockId) if not block: @@ -178,6 +185,7 @@ async def handle_command(self, elif request.opcode in [ Opcode.BLOCK_READ_ALL, Opcode.STORAGE_READ_ALL, + Opcode.NAME_READ_ALL, ]: response.payload = [self._to_payload(block, request.mode) for block in self._blocks.values()] @@ -207,7 +215,7 @@ async def handle_command(self, else: nid = nid or next(self._id_counter) argblock = self._to_block(request.payload) - block = self._default_block(nid, argblock.type) + block = self._default_block(request.payload.name, nid, argblock.type) self._merge_blocks(block, argblock) self._blocks[nid] = block response.payload = [self._to_payload(block, request.mode)] @@ -227,6 +235,22 @@ async def handle_command(self, block = self._blocks[const.SPARK_PINS_NID] response.payload = [self._to_payload(block, request.mode)] + elif request.opcode == Opcode.NAME_WRITE: + nid = request.payload.blockId + name = request.payload.name + block = self._blocks.get(nid) + match = next((block for block in self._blocks.values() + if block.id == name), None) + if not block: + response.error = ErrorCode.INVALID_BLOCK_ID + elif not name: + response.error = ErrorCode.INVALID_BLOCK_NAME + elif match and match.nid != nid: + response.error = ErrorCode.INVALID_BLOCK_NAME + else: + block.id = name + response.payload = [self._to_payload(block, ReadMode.DEFAULT)] + elif request.opcode == Opcode.REBOOT: self._start_time = datetime.now() self.update_systime() diff --git a/brewblox_devcon_spark/const.py b/brewblox_devcon_spark/const.py index 8171cc3e..f4e53b94 100644 --- a/brewblox_devcon_spark/const.py +++ b/brewblox_devcon_spark/const.py @@ -5,7 +5,6 @@ USER_NID_START = 100 OBJECT_LINK_POSTFIX_START = '<' OBJECT_LINK_POSTFIX_END = '>' -GENERATED_ID_PREFIX = 'New|' SERVICE_NAMESPACE = 'spark-service' GLOBAL_NAMESPACE = 'brewblox-global' @@ -19,15 +18,6 @@ DISPLAY_SETTINGS_NID = 7 SPARK_PINS_NID = 19 -# Default SID/NID for system objects -SYS_OBJECT_KEYS: list[tuple[str, int]] = [ - ['SystemInfo', SYSINFO_NID], - ['OneWireBus', ONEWIREBUS_NID], - ['WiFiSettings', WIFI_SETTINGS_NID], - ['DisplaySettings', DISPLAY_SETTINGS_NID], - ['SparkPins', SPARK_PINS_NID], -] - # Relevant block types SEQUENCE_BLOCK_TYPE = 'Sequence' SYSINFO_BLOCK_TYPE = 'SysInfo' diff --git a/brewblox_devcon_spark/datastore_blocks.py b/brewblox_devcon_spark/datastore_blocks.py index 6c103556..07b711f9 100644 --- a/brewblox_devcon_spark/datastore_blocks.py +++ b/brewblox_devcon_spark/datastore_blocks.py @@ -1,123 +1,60 @@ """ Stores sid/nid relations for blocks """ -import asyncio import logging -from contextlib import suppress from contextvars import ContextVar +from bidict import OnDup, OnDupAction, bidict from httpx import AsyncClient -from . import const, exceptions, state_machine, utils -from .models import (DatastoreSingleQuery, TwinKeyEntriesBox, - TwinKeyEntriesValue, TwinKeyEntry) -from .twinkeydict import TwinKeyDict, TwinKeyError - -SYS_OBJECTS: list[TwinKeyEntry] = [ - TwinKeyEntry(keys=keys, data={}) - for keys in const.SYS_OBJECT_KEYS -] +from . import const, state_machine, utils +from .models import DatastoreSingleQuery, TwinKeyEntriesBox LOGGER = logging.getLogger(__name__) -CV: ContextVar['BlockStore'] = ContextVar('block_store.BlockStore') - - -class BlockStore(TwinKeyDict[str, int, dict]): - def __init__(self, defaults: list[TwinKeyEntry]): - super().__init__() - - self.config = utils.get_config() - self.state = state_machine.CV.get() - self._changed_ev = asyncio.Event() - self._flush_lock = asyncio.Lock() - self._defaults = defaults - self._client = AsyncClient(base_url=self.config.datastore_url) - self._doc_id: str | None = None - - def get_doc_id(self) -> str | None: - if not self.state.is_acknowledged(): - return None - - # Simulation services are identified by service name. - # This prevents data conflicts when a simulation service - # is reconfigured to start interacting with a controller. - desc = self.state.desc() - if desc.connection_kind == 'SIM': - device_name = f'simulator__{self.config.name}' - elif desc.connection_kind == 'MOCK': - device_name = f'mock__{self.config.name}' - else: - device_name = desc.controller.device.device_id - - return f'{device_name}-blocks-db' - - async def load(self): - self._doc_id = self.get_doc_id() - data: list[TwinKeyEntry] = [] - - if not self._doc_id: - raise exceptions.NotConnected('Not acknowledged before loading block store') - - try: - query = DatastoreSingleQuery(id=self._doc_id, - namespace=const.SERVICE_NAMESPACE) - content = query.model_dump(mode='json') - resp = await utils.httpx_retry(lambda: self._client.post('/get', json=content)) - - try: - box = TwinKeyEntriesBox.model_validate_json(resp.text) - data = box.value.data - except (AttributeError, ValueError): - data = [] - LOGGER.info(f'Loaded {len(data)} block(s)') - - finally: - # Clear -> load from database -> merge defaults - super().clear() - for obj in data: - super().__setitem__(obj.keys, obj.data) - for obj in self._defaults: - with suppress(TwinKeyError): - if obj.keys not in self: - self.__setitem__(obj.keys, obj.data) - - self._changed_ev.clear() - - async def flush(self): - if not self._doc_id: - raise exceptions.NotConnected('Not acknowledged before flushing block store') - - async with self._flush_lock: - if not self._changed_ev.is_set(): - return - - box = TwinKeyEntriesBox( - value=TwinKeyEntriesValue( - id=self._doc_id, - namespace=const.SERVICE_NAMESPACE, - data=[TwinKeyEntry(keys=k, data=v) - for k, v in self.items()] - ) - ) - self._changed_ev.clear() - await self._client.post('/set', - json=box.model_dump(mode='json')) - LOGGER.info(f'Saved {len(box.value.data)} block(s)') - - def __setitem__(self, keys: tuple[str, int], item: dict): - super().__setitem__(keys, item) - self._changed_ev.set() - - def __delitem__(self, keys: tuple[str | None, int | None]): - super().__delitem__(keys) - self._changed_ev.set() - - def clear(self): - super().clear() - for obj in self._defaults: - self.__setitem__(obj.keys, obj.data) +CV: ContextVar[bidict[str, int]] = ContextVar('datastore_blocks.bidict') + + +async def extract_legacy_redis_block_names() -> list[tuple[str, int]]: # pragma: no cover + """ + Block names were historically stored in Redis. + To migrate the stored block names to the controller we must do a one-time + load of the old name table. + The Redis naming table is removed after reading to prevent repeated migrations. + """ + config = utils.get_config() + state = state_machine.CV.get() + client = AsyncClient(base_url=config.datastore_url) + + # Simulation services are identified by service name. + # This prevents data conflicts when a simulation service + # is reconfigured to start interacting with a controller. + desc = state.desc() + if desc.connection_kind == 'SIM': + device_name = f'simulator__{config.name}' + elif desc.connection_kind == 'MOCK': + device_name = f'mock__{config.name}' + else: + device_name = desc.controller.device.device_id + + data: list[tuple[str, int]] = [] + + try: + query = DatastoreSingleQuery(id=f'{device_name}-blocks-db', + namespace=const.SERVICE_NAMESPACE) + content = query.model_dump(mode='json') + resp = await utils.httpx_retry(lambda: client.post('/get', json=content)) + box = TwinKeyEntriesBox.model_validate_json(resp.text) + data = [entry.keys for entry in box.value.data] + await client.post('/delete', json=content) + except Exception: + pass + + return data def setup(): - CV.set(BlockStore(defaults=SYS_OBJECTS)) + bd = bidict() + bd.on_dup = OnDup(key=OnDupAction.DROP_OLD, + val=OnDupAction.DROP_OLD) + CV.set(bd) diff --git a/brewblox_devcon_spark/endpoints/http_blocks.py b/brewblox_devcon_spark/endpoints/http_blocks.py index 60a1a34e..155732f1 100644 --- a/brewblox_devcon_spark/endpoints/http_blocks.py +++ b/brewblox_devcon_spark/endpoints/http_blocks.py @@ -193,15 +193,6 @@ async def blocks_all_delete() -> list[BlockIdentity]: return idents -@router.post('/cleanup') -async def blocks_cleanup() -> list[BlockIdentity]: - """ - Clean unused block IDs. - """ - idents = await spark_api.CV.get().remove_unused_ids() - return idents - - @router.post('/rename') async def blocks_rename(args: BlockNameChange) -> BlockIdentity: """ diff --git a/brewblox_devcon_spark/models.py b/brewblox_devcon_spark/models.py index cc7a18c6..42d135a8 100644 --- a/brewblox_devcon_spark/models.py +++ b/brewblox_devcon_spark/models.py @@ -160,12 +160,14 @@ class Block(BaseModel): class FirmwareBlockIdentity(BaseModel): + id: str | None = None nid: int type: str | None = None data: dict[str, Any] | None = None class FirmwareBlock(BaseModel): + id: str | None = None nid: int type: str data: dict[str, Any] @@ -232,6 +234,10 @@ class Opcode(enum.Enum): STORAGE_READ = 20 STORAGE_READ_ALL = 21 + NAME_READ = 50 + NAME_READ_ALL = 51 + NAME_WRITE = 52 + REBOOT = 30 CLEAR_BLOCKS = 31 CLEAR_WIFI = 32 @@ -263,6 +269,7 @@ class ErrorCode(enum.Enum): STORAGE_CRC_ERROR = 23 STORAGE_WRITE_ERROR = 24 STORAGE_ENCODING_ERROR = 25 + STORAGE_OUT_OF_BOUNDS_ERROR = 26 # Invalid actions BLOCK_NOT_WRITABLE = 30 @@ -274,15 +281,19 @@ class ErrorCode(enum.Enum): INVALID_BLOCK = 40 INVALID_BLOCK_ID = 41 INVALID_BLOCK_TYPE = 42 - INVALID_BLOCK_SUBTYPE = 43 INVALID_BLOCK_CONTENT = 44 + INVALID_BLOCK_NAME = 45 # Invalid stored block data INVALID_STORED_BLOCK = 50 INVALID_STORED_BLOCK_ID = 51 INVALID_STORED_BLOCK_TYPE = 52 - INVALID_STORED_BLOCK_SUBTYPE = 53 INVALID_STORED_BLOCK_CONTENT = 54 + INVALID_STORED_BLOCK_NAME = 55 + + # Invalid block identifiers + DUPLICATE_BLOCK_ID = 60 + DUPLICATE_BLOCK_NAME = 61 class ReadMode(enum.Enum): @@ -314,13 +325,13 @@ def parse_mask_mode(cls, v): class EncodedPayload(BasePayload): blockType: int | str | None = None - subtype: int | str | None = None + name: str | None = None content: str = '' class DecodedPayload(BasePayload): blockType: str | None = None - subtype: str | None = None + name: str | None = None content: dict | None = None @@ -502,8 +513,10 @@ class Backup(BaseModel): firmware: FirmwareDescription | None = None device: DeviceDescription | None = None + # Deprecated fields + store: list | None = None + blocks: list[Block] - store: list[TwinKeyEntry] class BackupApplyResult(BaseModel): @@ -602,7 +615,7 @@ class StoredTimezoneSettingsBox(DatastoreSingleValueBox): class DatastoreEvent(BaseModel): changed: list[DatastoreValue] = Field(default_factory=list) - deleted: list[DatastoreValue] = Field(default_factory=list) + deleted: list[str] = Field(default_factory=list) class HistoryEvent(BaseModel): diff --git a/brewblox_devcon_spark/spark_api.py b/brewblox_devcon_spark/spark_api.py index 1e8e64e6..abe12c1a 100644 --- a/brewblox_devcon_spark/spark_api.py +++ b/brewblox_devcon_spark/spark_api.py @@ -3,29 +3,19 @@ """ import asyncio -import itertools import logging -import re -from contextlib import asynccontextmanager, suppress +from contextlib import asynccontextmanager from contextvars import ContextVar from datetime import datetime, timezone from typing import Callable, Union from . import (command, const, datastore_blocks, exceptions, state_machine, - twinkeydict, utils) + utils) from .codec import bloxfield, sequence from .models import (Backup, BackupApplyResult, Block, BlockIdentity, BlockNameChange, FirmwareBlock, FirmwareBlockIdentity, ReadMode) -SID_PATTERN = re.compile(r'^[a-zA-Z]{1}[a-zA-Z0-9 _\-\(\)\|]{0,199}$') -SID_RULES = """ -An object ID must adhere to the following rules: -- Starts with a letter -- May only contain alphanumeric characters, space, and _-()| -- At most 200 characters -""" - LOGGER = logging.getLogger(__name__) CV: ContextVar['SparkApi'] = ContextVar('spark_api.SparkApi') @@ -43,10 +33,10 @@ def merge(a: dict, b: dict): return a -def resolve_data_ids(data: Union[dict, list, tuple], - replacer: Union[Callable[[str, str], int], - Callable[[int, str], str] - ]): +def resolve_data_ids(data: dict | list | tuple, + replacer: Union[Callable[[str], int], + Callable[[int], str]], + ): iter = enumerate(data) \ if isinstance(data, (list, tuple)) \ else data.items() @@ -54,11 +44,10 @@ def resolve_data_ids(data: Union[dict, list, tuple], for k, v in iter: # Object-style link if bloxfield.is_link(v): - v['id'] = replacer(v['id'], v.get('type')) + v['id'] = replacer(v['id']) # Postfix-style link elif str(k).endswith(const.OBJECT_LINK_POSTFIX_END): - link_type = k[k.rfind(const.OBJECT_LINK_POSTFIX_START)+1:-1] - data[k] = replacer(v, link_type) + data[k] = replacer(v) # Nested data - increase iteration depth elif isinstance(v, (dict, list, tuple)): resolve_data_ids(v, replacer) @@ -75,21 +64,7 @@ def __init__(self): self._discovery_lock = asyncio.Lock() self._conn_check_lock = asyncio.Lock() - def _validate_sid(self, sid: str): - if not re.match(SID_PATTERN, sid): - raise exceptions.InvalidId(SID_RULES) - if next((keys for keys in const.SYS_OBJECT_KEYS if sid == keys[0]), None): - raise exceptions.InvalidId(f'Block ID `{sid}` is reserved for system objects') - if (sid, None) in self.block_store: - raise exceptions.ExistingId(f'Block ID `{sid}` is already in use') - - def _assign_sid(self, blockType: str): - for i in itertools.count(start=1): # pragma: no cover - name = f'{const.GENERATED_ID_PREFIX}{blockType}-{i}' - if (name, None) not in self.block_store: - return name - - def _find_nid(self, sid: str, blockType: str) -> int: + def _find_nid(self, sid: str) -> int: if sid is None: return 0 @@ -97,11 +72,11 @@ def _find_nid(self, sid: str, blockType: str) -> int: return int(sid) try: - return self.block_store.right_key(sid) + return self.block_store[sid] except KeyError: - raise exceptions.UnknownId(f'Block ID `{sid}` not found. type={blockType}') + raise exceptions.UnknownId(f'Block ID `{sid}` not found.') - def _find_sid(self, nid: int, blockType: str) -> str: + def _find_sid(self, nid: int) -> str: if nid is None or nid == 0: return None @@ -109,30 +84,39 @@ def _find_sid(self, nid: int, blockType: str) -> str: raise exceptions.DecodeException(f'Expected numeric block ID, got string `{nid}`') try: - sid = self.block_store.left_key(nid) + sid = self.block_store.inverse[nid] except KeyError: - # If service ID not found, randomly generate one - sid = self._assign_sid(blockType) - self.block_store[sid, nid] = dict() + # If service ID not found, use numeric representation of nid + sid = str(nid) return sid + def _sync_block_id(self, block: FirmwareBlock | FirmwareBlockIdentity): + if block.id and block.nid: + self.block_store[block.id] = block.nid + def _to_block_identity(self, block: FirmwareBlock) -> BlockIdentity: + self._sync_block_id(block) + return BlockIdentity( - id=self._find_sid(block.nid, block.type), + id=block.id or self._find_sid(block.nid), nid=block.nid, type=block.type, - serviceId=self.config.name + serviceId=self.config.name, ) - def _to_block(self, block: FirmwareBlock, find_sid=True) -> Block: + def _to_block(self, block: FirmwareBlock) -> Block: + self._sync_block_id(block) + + ident = self._to_block_identity(block) block = Block( - **block.model_dump(), - id=None, - serviceId=self.config.name + id=ident.id, + nid=ident.nid, + type=ident.type, + serviceId=ident.serviceId, + data=block.data, ) - block.id = self._find_sid(block.nid, block.type) if find_sid else None resolve_data_ids(block.data, self._find_sid) # Special case, where the API data format differs from proto-ready format @@ -141,43 +125,26 @@ def _to_block(self, block: FirmwareBlock, find_sid=True) -> Block: return block - def _to_block_list(self, blocks: list[FirmwareBlock]) -> list[Block]: - # Resolve all block sids before links are resolved - # This prevents auto-generated names using interface types - for block in blocks: - self._find_sid(block.nid, block.type) - - return [self._to_block(block) for block in blocks] - - def _to_firmware_block_identity(self, block: BlockIdentity) -> FirmwareBlockIdentity: - sid = block.id - nid = block.nid - - if nid is None: + def _to_firmware_block_identity(self, block: Block | BlockIdentity) -> FirmwareBlockIdentity: + if (nid := block.nid) is None: try: - nid = self.block_store.right_key(sid) + nid = self.block_store[block.id] except KeyError: - raise exceptions.UnknownId(f'Block ID `{sid}` not found. type={block.type}') + raise exceptions.UnknownId(f'Block ID `{block.id}` not found. type={block.type}') return FirmwareBlockIdentity( + id=block.id, nid=nid, type=block.type, ) - def _to_firmware_block(self, block: Block, find_nid=True) -> FirmwareBlock: - sid = block.id - nid = block.nid - - if nid is None: - try: - nid = self.block_store.right_key(sid) if find_nid else 0 - except KeyError: - raise exceptions.UnknownId(f'Block ID `{sid}` not found. type={block.type}') - + def _to_firmware_block(self, block: Block) -> FirmwareBlock: + ident = self._to_firmware_block_identity(block) block = FirmwareBlock( - nid=nid, - type=block.type, - data=block.data + id=ident.id, + nid=ident.nid, + type=ident.type, + data=block.data, ) # Special case, where the API data format differs from proto-ready format @@ -238,9 +205,6 @@ async def _execute(self, desc: str): LOGGER.debug(f'Failed to execute {desc}: {utils.strex(ex)}') raise ex - finally: - asyncio.create_task(self.block_store.flush()) - async def noop(self) -> None: """ Send a Noop command to the controller. @@ -371,30 +335,11 @@ async def create_block(self, block: Block) -> Block: Block: The desired block, as present on the controller after creation. """ - async with self._execute('Create block'): - desired_sid = block.id - self._validate_sid(desired_sid) - block = self._to_firmware_block(block, find_nid=False) - - # Avoid race conditions for the desired sid - # Claim it with a placeholder until the spark create call returns - placeholder_nid = object() - self.block_store[desired_sid, placeholder_nid] = 'PLACEHOLDER' - - try: - block = await self.cmder.create_block(block) - finally: - del self.block_store[desired_sid, placeholder_nid] - - # It's possible there is a leftover entry with the generated nid - # In this case, the newly created entry takes precedence - with suppress(KeyError): - del self.block_store[None, block.nid] - - # The placeholder is always removed - add real entry if create was ok - self.block_store[desired_sid, block.nid] = dict() - + if block.nid is None: + block.nid = 0 + block = self._to_firmware_block(block) + block = await self.cmder.create_block(block) block = self._to_block(block) return block @@ -418,8 +363,8 @@ async def delete_block(self, block: BlockIdentity) -> BlockIdentity: await self.cmder.delete_block(block) nid = block.nid - sid = self.block_store.left_key(nid) - del self.block_store[sid, nid] + sid = self.block_store.inverse[nid] + del self.block_store[sid] ident = BlockIdentity( id=sid, nid=nid, @@ -439,7 +384,7 @@ async def read_all_blocks(self) -> list[Block]: """ async with self._execute('Read all blocks'): blocks = await self.cmder.read_all_blocks() - blocks = self._to_block_list(blocks) + blocks = [self._to_block(block) for block in blocks] return blocks async def read_all_logged_blocks(self) -> list[Block]: @@ -455,7 +400,7 @@ async def read_all_logged_blocks(self) -> list[Block]: """ async with self._execute('Read all blocks (logged)'): blocks = await self.cmder.read_all_blocks(ReadMode.LOGGED) - blocks = self._to_block_list(blocks) + blocks = [self._to_block(block) for block in blocks] return blocks async def read_all_stored_blocks(self) -> list[Block]: @@ -472,7 +417,7 @@ async def read_all_stored_blocks(self) -> list[Block]: """ async with self._execute('Read all blocks (stored)'): blocks = await self.cmder.read_all_blocks(ReadMode.STORED) - blocks = self._to_block_list(blocks) + blocks = [self._to_block(block) for block in blocks] return blocks async def discover_blocks(self) -> list[Block]: @@ -488,7 +433,7 @@ async def discover_blocks(self) -> list[Block]: async with self._execute('Discover blocks'): async with self._discovery_lock: blocks = await self.cmder.discover_blocks() - blocks = self._to_block_list(blocks) + blocks = [self._to_block(block) for block in blocks] return blocks async def clear_blocks(self) -> list[BlockIdentity]: @@ -504,7 +449,7 @@ async def clear_blocks(self) -> list[BlockIdentity]: async with self._execute('Remove all blocks'): blocks = await self.cmder.clear_blocks() identities = [self._to_block_identity(v) for v in blocks] - self.block_store.clear() + await self.load_block_names() await self.cmder.write_block(FirmwareBlock( nid=const.DISPLAY_SETTINGS_NID, type='DisplaySettings', @@ -515,8 +460,6 @@ async def clear_blocks(self) -> list[BlockIdentity]: async def rename_block(self, change: BlockNameChange) -> BlockIdentity: """ Change a block sid. - This will not change any data on the controller, - as block string IDs are stored in the datastore. Args: change (BlockNameChange): @@ -526,32 +469,23 @@ async def rename_block(self, change: BlockNameChange) -> BlockIdentity: BlockIdentity: The new sid + nid. """ - self._validate_sid(change.desired) - self.block_store.rename((change.existing, None), (change.desired, None)) - return BlockIdentity( - id=change.desired, - nid=self.block_store.right_key(change.desired), - serviceId=self.config.name - ) + ident = FirmwareBlockIdentity(id=change.desired, + nid=self.block_store[change.existing]) + block = await self.cmder.write_block_name(ident) + self.block_store[block.id] = block.nid + return BlockIdentity(id=block.id, + nid=block.nid, + type=block.type, + serviceId=self.config.name) - async def remove_unused_ids(self) -> list[BlockIdentity]: + async def load_block_names(self): """ - Compares blocks on the controller with block sid/nid entries - in the datastore, and removes unused entries. - - Returns: - list[BlockIdentity]: - Unused (and now removed) block IDs. - """ - actual = [block.id - for block in await self.read_all_blocks()] - unused = [(sid, nid) - for (sid, nid) in self.block_store - if sid not in actual] - for (sid, nid) in unused.copy(): - del self.block_store[sid, nid] - return [BlockIdentity(id=sid, nid=nid, serviceId=self.config.name) - for (sid, nid) in unused] + Load all known block names from the controller + """ + blocks = await self.cmder.read_all_block_names() + self.block_store.clear() + self.block_store.update({block.id: block.nid + for block in blocks}) async def make_backup(self) -> Backup: """ @@ -562,9 +496,7 @@ async def make_backup(self) -> Backup: Backup: JSON-ready backup data, compatible with apply_backup(). """ - store_data = [{'keys': keys, 'data': content} - for keys, content in self.block_store.items()] - blocks_data = await self.read_all_stored_blocks() + blocks = await self.read_all_stored_blocks() timestamp = datetime\ .now(tz=timezone.utc)\ .isoformat(timespec='seconds')\ @@ -572,8 +504,7 @@ async def make_backup(self) -> Backup: controller_info = self.state.desc().controller return Backup( - blocks=[block for block in blocks_data], - store=store_data, + blocks=[block for block in blocks], name=None, timestamp=timestamp, firmware=controller_info.firmware, @@ -602,48 +533,47 @@ async def apply_backup(self, exported: Backup) -> BackupApplyResult: LOGGER.info(f'Backup timestamp = {exported.timestamp}') LOGGER.info(f'Backup firmware = {exported.firmware}') LOGGER.info(f'Backup device = {exported.device}') + LOGGER.info(f'Backup block count = {len(exported.blocks)}') await self.clear_blocks() - sys_nids = [k[1] for k in const.SYS_OBJECT_KEYS] error_log = [] - # First populate the datastore, to avoid unknown links - for entry in exported.store: - - try: - self.block_store[entry.keys] = entry.data - except twinkeydict.TwinKeyError: - sid, nid = entry.keys - self.block_store.rename((None, nid), (sid, None)) - self.block_store[entry.keys] = entry.data + # Populate the block store, to avoid unknown links + self.block_store.update({block.id: block.nid + for block in exported.blocks}) - # Now either create or write the objects, depending on whether they are system objects + # Resolve IDs now before concurrent calls can edit the block store + resolved_blocks: list[FirmwareBlock] = [] for block in exported.blocks: try: block = block.model_copy(deep=True) - if block.nid is not None and block.nid < const.USER_NID_START: - if block.nid in sys_nids: # Ignore deprecated system blocks - await self.write_block(block) + block = self._to_firmware_block(block) + resolved_blocks.append(block) + + except Exception as ex: + message = f'failed to resolve block. Error={utils.strex(ex)}, block={block}' + error_log.append(message) + LOGGER.error(message) + + LOGGER.debug('Loading blocks from backup:') + for block in resolved_blocks: + LOGGER.debug(block) + + # Create or write blocks, depending on whether they are system blocks + for block in resolved_blocks: + try: + if block.nid >= const.USER_NID_START: + await self.cmder.create_block(block) else: - # Bypass self.create_block(), to avoid meddling with store IDs - await self.cmder.create_block(self._to_firmware_block(block)) + await self.cmder.write_block(block) except Exception as ex: message = f'failed to import block. Error={utils.strex(ex)}, block={block}' error_log.append(message) LOGGER.error(message) - used_nids = [b.nid for b in await self.read_all_blocks()] - unused = [ - (sid, nid) for (sid, nid) in self.block_store - if nid >= const.USER_NID_START - and nid not in used_nids - ] - for sid, nid in unused: - del self.block_store[sid, nid] - message = f'Removed unused alias [{sid},{nid}]' - LOGGER.info(message) - error_log.append(message) + # Sync block names with reality + await self.load_block_names() return BackupApplyResult(messages=error_log) @@ -681,9 +611,17 @@ async def validate(self, block: Block) -> Block: Both sid and nid may be omitted. """ async with self._execute('Validate block'): - block = self._to_firmware_block(block, find_nid=False) + sid = block.id + nid = block.nid + + block.id = None + block.nid = 0 + block = self._to_firmware_block(block) block = await self.cmder.validate(block) - block = self._to_block(block, find_sid=False) + block = self._to_block(block) + + block.id = sid + block.nid = nid return block diff --git a/brewblox_devcon_spark/synchronization.py b/brewblox_devcon_spark/synchronization.py index 669d0e65..c9a51d3c 100644 --- a/brewblox_devcon_spark/synchronization.py +++ b/brewblox_devcon_spark/synchronization.py @@ -30,11 +30,10 @@ until status is ACKNOWLEDGED. - Verify that the service is compatible with the controller. - If the controller is not compatible, abort synchronization. -- Synchronize block store: - - Fetch controller-specific data from datastore. - Synchronize controller settings: - Send timezone to controller. - Send temperature display units to controller. + - Get block names from controller. - Set status to SYNCHRONIZED. - Wait for DISCONNECTED status. - Repeat @@ -48,7 +47,7 @@ from . import (codec, command, const, datastore_blocks, datastore_settings, exceptions, state_machine, utils) from .codec.time_utils import serialize_duration -from .models import FirmwareBlock +from .models import FirmwareBlock, FirmwareBlockIdentity LOGGER = logging.getLogger(__name__) @@ -117,7 +116,22 @@ async def _sync_handshake(self): @subroutine('sync block store') async def _sync_block_store(self): - await self.block_store.load() + blocks = await self.commander.read_all_block_names() + self.block_store.clear() + for block in blocks: + self.block_store[block.id] = block.nid + + # Check if redis still contains a name table for this controller's blocks + # If it does, attempt to load block names + # This is a one-time migration. The redis table is removed after reading. + for entry in await datastore_blocks.extract_legacy_redis_block_names(): # pragma: no cover + sid, nid = entry + LOGGER.info(f'Renaming block to legacy name: {sid=}, {nid=}') + try: + await self.commander.write_block_name(FirmwareBlockIdentity(id=sid, nid=nid)) + self.block_store[sid] = nid + except Exception as ex: + LOGGER.info(f'Failed to rename block {entry}: {utils.strex(ex)}') @subroutine('sync controller settings') async def _sync_sysinfo(self): @@ -183,14 +197,10 @@ async def run(self): await self.state.wait_disconnected() async def repeat(self): - try: - self.settings_store.service_settings_listeners.add(self._apply_service_settings) - self.settings_store.global_settings_listeners.add(self._apply_global_settings) - while True: - await self.run() - finally: - self.settings_store.service_settings_listeners.remove(self._apply_service_settings) - self.settings_store.global_settings_listeners.remove(self._apply_global_settings) + self.settings_store.service_settings_listeners.add(self._apply_service_settings) + self.settings_store.global_settings_listeners.add(self._apply_global_settings) + while True: + await self.run() @asynccontextmanager diff --git a/brewblox_devcon_spark/twinkeydict.py b/brewblox_devcon_spark/twinkeydict.py deleted file mode 100644 index bde5f6d5..00000000 --- a/brewblox_devcon_spark/twinkeydict.py +++ /dev/null @@ -1,179 +0,0 @@ -""" -Straightforward multi-index dict. -Supports lookups where either left or right value is unknown. -When looking up objects with both left and right key, asserts that keys point to the same object. -""" - -import logging -from collections.abc import MutableMapping -from contextlib import suppress -from dataclasses import dataclass -from typing import (TYPE_CHECKING, Any, Generic, Hashable, Iterator, Optional, - TypeVar) - -LOGGER = logging.getLogger(__name__) - -LT = TypeVar('LT', bound=Hashable) -RT = TypeVar('RT', bound=Hashable) -VT = TypeVar('VT', bound=Any) - -Keys_ = tuple[LT, RT] -SparseKeys_ = tuple[Optional[LT], Optional[RT]] - -if TYPE_CHECKING: # pragma: no cover - DictBase = MutableMapping[SparseKeys_, VT] -else: - DictBase = MutableMapping - - -class TwinKeyError(Exception): - pass - - -@dataclass(frozen=True) -class TwinKeyObject(Generic[LT, RT, VT]): - left_key: LT - right_key: RT - content: VT - - -class TwinKeyDict(DictBase, Generic[LT, RT, VT]): - """ - Key/Key/Value mapping, supporting lookups with incomplete data. - - Left and right keys must be unique in their own set. - (1, 2) and (2, 1) keysets can coexist, but (1, 2) and (1, 3) can't. - - The collections.abc.MutableMapping interface is fully implemented, - giving it meaningful implementations for: - __getitem__, __setitem__, __delitem__, __iter__, __len__, __contains__, - __eq__, __ne__, pop, popitem, clear, update, setdefault, keys, items, - values, get, and set. - Additionally, the rename, left_key, and right_key functions are available. - - None is reserved as a wildcard lookup operator. Any insert must always provide both keys, - but a __getitem__ or __contains__ call only has to specify either key. - - When two keys are provided, but they point to different objects, a TwinKeyError is raised. - - Example syntax: - >>> twinkey = TwinKeyDict() - - # Setting and getting using both keys - >>> twinkey['fritz', 'froggles'] = 'frabjous' - >>> twinkey['fritz', 'froggles'] - 'frabjous' - - # Partial lookup - >>> twinkey[None, 'froggles'] - 'frabjous' - >>> ('fritz', None) in twinkey - True - - # Getting mixed keys causes an error - >>> twinkey[1, 2] = 4 - >>> twinkey['fritz', 2] - Traceback (most recent call last): - ... - brewblox_devcon_spark.twinkeydict.TwinKeyError: Keys [fritz, 2] point to different objects - - # Using left or right key to get the other key - >>> twinkey.right_key('fritz') - 'froggles' - >>> twinkey.left_key('froggles') - 'fritz' - - # Iterating - >>> for k, v in twinkey.items(): - ... print(k, v) - ... - ('fritz', 'froggles') 'frabjous' - (1, 2) 4 - """ - - def __init__(self) -> None: - self._left_view: dict[LT, TwinKeyObject[LT, RT, VT]] = dict() - self._right_view: dict[RT, TwinKeyObject[LT, RT, VT]] = dict() - - def __bool__(self) -> bool: - return bool(self._left_view) - - def __repr__(self) -> str: - return str(self._left_view.values()) - - def __len__(self) -> int: - return len(self._left_view) - - def __iter__(self) -> Iterator[Keys_]: - return ((o.left_key, o.right_key) for o in self._left_view.values()) - - def _getobj(self, keys: SparseKeys_) -> TwinKeyObject[LT, RT, VT]: - left_key, right_key = keys - - if (left_key, right_key) == (None, None): - raise TwinKeyError('[None, None] lookup not allowed') - - if left_key is None: - return self._right_view[right_key] - - if right_key is None: - return self._left_view[left_key] - - left_obj, right_obj = self._left_view.get(left_key), self._right_view.get(right_key) - if (left_obj, right_obj) == (None, None): - raise KeyError(f'[{left_key}, {right_key}]') - if left_obj is not right_obj: - raise TwinKeyError(f'Keys [{left_key}, {right_key}] point to different objects') - return left_obj - - def __getitem__(self, keys: SparseKeys_) -> VT: - return self._getobj(keys).content - - def __setitem__(self, keys: Keys_, item): - if None in keys: - raise TwinKeyError(f'None keys not allowed, {keys=}') - - with suppress(KeyError): - # Checks whether key combo either matches, or does not exist - self._getobj(keys) - - left_key, right_key = keys - obj = TwinKeyObject(left_key, right_key, item) - self._left_view[left_key] = self._right_view[right_key] = obj - - def __delitem__(self, keys: SparseKeys_): - obj = self._getobj(keys) - del self._left_view[obj.left_key] - del self._right_view[obj.right_key] - - def left_key(self, right_key: RT, default=...) -> LT: - try: - return self._right_view[right_key].left_key - except KeyError: - if default is not ...: - return default - else: - raise - - def right_key(self, left_key: LT, default=...) -> RT: - try: - return self._left_view[left_key].right_key - except KeyError: - if default is not ...: - return default - else: - raise - - def rename(self, old_keys: SparseKeys_, new_keys: SparseKeys_): - if new_keys in self: - raise TwinKeyError(f'Already contains {new_keys}') - - obj = self._getobj(old_keys) - new_left, new_right = new_keys - if new_left is None: - new_left = obj.left_key - if new_right is None: - new_right = obj.right_key - - del self[old_keys] - self[new_left, new_right] = obj.content diff --git a/firmware.ini b/firmware.ini index 5600a5bb..822864fa 100644 --- a/firmware.ini +++ b/firmware.ini @@ -1,8 +1,8 @@ [FIRMWARE] -firmware_version=1d09d4b7 -firmware_date=2024-04-09 -firmware_sha=1d09d4b7f0c5d2407da114d9a51fc037ca1465c7 -proto_version=619d55b2 -proto_date=2024-04-09 -proto_sha=619d55b27b4b79728f73e74c417c288bda5f03cf +firmware_version=32b34348 +firmware_date=2024-05-08 +firmware_sha=32b343483d2355dec7dff2f3fc666fe721196ff3 +proto_version=cc7f7ded +proto_date=2024-05-08 +proto_sha=cc7f7dedb3a9b9b5a50abe8171a1d64323b43a3c system_version=3.2.0 diff --git a/poetry.lock b/poetry.lock index 608c7aa5..19a45771 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "aiofiles" @@ -37,13 +37,13 @@ files = [ [[package]] name = "anyio" -version = "3.7.1" +version = "4.3.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, - {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, + {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"}, + {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"}, ] [package.dependencies] @@ -51,9 +51,9 @@ idna = ">=2.8" sniffio = ">=1.1" [package.extras] -doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] -test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (<0.22)"] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] [[package]] name = "asgi-lifespan" @@ -71,190 +71,202 @@ sniffio = "*" [[package]] name = "attrs" -version = "23.1.0" +version = "23.2.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.7" files = [ - {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, - {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, + {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, + {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, ] [package.extras] cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]", "pre-commit"] +dev = ["attrs[tests]", "pre-commit"] docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] +tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] [[package]] name = "autopep8" -version = "2.0.4" +version = "2.1.0" description = "A tool that automatically formats Python code to conform to the PEP 8 style guide" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "autopep8-2.0.4-py2.py3-none-any.whl", hash = "sha256:067959ca4a07b24dbd5345efa8325f5f58da4298dab0dde0443d5ed765de80cb"}, - {file = "autopep8-2.0.4.tar.gz", hash = "sha256:2913064abd97b3419d1cc83ea71f042cb821f87e45b9c88cad5ad3c4ea87fe0c"}, + {file = "autopep8-2.1.0-py2.py3-none-any.whl", hash = "sha256:2bb76888c5edbcafe6aabab3c47ba534f5a2c2d245c2eddced4a30c4b4946357"}, + {file = "autopep8-2.1.0.tar.gz", hash = "sha256:1fa8964e4618929488f4ec36795c7ff12924a68b8bf01366c094fc52f770b6e7"}, ] [package.dependencies] -pycodestyle = ">=2.10.0" +pycodestyle = ">=2.11.0" + +[[package]] +name = "bidict" +version = "0.23.1" +description = "The bidirectional mapping library for Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "bidict-0.23.1-py3-none-any.whl", hash = "sha256:5dae8d4d79b552a71cbabc7deb25dfe8ce710b17ff41711e13010ead2abfc3e5"}, + {file = "bidict-0.23.1.tar.gz", hash = "sha256:03069d763bc387bbd20e7d49914e75fc4132a41937fa3405417e1a5a2d006d71"}, +] [[package]] name = "bitarray" -version = "2.8.3" +version = "2.9.2" description = "efficient arrays of booleans -- C extension" optional = false python-versions = "*" files = [ - {file = "bitarray-2.8.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:be7c6343a7f24293a988e5a27c1e2f44f028476e35192e73663c4acec5c4766e"}, - {file = "bitarray-2.8.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:38233e5793e107575be656908419d2bceab359c78c28affc386c7b88b8882b8f"}, - {file = "bitarray-2.8.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:acf24bc6aedd0a490af71591b99401867d4445d64db09a7bfe0bde3e8498cc8d"}, - {file = "bitarray-2.8.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04fcb292637012a1551e55c00796e31b5c66d1692ca25a5ac83d23779c23cd29"}, - {file = "bitarray-2.8.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:015908355354d42973ad41ba4eca697b4b55690b3ece6d9629118273e7a9e380"}, - {file = "bitarray-2.8.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48a89c2112420ebeb163a3c273c244d542cf9315c9ce5a875d305f91adcdac24"}, - {file = "bitarray-2.8.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb530a9fb7ed13a1a49bda81db2def4c73b7fef0fd1bb969b1d7605121869230"}, - {file = "bitarray-2.8.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c87146e9c2c196c012e97273f82215e2239b9bffcbb6c7802bbbedac87be2358"}, - {file = "bitarray-2.8.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:84a2628a5377971d73c95014e540a51327eb27ffdfbab81e43eac494eced3dc2"}, - {file = "bitarray-2.8.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6bcbe2ea34c88cf736f157cf3d713c1af112f0d7a9eec390d69a9e042b7d76d4"}, - {file = "bitarray-2.8.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:67ee9d71af3db621aa637f96520a8df8534fcc64e881360d3ed3a07f7e47ed1b"}, - {file = "bitarray-2.8.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ba3f27d82b45543a7d1488d151594915a6e67fb28bd4f21eb0901df2ba4ede86"}, - {file = "bitarray-2.8.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:095923f084d2271f28d7430798e698f6d0b304c58b072b4f2eb0bc132321323b"}, - {file = "bitarray-2.8.3-cp310-cp310-win32.whl", hash = "sha256:de91007504b475a93d8b0949db9dec86d39c0306de9914f7b9087daeb3d9fbaf"}, - {file = "bitarray-2.8.3-cp310-cp310-win_amd64.whl", hash = "sha256:09c140daa13d2515609d5a2dbfd289eada200e96222671194dc72eae89bc3c7b"}, - {file = "bitarray-2.8.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2bfd32ce49d23584333087262fb367b371c74cf531f6b0c16759d59f47c847d7"}, - {file = "bitarray-2.8.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:12035756896d71e82edf6a6fb46d3ca299eadbec25140c12505d4b32f561b0da"}, - {file = "bitarray-2.8.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:73fa449d9e551a063ff5c68b5d2cc0caaede5b59366d37457261ae3080f61fca"}, - {file = "bitarray-2.8.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18707458f6467072a9c3322835a299fa86df8fb3962f51afac2b50c6a4babf82"}, - {file = "bitarray-2.8.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f142476b3bb80f6887b5a3a08d69bbd526093aee5a00973c26458cc16dd5e47"}, - {file = "bitarray-2.8.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:47400fa421b8a3947f6676981f8d9b8581239831533dff374477ef2b86fda42f"}, - {file = "bitarray-2.8.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56f51107bb5406bfa4889064c01d5f9e7a545b3e2b53f159626c72c910fe8f07"}, - {file = "bitarray-2.8.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a3741359cbb1a9eb50188e8faa0ced96ca658eb85061786b7f686efa94c3604"}, - {file = "bitarray-2.8.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c65080bbba08ce07b136490b4df3d0907ec3dd76c3c5d47fda011002420f6d31"}, - {file = "bitarray-2.8.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:117a6f409dabc15320f3212d05d878cc33436c1e118e8746bf3775da2509bb7d"}, - {file = "bitarray-2.8.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:782ff781ae3c4956c15764aefc06ceb8c1c348794f09dfc8ebf62ff35166da1f"}, - {file = "bitarray-2.8.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:a7b839e5c038111fd2fbd09e83ca945da357d690e49cfa269c09aed239db9c2b"}, - {file = "bitarray-2.8.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ab7e9b1846cc62739d9d293a94f704949b588afb9ed72db00e26b7fcdb4661a3"}, - {file = "bitarray-2.8.3-cp311-cp311-win32.whl", hash = "sha256:20cc6573ac21627e0fde854d4e0450d4c97706213bac986c0d38d252452da155"}, - {file = "bitarray-2.8.3-cp311-cp311-win_amd64.whl", hash = "sha256:8011a63692e9e32cdc3fac3dfd0beceece926e8b53fb91750037fc386917f90b"}, - {file = "bitarray-2.8.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:da61c6d7b6288d29db5be77048176f41f7320316997fced28b5415e1f939448e"}, - {file = "bitarray-2.8.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:60774f73151dbcabefb5acb6d97ac09a51c999f9a903ac6f8db3d8368d338969"}, - {file = "bitarray-2.8.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c815a7ca72a5eebcd85caaeb4d32b71af1c795e38b3dff5dcb5b6b1f3ba0b4f"}, - {file = "bitarray-2.8.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a102cd1fafee8919a069fed9ea40c1ffe4d6037fd5b0a7f47326c2f75f24f70f"}, - {file = "bitarray-2.8.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b2816afe82feeb7948e58ca0be31c254e23307953e56d3313f293f79279fbe7"}, - {file = "bitarray-2.8.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98fe712a82f65de536b65fa9af7601df4e8231f14e3b0b14ef22e16e30d2fbea"}, - {file = "bitarray-2.8.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8defbf10a731b44892001daa6903b2f2f7ad8c623a7b4d9ae6bd674592b1763e"}, - {file = "bitarray-2.8.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e98a7b510aaaf0d7368b7cb983d3106aecd28abdfa4b4593b80e7f4ab5af0a97"}, - {file = "bitarray-2.8.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a5e24317b0768789c52586a31284dec8ccafa2f6c128df2f2d79656142f1e794"}, - {file = "bitarray-2.8.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:c30dbbe2f49056d4bd97a94c07a7fc0118ecc85661fdbaada36dfa9b14dc5962"}, - {file = "bitarray-2.8.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:2adb2ba1e7196f62587f4011b213b3609a717f92698a398904192e201ec3e29e"}, - {file = "bitarray-2.8.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:3aa1bd71236e07f0e7ab859a130fc57645301fd1ffd64be9a9750bce51446acb"}, - {file = "bitarray-2.8.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:63e595ca8dab2b77104e618782764bc3b172a0e9c6f97734d5fdd299063feac0"}, - {file = "bitarray-2.8.3-cp312-cp312-win32.whl", hash = "sha256:0c3de6517df7bbac18632046e722ca9000a4aeb76da68e545437fee1e61e2bbc"}, - {file = "bitarray-2.8.3-cp312-cp312-win_amd64.whl", hash = "sha256:4a6a4e83ecab1fd1fc171c57334663b24c5d286b66421efac2428b7e105c5d62"}, - {file = "bitarray-2.8.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:993438edd54350133f7569a8691074a90aa2297def69ec0e7af34de3d175cd00"}, - {file = "bitarray-2.8.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06770f6f7d238c2e2d251e9f5346358653ea8f3dbbedc83d18598f6c044f16b4"}, - {file = "bitarray-2.8.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44e3944ebccbc38ebdb7bd3c37a9b6ff91d87db2dad4bf3910e2b01fbd36831b"}, - {file = "bitarray-2.8.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a86c308018b59b999cf3d5a16889d3a347b48a2d08f34fbb4e29d5dc05fa198a"}, - {file = "bitarray-2.8.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b92c17b15bd5536c3e067051c67531adc81fcb6c1a699a760600ccd03dfcfba"}, - {file = "bitarray-2.8.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3d80bc6722652c847e5f503c2ce94a641b016059ec45bde4e1f13454b33e904"}, - {file = "bitarray-2.8.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:fbc7ac38de41052599f1e27edf4f33c02d5aea6810ee299825a81863a32e26a0"}, - {file = "bitarray-2.8.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:bbca4c4bc9854e3166474e471f3230989fd2baf32c915e363c32f91dc6ebb704"}, - {file = "bitarray-2.8.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:74efd69ac9d06ce9f43a1f513cee8a82c314f85aa0bd74664abe9e608fb59ffd"}, - {file = "bitarray-2.8.3-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:c3f7a6c6b78edd81fca0035fb7a156a79f25919e1b0598afb483c26513d562f1"}, - {file = "bitarray-2.8.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b0cefac8fedb3dbbf97542dc0c6fdd8bf09a210bf6fa5799083b7309fd97b1b2"}, - {file = "bitarray-2.8.3-cp36-cp36m-win32.whl", hash = "sha256:67e366efaea6e0b5971593a83d062cb7e4e09e03d29f8d5b825effdf5f516ad3"}, - {file = "bitarray-2.8.3-cp36-cp36m-win_amd64.whl", hash = "sha256:621d5658b890b99b3f8b1a678b0afed10e096d53baa767ecbcf428fce1f48415"}, - {file = "bitarray-2.8.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ac5451951ce1e0616385e77de49afc7bd90bdf9d0aa99c0fd7b0bd23400db890"}, - {file = "bitarray-2.8.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff6b6b47da38223803aa3e7aab356f84e0636ecdbd43fa4bd11dbc00a923d474"}, - {file = "bitarray-2.8.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:154082c814e4007bf15d8dfc576ebd4e79e9ed3626017cd53810961cee7e65d8"}, - {file = "bitarray-2.8.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9f4f29c0338e5862ebc3b88091d29ff28d44ab80381f238da08aabb054777c2"}, - {file = "bitarray-2.8.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b153b846a6ac4b6eca71bb5f84d3dba51f3cd159f4322f5d67b2c41cf15973ad"}, - {file = "bitarray-2.8.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a2c8e06c3463746181255e03f07535c136f5346fb9c4a90eec2da27695102533"}, - {file = "bitarray-2.8.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f16a2247c27f4db3f8d01665ee97d46eaf0240b7a9feae16c17e906a3bb9a794"}, - {file = "bitarray-2.8.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:57f1fc3a089d9907859e940c6a4db3f5358013c75bba3b15156d93a58bca868e"}, - {file = "bitarray-2.8.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:c42fcddc955d84164667d899e8d4bbb763f4bc029fe72642a65df7382c46fe94"}, - {file = "bitarray-2.8.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:e60254ac626790c8c95415b095c6831056ca57a5d31839564210530c3278f170"}, - {file = "bitarray-2.8.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a0bb2e5c0c9f964bf43a09a1cf37233ff96b3318c9a50b1b7c3d74a875b32072"}, - {file = "bitarray-2.8.3-cp37-cp37m-win32.whl", hash = "sha256:edddd6d885c7195ba7734936bc1efc8a37de18ec886a8be44a484980da87947e"}, - {file = "bitarray-2.8.3-cp37-cp37m-win_amd64.whl", hash = "sha256:44ee266b71cd6bd7c99f937b30ac3b7627cad04777f2c12894cd0f820cb79ada"}, - {file = "bitarray-2.8.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a836a988ada812776af9ea6e88edf1e2eaaf38ebd545bbbcd500b2db0ced3a4f"}, - {file = "bitarray-2.8.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:089a4658706ec63293c153ffb1472cea1bbefb39ccfb214f52f0c1f5d10bf28e"}, - {file = "bitarray-2.8.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f8c492d90b41c510d799cc37c27892b149be77e225df6446854ce0b164e243a3"}, - {file = "bitarray-2.8.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b661052a4762825790a728469f897c341558392342cb68a6c54708d4e5198254"}, - {file = "bitarray-2.8.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4fd5e8a2e1b898ebc91faf6e1938bde38a4d20ee8ea49835e9adadd9b87c97c"}, - {file = "bitarray-2.8.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4d4f3e78a8c1c5bf625632488a4bdd78fe87c4603ea10443cb8f207c2a846efe"}, - {file = "bitarray-2.8.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5797552e849079ff963936a037087367f20b41d5a612b07a1ba032259a2b86c8"}, - {file = "bitarray-2.8.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:adfc210df3d85017f5d2ef82db94d46b585ecbbd7357a6ee1c3bc125cc2658e2"}, - {file = "bitarray-2.8.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:252bdf94c74192b10f7fdb42683adf1403892acdce39e3e3524e8b070793b1c7"}, - {file = "bitarray-2.8.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:879bb9f11bad60a5588f5efb4e60f42844e4787ce7d5bb0f8eb8b87a835e914f"}, - {file = "bitarray-2.8.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:7a6413b5f53d44e134276d5a3747b71d17cbc25177a50445458921424a760dcd"}, - {file = "bitarray-2.8.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3d0daf70de198dcde459451c534333c0f59ab847649be013c9b88d24f0e49767"}, - {file = "bitarray-2.8.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:09244fa4e39ca263820dd8eca83a0175a98fb8f9bd353b4285a9ef2928b7fb41"}, - {file = "bitarray-2.8.3-cp38-cp38-win32.whl", hash = "sha256:7ad527ff1d398a703eba71ac270625087691e62efab8d0e331c53affe0628030"}, - {file = "bitarray-2.8.3-cp38-cp38-win_amd64.whl", hash = "sha256:2fcaf220e53518762dae0701082cb70d620656eaaecf5512695a6afafa885ea6"}, - {file = "bitarray-2.8.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e19756480bff2703155060d1849d37138a1d2242287563de112fb5bdd3217d"}, - {file = "bitarray-2.8.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:123333df4b22f12f4fc13fa4821b8ca075df59161bd41f5f189ffc791aaac10b"}, - {file = "bitarray-2.8.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ff62c1c174ceae7ef0456702f9eff1f3d76590c075b9c984c459d734f73fc766"}, - {file = "bitarray-2.8.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7554518934364b30d8da085f7a759ee3838c9ae4265b48beb82072f942b2816e"}, - {file = "bitarray-2.8.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8f0306dbc6605dd7f9e2dada33a3916c0c28f37128464de7153df7d8cf7a959"}, - {file = "bitarray-2.8.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2aeae0f2dacf546256f8720a1e8233b6735a3bf76778be701a1736d26fe4ecec"}, - {file = "bitarray-2.8.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c02d24051d7070b8f3b52fa9c8984fd8eb035115545f7c4be44c9825e8b58c8"}, - {file = "bitarray-2.8.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82fe0a774204159383d1be993191d51500cb44adbd3e9287da801e4657c0d4b2"}, - {file = "bitarray-2.8.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aa4513a7393055faef630dcfb4d10a339c47eeb943487c0e9063ba763b66cb73"}, - {file = "bitarray-2.8.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:36f9752b654e18f99130a2bf84f54b1e6b8fad4f5f768f4390eb9b769a64a59c"}, - {file = "bitarray-2.8.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:a4212b66f9ae2e28ca1aa0307167ebfcdb2ca263a56b786cc572699e8a717f91"}, - {file = "bitarray-2.8.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cadccf651900e3858e55dfd762d5de0786aec853f1fb26183905ddee233183b4"}, - {file = "bitarray-2.8.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f756d159099f154a21d73932f13c8ce27f45a1c892d9b19c66a1a2c50c18474"}, - {file = "bitarray-2.8.3-cp39-cp39-win32.whl", hash = "sha256:c2ffed55994f5c73d34371474946767f936b0b83237f800be0f27a3e783baadb"}, - {file = "bitarray-2.8.3-cp39-cp39-win_amd64.whl", hash = "sha256:f69cacb3d983200114e48ec0c894e28690926f166b71202f75e976d5cd588be9"}, - {file = "bitarray-2.8.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d6a8a1da9205de97eea14aaa731c657fa8decd2d6878ee3d2d4bf33291960216"}, - {file = "bitarray-2.8.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8562dd32b4d9810a0b9c04fe3d1ed8078f27d74e3738063162c677b253216666"}, - {file = "bitarray-2.8.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed974048a4ced6e7b5d1cfcb83c046e70bf31b8a28eacfee3afa62f8690dee69"}, - {file = "bitarray-2.8.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2448d8f5ce6d8a840a5dff1b41f5124445141530724af7ba82ec7967eabd290a"}, - {file = "bitarray-2.8.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:64d867953b530b3dde93663d4c4708b533216e9dca3f3b4489698261cd80fcef"}, - {file = "bitarray-2.8.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:72bba6b388ba7c48a882bd58c86972aab73a30c3fb5b3341f28eb5bdc17365f8"}, - {file = "bitarray-2.8.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f62ee2eae65b72e034a24ac2bacd78d48845193168b54407e93bccd3772b247f"}, - {file = "bitarray-2.8.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07ed46857ed73765f2316e08f2d5108b7e694b44f4293e30fb526f3123c829d4"}, - {file = "bitarray-2.8.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:136bd205384a3089bc22c02a365a152e61b1e8d06ec664185c90e3ab8967260c"}, - {file = "bitarray-2.8.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:42d2d0123b1e68b387f4b2fd288e1a8f0dfb991cf1d2fbc56d948c3f4a113d8d"}, - {file = "bitarray-2.8.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5f35d5ff7334610b42632b30c27332b30db3680dd0174f86e382c3e150dfea2c"}, - {file = "bitarray-2.8.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7618abbac8999cd942be278130b88ac6ed364ba3446222f1db0faf4de7a052cf"}, - {file = "bitarray-2.8.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50923d862e01a546f942272193612f386ec1f90cc4528b10561854902bd8aab0"}, - {file = "bitarray-2.8.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c99838782dbec7f0c5cba1a6d4faa8e2da2b522423aa36a7f383a2265ac0ae3f"}, - {file = "bitarray-2.8.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e76735a285e834fc9db560de11e086453128c1177950a15c3404fe16c7d76f5e"}, - {file = "bitarray-2.8.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ffa74d8601e26570f1d0e3042fda6eb26b64ba8d8dfe9b96d0bf90a6f0d81582"}, - {file = "bitarray-2.8.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6993e46c81702d0bb39aad83ceb228cec087bc321782fbd2c6ddff7c653dcc8"}, - {file = "bitarray-2.8.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d9ec6a214563d2edd46d1a553583782379a2cb1016e8cc6c524e011905433b1"}, - {file = "bitarray-2.8.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34ceedbeed9aefde10c273d44801971db8f7505f80933fbb936969ee2343b8a3"}, - {file = "bitarray-2.8.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cc178297951343c8d8cd8a391999abf0024ca319671418f98dea0d7e71354126"}, - {file = "bitarray-2.8.3.tar.gz", hash = "sha256:e15587b2bdf18d32eb3ba25f5f5a51bedd0dc06b3112a4c53dab5e7753bc6588"}, + {file = "bitarray-2.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:917905de565d9576eb20f53c797c15ba88b9f4f19728acabec8d01eee1d3756a"}, + {file = "bitarray-2.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b35bfcb08b7693ab4bf9059111a6e9f14e07d57ac93cd967c420db58ab9b71e1"}, + {file = "bitarray-2.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ea1923d2e7880f9e1959e035da661767b5a2e16a45dfd57d6aa831e8b65ee1bf"}, + {file = "bitarray-2.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e0b63a565e8a311cc8348ff1262d5784df0f79d64031d546411afd5dd7ef67d"}, + {file = "bitarray-2.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cf0620da2b81946d28c0b16f3e3704d38e9837d85ee4f0652816e2609aaa4fed"}, + {file = "bitarray-2.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:79a9b8b05f2876c7195a2b698c47528e86a73c61ea203394ff8e7a4434bda5c8"}, + {file = "bitarray-2.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:345c76b349ff145549652436235c5532e5bfe9db690db6f0a6ad301c62b9ef21"}, + {file = "bitarray-2.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e2936f090bf3f4d1771f44f9077ebccdbc0415d2b598d51a969afcb519df505"}, + {file = "bitarray-2.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f9346e98fc2abcef90b942973087e2462af6d3e3710e82938078d3493f7fef52"}, + {file = "bitarray-2.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e6ec283d4741befb86e8c3ea2e9ac1d17416c956d392107e45263e736954b1f7"}, + {file = "bitarray-2.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:962892646599529917ef26266091e4cb3077c88b93c3833a909d68dcc971c4e3"}, + {file = "bitarray-2.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e8da5355d7d75a52df5b84750989e34e39919ec7e59fafc4c104cc1607ab2d31"}, + {file = "bitarray-2.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:603e7d640e54ad764d2b4da6b61e126259af84f253a20f512dd10689566e5478"}, + {file = "bitarray-2.9.2-cp310-cp310-win32.whl", hash = "sha256:f00079f8e69d75c2a417de7961a77612bb77ef46c09bc74607d86de4740771ef"}, + {file = "bitarray-2.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:1bb33673e7f7190a65f0a940c1ef63266abdb391f4a3e544a47542d40a81f536"}, + {file = "bitarray-2.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fe71fd4b76380c2772f96f1e53a524da7063645d647a4fcd3b651bdd80ca0f2e"}, + {file = "bitarray-2.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d527172919cdea1e13994a66d9708a80c3d33dedcf2f0548e4925e600fef3a3a"}, + {file = "bitarray-2.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:052c5073bdcaa9dd10628d99d37a2f33ec09364b86dd1f6281e2d9f8d3db3060"}, + {file = "bitarray-2.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e064caa55a6ed493aca1eda06f8b3f689778bc780a75e6ad7724642ba5dc62f7"}, + {file = "bitarray-2.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:508069a04f658210fdeee85a7a0ca84db4bcc110cbb1d21f692caa13210f24a7"}, + {file = "bitarray-2.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4da73ebd537d75fa7bccfc2228fcaedea0803f21dd9d0bf0d3b67fef3c4af294"}, + {file = "bitarray-2.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cb378eaa65cd43098f11ff5d27e48ee3b956d2c00d2d6b5bfc2a09fe183be47"}, + {file = "bitarray-2.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d14c790b91f6cbcd9b718f88ed737c78939980c69ac8c7f03dd7e60040c12951"}, + {file = "bitarray-2.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7eea9318293bc0ea6447e9ebfba600a62f3428bea7e9c6d42170ae4f481dbab3"}, + {file = "bitarray-2.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b76ffec27c7450b8a334f967366a9ebadaea66ee43f5b530c12861b1a991f503"}, + {file = "bitarray-2.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:76b76a07d4ee611405045c6950a1e24c4362b6b44808d4ad6eea75e0dbc59af4"}, + {file = "bitarray-2.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:c7d16beeaaab15b075990cd26963d6b5b22e8c5becd131781514a00b8bdd04bd"}, + {file = "bitarray-2.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60df43e868a615c7e15117a1e1c2e5e11f48f6457280eba6ddf8fbefbec7da99"}, + {file = "bitarray-2.9.2-cp311-cp311-win32.whl", hash = "sha256:e788608ed7767b7b3bbde6d49058bccdf94df0de9ca75d13aa99020cc7e68095"}, + {file = "bitarray-2.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:a23397da092ef0a8cfe729571da64c2fc30ac18243caa82ac7c4f965087506ff"}, + {file = "bitarray-2.9.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:90e3a281ffe3897991091b7c46fca38c2675bfd4399ffe79dfeded6c52715436"}, + {file = "bitarray-2.9.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bed637b674db5e6c8a97a4a321e3e4d73e72d50b5c6b29950008a93069cc64cd"}, + {file = "bitarray-2.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e49066d251dbbe4e6e3a5c3937d85b589e40e2669ad0eef41a00f82ec17d844b"}, + {file = "bitarray-2.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c4344e96642e2211fb3a50558feff682c31563a4c64529a931769d40832ca79"}, + {file = "bitarray-2.9.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aeb60962ec4813c539a59fbd4f383509c7222b62c3fb1faa76b54943a613e33a"}, + {file = "bitarray-2.9.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed0f7982f10581bb16553719e5e8f933e003f5b22f7d25a68bdb30fac630a6ff"}, + {file = "bitarray-2.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c71d1cabdeee0cdda4669168618f0e46b7dace207b29da7b63aaa1adc2b54081"}, + {file = "bitarray-2.9.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0ef2d0a6f1502d38d911d25609b44c6cc27bee0a4363dd295df78b075041b60"}, + {file = "bitarray-2.9.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6f71d92f533770fb027388b35b6e11988ab89242b883f48a6fe7202d238c61f8"}, + {file = "bitarray-2.9.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:ba0734aa300757c924f3faf8148e1b8c247176a0ac8e16aefdf9c1eb19e868f7"}, + {file = "bitarray-2.9.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:d91406f413ccbf4af6ab5ae7bc78f772a95609f9ddd14123db36ef8c37116d95"}, + {file = "bitarray-2.9.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:87abb7f80c0a042f3fe8e5264da1a2756267450bb602110d5327b8eaff7682e7"}, + {file = "bitarray-2.9.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b558ce85579b51a2e38703877d1e93b7728a7af664dd45a34e833534f0b755d"}, + {file = "bitarray-2.9.2-cp312-cp312-win32.whl", hash = "sha256:dac2399ee2889fbdd3472bfc2ede74c34cceb1ccf29a339964281a16eb1d3188"}, + {file = "bitarray-2.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:48a30d718d1a6dfc22a49547450107abe8f4afdf2abdcbe76eb9ed88edc49498"}, + {file = "bitarray-2.9.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2c6be1b651fad8f3adb7a5aa12c65b612cd9b89530969af941844ae680f7d981"}, + {file = "bitarray-2.9.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5b399ae6ab975257ec359f03b48fc00b1c1cd109471e41903548469b8feae5c"}, + {file = "bitarray-2.9.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b3543c8a1cb286ad105f11c25d8d0f712f41c5c55f90be39f0e5a1376c7d0b0"}, + {file = "bitarray-2.9.2-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:03adaacb79e2fb8f483ab3a67665eec53bb3fd0cd5dbd7358741aef124688db3"}, + {file = "bitarray-2.9.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ae5b0657380d2581e13e46864d147a52c1e2bbac9f59b59c576e42fa7d10cf0"}, + {file = "bitarray-2.9.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c1f4bf6ea8eb9d7f30808c2e9894237a96650adfecbf5f3643862dc5982f89e"}, + {file = "bitarray-2.9.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a8873089be2aa15494c0f81af1209f6e1237d762c5065bc4766c1b84321e1b50"}, + {file = "bitarray-2.9.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:677e67f50e2559efc677a4366707070933ad5418b8347a603a49a070890b19bc"}, + {file = "bitarray-2.9.2-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:a620d8ce4ea2f1c73c6b6b1399e14cb68c6915e2be3fad5808c2998ed55b4acf"}, + {file = "bitarray-2.9.2-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:64115ccabbdbe279c24c367b629c6b1d3da9ed36c7420129e27c338a3971bfee"}, + {file = "bitarray-2.9.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:5d6fb422772e75385b76ad1c52f45a68bd4efafd8be8d0061c11877be74c4d43"}, + {file = "bitarray-2.9.2-cp36-cp36m-win32.whl", hash = "sha256:852e202875dd6dfd6139ce7ec4e98dac2b17d8d25934dc99900831e81c3adaef"}, + {file = "bitarray-2.9.2-cp36-cp36m-win_amd64.whl", hash = "sha256:7dfefdcb0dc6a3ba9936063cec65a74595571b375beabe18742b3d91d087eefd"}, + {file = "bitarray-2.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b306c4cf66912511422060f7f5e1149c8bdb404f8e00e600561b0749fdd45659"}, + {file = "bitarray-2.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a09c4f81635408e3387348f415521d4b94198c562c23330f560596a6aaa26eaf"}, + {file = "bitarray-2.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5361413fd2ecfdf44dc8f065177dc6aba97fa80a91b815586cb388763acf7f8d"}, + {file = "bitarray-2.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e8a9475d415ef1eaae7942df6f780fa4dcd48fce32825eda591a17abba869299"}, + {file = "bitarray-2.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9b87baa7bfff9a5878fcc1bffe49ecde6e647a72a64b39a69cd8a2992a43a34"}, + {file = "bitarray-2.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bb6b86cfdfc503e92cb71c68766a24565359136961642504a7cc9faf936d9c88"}, + {file = "bitarray-2.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cd56b8ae87ebc71bcacbd73615098e8a8de952ecbb5785b6b4e2b07da8a06e1f"}, + {file = "bitarray-2.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3fa909cfd675004aed8b4cc9df352415933656e0155a6209d878b7cb615c787e"}, + {file = "bitarray-2.9.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b069ca9bf728e0c5c5b60e00a89df9af34cc170c695c3bfa3b372d8f40288efb"}, + {file = "bitarray-2.9.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:6067f2f07a7121749858c7daa93c8774325c91590b3e81a299621e347740c2ae"}, + {file = "bitarray-2.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:321841cdad1dd0f58fe62e80e9c9c7531f8ebf8be93f047401e930dc47425b1e"}, + {file = "bitarray-2.9.2-cp37-cp37m-win32.whl", hash = "sha256:54e16e32e60973bb83c315de9975bc1bcfc9bd50bb13001c31da159bc49b0ca1"}, + {file = "bitarray-2.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:f4dcadb7b8034aa3491ee8f5a69b3d9ba9d7d1e55c3cc1fc45be313e708277f8"}, + {file = "bitarray-2.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c8919fdbd3bb596b104388b56ae4b266eb28da1f2f7dff2e1f9334a21840fe96"}, + {file = "bitarray-2.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb7a9d8a2e400a1026de341ad48e21670a6261a75b06df162c5c39b0d0e7c8f4"}, + {file = "bitarray-2.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6ec84668dd7b937874a2b2c293cd14ba84f37be0d196dead852e0ada9815d807"}, + {file = "bitarray-2.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2de9a31c34e543ae089fd2a5ced01292f725190e379921384f695e2d7184bd3"}, + {file = "bitarray-2.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9521f49ae121a17c0a41e5112249e6fa7f6a571245b1118de81fb86e7c1bc1ce"}, + {file = "bitarray-2.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6cc6545d6d76542aee3d18c1c9485fb7b9812b8df4ebe52c4535ec42081b48f"}, + {file = "bitarray-2.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:856bbe1616425f71c0df5ef2e8755e878d9504d5a531acba58ab4273c52c117a"}, + {file = "bitarray-2.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d4bba8042ea6ab331ade91bc435d81ad72fddb098e49108610b0ce7780c14e68"}, + {file = "bitarray-2.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a035da89c959d98afc813e3c62f052690d67cfd55a36592f25d734b70de7d4b0"}, + {file = "bitarray-2.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6d70b1579da7fb71be5a841a1f965d19aca0ef27f629cfc07d06b09aafd0a333"}, + {file = "bitarray-2.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:405b83bed28efaae6d86b6ab287c75712ead0adbfab2a1075a1b7ab47dad4d62"}, + {file = "bitarray-2.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7eb8be687c50da0b397d5e0ab7ca200b5ebb639e79a9f5e285851d1944c94be9"}, + {file = "bitarray-2.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:eceb551dfeaf19c609003a69a0cf8264b0efd7abc3791a11dfabf4788daf0d19"}, + {file = "bitarray-2.9.2-cp38-cp38-win32.whl", hash = "sha256:bb198c6ed1edbcdaf3d1fa3c9c9d1cdb7e179a5134ef5ee660b53cdec43b34e7"}, + {file = "bitarray-2.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:648d2f2685590b0103c67a937c2fb9e09bcc8dfb166f0c7c77bd341902a6f5b3"}, + {file = "bitarray-2.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ea816dc8f8e65841a8bbdd30e921edffeeb6f76efe6a1eb0da147b60d539d1cf"}, + {file = "bitarray-2.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4d0e32530f941c41eddfc77600ec89b65184cb909c549336463a738fab3ed285"}, + {file = "bitarray-2.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4a22266fb416a3b6c258bf7f83c9fe531ba0b755a56986a81ad69dc0f3bcc070"}, + {file = "bitarray-2.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc6d3e80dd8239850f2604833ff3168b28909c8a9357abfed95632cccd17e3e7"}, + {file = "bitarray-2.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f135e804986b12bf14f2cd1eb86674c47dea86c4c5f0fa13c88978876b97ebe6"}, + {file = "bitarray-2.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87580c7f7d14f7ec401eda7adac1e2a25e95153e9c339872c8ae61b3208819a1"}, + {file = "bitarray-2.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64b433e26993127732ac7b66a7821b2537c3044355798de7c5fcb0af34b8296f"}, + {file = "bitarray-2.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e497c535f2a9b68c69d36631bf2dba243e05eb343b00b9c7bbdc8c601c6802d"}, + {file = "bitarray-2.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e40b3cb9fa1edb4e0175d7c06345c49c7925fe93e39ef55ecb0bc40c906b0c09"}, + {file = "bitarray-2.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f2f8692f95c9e377eb19ca519d30d1f884b02feb7e115f798de47570a359e43f"}, + {file = "bitarray-2.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f0b84fc50b6dbeced4fa390688c07c10a73222810fb0e08392bd1a1b8259de36"}, + {file = "bitarray-2.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:d656ad38c942e38a470ddbce26b5020e08e1a7ea86b8fd413bb9024b5189993a"}, + {file = "bitarray-2.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6ab0f1dbfe5070db98771a56aa14797595acd45a1af9eadfb193851a270e7996"}, + {file = "bitarray-2.9.2-cp39-cp39-win32.whl", hash = "sha256:0a99b23ac845a9ea3157782c97465e6ae026fe0c7c4c1ed1d88f759fd6ea52d9"}, + {file = "bitarray-2.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:9bbcfc7c279e8d74b076e514e669b683f77b4a2a328585b3f16d4c5259c91222"}, + {file = "bitarray-2.9.2-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:43847799461d8ba71deb4d97b47250c2c2fb66d82cd3cb8b4caf52bb97c03034"}, + {file = "bitarray-2.9.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4f44381b0a4bdf64416082f4f0e7140377ae962c0ced6f983c6d7bbfc034040"}, + {file = "bitarray-2.9.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a484061616fb4b158b80789bd3cb511f399d2116525a8b29b6334c68abc2310f"}, + {file = "bitarray-2.9.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ff9e38356cc803e06134cf8ae9758e836ccd1b793135ef3db53c7c5d71e93bc"}, + {file = "bitarray-2.9.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b44105792fbdcfbda3e26ee88786790fda409da4c71f6c2b73888108cf8f062f"}, + {file = "bitarray-2.9.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7e913098de169c7fc890638ce5e171387363eb812579e637c44261460ac00aa2"}, + {file = "bitarray-2.9.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6fe315355cdfe3ed22ef355b8bdc81a805ca4d0949d921576560e5b227a1112"}, + {file = "bitarray-2.9.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f708e91fdbe443f3bec2df394ed42328fb9b0446dff5cb4199023ac6499e09fd"}, + {file = "bitarray-2.9.2-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b7b09489b71f9f1f64c0fa0977e250ec24500767dab7383ba9912495849cadf"}, + {file = "bitarray-2.9.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:128cc3488176145b9b137fdcf54c1c201809bbb8dd30b260ee40afe915843b43"}, + {file = "bitarray-2.9.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:21f21e7f56206be346bdbda2a6bdb2165a5e6a11821f88fd4911c5a6bbbdc7e2"}, + {file = "bitarray-2.9.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f4dd3af86dd8a617eb6464622fb64ca86e61ce99b59b5c35d8cd33f9c30603d"}, + {file = "bitarray-2.9.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6465de861aff7a2559f226b37982007417eab8c3557543879987f58b453519bd"}, + {file = "bitarray-2.9.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbaf2bb71d6027152d603f1d5f31e0dfd5e50173d06f877bec484e5396d4594b"}, + {file = "bitarray-2.9.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:2f32948c86e0d230a296686db28191b67ed229756f84728847daa0c7ab7406e3"}, + {file = "bitarray-2.9.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:be94e5a685e60f9d24532af8fe5c268002e9016fa80272a94727f435de3d1003"}, + {file = "bitarray-2.9.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5cc9381fd54f3c23ae1039f977bfd6d041a5c3c1518104f616643c3a5a73b15"}, + {file = "bitarray-2.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd926e8ae4d1ed1ac4a8f37212a62886292f692bc1739fde98013bf210c2d175"}, + {file = "bitarray-2.9.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:461a3dafb9d5fda0bb3385dc507d78b1984b49da3fe4c6d56c869a54373b7008"}, + {file = "bitarray-2.9.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:393cb27fd859af5fd9c16eb26b1c59b17b390ff66b3ae5d0dd258270191baf13"}, + {file = "bitarray-2.9.2.tar.gz", hash = "sha256:a8f286a51a32323715d77755ed959f94bef13972e9a2fe71b609e40e6d27957e"}, ] [[package]] name = "bitstring" -version = "4.1.3" +version = "4.2.1" description = "Simple construction, analysis and modification of binary data." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "bitstring-4.1.3-py3-none-any.whl", hash = "sha256:5619b9d6a4939717962b0fecb0034ad30277606b8b0bcce3f7cd6ac2400f6427"}, - {file = "bitstring-4.1.3.tar.gz", hash = "sha256:1b47c84644a961ba8503db2bba8a5965ab53e81474becdf0a18383b5b5f3f795"}, + {file = "bitstring-4.2.1-py3-none-any.whl", hash = "sha256:9ae5d89072b065d640d645d37c0efcd27284b2f79f1c48cc1cd38b54e1932b4f"}, + {file = "bitstring-4.2.1.tar.gz", hash = "sha256:8abb5a661588c764bacf1a23d64c7bb57517d2841e3e6f54fb8c057119e0540d"}, ] [package.dependencies] -bitarray = ">=2.8.0,<3.0.0" +bitarray = ">=2.9.0,<3.0.0" [[package]] name = "certifi" -version = "2023.11.17" +version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, - {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, ] [[package]] @@ -411,63 +423,63 @@ files = [ [[package]] name = "coverage" -version = "7.3.2" +version = "7.5.1" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf"}, - {file = "coverage-7.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9"}, - {file = "coverage-7.3.2-cp310-cp310-win32.whl", hash = "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f"}, - {file = "coverage-7.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611"}, - {file = "coverage-7.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c"}, - {file = "coverage-7.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312"}, - {file = "coverage-7.3.2-cp311-cp311-win32.whl", hash = "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640"}, - {file = "coverage-7.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2"}, - {file = "coverage-7.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836"}, - {file = "coverage-7.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a"}, - {file = "coverage-7.3.2-cp312-cp312-win32.whl", hash = "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb"}, - {file = "coverage-7.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed"}, - {file = "coverage-7.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738"}, - {file = "coverage-7.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76"}, - {file = "coverage-7.3.2-cp38-cp38-win32.whl", hash = "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92"}, - {file = "coverage-7.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a"}, - {file = "coverage-7.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce"}, - {file = "coverage-7.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083"}, - {file = "coverage-7.3.2-cp39-cp39-win32.whl", hash = "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce"}, - {file = "coverage-7.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f"}, - {file = "coverage-7.3.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637"}, - {file = "coverage-7.3.2.tar.gz", hash = "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef"}, + {file = "coverage-7.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0884920835a033b78d1c73b6d3bbcda8161a900f38a488829a83982925f6c2e"}, + {file = "coverage-7.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:39afcd3d4339329c5f58de48a52f6e4e50f6578dd6099961cf22228feb25f38f"}, + {file = "coverage-7.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a7b0ceee8147444347da6a66be737c9d78f3353b0681715b668b72e79203e4a"}, + {file = "coverage-7.5.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a9ca3f2fae0088c3c71d743d85404cec8df9be818a005ea065495bedc33da35"}, + {file = "coverage-7.5.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fd215c0c7d7aab005221608a3c2b46f58c0285a819565887ee0b718c052aa4e"}, + {file = "coverage-7.5.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4bf0655ab60d754491004a5efd7f9cccefcc1081a74c9ef2da4735d6ee4a6223"}, + {file = "coverage-7.5.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:61c4bf1ba021817de12b813338c9be9f0ad5b1e781b9b340a6d29fc13e7c1b5e"}, + {file = "coverage-7.5.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:db66fc317a046556a96b453a58eced5024af4582a8dbdc0c23ca4dbc0d5b3146"}, + {file = "coverage-7.5.1-cp310-cp310-win32.whl", hash = "sha256:b016ea6b959d3b9556cb401c55a37547135a587db0115635a443b2ce8f1c7228"}, + {file = "coverage-7.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:df4e745a81c110e7446b1cc8131bf986157770fa405fe90e15e850aaf7619bc8"}, + {file = "coverage-7.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:796a79f63eca8814ca3317a1ea443645c9ff0d18b188de470ed7ccd45ae79428"}, + {file = "coverage-7.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4fc84a37bfd98db31beae3c2748811a3fa72bf2007ff7902f68746d9757f3746"}, + {file = "coverage-7.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6175d1a0559986c6ee3f7fccfc4a90ecd12ba0a383dcc2da30c2b9918d67d8a3"}, + {file = "coverage-7.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fc81d5878cd6274ce971e0a3a18a8803c3fe25457165314271cf78e3aae3aa2"}, + {file = "coverage-7.5.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:556cf1a7cbc8028cb60e1ff0be806be2eded2daf8129b8811c63e2b9a6c43bca"}, + {file = "coverage-7.5.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9981706d300c18d8b220995ad22627647be11a4276721c10911e0e9fa44c83e8"}, + {file = "coverage-7.5.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d7fed867ee50edf1a0b4a11e8e5d0895150e572af1cd6d315d557758bfa9c057"}, + {file = "coverage-7.5.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ef48e2707fb320c8f139424a596f5b69955a85b178f15af261bab871873bb987"}, + {file = "coverage-7.5.1-cp311-cp311-win32.whl", hash = "sha256:9314d5678dcc665330df5b69c1e726a0e49b27df0461c08ca12674bcc19ef136"}, + {file = "coverage-7.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:5fa567e99765fe98f4e7d7394ce623e794d7cabb170f2ca2ac5a4174437e90dd"}, + {file = "coverage-7.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b6cf3764c030e5338e7f61f95bd21147963cf6aa16e09d2f74f1fa52013c1206"}, + {file = "coverage-7.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ec92012fefebee89a6b9c79bc39051a6cb3891d562b9270ab10ecfdadbc0c34"}, + {file = "coverage-7.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16db7f26000a07efcf6aea00316f6ac57e7d9a96501e990a36f40c965ec7a95d"}, + {file = "coverage-7.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:beccf7b8a10b09c4ae543582c1319c6df47d78fd732f854ac68d518ee1fb97fa"}, + {file = "coverage-7.5.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8748731ad392d736cc9ccac03c9845b13bb07d020a33423fa5b3a36521ac6e4e"}, + {file = "coverage-7.5.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7352b9161b33fd0b643ccd1f21f3a3908daaddf414f1c6cb9d3a2fd618bf2572"}, + {file = "coverage-7.5.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7a588d39e0925f6a2bff87154752481273cdb1736270642aeb3635cb9b4cad07"}, + {file = "coverage-7.5.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:68f962d9b72ce69ea8621f57551b2fa9c70509af757ee3b8105d4f51b92b41a7"}, + {file = "coverage-7.5.1-cp312-cp312-win32.whl", hash = "sha256:f152cbf5b88aaeb836127d920dd0f5e7edff5a66f10c079157306c4343d86c19"}, + {file = "coverage-7.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:5a5740d1fb60ddf268a3811bcd353de34eb56dc24e8f52a7f05ee513b2d4f596"}, + {file = "coverage-7.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e2213def81a50519d7cc56ed643c9e93e0247f5bbe0d1247d15fa520814a7cd7"}, + {file = "coverage-7.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5037f8fcc2a95b1f0e80585bd9d1ec31068a9bcb157d9750a172836e98bc7a90"}, + {file = "coverage-7.5.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3721c2c9e4c4953a41a26c14f4cef64330392a6d2d675c8b1db3b645e31f0e"}, + {file = "coverage-7.5.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca498687ca46a62ae590253fba634a1fe9836bc56f626852fb2720f334c9e4e5"}, + {file = "coverage-7.5.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cdcbc320b14c3e5877ee79e649677cb7d89ef588852e9583e6b24c2e5072661"}, + {file = "coverage-7.5.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:57e0204b5b745594e5bc14b9b50006da722827f0b8c776949f1135677e88d0b8"}, + {file = "coverage-7.5.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fe7502616b67b234482c3ce276ff26f39ffe88adca2acf0261df4b8454668b4"}, + {file = "coverage-7.5.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9e78295f4144f9dacfed4f92935fbe1780021247c2fabf73a819b17f0ccfff8d"}, + {file = "coverage-7.5.1-cp38-cp38-win32.whl", hash = "sha256:1434e088b41594baa71188a17533083eabf5609e8e72f16ce8c186001e6b8c41"}, + {file = "coverage-7.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:0646599e9b139988b63704d704af8e8df7fa4cbc4a1f33df69d97f36cb0a38de"}, + {file = "coverage-7.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4cc37def103a2725bc672f84bd939a6fe4522310503207aae4d56351644682f1"}, + {file = "coverage-7.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc0b4d8bfeabd25ea75e94632f5b6e047eef8adaed0c2161ada1e922e7f7cece"}, + {file = "coverage-7.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d0a0f5e06881ecedfe6f3dd2f56dcb057b6dbeb3327fd32d4b12854df36bf26"}, + {file = "coverage-7.5.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9735317685ba6ec7e3754798c8871c2f49aa5e687cc794a0b1d284b2389d1bd5"}, + {file = "coverage-7.5.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d21918e9ef11edf36764b93101e2ae8cc82aa5efdc7c5a4e9c6c35a48496d601"}, + {file = "coverage-7.5.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c3e757949f268364b96ca894b4c342b41dc6f8f8b66c37878aacef5930db61be"}, + {file = "coverage-7.5.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:79afb6197e2f7f60c4824dd4b2d4c2ec5801ceb6ba9ce5d2c3080e5660d51a4f"}, + {file = "coverage-7.5.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d1d0d98d95dd18fe29dc66808e1accf59f037d5716f86a501fc0256455219668"}, + {file = "coverage-7.5.1-cp39-cp39-win32.whl", hash = "sha256:1cc0fe9b0b3a8364093c53b0b4c0c2dd4bb23acbec4c9240b5f284095ccf7981"}, + {file = "coverage-7.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:dde0070c40ea8bb3641e811c1cfbf18e265d024deff6de52c5950677a8fb1e0f"}, + {file = "coverage-7.5.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:6537e7c10cc47c595828b8a8be04c72144725c383c4702703ff4e42e44577312"}, + {file = "coverage-7.5.1.tar.gz", hash = "sha256:54de9ef3a9da981f7af93eafde4ede199e0846cd819eb27c88e2b712aae9708c"}, ] [package.extras] @@ -475,43 +487,43 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "42.0.4" +version = "42.0.5" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-42.0.4-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:ffc73996c4fca3d2b6c1c8c12bfd3ad00def8621da24f547626bf06441400449"}, - {file = "cryptography-42.0.4-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:db4b65b02f59035037fde0998974d84244a64c3265bdef32a827ab9b63d61b18"}, - {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad9c385ba8ee025bb0d856714f71d7840020fe176ae0229de618f14dae7a6e2"}, - {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69b22ab6506a3fe483d67d1ed878e1602bdd5912a134e6202c1ec672233241c1"}, - {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e09469a2cec88fb7b078e16d4adec594414397e8879a4341c6ace96013463d5b"}, - {file = "cryptography-42.0.4-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3e970a2119507d0b104f0a8e281521ad28fc26f2820687b3436b8c9a5fcf20d1"}, - {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:e53dc41cda40b248ebc40b83b31516487f7db95ab8ceac1f042626bc43a2f992"}, - {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:c3a5cbc620e1e17009f30dd34cb0d85c987afd21c41a74352d1719be33380885"}, - {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6bfadd884e7280df24d26f2186e4e07556a05d37393b0f220a840b083dc6a824"}, - {file = "cryptography-42.0.4-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:01911714117642a3f1792c7f376db572aadadbafcd8d75bb527166009c9f1d1b"}, - {file = "cryptography-42.0.4-cp37-abi3-win32.whl", hash = "sha256:fb0cef872d8193e487fc6bdb08559c3aa41b659a7d9be48b2e10747f47863925"}, - {file = "cryptography-42.0.4-cp37-abi3-win_amd64.whl", hash = "sha256:c1f25b252d2c87088abc8bbc4f1ecbf7c919e05508a7e8628e6875c40bc70923"}, - {file = "cryptography-42.0.4-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:15a1fb843c48b4a604663fa30af60818cd28f895572386e5f9b8a665874c26e7"}, - {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1327f280c824ff7885bdeef8578f74690e9079267c1c8bd7dc5cc5aa065ae52"}, - {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ffb03d419edcab93b4b19c22ee80c007fb2d708429cecebf1dd3258956a563a"}, - {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:1df6fcbf60560d2113b5ed90f072dc0b108d64750d4cbd46a21ec882c7aefce9"}, - {file = "cryptography-42.0.4-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:44a64043f743485925d3bcac548d05df0f9bb445c5fcca6681889c7c3ab12764"}, - {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:3c6048f217533d89f2f8f4f0fe3044bf0b2090453b7b73d0b77db47b80af8dff"}, - {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6d0fbe73728c44ca3a241eff9aefe6496ab2656d6e7a4ea2459865f2e8613257"}, - {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:887623fe0d70f48ab3f5e4dbf234986b1329a64c066d719432d0698522749929"}, - {file = "cryptography-42.0.4-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:ce8613beaffc7c14f091497346ef117c1798c202b01153a8cc7b8e2ebaaf41c0"}, - {file = "cryptography-42.0.4-cp39-abi3-win32.whl", hash = "sha256:810bcf151caefc03e51a3d61e53335cd5c7316c0a105cc695f0959f2c638b129"}, - {file = "cryptography-42.0.4-cp39-abi3-win_amd64.whl", hash = "sha256:a0298bdc6e98ca21382afe914c642620370ce0470a01e1bef6dd9b5354c36854"}, - {file = "cryptography-42.0.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5f8907fcf57392cd917892ae83708761c6ff3c37a8e835d7246ff0ad251d9298"}, - {file = "cryptography-42.0.4-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:12d341bd42cdb7d4937b0cabbdf2a94f949413ac4504904d0cdbdce4a22cbf88"}, - {file = "cryptography-42.0.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1cdcdbd117681c88d717437ada72bdd5be9de117f96e3f4d50dab3f59fd9ab20"}, - {file = "cryptography-42.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0e89f7b84f421c56e7ff69f11c441ebda73b8a8e6488d322ef71746224c20fce"}, - {file = "cryptography-42.0.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f1e85a178384bf19e36779d91ff35c7617c885da487d689b05c1366f9933ad74"}, - {file = "cryptography-42.0.4-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d2a27aca5597c8a71abbe10209184e1a8e91c1fd470b5070a2ea60cafec35bcd"}, - {file = "cryptography-42.0.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4e36685cb634af55e0677d435d425043967ac2f3790ec652b2b88ad03b85c27b"}, - {file = "cryptography-42.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f47be41843200f7faec0683ad751e5ef11b9a56a220d57f300376cd8aba81660"}, - {file = "cryptography-42.0.4.tar.gz", hash = "sha256:831a4b37accef30cccd34fcb916a5d7b5be3cbbe27268a02832c3e450aea39cb"}, + {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:a30596bae9403a342c978fb47d9b0ee277699fa53bbafad14706af51fe543d16"}, + {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b7ffe927ee6531c78f81aa17e684e2ff617daeba7f189f911065b2ea2d526dec"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2424ff4c4ac7f6b8177b53c17ed5d8fa74ae5955656867f5a8affaca36a27abb"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:329906dcc7b20ff3cad13c069a78124ed8247adcac44b10bea1130e36caae0b4"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:b03c2ae5d2f0fc05f9a2c0c997e1bc18c8229f392234e8a0194f202169ccd278"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f8837fe1d6ac4a8052a9a8ddab256bc006242696f03368a4009be7ee3075cdb7"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:0270572b8bd2c833c3981724b8ee9747b3ec96f699a9665470018594301439ee"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:b8cac287fafc4ad485b8a9b67d0ee80c66bf3574f655d3b97ef2e1082360faf1"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:16a48c23a62a2f4a285699dba2e4ff2d1cff3115b9df052cdd976a18856d8e3d"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2bce03af1ce5a5567ab89bd90d11e7bbdff56b8af3acbbec1faded8f44cb06da"}, + {file = "cryptography-42.0.5-cp37-abi3-win32.whl", hash = "sha256:b6cd2203306b63e41acdf39aa93b86fb566049aeb6dc489b70e34bcd07adca74"}, + {file = "cryptography-42.0.5-cp37-abi3-win_amd64.whl", hash = "sha256:98d8dc6d012b82287f2c3d26ce1d2dd130ec200c8679b6213b3c73c08b2b7940"}, + {file = "cryptography-42.0.5-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:5e6275c09d2badf57aea3afa80d975444f4be8d3bc58f7f80d2a484c6f9485c8"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4985a790f921508f36f81831817cbc03b102d643b5fcb81cd33df3fa291a1a1"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cde5f38e614f55e28d831754e8a3bacf9ace5d1566235e39d91b35502d6936e"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7367d7b2eca6513681127ebad53b2582911d1736dc2ffc19f2c3ae49997496bc"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cd2030f6650c089aeb304cf093f3244d34745ce0cfcc39f20c6fbfe030102e2a"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a2913c5375154b6ef2e91c10b5720ea6e21007412f6437504ffea2109b5a33d7"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:c41fb5e6a5fe9ebcd58ca3abfeb51dffb5d83d6775405305bfa8715b76521922"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3eaafe47ec0d0ffcc9349e1708be2aaea4c6dd4978d76bf6eb0cb2c13636c6fc"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1b95b98b0d2af784078fa69f637135e3c317091b615cd0905f8b8a087e86fa30"}, + {file = "cryptography-42.0.5-cp39-abi3-win32.whl", hash = "sha256:1f71c10d1e88467126f0efd484bd44bca5e14c664ec2ede64c32f20875c0d413"}, + {file = "cryptography-42.0.5-cp39-abi3-win_amd64.whl", hash = "sha256:a011a644f6d7d03736214d38832e030d8268bcff4a41f728e6030325fea3e400"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9481ffe3cf013b71b2428b905c4f7a9a4f76ec03065b05ff499bb5682a8d9ad8"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ba334e6e4b1d92442b75ddacc615c5476d4ad55cc29b15d590cc6b86efa487e2"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ba3e4a42397c25b7ff88cdec6e2a16c2be18720f317506ee25210f6d31925f9c"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:111a0d8553afcf8eb02a4fea6ca4f59d48ddb34497aa8706a6cf536f1a5ec576"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cd65d75953847815962c84a4654a84850b2bb4aed3f26fadcc1c13892e1e29f6"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e807b3188f9eb0eaa7bbb579b462c5ace579f1cedb28107ce8b48a9f7ad3679e"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f12764b8fffc7a123f641d7d049d382b73f96a34117e0b637b80643169cec8ac"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:37dd623507659e08be98eec89323469e8c7b4c1407c85112634ae3dbdb926fdd"}, + {file = "cryptography-42.0.5.tar.gz", hash = "sha256:6fe07eec95dfd477eb9530aef5bead34fec819b3aaf6c5bd6d20565da607bfe1"}, ] [package.dependencies] @@ -529,29 +541,33 @@ test-randomorder = ["pytest-randomly"] [[package]] name = "debugpy" -version = "1.8.0" +version = "1.8.1" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" files = [ - {file = "debugpy-1.8.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:7fb95ca78f7ac43393cd0e0f2b6deda438ec7c5e47fa5d38553340897d2fbdfb"}, - {file = "debugpy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef9ab7df0b9a42ed9c878afd3eaaff471fce3fa73df96022e1f5c9f8f8c87ada"}, - {file = "debugpy-1.8.0-cp310-cp310-win32.whl", hash = "sha256:a8b7a2fd27cd9f3553ac112f356ad4ca93338feadd8910277aff71ab24d8775f"}, - {file = "debugpy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:5d9de202f5d42e62f932507ee8b21e30d49aae7e46d5b1dd5c908db1d7068637"}, - {file = "debugpy-1.8.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:ef54404365fae8d45cf450d0544ee40cefbcb9cb85ea7afe89a963c27028261e"}, - {file = "debugpy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60009b132c91951354f54363f8ebdf7457aeb150e84abba5ae251b8e9f29a8a6"}, - {file = "debugpy-1.8.0-cp311-cp311-win32.whl", hash = "sha256:8cd0197141eb9e8a4566794550cfdcdb8b3db0818bdf8c49a8e8f8053e56e38b"}, - {file = "debugpy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:a64093656c4c64dc6a438e11d59369875d200bd5abb8f9b26c1f5f723622e153"}, - {file = "debugpy-1.8.0-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:b05a6b503ed520ad58c8dc682749113d2fd9f41ffd45daec16e558ca884008cd"}, - {file = "debugpy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c6fb41c98ec51dd010d7ed650accfd07a87fe5e93eca9d5f584d0578f28f35f"}, - {file = "debugpy-1.8.0-cp38-cp38-win32.whl", hash = "sha256:46ab6780159eeabb43c1495d9c84cf85d62975e48b6ec21ee10c95767c0590aa"}, - {file = "debugpy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:bdc5ef99d14b9c0fcb35351b4fbfc06ac0ee576aeab6b2511702e5a648a2e595"}, - {file = "debugpy-1.8.0-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:61eab4a4c8b6125d41a34bad4e5fe3d2cc145caecd63c3fe953be4cc53e65bf8"}, - {file = "debugpy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:125b9a637e013f9faac0a3d6a82bd17c8b5d2c875fb6b7e2772c5aba6d082332"}, - {file = "debugpy-1.8.0-cp39-cp39-win32.whl", hash = "sha256:57161629133113c97b387382045649a2b985a348f0c9366e22217c87b68b73c6"}, - {file = "debugpy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:e3412f9faa9ade82aa64a50b602544efcba848c91384e9f93497a458767e6926"}, - {file = "debugpy-1.8.0-py2.py3-none-any.whl", hash = "sha256:9c9b0ac1ce2a42888199df1a1906e45e6f3c9555497643a85e0bf2406e3ffbc4"}, - {file = "debugpy-1.8.0.zip", hash = "sha256:12af2c55b419521e33d5fb21bd022df0b5eb267c3e178f1d374a63a2a6bdccd0"}, + {file = "debugpy-1.8.1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:3bda0f1e943d386cc7a0e71bfa59f4137909e2ed947fb3946c506e113000f741"}, + {file = "debugpy-1.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dda73bf69ea479c8577a0448f8c707691152e6c4de7f0c4dec5a4bc11dee516e"}, + {file = "debugpy-1.8.1-cp310-cp310-win32.whl", hash = "sha256:3a79c6f62adef994b2dbe9fc2cc9cc3864a23575b6e387339ab739873bea53d0"}, + {file = "debugpy-1.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:7eb7bd2b56ea3bedb009616d9e2f64aab8fc7000d481faec3cd26c98a964bcdd"}, + {file = "debugpy-1.8.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:016a9fcfc2c6b57f939673c874310d8581d51a0fe0858e7fac4e240c5eb743cb"}, + {file = "debugpy-1.8.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd97ed11a4c7f6d042d320ce03d83b20c3fb40da892f994bc041bbc415d7a099"}, + {file = "debugpy-1.8.1-cp311-cp311-win32.whl", hash = "sha256:0de56aba8249c28a300bdb0672a9b94785074eb82eb672db66c8144fff673146"}, + {file = "debugpy-1.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:1a9fe0829c2b854757b4fd0a338d93bc17249a3bf69ecf765c61d4c522bb92a8"}, + {file = "debugpy-1.8.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3ebb70ba1a6524d19fa7bb122f44b74170c447d5746a503e36adc244a20ac539"}, + {file = "debugpy-1.8.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2e658a9630f27534e63922ebf655a6ab60c370f4d2fc5c02a5b19baf4410ace"}, + {file = "debugpy-1.8.1-cp312-cp312-win32.whl", hash = "sha256:caad2846e21188797a1f17fc09c31b84c7c3c23baf2516fed5b40b378515bbf0"}, + {file = "debugpy-1.8.1-cp312-cp312-win_amd64.whl", hash = "sha256:edcc9f58ec0fd121a25bc950d4578df47428d72e1a0d66c07403b04eb93bcf98"}, + {file = "debugpy-1.8.1-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:7a3afa222f6fd3d9dfecd52729bc2e12c93e22a7491405a0ecbf9e1d32d45b39"}, + {file = "debugpy-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d915a18f0597ef685e88bb35e5d7ab968964b7befefe1aaea1eb5b2640b586c7"}, + {file = "debugpy-1.8.1-cp38-cp38-win32.whl", hash = "sha256:92116039b5500633cc8d44ecc187abe2dfa9b90f7a82bbf81d079fcdd506bae9"}, + {file = "debugpy-1.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:e38beb7992b5afd9d5244e96ad5fa9135e94993b0c551ceebf3fe1a5d9beb234"}, + {file = "debugpy-1.8.1-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:bfb20cb57486c8e4793d41996652e5a6a885b4d9175dd369045dad59eaacea42"}, + {file = "debugpy-1.8.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efd3fdd3f67a7e576dd869c184c5dd71d9aaa36ded271939da352880c012e703"}, + {file = "debugpy-1.8.1-cp39-cp39-win32.whl", hash = "sha256:58911e8521ca0c785ac7a0539f1e77e0ce2df753f786188f382229278b4cdf23"}, + {file = "debugpy-1.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:6df9aa9599eb05ca179fb0b810282255202a66835c6efb1d112d21ecb830ddd3"}, + {file = "debugpy-1.8.1-py2.py3-none-any.whl", hash = "sha256:28acbe2241222b87e255260c76741e1fbf04fdc3b6d094fcf57b6c6f75ce1242"}, + {file = "debugpy-1.8.1.zip", hash = "sha256:f696d6be15be87aef621917585f9bb94b1dc9e8aced570db1b8a6fc14e8f9b42"}, ] [[package]] @@ -576,13 +592,13 @@ wmi = ["wmi (>=1.5.1)"] [[package]] name = "ecdsa" -version = "0.18.0" +version = "0.19.0" description = "ECDSA cryptographic signature library (pure python)" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.6" files = [ - {file = "ecdsa-0.18.0-py2.py3-none-any.whl", hash = "sha256:80600258e7ed2f16b9aa1d7c295bd70194109ad5a30fdee0eaeefef1d4c559dd"}, - {file = "ecdsa-0.18.0.tar.gz", hash = "sha256:190348041559e21b22a1d65cee485282ca11a6f81d503fddb84d5017e9ed1e49"}, + {file = "ecdsa-0.19.0-py2.py3-none-any.whl", hash = "sha256:2cea9b88407fdac7bbeca0833b189e4c9c53f2ef1e1eaa29f6224dbc809b707a"}, + {file = "ecdsa-0.19.0.tar.gz", hash = "sha256:60eaad1199659900dd0af521ed462b793bbdf867432b3948e87416ae4caf6bf8"}, ] [package.dependencies] @@ -594,40 +610,41 @@ gmpy2 = ["gmpy2"] [[package]] name = "esptool" -version = "4.6.2" +version = "4.7.0" description = "A serial utility to communicate & flash code to Espressif chips." optional = false python-versions = ">=3.7" files = [ - {file = "esptool-4.6.2.tar.gz", hash = "sha256:549ef93eef42ee7e9462ce5a53c16df7a0c71d91b3f77e19ec15749804cdf300"}, + {file = "esptool-4.7.0.tar.gz", hash = "sha256:01454e69e1ef3601215db83ff2cb1fc79ece67d24b0e5d43d451b410447c4893"}, ] [package.dependencies] bitstring = ">=3.1.6" cryptography = ">=2.1.4" ecdsa = ">=0.16.0" +intelhex = "*" pyserial = ">=3.0" PyYAML = ">=5.1" reedsolo = ">=1.5.3,<1.8" [package.extras] -dev = ["black", "coverage (>=6.0,<7.0)", "flake8 (>=3.2.0)", "flake8-gl-codeclimate", "flake8-import-order", "pre-commit", "pyelftools", "pytest", "pytest-rerunfailures"] +dev = ["black", "commitizen", "coverage (>=6.0,<7.0)", "flake8 (>=3.2.0)", "flake8-gl-codeclimate", "flake8-import-order", "pre-commit", "pyelftools", "pytest", "pytest-rerunfailures", "requests"] hsm = ["python-pkcs11"] [[package]] name = "fastapi" -version = "0.109.1" +version = "0.109.2" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" optional = false python-versions = ">=3.8" files = [ - {file = "fastapi-0.109.1-py3-none-any.whl", hash = "sha256:510042044906b17b6d9149135d90886ade170bf615efcfb5533f568ae6d88534"}, - {file = "fastapi-0.109.1.tar.gz", hash = "sha256:5402389843a3561918634eb327e86b9ae98645a9e7696bede9074449c48d610a"}, + {file = "fastapi-0.109.2-py3-none-any.whl", hash = "sha256:2c9bab24667293b501cad8dd388c05240c850b58ec5876ee3283c47d6e1e3a4d"}, + {file = "fastapi-0.109.2.tar.gz", hash = "sha256:f3817eac96fe4f65a2ebb4baa000f394e55f5fccdaf7f75250804bc58f354f73"}, ] [package.dependencies] pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" -starlette = ">=0.35.0,<0.36.0" +starlette = ">=0.36.3,<0.37.0" typing-extensions = ">=4.8.0" [package.extras] @@ -635,13 +652,13 @@ all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)" [[package]] name = "fastapi-mqtt" -version = "2.0.0" +version = "2.1.1" description = "fastapi-mqtt is extension for MQTT protocol" optional = false python-versions = ">=3.7,<4.0" files = [ - {file = "fastapi_mqtt-2.0.0-py3-none-any.whl", hash = "sha256:99fa73e69476b67c4fa039ca4f66d0901d1898d75ccfafcccf44d56d1010f4dc"}, - {file = "fastapi_mqtt-2.0.0.tar.gz", hash = "sha256:13cfe3d7a8fbcb97b5db65263a0f09ac6e755198c811c7d39884dae1dc935955"}, + {file = "fastapi_mqtt-2.1.1-py3-none-any.whl", hash = "sha256:3f17c77bc158636605953d86e69da1a8a5f767ce837412fef2b6cbea499e26fb"}, + {file = "fastapi_mqtt-2.1.1.tar.gz", hash = "sha256:9bcf0b616135d89839d4d02f604a2294230af2debc87f83c1174b6b44c8dc454"}, ] [package.dependencies] @@ -652,19 +669,19 @@ uvicorn = ">=0.19.0" [[package]] name = "flake8" -version = "6.1.0" +version = "7.0.0" description = "the modular source code checker: pep8 pyflakes and co" optional = false python-versions = ">=3.8.1" files = [ - {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"}, - {file = "flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"}, + {file = "flake8-7.0.0-py2.py3-none-any.whl", hash = "sha256:a6dfbb75e03252917f2473ea9653f7cd799c3064e54d4c8140044c5c065f53c3"}, + {file = "flake8-7.0.0.tar.gz", hash = "sha256:33f96621059e65eec474169085dc92bf26e7b2d47366b70be2f67ab80dc25132"}, ] [package.dependencies] mccabe = ">=0.7.0,<0.8.0" pycodestyle = ">=2.11.0,<2.12.0" -pyflakes = ">=3.1.0,<3.2.0" +pyflakes = ">=3.2.0,<3.3.0" [[package]] name = "flake8-pyproject" @@ -684,26 +701,27 @@ dev = ["pyTest", "pyTest-cov"] [[package]] name = "flake8-quotes" -version = "3.3.2" +version = "3.4.0" description = "Flake8 lint for quotes." optional = false python-versions = "*" files = [ - {file = "flake8-quotes-3.3.2.tar.gz", hash = "sha256:6e26892b632dacba517bf27219c459a8396dcfac0f5e8204904c5a4ba9b480e1"}, + {file = "flake8-quotes-3.4.0.tar.gz", hash = "sha256:aad8492fb710a2d3eabe68c5f86a1428de650c8484127e14c43d0504ba30276c"}, ] [package.dependencies] flake8 = "*" +setuptools = "*" [[package]] name = "gmqtt" -version = "0.6.12" +version = "0.6.16" description = "Client for MQTT protocol" optional = false python-versions = ">=3.5" files = [ - {file = "gmqtt-0.6.12-py3-none-any.whl", hash = "sha256:e8acad561d52734ae622c543042836fe7a9bd20a3894378794ec763be4901a39"}, - {file = "gmqtt-0.6.12.tar.gz", hash = "sha256:7df03792343089ae62dc7cd6f8be356861c4fc68768cefa22f3d8de5e7e5be48"}, + {file = "gmqtt-0.6.16-py3-none-any.whl", hash = "sha256:577f9170a88c98c0b16e9ca5cc895d5a3ee82615ace628757454500e565bd12f"}, + {file = "gmqtt-0.6.16.tar.gz", hash = "sha256:ddd1fdc1c6ae604e74377cf70e99f067e579c03c1c71a6acd494e199e93b7fa4"}, ] [package.extras] @@ -711,135 +729,127 @@ test = ["atomicwrites (>=1.3.0)", "attrs (>=19.1.0)", "codecov (>=2.0.15)", "cov [[package]] name = "grpcio" -version = "1.59.3" +version = "1.63.0" description = "HTTP/2-based RPC framework" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "grpcio-1.59.3-cp310-cp310-linux_armv7l.whl", hash = "sha256:aca028a6c7806e5b61e5f9f4232432c52856f7fcb98e330b20b6bc95d657bdcc"}, - {file = "grpcio-1.59.3-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:19ad26a7967f7999c8960d2b9fe382dae74c55b0c508c613a6c2ba21cddf2354"}, - {file = "grpcio-1.59.3-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:72b71dad2a3d1650e69ad42a5c4edbc59ee017f08c32c95694172bc501def23c"}, - {file = "grpcio-1.59.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c0f0a11d82d0253656cc42e04b6a149521e02e755fe2e4edd21123de610fd1d4"}, - {file = "grpcio-1.59.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60cddafb70f9a2c81ba251b53b4007e07cca7389e704f86266e22c4bffd8bf1d"}, - {file = "grpcio-1.59.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6c75a1fa0e677c1d2b6d4196ad395a5c381dfb8385f07ed034ef667cdcdbcc25"}, - {file = "grpcio-1.59.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e1d8e01438d5964a11167eec1edb5f85ed8e475648f36c834ed5db4ffba24ac8"}, - {file = "grpcio-1.59.3-cp310-cp310-win32.whl", hash = "sha256:c4b0076f0bf29ee62335b055a9599f52000b7941f577daa001c7ef961a1fbeab"}, - {file = "grpcio-1.59.3-cp310-cp310-win_amd64.whl", hash = "sha256:b1f00a3e6e0c3dccccffb5579fc76ebfe4eb40405ba308505b41ef92f747746a"}, - {file = "grpcio-1.59.3-cp311-cp311-linux_armv7l.whl", hash = "sha256:3996aaa21231451161dc29df6a43fcaa8b332042b6150482c119a678d007dd86"}, - {file = "grpcio-1.59.3-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:cb4e9cbd9b7388fcb06412da9f188c7803742d06d6f626304eb838d1707ec7e3"}, - {file = "grpcio-1.59.3-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:8022ca303d6c694a0d7acfb2b472add920217618d3a99eb4b14edc7c6a7e8fcf"}, - {file = "grpcio-1.59.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b36683fad5664283755a7f4e2e804e243633634e93cd798a46247b8e54e3cb0d"}, - {file = "grpcio-1.59.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8239b853226e4824e769517e1b5232e7c4dda3815b200534500338960fcc6118"}, - {file = "grpcio-1.59.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:0511af8653fbda489ff11d542a08505d56023e63cafbda60e6e00d4e0bae86ea"}, - {file = "grpcio-1.59.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e78dc982bda74cef2ddfce1c91d29b96864c4c680c634e279ed204d51e227473"}, - {file = "grpcio-1.59.3-cp311-cp311-win32.whl", hash = "sha256:6a5c3a96405966c023e139c3bcccb2c7c776a6f256ac6d70f8558c9041bdccc3"}, - {file = "grpcio-1.59.3-cp311-cp311-win_amd64.whl", hash = "sha256:ed26826ee423b11477297b187371cdf4fa1eca874eb1156422ef3c9a60590dd9"}, - {file = "grpcio-1.59.3-cp312-cp312-linux_armv7l.whl", hash = "sha256:45dddc5cb5227d30fa43652d8872dc87f086d81ab4b500be99413bad0ae198d7"}, - {file = "grpcio-1.59.3-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:1736496d74682e53dd0907fd515f2694d8e6a96c9a359b4080b2504bf2b2d91b"}, - {file = "grpcio-1.59.3-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:ddbd1a16138e52e66229047624de364f88a948a4d92ba20e4e25ad7d22eef025"}, - {file = "grpcio-1.59.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcfa56f8d031ffda902c258c84c4b88707f3a4be4827b4e3ab8ec7c24676320d"}, - {file = "grpcio-1.59.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2eb8f0c7c0c62f7a547ad7a91ba627a5aa32a5ae8d930783f7ee61680d7eb8d"}, - {file = "grpcio-1.59.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8d993399cc65e3a34f8fd48dd9ad7a376734564b822e0160dd18b3d00c1a33f9"}, - {file = "grpcio-1.59.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c0bd141f4f41907eb90bda74d969c3cb21c1c62779419782a5b3f5e4b5835718"}, - {file = "grpcio-1.59.3-cp312-cp312-win32.whl", hash = "sha256:33b8fd65d4e97efa62baec6171ce51f9cf68f3a8ba9f866f4abc9d62b5c97b79"}, - {file = "grpcio-1.59.3-cp312-cp312-win_amd64.whl", hash = "sha256:0e735ed002f50d4f3cb9ecfe8ac82403f5d842d274c92d99db64cfc998515e07"}, - {file = "grpcio-1.59.3-cp37-cp37m-linux_armv7l.whl", hash = "sha256:ea40ce4404e7cca0724c91a7404da410f0144148fdd58402a5942971e3469b94"}, - {file = "grpcio-1.59.3-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:83113bcc393477b6f7342b9f48e8a054330c895205517edc66789ceea0796b53"}, - {file = "grpcio-1.59.3-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:73afbac602b8f1212a50088193601f869b5073efa9855b3e51aaaec97848fc8a"}, - {file = "grpcio-1.59.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:575d61de1950b0b0699917b686b1ca108690702fcc2df127b8c9c9320f93e069"}, - {file = "grpcio-1.59.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cd76057b5c9a4d68814610ef9226925f94c1231bbe533fdf96f6181f7d2ff9e"}, - {file = "grpcio-1.59.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:95d6fd804c81efe4879e38bfd84d2b26e339a0a9b797e7615e884ef4686eb47b"}, - {file = "grpcio-1.59.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0d42048b8a3286ea4134faddf1f9a59cf98192b94aaa10d910a25613c5eb5bfb"}, - {file = "grpcio-1.59.3-cp37-cp37m-win_amd64.whl", hash = "sha256:4619fea15c64bcdd9d447cdbdde40e3d5f1da3a2e8ae84103d94a9c1df210d7e"}, - {file = "grpcio-1.59.3-cp38-cp38-linux_armv7l.whl", hash = "sha256:95b5506e70284ac03b2005dd9ffcb6708c9ae660669376f0192a710687a22556"}, - {file = "grpcio-1.59.3-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:9e17660947660ccfce56c7869032910c179a5328a77b73b37305cd1ee9301c2e"}, - {file = "grpcio-1.59.3-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:00912ce19914d038851be5cd380d94a03f9d195643c28e3ad03d355cc02ce7e8"}, - {file = "grpcio-1.59.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e58b3cadaa3c90f1efca26ba33e0d408b35b497307027d3d707e4bcd8de862a6"}, - {file = "grpcio-1.59.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d787ecadea865bdf78f6679f6f5bf4b984f18f659257ba612979df97a298b3c3"}, - {file = "grpcio-1.59.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0814942ba1bba269db4e760a34388640c601dece525c6a01f3b4ff030cc0db69"}, - {file = "grpcio-1.59.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fb111aa99d3180c361a35b5ae1e2c63750220c584a1344229abc139d5c891881"}, - {file = "grpcio-1.59.3-cp38-cp38-win32.whl", hash = "sha256:eb8ba504c726befe40a356ecbe63c6c3c64c9a439b3164f5a718ec53c9874da0"}, - {file = "grpcio-1.59.3-cp38-cp38-win_amd64.whl", hash = "sha256:cdbc6b32fadab9bebc6f49d3e7ec4c70983c71e965497adab7f87de218e84391"}, - {file = "grpcio-1.59.3-cp39-cp39-linux_armv7l.whl", hash = "sha256:c82ca1e4be24a98a253d6dbaa216542e4163f33f38163fc77964b0f0d255b552"}, - {file = "grpcio-1.59.3-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:36636babfda14f9e9687f28d5b66d349cf88c1301154dc71c6513de2b6c88c59"}, - {file = "grpcio-1.59.3-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:5f9b2e591da751ac7fdd316cc25afafb7a626dededa9b414f90faad7f3ccebdb"}, - {file = "grpcio-1.59.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a93a82876a4926bf451db82ceb725bd87f42292bacc94586045261f501a86994"}, - {file = "grpcio-1.59.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce31fa0bfdd1f2bb15b657c16105c8652186eab304eb512e6ae3b99b2fdd7d13"}, - {file = "grpcio-1.59.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:16da0e40573962dab6cba16bec31f25a4f468e6d05b658e589090fe103b03e3d"}, - {file = "grpcio-1.59.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d1d1a17372fd425addd5812049fa7374008ffe689585f27f802d0935522cf4b7"}, - {file = "grpcio-1.59.3-cp39-cp39-win32.whl", hash = "sha256:52cc38a7241b5f7b4a91aaf9000fdd38e26bb00d5e8a71665ce40cfcee716281"}, - {file = "grpcio-1.59.3-cp39-cp39-win_amd64.whl", hash = "sha256:b491e5bbcad3020a96842040421e508780cade35baba30f402df9d321d1c423e"}, - {file = "grpcio-1.59.3.tar.gz", hash = "sha256:7800f99568a74a06ebdccd419dd1b6e639b477dcaf6da77ea702f8fb14ce5f80"}, + {file = "grpcio-1.63.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:2e93aca840c29d4ab5db93f94ed0a0ca899e241f2e8aec6334ab3575dc46125c"}, + {file = "grpcio-1.63.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:91b73d3f1340fefa1e1716c8c1ec9930c676d6b10a3513ab6c26004cb02d8b3f"}, + {file = "grpcio-1.63.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:b3afbd9d6827fa6f475a4f91db55e441113f6d3eb9b7ebb8fb806e5bb6d6bd0d"}, + {file = "grpcio-1.63.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f3f6883ce54a7a5f47db43289a0a4c776487912de1a0e2cc83fdaec9685cc9f"}, + {file = "grpcio-1.63.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf8dae9cc0412cb86c8de5a8f3be395c5119a370f3ce2e69c8b7d46bb9872c8d"}, + {file = "grpcio-1.63.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:08e1559fd3b3b4468486b26b0af64a3904a8dbc78d8d936af9c1cf9636eb3e8b"}, + {file = "grpcio-1.63.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5c039ef01516039fa39da8a8a43a95b64e288f79f42a17e6c2904a02a319b357"}, + {file = "grpcio-1.63.0-cp310-cp310-win32.whl", hash = "sha256:ad2ac8903b2eae071055a927ef74121ed52d69468e91d9bcbd028bd0e554be6d"}, + {file = "grpcio-1.63.0-cp310-cp310-win_amd64.whl", hash = "sha256:b2e44f59316716532a993ca2966636df6fbe7be4ab6f099de6815570ebe4383a"}, + {file = "grpcio-1.63.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:f28f8b2db7b86c77916829d64ab21ff49a9d8289ea1564a2b2a3a8ed9ffcccd3"}, + {file = "grpcio-1.63.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:65bf975639a1f93bee63ca60d2e4951f1b543f498d581869922910a476ead2f5"}, + {file = "grpcio-1.63.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:b5194775fec7dc3dbd6a935102bb156cd2c35efe1685b0a46c67b927c74f0cfb"}, + {file = "grpcio-1.63.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4cbb2100ee46d024c45920d16e888ee5d3cf47c66e316210bc236d5bebc42b3"}, + {file = "grpcio-1.63.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ff737cf29b5b801619f10e59b581869e32f400159e8b12d7a97e7e3bdeee6a2"}, + {file = "grpcio-1.63.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cd1e68776262dd44dedd7381b1a0ad09d9930ffb405f737d64f505eb7f77d6c7"}, + {file = "grpcio-1.63.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:93f45f27f516548e23e4ec3fbab21b060416007dbe768a111fc4611464cc773f"}, + {file = "grpcio-1.63.0-cp311-cp311-win32.whl", hash = "sha256:878b1d88d0137df60e6b09b74cdb73db123f9579232c8456f53e9abc4f62eb3c"}, + {file = "grpcio-1.63.0-cp311-cp311-win_amd64.whl", hash = "sha256:756fed02dacd24e8f488f295a913f250b56b98fb793f41d5b2de6c44fb762434"}, + {file = "grpcio-1.63.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:93a46794cc96c3a674cdfb59ef9ce84d46185fe9421baf2268ccb556f8f81f57"}, + {file = "grpcio-1.63.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a7b19dfc74d0be7032ca1eda0ed545e582ee46cd65c162f9e9fc6b26ef827dc6"}, + {file = "grpcio-1.63.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:8064d986d3a64ba21e498b9a376cbc5d6ab2e8ab0e288d39f266f0fca169b90d"}, + {file = "grpcio-1.63.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:219bb1848cd2c90348c79ed0a6b0ea51866bc7e72fa6e205e459fedab5770172"}, + {file = "grpcio-1.63.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2d60cd1d58817bc5985fae6168d8b5655c4981d448d0f5b6194bbcc038090d2"}, + {file = "grpcio-1.63.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9e350cb096e5c67832e9b6e018cf8a0d2a53b2a958f6251615173165269a91b0"}, + {file = "grpcio-1.63.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:56cdf96ff82e3cc90dbe8bac260352993f23e8e256e063c327b6cf9c88daf7a9"}, + {file = "grpcio-1.63.0-cp312-cp312-win32.whl", hash = "sha256:3a6d1f9ea965e750db7b4ee6f9fdef5fdf135abe8a249e75d84b0a3e0c668a1b"}, + {file = "grpcio-1.63.0-cp312-cp312-win_amd64.whl", hash = "sha256:d2497769895bb03efe3187fb1888fc20e98a5f18b3d14b606167dacda5789434"}, + {file = "grpcio-1.63.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:fdf348ae69c6ff484402cfdb14e18c1b0054ac2420079d575c53a60b9b2853ae"}, + {file = "grpcio-1.63.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a3abfe0b0f6798dedd2e9e92e881d9acd0fdb62ae27dcbbfa7654a57e24060c0"}, + {file = "grpcio-1.63.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:6ef0ad92873672a2a3767cb827b64741c363ebaa27e7f21659e4e31f4d750280"}, + {file = "grpcio-1.63.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b416252ac5588d9dfb8a30a191451adbf534e9ce5f56bb02cd193f12d8845b7f"}, + {file = "grpcio-1.63.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3b77eaefc74d7eb861d3ffbdf91b50a1bb1639514ebe764c47773b833fa2d91"}, + {file = "grpcio-1.63.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b005292369d9c1f80bf70c1db1c17c6c342da7576f1c689e8eee4fb0c256af85"}, + {file = "grpcio-1.63.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cdcda1156dcc41e042d1e899ba1f5c2e9f3cd7625b3d6ebfa619806a4c1aadda"}, + {file = "grpcio-1.63.0-cp38-cp38-win32.whl", hash = "sha256:01799e8649f9e94ba7db1aeb3452188048b0019dc37696b0f5ce212c87c560c3"}, + {file = "grpcio-1.63.0-cp38-cp38-win_amd64.whl", hash = "sha256:6a1a3642d76f887aa4009d92f71eb37809abceb3b7b5a1eec9c554a246f20e3a"}, + {file = "grpcio-1.63.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:75f701ff645858a2b16bc8c9fc68af215a8bb2d5a9b647448129de6e85d52bce"}, + {file = "grpcio-1.63.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cacdef0348a08e475a721967f48206a2254a1b26ee7637638d9e081761a5ba86"}, + {file = "grpcio-1.63.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:0697563d1d84d6985e40ec5ec596ff41b52abb3fd91ec240e8cb44a63b895094"}, + {file = "grpcio-1.63.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6426e1fb92d006e47476d42b8f240c1d916a6d4423c5258ccc5b105e43438f61"}, + {file = "grpcio-1.63.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e48cee31bc5f5a31fb2f3b573764bd563aaa5472342860edcc7039525b53e46a"}, + {file = "grpcio-1.63.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:50344663068041b34a992c19c600236e7abb42d6ec32567916b87b4c8b8833b3"}, + {file = "grpcio-1.63.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:259e11932230d70ef24a21b9fb5bb947eb4703f57865a404054400ee92f42f5d"}, + {file = "grpcio-1.63.0-cp39-cp39-win32.whl", hash = "sha256:a44624aad77bf8ca198c55af811fd28f2b3eaf0a50ec5b57b06c034416ef2d0a"}, + {file = "grpcio-1.63.0-cp39-cp39-win_amd64.whl", hash = "sha256:166e5c460e5d7d4656ff9e63b13e1f6029b122104c1633d5f37eaea348d7356d"}, + {file = "grpcio-1.63.0.tar.gz", hash = "sha256:f3023e14805c61bc439fb40ca545ac3d5740ce66120a678a3c6c2c55b70343d1"}, ] [package.extras] -protobuf = ["grpcio-tools (>=1.59.3)"] +protobuf = ["grpcio-tools (>=1.63.0)"] [[package]] name = "grpcio-tools" -version = "1.59.3" +version = "1.62.2" description = "Protobuf code generator for gRPC" optional = false python-versions = ">=3.7" files = [ - {file = "grpcio-tools-1.59.3.tar.gz", hash = "sha256:cd160ac4281cd1ae77a2c880377a7728349340b4c91e24285037b57c18e9f651"}, - {file = "grpcio_tools-1.59.3-cp310-cp310-linux_armv7l.whl", hash = "sha256:17017fe74734c158e0f93817f1ff17aeda37d0f105ed6e63b12c26b66743a7a8"}, - {file = "grpcio_tools-1.59.3-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:ac1013e4f84ffd15c45ead6d19c9d188b76c14466a799aa9c338ce3b9ebf6dcc"}, - {file = "grpcio_tools-1.59.3-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:0a5d760619305eb51a8719ce9c081398f145a46bc7c86a6e2cebe0648a21f40c"}, - {file = "grpcio_tools-1.59.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de3d9649b7a3091ec785a67d5bf006584440f03896ee52259c6d9ff412d08afb"}, - {file = "grpcio_tools-1.59.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21868aa510317d3f39e5de40208ffb8ab1beb1cbcab333317939b59a9b5db055"}, - {file = "grpcio_tools-1.59.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0b116a888580317e421358f26bfaeec47d6f73079e8a47bad60d1f9f7b30f2a5"}, - {file = "grpcio_tools-1.59.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6bd4a72c27abda191e2360b2b720ada1880aba96a63604a6f9d7c37bb3bbf5c4"}, - {file = "grpcio_tools-1.59.3-cp310-cp310-win32.whl", hash = "sha256:d70cad744e92c7576c226a72998ae8dd59240c942f73798bbde40284eb9eb991"}, - {file = "grpcio_tools-1.59.3-cp310-cp310-win_amd64.whl", hash = "sha256:2b8a4aca0c11f2a8b3bfe103362984bdc427ab762428446ef2e12922fd48ee10"}, - {file = "grpcio_tools-1.59.3-cp311-cp311-linux_armv7l.whl", hash = "sha256:b4418b78408ff56ee70a0b14484c07f5e48c2e6f4fa7be390d486a686d0cd6e4"}, - {file = "grpcio_tools-1.59.3-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:58de83ced4f86458f45288a5f76d9765dc245a9ce4e783a194decccc7e0674ea"}, - {file = "grpcio_tools-1.59.3-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:76b0cdcbcb38722840d3eaff6439ddb4b8f0210c6718553d7b7c911834b10e60"}, - {file = "grpcio_tools-1.59.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0cacf59513b100bfb3d8de51ba43db6140aa9bcb7bba872badb48acb430c002"}, - {file = "grpcio_tools-1.59.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:019fdd986c80b13187574c291df5054f241bdbe87dbc86e4cee73ffa28328647"}, - {file = "grpcio_tools-1.59.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ff304b9d6c23d8e2ecc860bebac1ec6768a2d920985bcea9ce4a7aaeeea44f76"}, - {file = "grpcio_tools-1.59.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ca286affe613beaf2d5a6b8bd83203dcf488917194b416da48aa849047b5f081"}, - {file = "grpcio_tools-1.59.3-cp311-cp311-win32.whl", hash = "sha256:8f69141ff370729ceaad0286b8c6e15352c9bb39aa8f18c0500ce3d0238c2981"}, - {file = "grpcio_tools-1.59.3-cp311-cp311-win_amd64.whl", hash = "sha256:05ec4ffe16b6eab12813476e6d7465a0027bee33999d4776ae1d9c0664d0fc54"}, - {file = "grpcio_tools-1.59.3-cp312-cp312-linux_armv7l.whl", hash = "sha256:21d976419630f72a7cefebe7dcfc451b33d70c805a43ff5a60c43367813f0527"}, - {file = "grpcio_tools-1.59.3-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:396106f92ea6ab2157535e1a009bac99aa15680ca8addbc8e7c1a4d3f5b1fb2c"}, - {file = "grpcio_tools-1.59.3-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:4f064483e0046a4a193d6c67b26ea0f61737e8232ff61636a7fa0bc5244458be"}, - {file = "grpcio_tools-1.59.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a6dc6da8e3780df25095c1952f45c334e1554f25b991ffe75dbf0408795d27a0"}, - {file = "grpcio_tools-1.59.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87111be05c1a159ce3fffbfad86ff69fd4bf1702cde127eb698d8e8c3a018ab6"}, - {file = "grpcio_tools-1.59.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:83453a13c2120238eb7fb993b03b370496e76071a7b45c816aa682d9226d29c1"}, - {file = "grpcio_tools-1.59.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4384b29d8e126bc6e24a5efd9d60a2a2015867c7109fa67ff2ed274b3f4a05c5"}, - {file = "grpcio_tools-1.59.3-cp312-cp312-win32.whl", hash = "sha256:ce1372c9acde9d74c7e54858598ac0c5203dd3ec24b9085f7a8b2f33cc156736"}, - {file = "grpcio_tools-1.59.3-cp312-cp312-win_amd64.whl", hash = "sha256:84179e3a7c9067e993700b3255f2adc10e9b16e8dd28525d1dd1a02b9ca603ee"}, - {file = "grpcio_tools-1.59.3-cp37-cp37m-linux_armv7l.whl", hash = "sha256:592208a9a02df75993cc4dba111d2b81f0e6a3f3837856be239e1aceb6651f31"}, - {file = "grpcio_tools-1.59.3-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:1abe30ce770ac4fed966d017771fa7f8ced6a279de7ce68023e2c07f07911e76"}, - {file = "grpcio_tools-1.59.3-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:4dce57668e2aa8c3bb0b2a0bb766a2654ee0f4d8d31e02a6001e98af18569285"}, - {file = "grpcio_tools-1.59.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:acaefd3c362250a02cc93fc1b5440e3cb30ab8d7fd81594b2975ea19f123aae3"}, - {file = "grpcio_tools-1.59.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76542e1c11e3f2c22c19cff6b3233caab35924fad1f685ce63184d31b4050fa8"}, - {file = "grpcio_tools-1.59.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:64fd1efb23da054f61aca2346c5139f317b7f4c545f6dbda5ec246f281af8e86"}, - {file = "grpcio_tools-1.59.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ea6454acde508c9a62dab3f59e98b32e32b26aa60df20080982503bb7db51304"}, - {file = "grpcio_tools-1.59.3-cp37-cp37m-win_amd64.whl", hash = "sha256:a048d4bde526f3c6e364abea2c3a481f3bbebc4bfa7fdcfcc3e5ee4f8ab9c4c5"}, - {file = "grpcio_tools-1.59.3-cp38-cp38-linux_armv7l.whl", hash = "sha256:b4db59a62d31c98105af08b1bfb8878c239e4cf31088f2d9864756cdfec67746"}, - {file = "grpcio_tools-1.59.3-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:05ac0f6683759e5508081c09af26cb6cc949c2c54d75ff8b76344709f78dda53"}, - {file = "grpcio_tools-1.59.3-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:a031e1ced828a00f1eb59db5f5d4dd39d3bd6a7df8187f84830d4a32a1bbc686"}, - {file = "grpcio_tools-1.59.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f48b4409b306675b7673dad725c9cf3234bf05623bf8a193ad14af39d0368ba6"}, - {file = "grpcio_tools-1.59.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36524d97cc936767a69815b90be76a1420b3218a7724ce69cde6ece794e72a17"}, - {file = "grpcio_tools-1.59.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7cc7e8b893a6c37a8a28735fede1aa40275988a668d1e22c5f234938a77d811d"}, - {file = "grpcio_tools-1.59.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:917be645a71cf9592d2f5a3589c20c074a6539954017e8e2dca5e8ba13025625"}, - {file = "grpcio_tools-1.59.3-cp38-cp38-win32.whl", hash = "sha256:a1394b7a65d738ee0ce4eac1fc95158dd9c97b5c3f690d259e6ee0bf131697de"}, - {file = "grpcio_tools-1.59.3-cp38-cp38-win_amd64.whl", hash = "sha256:007745bd3c5a788dcb73eeb6cd773613a834bd2442e7d062dcafe46dbd4bb5f6"}, - {file = "grpcio_tools-1.59.3-cp39-cp39-linux_armv7l.whl", hash = "sha256:102b5f14a500dbb766f24a96884d9572a3ea7a56d69695461100fb71ec922ef6"}, - {file = "grpcio_tools-1.59.3-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:46c384a0e30a8422a3e2c5530b3cd69b652dd659549907e2eaac7ca4e0ab614d"}, - {file = "grpcio_tools-1.59.3-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:ee013da4f5a4ef50fdeca372470733bc402677a4dc0023ee94bf42478b5a620d"}, - {file = "grpcio_tools-1.59.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b7883ce3d532c09f29c016fdac107f9a3dc43f9e6b60faf8b91fcba21824269"}, - {file = "grpcio_tools-1.59.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2861e4814ebc147854c2246092c433931f4c15f3c8105ae8716b1e282313a5ae"}, - {file = "grpcio_tools-1.59.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d93590a6a82469f3e58e39692230d99c43a39b215cb581e072dcd52286471152"}, - {file = "grpcio_tools-1.59.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f8396183e6e0a16178773963dc21b58c0c532783476fda314198a9e42f57af7d"}, - {file = "grpcio_tools-1.59.3-cp39-cp39-win32.whl", hash = "sha256:6747b1d82d08e0f5e1a6438532343a1c5504147d1a199c5756e702e5f916de4c"}, - {file = "grpcio_tools-1.59.3-cp39-cp39-win_amd64.whl", hash = "sha256:3a560dcb176dd42c37af5d37299e318341a572547e32b942247daa834d2164c0"}, + {file = "grpcio-tools-1.62.2.tar.gz", hash = "sha256:5fd5e1582b678e6b941ee5f5809340be5e0724691df5299aae8226640f94e18f"}, + {file = "grpcio_tools-1.62.2-cp310-cp310-linux_armv7l.whl", hash = "sha256:1679b4903aed2dc5bd8cb22a452225b05dc8470a076f14fd703581efc0740cdb"}, + {file = "grpcio_tools-1.62.2-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:9d41e0e47dd075c075bb8f103422968a65dd0d8dc8613288f573ae91eb1053ba"}, + {file = "grpcio_tools-1.62.2-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:987e774f74296842bbffd55ea8826370f70c499e5b5f71a8cf3103838b6ee9c3"}, + {file = "grpcio_tools-1.62.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40cd4eeea4b25bcb6903b82930d579027d034ba944393c4751cdefd9c49e6989"}, + {file = "grpcio_tools-1.62.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6746bc823958499a3cf8963cc1de00072962fb5e629f26d658882d3f4c35095"}, + {file = "grpcio_tools-1.62.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2ed775e844566ce9ce089be9a81a8b928623b8ee5820f5e4d58c1a9d33dfc5ae"}, + {file = "grpcio_tools-1.62.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bdc5dd3f57b5368d5d661d5d3703bcaa38bceca59d25955dff66244dbc987271"}, + {file = "grpcio_tools-1.62.2-cp310-cp310-win32.whl", hash = "sha256:3a8d6f07e64c0c7756f4e0c4781d9d5a2b9cc9cbd28f7032a6fb8d4f847d0445"}, + {file = "grpcio_tools-1.62.2-cp310-cp310-win_amd64.whl", hash = "sha256:e33b59fb3efdddeb97ded988a871710033e8638534c826567738d3edce528752"}, + {file = "grpcio_tools-1.62.2-cp311-cp311-linux_armv7l.whl", hash = "sha256:472505d030135d73afe4143b0873efe0dcb385bd6d847553b4f3afe07679af00"}, + {file = "grpcio_tools-1.62.2-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:ec674b4440ef4311ac1245a709e87b36aca493ddc6850eebe0b278d1f2b6e7d1"}, + {file = "grpcio_tools-1.62.2-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:184b4174d4bd82089d706e8223e46c42390a6ebac191073b9772abc77308f9fa"}, + {file = "grpcio_tools-1.62.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c195d74fe98541178ece7a50dad2197d43991e0f77372b9a88da438be2486f12"}, + {file = "grpcio_tools-1.62.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a34d97c62e61bfe9e6cff0410fe144ac8cca2fc979ad0be46b7edf026339d161"}, + {file = "grpcio_tools-1.62.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cbb8453ae83a1db2452b7fe0f4b78e4a8dd32be0f2b2b73591ae620d4d784d3d"}, + {file = "grpcio_tools-1.62.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4f989e5cebead3ae92c6abf6bf7b19949e1563a776aea896ac5933f143f0c45d"}, + {file = "grpcio_tools-1.62.2-cp311-cp311-win32.whl", hash = "sha256:c48fabe40b9170f4e3d7dd2c252e4f1ff395dc24e49ac15fc724b1b6f11724da"}, + {file = "grpcio_tools-1.62.2-cp311-cp311-win_amd64.whl", hash = "sha256:8c616d0ad872e3780693fce6a3ac8ef00fc0963e6d7815ce9dcfae68ba0fc287"}, + {file = "grpcio_tools-1.62.2-cp312-cp312-linux_armv7l.whl", hash = "sha256:10cc3321704ecd17c93cf68c99c35467a8a97ffaaed53207e9b2da6ae0308ee1"}, + {file = "grpcio_tools-1.62.2-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:9be84ff6d47fd61462be7523b49d7ba01adf67ce4e1447eae37721ab32464dd8"}, + {file = "grpcio_tools-1.62.2-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:d82f681c9a9d933a9d8068e8e382977768e7779ddb8870fa0cf918d8250d1532"}, + {file = "grpcio_tools-1.62.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:04c607029ae3660fb1624ed273811ffe09d57d84287d37e63b5b802a35897329"}, + {file = "grpcio_tools-1.62.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72b61332f1b439c14cbd3815174a8f1d35067a02047c32decd406b3a09bb9890"}, + {file = "grpcio_tools-1.62.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8214820990d01b52845f9fbcb92d2b7384a0c321b303e3ac614c219dc7d1d3af"}, + {file = "grpcio_tools-1.62.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:462e0ab8dd7c7b70bfd6e3195eebc177549ede5cf3189814850c76f9a340d7ce"}, + {file = "grpcio_tools-1.62.2-cp312-cp312-win32.whl", hash = "sha256:fa107460c842e4c1a6266150881694fefd4f33baa544ea9489601810c2210ef8"}, + {file = "grpcio_tools-1.62.2-cp312-cp312-win_amd64.whl", hash = "sha256:759c60f24c33a181bbbc1232a6752f9b49fbb1583312a4917e2b389fea0fb0f2"}, + {file = "grpcio_tools-1.62.2-cp37-cp37m-linux_armv7l.whl", hash = "sha256:45db5da2bcfa88f2b86b57ef35daaae85c60bd6754a051d35d9449c959925b57"}, + {file = "grpcio_tools-1.62.2-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:ab84bae88597133f6ea7a2bdc57b2fda98a266fe8d8d4763652cbefd20e73ad7"}, + {file = "grpcio_tools-1.62.2-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:7a49bccae1c7d154b78e991885c3111c9ad8c8fa98e91233de425718f47c6139"}, + {file = "grpcio_tools-1.62.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7e439476b29d6dac363b321781a113794397afceeb97dad85349db5f1cb5e9a"}, + {file = "grpcio_tools-1.62.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ea369c4d1567d1acdf69c8ea74144f4ccad9e545df7f9a4fc64c94fa7684ba3"}, + {file = "grpcio_tools-1.62.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4f955702dc4b530696375251319d05223b729ed24e8673c2129f7a75d2caefbb"}, + {file = "grpcio_tools-1.62.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3708a747aa4b6b505727282ca887041174e146ae030ebcadaf4c1d346858df62"}, + {file = "grpcio_tools-1.62.2-cp37-cp37m-win_amd64.whl", hash = "sha256:2ce149ea55eadb486a7fb75a20f63ef3ac065ee6a0240ed25f3549ce7954c653"}, + {file = "grpcio_tools-1.62.2-cp38-cp38-linux_armv7l.whl", hash = "sha256:58cbb24b3fa6ae35aa9c210fcea3a51aa5fef0cd25618eb4fd94f746d5a9b703"}, + {file = "grpcio_tools-1.62.2-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:6413581e14a80e0b4532577766cf0586de4dd33766a31b3eb5374a746771c07d"}, + {file = "grpcio_tools-1.62.2-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:47117c8a7e861382470d0e22d336e5a91fdc5f851d1db44fa784b9acea190d87"}, + {file = "grpcio_tools-1.62.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9f1ba79a253df9e553d20319c615fa2b429684580fa042dba618d7f6649ac7e4"}, + {file = "grpcio_tools-1.62.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04a394cf5e51ba9be412eb9f6c482b6270bd81016e033e8eb7d21b8cc28fe8b5"}, + {file = "grpcio_tools-1.62.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3c53b221378b035ae2f1881cbc3aca42a6075a8e90e1a342c2f205eb1d1aa6a1"}, + {file = "grpcio_tools-1.62.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c384c838b34d1b67068e51b5bbe49caa6aa3633acd158f1ab16b5da8d226bc53"}, + {file = "grpcio_tools-1.62.2-cp38-cp38-win32.whl", hash = "sha256:19ea69e41c3565932aa28a202d1875ec56786aea46a2eab54a3b28e8a27f9517"}, + {file = "grpcio_tools-1.62.2-cp38-cp38-win_amd64.whl", hash = "sha256:1d768a5c07279a4c461ebf52d0cec1c6ca85c6291c71ec2703fe3c3e7e28e8c4"}, + {file = "grpcio_tools-1.62.2-cp39-cp39-linux_armv7l.whl", hash = "sha256:5b07b5874187e170edfbd7aa2ca3a54ebf3b2952487653e8c0b0d83601c33035"}, + {file = "grpcio_tools-1.62.2-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:d58389fe8be206ddfb4fa703db1e24c956856fcb9a81da62b13577b3a8f7fda7"}, + {file = "grpcio_tools-1.62.2-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:7d8b4e00c3d7237b92260fc18a561cd81f1da82e8be100db1b7d816250defc66"}, + {file = "grpcio_tools-1.62.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fe08d2038f2b7c53259b5c49e0ad08c8e0ce2b548d8185993e7ef67e8592cca"}, + {file = "grpcio_tools-1.62.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19216e1fb26dbe23d12a810517e1b3fbb8d4f98b1a3fbebeec9d93a79f092de4"}, + {file = "grpcio_tools-1.62.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b8574469ecc4ff41d6bb95f44e0297cdb0d95bade388552a9a444db9cd7485cd"}, + {file = "grpcio_tools-1.62.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4f6f32d39283ea834a493fccf0ebe9cfddee7577bdcc27736ad4be1732a36399"}, + {file = "grpcio_tools-1.62.2-cp39-cp39-win32.whl", hash = "sha256:76eb459bdf3fb666e01883270beee18f3f11ed44488486b61cd210b4e0e17cc1"}, + {file = "grpcio_tools-1.62.2-cp39-cp39-win_amd64.whl", hash = "sha256:217c2ee6a7ce519a55958b8622e21804f6fdb774db08c322f4c9536c35fdce7c"}, ] [package.dependencies] -grpcio = ">=1.59.3" +grpcio = ">=1.62.2" protobuf = ">=4.21.6,<5.0dev" setuptools = "*" @@ -856,13 +866,13 @@ files = [ [[package]] name = "httpcore" -version = "1.0.2" +version = "1.0.5" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpcore-1.0.2-py3-none-any.whl", hash = "sha256:096cc05bca73b8e459a1fc3dcf585148f63e534eae4339559c9b8a8d6399acc7"}, - {file = "httpcore-1.0.2.tar.gz", hash = "sha256:9fc092e4799b26174648e54b74ed5f683132a464e95643b226e00c2ed2fa6535"}, + {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, + {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, ] [package.dependencies] @@ -873,7 +883,7 @@ h11 = ">=0.13,<0.15" asyncio = ["anyio (>=4.0,<5.0)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<0.23.0)"] +trio = ["trio (>=0.22.0,<0.26.0)"] [[package]] name = "httptools" @@ -986,6 +996,17 @@ files = [ {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] +[[package]] +name = "intelhex" +version = "2.3.0" +description = "Python library for Intel HEX files manipulations" +optional = false +python-versions = "*" +files = [ + {file = "intelhex-2.3.0-py2.py3-none-any.whl", hash = "sha256:87cc5225657524ec6361354be928adfd56bcf2a3dcc646c40f8f094c39c07db4"}, + {file = "intelhex-2.3.0.tar.gz", hash = "sha256:892b7361a719f4945237da8ccf754e9513db32f5628852785aea108dcd250093"}, +] + [[package]] name = "invoke" version = "2.2.0" @@ -1049,13 +1070,13 @@ files = [ [[package]] name = "packaging" -version = "23.2" +version = "24.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, - {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, + {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, + {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, ] [[package]] @@ -1084,13 +1105,13 @@ xarray = ["xarray"] [[package]] name = "pluggy" -version = "1.3.0" +version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" files = [ - {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, - {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, ] [package.extras] @@ -1132,29 +1153,29 @@ files = [ [[package]] name = "pycparser" -version = "2.21" +version = "2.22" description = "C parser in Python" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.8" files = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, ] [[package]] name = "pydantic" -version = "2.5.2" +version = "2.7.1" description = "Data validation using Python type hints" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pydantic-2.5.2-py3-none-any.whl", hash = "sha256:80c50fb8e3dcecfddae1adbcc00ec5822918490c99ab31f6cf6140ca1c1429f0"}, - {file = "pydantic-2.5.2.tar.gz", hash = "sha256:ff177ba64c6faf73d7afa2e8cad38fd456c0dbe01c9954e71038001cd15a6edd"}, + {file = "pydantic-2.7.1-py3-none-any.whl", hash = "sha256:e029badca45266732a9a79898a15ae2e8b14840b1eabbb25844be28f0b33f3d5"}, + {file = "pydantic-2.7.1.tar.gz", hash = "sha256:e9dbb5eada8abe4d9ae5f46b9939aead650cd2b68f249bb3a8139dbe125803cc"}, ] [package.dependencies] annotated-types = ">=0.4.0" -pydantic-core = "2.14.5" +pydantic-core = "2.18.2" typing-extensions = ">=4.6.1" [package.extras] @@ -1162,116 +1183,90 @@ email = ["email-validator (>=2.0.0)"] [[package]] name = "pydantic-core" -version = "2.14.5" -description = "" +version = "2.18.2" +description = "Core functionality for Pydantic validation and serialization" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.14.5-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:7e88f5696153dc516ba6e79f82cc4747e87027205f0e02390c21f7cb3bd8abfd"}, - {file = "pydantic_core-2.14.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4641e8ad4efb697f38a9b64ca0523b557c7931c5f84e0fd377a9a3b05121f0de"}, - {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:774de879d212db5ce02dfbf5b0da9a0ea386aeba12b0b95674a4ce0593df3d07"}, - {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ebb4e035e28f49b6f1a7032920bb9a0c064aedbbabe52c543343d39341a5b2a3"}, - {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b53e9ad053cd064f7e473a5f29b37fc4cc9dc6d35f341e6afc0155ea257fc911"}, - {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aa1768c151cf562a9992462239dfc356b3d1037cc5a3ac829bb7f3bda7cc1f9"}, - {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eac5c82fc632c599f4639a5886f96867ffced74458c7db61bc9a66ccb8ee3113"}, - {file = "pydantic_core-2.14.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2ae91f50ccc5810b2f1b6b858257c9ad2e08da70bf890dee02de1775a387c66"}, - {file = "pydantic_core-2.14.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6b9ff467ffbab9110e80e8c8de3bcfce8e8b0fd5661ac44a09ae5901668ba997"}, - {file = "pydantic_core-2.14.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:61ea96a78378e3bd5a0be99b0e5ed00057b71f66115f5404d0dae4819f495093"}, - {file = "pydantic_core-2.14.5-cp310-none-win32.whl", hash = "sha256:bb4c2eda937a5e74c38a41b33d8c77220380a388d689bcdb9b187cf6224c9720"}, - {file = "pydantic_core-2.14.5-cp310-none-win_amd64.whl", hash = "sha256:b7851992faf25eac90bfcb7bfd19e1f5ffa00afd57daec8a0042e63c74a4551b"}, - {file = "pydantic_core-2.14.5-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:4e40f2bd0d57dac3feb3a3aed50f17d83436c9e6b09b16af271b6230a2915459"}, - {file = "pydantic_core-2.14.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ab1cdb0f14dc161ebc268c09db04d2c9e6f70027f3b42446fa11c153521c0e88"}, - {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aae7ea3a1c5bb40c93cad361b3e869b180ac174656120c42b9fadebf685d121b"}, - {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:60b7607753ba62cf0739177913b858140f11b8af72f22860c28eabb2f0a61937"}, - {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2248485b0322c75aee7565d95ad0e16f1c67403a470d02f94da7344184be770f"}, - {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:823fcc638f67035137a5cd3f1584a4542d35a951c3cc68c6ead1df7dac825c26"}, - {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96581cfefa9123accc465a5fd0cc833ac4d75d55cc30b633b402e00e7ced00a6"}, - {file = "pydantic_core-2.14.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a33324437018bf6ba1bb0f921788788641439e0ed654b233285b9c69704c27b4"}, - {file = "pydantic_core-2.14.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9bd18fee0923ca10f9a3ff67d4851c9d3e22b7bc63d1eddc12f439f436f2aada"}, - {file = "pydantic_core-2.14.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:853a2295c00f1d4429db4c0fb9475958543ee80cfd310814b5c0ef502de24dda"}, - {file = "pydantic_core-2.14.5-cp311-none-win32.whl", hash = "sha256:cb774298da62aea5c80a89bd58c40205ab4c2abf4834453b5de207d59d2e1651"}, - {file = "pydantic_core-2.14.5-cp311-none-win_amd64.whl", hash = "sha256:e87fc540c6cac7f29ede02e0f989d4233f88ad439c5cdee56f693cc9c1c78077"}, - {file = "pydantic_core-2.14.5-cp311-none-win_arm64.whl", hash = "sha256:57d52fa717ff445cb0a5ab5237db502e6be50809b43a596fb569630c665abddf"}, - {file = "pydantic_core-2.14.5-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:e60f112ac88db9261ad3a52032ea46388378034f3279c643499edb982536a093"}, - {file = "pydantic_core-2.14.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6e227c40c02fd873c2a73a98c1280c10315cbebe26734c196ef4514776120aeb"}, - {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0cbc7fff06a90bbd875cc201f94ef0ee3929dfbd5c55a06674b60857b8b85ed"}, - {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:103ef8d5b58596a731b690112819501ba1db7a36f4ee99f7892c40da02c3e189"}, - {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c949f04ecad823f81b1ba94e7d189d9dfb81edbb94ed3f8acfce41e682e48cef"}, - {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1452a1acdf914d194159439eb21e56b89aa903f2e1c65c60b9d874f9b950e5d"}, - {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb4679d4c2b089e5ef89756bc73e1926745e995d76e11925e3e96a76d5fa51fc"}, - {file = "pydantic_core-2.14.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cf9d3fe53b1ee360e2421be95e62ca9b3296bf3f2fb2d3b83ca49ad3f925835e"}, - {file = "pydantic_core-2.14.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:70f4b4851dbb500129681d04cc955be2a90b2248d69273a787dda120d5cf1f69"}, - {file = "pydantic_core-2.14.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:59986de5710ad9613ff61dd9b02bdd2f615f1a7052304b79cc8fa2eb4e336d2d"}, - {file = "pydantic_core-2.14.5-cp312-none-win32.whl", hash = "sha256:699156034181e2ce106c89ddb4b6504c30db8caa86e0c30de47b3e0654543260"}, - {file = "pydantic_core-2.14.5-cp312-none-win_amd64.whl", hash = "sha256:5baab5455c7a538ac7e8bf1feec4278a66436197592a9bed538160a2e7d11e36"}, - {file = "pydantic_core-2.14.5-cp312-none-win_arm64.whl", hash = "sha256:e47e9a08bcc04d20975b6434cc50bf82665fbc751bcce739d04a3120428f3e27"}, - {file = "pydantic_core-2.14.5-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:af36f36538418f3806048f3b242a1777e2540ff9efaa667c27da63d2749dbce0"}, - {file = "pydantic_core-2.14.5-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:45e95333b8418ded64745f14574aa9bfc212cb4fbeed7a687b0c6e53b5e188cd"}, - {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e47a76848f92529879ecfc417ff88a2806438f57be4a6a8bf2961e8f9ca9ec7"}, - {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d81e6987b27bc7d101c8597e1cd2bcaa2fee5e8e0f356735c7ed34368c471550"}, - {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:34708cc82c330e303f4ce87758828ef6e457681b58ce0e921b6e97937dd1e2a3"}, - {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:652c1988019752138b974c28f43751528116bcceadad85f33a258869e641d753"}, - {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e4d090e73e0725b2904fdbdd8d73b8802ddd691ef9254577b708d413bf3006e"}, - {file = "pydantic_core-2.14.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5c7d5b5005f177764e96bd584d7bf28d6e26e96f2a541fdddb934c486e36fd59"}, - {file = "pydantic_core-2.14.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a71891847f0a73b1b9eb86d089baee301477abef45f7eaf303495cd1473613e4"}, - {file = "pydantic_core-2.14.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a717aef6971208f0851a2420b075338e33083111d92041157bbe0e2713b37325"}, - {file = "pydantic_core-2.14.5-cp37-none-win32.whl", hash = "sha256:de790a3b5aa2124b8b78ae5faa033937a72da8efe74b9231698b5a1dd9be3405"}, - {file = "pydantic_core-2.14.5-cp37-none-win_amd64.whl", hash = "sha256:6c327e9cd849b564b234da821236e6bcbe4f359a42ee05050dc79d8ed2a91588"}, - {file = "pydantic_core-2.14.5-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:ef98ca7d5995a82f43ec0ab39c4caf6a9b994cb0b53648ff61716370eadc43cf"}, - {file = "pydantic_core-2.14.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6eae413494a1c3f89055da7a5515f32e05ebc1a234c27674a6956755fb2236f"}, - {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcf4e6d85614f7a4956c2de5a56531f44efb973d2fe4a444d7251df5d5c4dcfd"}, - {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6637560562134b0e17de333d18e69e312e0458ee4455bdad12c37100b7cad706"}, - {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77fa384d8e118b3077cccfcaf91bf83c31fe4dc850b5e6ee3dc14dc3d61bdba1"}, - {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16e29bad40bcf97aac682a58861249ca9dcc57c3f6be22f506501833ddb8939c"}, - {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:531f4b4252fac6ca476fbe0e6f60f16f5b65d3e6b583bc4d87645e4e5ddde331"}, - {file = "pydantic_core-2.14.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:074f3d86f081ce61414d2dc44901f4f83617329c6f3ab49d2bc6c96948b2c26b"}, - {file = "pydantic_core-2.14.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c2adbe22ab4babbca99c75c5d07aaf74f43c3195384ec07ccbd2f9e3bddaecec"}, - {file = "pydantic_core-2.14.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0f6116a558fd06d1b7c2902d1c4cf64a5bd49d67c3540e61eccca93f41418124"}, - {file = "pydantic_core-2.14.5-cp38-none-win32.whl", hash = "sha256:fe0a5a1025eb797752136ac8b4fa21aa891e3d74fd340f864ff982d649691867"}, - {file = "pydantic_core-2.14.5-cp38-none-win_amd64.whl", hash = "sha256:079206491c435b60778cf2b0ee5fd645e61ffd6e70c47806c9ed51fc75af078d"}, - {file = "pydantic_core-2.14.5-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:a6a16f4a527aae4f49c875da3cdc9508ac7eef26e7977952608610104244e1b7"}, - {file = "pydantic_core-2.14.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:abf058be9517dc877227ec3223f0300034bd0e9f53aebd63cf4456c8cb1e0863"}, - {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49b08aae5013640a3bfa25a8eebbd95638ec3f4b2eaf6ed82cf0c7047133f03b"}, - {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c2d97e906b4ff36eb464d52a3bc7d720bd6261f64bc4bcdbcd2c557c02081ed2"}, - {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3128e0bbc8c091ec4375a1828d6118bc20404883169ac95ffa8d983b293611e6"}, - {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:88e74ab0cdd84ad0614e2750f903bb0d610cc8af2cc17f72c28163acfcf372a4"}, - {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c339dabd8ee15f8259ee0f202679b6324926e5bc9e9a40bf981ce77c038553db"}, - {file = "pydantic_core-2.14.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3387277f1bf659caf1724e1afe8ee7dbc9952a82d90f858ebb931880216ea955"}, - {file = "pydantic_core-2.14.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ba6b6b3846cfc10fdb4c971980a954e49d447cd215ed5a77ec8190bc93dd7bc5"}, - {file = "pydantic_core-2.14.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ca61d858e4107ce5e1330a74724fe757fc7135190eb5ce5c9d0191729f033209"}, - {file = "pydantic_core-2.14.5-cp39-none-win32.whl", hash = "sha256:ec1e72d6412f7126eb7b2e3bfca42b15e6e389e1bc88ea0069d0cc1742f477c6"}, - {file = "pydantic_core-2.14.5-cp39-none-win_amd64.whl", hash = "sha256:c0b97ec434041827935044bbbe52b03d6018c2897349670ff8fe11ed24d1d4ab"}, - {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:79e0a2cdbdc7af3f4aee3210b1172ab53d7ddb6a2d8c24119b5706e622b346d0"}, - {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:678265f7b14e138d9a541ddabbe033012a2953315739f8cfa6d754cc8063e8ca"}, - {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95b15e855ae44f0c6341ceb74df61b606e11f1087e87dcb7482377374aac6abe"}, - {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09b0e985fbaf13e6b06a56d21694d12ebca6ce5414b9211edf6f17738d82b0f8"}, - {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ad873900297bb36e4b6b3f7029d88ff9829ecdc15d5cf20161775ce12306f8a"}, - {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2d0ae0d8670164e10accbeb31d5ad45adb71292032d0fdb9079912907f0085f4"}, - {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d37f8ec982ead9ba0a22a996129594938138a1503237b87318392a48882d50b7"}, - {file = "pydantic_core-2.14.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:35613015f0ba7e14c29ac6c2483a657ec740e5ac5758d993fdd5870b07a61d8b"}, - {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:ab4ea451082e684198636565224bbb179575efc1658c48281b2c866bfd4ddf04"}, - {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ce601907e99ea5b4adb807ded3570ea62186b17f88e271569144e8cca4409c7"}, - {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb2ed8b3fe4bf4506d6dab3b93b83bbc22237e230cba03866d561c3577517d18"}, - {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:70f947628e074bb2526ba1b151cee10e4c3b9670af4dbb4d73bc8a89445916b5"}, - {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4bc536201426451f06f044dfbf341c09f540b4ebdb9fd8d2c6164d733de5e634"}, - {file = "pydantic_core-2.14.5-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f4791cf0f8c3104ac668797d8c514afb3431bc3305f5638add0ba1a5a37e0d88"}, - {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:038c9f763e650712b899f983076ce783175397c848da04985658e7628cbe873b"}, - {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:27548e16c79702f1e03f5628589c6057c9ae17c95b4c449de3c66b589ead0520"}, - {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c97bee68898f3f4344eb02fec316db93d9700fb1e6a5b760ffa20d71d9a46ce3"}, - {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9b759b77f5337b4ea024f03abc6464c9f35d9718de01cfe6bae9f2e139c397e"}, - {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:439c9afe34638ace43a49bf72d201e0ffc1a800295bed8420c2a9ca8d5e3dbb3"}, - {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:ba39688799094c75ea8a16a6b544eb57b5b0f3328697084f3f2790892510d144"}, - {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ccd4d5702bb90b84df13bd491be8d900b92016c5a455b7e14630ad7449eb03f8"}, - {file = "pydantic_core-2.14.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:81982d78a45d1e5396819bbb4ece1fadfe5f079335dd28c4ab3427cd95389944"}, - {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:7f8210297b04e53bc3da35db08b7302a6a1f4889c79173af69b72ec9754796b8"}, - {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:8c8a8812fe6f43a3a5b054af6ac2d7b8605c7bcab2804a8a7d68b53f3cd86e00"}, - {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:206ed23aecd67c71daf5c02c3cd19c0501b01ef3cbf7782db9e4e051426b3d0d"}, - {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2027d05c8aebe61d898d4cffd774840a9cb82ed356ba47a90d99ad768f39789"}, - {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40180930807ce806aa71eda5a5a5447abb6b6a3c0b4b3b1b1962651906484d68"}, - {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:615a0a4bff11c45eb3c1996ceed5bdaa2f7b432425253a7c2eed33bb86d80abc"}, - {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f5e412d717366e0677ef767eac93566582518fe8be923361a5c204c1a62eaafe"}, - {file = "pydantic_core-2.14.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:513b07e99c0a267b1d954243845d8a833758a6726a3b5d8948306e3fe14675e3"}, - {file = "pydantic_core-2.14.5.tar.gz", hash = "sha256:6d30226dfc816dd0fdf120cae611dd2215117e4f9b124af8c60ab9093b6e8e71"}, + {file = "pydantic_core-2.18.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9e08e867b306f525802df7cd16c44ff5ebbe747ff0ca6cf3fde7f36c05a59a81"}, + {file = "pydantic_core-2.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f0a21cbaa69900cbe1a2e7cad2aa74ac3cf21b10c3efb0fa0b80305274c0e8a2"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0680b1f1f11fda801397de52c36ce38ef1c1dc841a0927a94f226dea29c3ae3d"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:95b9d5e72481d3780ba3442eac863eae92ae43a5f3adb5b4d0a1de89d42bb250"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fcf5cd9c4b655ad666ca332b9a081112cd7a58a8b5a6ca7a3104bc950f2038"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b5155ff768083cb1d62f3e143b49a8a3432e6789a3abee8acd005c3c7af1c74"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:553ef617b6836fc7e4df130bb851e32fe357ce36336d897fd6646d6058d980af"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b89ed9eb7d616ef5714e5590e6cf7f23b02d0d539767d33561e3675d6f9e3857"}, + {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:75f7e9488238e920ab6204399ded280dc4c307d034f3924cd7f90a38b1829563"}, + {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ef26c9e94a8c04a1b2924149a9cb081836913818e55681722d7f29af88fe7b38"}, + {file = "pydantic_core-2.18.2-cp310-none-win32.whl", hash = "sha256:182245ff6b0039e82b6bb585ed55a64d7c81c560715d1bad0cbad6dfa07b4027"}, + {file = "pydantic_core-2.18.2-cp310-none-win_amd64.whl", hash = "sha256:e23ec367a948b6d812301afc1b13f8094ab7b2c280af66ef450efc357d2ae543"}, + {file = "pydantic_core-2.18.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:219da3f096d50a157f33645a1cf31c0ad1fe829a92181dd1311022f986e5fbe3"}, + {file = "pydantic_core-2.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cc1cfd88a64e012b74e94cd00bbe0f9c6df57049c97f02bb07d39e9c852e19a4"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05b7133a6e6aeb8df37d6f413f7705a37ab4031597f64ab56384c94d98fa0e90"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:224c421235f6102e8737032483f43c1a8cfb1d2f45740c44166219599358c2cd"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b14d82cdb934e99dda6d9d60dc84a24379820176cc4a0d123f88df319ae9c150"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2728b01246a3bba6de144f9e3115b532ee44bd6cf39795194fb75491824a1413"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:470b94480bb5ee929f5acba6995251ada5e059a5ef3e0dfc63cca287283ebfa6"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:997abc4df705d1295a42f95b4eec4950a37ad8ae46d913caeee117b6b198811c"}, + {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75250dbc5290e3f1a0f4618db35e51a165186f9034eff158f3d490b3fed9f8a0"}, + {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4456f2dca97c425231d7315737d45239b2b51a50dc2b6f0c2bb181fce6207664"}, + {file = "pydantic_core-2.18.2-cp311-none-win32.whl", hash = "sha256:269322dcc3d8bdb69f054681edff86276b2ff972447863cf34c8b860f5188e2e"}, + {file = "pydantic_core-2.18.2-cp311-none-win_amd64.whl", hash = "sha256:800d60565aec896f25bc3cfa56d2277d52d5182af08162f7954f938c06dc4ee3"}, + {file = "pydantic_core-2.18.2-cp311-none-win_arm64.whl", hash = "sha256:1404c69d6a676245199767ba4f633cce5f4ad4181f9d0ccb0577e1f66cf4c46d"}, + {file = "pydantic_core-2.18.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:fb2bd7be70c0fe4dfd32c951bc813d9fe6ebcbfdd15a07527796c8204bd36242"}, + {file = "pydantic_core-2.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6132dd3bd52838acddca05a72aafb6eab6536aa145e923bb50f45e78b7251043"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d904828195733c183d20a54230c0df0eb46ec746ea1a666730787353e87182"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c9bd70772c720142be1020eac55f8143a34ec9f82d75a8e7a07852023e46617f"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b8ed04b3582771764538f7ee7001b02e1170223cf9b75dff0bc698fadb00cf3"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6dac87ddb34aaec85f873d737e9d06a3555a1cc1a8e0c44b7f8d5daeb89d86f"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ca4ae5a27ad7a4ee5170aebce1574b375de390bc01284f87b18d43a3984df72"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:886eec03591b7cf058467a70a87733b35f44707bd86cf64a615584fd72488b7c"}, + {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ca7b0c1f1c983e064caa85f3792dd2fe3526b3505378874afa84baf662e12241"}, + {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b4356d3538c3649337df4074e81b85f0616b79731fe22dd11b99499b2ebbdf3"}, + {file = "pydantic_core-2.18.2-cp312-none-win32.whl", hash = "sha256:8b172601454f2d7701121bbec3425dd71efcb787a027edf49724c9cefc14c038"}, + {file = "pydantic_core-2.18.2-cp312-none-win_amd64.whl", hash = "sha256:b1bd7e47b1558ea872bd16c8502c414f9e90dcf12f1395129d7bb42a09a95438"}, + {file = "pydantic_core-2.18.2-cp312-none-win_arm64.whl", hash = "sha256:98758d627ff397e752bc339272c14c98199c613f922d4a384ddc07526c86a2ec"}, + {file = "pydantic_core-2.18.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:9fdad8e35f278b2c3eb77cbdc5c0a49dada440657bf738d6905ce106dc1de439"}, + {file = "pydantic_core-2.18.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1d90c3265ae107f91a4f279f4d6f6f1d4907ac76c6868b27dc7fb33688cfb347"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390193c770399861d8df9670fb0d1874f330c79caaca4642332df7c682bf6b91"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:82d5d4d78e4448683cb467897fe24e2b74bb7b973a541ea1dcfec1d3cbce39fb"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4774f3184d2ef3e14e8693194f661dea5a4d6ca4e3dc8e39786d33a94865cefd"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4d938ec0adf5167cb335acb25a4ee69a8107e4984f8fbd2e897021d9e4ca21b"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0e8b1be28239fc64a88a8189d1df7fad8be8c1ae47fcc33e43d4be15f99cc70"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:868649da93e5a3d5eacc2b5b3b9235c98ccdbfd443832f31e075f54419e1b96b"}, + {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:78363590ef93d5d226ba21a90a03ea89a20738ee5b7da83d771d283fd8a56761"}, + {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:852e966fbd035a6468fc0a3496589b45e2208ec7ca95c26470a54daed82a0788"}, + {file = "pydantic_core-2.18.2-cp38-none-win32.whl", hash = "sha256:6a46e22a707e7ad4484ac9ee9f290f9d501df45954184e23fc29408dfad61350"}, + {file = "pydantic_core-2.18.2-cp38-none-win_amd64.whl", hash = "sha256:d91cb5ea8b11607cc757675051f61b3d93f15eca3cefb3e6c704a5d6e8440f4e"}, + {file = "pydantic_core-2.18.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:ae0a8a797a5e56c053610fa7be147993fe50960fa43609ff2a9552b0e07013e8"}, + {file = "pydantic_core-2.18.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:042473b6280246b1dbf530559246f6842b56119c2926d1e52b631bdc46075f2a"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a388a77e629b9ec814c1b1e6b3b595fe521d2cdc625fcca26fbc2d44c816804"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e25add29b8f3b233ae90ccef2d902d0ae0432eb0d45370fe315d1a5cf231004b"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f459a5ce8434614dfd39bbebf1041952ae01da6bed9855008cb33b875cb024c0"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eff2de745698eb46eeb51193a9f41d67d834d50e424aef27df2fcdee1b153845"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8309f67285bdfe65c372ea3722b7a5642680f3dba538566340a9d36e920b5f0"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f93a8a2e3938ff656a7c1bc57193b1319960ac015b6e87d76c76bf14fe0244b4"}, + {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:22057013c8c1e272eb8d0eebc796701167d8377441ec894a8fed1af64a0bf399"}, + {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cfeecd1ac6cc1fb2692c3d5110781c965aabd4ec5d32799773ca7b1456ac636b"}, + {file = "pydantic_core-2.18.2-cp39-none-win32.whl", hash = "sha256:0d69b4c2f6bb3e130dba60d34c0845ba31b69babdd3f78f7c0c8fae5021a253e"}, + {file = "pydantic_core-2.18.2-cp39-none-win_amd64.whl", hash = "sha256:d9319e499827271b09b4e411905b24a426b8fb69464dfa1696258f53a3334641"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a1874c6dd4113308bd0eb568418e6114b252afe44319ead2b4081e9b9521fe75"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:ccdd111c03bfd3666bd2472b674c6899550e09e9f298954cfc896ab92b5b0e6d"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e18609ceaa6eed63753037fc06ebb16041d17d28199ae5aba0052c51449650a9"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e5c584d357c4e2baf0ff7baf44f4994be121e16a2c88918a5817331fc7599d7"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43f0f463cf89ace478de71a318b1b4f05ebc456a9b9300d027b4b57c1a2064fb"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e1b395e58b10b73b07b7cf740d728dd4ff9365ac46c18751bf8b3d8cca8f625a"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0098300eebb1c837271d3d1a2cd2911e7c11b396eac9661655ee524a7f10587b"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:36789b70d613fbac0a25bb07ab3d9dba4d2e38af609c020cf4d888d165ee0bf3"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3f9a801e7c8f1ef8718da265bba008fa121243dfe37c1cea17840b0944dfd72c"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:3a6515ebc6e69d85502b4951d89131ca4e036078ea35533bb76327f8424531ce"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20aca1e2298c56ececfd8ed159ae4dde2df0781988c97ef77d5c16ff4bd5b400"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:223ee893d77a310a0391dca6df00f70bbc2f36a71a895cecd9a0e762dc37b349"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2334ce8c673ee93a1d6a65bd90327588387ba073c17e61bf19b4fd97d688d63c"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cbca948f2d14b09d20268cda7b0367723d79063f26c4ffc523af9042cad95592"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b3ef08e20ec49e02d5c6717a91bb5af9b20f1805583cb0adfe9ba2c6b505b5ae"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6fdc8627910eed0c01aed6a390a252fe3ea6d472ee70fdde56273f198938374"}, + {file = "pydantic_core-2.18.2.tar.gz", hash = "sha256:2e29d20810dfc3043ee13ac7d9e25105799817683348823f305ab3f349b9386e"}, ] [package.dependencies] @@ -1279,28 +1274,32 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pydantic-settings" -version = "2.1.0" +version = "2.2.1" description = "Settings management using Pydantic" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_settings-2.1.0-py3-none-any.whl", hash = "sha256:7621c0cb5d90d1140d2f0ef557bdf03573aac7035948109adf2574770b77605a"}, - {file = "pydantic_settings-2.1.0.tar.gz", hash = "sha256:26b1492e0a24755626ac5e6d715e9077ab7ad4fb5f19a8b7ed7011d52f36141c"}, + {file = "pydantic_settings-2.2.1-py3-none-any.whl", hash = "sha256:0235391d26db4d2190cb9b31051c4b46882d28a51533f97440867f012d4da091"}, + {file = "pydantic_settings-2.2.1.tar.gz", hash = "sha256:00b9f6a5e95553590434c0fa01ead0b216c3e10bc54ae02e37f359948643c5ed"}, ] [package.dependencies] pydantic = ">=2.3.0" python-dotenv = ">=0.21.0" +[package.extras] +toml = ["tomli (>=2.0.1)"] +yaml = ["pyyaml (>=6.0.1)"] + [[package]] name = "pyflakes" -version = "3.1.0" +version = "3.2.0" description = "passive checker of Python programs" optional = false python-versions = ">=3.8" files = [ - {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"}, - {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, + {file = "pyflakes-3.2.0-py2.py3-none-any.whl", hash = "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"}, + {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, ] [[package]] @@ -1333,13 +1332,13 @@ pyserial = "*" [[package]] name = "pytest" -version = "7.4.3" +version = "7.4.4" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, - {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, + {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, + {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, ] [package.dependencies] @@ -1353,13 +1352,13 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no [[package]] name = "pytest-asyncio" -version = "0.23.5" +version = "0.23.6" description = "Pytest support for asyncio" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-asyncio-0.23.5.tar.gz", hash = "sha256:3a048872a9c4ba14c3e90cc1aa20cbc2def7d01c7c8db3777ec281ba9c057675"}, - {file = "pytest_asyncio-0.23.5-py3-none-any.whl", hash = "sha256:4e7093259ba018d58ede7d5315131d21923a60f8a6e9ee266ce1589685c89eac"}, + {file = "pytest-asyncio-0.23.6.tar.gz", hash = "sha256:ffe523a89c1c222598c76856e76852b787504ddb72dd5d9b6617ffa8aa2cde5f"}, + {file = "pytest_asyncio-0.23.6-py3-none-any.whl", hash = "sha256:68516fdd1018ac57b846c9846b954f0393b26f094764a28c955eabb0536a4e8a"}, ] [package.dependencies] @@ -1371,13 +1370,13 @@ testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"] [[package]] name = "pytest-cov" -version = "4.1.0" +version = "5.0.0" description = "Pytest plugin for measuring coverage." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, - {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, + {file = "pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857"}, + {file = "pytest_cov-5.0.0-py3-none-any.whl", hash = "sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652"}, ] [package.dependencies] @@ -1385,26 +1384,26 @@ coverage = {version = ">=5.2.1", extras = ["toml"]} pytest = ">=4.6" [package.extras] -testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] [[package]] name = "pytest-docker" -version = "2.0.1" +version = "3.1.1" description = "Simple pytest fixtures for Docker and Docker Compose based tests" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "pytest-docker-2.0.1.tar.gz", hash = "sha256:1c17e9202a566f85ed5ef269fe2815bd4899e90eb639622e5d14277372ca7524"}, - {file = "pytest_docker-2.0.1-py3-none-any.whl", hash = "sha256:7103f97b8c479c826b63d73cfb83383dc1970d35105ed1ce78a722c90c7fe650"}, + {file = "pytest-docker-3.1.1.tar.gz", hash = "sha256:2371524804a752aaa766c79b9eee8e634534afddb82597f3b573da7c5d6ffb5f"}, + {file = "pytest_docker-3.1.1-py3-none-any.whl", hash = "sha256:fd0d48d6feac41f62acbc758319215ec9bb805c2309622afb07c27fa5c5ae362"}, ] [package.dependencies] attrs = ">=19.2.0" -pytest = ">=4.0,<8.0" +pytest = ">=4.0,<9.0" [package.extras] docker-compose-v1 = ["docker-compose (>=1.27.3,<2.0)"] -tests = ["pytest-pycodestyle (>=2.0.0,<3.0)", "pytest-pylint (>=0.14.1,<1.0)", "requests (>=2.22.0,<3.0)"] +tests = ["mypy (>=0.500,<2.000)", "pytest-mypy (>=0.10,<1.0)", "pytest-pycodestyle (>=2.0.0,<3.0)", "pytest-pylint (>=0.14.1,<1.0)", "requests (>=2.22.0,<3.0)", "types-requests (>=2.31,<3.0)", "types-setuptools (>=69.0,<70.0)"] [[package]] name = "pytest-httpx" @@ -1426,30 +1425,30 @@ testing = ["pytest-asyncio (==0.21.*)", "pytest-cov (==4.*)"] [[package]] name = "pytest-mock" -version = "3.12.0" +version = "3.14.0" description = "Thin-wrapper around the mock package for easier use with pytest" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-mock-3.12.0.tar.gz", hash = "sha256:31a40f038c22cad32287bb43932054451ff5583ff094bca6f675df2f8bc1a6e9"}, - {file = "pytest_mock-3.12.0-py3-none-any.whl", hash = "sha256:0972719a7263072da3a21c7f4773069bcc7486027d7e8e1f81d98a47e701bc4f"}, + {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, + {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, ] [package.dependencies] -pytest = ">=5.0" +pytest = ">=6.2.5" [package.extras] dev = ["pre-commit", "pytest-asyncio", "tox"] [[package]] name = "python-dotenv" -version = "1.0.0" +version = "1.0.1" description = "Read key-value pairs from a .env file and set them as environment variables" optional = false python-versions = ">=3.8" files = [ - {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, - {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, + {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, + {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, ] [package.extras] @@ -1491,7 +1490,6 @@ files = [ {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_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {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"}, @@ -1539,19 +1537,19 @@ files = [ [[package]] name = "setuptools" -version = "69.0.2" +version = "69.5.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.0.2-py3-none-any.whl", hash = "sha256:1e8fdff6797d3865f37397be788a4e3cba233608e9b509382a2777d25ebde7f2"}, - {file = "setuptools-69.0.2.tar.gz", hash = "sha256:735896e78a4742605974de002ac60562d286fa8051a7e2299445e8e8fbb01aa6"}, + {file = "setuptools-69.5.1-py3-none-any.whl", hash = "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32"}, + {file = "setuptools-69.5.1.tar.gz", hash = "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "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] (>=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"] +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-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "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.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" @@ -1566,41 +1564,41 @@ files = [ [[package]] name = "sniffio" -version = "1.3.0" +version = "1.3.1" description = "Sniff out which async library your code is running under" optional = false python-versions = ">=3.7" files = [ - {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, - {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, ] [[package]] name = "starlette" -version = "0.35.1" +version = "0.36.3" description = "The little ASGI library that shines." optional = false python-versions = ">=3.8" files = [ - {file = "starlette-0.35.1-py3-none-any.whl", hash = "sha256:50bbbda9baa098e361f398fda0928062abbaf1f54f4fadcbe17c092a01eb9a25"}, - {file = "starlette-0.35.1.tar.gz", hash = "sha256:3e2639dac3520e4f58734ed22553f950d3f3cb1001cd2eaac4d57e8cdc5f66bc"}, + {file = "starlette-0.36.3-py3-none-any.whl", hash = "sha256:13d429aa93a61dc40bf503e8c801db1f1bca3dc706b10ef2434a36123568f044"}, + {file = "starlette-0.36.3.tar.gz", hash = "sha256:90a671733cfb35771d8cc605e0b679d23b992f8dcfad48cc60b38cb29aeb7080"}, ] [package.dependencies] anyio = ">=3.4.0,<5" [package.extras] -full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyaml"] +full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"] [[package]] name = "typing-extensions" -version = "4.8.0" +version = "4.11.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, - {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, + {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, + {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, ] [[package]] @@ -1857,4 +1855,4 @@ h11 = ">=0.9.0,<1" [metadata] lock-version = "2.0" python-versions = ">=3.11,<4" -content-hash = "ca716a7dd50a19bc95a9a053cbc59eaa0c51602f3747da3f1c5eebd044f9317f" +content-hash = "a216dd3f792a5f40912d6350cf204c539bf8c341a508b2a5a368b63ec2837afa" diff --git a/pyproject.toml b/pyproject.toml index 8ed5ca69..9e87d645 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,6 +25,8 @@ pydantic-settings = "^2.1.0" websockets = "^12.0" httpx-ws = "^0.4.3" dnspython = "^2.4.2" +bidict = "^0.23.1" +cryptography = "42.0.5" [tool.poetry.group.dev.dependencies] pytest = "*" @@ -42,7 +44,7 @@ pytest-httpx = "*" asgi-lifespan = "*" [build-system] -requires = ["poetry-core>=1.0.0"] +requires = ["poetry-core>=1.0.0", "cryptography==42.0.5"] build-backend = "poetry.core.masonry.api" [tool.pyright] diff --git a/test/test_codec.py b/test/test_codec.py index 6a09ab6d..f6ed8bd0 100644 --- a/test/test_codec.py +++ b/test/test_codec.py @@ -25,16 +25,6 @@ def app() -> FastAPI: return FastAPI() -async def test_type_conversion(): - for (joined, split) in [ - ['Pid', ('Pid', None)], - ['Pid.subtype', ('Pid', 'subtype')], - ['Pid.subtype.subsubtype', ('Pid', 'subtype.subsubtype')] - ]: - assert codec.split_type(joined) == split - assert codec.join_type(*split) == joined - - async def test_encode_system_objects(): cdc = codec.CV.get() @@ -106,15 +96,15 @@ async def test_deprecated_object(): payload = cdc.encode_payload(DecodedPayload( blockId=1, - blockType='DeprecatedObject', - content={'actualId': 100}, + blockType='Deprecated', + content={'bytes': 'ZAA='}, )) assert payload.blockType == 65533 assert payload.content == 'ZAA=' payload = cdc.decode_payload(payload) - assert payload.blockType == 'DeprecatedObject' - assert payload.content == {'actualId': 100} + assert payload.blockType == 'Deprecated' + assert payload.content == {'bytes': 'ZAA='} async def test_encode_constraint(): @@ -158,15 +148,12 @@ async def test_encode_submessage(): payload = cdc.encode_payload(DecodedPayload( blockId=1, blockType='EdgeCase', - subtype='SubCase', content={} )) assert payload.blockType == 9001 - assert payload.subtype == 1 payload = cdc.decode_payload(payload) assert payload.blockType == 'EdgeCase' - assert payload.subtype == 'SubCase' # Interface encoding payload = cdc.encode_payload(DecodedPayload( diff --git a/test/test_datastore_blocks.py b/test/test_datastore_blocks.py deleted file mode 100644 index 0cacb4ac..00000000 --- a/test/test_datastore_blocks.py +++ /dev/null @@ -1,150 +0,0 @@ -import asyncio -from datetime import timedelta -from unittest.mock import ANY - -import pytest -from asgi_lifespan import LifespanManager -from fastapi import FastAPI -from pytest_httpx import HTTPXMock - -from brewblox_devcon_spark import (const, datastore_blocks, exceptions, - state_machine, utils) -from brewblox_devcon_spark.models import (ControllerDescription, - DeviceDescription, TwinKeyEntry) - -TESTED = datastore_blocks.__name__ - - -def read_objects() -> list[TwinKeyEntry]: - return datastore_blocks.SYS_OBJECTS[:1] + [ - TwinKeyEntry(keys=(f'key{i}', i+const.USER_NID_START), data={}) - for i in range(10) - ] - - -@pytest.fixture -def app() -> FastAPI: - config = utils.get_config() - config.datastore_flush_delay = timedelta() - - state_machine.setup() - datastore_blocks.setup() - return FastAPI() - - -@pytest.fixture(autouse=True) -async def manager(manager: LifespanManager): - yield manager - - -async def test_load_flush(httpx_mock: HTTPXMock): - config = utils.get_config() - state = state_machine.CV.get() - store = datastore_blocks.CV.get() - - default_length = len(datastore_blocks.SYS_OBJECTS) - read_length = default_length + len(read_objects()) - 1 # overlapping item is merged - - assert len(store.items()) == 0 - - # Invalid format - httpx_mock.add_response(url=f'{config.datastore_url}/get', - match_json={'id': f'mock__{config.name}-blocks-db', - 'namespace': const.SERVICE_NAMESPACE}, - json={}) - - httpx_mock.add_response(url=f'{config.datastore_url}/get', - match_json={'id': f'mock__{config.name}-blocks-db', - 'namespace': const.SERVICE_NAMESPACE}, - json={ - 'value': { - 'id': f'mock__{config.name}-blocks-db', - 'namespace': const.SERVICE_NAMESPACE, - 'data': [v.model_dump(mode='json') - for v in read_objects()], - }, - }) - - httpx_mock.add_response(url=f'{config.datastore_url}/set', - match_json={ - 'value': { - 'id': f'mock__{config.name}-blocks-db', - 'namespace': const.SERVICE_NAMESPACE, - 'data': ANY - }, - }) - - async with asyncio.timeout(10): - # Can't load before acknowledged - with pytest.raises(exceptions.NotConnected): - await store.load() - - # Can't flush before acknowledged - with pytest.raises(exceptions.NotConnected): - await store.flush() - - state.set_enabled(True) - state.set_connected('MOCK', '') - state.set_acknowledged(ControllerDescription( - system_version='', - platform='mock', - reset_reason='', - firmware=state.desc().service.firmware.model_copy(), - device=DeviceDescription(device_id='1234'), - )) - - # First attempt gets invalid data, and falls back on defaults - await store.load() - assert len(store.items()) == default_length - - await store.load() - assert len(store.items()) == read_length - - # flush on insert - store['inserted', 9001] = {} - assert len(store.items()) == read_length + 1 - await store.flush() - - # Flush on remove - del store['inserted', 9001] - assert len(store.items()) == read_length - await store.flush() - - # Does nothing if not changed - await store.flush() - - assert len(httpx_mock.get_requests(url=f'{config.datastore_url}/set')) == 2 - - -async def test_load_error(httpx_mock: HTTPXMock): - config = utils.get_config() - state = state_machine.CV.get() - store = datastore_blocks.CV.get() - - httpx_mock.add_response(url=f'{config.datastore_url}/get', - match_json={'id': '1234-blocks-db', - 'namespace': const.SERVICE_NAMESPACE}, - json={ - 'value': { - 'id': '1234-blocks-db', - 'namespace': const.SERVICE_NAMESPACE, - 'data': 'miniaturized giant hamsters from outer space', - }, - }) - - # Removed after load - store['inserted', 9001] = {} - - state.set_enabled(True) - state.set_connected('TCP', '') - state.set_acknowledged(ControllerDescription( - system_version='', - platform='dummy', - reset_reason='', - firmware=state.desc().service.firmware.model_copy(), - device=DeviceDescription(device_id='1234'), - )) - - async with asyncio.timeout(10): - await store.load() - assert len(store.items()) == len(datastore_blocks.SYS_OBJECTS) diff --git a/test/test_integration.py b/test/test_integration.py index 51241260..d7376ea7 100644 --- a/test/test_integration.py +++ b/test/test_integration.py @@ -16,8 +16,7 @@ DatastoreMultiQuery, DecodedPayload, EncodedMessage, EncodedPayload, ErrorCode, IntermediateRequest, - IntermediateResponse, Opcode, - TwinKeyEntry) + IntermediateResponse, Opcode) class DummmyError(BaseException): @@ -118,8 +117,9 @@ async def test_create(client: AsyncClient, block_args: Block): # Conflict error: name already taken resp = await client.post('/blocks/create', json=block_args.model_dump()) - assert resp.status_code == 409 + assert resp.status_code == 500 + block_args.nid = 0 block_args.id = 'other_obj' resp = await client.post('/blocks/create', json=block_args.model_dump()) assert Block.model_validate_json(resp.text).id == block_args.id @@ -445,25 +445,6 @@ async def test_delete_all(client: AsyncClient, block_args: Block): assert len(resp.json()) == n_sys_obj -async def test_cleanup(client: AsyncClient, block_args: Block): - store = datastore_blocks.CV.get() - resp = await client.post('/blocks/create', json=block_args.model_dump()) - assert resp.status_code == 201 - - store['unused', 456] = {} - - resp = await client.post('/blocks/cleanup') - retv = resp.json() - expected = { - 'id': 'unused', - 'nid': 456, - 'type': None, - 'serviceId': 'sparkey', - } - assert expected in retv - assert not [v for v in retv if v['id'] == 'testobj'] - - async def test_rename(client: AsyncClient, block_args: Block): resp = await client.post('/blocks/create', json=block_args.model_dump()) assert resp.status_code == 201 @@ -587,12 +568,8 @@ async def test_backup_save(client: AsyncClient, block_args: Block): async def test_backup_load(client: AsyncClient, spark_blocks: list[Block]): - # reverse the set, to ensure some blocks are written with invalid references - backup = Backup( - store=[TwinKeyEntry(keys=(block.id, block.nid), data={}) - for block in spark_blocks], - blocks=spark_blocks[::-1] - ) + # reverse the set, to ensure some blocks link to later blocks + backup = Backup(blocks=spark_blocks[::-1]) resp = await client.post('/blocks/backup/load', json=backup.model_dump()) assert resp.json() == {'messages': []} @@ -611,15 +588,12 @@ async def test_backup_load(client: AsyncClient, spark_blocks: list[Block]): data={}, )) - # Add an unused store alias - backup.store.append(TwinKeyEntry( - keys=('TROLOLOL', 9999), - data={})) - - # Add renamed type to store data - backup.store.append(TwinKeyEntry( - keys=('renamed_display_settings', const.DISPLAY_SETTINGS_NID), - data={}, + # Add a block that has an unknown link + backup.blocks.append(Block( + id='fantast', + nid=400, + type='SetpointSensorPair', + data={'sensorId<>': 'going to another high school'} )) # Add a Block that will fail to be created, and should be skipped @@ -632,13 +606,13 @@ async def test_backup_load(client: AsyncClient, spark_blocks: list[Block]): resp = await client.post('/blocks/backup/load', json=backup.model_dump()) resp = resp.json()['messages'] - assert len(resp) == 2 - assert 'derpface' in resp[0] - assert 'TROLOLOL' in resp[1] + assert len(resp) == 3 + assert 'fantast' in resp[0] + assert 'Groups' in resp[1] + assert 'derpface' in resp[2] resp = await client.post('/blocks/all/read') resp_ids = ret_ids(resp.json()) - assert 'renamed_display_settings' in resp_ids assert 'derpface' not in resp_ids diff --git a/test/test_spark_api.py b/test/test_spark_api.py index 8ad1eb2e..ac4cdc9d 100644 --- a/test/test_spark_api.py +++ b/test/test_spark_api.py @@ -7,7 +7,7 @@ from fastapi import FastAPI from pytest_mock import MockerFixture -from brewblox_devcon_spark import (codec, command, connection, const, +from brewblox_devcon_spark import (codec, command, connection, datastore_blocks, datastore_settings, exceptions, mqtt, spark_api, state_machine, synchronization, utils) @@ -49,6 +49,7 @@ async def manager(manager: LifespanManager): async def test_merge(): + await state_machine.CV.get().wait_synchronized() assert spark_api.merge( {}, {'a': True} @@ -67,41 +68,13 @@ async def test_merge(): ) == {'nested': {'a': True, 'b': True}, 'second': 'empty'} -@pytest.mark.parametrize('sid', [ - 'flabber', - 'FLABBER', - 'f(1)', - 'l12142|35234231', - 'word'*50, -]) -async def test_validate_sid(sid: str): - spark_api.CV.get()._validate_sid(sid) - - -@pytest.mark.parametrize('sid', [ - '1', - '1adsjlfdsf', - 'pancakes[delicious]', - '[', - 'f]abbergasted', - '', - 'word'*51, - 'brackey><', - 'SystemInfo', - 'SparkPins', - 'a;ljfoihoewr*&(%&^&*%*&^(*&^(', -]) -async def test_validate_sid_error(sid: str): - with pytest.raises(exceptions.InvalidId): - spark_api.CV.get()._validate_sid(sid) - - async def test_to_firmware_block(): + await state_machine.CV.get().wait_synchronized() store = datastore_blocks.CV.get() api = spark_api.CV.get() - store['alias', 123] = dict() - store['4-2', 24] = dict() + store['alias'] = 123 + store['4-2'] = 24 assert api._to_firmware_block(Block(id='alias', type='', data={})).nid == 123 assert api._to_firmware_block(Block(nid=840, type='', data={})).nid == 840 @@ -120,26 +93,28 @@ async def test_to_firmware_block(): async def test_to_block(): + await state_machine.CV.get().wait_synchronized() store = datastore_blocks.CV.get() api = spark_api.CV.get() - store['alias', 123] = dict() - store['4-2', 24] = dict() + store['alias'] = 123 + store['4-2'] = 24 assert api._to_block(FirmwareBlock(nid=123, type='', data={})).id == 'alias' # Service ID not found: create placeholder generated = api._to_block(FirmwareBlock(nid=456, type='', data={})) - assert generated.id.startswith(const.GENERATED_ID_PREFIX) + assert generated.id == '456' async def test_resolve_data_ids(): + await state_machine.CV.get().wait_synchronized() store = datastore_blocks.CV.get() api = spark_api.CV.get() - store['eeney', 9001] = dict() - store['miney', 9002] = dict() - store['moo', 9003] = dict() + store['eeney'] = 9001 + store['miney'] = 9002 + store['moo'] = 9003 def create_data(): return { @@ -229,6 +204,7 @@ async def test_check_connection(mocker: MockerFixture): async def test_start_update(): + await state_machine.CV.get().wait_synchronized() state = state_machine.CV.get() api = spark_api.CV.get() diff --git a/test/test_synchronization.py b/test/test_synchronization.py index 16bf6815..d4ffe259 100644 --- a/test/test_synchronization.py +++ b/test/test_synchronization.py @@ -1,7 +1,6 @@ import asyncio from contextlib import asynccontextmanager from datetime import timedelta -from unittest.mock import AsyncMock import pytest from asgi_lifespan import LifespanManager @@ -64,14 +63,8 @@ def app() -> FastAPI: return FastAPI(lifespan=lifespan) -@pytest.fixture -def m_load_blocks(app: FastAPI, mocker: MockerFixture): - m = mocker.patch.object(datastore_blocks.CV.get(), 'load', autospec=True) - return m - - @pytest.fixture(autouse=True) -async def manager(manager: LifespanManager, m_load_blocks: AsyncMock): +async def manager(manager: LifespanManager): yield manager @@ -86,8 +79,9 @@ async def test_sync_status(m_sleep): assert states() == [False, True, True, True] -async def test_sync_errors(m_load_blocks: AsyncMock): - m_load_blocks.side_effect = RuntimeError +async def test_sync_errors(mocker: MockerFixture): + m_read_names = mocker.patch.object(command.CV.get(), 'read_all_block_names', autospec=True) + m_read_names.side_effect = RuntimeError with pytest.raises(RuntimeError): await connect() diff --git a/test/test_twinkeydict.py b/test/test_twinkeydict.py deleted file mode 100644 index 88ef696a..00000000 --- a/test/test_twinkeydict.py +++ /dev/null @@ -1,134 +0,0 @@ -import pytest - -from brewblox_devcon_spark import twinkeydict - -TESTED = twinkeydict.__name__ - - -@pytest.fixture -def items(): - return [ - ('left', 'right', dict()), - (1, 2, None), - ('same', 'same', 'twins') - ] - - -@pytest.fixture -def store(): - return twinkeydict.TwinKeyDict() - - -def test_get_set(store: twinkeydict.TwinKeyDict, items: list[tuple]): - assert not store - store['tri', 'ang'] = 'le' - assert store - - for left, right, value in items: - store[left, right] = value - - for left, right, value in items: - assert store[None, right] == value - assert store[left, None] == value - assert store[left, right] == value - - assert store.get((left, right)) == value - assert store.get((left, None)) == value - assert store.get((None, right)) == value - - assert (left, right) in store - assert (left, None) in store - assert (None, right) in store - - assert store.get(('flip', 'flop'), 'default') == 'default' - - store['left', 'right'] = 'update' - assert store['left', 'right'] == 'update' - - # __getitem__ mismatched keys - with pytest.raises(twinkeydict.TwinKeyError): - assert store['same', 'right'] == 'no' - - # __setitem__ mismatched keys - with pytest.raises(twinkeydict.TwinKeyError): - store['left', 2] = 'mismatch' - - # get mismatched keys - with pytest.raises(twinkeydict.TwinKeyError): - store.get(('left', 2)) - - # get None/None - with pytest.raises(twinkeydict.TwinKeyError): - assert store[None, None] == 'no' - - # set None/None - with pytest.raises(twinkeydict.TwinKeyError): - store[None, None] = 'pancakes' - - -def test_pop_del(store: twinkeydict.TwinKeyDict, items: list[tuple]): - for left, right, value in items: - store[left, right] = value - - with pytest.raises(ValueError): - del store['left'] - - del store['left', None] - assert len(store) == 2 - assert store.get(('left', 'right')) is None - assert ('left', 'right') not in store - - assert store.pop(('same', None)) == 'twins' - with pytest.raises(KeyError): - store.pop(('same', 'same')) - - assert len(store) == 1 - assert (None, 'same') not in store - - -def test_rename(store: twinkeydict.TwinKeyDict): - store['wabber', 'jockey'] = 'alice' - store.rename(('wabber', None), ('blobber', None)) - with pytest.raises(twinkeydict.TwinKeyError): - assert ('wabber', 'jockey') not in store - assert store['blobber', 'jockey'] == 'alice' - - store.rename((None, 'jockey'), (None, 'blibber')) - assert store['blobber', 'blibber'] == 'alice' - - store.rename(('blobber', 'blibber'), ('something', 'different')) - assert store['something', 'different'] - - with pytest.raises(twinkeydict.TwinKeyError): - store.rename(('something', 'different'), (None, None)) - - with pytest.raises(twinkeydict.TwinKeyError): - store.rename((None, None), ('something', 'different')) - - assert store['something', 'different'] - assert len(store) == 1 - - -def test_iterate(store, items): - for left, right, value in items: - store[left, right] = value - - assert len(store) == len(items) - assert [(left, right, value) for ((left, right), value) in store.items()] == items - - -def test_other_key(store): - store['cheese', 'wine'] = {} - store['caviar', 'vodka'] = {} - - assert store.left_key('wine') == 'cheese' - assert store.right_key('caviar') == 'vodka' - - with pytest.raises(KeyError): - store.left_key('cheese') - - with pytest.raises(KeyError): - store.right_key('vodka') - - assert store.left_key('cheese', 'mac') == 'mac' - assert store.right_key('vodka', None) is None