SLA and Service Directory code added
[myslice.git] / sla / slaclient / service / fed4fire / jsonparser.py
diff --git a/sla/slaclient/service/fed4fire/jsonparser.py b/sla/slaclient/service/fed4fire/jsonparser.py
new file mode 100755 (executable)
index 0000000..3dc8fca
--- /dev/null
@@ -0,0 +1,120 @@
+"""\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