From 1a7b14de4bc89ef0fd162ef8e62d01926e42b54e Mon Sep 17 00:00:00 2001 From: Paul Everitt Date: Thu, 24 Jul 2008 17:14:16 +0000 Subject: Add tutorial sections --- docs/tutorials/lxmlgraph/step04/myapp/__init__.py | 1 + .../lxmlgraph/step04/myapp/configure.zcml | 11 ++++ docs/tutorials/lxmlgraph/step04/myapp/models.py | 41 +++++++++++++ .../lxmlgraph/step04/myapp/samplemodel.xml | 44 ++++++++++++++ docs/tutorials/lxmlgraph/step04/myapp/views.py | 13 ++++ docs/tutorials/lxmlgraph/step04/myapp/xsltview.xsl | 69 ++++++++++++++++++++++ docs/tutorials/lxmlgraph/step04/run.py | 8 +++ 7 files changed, 187 insertions(+) create mode 100644 docs/tutorials/lxmlgraph/step04/myapp/__init__.py create mode 100644 docs/tutorials/lxmlgraph/step04/myapp/configure.zcml create mode 100644 docs/tutorials/lxmlgraph/step04/myapp/models.py create mode 100644 docs/tutorials/lxmlgraph/step04/myapp/samplemodel.xml create mode 100644 docs/tutorials/lxmlgraph/step04/myapp/views.py create mode 100644 docs/tutorials/lxmlgraph/step04/myapp/xsltview.xsl create mode 100644 docs/tutorials/lxmlgraph/step04/run.py (limited to 'docs/tutorials/lxmlgraph/step04') diff --git a/docs/tutorials/lxmlgraph/step04/myapp/__init__.py b/docs/tutorials/lxmlgraph/step04/myapp/__init__.py new file mode 100644 index 000000000..792d60054 --- /dev/null +++ b/docs/tutorials/lxmlgraph/step04/myapp/__init__.py @@ -0,0 +1 @@ +# diff --git a/docs/tutorials/lxmlgraph/step04/myapp/configure.zcml b/docs/tutorials/lxmlgraph/step04/myapp/configure.zcml new file mode 100644 index 000000000..1ba4c9155 --- /dev/null +++ b/docs/tutorials/lxmlgraph/step04/myapp/configure.zcml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/docs/tutorials/lxmlgraph/step04/myapp/models.py b/docs/tutorials/lxmlgraph/step04/myapp/models.py new file mode 100644 index 000000000..3c03de1a9 --- /dev/null +++ b/docs/tutorials/lxmlgraph/step04/myapp/models.py @@ -0,0 +1,41 @@ +from zope.interface import implements +from zope.interface import Attribute +from zope.interface import Interface +from lxml import etree + +class IMyModel(Interface): + __name__ = Attribute('Name of the model instance') + +class BfgElement(etree.ElementBase): + """Handle access control and getitem behavior""" + + implements(IMyModel) + + @property + def __name__(self): + return self.xpath("@name")[0] + + def __getitem__(self, child_name): + xp = "*[@name='%s']" % child_name + matches = self.xpath(xp) + if len(matches) == 0: + raise KeyError('No child found for %s' % child_name) + elif len(matches) > 1: + raise KeyError('More than one child for %s' % child_name) + else: + return matches[0] + +def get_root(environ): + # Setup the custom parser with our BfgElement behavior + parser_lookup = etree.ElementDefaultClassLookup(element=BfgElement) + parser = etree.XMLParser() + parser.set_element_class_lookup(parser_lookup) + + # Now load the XML file + xmlstring = open("myapp/samplemodel.xml").read() + root = etree.XML(xmlstring, parser) + + return root + + + diff --git a/docs/tutorials/lxmlgraph/step04/myapp/samplemodel.xml b/docs/tutorials/lxmlgraph/step04/myapp/samplemodel.xml new file mode 100644 index 000000000..36ab335d2 --- /dev/null +++ b/docs/tutorials/lxmlgraph/step04/myapp/samplemodel.xml @@ -0,0 +1,44 @@ + + + My XMLGRAPH Website + + Site Home Page + +
+

Welcome to the site. We have lots to say.

+

Or, maybe not.

+
+ +
+ + Folder One + + doc1 in folder1 + +
+

I am in an HTML div so I can do LOTS of + formatting.

+
+ +
+ + doc2 in folder1 + +
+

Keep this on one line.

+
+ +
+
+ + The Second Folder + + doc1 in folder2 + +
+

This is a special folder. It's folder 2!

+
+ +
+
+
diff --git a/docs/tutorials/lxmlgraph/step04/myapp/views.py b/docs/tutorials/lxmlgraph/step04/myapp/views.py new file mode 100644 index 000000000..fd8650e14 --- /dev/null +++ b/docs/tutorials/lxmlgraph/step04/myapp/views.py @@ -0,0 +1,13 @@ +from repoze.bfg.template import render_transform_to_response + +# Some constants +XML_NAMESPACE='http://www.w3.org/XML/1998/namespace' +XML_PREFIX= '{%s}' % XML_NAMESPACE + +def xslt_view(context, request): + # Grab the root of the tree, which should be a + site = context.getroottree().getroot() + # Jot down which node we're sitting on as the + contextid = "'%s'" % context.get(XML_PREFIX+'id') + return render_transform_to_response("xsltview.xsl", site, + contextid=contextid) diff --git a/docs/tutorials/lxmlgraph/step04/myapp/xsltview.xsl b/docs/tutorials/lxmlgraph/step04/myapp/xsltview.xsl new file mode 100644 index 000000000..2406987d0 --- /dev/null +++ b/docs/tutorials/lxmlgraph/step04/myapp/xsltview.xsl @@ -0,0 +1,69 @@ + + + n1 + + + + + + <xsl:value-of select="$contextnode/title"/> + + + +

+ +

+ + + + + + + + + + + + + + + + +
Type@xml:id@nameParent TypeParent @name
+ + + + + + + + + +
+ + +
+ +

+ Folders are special, they contain things. +

+ +

Folder Contents

+ +
+
+ +

+ Documents contain text. +

+ +
+
diff --git a/docs/tutorials/lxmlgraph/step04/run.py b/docs/tutorials/lxmlgraph/step04/run.py new file mode 100644 index 000000000..1eac209dc --- /dev/null +++ b/docs/tutorials/lxmlgraph/step04/run.py @@ -0,0 +1,8 @@ +from paste import httpserver + +from repoze.bfg import make_app +from myapp.models import get_root +import myapp + +app = make_app(get_root, myapp) +httpserver.serve(app, host='0.0.0.0', port='5432') -- cgit v1.2.3