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:
gnuoy 2016-05-09 03:03:15 -05:00
commit ee3ed44e23
2 changed files with 24 additions and 26 deletions

View File

@ -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)

View File

@ -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'