Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit c827f9f

Browse filesBrowse files
committed
Improve type hint coverage
1 parent 41b31cb commit c827f9f
Copy full SHA for c827f9f

File tree

1 file changed

+40
-29
lines changed
Filter options

1 file changed

+40
-29
lines changed

‎zeroconf/__init__.py

Copy file name to clipboardExpand all lines: zeroconf/__init__.py
+40-29Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,9 @@ class InterfaceChoice(enum.Enum):
188188
All = 2
189189

190190

191+
InterfacesType = Union[List[Union[str, int]], InterfaceChoice]
192+
193+
191194
@enum.unique
192195
class ServiceStateChange(enum.Enum):
193196
Added = 1
@@ -1155,7 +1158,7 @@ class Engine(threading.Thread):
11551158
packets.
11561159
"""
11571160

1158-
def __init__(self, zc):
1161+
def __init__(self, zc: 'Zeroconf') -> None:
11591162
threading.Thread.__init__(self, name='zeroconf-Engine')
11601163
self.daemon = True
11611164
self.zc = zc
@@ -1164,7 +1167,7 @@ def __init__(self, zc):
11641167
self.condition = threading.Condition()
11651168
self.start()
11661169

1167-
def run(self):
1170+
def run(self) -> None:
11681171
while not self.zc.done:
11691172
with self.condition:
11701173
rs = self.readers.keys()
@@ -1188,12 +1191,12 @@ def run(self):
11881191
if e.args[0] not in (errno.EBADF, errno.ENOTCONN) or not self.zc.done:
11891192
raise
11901193

1191-
def add_reader(self, reader, socket_):
1194+
def add_reader(self, reader: 'Listener', socket_: socket.socket) -> None:
11921195
with self.condition:
11931196
self.readers[socket_] = reader
11941197
self.condition.notify()
11951198

1196-
def del_reader(self, socket_):
1199+
def del_reader(self, socket_: socket.socket) -> None:
11971200
with self.condition:
11981201
del self.readers[socket_]
11991202
self.condition.notify()
@@ -1582,7 +1585,7 @@ def parsed_addresses(self, version: IPVersion = IPVersion.All) -> List[str]:
15821585
for addr in result
15831586
]
15841587

1585-
def _set_properties(self, properties: Union[bytes, ServicePropertiesType]):
1588+
def _set_properties(self, properties: Union[bytes, ServicePropertiesType]) -> None:
15861589
"""Sets properties and text of this info from a dictionary"""
15871590
if isinstance(properties, dict):
15881591
self._properties = properties
@@ -1612,7 +1615,7 @@ def _set_properties(self, properties: Union[bytes, ServicePropertiesType]):
16121615
else:
16131616
self.text = properties
16141617

1615-
def _set_text(self, text):
1618+
def _set_text(self, text: bytes) -> None:
16161619
"""Sets properties and text given a text field"""
16171620
self.text = text
16181621
result = {} # type: ServicePropertiesType
@@ -1628,7 +1631,7 @@ def _set_text(self, text):
16281631
for s in strs:
16291632
parts = s.split(b'=', 1)
16301633
try:
1631-
key, value = parts
1634+
key, value = parts # type: Tuple[bytes, Union[bool, bytes]]
16321635
except ValueError:
16331636
# No equals sign at all
16341637
key = s
@@ -1645,7 +1648,7 @@ def _set_text(self, text):
16451648

16461649
self._properties = result
16471650

1648-
def get_name(self):
1651+
def get_name(self) -> str:
16491652
"""Name accessor"""
16501653
if self.type is not None and self.name.endswith("." + self.type):
16511654
return self.name[: len(self.name) - len(self.type) - 1]
@@ -1760,17 +1763,23 @@ class ZeroconfServiceTypes(ServiceListener):
17601763
Return all of the advertised services on any local networks
17611764
"""
17621765

1763-
def __init__(self):
1766+
def __init__(self) -> None:
17641767
self.found_services = set() # type: Set[str]
17651768

1766-
def add_service(self, zc, type_, name):
1769+
def add_service(self, zc: 'Zeroconf', type_: str, name: str) -> None:
17671770
self.found_services.add(name)
17681771

1769-
def remove_service(self, zc, type_, name):
1772+
def remove_service(self, zc: 'Zeroconf', type_: str, name: str) -> None:
17701773
pass
17711774

17721775
@classmethod
1773-
def find(cls, zc=None, timeout=5, interfaces=InterfaceChoice.All, ip_version=None):
1776+
def find(
1777+
cls,
1778+
zc: Optional['Zeroconf'] = None,
1779+
timeout: Union[int, float] = 5,
1780+
interfaces: InterfacesType = InterfaceChoice.All,
1781+
ip_version: Optional[IPVersion] = None,
1782+
) -> Tuple[str, ...]:
17741783
"""
17751784
Return all of the advertised services on any local networks.
17761785
@@ -1860,7 +1869,7 @@ def ip6_addresses_to_indexes(interfaces: List[Union[str, int]]) -> List[int]:
18601869

18611870

18621871
def normalize_interface_choice(
1863-
choice: Union[List[Union[str, int]], InterfaceChoice], ip_version: IPVersion = IPVersion.V4Only
1872+
choice: InterfacesType, ip_version: IPVersion = IPVersion.V4Only
18641873
) -> List[Union[str, int]]:
18651874
"""Convert the interfaces choice into internal representation.
18661875
@@ -1946,17 +1955,17 @@ def new_socket(port: int = _MDNS_PORT, ip_version: IPVersion = IPVersion.V4Only)
19461955
return s
19471956

19481957

1949-
def add_multicast_member(listen_socket, interface):
1958+
def add_multicast_member(listen_socket: socket.socket, interface: Union[str, int]) -> Optional[socket.socket]:
19501959
# This is based on assumptions in normalize_interface_choice
19511960
is_v6 = isinstance(interface, int)
19521961
log.debug('Adding %r to multicast group', interface)
19531962
try:
19541963
if is_v6:
1955-
iface_bin = struct.pack('@I', interface)
1964+
iface_bin = struct.pack('@I', cast(int, interface))
19561965
_value = _MDNS_ADDR6_BYTES + iface_bin
19571966
listen_socket.setsockopt(_IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, _value)
19581967
else:
1959-
_value = _MDNS_ADDR_BYTES + socket.inet_aton(interface)
1968+
_value = _MDNS_ADDR_BYTES + socket.inet_aton(cast(str, interface))
19601969
listen_socket.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, _value)
19611970
except socket.error as e:
19621971
_errno = get_errno(e)
@@ -1966,17 +1975,17 @@ def add_multicast_member(listen_socket, interface):
19661975
'it is expected to happen on some systems',
19671976
interface,
19681977
)
1969-
return
1978+
return None
19701979
elif _errno == errno.EADDRNOTAVAIL:
19711980
log.info(
19721981
'Address not available when adding %s to multicast '
19731982
'group, it is expected to happen on some systems',
19741983
interface,
19751984
)
1976-
return
1985+
return None
19771986
elif _errno == errno.EINVAL:
19781987
log.info('Interface of %s does not support multicast, ' 'it is expected in WSL', interface)
1979-
return
1988+
return None
19801989
else:
19811990
raise
19821991

@@ -1985,15 +1994,17 @@ def add_multicast_member(listen_socket, interface):
19851994
if is_v6:
19861995
respond_socket.setsockopt(_IPPROTO_IPV6, socket.IPV6_MULTICAST_IF, iface_bin)
19871996
else:
1988-
respond_socket.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_IF, socket.inet_aton(interface))
1997+
respond_socket.setsockopt(
1998+
socket.IPPROTO_IP, socket.IP_MULTICAST_IF, socket.inet_aton(cast(str, interface))
1999+
)
19892000
return respond_socket
19902001

19912002

19922003
def create_sockets(
1993-
interfaces: Union[List[Union[str, int]], InterfaceChoice] = InterfaceChoice.All,
2004+
interfaces: InterfacesType = InterfaceChoice.All,
19942005
unicast: bool = False,
19952006
ip_version: IPVersion = IPVersion.V4Only,
1996-
):
2007+
) -> Tuple[Optional[socket.socket], List[socket.socket]]:
19972008
if unicast:
19982009
listen_socket = None
19992010
else:
@@ -2005,7 +2016,7 @@ def create_sockets(
20052016

20062017
for i in interfaces:
20072018
if not unicast:
2008-
respond_socket = add_multicast_member(listen_socket, i)
2019+
respond_socket = add_multicast_member(cast(socket.socket, listen_socket), i)
20092020
else:
20102021
respond_socket = new_socket(port=0, ip_version=ip_version)
20112022

@@ -2020,9 +2031,9 @@ def get_errno(e: Exception) -> int:
20202031
return cast(int, e.args[0])
20212032

20222033

2023-
def can_send_to(sock, address: str):
2034+
def can_send_to(sock: socket.socket, address: str) -> bool:
20242035
addr = ipaddress.ip_address(address)
2025-
return addr.version == 6 if sock.family == socket.AF_INET6 else addr.version == 4
2036+
return cast(bool, addr.version == 6 if sock.family == socket.AF_INET6 else addr.version == 4)
20262037

20272038

20282039
class Zeroconf(QuietLogger):
@@ -2034,7 +2045,7 @@ class Zeroconf(QuietLogger):
20342045

20352046
def __init__(
20362047
self,
2037-
interfaces: Union[List[Union[str, int]], InterfaceChoice] = InterfaceChoice.All,
2048+
interfaces: InterfacesType = InterfaceChoice.All,
20382049
unicast: bool = False,
20392050
ip_version: Optional[IPVersion] = None,
20402051
) -> None:
@@ -2085,7 +2096,7 @@ def __init__(
20852096
self.engine = Engine(self)
20862097
self.listener = Listener(self)
20872098
if not unicast:
2088-
self.engine.add_reader(self.listener, self._listen_socket)
2099+
self.engine.add_reader(self.listener, cast(socket.socket, self._listen_socket))
20892100
else:
20902101
for s in self._respond_sockets:
20912102
self.engine.add_reader(self.listener, s)
@@ -2544,8 +2555,8 @@ def close(self) -> None:
25442555

25452556
# shutdown recv socket and thread
25462557
if not self.unicast:
2547-
self.engine.del_reader(self._listen_socket)
2548-
self._listen_socket.close()
2558+
self.engine.del_reader(cast(socket.socket, self._listen_socket))
2559+
cast(socket.socket, self._listen_socket).close()
25492560
else:
25502561
for s in self._respond_sockets:
25512562
self.engine.del_reader(s)

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.