Changelog¶
To be included in v0.2.0- (if present)¶
v0.2.0- [UNRELEASED DRAFT]¶
(2026-05-21)
Improved documentation¶
Updated the README quick starts, docs landing page, runnable example and API reference to use
async withso copy-pasted code closes the resolver automatically instead of demonstrating the manualtry/finallyclose – by @aiolibsbot.Related issues and pull requests on GitHub: #92.
Added a runnable
examples/dual.pydemonstratingAsyncDualMDNSResolverso the dual mDNS/DNS resolver has a copy-pasteable example alongside the existing single-resolver one – by @aiolibsbot.Related issues and pull requests on GitHub: #100.
Documented that mDNS resolution of
.localnames is not authenticated and should not be treated as a trust boundary, with guidance to use HTTPS with certificate verification (optionally certificate pinning or mTLS) for sensitive.localservices and a note thatmdns_timeout=0orNonerestricts mDNS to thezeroconfcache – by @bdraco.Related issues and pull requests on GitHub: #102.
Contributor-facing changes¶
Added regression tests covering the cache-only behavior of
AsyncMDNSResolverwhenmdns_timeoutis0orNone– by @aiolibsbot.Related issues and pull requests on GitHub: #93.
Added tests covering
AsyncDualMDNSResolver’s concurrent mDNS/DNS merge for theAF_UNSPECandAF_INET6address families, which were previously only exercised for IPv4 – by @aiolibsbot.Related issues and pull requests on GitHub: #94.
Added a
dual_mdns_resolverfactory test fixture mirroringmdns_resolversoAsyncDualMDNSResolvertests can selectmdns_timeoutthrough the public constructor instead of poking private state – by @aiolibsbot.Related issues and pull requests on GitHub: #95.
Added regression tests pinning the mDNS routing boundary so near-miss hostnames (e.g.
host.local.example.comorfoo.localdomain) stay on the unicast DNS path instead of being misrouted to mDNS – by @aiolibsbot.Related issues and pull requests on GitHub: #96.
Added tests asserting the
family,protoandflagsfields of theResolveResultentries returned by the mDNS resolvers, locking in that each result’sfamilyfollows the resolved address version rather than the query family – by @aiolibsbot.Related issues and pull requests on GitHub: #97.
Added regression tests pinning the
mdns_timeoutseconds-to-milliseconds conversion thatAsyncMDNSResolverforwards tozeroconf’sasync_request– by @aiolibsbot.Related issues and pull requests on GitHub: #101.
Released versions¶
v0.2.0¶
(2026-05-20)
Bug fixes¶
Matched the
.localmDNS suffix case-insensitively so hostnames such asMyHost.LOCALare routed through mDNS as required by RFC 6762 – by @aiolibsbot.Related issues and pull requests on GitHub: #65.
Cancelled the in-flight mDNS and DNS lookup tasks when
AsyncDualMDNSResolver.resolve()is itself cancelled, so a cancelled lookup no longer orphans tasks that keep running against the sharedzeroconfinstance – by @bdraco.Related issues and pull requests on GitHub: #69.
Made resolver
close()idempotent – a second call on a resolver that owns itsAsyncZeroconfno longer raisesAttributeError– by @aiolibsbot.Related issues and pull requests on GitHub: #74.
Stopped
AsyncDualMDNSResolverfrom returning the same address twice when the mDNS and DNS resolvers agree on a.localname – by @aiolibsbot.Related issues and pull requests on GitHub: #87.
Features¶
Added async context manager support to
AsyncMDNSResolverandAsyncDualMDNSResolver, soasync withcloses the resolver automatically – by @aiolibsbot.Related issues and pull requests on GitHub: #90.
Removals and backward incompatible breaking changes¶
Improved documentation¶
Corrected the public API module docstring (it described an unrelated project), fixed a grammar error in the package docstring, and normalized the indentation of the class directives in the API reference so the parameter lists render correctly, and added an intersphinx mapping to
python-zeroconfso theasync_zeroconfparameter cross-references resolve under the nitpicky docs build – by @aiolibsbot.Related issues and pull requests on GitHub: #67.
Fixed the README quick-start example leaking the resolver: a resolver passed to
aiohttp.TCPConnectoris owned by the caller, so it is now closed in afinallyblock – by @aiolibsbot.Related issues and pull requests on GitHub: #80.
Completed the documentation landing page: filled the empty Introduction section, added an installation snippet, and added a runnable usage example that closes the resolver in a
finallyblock. Also fixed the same resolver leak in theAsyncMDNSResolverreference example – by @aiolibsbot.Related issues and pull requests on GitHub: #84.
Documented the
resolve()andclose()methods ofAsyncMDNSResolverandAsyncDualMDNSResolverin the API reference, including the.localrouting behaviour and theAsyncZeroconfownership semantics ofclose()– by @aiolibsbot.Related issues and pull requests on GitHub: #85.
Added a usage example for
AsyncDualMDNSResolverin the API reference and documented thefamilyparameter ofresolve()(socket.AF_INET,socket.AF_INET6andsocket.AF_UNSPEC). Also clarified thatmdns_timeout=Noneis cache-only, the same as0– by @aiolibsbot.Related issues and pull requests on GitHub: #86.
Documented
AsyncDualMDNSResolverin the README quick start so the landing page covers the full public API, not justAsyncMDNSResolver– by @aiolibsbot.Related issues and pull requests on GitHub: #89.
Packaging updates and notes for downstreams¶
The packaging metadata switched to including an SPDX license identifier introduced in PEP 639 – by @cdce8p.
As a side effect, the minimum required version of
setuptoolsincreased to v77.Related issues and pull requests on GitHub: #36.
Fixed
MANIFEST.into graft thesrc/tree and dropped references to the non-existentpackaging/directory andNOTICEfile, removing spurious build warnings. Thepy.typedmarker is now shipped explicitly viapackage-data, and the distribution advertises the Python 3.10–3.13, CPython, PyPy, andTyping :: Typedclassifiers – by @aiolibsbot.Related issues and pull requests on GitHub: #68.
Added support for Python 3.14: the test matrix now runs against 3.14 and the distribution advertises the
Programming Language :: Python :: 3.14classifier – by @aiolibsbot.Related issues and pull requests on GitHub: #81.
Contributor-facing changes¶
Expanded the public-API regression test to cover
AsyncDualMDNSResolver,api.__all__, and theaiohttp.resolver.AsyncResolverdrop-in subclass guarantee for both resolvers.Related issues and pull requests on GitHub: #71.
Hardened the CI workflow: the default
GITHUB_TOKENis now restricted tocontents: read, and a concurrency group cancels superseded in-progress pull request runs to conserve CI resources – by @aiolibsbot.Related issues and pull requests on GitHub: #72.
Enabled the mypy
disallow_untyped_defs,disallow_incomplete_defs, andcheck_untyped_defschecks so that newly added functions insrc/andtests/must carry complete type annotations – by @aiolibsbot.Related issues and pull requests on GitHub: #73.
Migrated CI runners from
actions/setup-pythontoastral-sh/setup-uvso dependencies and Python interpreters are provisioned viauvinstead of systempip– by @aiolibsbot.Related issues and pull requests on GitHub: #76.
Replaced the
pyupgradepre-commit hook with Ruff’sUPrule set so a single linter handles syntax modernization, targeting Python 3.10+ – by @aiolibsbot.Related issues and pull requests on GitHub: #78.
v0.1.1¶
(2025-02-14)
Miscellaneous internal changes¶
v0.1.0¶
(2025-02-05)
Features¶
Created the
aiohttp_asyncmdnsresolver.api.AsyncDualMDNSResolverclass to resolve.localnames using both mDNS and DNS – by @bdraco.Related issues and pull requests on GitHub: #23.
v0.0.3¶
(2025-01-31)
Bug fixes¶
v0.0.2¶
(2025-01-30)
Miscellaneous internal changes¶
v0.0.1¶
(2025-01-05)
Initial release