|
|
|
@ -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 = [] |
|
|
|
|