"""
existing_cls = get_rdata_class(rdclass, rdtype)
- if existing_cls != GenericRdata:
+ if existing_cls != GenericRdata or dns.rdatatype.is_metatype(rdtype):
raise RdatatypeExists(rdclass=rdclass, rdtype=rdtype)
+ try:
+ if dns.rdatatype.RdataType(rdtype).name != rdtype_text:
+ raise RdatatypeExists(rdclass=rdclass, rdtype=rdtype)
+ except ValueError:
+ pass
_rdata_classes[(rdclass, rdtype)] = getattr(implementation,
rdtype_text.replace('-', '_'))
dns.rdatatype.register_type(rdtype, rdtype_text, is_singleton)
TA = 32768
DLV = 32769
-_by_text = {}
-_by_value = {}
+_registered_by_text = {}
+_registered_by_value = {}
-for (name, value) in RdataType.__members__.items():
- globals()[name] = value
- real_name = name.replace('_', '-')
- _by_text[real_name] = value
- if value not in _by_value:
- _by_value[value] = real_name
+globals().update(RdataType.__members__.items())
_metatypes = {
OPT: True
Returns an ``int``.
"""
- value = _by_text.get(text.upper())
+ text = text.upper().replace('-', '_')
+ try:
+ return RdataType[text]
+ except KeyError:
+ pass
+ value = _registered_by_text.get(text.upper())
if value is None:
match = _unknown_type_pattern.match(text)
if match is None:
if value < 0 or value > 65535:
raise ValueError("type must be between >= 0 and <= 65535")
- text = _by_value.get(value)
- if text is None:
- text = 'TYPE' + repr(value)
- return text
+ try:
+ return RdataType(value).name.replace('_', '-')
+ except ValueError:
+ text = _registered_by_value.get(value)
+ if text:
+ return text
+ return f'TYPE{value}'
def to_enum(value):
RRsets of the type can have only one member.)
"""
- _by_text[rdtype_text] = rdtype
- _by_value[rdtype] = rdtype_text
+ _registered_by_text[rdtype_text] = rdtype
+ _registered_by_value[rdtype] = rdtype_text
if is_singleton:
_singletons[rdtype] = True