diff --git a/python_apps/api_clients/api_client.py b/python_apps/api_clients/api_client.py index f2b87e010..110ce7f34 100644 --- a/python_apps/api_clients/api_client.py +++ b/python_apps/api_clients/api_client.py @@ -62,7 +62,7 @@ class ApcUrl(object): api_client.cfg""" def __init__(self, base_url): self.base_url = base_url - def params(self, params): + def params(self, **params): temp_url = self.base_url for k, v in params.iteritems(): wrapped_param = "%%" + k + "%%" @@ -75,13 +75,37 @@ class ApcUrl(object): if '%%' in self.base_url: raise IncompleteUrl(self.base_url) else: return self.base_url -# Change baseclass to Loggable from mm2 to enable logging -class ApiClient(object): +def ApiRequest(object): + def __init__(self, name, url): + self.name = name + self.url = url + def __call__(self, **kwargs): + final_url = self.url.params(**kwargs).url() + response = urllib2.urlopen(final_url).read() + return response + +def RequestProvider(object): + """ Creates the available ApiRequest instance that can be read from + a config file """ def __init__(self, cfg): self.config = cfg - self.url = "http://%s:%s/%s/%s/%s" \ + self.requests = {} + self.url = ApcUrl("http://%s:%s/%s/%s/%s" \ % (self.config["host"], str(self.config["base_port"]), - self.config["base_dir"], self.config["api_base"],) + self.config["base_dir"], self.config["api_base"], + '%%action%%')) + # Now we must discover the possible actions + actions = dict( (k,v) for k,v in cfg.iteritems() if '%%api_key%%' in v) + for action_name, action_value in actions.iteritems(): + new_url = self.url.params(action=action_value) + self.requests[action_name] = new_url + + def available_requests(self): return self.requests.keys + def __contains__(self, request): return request in self.requests + + def __getattr__(self, attr): + if attr in self: return self.requests[attr] + else: return super(RequestProvider, self).__getattribute__(attr) class AirtimeApiClient(object):