Browse Source

AaaaRecord and CnameRecord should implement _DynamicMixin, fix validate params

pull/307/head
Ross McFarland 7 years ago
parent
commit
0e0e995436
No known key found for this signature in database GPG Key ID: 61C10C4FC8FE4A89
2 changed files with 20 additions and 26 deletions
  1. +14
    -14
      octodns/record.py
  2. +6
    -12
      tests/config/dynamic.tests.yaml

+ 14
- 14
octodns/record.py View File

@ -262,7 +262,7 @@ class _ValuesMixin(object):
except KeyError:
values = []
reasons.extend(cls._value_type.validate(values))
reasons.extend(cls._value_type.validate(values, cls))
return reasons
@ -317,7 +317,7 @@ class _GeoMixin(_ValuesMixin):
# TODO: validate legal codes
for code, values in geo.items():
reasons.extend(GeoValue._validate_geo(code))
reasons.extend(cls._value_type.validate(values))
reasons.extend(cls._value_type.validate(values, cls))
except KeyError:
pass
return reasons
@ -408,7 +408,7 @@ class _DynamicMixin(object):
reasons.append('missing pools')
else:
for pool in sorted(pools.values()):
reasons.extend(cls._value_type.validate(pool))
reasons.extend(cls._value_type.validate(pool, cls))
try:
rules = data['dynamic']['rules']
@ -459,7 +459,7 @@ class _DynamicMixin(object):
class Ipv4List(object):
@classmethod
def validate(cls, data):
def validate(cls, data, record_cls):
if not isinstance(data, (list, tuple)):
data = (data,)
if len(data) == 0:
@ -485,7 +485,7 @@ class Ipv4List(object):
class Ipv6List(object):
@classmethod
def validate(cls, data):
def validate(cls, data, record_cls):
if not isinstance(data, (list, tuple)):
data = (data,)
if len(data) == 0:
@ -536,7 +536,7 @@ class ARecord(_DynamicMixin, _GeoMixin, Record):
_value_type = Ipv4List
class AaaaRecord(_GeoMixin, Record):
class AaaaRecord(_DynamicMixin, _GeoMixin, Record):
_type = 'AAAA'
_value_type = Ipv6List
@ -554,7 +554,7 @@ class CaaValue(object):
# https://tools.ietf.org/html/rfc6844#page-5
@classmethod
def validate(cls, data):
def validate(cls, data, record_cls):
if not isinstance(data, (list, tuple)):
data = (data,)
reasons = []
@ -605,7 +605,7 @@ class CaaRecord(_ValuesMixin, Record):
_value_type = CaaValue
class CnameRecord(_ValueMixin, Record):
class CnameRecord(_DynamicMixin, _ValueMixin, Record):
_type = 'CNAME'
_value_type = CnameValue
@ -621,7 +621,7 @@ class CnameRecord(_ValueMixin, Record):
class MxValue(object):
@classmethod
def validate(cls, data):
def validate(cls, data, record_cls):
if not isinstance(data, (list, tuple)):
data = (data,)
reasons = []
@ -689,7 +689,7 @@ class NaptrValue(object):
VALID_FLAGS = ('S', 'A', 'U', 'P')
@classmethod
def validate(cls, data):
def validate(cls, data, record_cls):
if not isinstance(data, (list, tuple)):
data = (data,)
reasons = []
@ -774,7 +774,7 @@ class NaptrRecord(_ValuesMixin, Record):
class _NsValue(object):
@classmethod
def validate(cls, data):
def validate(cls, data, record_cls):
if not data:
return ['missing value(s)']
elif not isinstance(data, (list, tuple)):
@ -810,7 +810,7 @@ class SshfpValue(object):
VALID_FINGERPRINT_TYPES = (1, 2)
@classmethod
def validate(cls, data):
def validate(cls, data, record_cls):
if not isinstance(data, (list, tuple)):
data = (data,)
reasons = []
@ -893,7 +893,7 @@ class _ChunkedValue(object):
_unescaped_semicolon_re = re.compile(r'\w;')
@classmethod
def validate(cls, data):
def validate(cls, data, record_cls):
if not data:
return ['missing value(s)']
elif not isinstance(data, (list, tuple)):
@ -922,7 +922,7 @@ class SpfRecord(_ChunkedValuesMixin, Record):
class SrvValue(object):
@classmethod
def validate(cls, data):
def validate(cls, data, record_cls):
if not isinstance(data, (list, tuple)):
data = (data,)
reasons = []


+ 6
- 12
tests/config/dynamic.tests.yaml View File

@ -32,14 +32,10 @@ a:
cname:
dynamic:
pools:
ams:
value: target-ams.unit.tests.
iad:
value: target-iad.unit.tests.
lax:
value: target-lax.unit.tests.
sea:
value: target-sea.unit.tests.
ams: target-ams.unit.tests.
iad: target-iad.unit.tests.
lax: target-lax.unit.tests.
sea: target-sea.unit.tests.
rules:
- geo: EU-UK
pools:
@ -63,10 +59,8 @@ cname:
simple-weighted:
dynamic:
pools:
one:
value: one.unit.tests.
two:
value: two.unit.tests.
one: one.unit.tests.
two: two.unit.tests.
rules:
- pools:
100: one


Loading…
Cancel
Save