mirror of
				https://github.com/github/octodns.git
				synced 2024-05-11 05:55:00 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			137 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#
 | 
						|
#
 | 
						|
#
 | 
						|
 | 
						|
from ..equality import EqualityTupleMixin
 | 
						|
from .base import Record, ValuesMixin
 | 
						|
from .rr import RrParseError
 | 
						|
 | 
						|
 | 
						|
class DsValue(EqualityTupleMixin, dict):
 | 
						|
    # https://www.rfc-editor.org/rfc/rfc4034.html#section-2.1
 | 
						|
 | 
						|
    @classmethod
 | 
						|
    def parse_rdata_text(cls, value):
 | 
						|
        try:
 | 
						|
            flags, protocol, algorithm, public_key = value.split(' ')
 | 
						|
        except ValueError:
 | 
						|
            raise RrParseError()
 | 
						|
        try:
 | 
						|
            flags = int(flags)
 | 
						|
        except ValueError:
 | 
						|
            pass
 | 
						|
        try:
 | 
						|
            protocol = int(protocol)
 | 
						|
        except ValueError:
 | 
						|
            pass
 | 
						|
        try:
 | 
						|
            algorithm = int(algorithm)
 | 
						|
        except ValueError:
 | 
						|
            pass
 | 
						|
        return {
 | 
						|
            'flags': flags,
 | 
						|
            'protocol': protocol,
 | 
						|
            'algorithm': algorithm,
 | 
						|
            'public_key': public_key,
 | 
						|
        }
 | 
						|
 | 
						|
    @classmethod
 | 
						|
    def validate(cls, data, _type):
 | 
						|
        if not isinstance(data, (list, tuple)):
 | 
						|
            data = (data,)
 | 
						|
        reasons = []
 | 
						|
        for value in data:
 | 
						|
            try:
 | 
						|
                int(value['flags'])
 | 
						|
            except KeyError:
 | 
						|
                reasons.append('missing flags')
 | 
						|
            except ValueError:
 | 
						|
                reasons.append(f'invalid flags "{value["flags"]}"')
 | 
						|
            try:
 | 
						|
                int(value['protocol'])
 | 
						|
            except KeyError:
 | 
						|
                reasons.append('missing protocol')
 | 
						|
            except ValueError:
 | 
						|
                reasons.append(f'invalid protocol "{value["protocol"]}"')
 | 
						|
            try:
 | 
						|
                int(value['algorithm'])
 | 
						|
            except KeyError:
 | 
						|
                reasons.append('missing algorithm')
 | 
						|
            except ValueError:
 | 
						|
                reasons.append(f'invalid algorithm "{value["algorithm"]}"')
 | 
						|
            if 'public_key' not in value:
 | 
						|
                reasons.append('missing public_key')
 | 
						|
        return reasons
 | 
						|
 | 
						|
    @classmethod
 | 
						|
    def process(cls, values):
 | 
						|
        return [cls(v) for v in values]
 | 
						|
 | 
						|
    def __init__(self, value):
 | 
						|
        super().__init__(
 | 
						|
            {
 | 
						|
                'flags': int(value['flags']),
 | 
						|
                'protocol': int(value['protocol']),
 | 
						|
                'algorithm': int(value['algorithm']),
 | 
						|
                'public_key': value['public_key'],
 | 
						|
            }
 | 
						|
        )
 | 
						|
 | 
						|
    @property
 | 
						|
    def flags(self):
 | 
						|
        return self['flags']
 | 
						|
 | 
						|
    @flags.setter
 | 
						|
    def flags(self, value):
 | 
						|
        self['flags'] = value
 | 
						|
 | 
						|
    @property
 | 
						|
    def protocol(self):
 | 
						|
        return self['protocol']
 | 
						|
 | 
						|
    @protocol.setter
 | 
						|
    def protocol(self, value):
 | 
						|
        self['protocol'] = value
 | 
						|
 | 
						|
    @property
 | 
						|
    def algorithm(self):
 | 
						|
        return self['algorithm']
 | 
						|
 | 
						|
    @algorithm.setter
 | 
						|
    def algorithm(self, value):
 | 
						|
        self['algorithm'] = value
 | 
						|
 | 
						|
    @property
 | 
						|
    def public_key(self):
 | 
						|
        return self['public_key']
 | 
						|
 | 
						|
    @public_key.setter
 | 
						|
    def public_key(self, value):
 | 
						|
        self['public_key'] = value
 | 
						|
 | 
						|
    @property
 | 
						|
    def data(self):
 | 
						|
        return self
 | 
						|
 | 
						|
    @property
 | 
						|
    def rdata_text(self):
 | 
						|
        return (
 | 
						|
            f'{self.flags} {self.protocol} {self.algorithm} {self.public_key}'
 | 
						|
        )
 | 
						|
 | 
						|
    def _equality_tuple(self):
 | 
						|
        return (self.flags, self.protocol, self.algorithm, self.public_key)
 | 
						|
 | 
						|
    def __repr__(self):
 | 
						|
        return (
 | 
						|
            f'{self.flags} {self.protocol} {self.algorithm} {self.public_key}'
 | 
						|
        )
 | 
						|
 | 
						|
 | 
						|
class DsRecord(ValuesMixin, Record):
 | 
						|
    _type = 'DS'
 | 
						|
    _value_type = DsValue
 | 
						|
 | 
						|
 | 
						|
Record.register_type(DsRecord)
 |