Updated code to work with SLA-Collector module (local instance)
[unfold.git] / sla / slaclient / service / fed4fire / jsonparser.py
1 """\r
2 \r
3 """\r
4 from sla.slaclient import wsag_model\r
5 import json\r
6 import dateutil.parser\r
7 from sla.slaclient.templates.fed4fire.fed4fire import AgreementInput\r
8 from sla.slaclient.templates.fed4fire.fed4fire import TemplateInput\r
9 \r
10 \r
11 def templateinput_from_json(json_data):\r
12     """Creates a TemplateInput from json data.\r
13 \r
14     :rtype: TemplateInput\r
15 \r
16     An example input is:\r
17     {\r
18         "agreement_id" : "agreement-id"\r
19         "agreement_name" : "agreement-name",\r
20         "template_id" : "template-id",\r
21         "provider" : "provider",\r
22         "service_id" : "service-id",\r
23         "expiration_time" : "2014-03-28T13:55:00Z",\r
24         "service_properties" : [\r
25             {\r
26                 "name" : "uptime",\r
27                 "servicename" : "service-a",\r
28                 "metric" : "xs:double",\r
29                 "location" : "//service-a/uptime"\r
30             }\r
31         ]\r
32     }\r
33     """\r
34     d = json.loads(json_data)\r
35     if "expiration_time" in d:\r
36         d["expiration_time"] = dateutil.parser.parse(d["expiration_time"])\r
37 \r
38     t = TemplateInput(\r
39         template_id=d.get("template_id", None),\r
40         template_name=d.get("template_name", None),\r
41         provider=d.get("provider", None),\r
42         service_id=d.get("service_id"),\r
43         expiration_time=d.get("expiration_time", None),\r
44         service_properties=_json_parse_service_properties(d)\r
45     )\r
46     return t\r
47 \r
48 \r
49 def agreementinput_from_json(json_data):\r
50     """Creates an AgreementInput from json data.\r
51 \r
52     :rtype: AgreementInput\r
53 \r
54     An example input is:\r
55     {\r
56         "agreement_id" : "agreement-id"\r
57         "agreement_name" : "agreement-name",\r
58         "template_id" : "template-id",\r
59         "consumer" : "consumer",\r
60         "provider" : "provider",\r
61         "service_id" : "service-id",\r
62         "expiration_time" : "2014-03-28T13:55:00Z",\r
63         "guarantees": [\r
64             {\r
65                 "name" : "uptime",\r
66                 "bounds" : [ "0", "1" ]\r
67             }\r
68         ]\r
69     }\r
70     """\r
71     d = json.loads(json_data)\r
72 \r
73     t = AgreementInput(\r
74         agreement_id=d.get("agreement_id", None),\r
75         agreement_name=d.get("agreement_name", None),\r
76         template_id=d.get("template_id", None),\r
77         consumer=d.get("consumer", None),\r
78         provider=d.get("provider", None),\r
79         service_id=d.get("service_id"),\r
80         expiration_time=d.get("expiration_time", None),\r
81         service_properties=_json_parse_service_properties(d),\r
82         guarantee_terms=_json_parse_guarantee_terms(d)\r
83     )\r
84     return t\r
85 \r
86 \r
87 def _json_parse_service_properties(d):\r
88     """Parse service properties in a json and translates to Property.\r
89     :type d: dict(str, str)\r
90     :rtype: list(wsag_model.Agreement.Property)\r
91     """\r
92     result = []\r
93     for sp in d.get("service_properties", None) or ():\r
94         result.append(\r
95             wsag_model.Agreement.Property(\r
96                 servicename=sp.get("servicename", None),\r
97                 name=sp.get("name", None),\r
98                 metric=sp.get("metric", None),\r
99                 location=sp.get("location", None)\r
100             )\r
101         )\r
102     return result\r
103 \r
104 \r
105 def _json_parse_guarantee_terms(d):\r
106     """Parse guarantee terms in a son and translates to GuaranteeTerm.\r
107     :type d: dict(str, str)\r
108     :rtype: list(wsag_model.AgreementInput.GuaranteeTerm)\r
109     """\r
110     result = []\r
111     for term in d.get("guarantees", None) or ():\r
112         result.append(\r
113             AgreementInput.GuaranteeTerm(\r
114                 metric_name=term["name"],\r
115                 bounds=tuple(term["bounds"])\r
116             )\r
117         )\r
118     return result