vsslctrl 0.1.8.dev1__py3-none-any.whl → 0.1.9.dev1__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.
vsslctrl/core.py CHANGED
@@ -87,8 +87,7 @@ class Vssl:
87
87
  raise VsslCtrlException(message)
88
88
 
89
89
  except VsslCtrlException:
90
- zone_count = self.model.zone_count
91
- message = f"Device model only has {zone_count} zones instead of {len(self.zones)}"
90
+ message = f"Device model {self.model.name} only has {self.model.zone_count} zones not {len(self.zones)}."
92
91
  self._log_critical(message)
93
92
  await first_zone.disconnect()
94
93
  raise VsslCtrlException(message)
@@ -194,6 +193,11 @@ class Vssl:
194
193
  #
195
194
  # Work out the a model given some device info
196
195
  #
196
+ #
197
+ #
198
+ # THIS WONT WORK FOR ORIGINAL A SERIES! TODO!
199
+ #
200
+ #
197
201
  def _infer_device_model(self, data: Dict[str, int]):
198
202
  # if we dont have a model, default to x series
199
203
  if not self.model:
vsslctrl/device.py CHANGED
@@ -205,57 +205,72 @@ class Model:
205
205
 
206
206
 
207
207
  class Models(VsslEnum):
208
- A1 = Model(
208
+ A1X = Model(
209
209
  {
210
- "name": "A.1",
210
+ "name": "A.1x",
211
211
  "zones": SINGLE_ZONE,
212
212
  "input_sources": INPUT_SOURCES_FOR_1_ZONE_DEVICE,
213
213
  "analog_output_sources": ANALOG_OUTPUT_SOURCES_FOR_1_ZONE_DEVICE,
214
214
  "features": [Features.BLUETOOTH, Features.SUBWOOFER_CROSSOVER],
215
215
  }
216
216
  )
217
- A3 = Model(
217
+ A3X = Model(
218
218
  {
219
- "name": "A.3",
219
+ "name": "A.3x",
220
220
  "zones": THREE_ZONES,
221
- "input_sources": INPUT_SOURCES_FOR_A3,
222
- "analog_output_sources": ANALOG_OUTPUT_SOURCES_FOR_A3,
223
- "features": [Features.GROUPING, Features.PARTY_MODE],
221
+ "input_sources": INPUT_SOURCES_FOR_3_ZONE_DEVICE,
222
+ "analog_output_sources": ANALOG_OUTPUT_SOURCES_FOR_3_ZONE_DEVICE,
223
+ "features": [Features.GROUPING],
224
224
  }
225
225
  )
226
- A6 = Model(
226
+ A6X = Model(
227
227
  {
228
- "name": "A.6",
228
+ "name": "A.6x",
229
229
  "zones": SIX_ZONES,
230
- "input_sources": INPUT_SOURCES_FOR_A6,
231
- "analog_output_sources": ANALOG_OUTPUT_SOURCES_FOR_A6,
232
- "features": [Features.GROUPING, Features.PARTY_MODE],
230
+ "input_sources": INPUT_SOURCES_FOR_6_ZONE_DEVICE,
231
+ "analog_output_sources": ANALOG_OUTPUT_SOURCES_FOR_6_ZONE_DEVICE,
232
+ "features": [Features.GROUPING],
233
233
  }
234
234
  )
235
- A1X = Model(
235
+ A1 = Model(
236
236
  {
237
- "name": "A.1x",
237
+ "name": "A.1",
238
238
  "zones": SINGLE_ZONE,
239
239
  "input_sources": INPUT_SOURCES_FOR_1_ZONE_DEVICE,
240
240
  "analog_output_sources": ANALOG_OUTPUT_SOURCES_FOR_1_ZONE_DEVICE,
241
241
  "features": [Features.BLUETOOTH, Features.SUBWOOFER_CROSSOVER],
242
242
  }
243
243
  )
244
- A3X = Model(
244
+ A3 = Model(
245
245
  {
246
- "name": "A.3x",
246
+ "name": "A.3",
247
247
  "zones": THREE_ZONES,
248
- "input_sources": INPUT_SOURCES_FOR_3_ZONE_DEVICE,
249
- "analog_output_sources": ANALOG_OUTPUT_SOURCES_FOR_3_ZONE_DEVICE,
250
- "features": [Features.GROUPING],
248
+ "input_sources": INPUT_SOURCES_FOR_A3,
249
+ "analog_output_sources": ANALOG_OUTPUT_SOURCES_FOR_A3,
250
+ "features": [Features.GROUPING, Features.PARTY_MODE],
251
251
  }
252
252
  )
253
- A6X = Model(
253
+ A6 = Model(
254
254
  {
255
- "name": "A.6x",
255
+ "name": "A.6",
256
256
  "zones": SIX_ZONES,
257
- "input_sources": INPUT_SOURCES_FOR_6_ZONE_DEVICE,
258
- "analog_output_sources": ANALOG_OUTPUT_SOURCES_FOR_6_ZONE_DEVICE,
259
- "features": [Features.GROUPING],
257
+ "input_sources": INPUT_SOURCES_FOR_A6,
258
+ "analog_output_sources": ANALOG_OUTPUT_SOURCES_FOR_A6,
259
+ "features": [Features.GROUPING, Features.PARTY_MODE],
260
260
  }
261
261
  )
262
+
263
+ @classmethod
264
+ def get_model_names(cls):
265
+ return [model.value.name for model in cls]
266
+
267
+ @classmethod
268
+ def get_model_by_name(cls, name):
269
+ # Preprocess input name: convert to lowercase and remove dots
270
+ name_cleaned = name.lower().replace(".", "")
271
+
272
+ for model in cls:
273
+ # Preprocess model name: convert to lowercase and remove dots
274
+ if model.value.name.lower().replace(".", "") == name_cleaned:
275
+ return model.value
276
+ return None # Return None if no match is found
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vsslctrl
3
- Version: 0.1.8.dev1
3
+ Version: 0.1.9.dev1
4
4
  Summary: Package for controlling VSSL's range of streaming amplifiers
5
5
  Author-email: vsslctrl <vsslcontrolled@proton.me>
6
6
  Classifier: Development Status :: 4 - Beta
@@ -39,7 +39,7 @@ There should not be any *[VSSL Agent's](https://vssl.gitbook.io/vssl-rest-api/ge
39
39
 
40
40
  ## TODOs
41
41
 
42
- * **A1(.x)** specific control e.g sub crossover, bluetooth
42
+ * **A.1(x)** specific control e.g sub crossover, bluetooth
43
43
  * Better test coverage
44
44
 
45
45
  ## Basic Usage
@@ -2,10 +2,10 @@ vsslctrl/__init__.py,sha256=W7cljoE7L3DukAVr_TEqkxFycYrUbJiqaHrOlbPkmKU,145
2
2
  vsslctrl/api_alpha.py,sha256=UxsMKOFK4Uit3QoF96Wa3VE1WdbCq7FOJjt-3fewAe0,33962
3
3
  vsslctrl/api_base.py,sha256=a80CRtUkYK2OwXQOL8bP-YOvt4YE-ALd-VONza_gjK8,9623
4
4
  vsslctrl/api_bravo.py,sha256=pchZN16KIvdSrqkI1WU9PA9IEmxkyyP-XifxpRC0jDE,12283
5
- vsslctrl/core.py,sha256=vgwmiaJf46kL5O8-vQ4JXuMhj-ms8_qt-0PO7-1yEuk,9068
5
+ vsslctrl/core.py,sha256=G6XSH2_sxVaB6AfR6Btt8SMqiihlBQ6n_UZB9lsO7fw,9114
6
6
  vsslctrl/data_structure.py,sha256=i6xG72kQqFDSoEhI307Iw9QXTquMNMc4qMUGOK0MEbw,9793
7
7
  vsslctrl/decorators.py,sha256=lG8cYSSA-fNvdcp_90lv58tj50bF6iPoigLKcucWSSI,1707
8
- vsslctrl/device.py,sha256=n4WbGHRJBw1k9eiG9DksxJtuFRaHBn7geOvrv0WLgkI,5560
8
+ vsslctrl/device.py,sha256=M6fcd2ggE-ConHoENpQ3WtGQzmSyok9t-8Kt5pd-r6U,6104
9
9
  vsslctrl/discovery.py,sha256=3z7z6YQUtvjFvRlQOZXIu6Wd4M896rMbi8SUkTub3AM,5568
10
10
  vsslctrl/event_bus.py,sha256=9liAEJnZfthJwy5O-qc3pDIWRBv5AcV19PjMCwH_niU,5014
11
11
  vsslctrl/exceptions.py,sha256=EEfNlu--9PMIidj3V3ZB8c7p3My8siqKw7YIOjPFaqE,419
@@ -16,8 +16,8 @@ vsslctrl/track.py,sha256=_lQNHYe8ZBm3v1lehFLjZruF5-Rz8PGWuQN-zISBgwc,10136
16
16
  vsslctrl/transport.py,sha256=XJFy0kl9y7hm3YV4_9ElBrq3u6--_k73UKJqKdO6Rqg,6993
17
17
  vsslctrl/utils.py,sha256=FWOMHM_sl1Cp1xab-V6b-A5B7qRmDN67hMMxV4ReWCk,2087
18
18
  vsslctrl/zone.py,sha256=teSk8oE3LKteidRnuVK3koUOqtN-90LclEx0-T4FhAE,12978
19
- vsslctrl-0.1.8.dev1.dist-info/LICENSE,sha256=67Ekj8PIxjEvkPd7L3GYJ8dyvn1EC4sPM3q3FKtpN6w,1065
20
- vsslctrl-0.1.8.dev1.dist-info/METADATA,sha256=Mdh-StM-gY7AeaBQrg8wbSuki-lgmL-sNVufXs3oGkI,16990
21
- vsslctrl-0.1.8.dev1.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
22
- vsslctrl-0.1.8.dev1.dist-info/top_level.txt,sha256=MRycO_RKageNX27UZ2bLJDMlfeWTQzUZlsd3hS-0u3Y,9
23
- vsslctrl-0.1.8.dev1.dist-info/RECORD,,
19
+ vsslctrl-0.1.9.dev1.dist-info/LICENSE,sha256=67Ekj8PIxjEvkPd7L3GYJ8dyvn1EC4sPM3q3FKtpN6w,1065
20
+ vsslctrl-0.1.9.dev1.dist-info/METADATA,sha256=fKQI1brfCRDqoXlXfPNB_22heY6oQC-fxjADf02JYro,16990
21
+ vsslctrl-0.1.9.dev1.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
22
+ vsslctrl-0.1.9.dev1.dist-info/top_level.txt,sha256=MRycO_RKageNX27UZ2bLJDMlfeWTQzUZlsd3hS-0u3Y,9
23
+ vsslctrl-0.1.9.dev1.dist-info/RECORD,,