| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -79,6 +79,10 @@ def __init__(self) -> None: | |||
| 79 | 79 | # be run in the event loop. | |
| 80 | 80 | ||
| 81 | 81 | def _async_add(self, record: _DNSRecord) -> bool: | |
| 82 | + """Store a record, returning True when it was not cached before. | ||
| 83 | + | ||
| 84 | + Event loop only; not threadsafe. | ||
| 85 | + """ | ||
| 82 | 86 | # Previously storage of records was implemented as a list | |
| 83 | 87 | # instead a dict. Since DNSRecords are now hashable, the implementation | |
| 84 | 88 | # uses a dict to ensure that adding a new record to the cache | |
@@ -157,6 +161,7 @@ def async_add_records(self, entries: Iterable[DNSRecord]) -> bool: | |||
| 157 | 161 | return new | |
| 158 | 162 | ||
| 159 | 163 | def _async_remove(self, record: _DNSRecord) -> None: | |
| 164 | + """Drop a record from the cache. Event loop only; not threadsafe.""" | ||
| 160 | 165 | if isinstance(record, DNSService): | |
| 161 | 166 | service_record = record | |
| 162 | 167 | _remove_key(self.service_cache, service_record.server_key, service_record) | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -563,6 +563,11 @@ def _add_broadcast_answer( # pylint: disable=no-self-use | |||
| 563 | 563 | out.add_answer_at_time(record, 0) | |
| 564 | 564 | ||
| 565 | 565 | def unregister_service(self, info: ServiceInfo) -> None: | |
| 566 | + """Withdraw a service by broadcasting goodbye records. | ||
| 567 | + | ||
| 568 | + May raise EventLoopBlocked when the event loop cannot finish the | ||
| 569 | + withdrawal in time. | ||
| 570 | + """ | ||
| 566 | 571 | assert self.loop is not None | |
| 567 | 572 | run_coro_with_timeout( | |
| 568 | 573 | self.async_unregister_service(info), | |
@@ -571,6 +576,7 @@ def unregister_service(self, info: ServiceInfo) -> None: | |||
| 571 | 576 | ) | |
| 572 | 577 | ||
| 573 | 578 | async def async_unregister_service(self, info: ServiceInfo) -> Awaitable: | |
| 579 | + """Withdraw a service from the event loop, broadcasting goodbyes.""" | ||
| 574 | 580 | info.set_server_if_missing() | |
| 575 | 581 | self.registry.async_remove(info) | |
| 576 | 582 | # If another server uses the same addresses, we do not want to send | |
@@ -673,6 +679,7 @@ def add_listener( | |||
| 673 | 679 | self.loop.call_soon_threadsafe(self.record_manager.async_add_listener, listener, question) | |
| 674 | 680 | ||
| 675 | 681 | def remove_listener(self, listener: RecordUpdateListener) -> None: | |
| 682 | + """Detach a record listener from any thread.""" | ||
| 676 | 683 | assert self.loop is not None | |
| 677 | 684 | self.loop.call_soon_threadsafe(self.record_manager.async_remove_listener, listener) | |
| 678 | 685 | ||
@@ -685,6 +692,7 @@ def async_add_listener( | |||
| 685 | 692 | self.record_manager.async_add_listener(listener, question) | |
| 686 | 693 | ||
| 687 | 694 | def async_remove_listener(self, listener: RecordUpdateListener) -> None: | |
| 695 | + """Detach a record listener; event loop only, not threadsafe.""" | ||
| 688 | 696 | self.record_manager.async_remove_listener(listener) | |
| 689 | 697 | ||
| 690 | 698 | def send( | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -64,6 +64,8 @@ class DNSQuestionType(enum.Enum): | |||
| 64 | 64 | ||
| 65 | 65 | ||
| 66 | 66 | class DNSEntry: # noqa: PLW1641 | |
| 67 | + """Identity shared by every question and record: name, type and class.""" | ||
| 68 | + | ||
| 67 | 69 | __slots__ = ("class_", "key", "name", "type", "unique") | |
| 68 | 70 | ||
| 69 | 71 | def __init__(self, name: str, type_: int, class_: int) -> None: | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -195,6 +195,7 @@ def _async_update_matching_records( | |||
| 195 | 195 | self.zc.async_notify_all() | |
| 196 | 196 | ||
| 197 | 197 | def async_remove_listener(self, listener: RecordUpdateListener) -> None: | |
| 198 | + """Detach a record listener; event loop only, not threadsafe.""" | ||
| 198 | 199 | try: | |
| 199 | 200 | self.listeners.remove(listener) | |
| 200 | 201 | self.zc.async_notify_all() | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -403,6 +403,12 @@ def _has_more_to_add( | |||
| 403 | 403 | ) | |
| 404 | 404 | ||
| 405 | 405 | def packets(self) -> list[bytes]: | |
| 406 | + """Render the queued sections into wire format chunks and finish the message. | ||
| 407 | + | ||
| 408 | + Each chunk stays within _MAX_MSG_TYPICAL, except a lone oversized | ||
| 409 | + answer which may grow to _MAX_MSG_ABSOLUTE and rely on IP | ||
| 410 | + fragmentation. | ||
| 411 | + """ | ||
| 406 | 412 | packets_data = self.packets_data | |
| 407 | 413 | ||
| 408 | 414 | if self.state == STATE_FINISHED: | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -474,6 +474,7 @@ def _unpack_text_into_properties(self) -> None: | |||
| 474 | 474 | self._properties = properties | |
| 475 | 475 | ||
| 476 | 476 | def get_name(self) -> str: | |
| 477 | + """Instance name with the service type stripped.""" | ||
| 477 | 478 | return self._name[: len(self._name) - len(self.type) - 1] | |
| 478 | 479 | ||
| 479 | 480 | def _get_ip_addresses_from_cache_lifo( | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -179,6 +179,7 @@ async def async_unregister_all_services(self) -> None: | |||
| 179 | 179 | await self.zeroconf.async_unregister_all_services() | |
| 180 | 180 | ||
| 181 | 181 | async def async_unregister_service(self, info: ServiceInfo) -> Awaitable: | |
| 182 | + """Withdraw a service, returning an awaitable that completes once the goodbyes are sent.""" | ||
| 182 | 183 | return await self.zeroconf.async_unregister_service(info) | |
| 183 | 184 | ||
| 184 | 185 | async def async_update_service(self, info: ServiceInfo) -> Awaitable: | |
| Back | FazBrowse Home | New Git URL |
0 commit comments