--- /dev/null
+"""\r
+\r
+"""\r
+from sla.slaclient import wsag_model\r
+import json\r
+import dateutil.parser\r
+from sla.slaclient.templates.fed4fire.fed4fire import AgreementInput\r
+from sla.slaclient.templates.fed4fire.fed4fire import TemplateInput\r
+\r
+\r
+def templateinput_from_json(json_data):\r
+ """Creates a TemplateInput from json data.\r
+\r
+ :rtype: TemplateInput\r
+\r
+ An example input is:\r
+ {\r
+ "agreement_id" : "agreement-id"\r
+ "agreement_name" : "agreement-name",\r
+ "template_id" : "template-id",\r
+ "provider" : "provider",\r
+ "service_id" : "service-id",\r
+ "expiration_time" : "2014-03-28T13:55:00Z",\r
+ "service_properties" : [\r
+ {\r
+ "name" : "uptime",\r
+ "servicename" : "service-a",\r
+ "metric" : "xs:double",\r
+ "location" : "//service-a/uptime"\r
+ }\r
+ ]\r
+ }\r
+ """\r
+ d = json.loads(json_data)\r
+ if "expiration_time" in d:\r
+ d["expiration_time"] = dateutil.parser.parse(d["expiration_time"])\r
+\r
+ t = TemplateInput(\r
+ template_id=d.get("template_id", None),\r
+ template_name=d.get("template_name", None),\r
+ provider=d.get("provider", None),\r
+ service_id=d.get("service_id"),\r
+ expiration_time=d.get("expiration_time", None),\r
+ service_properties=_json_parse_service_properties(d)\r
+ )\r
+ return t\r
+\r
+\r
+def agreementinput_from_json(json_data):\r
+ """Creates an AgreementInput from json data.\r
+\r
+ :rtype: AgreementInput\r
+\r
+ An example input is:\r
+ {\r
+ "agreement_id" : "agreement-id"\r
+ "agreement_name" : "agreement-name",\r
+ "template_id" : "template-id",\r
+ "consumer" : "consumer",\r
+ "provider" : "provider",\r
+ "service_id" : "service-id",\r
+ "expiration_time" : "2014-03-28T13:55:00Z",\r
+ "guarantees": [\r
+ {\r
+ "name" : "uptime",\r
+ "bounds" : [ "0", "1" ]\r
+ }\r
+ ]\r
+ }\r
+ """\r
+ d = json.loads(json_data)\r
+ if "expiration_time" in d:\r
+ d["expiration_time"] = dateutil.parser.parse(d["expiration_time"])\r
+\r
+ t = AgreementInput(\r
+ agreement_id=d.get("agreement_id", None),\r
+ agreement_name=d.get("agreement_name", None),\r
+ template_id=d.get("template_id", None),\r
+ consumer=d.get("consumer", None),\r
+ provider=d.get("provider", None),\r
+ service_id=d.get("service_id"),\r
+ expiration_time=d.get("expiration_time", None),\r
+ service_properties=_json_parse_service_properties(d),\r
+ guarantee_terms=_json_parse_guarantee_terms(d)\r
+ )\r
+ return t\r
+\r
+\r
+def _json_parse_service_properties(d):\r
+ """Parse service properties in a json and translates to Property.\r
+ :type d: dict(str, str)\r
+ :rtype: list(wsag_model.Agreement.Property)\r
+ """\r
+ result = []\r
+ for sp in d.get("service_properties", None) or ():\r
+ result.append(\r
+ wsag_model.Agreement.Property(\r
+ servicename=sp.get("servicename", None),\r
+ name=sp.get("name", None),\r
+ metric=sp.get("metric", None),\r
+ location=sp.get("location", None)\r
+ )\r
+ )\r
+ return result\r
+\r
+\r
+def _json_parse_guarantee_terms(d):\r
+ """Parse guarantee terms in a son and translates to GuaranteeTerm.\r
+ :type d: dict(str, str)\r
+ :rtype: list(wsag_model.AgreementInput.GuaranteeTerm)\r
+ """\r
+ result = []\r
+ for term in d.get("guarantees", None) or ():\r
+ result.append(\r
+ AgreementInput.GuaranteeTerm(\r
+ metric_name=term["name"],\r
+ bounds=tuple(term["bounds"])\r
+ )\r
+ )\r
+ return result
\ No newline at end of file