Merge pull request #2 from ajkavanagh/refactor-to-idiomatic
Refactor code to be more idiomatic and compatible with Python 3
This commit is contained in:
commit
ee3ed44e23
|
@ -15,10 +15,7 @@ class OpenStackRelationAdapter(object):
|
||||||
|
|
||||||
def __init__(self, relation, accessors=None):
|
def __init__(self, relation, accessors=None):
|
||||||
self.relation = relation
|
self.relation = relation
|
||||||
if accessors:
|
self.accessors = accessors or []
|
||||||
self.accessors = accessors
|
|
||||||
else:
|
|
||||||
self.accessors = []
|
|
||||||
self._setup_properties()
|
self._setup_properties()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -32,14 +29,17 @@ class OpenStackRelationAdapter(object):
|
||||||
"""
|
"""
|
||||||
Setup property based accessors for an interfaces
|
Setup property based accessors for an interfaces
|
||||||
auto accessors
|
auto accessors
|
||||||
|
|
||||||
|
Note that the accessor is dynamic as each access calls the underlying
|
||||||
|
getattr() for each property access.
|
||||||
"""
|
"""
|
||||||
self.accessors.extend(self.relation.auto_accessors)
|
self.accessors.extend(self.relation.auto_accessors)
|
||||||
for field in self.accessors:
|
for field in self.accessors:
|
||||||
meth_name = field.replace('-', '_')
|
meth_name = field.replace('-', '_')
|
||||||
# TODO: see if we can make this dynamic, rather
|
# Get the relation property dynamically
|
||||||
# than making all calls on setup.
|
setattr(self.__class__,
|
||||||
self.__dict__[meth_name] = getattr(self.relation,
|
meth_name,
|
||||||
meth_name)()
|
property(lambda self: getattr(self.relation, meth_name)))
|
||||||
|
|
||||||
|
|
||||||
class RabbitMQRelationAdapter(OpenStackRelationAdapter):
|
class RabbitMQRelationAdapter(OpenStackRelationAdapter):
|
||||||
|
@ -116,7 +116,8 @@ class DatabaseRelationAdapter(OpenStackRelationAdapter):
|
||||||
if self.ssl_ca:
|
if self.ssl_ca:
|
||||||
uri = '{}?ssl_ca={}'.format(uri, self.ssl_ca)
|
uri = '{}?ssl_ca={}'.format(uri, self.ssl_ca)
|
||||||
if self.ssl_cert:
|
if self.ssl_cert:
|
||||||
uri = '{}&ssl_cert={}&ssl_key={}'.format(uri, self.ssl_cert,
|
uri = '{}&ssl_cert={}&ssl_key={}'.format(uri,
|
||||||
|
self.ssl_cert,
|
||||||
self.ssl_key)
|
self.ssl_key)
|
||||||
return uri
|
return uri
|
||||||
|
|
||||||
|
@ -135,7 +136,7 @@ class ConfigurationAdapter(object):
|
||||||
_config = hookenv.config()
|
_config = hookenv.config()
|
||||||
for k, v in _config.items():
|
for k, v in _config.items():
|
||||||
k = k.replace('-', '_')
|
k = k.replace('-', '_')
|
||||||
self.__dict__[k] = v
|
setattr(self, k, v)
|
||||||
|
|
||||||
|
|
||||||
class OpenStackRelationAdapters(object):
|
class OpenStackRelationAdapters(object):
|
||||||
|
@ -172,16 +173,13 @@ class OpenStackRelationAdapters(object):
|
||||||
self._relations = []
|
self._relations = []
|
||||||
for relation in relations:
|
for relation in relations:
|
||||||
relation_name = relation.relation_name.replace('-', '_')
|
relation_name = relation.relation_name.replace('-', '_')
|
||||||
if relation_name in self._adapters:
|
try:
|
||||||
self.__dict__[relation_name] = (
|
relation_value = self._adapters[relation_name](relation)
|
||||||
self._adapters[relation_name](relation)
|
except KeyError:
|
||||||
)
|
relation_value = OpenStackRelationAdapter(relation)
|
||||||
else:
|
setattr(self, relation_name, relation_value)
|
||||||
self.__dict__[relation_name] = (
|
|
||||||
OpenStackRelationAdapter(relation)
|
|
||||||
)
|
|
||||||
self._relations.append(relation_name)
|
self._relations.append(relation_name)
|
||||||
self.__dict__['options'] = options()
|
self.options = options()
|
||||||
self._relations.append('options')
|
self._relations.append('options')
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
|
@ -189,4 +187,4 @@ class OpenStackRelationAdapters(object):
|
||||||
Iterate over the relations presented to the charm.
|
Iterate over the relations presented to the charm.
|
||||||
"""
|
"""
|
||||||
for relation in self._relations:
|
for relation in self._relations:
|
||||||
yield relation, self.__dict__[relation]
|
yield relation, getattr(self, relation)
|
||||||
|
|
|
@ -16,7 +16,7 @@ PUBLIC = 'public'
|
||||||
INTERNAL = 'int'
|
INTERNAL = 'int'
|
||||||
ADMIN = 'admin'
|
ADMIN = 'admin'
|
||||||
|
|
||||||
_address_map = {
|
_ADDRESS_MAP = {
|
||||||
PUBLIC: {
|
PUBLIC: {
|
||||||
'config': 'os-public-network',
|
'config': 'os-public-network',
|
||||||
'fallback': 'public-address'
|
'fallback': 'public-address'
|
||||||
|
@ -47,28 +47,28 @@ def canonical_url(endpoint_type=PUBLIC):
|
||||||
address = resolve_address(endpoint_type)
|
address = resolve_address(endpoint_type)
|
||||||
if is_ipv6(address):
|
if is_ipv6(address):
|
||||||
address = "[{}]".format(address)
|
address = "[{}]".format(address)
|
||||||
return '%s://%s' % (scheme, address)
|
return "{0}://{1}".format(scheme, address)
|
||||||
|
|
||||||
|
|
||||||
def resolve_address(endpoint_type=PUBLIC):
|
def resolve_address(endpoint_type=PUBLIC):
|
||||||
resolved_address = None
|
resolved_address = None
|
||||||
if is_clustered():
|
if is_clustered():
|
||||||
if config(_address_map[endpoint_type]['config']) is None:
|
if config(_ADDRESS_MAP[endpoint_type]['config']) is None:
|
||||||
# Assume vip is simple and pass back directly
|
# Assume vip is simple and pass back directly
|
||||||
resolved_address = config('vip')
|
resolved_address = config('vip')
|
||||||
else:
|
else:
|
||||||
for vip in config('vip').split():
|
for vip in config('vip').split():
|
||||||
if is_address_in_network(
|
if is_address_in_network(
|
||||||
config(_address_map[endpoint_type]['config']),
|
config(_ADDRESS_MAP[endpoint_type]['config']),
|
||||||
vip):
|
vip):
|
||||||
resolved_address = vip
|
resolved_address = vip
|
||||||
else:
|
else:
|
||||||
if config('prefer-ipv6'):
|
if config('prefer-ipv6'):
|
||||||
fallback_addr = get_ipv6_addr(exc_list=[config('vip')])[0]
|
fallback_addr = get_ipv6_addr(exc_list=[config('vip')])[0]
|
||||||
else:
|
else:
|
||||||
fallback_addr = unit_get(_address_map[endpoint_type]['fallback'])
|
fallback_addr = unit_get(_ADDRESS_MAP[endpoint_type]['fallback'])
|
||||||
resolved_address = get_address_in_network(
|
resolved_address = get_address_in_network(
|
||||||
config(_address_map[endpoint_type]['config']), fallback_addr)
|
config(_ADDRESS_MAP[endpoint_type]['config']), fallback_addr)
|
||||||
|
|
||||||
if resolved_address is None:
|
if resolved_address is None:
|
||||||
raise ValueError('Unable to resolve a suitable IP address'
|
raise ValueError('Unable to resolve a suitable IP address'
|
||||||
|
|
Loading…
Reference in New Issue