Skip to content

Commit 04cd268

Browse files
authored
Drop AsyncServiceListener (#754)
1 parent 4d0a8f3 commit 04cd268

3 files changed

Lines changed: 21 additions & 38 deletions

File tree

examples/async_browser.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,22 @@
1010
import logging
1111
from typing import Any, Optional, cast
1212

13-
from zeroconf import IPVersion, ServiceStateChange
14-
from zeroconf.aio import AsyncServiceBrowser, AsyncZeroconf, AsyncZeroconfServiceTypes
13+
from zeroconf import IPVersion, ServiceStateChange, Zeroconf
14+
from zeroconf.aio import AsyncServiceBrowser, AsyncServiceInfo, AsyncZeroconf, AsyncZeroconfServiceTypes
1515

1616

1717
def async_on_service_state_change(
18-
zeroconf: AsyncZeroconf, service_type: str, name: str, state_change: ServiceStateChange
18+
zeroconf: Zeroconf, service_type: str, name: str, state_change: ServiceStateChange
1919
) -> None:
2020
print("Service %s of type %s state changed: %s" % (name, service_type, state_change))
2121
if state_change is not ServiceStateChange.Added:
2222
return
2323
asyncio.ensure_future(async_display_service_info(zeroconf, service_type, name))
2424

2525

26-
async def async_display_service_info(zeroconf: AsyncZeroconf, service_type: str, name: str) -> None:
27-
info = await zeroconf.async_get_service_info(service_type, name)
26+
async def async_display_service_info(zeroconf: Zeroconf, service_type: str, name: str) -> None:
27+
info = AsyncServiceInfo(service_type, name)
28+
await info.async_request(zeroconf, 3000)
2829
print("Info from zeroconf.get_service_info: %r" % (info))
2930
if info:
3031
addresses = ["%s:%d" % (addr, cast(int, info.port)) for addr in info.parsed_addresses()]
@@ -59,7 +60,9 @@ async def async_run(self) -> None:
5960
)
6061

6162
print("\nBrowsing %s service(s), press Ctrl-C to exit...\n" % services)
62-
self.aiobrowser = AsyncServiceBrowser(self.aiozc, services, handlers=[async_on_service_state_change])
63+
self.aiobrowser = AsyncServiceBrowser(
64+
self.aiozc.zeroconf, services, handlers=[async_on_service_state_change]
65+
)
6366
while True:
6467
await asyncio.sleep(1)
6568

tests/test_aio.py

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
import pytest
1414

15-
from zeroconf.aio import AsyncServiceInfo, AsyncServiceListener, AsyncZeroconf, AsyncZeroconfServiceTypes
15+
from zeroconf.aio import AsyncServiceInfo, AsyncZeroconf, AsyncZeroconfServiceTypes
1616
from zeroconf import Zeroconf
1717
from zeroconf.const import _LISTENER_TIME
1818
from zeroconf._exceptions import BadTypeInNameException, NonUniqueNameException, ServiceNameAlreadyRegistered
@@ -433,16 +433,7 @@ async def test_async_service_browser() -> None:
433433

434434
calls = []
435435

436-
with pytest.raises(NotImplementedError):
437-
AsyncServiceListener().add_service(aiozc, "_type", "name._type")
438-
439-
with pytest.raises(NotImplementedError):
440-
AsyncServiceListener().remove_service(aiozc, "_type", "name._type")
441-
442-
with pytest.raises(NotImplementedError):
443-
AsyncServiceListener().update_service(aiozc, "_type", "name._type")
444-
445-
class MyListener(AsyncServiceListener):
436+
class MyListener(ServiceListener):
446437
def add_service(self, aiozc: AsyncZeroconf, type: str, name: str) -> None:
447438
calls.append(("add", type, name))
448439

zeroconf/aio.py

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
from ._core import Zeroconf
2828
from ._exceptions import NonUniqueNameException
29+
from ._services import ServiceListener
2930
from ._services.browser import _ServiceBrowserBase
3031
from ._services.info import ServiceInfo, instance_name_from_service_info
3132
from ._services.types import ZeroconfServiceTypes
@@ -45,22 +46,10 @@
4546
"AsyncZeroconf",
4647
"AsyncServiceInfo",
4748
"AsyncServiceBrowser",
48-
"AsyncServiceListener",
4949
"AsyncZeroconfServiceTypes",
5050
]
5151

5252

53-
class AsyncServiceListener:
54-
def add_service(self, aiozc: 'AsyncZeroconf', type_: str, name: str) -> None:
55-
raise NotImplementedError()
56-
57-
def remove_service(self, aiozc: 'AsyncZeroconf', type_: str, name: str) -> None:
58-
raise NotImplementedError()
59-
60-
def update_service(self, aiozc: 'AsyncZeroconf', type_: str, name: str) -> None:
61-
raise NotImplementedError()
62-
63-
6453
class AsyncServiceInfo(ServiceInfo):
6554
"""An async version of ServiceInfo."""
6655

@@ -74,15 +63,15 @@ class AsyncServiceBrowser(_ServiceBrowserBase):
7463

7564
def __init__(
7665
self,
77-
aiozc: 'AsyncZeroconf',
66+
zeroconf: 'Zeroconf',
7867
type_: Union[str, list],
79-
handlers: Optional[Union[AsyncServiceListener, List[Callable[..., None]]]] = None,
80-
listener: Optional[AsyncServiceListener] = None,
68+
handlers: Optional[Union[ServiceListener, List[Callable[..., None]]]] = None,
69+
listener: Optional[ServiceListener] = None,
8170
addr: Optional[str] = None,
8271
port: int = _MDNS_PORT,
8372
delay: int = _BROWSER_TIME,
8473
) -> None:
85-
super().__init__(aiozc.zeroconf, type_, handlers, listener, addr, port, delay) # type: ignore
74+
super().__init__(zeroconf, type_, handlers, listener, addr, port, delay)
8675
self._browser_task = cast(asyncio.Task, asyncio.ensure_future(self.async_browser_task()))
8776

8877
async def async_cancel(self) -> None:
@@ -115,7 +104,7 @@ async def async_find(
115104
local_zc = aiozc or AsyncZeroconf(interfaces=interfaces, ip_version=ip_version)
116105
listener = cls()
117106
async_browser = AsyncServiceBrowser(
118-
local_zc, _SERVICE_TYPE_ENUMERATION_NAME, listener=listener # type: ignore
107+
local_zc.zeroconf, _SERVICE_TYPE_ENUMERATION_NAME, listener=listener
119108
)
120109

121110
# wait for responses
@@ -168,7 +157,7 @@ def __init__(
168157
ip_version=ip_version,
169158
apple_p2p=apple_p2p,
170159
)
171-
self.async_browsers: Dict[AsyncServiceListener, AsyncServiceBrowser] = {}
160+
self.async_browsers: Dict[ServiceListener, AsyncServiceBrowser] = {}
172161

173162
async def _async_broadcast_service(self, info: ServiceInfo, interval: int, ttl: Optional[int]) -> None:
174163
"""Send a broadcasts to announce a service at intervals."""
@@ -269,14 +258,14 @@ async def async_get_service_info(
269258
return info
270259
return None
271260

272-
async def async_add_service_listener(self, type_: str, listener: AsyncServiceListener) -> None:
261+
async def async_add_service_listener(self, type_: str, listener: ServiceListener) -> None:
273262
"""Adds a listener for a particular service type. This object
274263
will then have its add_service and remove_service methods called when
275264
services of that type become available and unavailable."""
276265
await self.async_remove_service_listener(listener)
277-
self.async_browsers[listener] = AsyncServiceBrowser(self, type_, listener)
266+
self.async_browsers[listener] = AsyncServiceBrowser(self.zeroconf, type_, listener)
278267

279-
async def async_remove_service_listener(self, listener: AsyncServiceListener) -> None:
268+
async def async_remove_service_listener(self, listener: ServiceListener) -> None:
280269
"""Removes a listener from the set that is currently listening."""
281270
if listener in self.async_browsers:
282271
await self.async_browsers[listener].async_cancel()

0 commit comments

Comments
 (0)