1
0
mirror of https://github.com/github/octodns.git synced 2024-05-11 05:55:00 +00:00

f-strings for Manager, Zone and yaml

This commit is contained in:
Ross McFarland
2021-09-04 19:08:29 -07:00
parent fe66582edf
commit adf08a178a
3 changed files with 70 additions and 79 deletions

View File

@@ -111,16 +111,16 @@ class Manager(object):
_class = provider_config.pop('class')
except KeyError:
self.log.exception('Invalid provider class')
raise ManagerException('Provider {} is missing class'
.format(provider_name))
raise ManagerException(f'Provider {provider_name} is missing '
'class')
_class = self._get_named_class('provider', _class)
kwargs = self._build_kwargs(provider_config)
try:
self.providers[provider_name] = _class(provider_name, **kwargs)
except TypeError:
self.log.exception('Invalid provider config')
raise ManagerException('Incorrect provider config for {}'
.format(provider_name))
raise ManagerException('Incorrect provider config for ' +
provider_name)
self.processors = {}
for processor_name, processor_config in \
@@ -129,8 +129,8 @@ class Manager(object):
_class = processor_config.pop('class')
except KeyError:
self.log.exception('Invalid processor class')
raise ManagerException('Processor {} is missing class'
.format(processor_name))
raise ManagerException(f'Processor {processor_name} is '
'missing class')
_class = self._get_named_class('processor', _class)
kwargs = self._build_kwargs(processor_config)
try:
@@ -138,8 +138,8 @@ class Manager(object):
**kwargs)
except TypeError:
self.log.exception('Invalid processor config')
raise ManagerException('Incorrect processor config for {}'
.format(processor_name))
raise ManagerException('Incorrect processor config for ' +
processor_name)
zone_tree = {}
# sort by reversed strings so that parent zones always come first
@@ -173,8 +173,8 @@ class Manager(object):
_class = plan_output_config.pop('class')
except KeyError:
self.log.exception('Invalid plan_output class')
raise ManagerException('plan_output {} is missing class'
.format(plan_output_name))
raise ManagerException(f'plan_output {plan_output_name} is '
'missing class')
_class = self._get_named_class('plan_output', _class)
kwargs = self._build_kwargs(plan_output_config)
try:
@@ -182,8 +182,8 @@ class Manager(object):
_class(plan_output_name, **kwargs)
except TypeError:
self.log.exception('Invalid plan_output config')
raise ManagerException('Incorrect plan_output config for {}'
.format(plan_output_name))
raise ManagerException('Incorrect plan_output config for ' +
plan_output_name)
def _get_named_class(self, _type, _class):
try:
@@ -192,15 +192,13 @@ class Manager(object):
except (ImportError, ValueError):
self.log.exception('_get_{}_class: Unable to import '
'module %s', _class)
raise ManagerException('Unknown {} class: {}'
.format(_type, _class))
raise ManagerException(f'Unknown {_type} class: {_class}')
try:
return getattr(module, class_name)
except AttributeError:
self.log.exception('_get_{}_class: Unable to get class %s '
'from module %s', class_name, module)
raise ManagerException('Unknown {} class: {}'
.format(_type, _class))
raise ManagerException(f'Unknown {_type} class: {_class}')
def _build_kwargs(self, source):
# Build up the arguments we need to pass to the provider
@@ -214,8 +212,7 @@ class Manager(object):
except KeyError:
self.log.exception('Invalid provider config')
raise ManagerException('Incorrect provider config, '
'missing env var {}'
.format(env_var))
'missing env var ' + env_var)
except AttributeError:
pass
kwargs[k] = v
@@ -279,7 +276,7 @@ class Manager(object):
meta = Record.new(zone, 'octodns-meta', {
'type': 'TXT',
'ttl': 60,
'value': 'provider={}'.format(target.id)
'value': f'provider={target.id}',
})
zone.add_record(meta, replace=True)
try:
@@ -322,19 +319,19 @@ class Manager(object):
# Check that the source zone is defined.
if source_zone not in self.config['zones']:
self.log.error('Invalid alias zone {}, target {} does '
'not exist'.format(zone_name, source_zone))
raise ManagerException('Invalid alias zone {}: '
'source zone {} does not exist'
.format(zone_name, source_zone))
self.log.error(f'Invalid alias zone {zone_name}, '
f'target {source_zone} does not exist')
raise ManagerException(f'Invalid alias zone {zone_name}: '
f'source zone {source_zone} does '
'not exist')
# Check that the source zone is not an alias zone itself.
if 'alias' in self.config['zones'][source_zone]:
self.log.error('Invalid alias zone {}, target {} is an '
'alias zone'.format(zone_name, source_zone))
raise ManagerException('Invalid alias zone {}: source '
'zone {} is an alias zone'
.format(zone_name, source_zone))
self.log.error(f'Invalid alias zone {zone_name}, '
f'target {source_zone} is an alias zone')
raise ManagerException(f'Invalid alias zone {zone_name}: '
f'source zone {source_zone} is an '
'alias zone')
aliased_zones[zone_name] = source_zone
continue
@@ -343,14 +340,12 @@ class Manager(object):
try:
sources = config['sources']
except KeyError:
raise ManagerException('Zone {} is missing sources'
.format(zone_name))
raise ManagerException(f'Zone {zone_name} is missing sources')
try:
targets = config['targets']
except KeyError:
raise ManagerException('Zone {} is missing targets'
.format(zone_name))
raise ManagerException(f'Zone {zone_name} is missing targets')
processors = config.get('processors', [])
@@ -377,8 +372,8 @@ class Manager(object):
collected.append(self.processors[processor])
processors = collected
except KeyError:
raise ManagerException('Zone {}, unknown processor: {}'
.format(zone_name, processor))
raise ManagerException(f'Zone {zone_name}, unknown '
f'processor: {processor}')
try:
# rather than using a list comprehension, we break this loop
@@ -389,21 +384,21 @@ class Manager(object):
collected.append(self.providers[source])
sources = collected
except KeyError:
raise ManagerException('Zone {}, unknown source: {}'
.format(zone_name, source))
raise ManagerException(f'Zone {zone_name}, unknown '
f'source: {source}')
try:
trgs = []
for target in targets:
trg = self.providers[target]
if not isinstance(trg, BaseProvider):
raise ManagerException('{} - "{}" does not support '
'targeting'.format(trg, target))
raise ManagerException(f'{trg} - "{target}" does not '
'support targeting')
trgs.append(trg)
targets = trgs
except KeyError:
raise ManagerException('Zone {}, unknown target: {}'
.format(zone_name, target))
raise ManagerException(f'Zone {zone_name}, unknown '
f'target: {target}')
futures.append(self._executor.submit(self._populate_and_plan,
zone_name, processors,
@@ -427,9 +422,9 @@ class Manager(object):
try:
desired_config = desired[zone_source]
except KeyError:
raise ManagerException('Zone {} cannot be sync without zone '
'{} sinced it is aliased'
.format(zone_name, zone_source))
raise ManagerException(f'Zone {zone_name} cannot be sync '
f'without zone {zone_source} sinced '
'it is aliased')
futures.append(self._executor.submit(
self._populate_and_plan,
zone_name,
@@ -488,7 +483,7 @@ class Manager(object):
a = [self.providers[source] for source in a]
b = [self.providers[source] for source in b]
except KeyError as e:
raise ManagerException('Unknown source: {}'.format(e.args[0]))
raise ManagerException(f'Unknown source: {e.args[0]}')
za = self.get_zone(zone)
for source in a:
@@ -513,7 +508,7 @@ class Manager(object):
try:
sources = [self.providers[s] for s in sources]
except KeyError as e:
raise ManagerException('Unknown source: {}'.format(e.args[0]))
raise ManagerException(f'Unknown source: {e.args[0]}')
clz = YamlProvider
if split:
@@ -537,15 +532,15 @@ class Manager(object):
if source_zone:
if source_zone not in self.config['zones']:
self.log.exception('Invalid alias zone')
raise ManagerException('Invalid alias zone {}: '
'source zone {} does not exist'
.format(zone_name, source_zone))
raise ManagerException(f'Invalid alias zone {zone_name}: '
f'source zone {source_zone} does '
'not exist')
if 'alias' in self.config['zones'][source_zone]:
self.log.exception('Invalid alias zone')
raise ManagerException('Invalid alias zone {}: '
'source zone {} is an alias zone'
.format(zone_name, source_zone))
raise ManagerException(f'Invalid alias zone {zone_name}: '
'source zone {source_zone} is an '
'alias zone')
# this is just here to satisfy coverage, see
# https://github.com/nedbat/coveragepy/issues/198
@@ -555,8 +550,7 @@ class Manager(object):
try:
sources = config['sources']
except KeyError:
raise ManagerException('Zone {} is missing sources'
.format(zone_name))
raise ManagerException(f'Zone {zone_name} is missing sources')
try:
# rather than using a list comprehension, we break this
@@ -567,8 +561,8 @@ class Manager(object):
collected.append(self.providers[source])
sources = collected
except KeyError:
raise ManagerException('Zone {}, unknown source: {}'
.format(zone_name, source))
raise ManagerException(f'Zone {zone_name}, unknown source: ' +
source)
for source in sources:
if isinstance(source, YamlProvider):
@@ -581,16 +575,16 @@ class Manager(object):
for processor in processors:
collected.append(self.processors[processor])
except KeyError:
raise ManagerException('Zone {}, unknown processor: {}'
.format(zone_name, processor))
raise ManagerException(f'Zone {zone_name}, unknown '
f'processor: {processor}')
def get_zone(self, zone_name):
if not zone_name[-1] == '.':
raise ManagerException('Invalid zone name {}, missing ending dot'
.format(zone_name))
raise ManagerException(f'Invalid zone name {zone_name}, missing '
'ending dot')
for name, config in self.config['zones'].items():
if name == zone_name:
return Zone(name, self.configured_sub_zones(name))
raise ManagerException('Unknown zone name {}'.format(zone_name))
raise ManagerException(f'Unknown zone name {zone_name}')

View File

@@ -26,8 +26,8 @@ class SortEnforcingLoader(SafeLoader):
expected = keys_sorted.pop(0)
if key != expected:
raise ConstructorError(None, None, 'keys out of order: '
'expected {} got {} at {}'
.format(expected, key, node.start_mark))
f'expected {expected} got {key} at ' +
str(node.start_mark))
return dict(ret)

View File

@@ -37,8 +37,7 @@ class Zone(object):
def __init__(self, name, sub_zones):
if not name[-1] == '.':
raise Exception('Invalid zone name {}, missing ending dot'
.format(name))
raise Exception(f'Invalid zone name {name}, missing ending dot')
# Force everything to lowercase just to be safe
self.name = text_type(name).lower() if name else name
self.sub_zones = sub_zones
@@ -47,7 +46,7 @@ class Zone(object):
self._records = defaultdict(set)
# optional leading . to match empty hostname
# optional trailing . b/c some sources don't have it on their fqdn
self._name_re = re.compile(r'\.?{}?$'.format(name))
self._name_re = re.compile(fr'\.?{name}?$')
# Copy-on-write semantics support, when `not None` this property will
# point to a location with records for this `Zone`. Once `hydrated`
@@ -75,14 +74,13 @@ class Zone(object):
if not lenient and last in self.sub_zones:
if name != last:
# it's a record for something under a sub-zone
raise SubzoneRecordException('Record {} is under a '
'managed subzone'
.format(record.fqdn))
raise SubzoneRecordException(f'Record {record.fqdn} is under '
'a managed subzone')
elif record._type != 'NS':
# It's a non NS record for exactly a sub-zone
raise SubzoneRecordException('Record {} a managed sub-zone '
'and not of type NS'
.format(record.fqdn))
raise SubzoneRecordException(f'Record {record.fqdn} a '
'managed sub-zone and not of '
'type NS')
if replace:
# will remove it if it exists
@@ -91,16 +89,15 @@ class Zone(object):
node = self._records[name]
if record in node:
# We already have a record at this node of this type
raise DuplicateRecordException('Duplicate record {}, type {}'
.format(record.fqdn,
record._type))
raise DuplicateRecordException(f'Duplicate record {record.fqdn}, '
f'type {record._type}')
elif not lenient and ((record._type == 'CNAME' and len(node) > 0) or
('CNAME' in [r._type for r in node])):
# We're adding a CNAME to existing records or adding to an existing
# CNAME
raise InvalidNodeException('Invalid state, CNAME at {} cannot '
'coexist with other records'
.format(record.fqdn))
raise InvalidNodeException('Invalid state, CNAME at '
f'{record.fqdn} cannot coexist with '
'other records')
node.add(record)
@@ -236,4 +233,4 @@ class Zone(object):
return copy
def __repr__(self):
return 'Zone<{}>'.format(self.name)
return f'Zone<{self.name}>'