quilt-hp-python 0.1.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. quilt_hp/__init__.py +22 -0
  2. quilt_hp/_paths.py +26 -0
  3. quilt_hp/_proto/__init__.py +0 -0
  4. quilt_hp/_proto/quilt_device_pairing_pb2.py +56 -0
  5. quilt_hp/_proto/quilt_device_pairing_pb2.pyi +317 -0
  6. quilt_hp/_proto/quilt_device_pairing_pb2_grpc.py +24 -0
  7. quilt_hp/_proto/quilt_hds_pb2.py +292 -0
  8. quilt_hp/_proto/quilt_hds_pb2.pyi +3947 -0
  9. quilt_hp/_proto/quilt_hds_pb2_grpc.py +1732 -0
  10. quilt_hp/_proto/quilt_notifier_pb2.py +55 -0
  11. quilt_hp/_proto/quilt_notifier_pb2.pyi +258 -0
  12. quilt_hp/_proto/quilt_notifier_pb2_grpc.py +97 -0
  13. quilt_hp/_proto/quilt_services_pb2.py +171 -0
  14. quilt_hp/_proto/quilt_services_pb2.pyi +1320 -0
  15. quilt_hp/_proto/quilt_services_pb2_grpc.py +1188 -0
  16. quilt_hp/_proto/quilt_system_pb2.py +53 -0
  17. quilt_hp/_proto/quilt_system_pb2.pyi +164 -0
  18. quilt_hp/_proto/quilt_system_pb2_grpc.py +270 -0
  19. quilt_hp/auth.py +244 -0
  20. quilt_hp/cli/__init__.py +1 -0
  21. quilt_hp/cli/main.py +770 -0
  22. quilt_hp/cli/settings.py +123 -0
  23. quilt_hp/cli/store.py +105 -0
  24. quilt_hp/cli/tui.py +2677 -0
  25. quilt_hp/client.py +616 -0
  26. quilt_hp/const.py +57 -0
  27. quilt_hp/exceptions.py +23 -0
  28. quilt_hp/models/__init__.py +85 -0
  29. quilt_hp/models/comfort.py +47 -0
  30. quilt_hp/models/controller.py +135 -0
  31. quilt_hp/models/energy.py +31 -0
  32. quilt_hp/models/enums.py +298 -0
  33. quilt_hp/models/indoor_unit.py +412 -0
  34. quilt_hp/models/outdoor_unit.py +71 -0
  35. quilt_hp/models/qsm.py +105 -0
  36. quilt_hp/models/schedule.py +98 -0
  37. quilt_hp/models/sensor.py +92 -0
  38. quilt_hp/models/software_update.py +74 -0
  39. quilt_hp/models/space.py +177 -0
  40. quilt_hp/models/system.py +451 -0
  41. quilt_hp/py.typed +1 -0
  42. quilt_hp/services/__init__.py +1 -0
  43. quilt_hp/services/hds.py +480 -0
  44. quilt_hp/services/streaming.py +561 -0
  45. quilt_hp/services/system.py +95 -0
  46. quilt_hp/services/user.py +143 -0
  47. quilt_hp/tokens.py +119 -0
  48. quilt_hp/transport.py +192 -0
  49. quilt_hp_python-0.1.1.dist-info/METADATA +172 -0
  50. quilt_hp_python-0.1.1.dist-info/RECORD +53 -0
  51. quilt_hp_python-0.1.1.dist-info/WHEEL +4 -0
  52. quilt_hp_python-0.1.1.dist-info/entry_points.txt +2 -0
  53. quilt_hp_python-0.1.1.dist-info/licenses/LICENSE +21 -0
quilt_hp/__init__.py ADDED
@@ -0,0 +1,22 @@
1
+ """quilt_hp — Async Python client for Quilt mini-split HVAC systems."""
2
+
3
+ from quilt_hp.client import QuiltClient
4
+ from quilt_hp.const import Environment
5
+ from quilt_hp.exceptions import (
6
+ QuiltAuthError,
7
+ QuiltConnectionError,
8
+ QuiltError,
9
+ QuiltNotFoundError,
10
+ )
11
+
12
+ __version__ = "0.1.1"
13
+
14
+ __all__ = [
15
+ "Environment",
16
+ "QuiltAuthError",
17
+ "QuiltClient",
18
+ "QuiltConnectionError",
19
+ "QuiltError",
20
+ "QuiltNotFoundError",
21
+ "__version__",
22
+ ]
quilt_hp/_paths.py ADDED
@@ -0,0 +1,26 @@
1
+ """Platform-appropriate config directory for quilt-hp.
2
+
3
+ macOS → ~/Library/Application Support/quilt-hp/
4
+ Linux → $XDG_CONFIG_HOME/quilt-hp/ (default ~/.config/quilt-hp/)
5
+ Windows → %APPDATA%\\quilt-hp\\
6
+
7
+ Files
8
+ -----
9
+ tokens.json Cached Cognito tokens, keyed by email
10
+ settings.json CLI/TUI user preferences (email, home, use_fahrenheit, dark)
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ from pathlib import Path
16
+
17
+ from platformdirs import user_config_dir
18
+
19
+ _APP = "quilt-hp"
20
+
21
+
22
+ def app_config_dir() -> Path:
23
+ """Return the platform-appropriate config directory, creating if needed."""
24
+ d = Path(user_config_dir(_APP))
25
+ d.mkdir(parents=True, exist_ok=True)
26
+ return d
File without changes
@@ -0,0 +1,56 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
4
+ # source: quilt_device_pairing.proto
5
+ # Protobuf Python Version: 6.31.1
6
+ """Generated protocol buffer code."""
7
+ from google.protobuf import descriptor as _descriptor
8
+ from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
10
+ from google.protobuf import symbol_database as _symbol_database
11
+ from google.protobuf.internal import builder as _builder
12
+ _runtime_version.ValidateProtobufRuntimeVersion(
13
+ _runtime_version.Domain.PUBLIC,
14
+ 6,
15
+ 31,
16
+ 1,
17
+ '',
18
+ 'quilt_device_pairing.proto'
19
+ )
20
+ # @@protoc_insertion_point(imports)
21
+
22
+ _sym_db = _symbol_database.Default()
23
+
24
+
25
+ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
26
+
27
+
28
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1aquilt_device_pairing.proto\x12\x10quilt.pairing.v1\x1a\x1fgoogle/protobuf/timestamp.proto\"\x89\x01\n\x08WifiScan\x12\x13\n\x0bmac_address\x18\x01 \x01(\t\x12\x0c\n\x04ssid\x18\x02 \x01(\t\x12\x11\n\tfrequency\x18\x03 \x01(\x05\x12\x0c\n\x04rssi\x18\x04 \x01(\x05\x12\x39\n\rsecurity_type\x18\x05 \x01(\x0e\x32\".quilt.pairing.v1.WifiSecurityType\"9\n\x0cWifiScanList\x12)\n\x05scans\x18\x01 \x03(\x0b\x32\x1a.quilt.pairing.v1.WifiScan\"p\n\x11WifiConfiguration\x12\x39\n\rsecurity_type\x18\x01 \x01(\x0e\x32\".quilt.pairing.v1.WifiSecurityType\x12\x0c\n\x04ssid\x18\x02 \x01(\t\x12\x12\n\npassphrase\x18\x03 \x01(\t\"\xb0\x02\n\x13\x44\x65viceConfiguration\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12\x13\n\x0b\x64\x65vice_uuid\x18\x02 \x01(\t\x12\x31\n\x0b\x64\x65vice_type\x18\x03 \x01(\x0e\x32\x1c.quilt.pairing.v1.DeviceType\x12\x16\n\x0e\x63loud_hostname\x18\x04 \x01(\t\x12\x16\n\x0etoken_hostname\x18\x05 \x01(\t\x12\x17\n\x0f\x63loud_host_port\x18\x06 \x01(\x05\x12\x17\n\x0ftoken_host_port\x18\x07 \x01(\x05\x12\x39\n\x0cwifi_configs\x18\x08 \x03(\x0b\x32#.quilt.pairing.v1.WifiConfiguration\x12\x10\n\x08space_id\x18\t \x01(\t\x12\x11\n\tsystem_id\x18\n \x01(\t\"\x98\x01\n\x1a\x44\x65viceConfigurationRequest\x12\x35\n\x11request_timestamp\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x43\n\x14\x64\x65vice_configuration\x18\x02 \x01(\x0b\x32%.quilt.pairing.v1.DeviceConfiguration\"T\n\x1b\x44\x65vicePairingStatusResponse\x12\x35\n\x06status\x18\x01 \x01(\x0e\x32%.quilt.pairing.v1.DevicePairingStatus\"9\n\x19\x44\x65viceConfigurationResult\x12\x1c\n\x14is_device_configured\x18\x01 \x01(\x08*n\n\x10WifiSecurityType\x12\x1e\n\x1aWIFI_SECURITY_TYPE_UNKNOWN\x10\x00\x12\x1b\n\x17WIFI_SECURITY_TYPE_NONE\x10\x01\x12\x1d\n\x19WIFI_SECURITY_TYPE_WPAPSK\x10\x02*\xed\x01\n\nDeviceType\x12\x17\n\x13\x44\x45VICE_TYPE_UNKNOWN\x10\x00\x12\"\n\x1e\x44\x45VICE_TYPE_QUILT_SMART_MODULE\x10\x01\x12\x1b\n\x17\x44\x45VICE_TYPE_INDOOR_UNIT\x10\x02\x12\x1c\n\x18\x44\x45VICE_TYPE_OUTDOOR_UNIT\x10\x03\x12\x1d\n\x19\x44\x45VICE_TYPE_CLOUD_SERVICE\x10\x04\x12\x1a\n\x16\x44\x45VICE_TYPE_CONTROLLER\x10\x05\x12\x13\n\x0f\x44\x45VICE_TYPE_IOS\x10\x06\x12\x17\n\x13\x44\x45VICE_TYPE_ANDROID\x10\x07*\xa9\x03\n\x13\x44\x65vicePairingStatus\x12!\n\x1d\x44\x45VICE_PAIRING_STATUS_UNKNOWN\x10\x00\x12\x1e\n\x1a\x44\x45VICE_PAIRING_STATUS_IDLE\x10\x01\x12,\n(DEVICE_PAIRING_STATUS_CONNECTING_TO_WIFI\x10\x02\x12\x38\n4DEVICE_PAIRING_STATUS_CONNECTED_TO_WIFI_SUCCESSFULLY\x10\x03\x12*\n&DEVICE_PAIRING_STATUS_WRONG_PASSPHRASE\x10\x04\x12$\n DEVICE_PAIRING_STATUS_WRONG_SSID\x10\x05\x12\x39\n5DEVICE_PAIRING_STATUS_CONNECTED_TO_CLOUD_SUCCESSFULLY\x10\x06\x12,\n(DEVICE_PAIRING_STATUS_ERROR_NO_DEVICE_ID\x10\x07\x12,\n(DEVICE_PAIRING_STATUS_ERROR_NO_SYSTEM_ID\x10\x08\x42\x19\n\x17\x63om.quilt.proto.pairingb\x06proto3')
29
+
30
+ _globals = globals()
31
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
32
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'quilt_device_pairing_pb2', _globals)
33
+ if not _descriptor._USE_C_DESCRIPTORS:
34
+ _globals['DESCRIPTOR']._loaded_options = None
35
+ _globals['DESCRIPTOR']._serialized_options = b'\n\027com.quilt.proto.pairing'
36
+ _globals['_WIFISECURITYTYPE']._serialized_start=1001
37
+ _globals['_WIFISECURITYTYPE']._serialized_end=1111
38
+ _globals['_DEVICETYPE']._serialized_start=1114
39
+ _globals['_DEVICETYPE']._serialized_end=1351
40
+ _globals['_DEVICEPAIRINGSTATUS']._serialized_start=1354
41
+ _globals['_DEVICEPAIRINGSTATUS']._serialized_end=1779
42
+ _globals['_WIFISCAN']._serialized_start=82
43
+ _globals['_WIFISCAN']._serialized_end=219
44
+ _globals['_WIFISCANLIST']._serialized_start=221
45
+ _globals['_WIFISCANLIST']._serialized_end=278
46
+ _globals['_WIFICONFIGURATION']._serialized_start=280
47
+ _globals['_WIFICONFIGURATION']._serialized_end=392
48
+ _globals['_DEVICECONFIGURATION']._serialized_start=395
49
+ _globals['_DEVICECONFIGURATION']._serialized_end=699
50
+ _globals['_DEVICECONFIGURATIONREQUEST']._serialized_start=702
51
+ _globals['_DEVICECONFIGURATIONREQUEST']._serialized_end=854
52
+ _globals['_DEVICEPAIRINGSTATUSRESPONSE']._serialized_start=856
53
+ _globals['_DEVICEPAIRINGSTATUSRESPONSE']._serialized_end=940
54
+ _globals['_DEVICECONFIGURATIONRESULT']._serialized_start=942
55
+ _globals['_DEVICECONFIGURATIONRESULT']._serialized_end=999
56
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,317 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ quilt_device_pairing.proto
5
+ BLE/WiFi device pairing protocol — serialized over Bluetooth (not gRPC).
6
+ Used during initial setup of Quilt Smart Module (QSM) and Controller devices.
7
+ Reconstructed from Quilt app v1.0.25 KMP source (ProtoSerializationClientService).
8
+ """
9
+
10
+ from collections import abc as _abc
11
+ from google.protobuf import descriptor as _descriptor
12
+ from google.protobuf import message as _message
13
+ from google.protobuf import timestamp_pb2 as _timestamp_pb2
14
+ from google.protobuf.internal import containers as _containers
15
+ from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
16
+ import builtins as _builtins
17
+ import sys
18
+ import typing as _typing
19
+
20
+ if sys.version_info >= (3, 11):
21
+ from typing import TypeAlias as _TypeAlias, Never as _Never
22
+ else:
23
+ from typing_extensions import TypeAlias as _TypeAlias, Never as _Never
24
+
25
+ DESCRIPTOR: _descriptor.FileDescriptor
26
+
27
+ class _WifiSecurityType:
28
+ ValueType = _typing.NewType("ValueType", _builtins.int)
29
+ V: _TypeAlias = ValueType # noqa: Y015
30
+
31
+ class _WifiSecurityTypeEnumTypeWrapper(_enum_type_wrapper._EnumTypeWrapper[_WifiSecurityType.ValueType], _builtins.type):
32
+ DESCRIPTOR: _descriptor.EnumDescriptor
33
+ WIFI_SECURITY_TYPE_UNKNOWN: _WifiSecurityType.ValueType # 0
34
+ WIFI_SECURITY_TYPE_NONE: _WifiSecurityType.ValueType # 1
35
+ WIFI_SECURITY_TYPE_WPAPSK: _WifiSecurityType.ValueType # 2
36
+
37
+ class WifiSecurityType(_WifiSecurityType, metaclass=_WifiSecurityTypeEnumTypeWrapper):
38
+ """---------------------------------------------------------------------------
39
+ Enums
40
+ ---------------------------------------------------------------------------
41
+ """
42
+
43
+ WIFI_SECURITY_TYPE_UNKNOWN: WifiSecurityType.ValueType # 0
44
+ WIFI_SECURITY_TYPE_NONE: WifiSecurityType.ValueType # 1
45
+ WIFI_SECURITY_TYPE_WPAPSK: WifiSecurityType.ValueType # 2
46
+ Global___WifiSecurityType: _TypeAlias = WifiSecurityType # noqa: Y015
47
+
48
+ class _DeviceType:
49
+ ValueType = _typing.NewType("ValueType", _builtins.int)
50
+ V: _TypeAlias = ValueType # noqa: Y015
51
+
52
+ class _DeviceTypeEnumTypeWrapper(_enum_type_wrapper._EnumTypeWrapper[_DeviceType.ValueType], _builtins.type):
53
+ DESCRIPTOR: _descriptor.EnumDescriptor
54
+ DEVICE_TYPE_UNKNOWN: _DeviceType.ValueType # 0
55
+ DEVICE_TYPE_QUILT_SMART_MODULE: _DeviceType.ValueType # 1
56
+ DEVICE_TYPE_INDOOR_UNIT: _DeviceType.ValueType # 2
57
+ DEVICE_TYPE_OUTDOOR_UNIT: _DeviceType.ValueType # 3
58
+ DEVICE_TYPE_CLOUD_SERVICE: _DeviceType.ValueType # 4
59
+ DEVICE_TYPE_CONTROLLER: _DeviceType.ValueType # 5
60
+ DEVICE_TYPE_IOS: _DeviceType.ValueType # 6
61
+ DEVICE_TYPE_ANDROID: _DeviceType.ValueType # 7
62
+
63
+ class DeviceType(_DeviceType, metaclass=_DeviceTypeEnumTypeWrapper): ...
64
+
65
+ DEVICE_TYPE_UNKNOWN: DeviceType.ValueType # 0
66
+ DEVICE_TYPE_QUILT_SMART_MODULE: DeviceType.ValueType # 1
67
+ DEVICE_TYPE_INDOOR_UNIT: DeviceType.ValueType # 2
68
+ DEVICE_TYPE_OUTDOOR_UNIT: DeviceType.ValueType # 3
69
+ DEVICE_TYPE_CLOUD_SERVICE: DeviceType.ValueType # 4
70
+ DEVICE_TYPE_CONTROLLER: DeviceType.ValueType # 5
71
+ DEVICE_TYPE_IOS: DeviceType.ValueType # 6
72
+ DEVICE_TYPE_ANDROID: DeviceType.ValueType # 7
73
+ Global___DeviceType: _TypeAlias = DeviceType # noqa: Y015
74
+
75
+ class _DevicePairingStatus:
76
+ ValueType = _typing.NewType("ValueType", _builtins.int)
77
+ V: _TypeAlias = ValueType # noqa: Y015
78
+
79
+ class _DevicePairingStatusEnumTypeWrapper(_enum_type_wrapper._EnumTypeWrapper[_DevicePairingStatus.ValueType], _builtins.type):
80
+ DESCRIPTOR: _descriptor.EnumDescriptor
81
+ DEVICE_PAIRING_STATUS_UNKNOWN: _DevicePairingStatus.ValueType # 0
82
+ DEVICE_PAIRING_STATUS_IDLE: _DevicePairingStatus.ValueType # 1
83
+ DEVICE_PAIRING_STATUS_CONNECTING_TO_WIFI: _DevicePairingStatus.ValueType # 2
84
+ DEVICE_PAIRING_STATUS_CONNECTED_TO_WIFI_SUCCESSFULLY: _DevicePairingStatus.ValueType # 3
85
+ DEVICE_PAIRING_STATUS_WRONG_PASSPHRASE: _DevicePairingStatus.ValueType # 4
86
+ DEVICE_PAIRING_STATUS_WRONG_SSID: _DevicePairingStatus.ValueType # 5
87
+ DEVICE_PAIRING_STATUS_CONNECTED_TO_CLOUD_SUCCESSFULLY: _DevicePairingStatus.ValueType # 6
88
+ DEVICE_PAIRING_STATUS_ERROR_NO_DEVICE_ID: _DevicePairingStatus.ValueType # 7
89
+ DEVICE_PAIRING_STATUS_ERROR_NO_SYSTEM_ID: _DevicePairingStatus.ValueType # 8
90
+
91
+ class DevicePairingStatus(_DevicePairingStatus, metaclass=_DevicePairingStatusEnumTypeWrapper): ...
92
+
93
+ DEVICE_PAIRING_STATUS_UNKNOWN: DevicePairingStatus.ValueType # 0
94
+ DEVICE_PAIRING_STATUS_IDLE: DevicePairingStatus.ValueType # 1
95
+ DEVICE_PAIRING_STATUS_CONNECTING_TO_WIFI: DevicePairingStatus.ValueType # 2
96
+ DEVICE_PAIRING_STATUS_CONNECTED_TO_WIFI_SUCCESSFULLY: DevicePairingStatus.ValueType # 3
97
+ DEVICE_PAIRING_STATUS_WRONG_PASSPHRASE: DevicePairingStatus.ValueType # 4
98
+ DEVICE_PAIRING_STATUS_WRONG_SSID: DevicePairingStatus.ValueType # 5
99
+ DEVICE_PAIRING_STATUS_CONNECTED_TO_CLOUD_SUCCESSFULLY: DevicePairingStatus.ValueType # 6
100
+ DEVICE_PAIRING_STATUS_ERROR_NO_DEVICE_ID: DevicePairingStatus.ValueType # 7
101
+ DEVICE_PAIRING_STATUS_ERROR_NO_SYSTEM_ID: DevicePairingStatus.ValueType # 8
102
+ Global___DevicePairingStatus: _TypeAlias = DevicePairingStatus # noqa: Y015
103
+
104
+ @_typing.final
105
+ class WifiScan(_message.Message):
106
+ """---------------------------------------------------------------------------
107
+ WiFi scan result (device → phone over BLE)
108
+ ---------------------------------------------------------------------------
109
+ """
110
+
111
+ DESCRIPTOR: _descriptor.Descriptor
112
+
113
+ MAC_ADDRESS_FIELD_NUMBER: _builtins.int
114
+ SSID_FIELD_NUMBER: _builtins.int
115
+ FREQUENCY_FIELD_NUMBER: _builtins.int
116
+ RSSI_FIELD_NUMBER: _builtins.int
117
+ SECURITY_TYPE_FIELD_NUMBER: _builtins.int
118
+ mac_address: _builtins.str
119
+ """Field ordering based on KMP model (WifiScan.kt) and confirmed by
120
+ observed data: field 4 contains negative dBm values (RSSI).
121
+ NM.smali is a DIFFERENT message (WifiState for established connections).
122
+ BSSID
123
+ """
124
+ ssid: _builtins.str
125
+ frequency: _builtins.int
126
+ """MHz; >5000 = 5GHz band"""
127
+ rssi: _builtins.int
128
+ """Signal strength in dBm (negative)"""
129
+ security_type: Global___WifiSecurityType.ValueType
130
+ """0=UNKNOWN, 1=OPEN, 2=WPAPSK"""
131
+ def __init__(
132
+ self,
133
+ *,
134
+ mac_address: _builtins.str = ...,
135
+ ssid: _builtins.str = ...,
136
+ frequency: _builtins.int = ...,
137
+ rssi: _builtins.int = ...,
138
+ security_type: Global___WifiSecurityType.ValueType = ...,
139
+ ) -> None: ...
140
+ _HasFieldArgType: _TypeAlias = _Never # noqa: Y015
141
+ def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
142
+ _ClearFieldArgType: _TypeAlias = _typing.Literal["frequency", b"frequency", "mac_address", b"mac_address", "rssi", b"rssi", "security_type", b"security_type", "ssid", b"ssid"] # noqa: Y015
143
+ def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
144
+ def WhichOneof(self, oneof_group: _Never) -> None: ...
145
+
146
+ Global___WifiScan: _TypeAlias = WifiScan # noqa: Y015
147
+
148
+ @_typing.final
149
+ class WifiScanList(_message.Message):
150
+ DESCRIPTOR: _descriptor.Descriptor
151
+
152
+ SCANS_FIELD_NUMBER: _builtins.int
153
+ @_builtins.property
154
+ def scans(self) -> _containers.RepeatedCompositeFieldContainer[Global___WifiScan]: ...
155
+ def __init__(
156
+ self,
157
+ *,
158
+ scans: _abc.Iterable[Global___WifiScan] | None = ...,
159
+ ) -> None: ...
160
+ _HasFieldArgType: _TypeAlias = _Never # noqa: Y015
161
+ def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
162
+ _ClearFieldArgType: _TypeAlias = _typing.Literal["scans", b"scans"] # noqa: Y015
163
+ def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
164
+ def WhichOneof(self, oneof_group: _Never) -> None: ...
165
+
166
+ Global___WifiScanList: _TypeAlias = WifiScanList # noqa: Y015
167
+
168
+ @_typing.final
169
+ class WifiConfiguration(_message.Message):
170
+ """---------------------------------------------------------------------------
171
+ Device configuration (phone → device over BLE)
172
+ ---------------------------------------------------------------------------
173
+ """
174
+
175
+ DESCRIPTOR: _descriptor.Descriptor
176
+
177
+ SECURITY_TYPE_FIELD_NUMBER: _builtins.int
178
+ SSID_FIELD_NUMBER: _builtins.int
179
+ PASSPHRASE_FIELD_NUMBER: _builtins.int
180
+ security_type: Global___WifiSecurityType.ValueType
181
+ ssid: _builtins.str
182
+ passphrase: _builtins.str
183
+ def __init__(
184
+ self,
185
+ *,
186
+ security_type: Global___WifiSecurityType.ValueType = ...,
187
+ ssid: _builtins.str = ...,
188
+ passphrase: _builtins.str = ...,
189
+ ) -> None: ...
190
+ _HasFieldArgType: _TypeAlias = _Never # noqa: Y015
191
+ def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
192
+ _ClearFieldArgType: _TypeAlias = _typing.Literal["passphrase", b"passphrase", "security_type", b"security_type", "ssid", b"ssid"] # noqa: Y015
193
+ def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
194
+ def WhichOneof(self, oneof_group: _Never) -> None: ...
195
+
196
+ Global___WifiConfiguration: _TypeAlias = WifiConfiguration # noqa: Y015
197
+
198
+ @_typing.final
199
+ class DeviceConfiguration(_message.Message):
200
+ DESCRIPTOR: _descriptor.Descriptor
201
+
202
+ VERSION_FIELD_NUMBER: _builtins.int
203
+ DEVICE_UUID_FIELD_NUMBER: _builtins.int
204
+ DEVICE_TYPE_FIELD_NUMBER: _builtins.int
205
+ CLOUD_HOSTNAME_FIELD_NUMBER: _builtins.int
206
+ TOKEN_HOSTNAME_FIELD_NUMBER: _builtins.int
207
+ CLOUD_HOST_PORT_FIELD_NUMBER: _builtins.int
208
+ TOKEN_HOST_PORT_FIELD_NUMBER: _builtins.int
209
+ WIFI_CONFIGS_FIELD_NUMBER: _builtins.int
210
+ SPACE_ID_FIELD_NUMBER: _builtins.int
211
+ SYSTEM_ID_FIELD_NUMBER: _builtins.int
212
+ version: _builtins.int
213
+ device_uuid: _builtins.str
214
+ """empty during pairing; device self-assigns"""
215
+ device_type: Global___DeviceType.ValueType
216
+ cloud_hostname: _builtins.str
217
+ """e.g. "api.prod.quilt.cloud" """
218
+ token_hostname: _builtins.str
219
+ """e.g. "token.prod.quilt.cloud" """
220
+ cloud_host_port: _builtins.int
221
+ """443"""
222
+ token_host_port: _builtins.int
223
+ space_id: _builtins.str
224
+ system_id: _builtins.str
225
+ """system UUID from HDS"""
226
+ @_builtins.property
227
+ def wifi_configs(self) -> _containers.RepeatedCompositeFieldContainer[Global___WifiConfiguration]: ...
228
+ def __init__(
229
+ self,
230
+ *,
231
+ version: _builtins.int = ...,
232
+ device_uuid: _builtins.str = ...,
233
+ device_type: Global___DeviceType.ValueType = ...,
234
+ cloud_hostname: _builtins.str = ...,
235
+ token_hostname: _builtins.str = ...,
236
+ cloud_host_port: _builtins.int = ...,
237
+ token_host_port: _builtins.int = ...,
238
+ wifi_configs: _abc.Iterable[Global___WifiConfiguration] | None = ...,
239
+ space_id: _builtins.str = ...,
240
+ system_id: _builtins.str = ...,
241
+ ) -> None: ...
242
+ _HasFieldArgType: _TypeAlias = _Never # noqa: Y015
243
+ def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
244
+ _ClearFieldArgType: _TypeAlias = _typing.Literal["cloud_host_port", b"cloud_host_port", "cloud_hostname", b"cloud_hostname", "device_type", b"device_type", "device_uuid", b"device_uuid", "space_id", b"space_id", "system_id", b"system_id", "token_host_port", b"token_host_port", "token_hostname", b"token_hostname", "version", b"version", "wifi_configs", b"wifi_configs"] # noqa: Y015
245
+ def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
246
+ def WhichOneof(self, oneof_group: _Never) -> None: ...
247
+
248
+ Global___DeviceConfiguration: _TypeAlias = DeviceConfiguration # noqa: Y015
249
+
250
+ @_typing.final
251
+ class DeviceConfigurationRequest(_message.Message):
252
+ DESCRIPTOR: _descriptor.Descriptor
253
+
254
+ REQUEST_TIMESTAMP_FIELD_NUMBER: _builtins.int
255
+ DEVICE_CONFIGURATION_FIELD_NUMBER: _builtins.int
256
+ @_builtins.property
257
+ def request_timestamp(self) -> _timestamp_pb2.Timestamp: ...
258
+ @_builtins.property
259
+ def device_configuration(self) -> Global___DeviceConfiguration: ...
260
+ def __init__(
261
+ self,
262
+ *,
263
+ request_timestamp: _timestamp_pb2.Timestamp | None = ...,
264
+ device_configuration: Global___DeviceConfiguration | None = ...,
265
+ ) -> None: ...
266
+ _HasFieldArgType: _TypeAlias = _typing.Literal["device_configuration", b"device_configuration", "request_timestamp", b"request_timestamp"] # noqa: Y015
267
+ def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
268
+ _ClearFieldArgType: _TypeAlias = _typing.Literal["device_configuration", b"device_configuration", "request_timestamp", b"request_timestamp"] # noqa: Y015
269
+ def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
270
+ def WhichOneof(self, oneof_group: _Never) -> None: ...
271
+
272
+ Global___DeviceConfigurationRequest: _TypeAlias = DeviceConfigurationRequest # noqa: Y015
273
+
274
+ @_typing.final
275
+ class DevicePairingStatusResponse(_message.Message):
276
+ """---------------------------------------------------------------------------
277
+ Pairing status (device → phone over BLE)
278
+ ---------------------------------------------------------------------------
279
+ """
280
+
281
+ DESCRIPTOR: _descriptor.Descriptor
282
+
283
+ STATUS_FIELD_NUMBER: _builtins.int
284
+ status: Global___DevicePairingStatus.ValueType
285
+ def __init__(
286
+ self,
287
+ *,
288
+ status: Global___DevicePairingStatus.ValueType = ...,
289
+ ) -> None: ...
290
+ _HasFieldArgType: _TypeAlias = _Never # noqa: Y015
291
+ def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
292
+ _ClearFieldArgType: _TypeAlias = _typing.Literal["status", b"status"] # noqa: Y015
293
+ def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
294
+ def WhichOneof(self, oneof_group: _Never) -> None: ...
295
+
296
+ Global___DevicePairingStatusResponse: _TypeAlias = DevicePairingStatusResponse # noqa: Y015
297
+
298
+ @_typing.final
299
+ class DeviceConfigurationResult(_message.Message):
300
+ """Response from SendDeviceConfigRequest (WiFi gRPC provisioning)"""
301
+
302
+ DESCRIPTOR: _descriptor.Descriptor
303
+
304
+ IS_DEVICE_CONFIGURED_FIELD_NUMBER: _builtins.int
305
+ is_device_configured: _builtins.bool
306
+ def __init__(
307
+ self,
308
+ *,
309
+ is_device_configured: _builtins.bool = ...,
310
+ ) -> None: ...
311
+ _HasFieldArgType: _TypeAlias = _Never # noqa: Y015
312
+ def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
313
+ _ClearFieldArgType: _TypeAlias = _typing.Literal["is_device_configured", b"is_device_configured"] # noqa: Y015
314
+ def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
315
+ def WhichOneof(self, oneof_group: _Never) -> None: ...
316
+
317
+ Global___DeviceConfigurationResult: _TypeAlias = DeviceConfigurationResult # noqa: Y015
@@ -0,0 +1,24 @@
1
+ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
+ """Client and server classes corresponding to protobuf-defined services."""
3
+ import grpc
4
+ import warnings
5
+
6
+
7
+ GRPC_GENERATED_VERSION = '1.80.0'
8
+ GRPC_VERSION = grpc.__version__
9
+ _version_not_supported = False
10
+
11
+ try:
12
+ from grpc._utilities import first_version_is_lower
13
+ _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION)
14
+ except ImportError:
15
+ _version_not_supported = True
16
+
17
+ if _version_not_supported:
18
+ raise RuntimeError(
19
+ f'The grpc package installed is at version {GRPC_VERSION},'
20
+ + ' but the generated code in quilt_device_pairing_pb2_grpc.py depends on'
21
+ + f' grpcio>={GRPC_GENERATED_VERSION}.'
22
+ + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}'
23
+ + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.'
24
+ )