__init__.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. # Copyright (C) Dnspython Contributors, see LICENSE for text of ISC license
  2. from typing import List, Tuple
  3. import dns._features
  4. import dns.asyncbackend
  5. if dns._features.have("doq"):
  6. import aioquic.quic.configuration # type: ignore
  7. from dns._asyncbackend import NullContext
  8. from dns.quic._asyncio import (
  9. AsyncioQuicConnection,
  10. AsyncioQuicManager,
  11. AsyncioQuicStream,
  12. )
  13. from dns.quic._common import AsyncQuicConnection, AsyncQuicManager
  14. from dns.quic._sync import SyncQuicConnection, SyncQuicManager, SyncQuicStream
  15. have_quic = True
  16. def null_factory(
  17. *args, # pylint: disable=unused-argument
  18. **kwargs, # pylint: disable=unused-argument
  19. ):
  20. return NullContext(None)
  21. def _asyncio_manager_factory(
  22. context, *args, **kwargs # pylint: disable=unused-argument
  23. ):
  24. return AsyncioQuicManager(*args, **kwargs)
  25. # We have a context factory and a manager factory as for trio we need to have
  26. # a nursery.
  27. _async_factories = {"asyncio": (null_factory, _asyncio_manager_factory)}
  28. if dns._features.have("trio"):
  29. import trio
  30. from dns.quic._trio import ( # pylint: disable=ungrouped-imports
  31. TrioQuicConnection,
  32. TrioQuicManager,
  33. TrioQuicStream,
  34. )
  35. def _trio_context_factory():
  36. return trio.open_nursery()
  37. def _trio_manager_factory(context, *args, **kwargs):
  38. return TrioQuicManager(context, *args, **kwargs)
  39. _async_factories["trio"] = (_trio_context_factory, _trio_manager_factory)
  40. def factories_for_backend(backend=None):
  41. if backend is None:
  42. backend = dns.asyncbackend.get_default_backend()
  43. return _async_factories[backend.name()]
  44. else: # pragma: no cover
  45. have_quic = False
  46. from typing import Any
  47. class AsyncQuicStream: # type: ignore
  48. pass
  49. class AsyncQuicConnection: # type: ignore
  50. async def make_stream(self) -> Any:
  51. raise NotImplementedError
  52. class SyncQuicStream: # type: ignore
  53. pass
  54. class SyncQuicConnection: # type: ignore
  55. def make_stream(self) -> Any:
  56. raise NotImplementedError
  57. Headers = List[Tuple[bytes, bytes]]