denonavr 0.11.2__py3-none-any.whl → 0.11.6__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.
- denonavr/__init__.py +1 -1
- denonavr/api.py +194 -59
- denonavr/audyssey.py +69 -32
- denonavr/const.py +201 -12
- denonavr/decorators.py +27 -41
- denonavr/denonavr.py +50 -7
- denonavr/foundation.py +87 -54
- denonavr/input.py +119 -72
- denonavr/soundmode.py +32 -16
- denonavr/ssdp.py +13 -13
- denonavr/tonecontrol.py +91 -36
- denonavr/volume.py +53 -17
- {denonavr-0.11.2.dist-info → denonavr-0.11.6.dist-info}/METADATA +13 -11
- denonavr-0.11.6.dist-info/RECORD +19 -0
- {denonavr-0.11.2.dist-info → denonavr-0.11.6.dist-info}/WHEEL +1 -1
- denonavr-0.11.2.dist-info/RECORD +0 -19
- {denonavr-0.11.2.dist-info → denonavr-0.11.6.dist-info}/LICENSE +0 -0
- {denonavr-0.11.2.dist-info → denonavr-0.11.6.dist-info}/top_level.txt +0 -0
denonavr/tonecontrol.py
CHANGED
|
@@ -9,7 +9,8 @@ This module implements the handler for state of Denon AVR receivers.
|
|
|
9
9
|
|
|
10
10
|
import logging
|
|
11
11
|
import time
|
|
12
|
-
from
|
|
12
|
+
from collections.abc import Hashable
|
|
13
|
+
from typing import Optional
|
|
13
14
|
|
|
14
15
|
import attr
|
|
15
16
|
|
|
@@ -68,14 +69,14 @@ class DenonAVRToneControl(DenonAVRFoundation):
|
|
|
68
69
|
return
|
|
69
70
|
|
|
70
71
|
if parameter[0:3] == "BAS":
|
|
71
|
-
self._bass = int(parameter[4:])
|
|
72
|
-
self._bass_level = "{
|
|
72
|
+
self._bass = int(parameter[4:]) - 44
|
|
73
|
+
self._bass_level = f"{int(parameter[4:]) - 50}dB"
|
|
73
74
|
elif parameter[0:3] == "TRE":
|
|
74
|
-
self._treble = int(parameter[4:])
|
|
75
|
-
self._treble_level = "{
|
|
75
|
+
self._treble = int(parameter[4:]) - 44
|
|
76
|
+
self._treble_level = f"{int(parameter[4:]) - 50}dB"
|
|
76
77
|
elif parameter == "TONE CTRL OFF":
|
|
77
78
|
self._tone_control_adjust = False
|
|
78
|
-
self._tone_control_status =
|
|
79
|
+
self._tone_control_status = True
|
|
79
80
|
elif parameter == "TONE CTRL ON":
|
|
80
81
|
self._tone_control_adjust = True
|
|
81
82
|
self._tone_control_status = True
|
|
@@ -85,7 +86,7 @@ class DenonAVRToneControl(DenonAVRFoundation):
|
|
|
85
86
|
) -> None:
|
|
86
87
|
"""Update volume asynchronously."""
|
|
87
88
|
# Ensure instance is setup before updating
|
|
88
|
-
if self._is_setup
|
|
89
|
+
if not self._is_setup:
|
|
89
90
|
self.setup()
|
|
90
91
|
|
|
91
92
|
# Update state
|
|
@@ -97,20 +98,19 @@ class DenonAVRToneControl(DenonAVRFoundation):
|
|
|
97
98
|
self, global_update: bool = False, cache_id: Optional[Hashable] = None
|
|
98
99
|
):
|
|
99
100
|
"""Update tone control status of device."""
|
|
100
|
-
if self._device.use_avr_2016_update is
|
|
101
|
+
if self._device.use_avr_2016_update is None:
|
|
102
|
+
raise AvrProcessingError(
|
|
103
|
+
"Device is not setup correctly, update method not set"
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
# Tone control is only available for avr 2016 update
|
|
107
|
+
if self._device.use_avr_2016_update:
|
|
101
108
|
await self.async_update_attrs_appcommand(
|
|
102
109
|
self.appcommand_attrs,
|
|
103
110
|
global_update=global_update,
|
|
104
111
|
cache_id=cache_id,
|
|
105
112
|
ignore_missing_response=True,
|
|
106
113
|
)
|
|
107
|
-
elif self._device.use_avr_2016_update is False:
|
|
108
|
-
# Not available
|
|
109
|
-
pass
|
|
110
|
-
else:
|
|
111
|
-
raise AvrProcessingError(
|
|
112
|
-
"Device is not setup correctly, update method not set"
|
|
113
|
-
)
|
|
114
114
|
|
|
115
115
|
async def async_set_tone_control_command(
|
|
116
116
|
self, parameter_type: str, value: int
|
|
@@ -129,6 +129,16 @@ class DenonAVRToneControl(DenonAVRFoundation):
|
|
|
129
129
|
##############
|
|
130
130
|
# Properties #
|
|
131
131
|
##############
|
|
132
|
+
@property
|
|
133
|
+
def tone_control_status(self) -> Optional[bool]:
|
|
134
|
+
"""Return value of tone control status."""
|
|
135
|
+
return self._tone_control_status
|
|
136
|
+
|
|
137
|
+
@property
|
|
138
|
+
def tone_control_adjust(self) -> Optional[bool]:
|
|
139
|
+
"""Return value of tone control adjust."""
|
|
140
|
+
return self._tone_control_adjust
|
|
141
|
+
|
|
132
142
|
@property
|
|
133
143
|
def bass(self) -> Optional[int]:
|
|
134
144
|
"""Return value of bass."""
|
|
@@ -154,21 +164,28 @@ class DenonAVRToneControl(DenonAVRFoundation):
|
|
|
154
164
|
##########
|
|
155
165
|
async def async_enable_tone_control(self) -> None:
|
|
156
166
|
"""Enable tone control to change settings like bass or treble."""
|
|
157
|
-
if self._tone_control_status is
|
|
167
|
+
if self._tone_control_status is None:
|
|
158
168
|
raise AvrCommandError(
|
|
159
169
|
"Cannot enable tone control, Dynamic EQ must be deactivated"
|
|
160
170
|
)
|
|
161
171
|
|
|
162
|
-
|
|
172
|
+
if self._device.telnet_available:
|
|
173
|
+
telnet_command = self._device.telnet_commands.command_tonecontrol + "ON"
|
|
174
|
+
await self._device.telnet_api.async_send_commands(telnet_command)
|
|
175
|
+
else:
|
|
176
|
+
await self.async_set_tone_control_command("adjust", 1)
|
|
163
177
|
|
|
164
178
|
async def async_disable_tone_control(self) -> None:
|
|
165
179
|
"""Disable tone control to change settings like bass or treble."""
|
|
166
|
-
if self._tone_control_status is
|
|
180
|
+
if self._tone_control_status is None:
|
|
167
181
|
raise AvrCommandError(
|
|
168
182
|
"Cannot disable tone control, Dynamic EQ must be deactivated"
|
|
169
183
|
)
|
|
170
|
-
|
|
171
|
-
|
|
184
|
+
if self._device.telnet_available:
|
|
185
|
+
telnet_command = self._device.telnet_commands.command_tonecontrol + "OFF"
|
|
186
|
+
await self._device.telnet_api.async_send_commands(telnet_command)
|
|
187
|
+
else:
|
|
188
|
+
await self.async_set_tone_control_command("adjust", 0)
|
|
172
189
|
|
|
173
190
|
async def async_set_bass(self, value: int) -> None:
|
|
174
191
|
"""
|
|
@@ -181,8 +198,14 @@ class DenonAVRToneControl(DenonAVRFoundation):
|
|
|
181
198
|
"""
|
|
182
199
|
if value < 0 or value > 12:
|
|
183
200
|
raise AvrCommandError("Invalid value for bass")
|
|
184
|
-
|
|
185
|
-
|
|
201
|
+
if self._device.telnet_available:
|
|
202
|
+
if not self.tone_control_adjust:
|
|
203
|
+
await self.async_enable_tone_control()
|
|
204
|
+
telnet_command = self._device.telnet_commands.command_bass + str(value + 44)
|
|
205
|
+
await self._device.telnet_api.async_send_commands(telnet_command)
|
|
206
|
+
else:
|
|
207
|
+
await self.async_enable_tone_control()
|
|
208
|
+
await self.async_set_tone_control_command("bassvalue", value)
|
|
186
209
|
|
|
187
210
|
async def async_bass_up(self) -> None:
|
|
188
211
|
"""
|
|
@@ -193,9 +216,15 @@ class DenonAVRToneControl(DenonAVRFoundation):
|
|
|
193
216
|
"""
|
|
194
217
|
if self.bass == 12:
|
|
195
218
|
return
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
219
|
+
if self._device.telnet_available:
|
|
220
|
+
if not self.tone_control_adjust:
|
|
221
|
+
await self.async_enable_tone_control()
|
|
222
|
+
telnet_command = self._device.telnet_commands.command_bass + "UP"
|
|
223
|
+
await self._device.telnet_api.async_send_commands(telnet_command)
|
|
224
|
+
else:
|
|
225
|
+
await self.async_enable_tone_control()
|
|
226
|
+
await self.async_set_tone_control_command("bassvalue", self.bass + 1)
|
|
227
|
+
await self.async_update()
|
|
199
228
|
|
|
200
229
|
async def async_bass_down(self) -> None:
|
|
201
230
|
"""
|
|
@@ -206,9 +235,15 @@ class DenonAVRToneControl(DenonAVRFoundation):
|
|
|
206
235
|
"""
|
|
207
236
|
if self.bass == 0:
|
|
208
237
|
return
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
238
|
+
if self._device.telnet_available:
|
|
239
|
+
if not self.tone_control_adjust:
|
|
240
|
+
await self.async_enable_tone_control()
|
|
241
|
+
telnet_command = self._device.telnet_commands.command_bass + "DOWN"
|
|
242
|
+
await self._device.telnet_api.async_send_commands(telnet_command)
|
|
243
|
+
else:
|
|
244
|
+
await self.async_enable_tone_control()
|
|
245
|
+
await self.async_set_tone_control_command("bassvalue", self.bass - 1)
|
|
246
|
+
await self.async_update()
|
|
212
247
|
|
|
213
248
|
async def async_set_treble(self, value: int) -> None:
|
|
214
249
|
"""
|
|
@@ -221,8 +256,16 @@ class DenonAVRToneControl(DenonAVRFoundation):
|
|
|
221
256
|
"""
|
|
222
257
|
if value < 0 or value > 12:
|
|
223
258
|
raise AvrCommandError("Invalid value for treble")
|
|
224
|
-
|
|
225
|
-
|
|
259
|
+
if self._device.telnet_available:
|
|
260
|
+
if not self.tone_control_adjust:
|
|
261
|
+
await self.async_enable_tone_control()
|
|
262
|
+
telnet_command = self._device.telnet_commands.command_treble + str(
|
|
263
|
+
value + 44
|
|
264
|
+
)
|
|
265
|
+
await self._device.telnet_api.async_send_commands(telnet_command)
|
|
266
|
+
else:
|
|
267
|
+
await self.async_enable_tone_control()
|
|
268
|
+
await self.async_set_tone_control_command("treblevalue", value)
|
|
226
269
|
|
|
227
270
|
async def async_treble_up(self) -> None:
|
|
228
271
|
"""
|
|
@@ -233,9 +276,15 @@ class DenonAVRToneControl(DenonAVRFoundation):
|
|
|
233
276
|
"""
|
|
234
277
|
if self.treble == 12:
|
|
235
278
|
return
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
279
|
+
if self._device.telnet_available:
|
|
280
|
+
if not self.tone_control_adjust:
|
|
281
|
+
await self.async_enable_tone_control()
|
|
282
|
+
telnet_command = self._device.telnet_commands.command_treble + "UP"
|
|
283
|
+
await self._device.telnet_api.async_send_commands(telnet_command)
|
|
284
|
+
else:
|
|
285
|
+
await self.async_enable_tone_control()
|
|
286
|
+
await self.async_set_tone_control_command("treblevalue", self.treble + 1)
|
|
287
|
+
await self.async_update()
|
|
239
288
|
|
|
240
289
|
async def async_treble_down(self) -> None:
|
|
241
290
|
"""
|
|
@@ -246,9 +295,15 @@ class DenonAVRToneControl(DenonAVRFoundation):
|
|
|
246
295
|
"""
|
|
247
296
|
if self.treble == 0:
|
|
248
297
|
return
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
298
|
+
if self._device.telnet_available:
|
|
299
|
+
if not self.tone_control_adjust:
|
|
300
|
+
await self.async_enable_tone_control()
|
|
301
|
+
telnet_command = self._device.telnet_commands.command_treble + "DOWN"
|
|
302
|
+
await self._device.telnet_api.async_send_commands(telnet_command)
|
|
303
|
+
else:
|
|
304
|
+
await self.async_enable_tone_control()
|
|
305
|
+
await self.async_set_tone_control_command("treblevalue", self.treble - 1)
|
|
306
|
+
await self.async_update()
|
|
252
307
|
|
|
253
308
|
|
|
254
309
|
def tone_control_factory(instance: DenonAVRFoundation) -> DenonAVRToneControl:
|
denonavr/volume.py
CHANGED
|
@@ -8,7 +8,8 @@ This module implements the handler for volume of Denon AVR receivers.
|
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
import logging
|
|
11
|
-
from
|
|
11
|
+
from collections.abc import Hashable
|
|
12
|
+
from typing import Optional, Union
|
|
12
13
|
|
|
13
14
|
import attr
|
|
14
15
|
|
|
@@ -89,7 +90,7 @@ class DenonAVRVolume(DenonAVRFoundation):
|
|
|
89
90
|
) -> None:
|
|
90
91
|
"""Update volume asynchronously."""
|
|
91
92
|
# Ensure instance is setup before updating
|
|
92
|
-
if self._is_setup
|
|
93
|
+
if not self._is_setup:
|
|
93
94
|
self.setup()
|
|
94
95
|
|
|
95
96
|
# Update state
|
|
@@ -99,21 +100,22 @@ class DenonAVRVolume(DenonAVRFoundation):
|
|
|
99
100
|
self, global_update: bool = False, cache_id: Optional[Hashable] = None
|
|
100
101
|
):
|
|
101
102
|
"""Update volume status of device."""
|
|
102
|
-
if self._device.use_avr_2016_update is
|
|
103
|
+
if self._device.use_avr_2016_update is None:
|
|
104
|
+
raise AvrProcessingError(
|
|
105
|
+
"Device is not setup correctly, update method not set"
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
if self._device.use_avr_2016_update:
|
|
103
109
|
await self.async_update_attrs_appcommand(
|
|
104
110
|
self.appcommand_attrs, global_update=global_update, cache_id=cache_id
|
|
105
111
|
)
|
|
106
|
-
|
|
112
|
+
else:
|
|
107
113
|
urls = [self._device.urls.status]
|
|
108
114
|
if self._device.zone == MAIN_ZONE:
|
|
109
115
|
urls.append(self._device.urls.mainzone)
|
|
110
116
|
await self.async_update_attrs_status_xml(
|
|
111
117
|
self.status_xml_attrs, urls, cache_id=cache_id
|
|
112
118
|
)
|
|
113
|
-
else:
|
|
114
|
-
raise AvrProcessingError(
|
|
115
|
-
"Device is not setup correctly, update method not set"
|
|
116
|
-
)
|
|
117
119
|
|
|
118
120
|
##############
|
|
119
121
|
# Properties #
|
|
@@ -142,11 +144,25 @@ class DenonAVRVolume(DenonAVRFoundation):
|
|
|
142
144
|
##########
|
|
143
145
|
async def async_volume_up(self) -> None:
|
|
144
146
|
"""Volume up receiver via HTTP get command."""
|
|
145
|
-
|
|
147
|
+
if self._device.telnet_available:
|
|
148
|
+
await self._device.telnet_api.async_send_commands(
|
|
149
|
+
self._device.telnet_commands.command_volume_up
|
|
150
|
+
)
|
|
151
|
+
else:
|
|
152
|
+
await self._device.api.async_get_command(
|
|
153
|
+
self._device.urls.command_volume_up
|
|
154
|
+
)
|
|
146
155
|
|
|
147
156
|
async def async_volume_down(self) -> None:
|
|
148
157
|
"""Volume down receiver via HTTP get command."""
|
|
149
|
-
|
|
158
|
+
if self._device.telnet_available:
|
|
159
|
+
await self._device.telnet_api.async_send_commands(
|
|
160
|
+
self._device.telnet_commands.command_volume_down
|
|
161
|
+
)
|
|
162
|
+
else:
|
|
163
|
+
await self._device.api.async_get_command(
|
|
164
|
+
self._device.urls.command_volume_down
|
|
165
|
+
)
|
|
150
166
|
|
|
151
167
|
async def async_set_volume(self, volume: float) -> None:
|
|
152
168
|
"""
|
|
@@ -156,21 +172,41 @@ class DenonAVRVolume(DenonAVRFoundation):
|
|
|
156
172
|
Minimum is -80.0, maximum at 18.0
|
|
157
173
|
"""
|
|
158
174
|
if volume < -80 or volume > 18:
|
|
159
|
-
raise AvrCommandError("Invalid volume: {}"
|
|
175
|
+
raise AvrCommandError(f"Invalid volume: {volume}")
|
|
160
176
|
|
|
161
177
|
# Round volume because only values which are a multi of 0.5 are working
|
|
162
178
|
volume = round(volume * 2) / 2.0
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
179
|
+
if self._device.telnet_available:
|
|
180
|
+
await self._device.telnet_api.async_send_commands(
|
|
181
|
+
self._device.telnet_commands.command_set_volume.format(
|
|
182
|
+
volume=int(volume + 80)
|
|
183
|
+
)
|
|
184
|
+
)
|
|
185
|
+
else:
|
|
186
|
+
await self._device.api.async_get_command(
|
|
187
|
+
self._device.urls.command_set_volume.format(volume=volume)
|
|
188
|
+
)
|
|
167
189
|
|
|
168
190
|
async def async_mute(self, mute: bool) -> None:
|
|
169
191
|
"""Mute receiver via HTTP get command."""
|
|
170
192
|
if mute:
|
|
171
|
-
|
|
193
|
+
if self._device.telnet_available:
|
|
194
|
+
await self._device.telnet_api.async_send_commands(
|
|
195
|
+
self._device.telnet_commands.command_mute_on
|
|
196
|
+
)
|
|
197
|
+
else:
|
|
198
|
+
await self._device.api.async_get_command(
|
|
199
|
+
self._device.urls.command_mute_on
|
|
200
|
+
)
|
|
172
201
|
else:
|
|
173
|
-
|
|
202
|
+
if self._device.telnet_available:
|
|
203
|
+
await self._device.telnet_api.async_send_commands(
|
|
204
|
+
self._device.telnet_commands.command_mute_off
|
|
205
|
+
)
|
|
206
|
+
else:
|
|
207
|
+
await self._device.api.async_get_command(
|
|
208
|
+
self._device.urls.command_mute_off
|
|
209
|
+
)
|
|
174
210
|
|
|
175
211
|
|
|
176
212
|
def volume_factory(instance: DenonAVRFoundation) -> DenonAVRVolume:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: denonavr
|
|
3
|
-
Version: 0.11.
|
|
3
|
+
Version: 0.11.6
|
|
4
4
|
Summary: Automation Library for Denon AVR receivers
|
|
5
5
|
Author-email: Oliver Goetz <scarface@mywoh.de>
|
|
6
6
|
License: MIT
|
|
@@ -19,15 +19,17 @@ Classifier: Programming Language :: Python :: 3.8
|
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.9
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.10
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
23
|
Requires-Python: >=3.7
|
|
23
24
|
Description-Content-Type: text/markdown; charset=UTF-8
|
|
24
25
|
License-File: LICENSE
|
|
25
|
-
Requires-Dist: asyncstdlib
|
|
26
|
-
Requires-Dist: attrs
|
|
27
|
-
Requires-Dist: defusedxml
|
|
28
|
-
Requires-Dist:
|
|
29
|
-
Requires-Dist:
|
|
30
|
-
Requires-Dist:
|
|
26
|
+
Requires-Dist: asyncstdlib >=3.10.2
|
|
27
|
+
Requires-Dist: attrs >=21.2.0
|
|
28
|
+
Requires-Dist: defusedxml >=0.7.1
|
|
29
|
+
Requires-Dist: ftfy >=6.1.1
|
|
30
|
+
Requires-Dist: httpx >=0.23.1
|
|
31
|
+
Requires-Dist: netifaces >=0.11.0
|
|
32
|
+
Requires-Dist: async-timeout >=4.0.2 ; python_version < "3.11"
|
|
31
33
|
Provides-Extra: testing
|
|
32
34
|
Requires-Dist: pydocstyle ; extra == 'testing'
|
|
33
35
|
Requires-Dist: pylint ; extra == 'testing'
|
|
@@ -58,7 +60,7 @@ In addition to retrieving the current device status via HTTP calls, this version
|
|
|
58
60
|
|
|
59
61
|
As of version 0.10.0 and newer, the `denonavr` library has switched to using`async` methods to interact with Denon receivers.
|
|
60
62
|
|
|
61
|
-
Legacy synchronous methods are still
|
|
63
|
+
Legacy synchronous methods are still available to avoid breaking existing implementations, but may be deprecated in the future. Switching to `async` methods is recommended. The existing sync methods are inefficient because they use the corresponding async methods by starting and stopping its own `asyncio` loop for each command.
|
|
62
64
|
|
|
63
65
|
### Other changes:
|
|
64
66
|
|
|
@@ -129,8 +131,8 @@ The `asyncio` library should automatically be imported in the REPL. Import the
|
|
|
129
131
|
```
|
|
130
132
|
### Sound
|
|
131
133
|
```
|
|
132
|
-
>>> await d.
|
|
133
|
-
>>> await d.
|
|
134
|
+
>>> await d.async_mute(True)
|
|
135
|
+
>>> await d.async_mute(False)
|
|
134
136
|
```
|
|
135
137
|
|
|
136
138
|
### Other methods
|
|
@@ -284,5 +286,5 @@ MIT
|
|
|
284
286
|
@bdraco: https://github.com/bdraco
|
|
285
287
|
|
|
286
288
|
## Users
|
|
287
|
-
Home Assistant: https://github.com/home-assistant/home-assistant/
|
|
289
|
+
Home Assistant: https://github.com/home-assistant/home-assistant/
|
|
288
290
|
denonavr-cli: https://pypi.org/project/denonavr-cli/
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
denonavr/__init__.py,sha256=-divkN4DxZpILQgRgqab1PE7GszFDjdkCdy7aCI63nw,2035
|
|
2
|
+
denonavr/api.py,sha256=8s_TXeUidCDh4wzgbibOaJjZ1Nba5pcbGmKyLhL1m9s,28671
|
|
3
|
+
denonavr/appcommand.py,sha256=H37VK4n-yW0ISvR1hfX8G4udQtGASoY44QNaXtLSidE,7784
|
|
4
|
+
denonavr/audyssey.py,sha256=tbfOerXxjv6l3TAJ4zMBn08UPNqx-tVJEpDhwyYZ3iw,10797
|
|
5
|
+
denonavr/const.py,sha256=7jXrdTrqSrRJsYf_twqersNtdGx6odiMSsCajIHfsPA,17458
|
|
6
|
+
denonavr/decorators.py,sha256=j1Icyfw64LPLD67H2yd9nbREbTvicqG-kAxawfgvXuE,5062
|
|
7
|
+
denonavr/denonavr.py,sha256=hnsYJiVSXD9qaYr6mjlwkQL3I8NrbXXfAo8uWT35HBU,28159
|
|
8
|
+
denonavr/exceptions.py,sha256=naP7MCuNH98rv7y_lDdO7ayyvQGywnsfpHhW-o9tKeo,1725
|
|
9
|
+
denonavr/foundation.py,sha256=lCPxcbpbjbUCSNquNjaW5RXHQXdSR7Q0O8og2hcPXOY,27911
|
|
10
|
+
denonavr/input.py,sha256=kkswPrMiys1Qq7YWfwrveB-w2aaTgXAkkBa05rolbOA,41085
|
|
11
|
+
denonavr/soundmode.py,sha256=G36Nmf6lTe8Ku6sQ-2nDYHjmSjrnNr9l4wq3-B45I1g,11737
|
|
12
|
+
denonavr/ssdp.py,sha256=4gyvN0yo9qSnJ7l6iJmSC_5qW45Fq2Tt2RACpxFMSqg,7839
|
|
13
|
+
denonavr/tonecontrol.py,sha256=jg3d_OnnXKR5mq7S3mtKHyYhg7Y_qmDloqIm7WRJ71U,11093
|
|
14
|
+
denonavr/volume.py,sha256=bGEOyeNGaI4X-7C7hjEBBH4RlFCYngf4Dl2IM8ooxOo,7197
|
|
15
|
+
denonavr-0.11.6.dist-info/LICENSE,sha256=hcKXAoZnRee1NRWnxTpKyjKCz4aHhw76sZUZoB3qPTw,1068
|
|
16
|
+
denonavr-0.11.6.dist-info/METADATA,sha256=0He0qq32YZidhfW5a5K0NjPhojr5Ul1Q5zXip2SeCDs,10361
|
|
17
|
+
denonavr-0.11.6.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
|
18
|
+
denonavr-0.11.6.dist-info/top_level.txt,sha256=GKwe6bOaw_R68BR7x-C7VD3bDFKKNBf0pRkWywUZWIs,9
|
|
19
|
+
denonavr-0.11.6.dist-info/RECORD,,
|
denonavr-0.11.2.dist-info/RECORD
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
denonavr/__init__.py,sha256=IEE3zELRRUtf7Bn2gkzIBSxDdM7RW6K2DzOPYDj9rmk,2035
|
|
2
|
-
denonavr/api.py,sha256=SRpUMEIWonRE0zkA6-GBQqcArMHHLji9Zl6JYU8gxoo,23824
|
|
3
|
-
denonavr/appcommand.py,sha256=H37VK4n-yW0ISvR1hfX8G4udQtGASoY44QNaXtLSidE,7784
|
|
4
|
-
denonavr/audyssey.py,sha256=tt4XpWpi5RQyFhT0IWMGeHGUTHDdzlLyits9gfRG6JI,8709
|
|
5
|
-
denonavr/const.py,sha256=5zboqVrJfg5Qu6PGUc5snI9ADggJRq-HHY8p8hgZs0I,12932
|
|
6
|
-
denonavr/decorators.py,sha256=0V3PAM2ZNZr911f1W1CXXeTJvOWxqs1S5EjEJkkB53o,5323
|
|
7
|
-
denonavr/denonavr.py,sha256=FbPBV-iSCjbn1Jjgrb9IHUR3bpHlVnL_756L7OSZiBQ,26578
|
|
8
|
-
denonavr/exceptions.py,sha256=naP7MCuNH98rv7y_lDdO7ayyvQGywnsfpHhW-o9tKeo,1725
|
|
9
|
-
denonavr/foundation.py,sha256=Os2A1JxVHQOo0R85O8XbM0XRNzqmL3ZrDbIx9Jxpxik,26828
|
|
10
|
-
denonavr/input.py,sha256=gUQJZZ8pL_9cxQhxl1kCLVzsrl8Rls9qtVazAJpt2x8,39322
|
|
11
|
-
denonavr/soundmode.py,sha256=XBUElzd2y2h4AK73JxBvwvaqFs3ICJMJd0C_UG4XNzA,11009
|
|
12
|
-
denonavr/ssdp.py,sha256=7r8DVb9voIlH09IDNY5iSjhmpyJKf6MlZZanEO7Uqos,8011
|
|
13
|
-
denonavr/tonecontrol.py,sha256=UrK1OAKWKeSacsURsnFcSf21D51_uvcsl6FEZ5o2CTU,8310
|
|
14
|
-
denonavr/volume.py,sha256=T4SgIauLo0btkHmqxY2mqw2x7FZ7o5TKxgOv1654-9A,5940
|
|
15
|
-
denonavr-0.11.2.dist-info/LICENSE,sha256=hcKXAoZnRee1NRWnxTpKyjKCz4aHhw76sZUZoB3qPTw,1068
|
|
16
|
-
denonavr-0.11.2.dist-info/METADATA,sha256=_jk1Tj83X7T7QniPBSt5VLRZ7ZyUj_4hyBBmLmHy3d0,10300
|
|
17
|
-
denonavr-0.11.2.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
|
|
18
|
-
denonavr-0.11.2.dist-info/top_level.txt,sha256=GKwe6bOaw_R68BR7x-C7VD3bDFKKNBf0pRkWywUZWIs,9
|
|
19
|
-
denonavr-0.11.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|