"""REST client to SLA Manager.
-Contains a generic rest client and wrappers over this generic client
+Contains a generic rest client and wrappers over this generic client
for each resource.
Each resource client implements business-like() functions, but
returns a tuple (output, requests.Response)
-The resource clients are initialized with the rooturl and a path, which
+The resource clients are initialized with the rooturl and a path, which
are combined to build the resource url. The path is defaulted to the known
resource path. So, for example, to create a agreements client:
"""
-_PROVIDERS_PATH = "providerso"
-_AGREEMENTS_PATH = "agreementso"
-_TEMPLATES_PATH = "templateso"
-_VIOLATIONS_PATH = "violationso"
+_PROVIDERS_PATH = "providers"
+_AGREEMENTS_PATH = "agreements"
+_TEMPLATES_PATH = "templates"
+_VIOLATIONS_PATH = "violations"
_ENFORCEMENTJOBS_PATH = "enforcements"
rooturl = settings.SLA_MANAGER_URL
-# SLA_MANAGER_USER = "normal_user"
-# SLA_MANAGER_PASSWORD = "password"
class Factory(object):
@staticmethod
def agreements():
- """Returns aREST client for Agreements
+ """Returns a REST client for Agreements
:rtype : Agreements
"""
@staticmethod
def providers():
- """Returns aREST client for Providers
+ """Returns a REST client for Providers
:rtype : Providers
"""
@staticmethod
def violations():
- """Returns aREST client for Violations
+ """Returns a REST client for Violations
:rtype : Violations
"""
@staticmethod
def templates():
- """Returns aREST client for Violations
+ """Returns a REST client for Violations
:rtype : Violations
"""
@staticmethod
def enforcements():
- """Returns aREST client for Enforcements jobs
+ """Returns a REST client for Enforcements jobs
:rtype : Enforcements
"""
return Enforcements(rooturl)
+
class Client(object):
def __init__(self, root_url):
Returns a requests.Response
:rtype : request.Response
- :param str path: remaining path from root url;
+ :param str path: remaining path from root url;
empty if desired path equal to rooturl.
:param kwargs: arguments to requests.get
-
- Example:
+
+ Example:
c = Client("http://localhost:8080/service")
c.get("/resource", headers = { "accept": "application/json" })
"""
url = _buildpath_(self.rooturl, path)
- kwargs["auth"] = HTTPBasicAuth(settings.SLA_MANAGER_USER, settings.SLA_MANAGER_PASSWORD)
+ url = url + "?testbed=iminds" # TODO remove hardcoded string
+ #kwargs['params']['testbed'] = 'iminds'
+
+ if "headers" not in kwargs:
+ kwargs["headers"] = {"accept": "application/xml"}
+ # kwargs["auth"] = HTTPBasicAuth(settings.SLA_MANAGER_USER,
+ # settings.SLA_MANAGER_PASSWORD)
result = requests.get(url, **kwargs)
- print "GET {} {} {}".format(
- result.url, result.status_code, result.text[0:70])
+ #print "GET {} {} {}".format(
+ # result.url, result.status_code, result.text[0:70])
return result
-
+
def post(self, path, data=None, **kwargs):
"""Just a wrapper over request.post, just in case
)
"""
url = _buildpath_(self.rooturl, path)
- kwargs["auth"] = HTTPBasicAuth(settings.SLA_MANAGER_USER, settings.SLA_MANAGER_PASSWORD)
+ url = url + "?testbed=iminds" # TODO remove hardcoded string
+ # kwargs["auth"] = HTTPBasicAuth(settings.SLA_MANAGER_USER,
+ # settings.SLA_MANAGER_PASSWORD)
+ if "headers" not in kwargs:
+ kwargs = {"accept": "application/xml",
+ "content-type": "application/xml"}
result = requests.post(url, data, **kwargs)
location = result.headers["location"] \
if "location" in result.headers else "<null>"
result.url, result.status_code, location)
return result
-
class _Resource(object):
content_type = r.headers.get('content-type', '')
- print("content-type = " + content_type)
+ #print("content-type = " + content_type)
if content_type == 'application/json':
result = r.json()
elif content_type == 'application/xml':
r = self.res.client.get(path, headers={'accept': 'application/json'})
json_obj = r.json()
-
+
status = wsag_model.AgreementStatus.json_decode(json_obj)
return status, r
-
+
def create(self, agreement):
"""Create a new agreement
"""
return self.res.create(agreement)
+
class Templates(object):
def __init__(self, root_url, path=_TEMPLATES_PATH):
"""
self.res.create(template)
+
class Providers(object):
def __init__(self, root_url, path=_PROVIDERS_PATH):
body = provider.to_xml()
return self.res.create(body)
+
class Violations(object):
def __init__(self, root_url, path=_VIOLATIONS_PATH):
violations from all terms will be returned
:rtype: list[wsag_model.Violation]
"""
+
return self.res.get(
{"agreementId": agreement_id, "guaranteeTerm": term})
"""Get the enforcement of an agreement.
:param str agreement_id:
-
+
:rtype: list[wsag_model.Enforcement]
"""
- return self.res.getbyid(agreement_id)
+ return self.res.getbyid(agreement_id)
def _buildpath_(*paths):
#
global rooturl
rooturl = "http://127.0.0.1:8080/sla-service"
-
c = Factory.templates()
#r = c.getall()
#r = c.getbyconsumer('RandomClient')
r = c.getbyid("template02")
-
print r
if __name__ == "__main__":
main()
-
-