Browse Source

Move _process_value to cls.process on Value types

pull/307/head
Ross McFarland 7 years ago
parent
commit
e07165a2ab
No known key found for this signature in database GPG Key ID: 61C10C4FC8FE4A89
1 changed files with 47 additions and 43 deletions
  1. +47
    -43
      octodns/record.py

+ 47
- 43
octodns/record.py View File

@ -272,7 +272,7 @@ class _ValuesMixin(object):
values = data['values']
except KeyError:
values = [data['value']]
self.values = sorted(self._process_values(values))
self.values = sorted(self._value_type.process(values))
def changes(self, other, target):
if self.values != other.values:
@ -371,7 +371,7 @@ class _ValueMixin(object):
def __init__(self, zone, name, data, source=None):
super(_ValueMixin, self).__init__(zone, name, data, source=source)
self.value = self._process_value(data['value'])
self.value = self._value_type.process(data['value'])
def changes(self, other, target):
if self.value != other.value:
@ -434,6 +434,10 @@ class Ipv4List(object):
reasons.append('invalid IPv4 address "{}"'.format(value))
return reasons
@classmethod
def process(cls, values):
return values
class Ipv6List(object):
@ -456,6 +460,10 @@ class Ipv6List(object):
reasons.append('invalid IPv6 address "{}"'.format(value))
return reasons
@classmethod
def process(cls, values):
return values
class _TargetValue(object):
@ -471,6 +479,10 @@ class _TargetValue(object):
.format(record_cls._type, data))
return reasons
@classmethod
def process(self, value):
return value
class CnameValue(_TargetValue):
pass
@ -480,17 +492,11 @@ class ARecord(_DynamicMixin, _GeoMixin, Record):
_type = 'A'
_value_type = Ipv4List
def _process_values(self, values):
return values
class AaaaRecord(_GeoMixin, Record):
_type = 'AAAA'
_value_type = Ipv6List
def _process_values(self, values):
return values
class AliasValue(_TargetValue):
pass
@ -500,9 +506,6 @@ class AliasRecord(_ValueMixin, Record):
_type = 'ALIAS'
_value_type = AliasValue
def _process_value(self, value):
return value
class CaaValue(object):
# https://tools.ietf.org/html/rfc6844#page-5
@ -526,6 +529,10 @@ class CaaValue(object):
reasons.append('missing value')
return reasons
@classmethod
def process(cls, values):
return [CaaValue(v) for v in values]
def __init__(self, value):
self.flags = int(value.get('flags', 0))
self.tag = value['tag']
@ -554,9 +561,6 @@ class CaaRecord(_ValuesMixin, Record):
_type = 'CAA'
_value_type = CaaValue
def _process_values(self, values):
return [CaaValue(v) for v in values]
class CnameRecord(_ValueMixin, Record):
_type = 'CNAME'
@ -570,9 +574,6 @@ class CnameRecord(_ValueMixin, Record):
reasons.extend(super(CnameRecord, cls).validate(name, data))
return reasons
def _process_value(self, value):
return value
class MxValue(object):
@ -602,6 +603,10 @@ class MxValue(object):
reasons.append('missing exchange')
return reasons
@classmethod
def process(cls, values):
return [MxValue(v) for v in values]
def __init__(self, value):
# RFC1035 says preference, half the providers use priority
try:
@ -636,9 +641,6 @@ class MxRecord(_ValuesMixin, Record):
_type = 'MX'
_value_type = MxValue
def _process_values(self, values):
return [MxValue(v) for v in values]
class NaptrValue(object):
VALID_FLAGS = ('S', 'A', 'U', 'P')
@ -676,6 +678,10 @@ class NaptrValue(object):
return reasons
@classmethod
def process(cls, values):
return [NaptrValue(v) for v in values]
def __init__(self, value):
self.order = int(value['order'])
self.preference = int(value['preference'])
@ -721,9 +727,6 @@ class NaptrRecord(_ValuesMixin, Record):
_type = 'NAPTR'
_value_type = NaptrValue
def _process_values(self, values):
return [NaptrValue(v) for v in values]
class _NsValue(object):
@ -740,14 +743,15 @@ class _NsValue(object):
.format(value))
return reasons
@classmethod
def process(cls, values):
return values
class NsRecord(_ValuesMixin, Record):
_type = 'NS'
_value_type = _NsValue
def _process_values(self, values):
return values
class PtrValue(_TargetValue):
pass
@ -757,9 +761,6 @@ class PtrRecord(_ValueMixin, Record):
_type = 'PTR'
_value_type = PtrValue
def _process_value(self, value):
return value
class SshfpValue(object):
VALID_ALGORITHMS = (1, 2, 3, 4)
@ -795,6 +796,10 @@ class SshfpValue(object):
reasons.append('missing fingerprint')
return reasons
@classmethod
def process(cls, values):
return [SshfpValue(v) for v in values]
def __init__(self, value):
self.algorithm = int(value['algorithm'])
self.fingerprint_type = int(value['fingerprint_type'])
@ -824,22 +829,11 @@ class SshfpRecord(_ValuesMixin, Record):
_type = 'SSHFP'
_value_type = SshfpValue
def _process_values(self, values):
return [SshfpValue(v) for v in values]
class _ChunkedValuesMixin(_ValuesMixin):
CHUNK_SIZE = 255
_unescaped_semicolon_re = re.compile(r'\w;')
def _process_values(self, values):
ret = []
for v in values:
if v and v[0] == '"':
v = v[1:-1]
ret.append(v.replace('" "', ''))
return ret
@property
def chunked_values(self):
values = []
@ -867,6 +861,15 @@ class _ChunkedValue(object):
reasons.append('unescaped ; in "{}"'.format(value))
return reasons
@classmethod
def process(cls, values):
ret = []
for v in values:
if v and v[0] == '"':
v = v[1:-1]
ret.append(v.replace('" "', ''))
return ret
class SpfRecord(_ChunkedValuesMixin, Record):
_type = 'SPF'
@ -909,6 +912,10 @@ class SrvValue(object):
reasons.append('missing target')
return reasons
@classmethod
def process(cls, values):
return [SrvValue(v) for v in values]
def __init__(self, value):
self.priority = int(value['priority'])
self.weight = int(value['weight'])
@ -951,9 +958,6 @@ class SrvRecord(_ValuesMixin, Record):
reasons.extend(super(SrvRecord, cls).validate(name, data))
return reasons
def _process_values(self, values):
return [SrvValue(v) for v in values]
class _TxtValue(_ChunkedValue):
pass


Loading…
Cancel
Save