Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 12 additions & 4 deletions zeroconf/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -1284,12 +1284,22 @@ def add(self, entry: DNSRecord) -> None:
if isinstance(entry, DNSService):
self.service_cache.setdefault(entry.server, []).append(entry)

def add_records(self, entries: Iterable[DNSRecord]) -> None:
"""Add multiple records."""
for entry in entries:
self.add(entry)

def remove(self, entry: DNSRecord) -> None:
"""Removes an entry."""
if isinstance(entry, DNSService):
DNSCache.remove_key(self.service_cache, entry.server, entry)
DNSCache.remove_key(self.cache, entry.key, entry)

def remove_records(self, entries: Iterable[DNSRecord]) -> None:
"""Remove multiple records."""
for entry in entries:
self.remove(entry)

@staticmethod
def remove_key(cache: dict, key: str, entry: DNSRecord) -> None:
"""Forgiving remove of a cache key."""
Expand Down Expand Up @@ -2940,13 +2950,11 @@ def handle_response(self, msg: DNSIncoming) -> None: # pylint: disable=too-many
# zc.get_service_info will see the cached value
# but ONLY after all the record updates have been
# processsed.
for record in itertools.chain(address_adds, other_adds):
self.cache.add(record)
self.cache.add_records(itertools.chain(address_adds, other_adds))
# Removes are processed last since
# ServiceInfo could generate an un-needed query
# because the data was not yet populated.
for record in removes:
self.cache.remove(record)
self.cache.remove_records(removes)

def _answer_service_type_enumeration_query(self, msg: DNSIncoming, out: DNSOutgoing) -> None:
"""Provide an answer to a service type enumeration query.
Expand Down