SLA and Service Directory code added
[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     if "expiration_time" in d:\r
73         d["expiration_time"] = dateutil.parser.parse(d["expiration_time"])\r
74 \r
75     t = AgreementInput(\r
76         agreement_id=d.get("agreement_id", None),\r
77         agreement_name=d.get("agreement_name", None),\r
78         template_id=d.get("template_id", None),\r
79         consumer=d.get("consumer", None),\r
80         provider=d.get("provider", None),\r
81         service_id=d.get("service_id"),\r
82         expiration_time=d.get("expiration_time", None),\r
83         service_properties=_json_parse_service_properties(d),\r
84         guarantee_terms=_json_parse_guarantee_terms(d)\r
85     )\r
86     return t\r
87 \r
88 \r
89 def _json_parse_service_properties(d):\r
90     """Parse service properties in a json and translates to Property.\r
91     :type d: dict(str, str)\r
92     :rtype: list(wsag_model.Agreement.Property)\r
93     """\r
94     result = []\r
95     for sp in d.get("service_properties", None) or ():\r
96         result.append(\r
97             wsag_model.Agreement.Property(\r
98                 servicename=sp.get("servicename", None),\r
99                 name=sp.get("name", None),\r
100                 metric=sp.get("metric", None),\r
101                 location=sp.get("location", None)\r
102             )\r
103         )\r
104     return result\r
105 \r
106 \r
107 def _json_parse_guarantee_terms(d):\r
108     """Parse guarantee terms in a son and translates to GuaranteeTerm.\r
109     :type d: dict(str, str)\r
110     :rtype: list(wsag_model.AgreementInput.GuaranteeTerm)\r
111     """\r
112     result = []\r
113     for term in d.get("guarantees", None) or ():\r
114         result.append(\r
115             AgreementInput.GuaranteeTerm(\r
116                 metric_name=term["name"],\r
117                 bounds=tuple(term["bounds"])\r
118             )\r
119         )\r
120     return result