aboutsummaryrefslogtreecommitdiffstats
path: root/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/web/_element.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/web/_element.py')
-rwxr-xr-xlib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/web/_element.py185
1 files changed, 0 insertions, 185 deletions
diff --git a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/web/_element.py b/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/web/_element.py
deleted file mode 100755
index 3c15b3b4..00000000
--- a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/web/_element.py
+++ /dev/null
@@ -1,185 +0,0 @@
-# -*- test-case-name: twisted.web.test.test_template -*-
-# Copyright (c) Twisted Matrix Laboratories.
-# See LICENSE for details.
-
-from zope.interface import implements
-
-from twisted.web.iweb import IRenderable
-
-from twisted.web.error import MissingRenderMethod, UnexposedMethodError
-from twisted.web.error import MissingTemplateLoader
-
-
-class Expose(object):
- """
- Helper for exposing methods for various uses using a simple decorator-style
- callable.
-
- Instances of this class can be called with one or more functions as
- positional arguments. The names of these functions will be added to a list
- on the class object of which they are methods.
-
- @ivar attributeName: The attribute with which exposed methods will be
- tracked.
- """
- def __init__(self, doc=None):
- self.doc = doc
-
-
- def __call__(self, *funcObjs):
- """
- Add one or more functions to the set of exposed functions.
-
- This is a way to declare something about a class definition, similar to
- L{zope.interface.implements}. Use it like this::
-
- magic = Expose('perform extra magic')
- class Foo(Bar):
- def twiddle(self, x, y):
- ...
- def frob(self, a, b):
- ...
- magic(twiddle, frob)
-
- Later you can query the object::
-
- aFoo = Foo()
- magic.get(aFoo, 'twiddle')(x=1, y=2)
-
- The call to C{get} will fail if the name it is given has not been
- exposed using C{magic}.
-
- @param funcObjs: One or more function objects which will be exposed to
- the client.
-
- @return: The first of C{funcObjs}.
- """
- if not funcObjs:
- raise TypeError("expose() takes at least 1 argument (0 given)")
- for fObj in funcObjs:
- fObj.exposedThrough = getattr(fObj, 'exposedThrough', [])
- fObj.exposedThrough.append(self)
- return funcObjs[0]
-
-
- _nodefault = object()
- def get(self, instance, methodName, default=_nodefault):
- """
- Retrieve an exposed method with the given name from the given instance.
-
- @raise UnexposedMethodError: Raised if C{default} is not specified and
- there is no exposed method with the given name.
-
- @return: A callable object for the named method assigned to the given
- instance.
- """
- method = getattr(instance, methodName, None)
- exposedThrough = getattr(method, 'exposedThrough', [])
- if self not in exposedThrough:
- if default is self._nodefault:
- raise UnexposedMethodError(self, methodName)
- return default
- return method
-
-
- @classmethod
- def _withDocumentation(cls, thunk):
- """
- Slight hack to make users of this class appear to have a docstring to
- documentation generators, by defining them with a decorator. (This hack
- should be removed when epydoc can be convinced to use some other method
- for documenting.)
- """
- return cls(thunk.__doc__)
-
-
-# Avoid exposing the ugly, private classmethod name in the docs. Luckily this
-# namespace is private already so this doesn't leak further.
-exposer = Expose._withDocumentation
-
-@exposer
-def renderer():
- """
- Decorate with L{renderer} to use methods as template render directives.
-
- For example::
-
- class Foo(Element):
- @renderer
- def twiddle(self, request, tag):
- return tag('Hello, world.')
-
- <div xmlns:t="http://twistedmatrix.com/ns/twisted.web.template/0.1">
- <span t:render="twiddle" />
- </div>
-
- Will result in this final output::
-
- <div>
- <span>Hello, world.</span>
- </div>
- """
-
-
-
-class Element(object):
- """
- Base for classes which can render part of a page.
-
- An Element is a renderer that can be embedded in a stan document and can
- hook its template (from the loader) up to render methods.
-
- An Element might be used to encapsulate the rendering of a complex piece of
- data which is to be displayed in multiple different contexts. The Element
- allows the rendering logic to be easily re-used in different ways.
-
- Element returns render methods which are registered using
- L{twisted.web.element.renderer}. For example::
-
- class Menu(Element):
- @renderer
- def items(self, request, tag):
- ....
-
- Render methods are invoked with two arguments: first, the
- L{twisted.web.http.Request} being served and second, the tag object which
- "invoked" the render method.
-
- @type loader: L{ITemplateLoader} provider
- @ivar loader: The factory which will be used to load documents to
- return from C{render}.
- """
- implements(IRenderable)
- loader = None
-
- def __init__(self, loader=None):
- if loader is not None:
- self.loader = loader
-
-
- def lookupRenderMethod(self, name):
- """
- Look up and return the named render method.
- """
- method = renderer.get(self, name, None)
- if method is None:
- raise MissingRenderMethod(self, name)
- return method
-
-
- def render(self, request):
- """
- Implement L{IRenderable} to allow one L{Element} to be embedded in
- another's template or rendering output.
-
- (This will simply load the template from the C{loader}; when used in a
- template, the flattening engine will keep track of this object
- separately as the object to lookup renderers on and call
- L{Element.renderer} to look them up. The resulting object from this
- method is not directly associated with this L{Element}.)
- """
- loader = self.loader
- if loader is None:
- raise MissingTemplateLoader(self)
- return loader.load()
-