SLA and Service Directory code added
[unfold.git] / sla / slaclient / templates / fed4fire / django / factory.py
1 """Django implementation of the templating needed in Fed4FIRE.\r
2 """\r
3 import pkgutil\r
4 import django.template\r
5 from django.conf import settings\r
6 import sla.slaclient\r
7 \r
8 #\r
9 # Package where to read the template files\r
10 #\r
11 _package = "sla.slaclient.templates.fed4fire.django"\r
12 \r
13 #\r
14 # Filename of the sla-agreement template\r
15 #\r
16 _AGREEMENT_FILENAME = "agreement.xml"\r
17 \r
18 #\r
19 # Filename of the sla-template template\r
20 #\r
21 _TEMPLATE_FILENAME = "template.xml"\r
22 \r
23 \r
24 class Factory(object):\r
25 \r
26     def __init__(self):\r
27         self.slaagreement_tpl = None\r
28         self.slatemplate_tpl = None\r
29 \r
30     def _lazy_init(self):\r
31         if not settings.configured:\r
32             settings.configure()\r
33 \r
34     @staticmethod\r
35     def _read(filename):\r
36         string = pkgutil.get_data(_package, filename)\r
37         return string\r
38 \r
39     def _get_agreement_tpl(self):\r
40         self._lazy_init()\r
41         if self.slaagreement_tpl is None:\r
42             self.slaagreement_tpl = Factory._read(_AGREEMENT_FILENAME)\r
43         return self.slaagreement_tpl\r
44 \r
45     def _get_template_tpl(self):\r
46         self._lazy_init()\r
47         if self.slatemplate_tpl is None:\r
48             self.slatemplate_tpl = Factory._read(_TEMPLATE_FILENAME)\r
49         return self.slatemplate_tpl\r
50 \r
51     def slaagreement(self):\r
52         tpl = self._get_agreement_tpl()\r
53         result = Template(tpl)\r
54         return result\r
55 \r
56     def slatemplate(self):\r
57         tpl = self._get_template_tpl()\r
58         result = Template(tpl)\r
59         return result\r
60 \r
61 \r
62 class Template(sla.slaclient.templates.Template):\r
63 \r
64     def __init__(self, string):\r
65         self.impl = django.template.Template(string)\r
66 \r
67     def render(self, data):\r
68         context = django.template.Context(dict(data=data))\r
69         result = self.impl.render(context)\r
70         return result\r