diff options
author | Tommy Carpenter <tommy@research.att.com> | 2018-03-05 11:25:44 -0500 |
---|---|---|
committer | Tommy Carpenter <tommy@research.att.com> | 2018-03-05 11:34:03 -0500 |
commit | 914d8ccb42befc04ec5b759dd84b242591bb5e91 (patch) | |
tree | 8a309014aece91b2afbcd5c7b4c3f4160c584d5c /config_binding_service | |
parent | 16841e4acee2cc31558bdaf618d68e4349c06168 (diff) |
Enforce most pep8 compliance in tox
Also fix some pep8 failings
Change-Id: I6904c171c898d510ac2b7e2435b5a80dcdf1be13
Issue-ID: DCAEGEN2-348
Signed-off-by: Tommy Carpenter <tommy@research.att.com>
Diffstat (limited to 'config_binding_service')
-rw-r--r-- | config_binding_service/__init__.py | 10 | ||||
-rw-r--r-- | config_binding_service/client.py | 48 | ||||
-rw-r--r-- | config_binding_service/controller.py | 9 |
3 files changed, 42 insertions, 25 deletions
diff --git a/config_binding_service/__init__.py b/config_binding_service/__init__.py index 5f09f1e..2835511 100644 --- a/config_binding_service/__init__.py +++ b/config_binding_service/__init__.py @@ -19,7 +19,7 @@ import os import logging -'''Configures the module root logger''' +# Configures the module root logger root = logging.getLogger() if root.handlers: root.handlers.clear() @@ -29,13 +29,19 @@ handler.setFormatter(formatter) root.addHandler(handler) root.setLevel("DEBUG") + class BadEnviornmentENVNotFound(Exception): + """ + Specific exception to be raised when a required ENV varaible is missing + """ pass + def get_logger(module=None): '''Returns a module-specific logger or global logger if the module is None''' return root if module is None else root.getChild(module) + def get_consul_uri(): """ This method waterfalls reads an envioronmental variable called CONSUL_HOST @@ -48,5 +54,3 @@ def get_consul_uri(): return "http://{0}:{1}".format(os.environ["CONSUL_HOST"], 8500) else: raise BadEnviornmentENVNotFound("CONSUL_HOST") - - diff --git a/config_binding_service/client.py b/config_binding_service/client.py index 8facf35..2c04684 100644 --- a/config_binding_service/client.py +++ b/config_binding_service/client.py @@ -40,6 +40,7 @@ class CantGetConfig(Exception): """ Represents an exception where a required key in consul isn't there """ + def __init__(self, code, response): self.code = code self.response = response @@ -49,6 +50,7 @@ class BadRequest(Exception): """ Exception to be raised when the user tried to do something they shouldn't """ + def __init__(self, response): self.code = 400 self.response = response @@ -84,7 +86,8 @@ def _consul_get_all_as_transaction(service_component_name): new_res = {} for res in result: key = res["KV"]["Key"] - new_res[key] = json.loads(base64.b64decode(res["KV"]["Value"]).decode("utf-8")) + new_res[key] = json.loads(base64.b64decode( + res["KV"]["Value"]).decode("utf-8")) if service_component_name not in new_res: raise CantGetConfig(404, "") @@ -108,18 +111,23 @@ def _get_connection_info_from_consul(service_component_name): TODO: WARNING: FIXTHIS: CALLINTHENATIONALARMY: This tries to determine that a service_component_name is a cdap application by inspecting service_component_name and name munging. However, this would force all CDAP applications to have cdap_app in their name. A much better way to do this is to do some kind of catalog_lookup here, OR MAYBE change this API so that the component_type is passed in somehow. THis is a gaping TODO. """ - _logger.info("Retrieving connection information for {0}".format(service_component_name)) - res = requests.get("{0}/v1/catalog/service/{1}".format(CONSUL, service_component_name)) + _logger.info("Retrieving connection information for {0}".format( + service_component_name)) + res = requests.get( + "{0}/v1/catalog/service/{1}".format(CONSUL, service_component_name)) res.raise_for_status() services = res.json() if services == []: - _logger.info("Warning: config and rels keys were both valid, but there is no component named {0} registered in Consul!".format(service_component_name)) - return None #later will get filtered out + _logger.info("Warning: config and rels keys were both valid, but there is no component named {0} registered in Consul!".format( + service_component_name)) + return None # later will get filtered out ip_addr = services[0]["ServiceAddress"] port = services[0]["ServicePort"] if "cdap_app" in service_component_name: - redirectish_url = "http://{0}:{1}/application/{2}".format(ip_addr, port, service_component_name) - _logger.info("component is a CDAP application; trying the broker redirect on {0}".format(redirectish_url)) + redirectish_url = "http://{0}:{1}/application/{2}".format( + ip_addr, port, service_component_name) + _logger.info("component is a CDAP application; trying the broker redirect on {0}".format( + redirectish_url)) res = requests.get(redirectish_url) res.raise_for_status() details = res.json() @@ -138,7 +146,7 @@ def _replace_rels_template(rels, template_identifier): for rel in rels: if template_identifier in rel and template_identifier is not "": returnl.append(rel) - #returnl now contains a list of DNS names (possible empty), now resolve them (or not if they are not regustered) + # returnl now contains a list of DNS names (possible empty), now resolve them (or not if they are not regustered) return list(filter(lambda x: x is not None, map(_get_connection_info_from_consul, returnl))) @@ -159,10 +167,11 @@ def _replace_value(v, rels, dmaap): - the split below sees if we have v = x,y,z... so we can support {{x,y,z,....}} - the lambda is because we can't fold operators in Python, wanted fold(+, L) where + when applied to lists in python is list concatenation """ - if isinstance(v, six.string_types): #do not try to replace anything that is not a string + if isinstance(v, six.string_types): # do not try to replace anything that is not a string match_on_rels = re.match(template_match_rels, v) if match_on_rels: - template_identifier = match_on_rels.groups()[0].strip() #now holds just x,.. of {{x,...}} + # now holds just x,.. of {{x,...}} + template_identifier = match_on_rels.groups()[0].strip() rtpartial = partial(_replace_rels_template, rels) return reduce(lambda a, b: a + b, map(rtpartial, template_identifier.split(",")), []) match_on_dmaap = re.match(template_match_dmaap, v) @@ -176,7 +185,7 @@ def _replace_value(v, rels, dmaap): So now component developers have to possible handle dicts and [], and we have to communicate that to them """ return _replace_dmaap_template(dmaap, template_identifier) - return v #was not a match or was not a string, return value as is + return v # was not a match or was not a string, return value as is def _recurse(config, rels, dmaap): @@ -195,7 +204,7 @@ def _recurse(config, rels, dmaap): return config if isinstance(config, six.string_types): return _replace_value(config, rels, dmaap) - #not a dict, not a list, not a string, nothing to do. + # not a dict, not a list, not a string, nothing to do. return config @@ -217,7 +226,7 @@ def resolve_override(config, rels=[], dmaap={}): Explicitly take in a config, rels, dmaap and try to resolve it. Useful for testing where you dont want to put the test values in consul """ - #use deepcopy to make sure that config is not touched + # use deepcopy to make sure that config is not touched return _recurse(copy.deepcopy(config), rels, dmaap) @@ -228,10 +237,10 @@ def resolve_all(service_component_name): allk = _consul_get_all_as_transaction(service_component_name) returnk = {} - #replace the config with the resolved config + # replace the config with the resolved config returnk["config"] = resolve(service_component_name) - #concatenate the items + # concatenate the items for k in allk: if "policies" in k: if "policies" not in returnk: @@ -245,7 +254,8 @@ def resolve_all(service_component_name): returnk["policies"]["items"].append(allk[k]) else: if not(k == service_component_name or k.endswith(":rels") or k.endswith(":dmaap")): - suffix = k.split(":")[1] #this would blow up if you had a key in consul without a : but this shouldnt happen + # this would blow up if you had a key in consul without a : but this shouldnt happen + suffix = k.split(":")[1] returnk[suffix] = allk[k] return returnk @@ -256,8 +266,10 @@ def get_key(key, service_component_name): Try to fetch a key k from Consul of the form service_component_name:k """ if key == "policies": - raise BadRequest(":policies is a complex folder and should be retrieved using the service_component_all API") - response = requests.get("{0}/v1/kv/{1}:{2}".format(CONSUL, service_component_name, key)) + raise BadRequest( + ":policies is a complex folder and should be retrieved using the service_component_all API") + response = requests.get( + "{0}/v1/kv/{1}:{2}".format(CONSUL, service_component_name, key)) try: response.raise_for_status() except requests.exceptions.HTTPError as exc: diff --git a/config_binding_service/controller.py b/config_binding_service/controller.py index dbdb57b..7bb5f51 100644 --- a/config_binding_service/controller.py +++ b/config_binding_service/controller.py @@ -48,7 +48,7 @@ def bind_config_for_scn(service_component_name): except client.CantGetConfig as e: return Response(status=e.code, response=e.response) - except Exception as e: #should never happen... + except Exception as e: # should never happen... _logger.error(e) return Response(response="Please report this error", status=500) @@ -67,16 +67,17 @@ def get_key(key, service_component_name): return Response(status=exc.code, response=exc.response, mimetype="text/plain") - except Exception as e: #should never happen... + except Exception as e: # should never happen... _logger.error(e) return Response(response="Please report this error", status=500) def healthcheck(): - #got this far, I must be alive... check my connection to Consul by checking myself + # got this far, I must be alive... check my connection to Consul by checking myself CONSUL = get_consul_uri() - res = requests.get("{0}/v1/catalog/service/config_binding_service".format(CONSUL)) + res = requests.get( + "{0}/v1/catalog/service/config_binding_service".format(CONSUL)) if res.status_code == 200: return Response(response="CBS is alive and Consul connection OK", status=200) |