zeroconf 0.147.0__tar.gz → 0.147.2__tar.gz

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.

Potentially problematic release.


This version of zeroconf might be problematic. Click here for more details.

Files changed (98) hide show
  1. {zeroconf-0.147.0 → zeroconf-0.147.2}/CHANGELOG.md +20 -0
  2. {zeroconf-0.147.0 → zeroconf-0.147.2}/PKG-INFO +1 -1
  3. {zeroconf-0.147.0 → zeroconf-0.147.2}/build_ext.py +1 -1
  4. {zeroconf-0.147.0 → zeroconf-0.147.2}/pyproject.toml +3 -3
  5. {zeroconf-0.147.0 → zeroconf-0.147.2}/setup.py +1 -1
  6. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/__init__.py +1 -1
  7. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_core.py +6 -0
  8. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_dns.py +2 -2
  9. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_services/browser.py +1 -1
  10. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/const.py +1 -1
  11. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/services/test_types.py +4 -0
  12. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/test_asyncio.py +2 -1
  13. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/test_handlers.py +2 -0
  14. {zeroconf-0.147.0 → zeroconf-0.147.2}/COPYING +0 -0
  15. {zeroconf-0.147.0 → zeroconf-0.147.2}/README.rst +0 -0
  16. {zeroconf-0.147.0 → zeroconf-0.147.2}/docs/Makefile +0 -0
  17. {zeroconf-0.147.0 → zeroconf-0.147.2}/docs/_ext/zeroconfautodocfix.py +0 -0
  18. {zeroconf-0.147.0 → zeroconf-0.147.2}/docs/api.rst +0 -0
  19. {zeroconf-0.147.0 → zeroconf-0.147.2}/docs/conf.py +0 -0
  20. {zeroconf-0.147.0 → zeroconf-0.147.2}/docs/index.rst +0 -0
  21. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_cache.pxd +0 -0
  22. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_cache.py +0 -0
  23. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_dns.pxd +0 -0
  24. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_engine.py +0 -0
  25. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_exceptions.py +0 -0
  26. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_handlers/__init__.py +0 -0
  27. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_handlers/answers.pxd +0 -0
  28. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_handlers/answers.py +0 -0
  29. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_handlers/multicast_outgoing_queue.pxd +0 -0
  30. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_handlers/multicast_outgoing_queue.py +0 -0
  31. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_handlers/query_handler.pxd +0 -0
  32. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_handlers/query_handler.py +0 -0
  33. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_handlers/record_manager.pxd +0 -0
  34. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_handlers/record_manager.py +0 -0
  35. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_history.pxd +0 -0
  36. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_history.py +0 -0
  37. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_listener.pxd +0 -0
  38. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_listener.py +0 -0
  39. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_logger.py +0 -0
  40. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_protocol/__init__.py +0 -0
  41. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_protocol/incoming.pxd +0 -0
  42. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_protocol/incoming.py +0 -0
  43. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_protocol/outgoing.pxd +0 -0
  44. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_protocol/outgoing.py +0 -0
  45. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_record_update.pxd +0 -0
  46. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_record_update.py +0 -0
  47. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_services/__init__.pxd +0 -0
  48. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_services/__init__.py +0 -0
  49. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_services/browser.pxd +0 -0
  50. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_services/info.pxd +0 -0
  51. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_services/info.py +0 -0
  52. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_services/registry.pxd +0 -0
  53. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_services/registry.py +0 -0
  54. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_services/types.py +0 -0
  55. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_transport.py +0 -0
  56. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_updates.pxd +0 -0
  57. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_updates.py +0 -0
  58. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_utils/__init__.py +0 -0
  59. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_utils/asyncio.py +0 -0
  60. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_utils/ipaddress.pxd +0 -0
  61. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_utils/ipaddress.py +0 -0
  62. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_utils/name.py +0 -0
  63. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_utils/net.py +0 -0
  64. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_utils/time.pxd +0 -0
  65. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/_utils/time.py +0 -0
  66. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/asyncio.py +0 -0
  67. {zeroconf-0.147.0 → zeroconf-0.147.2}/src/zeroconf/py.typed +0 -0
  68. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/__init__.py +0 -0
  69. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/benchmarks/__init__.py +0 -0
  70. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/benchmarks/helpers.py +0 -0
  71. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/benchmarks/test_cache.py +0 -0
  72. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/benchmarks/test_incoming.py +0 -0
  73. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/benchmarks/test_outgoing.py +0 -0
  74. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/benchmarks/test_send.py +0 -0
  75. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/benchmarks/test_txt_properties.py +0 -0
  76. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/conftest.py +0 -0
  77. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/services/__init__.py +0 -0
  78. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/services/test_browser.py +0 -0
  79. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/services/test_info.py +0 -0
  80. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/services/test_registry.py +0 -0
  81. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/test_cache.py +0 -0
  82. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/test_circular_imports.py +0 -0
  83. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/test_core.py +0 -0
  84. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/test_dns.py +0 -0
  85. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/test_engine.py +0 -0
  86. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/test_exceptions.py +0 -0
  87. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/test_history.py +0 -0
  88. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/test_init.py +0 -0
  89. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/test_listener.py +0 -0
  90. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/test_logger.py +0 -0
  91. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/test_protocol.py +0 -0
  92. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/test_services.py +0 -0
  93. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/test_updates.py +0 -0
  94. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/utils/__init__.py +0 -0
  95. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/utils/test_asyncio.py +0 -0
  96. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/utils/test_ipaddress.py +0 -0
  97. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/utils/test_name.py +0 -0
  98. {zeroconf-0.147.0 → zeroconf-0.147.2}/tests/utils/test_net.py +0 -0
@@ -1,6 +1,26 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v0.147.2 (2025-09-05)
5
+
6
+ ### Bug Fixes
7
+
8
+ - Missing wheel builds for Windows
9
+ ([#1613](https://github.com/python-zeroconf/python-zeroconf/pull/1613),
10
+ [`f8e2381`](https://github.com/python-zeroconf/python-zeroconf/commit/f8e2381a500c78dcefeba3772822d5d3ec5f6060))
11
+
12
+
13
+ ## v0.147.1 (2025-09-05)
14
+
15
+ ### Bug Fixes
16
+
17
+ - Increase check time and add random wait to avoid service collisions
18
+ ([#1611](https://github.com/python-zeroconf/python-zeroconf/pull/1611),
19
+ [`8c382ee`](https://github.com/python-zeroconf/python-zeroconf/commit/8c382eedc6da80031d9a7a42f299f95f115b7e47))
20
+
21
+ Co-authored-by: J. Nick Koston <nick@koston.org>
22
+
23
+
4
24
  ## v0.147.0 (2025-05-03)
5
25
 
6
26
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: zeroconf
3
- Version: 0.147.0
3
+ Version: 0.147.2
4
4
  Summary: A pure python implementation of multicast DNS service discovery
5
5
  License: LGPL-2.1-or-later
6
6
  Author: Paul Scott-Murphy
@@ -56,7 +56,7 @@ def build(setup_kwargs: Any) -> None:
56
56
  if os.environ.get("SKIP_CYTHON"):
57
57
  return
58
58
  try:
59
- from Cython.Build import cythonize
59
+ from Cython.Build import cythonize # noqa: PLC0415
60
60
 
61
61
  setup_kwargs.update(
62
62
  {
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "zeroconf"
3
- version = "0.147.0"
3
+ version = "0.147.2"
4
4
  description = "A pure python implementation of multicast DNS service discovery"
5
5
  authors = ["Paul Scott-Murphy", "William McBrine", "Jakub Stasiak", "J. Nick Koston"]
6
6
  license = "LGPL-2.1-or-later"
@@ -75,11 +75,11 @@ ifaddr = ">=0.1.7"
75
75
  [tool.poetry.group.dev.dependencies]
76
76
  pytest = ">=7.2,<9.0"
77
77
  pytest-cov = ">=4,<7"
78
- pytest-asyncio = ">=0.20.3,<0.27.0"
78
+ pytest-asyncio = ">=0.20.3,<1.2.0"
79
79
  cython = "^3.0.5"
80
80
  setuptools = ">=65.6.3,<81.0.0"
81
81
  pytest-timeout = "^2.1.0"
82
- pytest-codspeed = "^3.1.0"
82
+ pytest-codspeed = ">=3.1,<5.0"
83
83
 
84
84
  [tool.poetry.group.docs.dependencies]
85
85
  sphinx = "^7.4.7 || ^8.1.3"
@@ -19,7 +19,7 @@ install_requires = \
19
19
 
20
20
  setup_kwargs = {
21
21
  'name': 'zeroconf',
22
- 'version': '0.147.0',
22
+ 'version': '0.147.2',
23
23
  'description': 'A pure python implementation of multicast DNS service discovery',
24
24
  'long_description': 'python-zeroconf\n===============\n\n.. image:: https://github.com/python-zeroconf/python-zeroconf/workflows/CI/badge.svg\n :target: https://github.com/python-zeroconf/python-zeroconf?query=workflow%3ACI+branch%3Amaster\n\n.. image:: https://img.shields.io/pypi/v/zeroconf.svg\n :target: https://pypi.python.org/pypi/zeroconf\n\n.. image:: https://codecov.io/gh/python-zeroconf/python-zeroconf/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/python-zeroconf/python-zeroconf\n\n.. image:: https://img.shields.io/endpoint?url=https://codspeed.io/badge.json\n :target: https://codspeed.io/python-zeroconf/python-zeroconf\n :alt: Codspeed.io status for python-zeroconf\n\n.. image:: https://readthedocs.org/projects/python-zeroconf/badge/?version=latest\n :target: https://python-zeroconf.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\n`Documentation <https://python-zeroconf.readthedocs.io/en/latest/>`_.\n\nThis is fork of pyzeroconf, Multicast DNS Service Discovery for Python,\noriginally by Paul Scott-Murphy (https://github.com/paulsm/pyzeroconf),\nmodified by William McBrine (https://github.com/wmcbrine/pyzeroconf).\n\nThe original William McBrine\'s fork note::\n\n This fork is used in all of my TiVo-related projects: HME for Python\n (and therefore HME/VLC), Network Remote, Remote Proxy, and pyTivo.\n Before this, I was tracking the changes for zeroconf.py in three\n separate repos. I figured I should have an authoritative source.\n\n Although I make changes based on my experience with TiVos, I expect that\n they\'re generally applicable. This version also includes patches found\n on the now-defunct (?) Launchpad repo of pyzeroconf, and elsewhere\n around the net -- not always well-documented, sorry.\n\nCompatible with:\n\n* Bonjour\n* Avahi\n\nCompared to some other Zeroconf/Bonjour/Avahi Python packages, python-zeroconf:\n\n* isn\'t tied to Bonjour or Avahi\n* doesn\'t use D-Bus\n* doesn\'t force you to use particular event loop or Twisted (asyncio is used under the hood but not required)\n* is pip-installable\n* has PyPI distribution\n* has an optional cython extension for performance (pure python is supported as well)\n\nPython compatibility\n--------------------\n\n* CPython 3.9+\n* PyPy 3.9+\n\nVersioning\n----------\n\nThis project uses semantic versioning.\n\nStatus\n------\n\nThis project is actively maintained.\n\nTraffic Reduction\n-----------------\n\nBefore version 0.32, most traffic reduction techniques described in https://datatracker.ietf.org/doc/html/rfc6762#section-7\nwhere not implemented which could lead to excessive network traffic. It is highly recommended that version 0.32 or later\nis used if this is a concern.\n\nIPv6 support\n------------\n\nIPv6 support is relatively new and currently limited, specifically:\n\n* `InterfaceChoice.All` is an alias for `InterfaceChoice.Default` on non-POSIX\n systems.\n* Dual-stack IPv6 sockets are used, which may not be supported everywhere (some\n BSD variants do not have them).\n* Listening on localhost (`::1`) does not work. Help with understanding why is\n appreciated.\n\nHow to get python-zeroconf?\n===========================\n\n* PyPI page https://pypi.org/project/zeroconf/\n* GitHub project https://github.com/python-zeroconf/python-zeroconf\n\nThe easiest way to install python-zeroconf is using pip::\n\n pip install zeroconf\n\n\n\nHow do I use it?\n================\n\nHere\'s an example of browsing for a service:\n\n.. code-block:: python\n\n from zeroconf import ServiceBrowser, ServiceListener, Zeroconf\n\n\n class MyListener(ServiceListener):\n\n def update_service(self, zc: Zeroconf, type_: str, name: str) -> None:\n print(f"Service {name} updated")\n\n def remove_service(self, zc: Zeroconf, type_: str, name: str) -> None:\n print(f"Service {name} removed")\n\n def add_service(self, zc: Zeroconf, type_: str, name: str) -> None:\n info = zc.get_service_info(type_, name)\n print(f"Service {name} added, service info: {info}")\n\n\n zeroconf = Zeroconf()\n listener = MyListener()\n browser = ServiceBrowser(zeroconf, "_http._tcp.local.", listener)\n try:\n input("Press enter to exit...\\n\\n")\n finally:\n zeroconf.close()\n\n.. note::\n\n Discovery and service registration use *all* available network interfaces by default.\n If you want to customize that you need to specify ``interfaces`` argument when\n constructing ``Zeroconf`` object (see the code for details).\n\nIf you don\'t know the name of the service you need to browse for, try:\n\n.. code-block:: python\n\n from zeroconf import ZeroconfServiceTypes\n print(\'\\n\'.join(ZeroconfServiceTypes.find()))\n\nSee examples directory for more.\n\nChangelog\n=========\n\n`Changelog <CHANGELOG.md>`_\n\nLicense\n=======\n\nLGPL, see COPYING file for details.\n',
25
25
  'author': 'Paul Scott-Murphy',
@@ -88,7 +88,7 @@ from ._utils.time import ( # noqa # import needed for backwards compat
88
88
 
89
89
  __author__ = "Paul Scott-Murphy, William McBrine"
90
90
  __maintainer__ = "Jakub Stasiak <jakub@stasiak.at>"
91
- __version__ = "0.147.0"
91
+ __version__ = "0.147.2"
92
92
  __license__ = "LGPL"
93
93
 
94
94
 
@@ -24,6 +24,7 @@ from __future__ import annotations
24
24
 
25
25
  import asyncio
26
26
  import logging
27
+ import random
27
28
  import sys
28
29
  import threading
29
30
  from collections.abc import Awaitable
@@ -544,6 +545,11 @@ class Zeroconf(QuietLogger):
544
545
  instance_name = instance_name_from_service_info(info, strict=strict)
545
546
  if cooperating_responders:
546
547
  return
548
+
549
+ # Wait a random amount of time up avoid collisions and avoid
550
+ # a thundering herd when multiple services are started on the network
551
+ await self.async_wait(random.randint(150, 250)) # noqa: S311
552
+
547
553
  next_instance_number = 2
548
554
  next_time = now = current_time_millis()
549
555
  i = 0
@@ -63,7 +63,7 @@ class DNSQuestionType(enum.Enum):
63
63
  QM = 2
64
64
 
65
65
 
66
- class DNSEntry:
66
+ class DNSEntry: # noqa: PLW1641
67
67
  """A DNS entry"""
68
68
 
69
69
  __slots__ = ("class_", "key", "name", "type", "unique")
@@ -161,7 +161,7 @@ class DNSQuestion(DNSEntry):
161
161
  )
162
162
 
163
163
 
164
- class DNSRecord(DNSEntry):
164
+ class DNSRecord(DNSEntry): # noqa: PLW1641
165
165
  """A DNS record - like a DNS entry, but has a TTL"""
166
166
 
167
167
  __slots__ = ("created", "ttl")
@@ -99,7 +99,7 @@ heappop = heapq.heappop
99
99
  heappush = heapq.heappush
100
100
 
101
101
 
102
- class _ScheduledPTRQuery:
102
+ class _ScheduledPTRQuery: # noqa: PLW1641
103
103
  __slots__ = (
104
104
  "alias",
105
105
  "cancelled",
@@ -28,7 +28,7 @@ import socket
28
28
  # Some timing constants
29
29
 
30
30
  _UNREGISTER_TIME = 125 # ms
31
- _CHECK_TIME = 175 # ms
31
+ _CHECK_TIME = 500 # ms
32
32
  _REGISTER_TIME = 225 # ms
33
33
  _LISTENER_TIME = 200 # ms
34
34
  _BROWSER_TIME = 10000 # ms
@@ -91,6 +91,10 @@ def test_integration_with_listener_v6_records(disable_duplicate_packet_suppressi
91
91
 
92
92
  @unittest.skipIf(not has_working_ipv6() or sys.platform == "win32", "Requires IPv6")
93
93
  @unittest.skipIf(os.environ.get("SKIP_IPV6"), "IPv6 tests disabled")
94
+ @unittest.skipIf(
95
+ sys.platform == "darwin" and os.environ.get("GITHUB_ACTIONS") == "true",
96
+ "IPv6 multicast not working on macOS GitHub Actions",
97
+ )
94
98
  def test_integration_with_listener_ipv6(disable_duplicate_packet_suppression):
95
99
  type_ = "_test-listenv6ip-type._tcp.local."
96
100
  name = "xxxyyy"
@@ -1081,7 +1081,8 @@ async def test_integration():
1081
1081
  # The rest of the startup questions should have
1082
1082
  # known answers
1083
1083
  for answer_list in answers[1:-2]:
1084
- assert len(answer_list) == 1
1084
+ # Allow 0 or 1 answers due to random delays and timing
1085
+ assert len(answer_list) <= 1
1085
1086
  # Once the TTL is reached, the last question should have no known answers
1086
1087
  assert len(answers[-1]) == 0
1087
1088
 
@@ -1863,6 +1863,7 @@ async def test_response_aggregation_random_delay():
1863
1863
  addresses=[socket.inet_aton("10.0.1.2")],
1864
1864
  )
1865
1865
  mocked_zc = unittest.mock.MagicMock()
1866
+ mocked_zc.loop = asyncio.get_running_loop()
1866
1867
  outgoing_queue = MulticastOutgoingQueue(mocked_zc, 0, 500)
1867
1868
 
1868
1869
  now = current_time_millis()
@@ -1930,6 +1931,7 @@ async def test_future_answers_are_removed_on_send():
1930
1931
  addresses=[socket.inet_aton("10.0.1.3")],
1931
1932
  )
1932
1933
  mocked_zc = unittest.mock.MagicMock()
1934
+ mocked_zc.loop = asyncio.get_running_loop()
1933
1935
  outgoing_queue = MulticastOutgoingQueue(mocked_zc, 0, 0)
1934
1936
 
1935
1937
  now = current_time_millis()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes