mirror of
https://github.com/github/octodns.git
synced 2024-05-11 05:55:00 +00:00
Merge pull request #928 from octodns/misc-bits
Misc bits: errant string joins from formatting formatted code and best practices in bootstrap
This commit is contained in:
@@ -1,2 +1,4 @@
|
||||
# Commit that added in black formatting support
|
||||
e116d26eeca0891c31b689e43db5bb60b62f73f6
|
||||
# Commit that fixed a bunch of uneeded '...' '...' string joins from ^
|
||||
fa4225b625654c51c7b0be6efcfd6a1109768a72
|
||||
|
||||
@@ -38,13 +38,13 @@ def main():
|
||||
'--lenient',
|
||||
action='store_true',
|
||||
default=False,
|
||||
help='Ignore record validations and do a best effort ' 'dump',
|
||||
help='Ignore record validations and do a best effort dump',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--split',
|
||||
action='store_true',
|
||||
default=False,
|
||||
help='Split the dumped zone into a YAML file per ' 'record',
|
||||
help='Split the dumped zone into a YAML file per record',
|
||||
)
|
||||
parser.add_argument('zone', help='Zone to dump')
|
||||
parser.add_argument('source', nargs='+', help='Source(s) to pull data from')
|
||||
|
||||
@@ -26,7 +26,7 @@ def main():
|
||||
'--doit',
|
||||
action='store_true',
|
||||
default=False,
|
||||
help='Whether to take action or just show what would ' 'change',
|
||||
help='Whether to take action or just show what would change',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--force',
|
||||
|
||||
+10
-10
@@ -141,7 +141,7 @@ class Manager(object):
|
||||
except KeyError:
|
||||
self.log.exception('Invalid provider class')
|
||||
raise ManagerException(
|
||||
f'Provider {provider_name} is missing ' 'class'
|
||||
f'Provider {provider_name} is missing class'
|
||||
)
|
||||
_class, module, version = self._get_named_class('provider', _class)
|
||||
kwargs = self._build_kwargs(provider_config)
|
||||
@@ -168,7 +168,7 @@ class Manager(object):
|
||||
except KeyError:
|
||||
self.log.exception('Invalid processor class')
|
||||
raise ManagerException(
|
||||
f'Processor {processor_name} is ' 'missing class'
|
||||
f'Processor {processor_name} is missing class'
|
||||
)
|
||||
_class, module, version = self._get_named_class('processor', _class)
|
||||
kwargs = self._build_kwargs(processor_config)
|
||||
@@ -204,7 +204,7 @@ class Manager(object):
|
||||
except KeyError:
|
||||
self.log.exception('Invalid plan_output class')
|
||||
raise ManagerException(
|
||||
f'plan_output {plan_output_name} is ' 'missing class'
|
||||
f'plan_output {plan_output_name} is missing class'
|
||||
)
|
||||
_class, module, version = self._get_named_class(
|
||||
'plan_output', _class
|
||||
@@ -264,7 +264,7 @@ class Manager(object):
|
||||
module, version = self._import_module(module_name)
|
||||
except (ImportError, ValueError):
|
||||
self.log.exception(
|
||||
'_get_{}_class: Unable to import ' 'module %s', _class
|
||||
'_get_{}_class: Unable to import module %s', _class
|
||||
)
|
||||
raise ManagerException(f'Unknown {_type} class: {_class}')
|
||||
|
||||
@@ -272,7 +272,7 @@ class Manager(object):
|
||||
return getattr(module, class_name), module_name, version
|
||||
except AttributeError:
|
||||
self.log.exception(
|
||||
'_get_{}_class: Unable to get class %s ' 'from module %s',
|
||||
'_get_{}_class: Unable to get class %s from module %s',
|
||||
class_name,
|
||||
module,
|
||||
)
|
||||
@@ -360,7 +360,7 @@ class Manager(object):
|
||||
if "unexpected keyword argument 'lenient'" not in str(e):
|
||||
raise
|
||||
self.log.warning(
|
||||
'provider %s does not accept lenient ' 'param',
|
||||
'provider %s does not accept lenient param',
|
||||
source.__class__.__name__,
|
||||
)
|
||||
source.populate(zone)
|
||||
@@ -389,7 +389,7 @@ class Manager(object):
|
||||
if "keyword argument 'processors'" not in str(e):
|
||||
raise
|
||||
self.log.warning(
|
||||
'provider.plan %s does not accept processors ' 'param',
|
||||
'provider.plan %s does not accept processors param',
|
||||
target.__class__.__name__,
|
||||
)
|
||||
plan = target.plan(zone)
|
||||
@@ -522,7 +522,7 @@ class Manager(object):
|
||||
trg = self.providers[target]
|
||||
if not isinstance(trg, BaseProvider):
|
||||
raise ManagerException(
|
||||
f'{trg} - "{target}" does not ' 'support targeting'
|
||||
f'{trg} - "{target}" does not support targeting'
|
||||
)
|
||||
trgs.append(trg)
|
||||
targets = trgs
|
||||
@@ -696,7 +696,7 @@ class Manager(object):
|
||||
raise ManagerException(msg)
|
||||
target = target.copy()
|
||||
self.log.info(
|
||||
'dump: setting directory of output_provider ' 'copy to %s',
|
||||
'dump: setting directory of output_provider copy to %s',
|
||||
output_dir,
|
||||
)
|
||||
target.directory = output_dir
|
||||
@@ -781,7 +781,7 @@ class Manager(object):
|
||||
def get_zone(self, zone_name):
|
||||
if not zone_name[-1] == '.':
|
||||
raise ManagerException(
|
||||
f'Invalid zone name {zone_name}, missing ' 'ending dot'
|
||||
f'Invalid zone name {zone_name}, missing ending dot'
|
||||
)
|
||||
|
||||
for name, config in self.config['zones'].items():
|
||||
|
||||
@@ -187,8 +187,7 @@ class BaseProvider(BaseSource):
|
||||
# If your code gets this warning see Source.populate for more
|
||||
# information
|
||||
self.log.warning(
|
||||
'Provider %s used in target mode did not return ' 'exists',
|
||||
self.id,
|
||||
'Provider %s used in target mode did not return exists', self.id
|
||||
)
|
||||
|
||||
# Make a (shallow) copy of the desired state so that everything from
|
||||
@@ -254,6 +253,4 @@ class BaseProvider(BaseSource):
|
||||
return len(plan.changes)
|
||||
|
||||
def _apply(self, plan):
|
||||
raise NotImplementedError(
|
||||
'Abstract base class, _apply method ' 'missing'
|
||||
)
|
||||
raise NotImplementedError('Abstract base class, _apply method missing')
|
||||
|
||||
@@ -73,7 +73,7 @@ class Plan(object):
|
||||
existing_n = 0
|
||||
|
||||
self.log.debug(
|
||||
'__init__: Creates=%d, Updates=%d, Deletes=%d ' 'Existing=%d',
|
||||
'__init__: Creates=%d, Updates=%d, Deletes=%d Existing=%d',
|
||||
self.change_counts['Create'],
|
||||
self.change_counts['Update'],
|
||||
self.change_counts['Delete'],
|
||||
|
||||
@@ -624,7 +624,7 @@ class _DynamicMixin(object):
|
||||
|
||||
if len(values) == 1 and values[0].get('weight', 1) != 1:
|
||||
reasons.append(
|
||||
f'pool "{_id}" has single value with ' 'weight!=1'
|
||||
f'pool "{_id}" has single value with weight!=1'
|
||||
)
|
||||
|
||||
fallback = pool.get('fallback', None)
|
||||
@@ -1307,7 +1307,7 @@ class _NsValue(object):
|
||||
for value in data:
|
||||
if not FQDN(str(value), allow_underscores=True).is_valid:
|
||||
reasons.append(
|
||||
f'Invalid NS value "{value}" is not ' 'a valid FQDN.'
|
||||
f'Invalid NS value "{value}" is not a valid FQDN.'
|
||||
)
|
||||
elif not value.endswith('.'):
|
||||
reasons.append(f'NS value "{value}" missing trailing .')
|
||||
@@ -1519,7 +1519,7 @@ class SrvValue(EqualityTupleMixin):
|
||||
and not FQDN(str(target), allow_underscores=True).is_valid
|
||||
):
|
||||
reasons.append(
|
||||
f'Invalid SRV target "{target}" is not ' 'a valid FQDN.'
|
||||
f'Invalid SRV target "{target}" is not a valid FQDN.'
|
||||
)
|
||||
except KeyError:
|
||||
reasons.append('missing target')
|
||||
|
||||
@@ -288,7 +288,7 @@ geo_data = {
|
||||
'SD': {'name': 'South Dakota'},
|
||||
'TN': {'name': 'Tennessee'},
|
||||
'TX': {'name': 'Texas'},
|
||||
'UM': {'name': 'United States Minor Outlying ' 'Islands'},
|
||||
'UM': {'name': 'United States Minor Outlying Islands'},
|
||||
'UT': {'name': 'Utah'},
|
||||
'VA': {'name': 'Virginia'},
|
||||
'VI': {'name': 'Virgin Islands'},
|
||||
|
||||
@@ -20,15 +20,15 @@ class BaseSource(object):
|
||||
self.id = id
|
||||
if not getattr(self, 'log', False):
|
||||
raise NotImplementedError(
|
||||
'Abstract base class, log property ' 'missing'
|
||||
'Abstract base class, log property missing'
|
||||
)
|
||||
if not hasattr(self, 'SUPPORTS_GEO'):
|
||||
raise NotImplementedError(
|
||||
'Abstract base class, SUPPORTS_GEO ' 'property missing'
|
||||
'Abstract base class, SUPPORTS_GEO property missing'
|
||||
)
|
||||
if not hasattr(self, 'SUPPORTS'):
|
||||
raise NotImplementedError(
|
||||
'Abstract base class, SUPPORTS ' 'property missing'
|
||||
'Abstract base class, SUPPORTS property missing'
|
||||
)
|
||||
|
||||
@property
|
||||
@@ -51,7 +51,7 @@ class BaseSource(object):
|
||||
True if the zone exists or False if it does not.
|
||||
'''
|
||||
raise NotImplementedError(
|
||||
'Abstract base class, populate method ' 'missing'
|
||||
'Abstract base class, populate method missing'
|
||||
)
|
||||
|
||||
def supports(self, record):
|
||||
|
||||
@@ -67,7 +67,7 @@ class EnvVarSource(BaseSource):
|
||||
klass = self.__class__.__name__
|
||||
self.log = logging.getLogger(f'{klass}[{id}]')
|
||||
self.log.debug(
|
||||
'__init__: id=%s, variable=%s, name=%s, ' 'ttl=%d',
|
||||
'__init__: id=%s, variable=%s, name=%s, ttl=%d',
|
||||
id,
|
||||
variable,
|
||||
name,
|
||||
|
||||
@@ -174,7 +174,7 @@ class TinyDnsBaseSource(BaseSource):
|
||||
zone.add_record(record, lenient=lenient)
|
||||
except SubzoneRecordException:
|
||||
self.log.debug(
|
||||
'_populate_normal: skipping subzone ' 'record=%s',
|
||||
'_populate_normal: skipping subzone record=%s',
|
||||
record,
|
||||
)
|
||||
|
||||
|
||||
+5
-5
@@ -146,7 +146,7 @@ class Zone(object):
|
||||
continue
|
||||
elif len(record.included) > 0 and target.id not in record.included:
|
||||
self.log.debug(
|
||||
'changes: skipping record=%s %s - %s not' ' included ',
|
||||
'changes: skipping record=%s %s - %s not included ',
|
||||
record.fqdn,
|
||||
record._type,
|
||||
target.id,
|
||||
@@ -154,7 +154,7 @@ class Zone(object):
|
||||
continue
|
||||
elif target.id in record.excluded:
|
||||
self.log.debug(
|
||||
'changes: skipping record=%s %s - %s ' 'excluded ',
|
||||
'changes: skipping record=%s %s - %s excluded ',
|
||||
record.fqdn,
|
||||
record._type,
|
||||
target.id,
|
||||
@@ -169,7 +169,7 @@ class Zone(object):
|
||||
and target.id not in desired_record.included
|
||||
):
|
||||
self.log.debug(
|
||||
'changes: skipping record=%s %s - %s' 'not included ',
|
||||
'changes: skipping record=%s %s - %s not included',
|
||||
record.fqdn,
|
||||
record._type,
|
||||
target.id,
|
||||
@@ -216,7 +216,7 @@ class Zone(object):
|
||||
continue
|
||||
elif len(record.included) > 0 and target.id not in record.included:
|
||||
self.log.debug(
|
||||
'changes: skipping record=%s %s - %s not' ' included ',
|
||||
'changes: skipping record=%s %s - %s not included ',
|
||||
record.fqdn,
|
||||
record._type,
|
||||
target.id,
|
||||
@@ -224,7 +224,7 @@ class Zone(object):
|
||||
continue
|
||||
elif target.id in record.excluded:
|
||||
self.log.debug(
|
||||
'changes: skipping record=%s %s - %s ' 'excluded ',
|
||||
'changes: skipping record=%s %s - %s excluded ',
|
||||
record.fqdn,
|
||||
record._type,
|
||||
target.id,
|
||||
|
||||
+11
-2
@@ -29,8 +29,17 @@ if [ "$ENV" != "production" ]; then
|
||||
python -m pip install -r requirements-dev.txt
|
||||
fi
|
||||
|
||||
if [ ! -L ".git/hooks/pre-commit" ]; then
|
||||
ln -s "$ROOT/.git_hooks_pre-commit" ".git/hooks/pre-commit"
|
||||
if [ -d ".git" ]; then
|
||||
if [ -f ".git-blame-ignore-revs" ]; then
|
||||
echo ""
|
||||
echo "Setting blame.ignoreRevsFile to .git-blame-ingore-revs"
|
||||
git config --local blame.ignoreRevsFile .git-blame-ignore-revs
|
||||
fi
|
||||
if [ ! -L ".git/hooks/pre-commit" ]; then
|
||||
echo ""
|
||||
echo "Installing pre-commit hook"
|
||||
ln -s "$ROOT/.git_hooks_pre-commit" ".git/hooks/pre-commit"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
@@ -441,7 +441,7 @@ class TestManager(TestCase):
|
||||
sources=['in'],
|
||||
)
|
||||
self.assertEqual(
|
||||
'output_provider=simple, does not support ' 'copy method',
|
||||
'output_provider=simple, does not support copy method',
|
||||
str(ctx.exception),
|
||||
)
|
||||
|
||||
|
||||
@@ -213,7 +213,7 @@ class TestYamlProvider(TestCase):
|
||||
with self.assertRaises(SubzoneRecordException) as ctx:
|
||||
source.populate(zone)
|
||||
self.assertEqual(
|
||||
'Record www.sub.unit.tests. is under a managed ' 'subzone',
|
||||
'Record www.sub.unit.tests. is under a managed subzone',
|
||||
str(ctx.exception),
|
||||
)
|
||||
|
||||
@@ -470,7 +470,7 @@ class TestSplitYamlProvider(TestCase):
|
||||
with self.assertRaises(SubzoneRecordException) as ctx:
|
||||
source.populate(zone)
|
||||
self.assertEqual(
|
||||
'Record www.sub.unit.tests. is under a managed ' 'subzone',
|
||||
'Record www.sub.unit.tests. is under a managed subzone',
|
||||
str(ctx.exception),
|
||||
)
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ class TestRecord(TestCase):
|
||||
with self.assertRaises(RecordException) as ctx:
|
||||
Record.register_type(None, 'A')
|
||||
self.assertEqual(
|
||||
'Type "A" already registered by ' 'octodns.record.ARecord',
|
||||
'Type "A" already registered by octodns.record.ARecord',
|
||||
str(ctx.exception),
|
||||
)
|
||||
|
||||
@@ -1859,7 +1859,7 @@ class TestRecordValidation(TestCase):
|
||||
self.assertTrue(reason.startswith('invalid fqdn, "xxxx'))
|
||||
self.assertTrue(
|
||||
reason.endswith(
|
||||
'.unit.tests." is too long at 254' ' chars, max is 253'
|
||||
'.unit.tests." is too long at 254 chars, max is 253'
|
||||
)
|
||||
)
|
||||
|
||||
@@ -1873,7 +1873,7 @@ class TestRecordValidation(TestCase):
|
||||
reason = ctx.exception.reasons[0]
|
||||
self.assertTrue(reason.startswith('invalid label, "xxxx'))
|
||||
self.assertTrue(
|
||||
reason.endswith('xxx" is too long at 64' ' chars, max is 63')
|
||||
reason.endswith('xxx" is too long at 64 chars, max is 63')
|
||||
)
|
||||
|
||||
with self.assertRaises(ValidationError) as ctx:
|
||||
@@ -1884,7 +1884,7 @@ class TestRecordValidation(TestCase):
|
||||
reason = ctx.exception.reasons[0]
|
||||
self.assertTrue(reason.startswith('invalid label, "xxxx'))
|
||||
self.assertTrue(
|
||||
reason.endswith('xxx" is too long at 64' ' chars, max is 63')
|
||||
reason.endswith('xxx" is too long at 64 chars, max is 63')
|
||||
)
|
||||
|
||||
# should not raise with dots
|
||||
@@ -2472,7 +2472,7 @@ class TestRecordValidation(TestCase):
|
||||
{'type': 'CNAME', 'ttl': 600, 'value': 'https://google.com'},
|
||||
)
|
||||
self.assertEqual(
|
||||
['CNAME value "https://google.com" is not a valid ' 'FQDN'],
|
||||
['CNAME value "https://google.com" is not a valid FQDN'],
|
||||
ctx.exception.reasons,
|
||||
)
|
||||
|
||||
@@ -2488,7 +2488,7 @@ class TestRecordValidation(TestCase):
|
||||
},
|
||||
)
|
||||
self.assertEqual(
|
||||
['CNAME value "https://google.com/a/b/c" is not a ' 'valid FQDN'],
|
||||
['CNAME value "https://google.com/a/b/c" is not a valid FQDN'],
|
||||
ctx.exception.reasons,
|
||||
)
|
||||
|
||||
@@ -2500,7 +2500,7 @@ class TestRecordValidation(TestCase):
|
||||
{'type': 'CNAME', 'ttl': 600, 'value': 'google.com/some/path'},
|
||||
)
|
||||
self.assertEqual(
|
||||
['CNAME value "google.com/some/path" is not a valid ' 'FQDN'],
|
||||
['CNAME value "google.com/some/path" is not a valid FQDN'],
|
||||
ctx.exception.reasons,
|
||||
)
|
||||
|
||||
@@ -2971,7 +2971,7 @@ class TestRecordValidation(TestCase):
|
||||
},
|
||||
)
|
||||
self.assertEqual(
|
||||
['Invalid MX exchange "100 foo.bar.com." is not a ' 'valid FQDN.'],
|
||||
['Invalid MX exchange "100 foo.bar.com." is not a valid FQDN.'],
|
||||
ctx.exception.reasons,
|
||||
)
|
||||
|
||||
@@ -3082,7 +3082,7 @@ class TestRecordValidation(TestCase):
|
||||
{'type': 'NS', 'ttl': 600, 'value': '100 foo.bar.com.'},
|
||||
)
|
||||
self.assertEqual(
|
||||
['Invalid NS value "100 foo.bar.com." is not a ' 'valid FQDN.'],
|
||||
['Invalid NS value "100 foo.bar.com." is not a valid FQDN.'],
|
||||
ctx.exception.reasons,
|
||||
)
|
||||
|
||||
@@ -3283,7 +3283,7 @@ class TestRecordValidation(TestCase):
|
||||
},
|
||||
)
|
||||
self.assertEqual(
|
||||
['unescaped ; in "this has some; ' 'semi-colons\\; in it"'],
|
||||
['unescaped ; in "this has some; semi-colons\\; in it"'],
|
||||
ctx.exception.reasons,
|
||||
)
|
||||
|
||||
@@ -3487,7 +3487,7 @@ class TestRecordValidation(TestCase):
|
||||
},
|
||||
)
|
||||
self.assertEqual(
|
||||
['Invalid SRV target "100 foo.bar.com." is not a ' 'valid FQDN.'],
|
||||
['Invalid SRV target "100 foo.bar.com." is not a valid FQDN.'],
|
||||
ctx.exception.reasons,
|
||||
)
|
||||
|
||||
@@ -3589,7 +3589,7 @@ class TestRecordValidation(TestCase):
|
||||
},
|
||||
)
|
||||
self.assertEqual(
|
||||
'invalid certificate_usage ' '"{value["certificate_usage"]}"',
|
||||
'invalid certificate_usage "{value["certificate_usage"]}"',
|
||||
ctx.exception.reasons,
|
||||
)
|
||||
|
||||
@@ -3610,7 +3610,7 @@ class TestRecordValidation(TestCase):
|
||||
},
|
||||
)
|
||||
self.assertEqual(
|
||||
'invalid certificate_usage ' '"{value["certificate_usage"]}"',
|
||||
'invalid certificate_usage "{value["certificate_usage"]}"',
|
||||
ctx.exception.reasons,
|
||||
)
|
||||
|
||||
@@ -3648,8 +3648,7 @@ class TestRecordValidation(TestCase):
|
||||
},
|
||||
)
|
||||
self.assertEqual(
|
||||
'invalid selector ' '"{value["selector"]}"',
|
||||
ctx.exception.reasons,
|
||||
'invalid selector "{value["selector"]}"', ctx.exception.reasons
|
||||
)
|
||||
|
||||
# Invalid selector
|
||||
@@ -3669,8 +3668,7 @@ class TestRecordValidation(TestCase):
|
||||
},
|
||||
)
|
||||
self.assertEqual(
|
||||
'invalid selector ' '"{value["selector"]}"',
|
||||
ctx.exception.reasons,
|
||||
'invalid selector "{value["selector"]}"', ctx.exception.reasons
|
||||
)
|
||||
|
||||
# missing matching_type
|
||||
@@ -3707,7 +3705,7 @@ class TestRecordValidation(TestCase):
|
||||
},
|
||||
)
|
||||
self.assertEqual(
|
||||
'invalid matching_type ' '"{value["matching_type"]}"',
|
||||
'invalid matching_type "{value["matching_type"]}"',
|
||||
ctx.exception.reasons,
|
||||
)
|
||||
|
||||
@@ -3728,7 +3726,7 @@ class TestRecordValidation(TestCase):
|
||||
},
|
||||
)
|
||||
self.assertEqual(
|
||||
'invalid matching_type ' '"{value["matching_type"]}"',
|
||||
'invalid matching_type "{value["matching_type"]}"',
|
||||
ctx.exception.reasons,
|
||||
)
|
||||
|
||||
@@ -3765,7 +3763,7 @@ class TestRecordValidation(TestCase):
|
||||
},
|
||||
)
|
||||
self.assertEqual(
|
||||
['unescaped ; in "this has some; semi-colons\\; ' 'in it"'],
|
||||
['unescaped ; in "this has some; semi-colons\\; in it"'],
|
||||
ctx.exception.reasons,
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user