summaryrefslogtreecommitdiffstats
path: root/ipa_webui
diff options
context:
space:
mode:
Diffstat (limited to 'ipa_webui')
-rw-r--r--ipa_webui/__init__.py24
-rw-r--r--ipa_webui/controller.py71
-rw-r--r--ipa_webui/templates/__init__.py21
-rw-r--r--ipa_webui/templates/form.kid16
-rw-r--r--ipa_webui/templates/main.kid14
-rw-r--r--ipa_webui/tests/__init__.py21
-rw-r--r--ipa_webui/tests/test_controllers.py70
7 files changed, 237 insertions, 0 deletions
diff --git a/ipa_webui/__init__.py b/ipa_webui/__init__.py
new file mode 100644
index 00000000..d0b43301
--- /dev/null
+++ b/ipa_webui/__init__.py
@@ -0,0 +1,24 @@
+# Authors: Jason Gerard DeRose <jderose@redhat.com>
+#
+# Copyright (C) 2008 Red Hat
+# see file 'COPYING' for use and warranty information
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; version 2 only
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+"""
+IPA web-based user interface.
+"""
+
+import kid
+kid.enable_import()
diff --git a/ipa_webui/controller.py b/ipa_webui/controller.py
new file mode 100644
index 00000000..a2a270cb
--- /dev/null
+++ b/ipa_webui/controller.py
@@ -0,0 +1,71 @@
+# Authors: Jason Gerard DeRose <jderose@redhat.com>
+#
+# Copyright (C) 2008 Red Hat
+# see file 'COPYING' for use and warranty information
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; version 2 only
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+"""
+Controller classes.
+"""
+
+import simplejson
+from ipalib.plugable import ReadOnly, lock
+
+
+class Controller(ReadOnly):
+ exposed = True
+
+ def __init__(self, template=None):
+ self.template = template
+ lock(self)
+
+ def output_xhtml(self, **kw):
+ return self.template.serialize(
+ output='xhtml-strict',
+ format='pretty',
+ **kw
+ )
+
+ def output_json(self, **kw):
+ return simplejson.dumps(kw, sort_keys=True, indent=4)
+
+ def __call__(self, **kw):
+ json = bool(kw.pop('_format', None) == 'json')
+ result = self.run(**kw)
+ assert type(result) is dict
+ if json or self.template is None:
+ return self.output_json(**result)
+ return self.output_xhtml(**result)
+
+ def run(self, **kw):
+ return {}
+
+
+class Command(Controller):
+ def __init__(self, command, template=None):
+ self.command = command
+ super(Command, self).__init__(template)
+
+ def run(self, **kw):
+ return dict(command=self.command)
+
+
+class Index(Controller):
+ def __init__(self, api, template=None):
+ self.api = api
+ super(Index, self).__init__(template)
+
+ def run(self):
+ return dict(api=self.api)
diff --git a/ipa_webui/templates/__init__.py b/ipa_webui/templates/__init__.py
new file mode 100644
index 00000000..710dbb2e
--- /dev/null
+++ b/ipa_webui/templates/__init__.py
@@ -0,0 +1,21 @@
+# Authors: Jason Gerard DeRose <jderose@redhat.com>
+#
+# Copyright (C) 2008 Red Hat
+# see file 'COPYING' for use and warranty information
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; version 2 only
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+"""
+Kid templates.
+"""
diff --git a/ipa_webui/templates/form.kid b/ipa_webui/templates/form.kid
new file mode 100644
index 00000000..64015700
--- /dev/null
+++ b/ipa_webui/templates/form.kid
@@ -0,0 +1,16 @@
+<?xml version='1.0' encoding='utf-8'?>
+<html xmlns:py="http://purl.org/kid/ns#">
+
+<head>
+ <title>Hello</title>
+</head>
+
+<body>
+ <table>
+ <tr py:for="param in command.params()">
+ <td py:content="param.name"/>
+ </tr>
+ </table>
+</body>
+
+</html>
diff --git a/ipa_webui/templates/main.kid b/ipa_webui/templates/main.kid
new file mode 100644
index 00000000..692f2b57
--- /dev/null
+++ b/ipa_webui/templates/main.kid
@@ -0,0 +1,14 @@
+<?xml version='1.0' encoding='utf-8'?>
+<html xmlns:py="http://purl.org/kid/ns#">
+
+<head>
+ <title>FreeIPA</title>
+</head>
+
+<body>
+ <p py:for="name in api.Command">
+ <a href="${name}" py:content="name"/>
+ </p>
+</body>
+
+</html>
diff --git a/ipa_webui/tests/__init__.py b/ipa_webui/tests/__init__.py
new file mode 100644
index 00000000..c0647132
--- /dev/null
+++ b/ipa_webui/tests/__init__.py
@@ -0,0 +1,21 @@
+# Authors: Jason Gerard DeRose <jderose@redhat.com>
+#
+# Copyright (C) 2008 Red Hat
+# see file 'COPYING' for use and warranty information
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; version 2 only
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+"""
+Test the `ipa_webui` package.
+"""
diff --git a/ipa_webui/tests/test_controllers.py b/ipa_webui/tests/test_controllers.py
new file mode 100644
index 00000000..f5944dd9
--- /dev/null
+++ b/ipa_webui/tests/test_controllers.py
@@ -0,0 +1,70 @@
+# Authors: Jason Gerard DeRose <jderose@redhat.com>
+#
+# Copyright (C) 2008 Red Hat
+# see file 'COPYING' for use and warranty information
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; version 2 only
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+"""
+Test the `ipa_webui.controller` module.
+"""
+
+from ipa_webui import controller
+
+
+
+class test_Controller(object):
+ """
+ Test the `controller.Controller` class.
+ """
+
+ def test_init(self):
+ """
+ Test the `ipa_webui.controller.Controller.__init__()` method.
+ """
+ o = controller.Controller()
+ assert o.template is None
+ template = 'The template.'
+ o = controller.Controller(template)
+ assert o.template is template
+
+ def test_output_xhtml(self):
+ """
+ Test the `ipa_webui.controller.Controller.output_xhtml` method.
+ """
+ class Template(object):
+ def __init__(self):
+ self.calls = 0
+ self.kw = {}
+
+ def serialize(self, **kw):
+ self.calls += 1
+ self.kw = kw
+ return dict(kw)
+
+ d = dict(output='xhtml-strict', format='pretty')
+ t = Template()
+ o = controller.Controller(t)
+ assert o.output_xhtml() == d
+ assert t.calls == 1
+
+ def test_output_json(self):
+ """
+ Test the `ipa_webui.controller.Controller.output_json` method.
+ """
+ o = controller.Controller()
+ assert o.output_json() == '{}'
+ e = '{\n "age": 27, \n "first": "John", \n "last": "Doe"\n}'
+ j = o.output_json(last='Doe', first='John', age=27)
+ assert j == e