Browse Source

Finish breaking up octodns.record

pull/969/head
Ross McFarland 3 years ago
parent
commit
9205e32392
No known key found for this signature in database GPG Key ID: 943B179E15D3B22A
14 changed files with 216 additions and 154 deletions
  1. +14
    -17
      octodns/record/__init__.py
  2. +26
    -0
      octodns/record/a.py
  3. +26
    -0
      octodns/record/aaaa.py
  4. +26
    -0
      octodns/record/alias.py
  5. +1
    -21
      octodns/record/chunked.py
  6. +27
    -0
      octodns/record/cname.py
  7. +19
    -0
      octodns/record/dname.py
  8. +2
    -31
      octodns/record/ip.py
  9. +18
    -0
      octodns/record/ns.py
  10. +24
    -0
      octodns/record/ptr.py
  11. +14
    -0
      octodns/record/spf.py
  12. +0
    -84
      octodns/record/target.py
  13. +18
    -0
      octodns/record/txt.py
  14. +1
    -1
      tests/test_octodns_record.py

+ 14
- 17
octodns/record/__init__.py View File

@ -3,34 +3,29 @@
#
from .a import ARecord, Ipv4Address, Ipv4Value
from .aaaa import AaaaRecord, Ipv6Address, Ipv6Value
from .alias import AliasRecord, AliasValue
from .base import Record, ValueMixin, ValuesMixin
from .change import Change, Create, Delete, Update
from .caa import CaaRecord, CaaValue
from .change import Change, Create, Delete, Update
from .cname import CnameRecord, CnameValue
from .dname import DnameRecord, DnameValue
from .ds import DsRecord, DsValue
from .exception import RecordException, ValidationError
from .geo import GeoCodes, GeoValue
from .loc import LocRecord, LocValue
from .mx import MxRecord, MxValue
from .naptr import NaptrRecord, NaptrValue
from .ns import NsValue, NsRecord
from .ptr import PtrValue, PtrRecord
from .rr import Rr, RrParseError
from .tlsa import TlsaRecord, TlsaValue
from .url import UrlfwdRecord, UrlfwdValue
from .spf import SpfRecord
from .srv import SrvRecord, SrvValue
from .sshfp import SshfpRecord, SshfpValue
from .target import (
AliasRecord,
AliasValue,
CnameRecord,
CnameValue,
DnameRecord,
DnameValue,
NsValue,
NsRecord,
PtrValue,
PtrRecord,
)
from .ipaddress import ARecord, AaaaRecord, Ipv4Address, Ipv6Address
from .chunked import SpfRecord, TxtValue, TxtRecord
from .tlsa import TlsaRecord, TlsaValue
from .txt import TxtValue, TxtRecord
from .url import UrlfwdRecord, UrlfwdValue
# quell warnings
ARecord
@ -51,7 +46,9 @@ DsValue
GeoCodes
GeoValue
Ipv4Address
Ipv4Value
Ipv6Address
Ipv6Value
LocRecord
LocValue
MxRecord


+ 26
- 0
octodns/record/a.py View File

@ -0,0 +1,26 @@
#
#
#
from ipaddress import IPv4Address as _IPv4Address
from .base import Record
from .dynamic import _DynamicMixin
from .geo import _GeoMixin
from .ip import _IpValue
class Ipv4Value(_IpValue):
_address_type = _IPv4Address
_address_name = 'IPv4'
Ipv4Address = Ipv4Value
class ARecord(_DynamicMixin, _GeoMixin, Record):
_type = 'A'
_value_type = Ipv4Value
Record.register_type(ARecord)

+ 26
- 0
octodns/record/aaaa.py View File

@ -0,0 +1,26 @@
#
#
#
from ipaddress import IPv6Address as _IPv6Address
from .base import Record
from .dynamic import _DynamicMixin
from .geo import _GeoMixin
from .ip import _IpValue
class Ipv6Value(_IpValue):
_address_type = _IPv6Address
_address_name = 'IPv6'
Ipv6Address = Ipv6Value
class AaaaRecord(_DynamicMixin, _GeoMixin, Record):
_type = 'AAAA'
_value_type = Ipv6Address
Record.register_type(AaaaRecord)

+ 26
- 0
octodns/record/alias.py View File

@ -0,0 +1,26 @@
#
#
#
from .base import Record, ValueMixin
from .target import _TargetValue
class AliasValue(_TargetValue):
pass
class AliasRecord(ValueMixin, Record):
_type = 'ALIAS'
_value_type = AliasValue
@classmethod
def validate(cls, name, fqdn, data):
reasons = []
if name != '':
reasons.append('non-root ALIAS not allowed')
reasons.extend(super().validate(name, fqdn, data))
return reasons
Record.register_type(AliasRecord)

+ 1
- 21
octodns/record/chunked.py View File

@ -2,7 +2,7 @@
#
#
from .base import Record, ValuesMixin
from .base import ValuesMixin
import re
@ -61,23 +61,3 @@ class _ChunkedValue(str):
@property
def rdata_text(self):
return self
class SpfRecord(_ChunkedValuesMixin, Record):
_type = 'SPF'
_value_type = _ChunkedValue
Record.register_type(SpfRecord)
class TxtValue(_ChunkedValue):
pass
class TxtRecord(_ChunkedValuesMixin, Record):
_type = 'TXT'
_value_type = TxtValue
Record.register_type(TxtRecord)

+ 27
- 0
octodns/record/cname.py View File

@ -0,0 +1,27 @@
#
#
#
from .base import Record, ValueMixin
from .dynamic import _DynamicMixin
from .target import _TargetValue
class CnameValue(_TargetValue):
pass
class CnameRecord(_DynamicMixin, ValueMixin, Record):
_type = 'CNAME'
_value_type = CnameValue
@classmethod
def validate(cls, name, fqdn, data):
reasons = []
if name == '':
reasons.append('root CNAME not allowed')
reasons.extend(super().validate(name, fqdn, data))
return reasons
Record.register_type(CnameRecord)

+ 19
- 0
octodns/record/dname.py View File

@ -0,0 +1,19 @@
#
#
#
from .base import Record, ValueMixin
from .dynamic import _DynamicMixin
from .target import _TargetValue
class DnameValue(_TargetValue):
pass
class DnameRecord(_DynamicMixin, ValueMixin, Record):
_type = 'DNAME'
_value_type = DnameValue
Record.register_type(DnameRecord)

octodns/record/ipaddress.py → octodns/record/ip.py View File


+ 18
- 0
octodns/record/ns.py View File

@ -0,0 +1,18 @@
#
#
#
from .base import Record, ValuesMixin
from .target import _TargetsValue
class NsValue(_TargetsValue):
pass
class NsRecord(ValuesMixin, Record):
_type = 'NS'
_value_type = NsValue
Record.register_type(NsRecord)

+ 24
- 0
octodns/record/ptr.py View File

@ -0,0 +1,24 @@
#
#
#
from .base import Record, ValuesMixin
from .target import _TargetsValue
class PtrValue(_TargetsValue):
pass
class PtrRecord(ValuesMixin, Record):
_type = 'PTR'
_value_type = PtrValue
# This is for backward compatibility with providers that don't support
# multi-value PTR records.
@property
def value(self):
return self.values[0]
Record.register_type(PtrRecord)

+ 14
- 0
octodns/record/spf.py View File

@ -0,0 +1,14 @@
#
#
#
from .base import Record
from .chunked import _ChunkedValue, _ChunkedValuesMixin
class SpfRecord(_ChunkedValuesMixin, Record):
_type = 'SPF'
_value_type = _ChunkedValue
Record.register_type(SpfRecord)

+ 0
- 84
octodns/record/target.py View File

@ -5,8 +5,6 @@
from fqdn import FQDN
from ..idna import idna_encode
from .base import Record, ValueMixin, ValuesMixin
from .dynamic import _DynamicMixin
class _TargetValue(str):
@ -79,85 +77,3 @@ class _TargetsValue(str):
@property
def rdata_text(self):
return self
class AliasValue(_TargetValue):
pass
class AliasRecord(ValueMixin, Record):
_type = 'ALIAS'
_value_type = AliasValue
@classmethod
def validate(cls, name, fqdn, data):
reasons = []
if name != '':
reasons.append('non-root ALIAS not allowed')
reasons.extend(super().validate(name, fqdn, data))
return reasons
Record.register_type(AliasRecord)
class CnameValue(_TargetValue):
pass
class CnameRecord(_DynamicMixin, ValueMixin, Record):
_type = 'CNAME'
_value_type = CnameValue
@classmethod
def validate(cls, name, fqdn, data):
reasons = []
if name == '':
reasons.append('root CNAME not allowed')
reasons.extend(super().validate(name, fqdn, data))
return reasons
Record.register_type(CnameRecord)
class DnameValue(_TargetValue):
pass
class DnameRecord(_DynamicMixin, ValueMixin, Record):
_type = 'DNAME'
_value_type = DnameValue
Record.register_type(DnameRecord)
class NsValue(_TargetsValue):
pass
class NsRecord(ValuesMixin, Record):
_type = 'NS'
_value_type = NsValue
Record.register_type(NsRecord)
class PtrValue(_TargetsValue):
pass
class PtrRecord(ValuesMixin, Record):
_type = 'PTR'
_value_type = PtrValue
# This is for backward compatibility with providers that don't support
# multi-value PTR records.
@property
def value(self):
return self.values[0]
Record.register_type(PtrRecord)

+ 18
- 0
octodns/record/txt.py View File

@ -0,0 +1,18 @@
#
#
#
from .base import Record
from .chunked import _ChunkedValue, _ChunkedValuesMixin
class TxtValue(_ChunkedValue):
pass
class TxtRecord(_ChunkedValuesMixin, Record):
_type = 'TXT'
_value_type = TxtValue
Record.register_type(TxtRecord)

+ 1
- 1
tests/test_octodns_record.py View File

@ -62,7 +62,7 @@ class TestRecord(TestCase):
with self.assertRaises(RecordException) as ctx:
Record.register_type(None, 'A')
self.assertEqual(
'Type "A" already registered by octodns.record.ipaddress.ARecord',
'Type "A" already registered by octodns.record.a.ARecord',
str(ctx.exception),
)


Loading…
Cancel
Save