diff options
| author | Paul Everitt <paul@agendaless.com> | 2008-07-24 17:14:16 +0000 |
|---|---|---|
| committer | Paul Everitt <paul@agendaless.com> | 2008-07-24 17:14:16 +0000 |
| commit | 1a7b14de4bc89ef0fd162ef8e62d01926e42b54e (patch) | |
| tree | 8d9ccc8187ac29eb80ac310c6f82c17d548cdf54 /docs/tutorials/lxmlgraph/step02/myapp | |
| parent | c1a6ef6f751a16b7a352bc3fdad13d4b5b73f212 (diff) | |
| download | pyramid-1a7b14de4bc89ef0fd162ef8e62d01926e42b54e.tar.gz pyramid-1a7b14de4bc89ef0fd162ef8e62d01926e42b54e.tar.bz2 pyramid-1a7b14de4bc89ef0fd162ef8e62d01926e42b54e.zip | |
Add tutorial sections
Diffstat (limited to 'docs/tutorials/lxmlgraph/step02/myapp')
5 files changed, 66 insertions, 0 deletions
diff --git a/docs/tutorials/lxmlgraph/step02/myapp/__init__.py b/docs/tutorials/lxmlgraph/step02/myapp/__init__.py new file mode 100644 index 000000000..792d60054 --- /dev/null +++ b/docs/tutorials/lxmlgraph/step02/myapp/__init__.py @@ -0,0 +1 @@ +# diff --git a/docs/tutorials/lxmlgraph/step02/myapp/configure.zcml b/docs/tutorials/lxmlgraph/step02/myapp/configure.zcml new file mode 100644 index 000000000..540526ec9 --- /dev/null +++ b/docs/tutorials/lxmlgraph/step02/myapp/configure.zcml @@ -0,0 +1,11 @@ +<configure xmlns="http://namespaces.zope.org/zope" + xmlns:bfg="http://namespaces.repoze.org/bfg"> + + <include package="repoze.bfg" /> + + <bfg:view + for=".models.IMyModel" + view=".views.my_hello_view" + /> + +</configure> diff --git a/docs/tutorials/lxmlgraph/step02/myapp/models.py b/docs/tutorials/lxmlgraph/step02/myapp/models.py new file mode 100644 index 000000000..3c03de1a9 --- /dev/null +++ b/docs/tutorials/lxmlgraph/step02/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/step02/myapp/samplemodel.xml b/docs/tutorials/lxmlgraph/step02/myapp/samplemodel.xml new file mode 100644 index 000000000..83678e5e9 --- /dev/null +++ b/docs/tutorials/lxmlgraph/step02/myapp/samplemodel.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<site> + <document name="a"/> + <document name="b"/> +</site> diff --git a/docs/tutorials/lxmlgraph/step02/myapp/views.py b/docs/tutorials/lxmlgraph/step02/myapp/views.py new file mode 100644 index 000000000..205b4b163 --- /dev/null +++ b/docs/tutorials/lxmlgraph/step02/myapp/views.py @@ -0,0 +1,8 @@ +from webob import Response + +def my_hello_view(context, request): + response = Response('Hello to %s from %s @ %s' % ( + context.tag, + context.__name__, + request.environ['PATH_INFO'])) + return response |
