/usr/lib/python3.9/site-packages/dns
# Copyright (C) Dnspython Contributors, see LICENSE for text of ISC license import collections.abc from typing import Any, Callable from dns._immutable_ctx import immutable @immutable class Dict(collections.abc.Mapping): # lgtm[py/missing-equals] def __init__( self, dictionary: Any, no_copy: bool = False, map_factory: Callable[[], collections.abc.MutableMapping] = dict, ): """Make an immutable dictionary from the specified dictionary. If *no_copy* is `True`, then *dictionary* will be wrapped instead of copied. Only set this if you are sure there will be no external references to the dictionary. """ if no_copy and isinstance(dictionary, collections.abc.MutableMapping): self._odict = dictionary else: self._odict = map_factory() self._odict.update(dictionary) self._hash = None def __getitem__(self, key): return self._odict.__getitem__(key) def __hash__(self): # pylint: disable=invalid-hash-returned if self._hash is None: h = 0 for key in sorted(self._odict.keys()): h ^= hash(key) object.__setattr__(self, "_hash", h) # this does return an int, but pylint doesn't figure that out return self._hash def __len__(self): return len(self._odict) def __iter__(self): return iter(self._odict) def constify(o: Any) -> Any: """ Convert mutable types to immutable types. """ if isinstance(o, bytearray): return bytes(o) if isinstance(o, tuple): try: hash(o) return o except Exception: return tuple(constify(elt) for elt in o) if isinstance(o, list): return tuple(constify(elt) for elt in o) if isinstance(o, dict): cdict = dict() for k, v in o.items(): cdict[k] = constify(v) return Dict(cdict, True) return o
.
Edit
..
Edit
__init__.py
Edit
__pycache__
Edit
_asyncbackend.py
Edit
_asyncio_backend.py
Edit
_ddr.py
Edit
_features.py
Edit
_immutable_ctx.py
Edit
asyncbackend.py
Edit
asyncquery.py
Edit
asyncresolver.py
Edit
dnssec.py
Edit
dnssecalgs
Edit
dnssectypes.py
Edit
e164.py
Edit
edns.py
Edit
entropy.py
Edit
enum.py
Edit
exception.py
Edit
flags.py
Edit
grange.py
Edit
immutable.py
Edit
inet.py
Edit
ipv4.py
Edit
ipv6.py
Edit
message.py
Edit
name.py
Edit
namedict.py
Edit
nameserver.py
Edit
node.py
Edit
opcode.py
Edit
query.py
Edit
quic
Edit
rcode.py
Edit
rdata.py
Edit
rdataclass.py
Edit
rdataset.py
Edit
rdatatype.py
Edit
rdtypes
Edit
renderer.py
Edit
resolver.py
Edit
reversename.py
Edit
rrset.py
Edit
serial.py
Edit
set.py
Edit
tokenizer.py
Edit
transaction.py
Edit
tsig.py
Edit
tsigkeyring.py
Edit
ttl.py
Edit
update.py
Edit
version.py
Edit
versioned.py
Edit
win32util.py
Edit
wire.py
Edit
xfr.py
Edit
zone.py
Edit
zonefile.py
Edit
zonetypes.py
Edit