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:
@@ -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)
|
||||||
|
Reference in New Issue
Block a user