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

f-strings for CloudflareProvider

This commit is contained in:
Ross McFarland
2021-09-04 08:22:38 -07:00
parent de3b4a5836
commit f9280d3274

View File

@@ -86,7 +86,7 @@ class CloudflareProvider(BaseProvider):
def __init__(self, id, email=None, token=None, cdn=False, retry_count=4, def __init__(self, id, email=None, token=None, cdn=False, retry_count=4,
retry_period=300, zones_per_page=50, records_per_page=100, retry_period=300, zones_per_page=50, records_per_page=100,
*args, **kwargs): *args, **kwargs):
self.log = getLogger('CloudflareProvider[{}]'.format(id)) self.log = getLogger(f'CloudflareProvider[{id}]')
self.log.debug('__init__: id=%s, email=%s, token=***, cdn=%s', id, self.log.debug('__init__: id=%s, email=%s, token=***, cdn=%s', id,
email, cdn) email, cdn)
super(CloudflareProvider, self).__init__(id, *args, **kwargs) super(CloudflareProvider, self).__init__(id, *args, **kwargs)
@@ -101,7 +101,7 @@ class CloudflareProvider(BaseProvider):
# https://api.cloudflare.com/#getting-started-requests # https://api.cloudflare.com/#getting-started-requests
# https://tools.ietf.org/html/rfc6750#section-2.1 # https://tools.ietf.org/html/rfc6750#section-2.1
sess.headers.update({ sess.headers.update({
'Authorization': 'Bearer {}'.format(token), 'Authorization': f'Bearer {token}',
}) })
self.cdn = cdn self.cdn = cdn
self.retry_count = retry_count self.retry_count = retry_count
@@ -130,7 +130,7 @@ class CloudflareProvider(BaseProvider):
def _request(self, method, path, params=None, data=None): def _request(self, method, path, params=None, data=None):
self.log.debug('_request: method=%s, path=%s', method, path) self.log.debug('_request: method=%s, path=%s', method, path)
url = 'https://api.cloudflare.com/client/v4{}'.format(path) url = f'https://api.cloudflare.com/client/v4{path}'
resp = self._sess.request(method, url, params=params, json=data, resp = self._sess.request(method, url, params=params, json=data,
timeout=self.TIMEOUT) timeout=self.TIMEOUT)
self.log.debug('_request: status=%d', resp.status_code) self.log.debug('_request: status=%d', resp.status_code)
@@ -168,7 +168,7 @@ class CloudflareProvider(BaseProvider):
else: else:
page = None page = None
self._zones = {'{}.'.format(z['name']): z['id'] for z in zones} self._zones = {f'{z["name"]}.': z['id'] for z in zones}
return self._zones return self._zones
@@ -184,7 +184,7 @@ class CloudflareProvider(BaseProvider):
return { return {
'ttl': self._ttl_data(records[0]['ttl']), 'ttl': self._ttl_data(records[0]['ttl']),
'type': _type, 'type': _type,
'value': '{}.cdn.cloudflare.net.'.format(records[0]['name']), 'value': f'{records[0]["name"]}.cdn.cloudflare.net.',
} }
def _data_for_multiple(self, _type, records): def _data_for_multiple(self, _type, records):
@@ -221,7 +221,7 @@ class CloudflareProvider(BaseProvider):
return { return {
'ttl': self._ttl_data(only['ttl']), 'ttl': self._ttl_data(only['ttl']),
'type': _type, 'type': _type,
'value': '{}.'.format(only['content']) 'value': f'{only["content"]}.'
} }
_data_for_ALIAS = _data_for_CNAME _data_for_ALIAS = _data_for_CNAME
@@ -256,7 +256,7 @@ class CloudflareProvider(BaseProvider):
for r in records: for r in records:
values.append({ values.append({
'preference': r['priority'], 'preference': r['priority'],
'exchange': '{}.'.format(r['content']), 'exchange': f'{r["content"]}.',
}) })
return { return {
'ttl': self._ttl_data(records[0]['ttl']), 'ttl': self._ttl_data(records[0]['ttl']),
@@ -268,13 +268,13 @@ class CloudflareProvider(BaseProvider):
return { return {
'ttl': self._ttl_data(records[0]['ttl']), 'ttl': self._ttl_data(records[0]['ttl']),
'type': _type, 'type': _type,
'values': ['{}.'.format(r['content']) for r in records], 'values': [f'{r["content"]}.' for r in records],
} }
def _data_for_SRV(self, _type, records): def _data_for_SRV(self, _type, records):
values = [] values = []
for r in records: for r in records:
target = ('{}.'.format(r['data']['target']) target = (f'{r["data"]["target"]}.'
if r['data']['target'] != "." else ".") if r['data']['target'] != "." else ".")
values.append({ values.append({
'priority': r['data']['priority'], 'priority': r['data']['priority'],
@@ -311,7 +311,7 @@ class CloudflareProvider(BaseProvider):
return [] return []
records = [] records = []
path = '/zones/{}/dns_records'.format(zone_id) path = f'/zones/{zone_id}/dns_records'
page = 1 page = 1
while page: while page:
resp = self._try_request('GET', path, params={'page': page, resp = self._try_request('GET', path, params={'page': page,
@@ -323,7 +323,7 @@ class CloudflareProvider(BaseProvider):
else: else:
page = None page = None
path = '/zones/{}/pagerules'.format(zone_id) path = f'/zones/{zone_id}/pagerules'
resp = self._try_request('GET', path, params={'status': 'active'}) resp = self._try_request('GET', path, params={'status': 'active'})
for r in resp['result']: for r in resp['result']:
# assumption, base on API guide, will only contain 1 action # assumption, base on API guide, will only contain 1 action
@@ -343,7 +343,7 @@ class CloudflareProvider(BaseProvider):
if _type == 'CNAME' and name == '': if _type == 'CNAME' and name == '':
_type = 'ALIAS' _type = 'ALIAS'
data_for = getattr(self, '_data_for_{}'.format(_type)) data_for = getattr(self, f'_data_for_{_type}')
data = data_for(_type, records) data = data_for(_type, records)
record = Record.new(zone, name, data, source=self, lenient=lenient) record = Record.new(zone, name, data, source=self, lenient=lenient)
@@ -563,11 +563,11 @@ class CloudflareProvider(BaseProvider):
_type = 'CNAME' _type = 'CNAME'
if _type == 'URLFWD': if _type == 'URLFWD':
contents_for = getattr(self, '_contents_for_{}'.format(_type)) contents_for = getattr(self, f'_contents_for_{_type}')
for content in contents_for(record): for content in contents_for(record):
yield content yield content
else: else:
contents_for = getattr(self, '_contents_for_{}'.format(_type)) contents_for = getattr(self, f'_contents_for_{_type}')
for content in contents_for(record): for content in contents_for(record):
content.update({ content.update({
'name': name, 'name': name,
@@ -597,46 +597,58 @@ class CloudflareProvider(BaseProvider):
# AND... for URLFWD/Redirects additional adventures are created. # AND... for URLFWD/Redirects additional adventures are created.
_type = data.get('type', 'URLFWD') _type = data.get('type', 'URLFWD')
if _type == 'MX': if _type == 'MX':
return '{priority} {content}'.format(**data) priority = data['priority']
content = data['content']
return f'{priority} {content}'
elif _type == 'CAA': elif _type == 'CAA':
data = data['data'] data = data['data']
return '{flags} {tag} {value}'.format(**data) flags = data['flags']
tag = data['tag']
value = data['value']
return f'{flags} {tag} {value}'
elif _type == 'SRV': elif _type == 'SRV':
data = data['data'] data = data['data']
return '{port} {priority} {target} {weight}'.format(**data) port = data['port']
priority = data['priority']
target = data['target']
weight = data['weight']
return f'{port} {priority} {target} {weight}'
elif _type == 'LOC': elif _type == 'LOC':
data = data['data'] data = data['data']
loc = ( lat_degrees = data['lat_degrees']
'{lat_degrees}', lat_minutes = data['lat_minutes']
'{lat_minutes}', lat_seconds = data['lat_seconds']
'{lat_seconds}', lat_direction = data['lat_direction']
'{lat_direction}', long_degrees = data['long_degrees']
'{long_degrees}', long_minutes = data['long_minutes']
'{long_minutes}', long_seconds = data['long_seconds']
'{long_seconds}', long_direction = data['long_direction']
'{long_direction}', altitude = data['altitude']
'{altitude}', size = data['size']
'{size}', precision_horz = data['precision_horz']
'{precision_horz}', precision_vert = data['precision_vert']
'{precision_vert}') return f'{lat_degrees} {lat_minutes} {lat_seconds} ' \
return ' '.join(loc).format(**data) f'{lat_direction} {long_degrees} {long_minutes} ' \
f'{long_seconds} {long_direction} {altitude} {size} ' \
f'{precision_horz} {precision_vert}'
elif _type == 'URLFWD': elif _type == 'URLFWD':
uri = data['targets'][0]['constraint']['value'] uri = data['targets'][0]['constraint']['value']
uri = '//' + uri if not uri.startswith('http') else uri uri = '//' + uri if not uri.startswith('http') else uri
parsed_uri = urlsplit(uri) parsed_uri = urlsplit(uri)
return '{name} {path} {url} {status_code}' \ url = data['actions'][0]['value']['url']
.format(name=parsed_uri.netloc, status_code = data['actions'][0]['value']['status_code']
path=parsed_uri.path, return f'{parsed_uri.netloc} {parsed_uri.path} {url} ' + \
**data['actions'][0]['value']) f'{status_code}'
return data['content'] return data['content']
def _apply_Create(self, change): def _apply_Create(self, change):
new = change.new new = change.new
zone_id = self.zones[new.zone.name] zone_id = self.zones[new.zone.name]
if new._type == 'URLFWD': if new._type == 'URLFWD':
path = '/zones/{}/pagerules'.format(zone_id) path = f'/zones/{zone_id}/pagerules'
else: else:
path = '/zones/{}/dns_records'.format(zone_id) path = f'/zones/{zone_id}/dns_records'
for content in self._gen_data(new): for content in self._gen_data(new):
self._try_request('POST', path, data=content) self._try_request('POST', path, data=content)
@@ -738,9 +750,9 @@ class CloudflareProvider(BaseProvider):
# Creates # Creates
if _type == 'URLFWD': if _type == 'URLFWD':
path = '/zones/{}/pagerules'.format(zone_id) path = f'/zones/{zone_id}/pagerules'
else: else:
path = '/zones/{}/dns_records'.format(zone_id) path = f'/zones/{zone_id}/dns_records'
for _, data in sorted(creates.items()): for _, data in sorted(creates.items()):
self.log.debug('_apply_Update: creating %s', data) self.log.debug('_apply_Update: creating %s', data)
self._try_request('POST', path, data=data) self._try_request('POST', path, data=data)
@@ -751,9 +763,9 @@ class CloudflareProvider(BaseProvider):
data = info['data'] data = info['data']
old_data = info['old_data'] old_data = info['old_data']
if _type == 'URLFWD': if _type == 'URLFWD':
path = '/zones/{}/pagerules/{}'.format(zone_id, record_id) path = f'/zones/{zone_id}/pagerules/{record_id}'
else: else:
path = '/zones/{}/dns_records/{}'.format(zone_id, record_id) path = f'/zones/{zone_id}/dns_records/{record_id}'
self.log.debug('_apply_Update: updating %s, %s -> %s', self.log.debug('_apply_Update: updating %s, %s -> %s',
record_id, data, old_data) record_id, data, old_data)
self._try_request('PUT', path, data=data) self._try_request('PUT', path, data=data)
@@ -763,9 +775,9 @@ class CloudflareProvider(BaseProvider):
record_id = info['record_id'] record_id = info['record_id']
old_data = info['data'] old_data = info['data']
if _type == 'URLFWD': if _type == 'URLFWD':
path = '/zones/{}/pagerules/{}'.format(zone_id, record_id) path = f'/zones/{zone_id}/pagerules/{record_id}'
else: else:
path = '/zones/{}/dns_records/{}'.format(zone_id, record_id) path = f'/zones/{zone_id}/dns_records/{record_id}'
self.log.debug('_apply_Update: removing %s, %s', record_id, self.log.debug('_apply_Update: removing %s, %s', record_id,
old_data) old_data)
self._try_request('DELETE', path) self._try_request('DELETE', path)
@@ -786,14 +798,13 @@ class CloudflareProvider(BaseProvider):
zone_id = self.zones.get(existing.zone.name, False) zone_id = self.zones.get(existing.zone.name, False)
if existing_name == record_name and \ if existing_name == record_name and \
existing_type == record_type: existing_type == record_type:
path = '/zones/{}/pagerules/{}' \ path = f'/zones/{zone_id}/pagerules/{record["id"]}'
.format(zone_id, record['id'])
self._try_request('DELETE', path) self._try_request('DELETE', path)
else: else:
if existing_name == record['name'] and \ if existing_name == record['name'] and \
existing_type == record['type']: existing_type == record['type']:
path = '/zones/{}/dns_records/{}' \ path = f'/zones/{record["zone_id"]}/dns_records/' \
.format(record['zone_id'], record['id']) f'{record["id"]}'
self._try_request('DELETE', path) self._try_request('DELETE', path)
def _apply(self, plan): def _apply(self, plan):
@@ -821,7 +832,7 @@ class CloudflareProvider(BaseProvider):
for change in changes: for change in changes:
class_name = change.__class__.__name__ class_name = change.__class__.__name__
getattr(self, '_apply_{}'.format(class_name))(change) getattr(self, f'_apply_{class_name}')(change)
# clear the cache # clear the cache
self._zone_records.pop(name, None) self._zone_records.pop(name, None)