class Node(dns.node.Node):
__slots__ = ["flags", "id"]
- def __init__(self, flags: NodeFlags = 0): # type: ignore
+ def __init__(self, flags: Optional[NodeFlags] = None):
super().__init__()
+ if flags is None:
+ # We allow optional flags rather than a default
+ # as pyright doesn't like assigning a literal 0
+ # to flags.
+ flags = NodeFlags(0)
self.flags = flags
self.id = 0
@dns.immutable.immutable
class ImmutableVersion(dns.zone.Version):
- def __init__(self, version: dns.zone.WritableVersion):
- assert isinstance(version, WritableVersion)
+ def __init__(self, version: dns.zone.Version):
+ if not isinstance(version, WritableVersion):
+ raise ValueError(
+ "a dns.btreezone.ImmutableVersion requires a "
+ "dns.btreezone.WritableVersion"
+ )
super().__init__(version.zone, True)
self.id = version.id
self.origin = version.origin
class Zone(dns.versioned.Zone):
- node_factory: Callable[[], dns.node.Node] = Node # type: ignore
- map_factory: Callable[[], MutableMapping[dns.name.Name, dns.node.Node]] = (
- dns.btree.BTreeDict[dns.name.Name, Node] # type: ignore
+ node_factory: Callable[[], dns.node.Node] = Node
+ map_factory: Callable[[], MutableMapping[dns.name.Name, dns.node.Node]] = cast(
+ Callable[[], MutableMapping[dns.name.Name, dns.node.Node]],
+ dns.btree.BTreeDict[dns.name.Name, Node],
)
writable_version_factory: Optional[
- Callable[[], dns.zone.WritableVersion]
- ] = WritableVersion # type: ignore
+ Callable[[dns.zone.Zone, bool], dns.zone.Version]
+ ] = WritableVersion
immutable_version_factory: Optional[
- Callable[[], dns.zone.ImmutableVersion]
- ] = ImmutableVersion # type: ignore
+ Callable[[dns.zone.Version], dns.zone.Version]
+ ] = ImmutableVersion
node_factory: Callable[[], dns.node.Node] = dns.node.Node
map_factory: Callable[[], MutableMapping[dns.name.Name, dns.node.Node]] = dict
- writable_version_factory: Optional[Callable[[], "WritableVersion"]] = None
- immutable_version_factory: Optional[Callable[[], "ImmutableVersion"]] = None
+ # We only require the version types as "Version" to allow for flexibility, as
+ # only the version protocol matters
+ writable_version_factory: Optional[Callable[["Zone", bool], "Version"]] = None
+ immutable_version_factory: Optional[Callable[["Version"], "Version"]] = None
__slots__ = ["rdclass", "origin", "nodes", "relativize"]
@dns.immutable.immutable
class ImmutableVersion(Version):
- def __init__(self, version: WritableVersion):
+ def __init__(self, version: Version):
+ if not isinstance(version, WritableVersion):
+ raise ValueError(
+ "a dns.zone.ImmutableVersion requires a dns.zone.WritableVersion"
+ )
# We tell super() that it's a replacement as we don't want it
# to copy the nodes, as we're about to do that with an
# immutable Dict.