@ -32,7 +32,7 @@ class Create(Change):
CLASS_ORDERING = 1
CLASS_ORDERING = 1
def __init__ ( self , new ) :
def __init__ ( self , new ) :
super ( Create , self ) . __init__ ( None , new )
super ( ) . __init__ ( None , new )
def __repr__ ( self , leader = ' ' ) :
def __repr__ ( self , leader = ' ' ) :
source = self . new . source . id if self . new . source else ' '
source = self . new . source . id if self . new . source else ' '
@ -58,7 +58,7 @@ class Delete(Change):
CLASS_ORDERING = 0
CLASS_ORDERING = 0
def __init__ ( self , existing ) :
def __init__ ( self , existing ) :
super ( Delete , self ) . __init__ ( existing , None )
super ( ) . __init__ ( existing , None )
def __repr__ ( self , leader = ' ' ) :
def __repr__ ( self , leader = ' ' ) :
return f ' Delete {self.existing} '
return f ' Delete {self.existing} '
@ -80,7 +80,7 @@ class ValidationError(RecordException):
return f ' Invalid record {idna_decode(fqdn)} \n - {reasons} '
return f ' Invalid record {idna_decode(fqdn)} \n - {reasons} '
def __init__ ( self , fqdn , reasons ) :
def __init__ ( self , fqdn , reasons ) :
super ( Exception , self ) . __init__ ( self . build_message ( fqdn , reasons ) )
super ( ) . __init__ ( self . build_message ( fqdn , reasons ) )
self . fqdn = fqdn
self . fqdn = fqdn
self . reasons = reasons
self . reasons = reasons
@ -373,7 +373,7 @@ class GeoValue(EqualityTupleMixin):
class ValuesMixin ( object ) :
class ValuesMixin ( object ) :
@classmethod
@classmethod
def validate ( cls , name , fqdn , data ) :
def validate ( cls , name , fqdn , data ) :
reasons = super ( ValuesMixin , cls ) . validate ( name , fqdn , data )
reasons = super ( ) . validate ( name , fqdn , data )
values = data . get ( ' values ' , data . get ( ' value ' , [ ] ) )
values = data . get ( ' values ' , data . get ( ' value ' , [ ] ) )
@ -390,7 +390,7 @@ class ValuesMixin(object):
return { ' ttl ' : rr . ttl , ' type ' : rr . _type , ' values ' : values }
return { ' ttl ' : rr . ttl , ' type ' : rr . _type , ' values ' : values }
def __init__ ( self , zone , name , data , source = None ) :
def __init__ ( self , zone , name , data , source = None ) :
super ( ValuesMixin , self ) . __init__ ( zone , name , data , source = source )
super ( ) . __init__ ( zone , name , data , source = source )
try :
try :
values = data [ ' values ' ]
values = data [ ' values ' ]
except KeyError :
except KeyError :
@ -400,10 +400,10 @@ class ValuesMixin(object):
def changes ( self , other , target ) :
def changes ( self , other , target ) :
if self . values != other . values :
if self . values != other . values :
return Update ( self , other )
return Update ( self , other )
return super ( ValuesMixin , self ) . changes ( other , target )
return super ( ) . changes ( other , target )
def _data ( self ) :
def _data ( self ) :
ret = super ( ValuesMixin , self ) . _data ( )
ret = super ( ) . _data ( )
if len ( self . values ) > 1 :
if len ( self . values ) > 1 :
values = [ getattr ( v , ' data ' , v ) for v in self . values if v ]
values = [ getattr ( v , ' data ' , v ) for v in self . values if v ]
if len ( values ) > 1 :
if len ( values ) > 1 :
@ -441,7 +441,7 @@ class _GeoMixin(ValuesMixin):
@classmethod
@classmethod
def validate ( cls , name , fqdn , data ) :
def validate ( cls , name , fqdn , data ) :
reasons = super ( _GeoMixin , cls ) . validate ( name , fqdn , data )
reasons = super ( ) . validate ( name , fqdn , data )
try :
try :
geo = dict ( data [ ' geo ' ] )
geo = dict ( data [ ' geo ' ] )
for code , values in geo . items ( ) :
for code , values in geo . items ( ) :
@ -452,7 +452,7 @@ class _GeoMixin(ValuesMixin):
return reasons
return reasons
def __init__ ( self , zone , name , data , * args , * * kwargs ) :
def __init__ ( self , zone , name , data , * args , * * kwargs ) :
super ( _GeoMixin , self ) . __init__ ( zone , name , data , * args , * * kwargs )
super ( ) . __init__ ( zone , name , data , * args , * * kwargs )
try :
try :
self . geo = dict ( data [ ' geo ' ] )
self . geo = dict ( data [ ' geo ' ] )
except KeyError :
except KeyError :
@ -461,7 +461,7 @@ class _GeoMixin(ValuesMixin):
self . geo [ code ] = GeoValue ( code , values )
self . geo [ code ] = GeoValue ( code , values )
def _data ( self ) :
def _data ( self ) :
ret = super ( _GeoMixin , self ) . _data ( )
ret = super ( ) . _data ( )
if self . geo :
if self . geo :
geo = { }
geo = { }
for code , value in self . geo . items ( ) :
for code , value in self . geo . items ( ) :
@ -473,7 +473,7 @@ class _GeoMixin(ValuesMixin):
if target . SUPPORTS_GEO :
if target . SUPPORTS_GEO :
if self . geo != other . geo :
if self . geo != other . geo :
return Update ( self , other )
return Update ( self , other )
return super ( _GeoMixin , self ) . changes ( other , target )
return super ( ) . changes ( other , target )
def __repr__ ( self ) :
def __repr__ ( self ) :
if self . geo :
if self . geo :
@ -482,13 +482,13 @@ class _GeoMixin(ValuesMixin):
f ' <{klass} {self._type} {self.ttl}, {self.decoded_fqdn}, '
f ' <{klass} {self._type} {self.ttl}, {self.decoded_fqdn}, '
f ' {self.values}, {self.geo}> '
f ' {self.values}, {self.geo}> '
)
)
return super ( _GeoMixin , self ) . __repr__ ( )
return super ( ) . __repr__ ( )
class ValueMixin ( object ) :
class ValueMixin ( object ) :
@classmethod
@classmethod
def validate ( cls , name , fqdn , data ) :
def validate ( cls , name , fqdn , data ) :
reasons = super ( ValueMixin , cls ) . validate ( name , fqdn , data )
reasons = super ( ) . validate ( name , fqdn , data )
reasons . extend (
reasons . extend (
cls . _value_type . validate ( data . get ( ' value ' , None ) , cls . _type )
cls . _value_type . validate ( data . get ( ' value ' , None ) , cls . _type )
)
)
@ -505,16 +505,16 @@ class ValueMixin(object):
}
}
def __init__ ( self , zone , name , data , source = None ) :
def __init__ ( self , zone , name , data , source = None ) :
super ( ValueMixin , self ) . __init__ ( zone , name , data , source = source )
super ( ) . __init__ ( zone , name , data , source = source )
self . value = self . _value_type . process ( data [ ' value ' ] )
self . value = self . _value_type . process ( data [ ' value ' ] )
def changes ( self , other , target ) :
def changes ( self , other , target ) :
if self . value != other . value :
if self . value != other . value :
return Update ( self , other )
return Update ( self , other )
return super ( ValueMixin , self ) . changes ( other , target )
return super ( ) . changes ( other , target )
def _data ( self ) :
def _data ( self ) :
ret = super ( ValueMixin , self ) . _data ( )
ret = super ( ) . _data ( )
if self . value :
if self . value :
ret [ ' value ' ] = getattr ( self . value , ' data ' , self . value )
ret [ ' value ' ] = getattr ( self . value , ' data ' , self . value )
return ret
return ret
@ -640,7 +640,7 @@ class _DynamicMixin(object):
@classmethod
@classmethod
def validate ( cls , name , fqdn , data ) :
def validate ( cls , name , fqdn , data ) :
reasons = super ( _DynamicMixin , cls ) . validate ( name , fqdn , data )
reasons = super ( ) . validate ( name , fqdn , data )
if ' dynamic ' not in data :
if ' dynamic ' not in data :
return reasons
return reasons
@ -799,7 +799,7 @@ class _DynamicMixin(object):
return reasons
return reasons
def __init__ ( self , zone , name , data , * args , * * kwargs ) :
def __init__ ( self , zone , name , data , * args , * * kwargs ) :
super ( _DynamicMixin , self ) . __init__ ( zone , name , data , * args , * * kwargs )
super ( ) . __init__ ( zone , name , data , * args , * * kwargs )
self . dynamic = { }
self . dynamic = { }
@ -829,7 +829,7 @@ class _DynamicMixin(object):
self . dynamic = _Dynamic ( pools , parsed )
self . dynamic = _Dynamic ( pools , parsed )
def _data ( self ) :
def _data ( self ) :
ret = super ( _DynamicMixin , self ) . _data ( )
ret = super ( ) . _data ( )
if self . dynamic :
if self . dynamic :
ret [ ' dynamic ' ] = self . dynamic . _data ( )
ret [ ' dynamic ' ] = self . dynamic . _data ( )
return ret
return ret
@ -838,7 +838,7 @@ class _DynamicMixin(object):
if target . SUPPORTS_DYNAMIC :
if target . SUPPORTS_DYNAMIC :
if self . dynamic != other . dynamic :
if self . dynamic != other . dynamic :
return Update ( self , other )
return Update ( self , other )
return super ( _DynamicMixin , self ) . changes ( other , target )
return super ( ) . changes ( other , target )
def __repr__ ( self ) :
def __repr__ ( self ) :
# TODO: improve this whole thing, we need multi-line...
# TODO: improve this whole thing, we need multi-line...
@ -856,7 +856,7 @@ class _DynamicMixin(object):
f ' <{klass} {self._type} {self.ttl}, {self.decoded_fqdn}, '
f ' <{klass} {self._type} {self.ttl}, {self.decoded_fqdn}, '
f ' {values}, {self.dynamic}> '
f ' {values}, {self.dynamic}> '
)
)
return super ( _DynamicMixin , self ) . __repr__ ( )
return super ( ) . __repr__ ( )
class _TargetValue ( str ) :
class _TargetValue ( str ) :
@ -984,7 +984,7 @@ class AliasRecord(ValueMixin, Record):
reasons = [ ]
reasons = [ ]
if name != ' ' :
if name != ' ' :
reasons . append ( ' non-root ALIAS not allowed ' )
reasons . append ( ' non-root ALIAS not allowed ' )
reasons . extend ( super ( AliasRecord , cls ) . validate ( name , fqdn , data ) )
reasons . extend ( super ( ) . validate ( name , fqdn , data ) )
return reasons
return reasons
@ -1094,7 +1094,7 @@ class CnameRecord(_DynamicMixin, ValueMixin, Record):
reasons = [ ]
reasons = [ ]
if name == ' ' :
if name == ' ' :
reasons . append ( ' root CNAME not allowed ' )
reasons . append ( ' root CNAME not allowed ' )
reasons . extend ( super ( CnameRecord , cls ) . validate ( name , fqdn , data ) )
reasons . extend ( super ( ) . validate ( name , fqdn , data ) )
return reasons
return reasons
@ -2136,7 +2136,7 @@ class SrvRecord(ValuesMixin, Record):
reasons = [ ]
reasons = [ ]
if not cls . _name_re . match ( name ) :
if not cls . _name_re . match ( name ) :
reasons . append ( ' invalid name for SRV record ' )
reasons . append ( ' invalid name for SRV record ' )
reasons . extend ( super ( SrvRecord , cls ) . validate ( name , fqdn , data ) )
reasons . extend ( super ( ) . validate ( name , fqdn , data ) )
return reasons
return reasons