[Zope3-checkins] SVN: Zope3/branches/ZopeX3-3.0/src/zope/app/
Refactored xmlrpc:
Jim Fulton
jim at zope.com
Fri Aug 27 10:28:21 EDT 2004
Log message for revision 27290:
Refactored xmlrpc:
- Made it possible to define xml-rpc methods on content. This made the
"default view" mechanism unnecessary.
- Removed the default-view mechanism. This is backward incompatable,
but it's better to do this now, rather than after X3.0.
This allowed the custom publication object to basically go away.
- Added documentation in the form of a doctest.
Changed:
U Zope3/branches/ZopeX3-3.0/src/zope/app/i18n/xmlrpc/configure.zcml
U Zope3/branches/ZopeX3-3.0/src/zope/app/publication/tests/test_xmlrpcpublication.py
U Zope3/branches/ZopeX3-3.0/src/zope/app/publication/xmlrpc.py
A Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/README.txt
U Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/__init__.py
A Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/ftests.py
U Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/meta.zcml
U Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/metaconfigure.py
U Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/metadirectives.py
A Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/t
U Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/tests/test_directives.py
U Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/tests/xmlrpc.zcml
U Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/tests/xmlrpc_error.zcml
-=-
Modified: Zope3/branches/ZopeX3-3.0/src/zope/app/i18n/xmlrpc/configure.zcml
===================================================================
--- Zope3/branches/ZopeX3-3.0/src/zope/app/i18n/xmlrpc/configure.zcml 2004-08-27 14:28:18 UTC (rev 27289)
+++ Zope3/branches/ZopeX3-3.0/src/zope/app/i18n/xmlrpc/configure.zcml 2004-08-27 14:28:21 UTC (rev 27290)
@@ -6,15 +6,11 @@
<!-- Translation Domain View Directives -->
<xmlrpc:view
- name="methods"
for="zope.i18n.interfaces.ITranslationDomain"
permission="zope.ManageContent"
- allowed_attributes="getAllLanguages getMessagesFor"
- class=".methods.Methods" />
+ methods="getAllLanguages getMessagesFor"
+ class=".methods.Methods"
+ />
- <xmlrpc:defaultView
- name="methods"
- for="zope.i18n.interfaces.ITranslationDomain" />
-
</configure>
Modified: Zope3/branches/ZopeX3-3.0/src/zope/app/publication/tests/test_xmlrpcpublication.py
===================================================================
--- Zope3/branches/ZopeX3-3.0/src/zope/app/publication/tests/test_xmlrpcpublication.py 2004-08-27 14:28:18 UTC (rev 27289)
+++ Zope3/branches/ZopeX3-3.0/src/zope/app/publication/tests/test_xmlrpcpublication.py 2004-08-27 14:28:21 UTC (rev 27290)
@@ -30,6 +30,7 @@
from zope.publisher.interfaces.xmlrpc import IXMLRPCRequest
from zope.publisher.interfaces.xmlrpc import IXMLRPCPublisher
from zope.publisher.xmlrpc import TestRequest
+from zope.app.tests import ztapi
class SimpleObject(object):
@@ -99,6 +100,14 @@
pass
implements(IXMLRPCPresentation)
+
+ # Register the simple traverser so we can traverse without @@
+ from zope.publisher.interfaces.xmlrpc import IXMLRPCPublisher
+ from zope.publisher.interfaces.xmlrpc import IXMLRPCRequest
+ from zope.app.publication.traversers import SimpleComponentTraverser
+ ztapi.provideView(Interface, IXMLRPCRequest, IXMLRPCPublisher, '',
+ SimpleComponentTraverser)
+
r = self._createRequest('/@@spam', pub)
provideView = getService(Presentation).provideView
provideView(I, 'spam', IXMLRPCRequest, V)
@@ -109,39 +118,6 @@
self.assertEqual(removeAllProxies(ob2).__class__, V)
- def testTraverseNameDefaultView(self):
- pub = self.klass(self.db)
-
- class I(Interface):
- pass
-
- class C(object):
- implements(I)
-
- ob = C()
-
- class V(object):
- implements(IXMLRPCPresentation)
-
- def __init__(self, context, request):
- pass
-
- def spam(self):
- return 'foo'
-
- r = self._createRequest('/spam', pub)
- provideView = getService(Presentation).provideView
- setDefaultViewName = getService(Presentation).setDefaultViewName
- provideView(I, 'view', IXMLRPCRequest, V)
- setDefaultViewName(I, IXMLRPCRequest, 'view')
-
- ob2 = pub.traverseName(r, ob, '@@spam')
- self.assertEqual(removeAllProxies(ob2).__name__, V.spam.__name__)
-
- ob2 = pub.traverseName(r, ob, 'spam')
- self.assertEqual(removeAllProxies(ob2).__name__, V.spam.__name__)
-
-
def testTraverseNameServices(self):
pub = self.klass(self.db)
class C(object):
Modified: Zope3/branches/ZopeX3-3.0/src/zope/app/publication/xmlrpc.py
===================================================================
--- Zope3/branches/ZopeX3-3.0/src/zope/app/publication/xmlrpc.py 2004-08-27 14:28:18 UTC (rev 27289)
+++ Zope3/branches/ZopeX3-3.0/src/zope/app/publication/xmlrpc.py 2004-08-27 14:28:21 UTC (rev 27290)
@@ -17,65 +17,17 @@
$Id$
"""
+
+from zope.app import zapi
from zope.component import queryView, queryDefaultViewName
from zope.proxy import removeAllProxies
from zope.app.publisher.interfaces.xmlrpc import IXMLRPCPresentation
from zope.security.checker import ProxyFactory
from zope.app.publication.http import BaseHTTPPublication
-class XMLRPCPublication(BaseHTTPPublication):
- """XML-RPC publication handling."""
+# Don't need any special handling for xml-rpc
+XMLRPCPublication = BaseHTTPPublication
- def traverseName(self, request, ob, name):
- """Traverse the name.
-
- The method should try the following things in this order:
-
- 1. Check whether ob is a view; if so try to find a public method
- having the passed name.
-
- 2. If the ob is not a view, then we try to find a view for it. This
- can be done in two ways:
-
- (a) Look whether there is a view registered for this name.
-
- (b) Check whether the default view has a matching method called name.
-
- 3. See whether the object has a subobject of this name. This test is
- done last, since this is done by ZopePublication, and it knows how
- to create all the correct error messages. No need for us to do that.
-
- """
- naked_ob = removeAllProxies(ob)
-
- # Use the real view name
- view_name = name
- if view_name.startswith('@@'):
- view_name = view_name[2:]
-
- # If ob is a presentation object, then we just get the method
- if (IXMLRPCPresentation.providedBy(naked_ob) and
- hasattr(ob, view_name)
- ):
- return ProxyFactory(getattr(ob, view_name))
-
- # Let's check whether name could be a view
- view = queryView(ob, view_name, request)
- if view is not None:
- return ProxyFactory(view)
-
- # Now let's see whether we have a default view with a matching method
- # name
- defaultName = queryDefaultViewName(ob, request)
-
- if defaultName is not None:
- view = queryView(ob, defaultName, request, object)
- if hasattr(view, view_name):
- return ProxyFactory(getattr(view, view_name))
-
- # See whether we have a subobject
- return super(XMLRPCPublication, self).traverseName(request, ob, name)
-
# For now, have a factory that returns a singleton
class XMLRPCPublicationFactory(object):
Added: Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/README.txt
===================================================================
--- Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/README.txt 2004-08-27 14:28:18 UTC (rev 27289)
+++ Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/README.txt 2004-08-27 14:28:21 UTC (rev 27290)
@@ -0,0 +1,136 @@
+XML-RPC views
+=============
+
+There are two ways to write XML-RPV views. You can write views that
+provide "methods" for other objects, and you can write views that have
+their own methods. Let's look at the former case first, since it's a
+little bit simpler.
+
+Let's write a view that returns a folder listing:
+
+ >>> class FolderListing:
+ ... def __init__(self, context, request):
+ ... self.context = context
+ ... self.request = request
+ ...
+ ... def contents(self):
+ ... return list(self.context.keys())
+
+Now we'll register it as a view:
+
+ >>> from zope.configuration import xmlconfig
+ >>> ignored = xmlconfig.string("""
+ ... <configure
+ ... xmlns="http://namespaces.zope.org/zope"
+ ... xmlns:xmlrpc="http://namespaces.zope.org/xmlrpc"
+ ... >
+ ... <!-- We only need to do this include in this example,
+ ... Normally the include has already been done for us. -->
+ ... <include package="zope.app.publisher.xmlrpc" file="meta.zcml" />
+ ...
+ ... <xmlrpc:view
+ ... for="zope.app.folder.folder.IFolder"
+ ... methods="contents"
+ ... class="zope.app.publisher.xmlrpc.README.FolderListing"
+ ... permission="zope.ManageContent"
+ ... />
+ ... </configure>
+ ... """)
+
+Now, we'll add some items to the root folder:
+
+ >>> print http(r"""
+ ... POST /++skin++Debug/@@contents.html HTTP/1.1
+ ... Authorization: Basic bWdyOm1ncnB3
+ ... Content-Length: 73
+ ... Content-Type: application/x-www-form-urlencoded
+ ...
+ ... type_name=zope.app.browser.add.zope.app.folder.folder.Folder&new_value=f1"""
+ ... , handle_errors=False)
+ HTTP/1.1 303 See Other
+ ...
+
+ >>> print http(r"""
+ ... POST /@@contents.html HTTP/1.1
+ ... Authorization: Basic bWdyOm1ncnB3
+ ... Content-Length: 73
+ ... Content-Type: application/x-www-form-urlencoded
+ ...
+ ... type_name=zope.app.browser.add.zope.app.folder.folder.Folder&new_value=f2""")
+ HTTP/1.1 303 See Other
+ ...
+
+And call our xmlrpc method:
+
+ >>> print http(r"""
+ ... POST / HTTP/1.0
+ ... Authorization: Basic bWdyOm1ncnB3
+ ... Content-Length: 102
+ ... Content-Type: text/xml
+ ...
+ ... <?xml version='1.0'?>
+ ... <methodCall>
+ ... <methodName>contents</methodName>
+ ... <params>
+ ... </params>
+ ... </methodCall>
+ ... """)
+ HTTP/1.0 200 Ok
+ Content-Length: 208
+ Content-Type: text/xml;charset=utf-8
+ <BLANKLINE>
+ <?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><array><data>
+ <value><string>f1</string></value>
+ <value><string>f2</string></value>
+ </data></array></value>
+ </param>
+ </params>
+ </methodResponse>
+ <BLANKLINE>
+
+
+Note that we get an unauthorized error if we don't supply authentication
+credentials:
+
+ >>> print http(r"""
+ ... POST / HTTP/1.0
+ ... Content-Length: 102
+ ... Content-Type: text/xml
+ ...
+ ... <?xml version='1.0'?>
+ ... <methodCall>
+ ... <methodName>contents</methodName>
+ ... <params>
+ ... </params>
+ ... </methodCall>
+ ... """)
+ HTTP/1.0 401 Unauthorized
+ Content-Length: 126
+ Content-Type: text/xml;charset=utf-8
+ Www-Authenticate: basic realm='Zope'
+ <BLANKLINE>
+ <?xml version='1.0'?>
+ <methodResponse>
+ <params>
+ <param>
+ <value><string></string></value>
+ </param>
+ </params>
+ </methodResponse>
+ <BLANKLINE>
+
+
+Now let's look at views that have their own methods. Views that have
+their own methods have names that appear in URLs and they get
+traversed to get to their methods, as in::
+
+ .../somefolder/listing/contents
+
+To make this possible, the view has to support traversal, so that,
+when it is traversed, it traverses to it's attributes.
+
+XXX: need to finish
Property changes on: Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/README.txt
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/__init__.py
===================================================================
--- Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/__init__.py 2004-08-27 14:28:18 UTC (rev 27289)
+++ Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/__init__.py 2004-08-27 14:28:21 UTC (rev 27290)
@@ -28,3 +28,4 @@
def __init__(self, context, request):
self.context = context
self.request = request
+
Added: Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/ftests.py
===================================================================
--- Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/ftests.py 2004-08-27 14:28:18 UTC (rev 27289)
+++ Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/ftests.py 2004-08-27 14:28:21 UTC (rev 27290)
@@ -0,0 +1,54 @@
+##############################################################################
+#
+# Copyright (c) 2004 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Functional tests for xmlrpc
+
+$Id$
+"""
+import sys
+
+# Evil hack to make pickling work with classes defined in doc tests
+class NoCopyDict(dict):
+ def copy(self):
+ return self
+
+class FakeModule:
+ def __init__(self, dict):
+ self.__dict = dict
+ def __getattr__(self, name):
+ try:
+ return self.__dict[name]
+ except KeyError:
+ raise AttributeError, name
+
+globs = NoCopyDict()
+name = 'zope.app.publisher.xmlrpc.README'
+
+
+def setUp():
+ globs['__name__'] = name
+ sys.modules[name] = FakeModule(globs)
+
+def tearDown():
+ globs.clear()
+ del sys.modules[name]
+
+def test_suite():
+ from zope.app.tests.functional import FunctionalDocFileSuite
+ return FunctionalDocFileSuite(
+ 'README.txt',
+ setUp=setUp, tearDown=tearDown, globs=globs)
+
+if __name__ == '__main__':
+ import unittest
+ unittest.main(defaultTest='test_suite')
Property changes on: Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/ftests.py
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
Modified: Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/meta.zcml
===================================================================
--- Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/meta.zcml 2004-08-27 14:28:18 UTC (rev 27289)
+++ Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/meta.zcml 2004-08-27 14:28:21 UTC (rev 27290)
@@ -8,10 +8,4 @@
schema=".metadirectives.IViewDirective"
handler=".metaconfigure.view" />
- <meta:directive
- namespace="http://namespaces.zope.org/xmlrpc"
- name="defaultView"
- schema=".metadirectives.IDefaultViewDirective"
- handler=".metaconfigure.defaultView" />
-
</configure>
Modified: Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/metaconfigure.py
===================================================================
--- Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/metaconfigure.py 2004-08-27 14:28:18 UTC (rev 27289)
+++ Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/metaconfigure.py 2004-08-27 14:28:21 UTC (rev 27290)
@@ -17,78 +17,108 @@
"""
from zope.component.servicenames import Presentation
+from zope.configuration.exceptions import ConfigurationError
from zope.app.component.metaconfigure import handler
-from zope.configuration.exceptions import ConfigurationError
+import zope.interface
+
from zope.publisher.interfaces.xmlrpc import IXMLRPCRequest
from zope.security.checker import CheckerPublic, Checker
from zope.app.component.interface import provideInterface
+import zope.app.location
-def view(_context, name, class_=None, for_=None, layer=None,
- permission=None, allowed_interface=None, allowed_attributes=None):
-
- if layer is not None:
- raise ConfigurationError("Layers are not supported for XML-RPC.")
+def view(_context, for_=None, interface=None, methods=None,
+ class_=None, permission=None, name=None):
- if name is None:
- raise ConfigurationError("You must specify a view name.")
-
- if ((allowed_attributes or allowed_interface)
- and ((name is None) or not permission)):
- raise ConfigurationError(
- "Must use name attribute with allowed_interface or "
- "allowed_attributes"
- )
-
- allowed_interface = allowed_interface or []
- allowed_attributes = allowed_attributes or []
+ interface = interface or []
+ methods = methods or []
# If there were special permission settings provided, then use them
- if permission:
- if permission == 'zope.Public':
- permission = CheckerPublic
-
- require = {}
- for attr_name in allowed_attributes:
- require[attr_name] = permission
-
- if allowed_interface:
- for iface in allowed_interface:
- for field_name in iface:
- require[field_name] = permission
-
- checker = Checker(require)
-
- def proxyView(context, request, class_=class_, checker=checker):
- view = class_(context, request)
- # We need this in case the resource gets unwrapped and
- # needs to be rewrapped
- view.__Security_checker__ = checker
- return view
-
- class_ = proxyView
+ if permission == 'zope.Public':
+ permission = CheckerPublic
- # Register the new view.
- _context.action(
- discriminator = ('view', tuple(for_), name, IXMLRPCRequest),
- callable = handler,
- args = (Presentation, 'provideAdapter', IXMLRPCRequest, class_,
- name, for_) )
+ require = {}
+ for attr_name in methods:
+ require[attr_name] = permission
- # Register the used interfaces with the interface service
- for iface in for_:
- if iface is not None:
+ if interface:
+ for iface in interface:
+ for field_name in iface:
+ require[field_name] = permission
_context.action(
discriminator = None,
callable = provideInterface,
- args = ('', iface)
+ args = ('', for_)
)
+
+ if name:
+ # Register a single view
+ if permission:
+ checker = Checker(require)
-def defaultView(_context, name, for_=None):
- """Declare the view having the passed name as the default view."""
- _context.action(
- discriminator = ('defaultViewName', for_, IXMLRPCRequest, name),
- callable = handler,
- args = (Presentation, 'setDefaultViewName', for_, IXMLRPCRequest, name)
- )
+ def proxyView(context, request, class_=class_, checker=checker):
+ view = class_(context, request)
+ # We need this in case the resource gets unwrapped and
+ # needs to be rewrapped
+ view.__Security_checker__ = checker
+ return view
+
+ class_ = proxyView
+
+ # Register the new view.
+ _context.action(
+ discriminator = ('view', for_, name, IXMLRPCRequest),
+ callable = handler,
+ args = (Presentation, 'provideAdapter', IXMLRPCRequest, class_,
+ name, (for_, )) )
+ else:
+ if permission:
+ checker = Checker({'__call__': permission})
+ else:
+ checker = None
+
+ for name in require:
+ _context.action(
+ discriminator = ('view', for_, name, IXMLRPCRequest),
+ callable = handler,
+ args = (Presentation, 'provideAdapter', IXMLRPCRequest,
+ MethodFactory(class_, name, checker),
+ name, (for_, )) )
+
+ # Register the used interfaces with the interface service
+ if for_ is not None:
+ _context.action(
+ discriminator = None,
+ callable = provideInterface,
+ args = ('', for_)
+ )
+
+
+
+class MethodFactory:
+
+ def __init__(self, cls, name, checker):
+ self.cls, self.name, self.checker = cls, name, checker
+
+ def __call__(self, context, request):
+ ob = self.cls(context, request)
+ ob = getattr(ob, self.name)
+ if self.checker is not None:
+ ob = ProtectedMethod(ob, self.checker)
+ return ob
+
+
+class ProtectedMethod:
+
+ zope.interface.implements(zope.app.location.ILocation)
+
+ __parent__ = __name__ = None
+
+ def __init__(self, ob, checker):
+ self.ob = ob
+ self.__Security_checker__ = checker
+
+ def __call__(self, *args):
+ return self.ob(*args)
+
Modified: Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/metadirectives.py
===================================================================
--- Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/metadirectives.py 2004-08-27 14:28:18 UTC (rev 27289)
+++ Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/metadirectives.py 2004-08-27 14:28:21 UTC (rev 27290)
@@ -15,42 +15,73 @@
$Id$
"""
-from zope.app.component.metadirectives import IBasicViewInformation
-from zope.configuration.fields import GlobalObject
-from zope.interface import Interface
-from zope.schema import TextLine
+import zope.configuration.fields
+import zope.interface
+import zope.schema
-class IViewDirective(IBasicViewInformation):
+import zope.app.security.fields
+
+class IViewDirective(zope.interface.Interface):
"""View Directive for XML-RPC methods."""
+
+ for_ = zope.configuration.fields.GlobalObject(
+ title=u"Published Object Type",
+ description=u"""The types of objects to be published via XML-RPC
- name = TextLine(
- title=u"The name of the view.",
- description=u"The name shows up in URLs/paths. For example 'foo'.",
- required=False)
+ This can be expressed with either a class or an interface
+ """,
+ required=True,
+ )
+ interface = zope.configuration.fields.Tokens(
+ title=u"Interface to be published.",
+ required=False,
+ value_type=zope.configuration.fields.GlobalObject()
+ )
-class IDefaultViewDirective(Interface):
- """
- The name of the view that should be the default.
-
- This name refers to view that should be the
- view used by default (if no view name is supplied
- explicitly).
- """
-
- name = TextLine(
- title=u"The name of the view that should be the default.",
- description=u"""
- This name refers to view that should be the view used by
- default (if no view name is supplied explicitly).""",
- required=True
+ methods = zope.configuration.fields.Tokens(
+ title=u"Methods (or attributes) to be published",
+ required=False,
+ value_type=zope.configuration.fields.PythonIdentifier()
)
- for_ = GlobalObject(
- title=u"The interface this view is the default for.",
- description=u"""Specifies the interface for which the view is
- registered. All objects implementing this interface can make use of
- this view. If this attribute is not specified, the view is available
- for all objects.""",
+ class_ = zope.configuration.fields.GlobalObject(
+ title=u"Class",
+ description=u"A class that provides attributes used by the view.",
required=False
)
+
+ permission = zope.app.security.fields.Permission(
+ title=u"Permission",
+ description=u"""The permission needed to use the view.
+
+ If this option is used and a name is given for the view, then
+ the names defined by the given methods or interfaces will be
+ under the given permission.
+
+ If a name is not given for the view, then, this option is
+ required and the the given permission is required to call the
+ individual views defined by the given interface and methods.
+
+ (See the name attribute.)
+
+ If no permission is given, then permissions should be declared
+ for the view using other means, such as the class directive.
+ """,
+ required=False, )
+
+ name = zope.schema.TextLine(
+ title=u"The name of the view.",
+ description=u"""
+
+ If a name is given, then rpc methods are accessed by
+ traversing the name and then accessing the methods. In this
+ case, the class should implement
+ zope.pubisher.interfaces.IPublishTraverse.
+
+ If no name is provided, then the names given by the attributes
+ and interfaces are published directly as callable views.
+
+ """,
+ required=False,
+ )
Added: Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/t
===================================================================
--- Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/t 2004-08-27 14:28:18 UTC (rev 27289)
+++ Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/t 2004-08-27 14:28:21 UTC (rev 27290)
@@ -0,0 +1,3597 @@
+
+
+ >>> print http(r"""
+ ... GET /manage HTTP/1.1
+ ... Authorization: Basic Z2xvYmFsbWdyOmdsb2JhbG1ncnB3
+ ... """)
+ HTTP/1.1 303 See Other
+ Connection: close
+ Content-Length: 0
+ Content-Type: text/plain;charset=utf-8
+ Location: @@contents.html
+ <BLANKLINE>
+
+
+ >>> print http(r"""
+ ... GET /@@contents.html HTTP/1.1
+ ... Authorization: Basic Z2xvYmFsbWdyOmdsb2JhbG1ncnB3
+ ... """)
+ HTTP/1.1 200 Ok
+ Connection: close
+ Content-Length: 6948
+ Content-Type: text/html;charset=utf-8
+ <BLANKLINE>
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <BLANKLINE>
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ lang="en">
+ <BLANKLINE>
+ <head>
+ <title>Z3: </title>
+ <BLANKLINE>
+ <style type="text/css" media="all">@import url(http://localhost:8081/@@/zope3.css);</style>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Popup script for the OnlineHelp -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/onlinehelp.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/xmltree.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <link rel="icon" type="image/png"
+ href="http://localhost:8081/@@/favicon.png" />
+ </head>
+ <BLANKLINE>
+ <body onload="loadtree('http://localhost:8081/', 'http://localhost:8081/')">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="global">
+ <div id="userDetails">
+ <BLANKLINE>
+ User:
+ Sample Manager
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@logout.html?nextURL=http%3A//localhost%3A8081/%40%40contents.html">[Logout]</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <img src="http://localhost:8081/@@/zope3logo.gif" />
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="navigators">
+ <BLANKLINE>
+ <!-- Navigation tree box -->
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <div class="box" id="navigationTree">
+ <h4>Navigation</h4>
+ <div xmlns="http://www.zope.org/zope3xmltree"
+ id="navtreecontents" class="body"
+ onclick="treeclicked(event);">Loading...</div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="box" id="commonTasks">
+ <BLANKLINE>
+ <BLANKLINE>
+ <h4>Add:</h4>
+ <div class="body">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="content even">
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="http://localhost:8081/@@+/action.html?type_name=zope.app.dtmlpage.DTMLPage"
+ class="">DTML Page</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="content odd">
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="http://localhost:8081/@@+/action.html?type_name=zope.app.file.File"
+ class="">File</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="content even">
+ <a href="http://localhost:8081/@@contents.html?type_name=zope.app.browser.add.zope.app.folder.folder.Folder"
+ class="">Folder</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="content odd">
+ <a href="http://localhost:8081/@@contents.html?type_name=zope.app.browser.add.zope.app.i18nfile.i18nfile.I18nFile"
+ class="">I18n File</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="content even">
+ <a href="http://localhost:8081/@@contents.html?type_name=zope.app.browser.add.zope.app.i18nfile.i18nimage.I18nImage"
+ class="">I18n Image</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="content odd">
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="http://localhost:8081/@@+/action.html?type_name=zope.app.file.Image"
+ class="">Image</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="content even">
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="http://localhost:8081/@@+/action.html?type_name=zope.app.sqlscript.SQLScript"
+ class="">SQL Script</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="content odd">
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="http://localhost:8081/@@+/action.html?type_name=zope.app.zptpage.ZPTPage"
+ class="">ZPT Page</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Tree of the help topics that appears on the help namespace -->
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="workspace">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="breadcrumbs"> Location: <a
+ href="http://localhost:8081/@@SelectedManagementView.html">[top]</a>
+ /
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="itemViews">
+ <BLANKLINE>
+ <a href="@@contents.html" class="selected">Contents</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@preview.html" class="">Preview</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@EditMetaData.html" class="">Metadata</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@classBrowser.html" class="">Introspector</a>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <!-- OnlineHelp with popup support -->
+ <!-- note, we reverse the actions list 'cos they're packed to the
+ screen from the right -->
+ <div id="actions">
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="javascript:popup('contents.html/++help++/@@contexthelp.html','OnlineHelp','height=400
+ ,width=700
+ ,resizable=1
+ ,scrollbars=yes
+ ,location=no
+ ,status=no
+ ,toolbar=no
+ ,menubar=no')">Help</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@undoAll.html">Undo all</a>
+ <a href="@@undoMore.html">Undo more</a>
+ <a href="@@undo.html">Undo!</a>
+ <a href="@@errorRedirect.html">Errors</a>
+ <a href="@@grant.html">Grant</a>
+ <a href="@@+">Add</a>
+ <a href="@@find.html">Find</a>
+ <a href="++etc++process/index.html">Manage Process</a>
+ <a href="++etc++site/@@SelectedManagementView.html">Manage Site</a>
+ <BLANKLINE>
+
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="viewspace">
+ <BLANKLINE>
+ <div id="message">
+ </div>
+ <BLANKLINE>
+ <div id="content">
+ <div>
+ <div>
+ <BLANKLINE>
+ <form name="containerContentsForm" method="POST"
+ action="http://localhost:8081/@@contents.html">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <table id="sortable" class="listing"
+ summary="Content listing">
+ <BLANKLINE>
+ <thead>
+ <tr>
+ <th> </th>
+ <th>Name</th>
+ <th>Title</th>
+ <th>Size</th>
+ <th>Created</th>
+ <th>Modified</th>
+ </tr>
+ </thead>
+ <BLANKLINE>
+ <tbody>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </tbody>
+ </table>
+ <BLANKLINE>
+ <div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </form>
+ <BLANKLINE>
+ <script><!--
+ prettydump('focus', LG_INFO);
+ if (document.containerContentsForm.new_value)
+ document.containerContentsForm.new_value.focus();
+ //-->
+ </script>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="context_information">
+ <BLANKLINE>
+ <div id="helpers">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <!--
+ <div id="inspectors">
+ <BLANKLINE>
+ <div class="box" id="metadata"
+ tal:define="view context/@@MetaDataBox|nothing"
+ tal:condition="view/strip|nothing">
+ <BLANKLINE>
+ <h4 i18n:translate="">Metadata</h4>
+ <BLANKLINE>
+ <div class="body">
+ <BLANKLINE>
+ <div class="content" tal:content="structure view">
+ Some metadata
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ </div>
+ -->
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <div class="spacer">
+
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <div id="footer" />
+ <BLANKLINE>
+ <div id="logger" />
+ <BLANKLINE>
+ </body>
+ <BLANKLINE>
+ </html>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+
+
+ >>> print http(r"""
+ ... GET /++etc++site/@@manage HTTP/1.1
+ ... Authorization: Basic Z2xvYmFsbWdyOmdsb2JhbG1ncnB3
+ ... Referer: http://localhost:8081/@@contents.html
+ ... """)
+ HTTP/1.1 303 See Other
+ Connection: close
+ Content-Length: 0
+ Content-Type: text/plain;charset=utf-8
+ Location: @@tasks.html
+ <BLANKLINE>
+
+
+ >>> print http(r"""
+ ... GET /++etc++site/@@tasks.html HTTP/1.1
+ ... Authorization: Basic Z2xvYmFsbWdyOmdsb2JhbG1ncnB3
+ ... Referer: http://localhost:8081/@@contents.html
+ ... """)
+ HTTP/1.1 200 Ok
+ Connection: close
+ Content-Length: 7224
+ Content-Type: text/html;charset=utf-8
+ <BLANKLINE>
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <BLANKLINE>
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ lang="en">
+ <BLANKLINE>
+ <head>
+ <title>Z3: ++etc++site</title>
+ <BLANKLINE>
+ <style type="text/css" media="all">@import url(http://localhost:8081/@@/zope3.css);</style>
+ <BLANKLINE>
+ <style type="text/css" media="all">@import url(http://localhost:8081/@@/site_management.css);</style>
+ <BLANKLINE>
+ <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Popup script for the OnlineHelp -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/onlinehelp.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/xmltree.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <link rel="icon" type="image/png"
+ href="http://localhost:8081/@@/favicon.png" />
+ </head>
+ <BLANKLINE>
+ <body onload="loadtree('http://localhost:8081/', 'http://localhost:8081/++etc++site/')">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="global">
+ <div id="userDetails">
+ <BLANKLINE>
+ User:
+ Sample Manager
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@logout.html?nextURL=http%3A//localhost%3A8081/%2B%2Betc%2B%2Bsite/%40%40tasks.html">[Logout]</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <img src="http://localhost:8081/@@/zope3logo.gif" />
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="navigators">
+ <BLANKLINE>
+ <!-- Navigation tree box -->
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <div class="box" id="navigationTree">
+ <h4>Navigation</h4>
+ <div xmlns="http://www.zope.org/zope3xmltree"
+ id="navtreecontents" class="body"
+ onclick="treeclicked(event);">Loading...</div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="box" id="commonTasks">
+ <BLANKLINE>
+ <BLANKLINE>
+ <h4>Add:</h4>
+ <div class="body">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="content even">
+ <a href="http://localhost:8081/++etc++site/@@contents.html?type_name=zope.app.browser.add.zope.app.site.folder.SiteManagementFolder"
+ class="">Site-Management Folder</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Tree of the help topics that appears on the help namespace -->
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="workspace">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="breadcrumbs"> Location: <a
+ href="http://localhost:8081/@@SelectedManagementView.html">[top]</a>
+ /
+ <a href="http://localhost:8081/++etc++site/@@SelectedManagementView.html">++etc++site</a> /
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="itemViews">
+ <BLANKLINE>
+ <a href="@@tasks.html" class="selected">Tasks</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@services.html" class="">Services</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@interfacebrowse.html" class="">Interface Browse</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@contents.html" class="">Software</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@tools.html" class="">Tools</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@EditMetaData.html" class="">Metadata</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@classBrowser.html" class="">Introspector</a>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <!-- OnlineHelp with popup support -->
+ <!-- note, we reverse the actions list 'cos they're packed to the
+ screen from the right -->
+ <div id="actions">
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="javascript:popup('tasks.html/++help++/@@contexthelp.html','OnlineHelp','height=400
+ ,width=700
+ ,resizable=1
+ ,scrollbars=yes
+ ,location=no
+ ,status=no
+ ,toolbar=no
+ ,menubar=no')">Help</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@undoAll.html">Undo all</a>
+ <a href="@@undoMore.html">Undo more</a>
+ <a href="@@undo.html">Undo!</a>
+ <a href="@@errorRedirect.html">Errors</a>
+ <a href="@@find.html">Find</a>
+ <a href="@@grant.html">Grant</a>
+ <a href="@@+">Add Site Management Folder</a>
+ <a href="default/AddService">Add service</a>
+ <a href="default/@@SelectedManagementView.html">Visit default folder</a>
+ <BLANKLINE>
+
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="viewspace">
+ <BLANKLINE>
+ <div id="message">
+ </div>
+ <BLANKLINE>
+ <div id="content">
+ <div>
+ <BLANKLINE>
+ <h2>
+ Common Site Management Tasks
+ </h2>
+ <BLANKLINE>
+ <p>
+ The site management interface allows you to setup and configure
+ software for this site.
+ </p>
+ <BLANKLINE>
+ <dl>
+ <dt>Tools:</dt>
+ <dd>
+ <BLANKLINE>
+ <BLANKLINE>
+ Tools consist of Services and Utilities. Services register
+ themselves with the Service Service while utilities register
+ themselves with the Utility Service. They perform tasks like
+ error logging, translation, authentication and so on. You may
+ configure the services and utilities already present in this
+ site or provide new serivces and utilities (which may override
+ existing tools).
+ <BLANKLINE>
+ <BLANKLINE>
+ <ul>
+ <li>
+ <a href="@@tools.html">
+ Tools Management
+ </a>
+ </li>
+ <li>
+ <a href="@@services.html">
+ Services Overview
+ </a>
+ </li>
+ <BLANKLINE>
+ <li>
+ <a href="default/Utilities/@@utilities.html">
+ Utilities Overview (<b>default</b> Site Manager)
+ </a>
+ </li>
+ </ul>
+ </dd>
+ <BLANKLINE>
+ <dt>Software:</dt>
+ <BLANKLINE>
+ <dd>
+ <BLANKLINE>
+ The site may customize the behavior of existing software or
+ define its own. The first step in creating a new software
+ package is to create a new Site Management Folder to contain
+ the software.
+ <BLANKLINE>
+ <BLANKLINE>
+ <ul>
+ <li>
+ <a href="@@contents.html">
+ Customize the behavior of existing software
+ </a>
+ </li>
+ <BLANKLINE>
+ <li>
+ <a href="@@+">
+ Create a new Site Management Folder
+ </a>
+ </li>
+ </ul>
+ </dd>
+ <BLANKLINE>
+ <!-- When software bundles are more than a wiki page, revisit this.
+ <dt>
+ <tal:text i18n:translate="label-software-bundles">
+ Software Bundles
+ </tal:text>:
+ </dt>
+ <dd i18n:translate="">
+ Installing,
+ Removing,
+ etc.
+ </dd>
+ -->
+ <BLANKLINE>
+ </dl></div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="context_information">
+ <BLANKLINE>
+ <div id="helpers">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <!--
+ <div id="inspectors">
+ <BLANKLINE>
+ <div class="box" id="metadata"
+ tal:define="view context/@@MetaDataBox|nothing"
+ tal:condition="view/strip|nothing">
+ <BLANKLINE>
+ <h4 i18n:translate="">Metadata</h4>
+ <BLANKLINE>
+ <div class="body">
+ <BLANKLINE>
+ <div class="content" tal:content="structure view">
+ Some metadata
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ </div>
+ -->
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <div class="spacer">
+
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <div id="footer" />
+ <BLANKLINE>
+ <div id="logger" />
+ <BLANKLINE>
+ </body>
+ <BLANKLINE>
+ </html>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+
+
+ >>> print http(r"""
+ ... GET /++etc++site/default/AddService HTTP/1.1
+ ... Authorization: Basic Z2xvYmFsbWdyOmdsb2JhbG1ncnB3
+ ... Referer: http://localhost:8081/++etc++site/@@tasks.html
+ ... """)
+ HTTP/1.1 200 Ok
+ Connection: close
+ Content-Length: 7153
+ Content-Type: text/html;charset=utf-8
+ <BLANKLINE>
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <BLANKLINE>
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ lang="en">
+ <BLANKLINE>
+ <head>
+ <base href="http://localhost:8081/++etc++site/default/AddService/index.html" />
+ <BLANKLINE>
+ <title>Z3: default</title>
+ <BLANKLINE>
+ <style type="text/css" media="all">@import url(http://localhost:8081/@@/zope3.css);</style>
+ <BLANKLINE>
+ <style type="text/css" media="all">@import url(http://localhost:8081/@@/site_management.css);</style>
+ <BLANKLINE>
+ <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Popup script for the OnlineHelp -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/onlinehelp.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/xmltree.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <link rel="icon" type="image/png"
+ href="http://localhost:8081/@@/favicon.png" />
+ </head>
+ <BLANKLINE>
+ <body onload="loadtree('http://localhost:8081/', 'http://localhost:8081/++etc++site/default/AddService/')">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="global">
+ <div id="userDetails">
+ <BLANKLINE>
+ User:
+ Sample Manager
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@logout.html?nextURL=http%3A//localhost%3A8081/%2B%2Betc%2B%2Bsite/default/AddService/index.html">[Logout]</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <img src="http://localhost:8081/@@/zope3logo.gif" />
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="navigators">
+ <BLANKLINE>
+ <!-- Navigation tree box -->
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <div class="box" id="navigationTree">
+ <h4>Navigation</h4>
+ <div xmlns="http://www.zope.org/zope3xmltree"
+ id="navtreecontents" class="body"
+ onclick="treeclicked(event);">Loading...</div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Tree of the help topics that appears on the help namespace -->
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="workspace">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="breadcrumbs"> Location: <a
+ href="http://localhost:8081/@@SelectedManagementView.html">[top]</a>
+ /
+ <a href="http://localhost:8081/++etc++site/@@SelectedManagementView.html">++etc++site</a> /
+ <a href="http://localhost:8081/++etc++site/default/@@SelectedManagementView.html">default</a> /
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- OnlineHelp with popup support -->
+ <!-- note, we reverse the actions list 'cos they're packed to the
+ screen from the right -->
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="viewspace">
+ <BLANKLINE>
+ <div id="message">
+ </div>
+ <BLANKLINE>
+ <div id="content">
+ <div>
+ <BLANKLINE>
+ <form method="post" action="action.html">
+ <table class="TypeListing" cellpadding="3">
+ <BLANKLINE>
+ <caption>Add Service</caption>
+ <BLANKLINE>
+ <tbody>
+ <BLANKLINE>
+ <tr>
+ <BLANKLINE>
+ <td class="Selector">
+ <input type="radio" name="type_name"
+ id="zope.app.browser.add.zope.app.adapter.adapter.LocalAdapterService"
+ value="zope.app.browser.add.zope.app.adapter.adapter.LocalAdapterService" />
+ </td>
+ <BLANKLINE>
+ <td class="TypeName">
+ <label style="font-weight: bold;"
+ for="zope.app.browser.add.zope.app.adapter.adapter.LocalAdapterService">
+ Adapter Service
+ </label>
+ <div class="TypeDescription">Allows the registration of Adapters in this site</div>
+ </td>
+ </tr>
+ <tr>
+ <BLANKLINE>
+ <td class="Selector">
+ <input type="radio" name="type_name"
+ id="zope.app.browser.add.zope.app.pluggableauth.PluggableAuthenticationService"
+ value="zope.app.browser.add.zope.app.pluggableauth.PluggableAuthenticationService" />
+ </td>
+ <BLANKLINE>
+ <td class="TypeName">
+ <label style="font-weight: bold;"
+ for="zope.app.browser.add.zope.app.pluggableauth.PluggableAuthenticationService">
+ Authentication Service
+ </label>
+ <div class="TypeDescription">A Pluggable Authentication uses plug-in principal sources.</div>
+ </td>
+ </tr>
+ <tr>
+ <BLANKLINE>
+ <td class="Selector">
+ <input type="radio" name="type_name"
+ id="zope.app.browser.add.zope.app.errorservice.ErrorReportingService"
+ value="zope.app.browser.add.zope.app.errorservice.ErrorReportingService" />
+ </td>
+ <BLANKLINE>
+ <td class="TypeName">
+ <label style="font-weight: bold;"
+ for="zope.app.browser.add.zope.app.errorservice.ErrorReportingService">
+ Error Logging Service
+ </label>
+ <div class="TypeDescription">Error Reporting Service for Logging Errors</div>
+ </td>
+ </tr>
+ <tr>
+ <BLANKLINE>
+ <td class="Selector">
+ <input type="radio" name="type_name"
+ id="zope.app.browser.add.zope.app.principalannotation.PrincipalAnnotationService"
+ value="zope.app.browser.add.zope.app.principalannotation.PrincipalAnnotationService" />
+ </td>
+ <BLANKLINE>
+ <td class="TypeName">
+ <label style="font-weight: bold;"
+ for="zope.app.browser.add.zope.app.principalannotation.PrincipalAnnotationService">
+ Principal Annotation Service
+ </label>
+ <div class="TypeDescription">Stores Annotations for Principals</div>
+ </td>
+ </tr>
+ <tr>
+ <BLANKLINE>
+ <td class="Selector">
+ <input type="radio" name="type_name"
+ id="zope.app.browser.add.zope.app.utility.utility.LocalUtilityService"
+ value="zope.app.browser.add.zope.app.utility.utility.LocalUtilityService" />
+ </td>
+ <BLANKLINE>
+ <td class="TypeName">
+ <label style="font-weight: bold;"
+ for="zope.app.browser.add.zope.app.utility.utility.LocalUtilityService">
+ Utility Service
+ </label>
+ <div class="TypeDescription">A Local Utility Service allows you to register Utilities in this site</div>
+ </td>
+ </tr>
+ <BLANKLINE>
+ <tr>
+ <td><br /></td>
+ <td><input type="text" name="id" />
+ <input type="submit" name="add" value=" Add " />
+ </td>
+ </tr>
+ <BLANKLINE>
+ </tbody>
+ <BLANKLINE>
+ </table>
+ <BLANKLINE>
+ </form>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="context_information">
+ <BLANKLINE>
+ <div id="helpers">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <!--
+ <div id="inspectors">
+ <BLANKLINE>
+ <div class="box" id="metadata"
+ tal:define="view context/@@MetaDataBox|nothing"
+ tal:condition="view/strip|nothing">
+ <BLANKLINE>
+ <h4 i18n:translate="">Metadata</h4>
+ <BLANKLINE>
+ <div class="body">
+ <BLANKLINE>
+ <div class="content" tal:content="structure view">
+ Some metadata
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ </div>
+ -->
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <div class="spacer">
+
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <div id="footer" />
+ <BLANKLINE>
+ <div id="logger" />
+ <BLANKLINE>
+ </body>
+ <BLANKLINE>
+ </html>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+
+
+ >>> print http(r"""
+ ... POST /++etc++site/default/AddService/action.html HTTP/1.1
+ ... Authorization: Basic Z2xvYmFsbWdyOmdsb2JhbG1ncnB3
+ ... Content-Length: 98
+ ... Content-Type: application/x-www-form-urlencoded
+ ... Referer: http://localhost:8081/++etc++site/default/AddService
+ ...
+ ... type_name=zope.app.browser.add.zope.app.pluggableauth.PluggableAuthenticationService&id=&add=+Add+""")
+ HTTP/1.1 303 See Other
+ Connection: close
+ Content-Length: 4
+ Content-Type: text/plain;charset=utf-8
+ Location: http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@registration.html
+ <BLANKLINE>
+ None
+
+
+ >>> print http(r"""
+ ... GET /++etc++site/default/PluggableAuthenticationService/@@registration.html HTTP/1.1
+ ... Authorization: Basic Z2xvYmFsbWdyOmdsb2JhbG1ncnB3
+ ... Referer: http://localhost:8081/++etc++site/default/AddService
+ ... """)
+ HTTP/1.1 200 Ok
+ Connection: close
+ Content-Length: 6208
+ Content-Type: text/html;charset=utf-8
+ <BLANKLINE>
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <BLANKLINE>
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ lang="en">
+ <BLANKLINE>
+ <head>
+ <title>Z3: PluggableAuthenticationService</title>
+ <BLANKLINE>
+ <style type="text/css" media="all">@import url(http://localhost:8081/@@/zope3.css);</style>
+ <BLANKLINE>
+ <style type="text/css" media="all">@import url(http://localhost:8081/@@/site_management.css);</style>
+ <BLANKLINE>
+ <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Popup script for the OnlineHelp -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/onlinehelp.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/xmltree.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <link rel="icon" type="image/png"
+ href="http://localhost:8081/@@/favicon.png" />
+ </head>
+ <BLANKLINE>
+ <body onload="loadtree('http://localhost:8081/', 'http://localhost:8081/++etc++site/default/PluggableAuthenticationService/')">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="global">
+ <div id="userDetails">
+ <BLANKLINE>
+ User:
+ Sample Manager
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@logout.html?nextURL=http%3A//localhost%3A8081/%2B%2Betc%2B%2Bsite/default/PluggableAuthenticationService/%40%40registration.html">[Logout]</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <img src="http://localhost:8081/@@/zope3logo.gif" />
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="navigators">
+ <BLANKLINE>
+ <!-- Navigation tree box -->
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <div class="box" id="navigationTree">
+ <h4>Navigation</h4>
+ <div xmlns="http://www.zope.org/zope3xmltree"
+ id="navtreecontents" class="body"
+ onclick="treeclicked(event);">Loading...</div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="box" id="commonTasks">
+ <BLANKLINE>
+ <BLANKLINE>
+ <h4>Add:</h4>
+ <div class="body">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="content even">
+ <a href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@contents.html?type_name=zope.app.browser.add.zope.app.pluggableauth.BTreePrincipalSource"
+ class="">Add Principal Source</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Tree of the help topics that appears on the help namespace -->
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="workspace">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="breadcrumbs"> Location: <a
+ href="http://localhost:8081/@@SelectedManagementView.html">[top]</a>
+ /
+ <a href="http://localhost:8081/++etc++site/@@SelectedManagementView.html">++etc++site</a> /
+ <a href="http://localhost:8081/++etc++site/default/@@SelectedManagementView.html">default</a> /
+ <a href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@SelectedManagementView.html">PluggableAuthenticationService</a> /
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="itemViews">
+ <BLANKLINE>
+ <a href="@@contents.html" class="">Contents</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@registration.html" class="selected">Registration</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@EditMetaData.html" class="">Metadata</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@classBrowser.html" class="">Introspector</a>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <!-- OnlineHelp with popup support -->
+ <!-- note, we reverse the actions list 'cos they're packed to the
+ screen from the right -->
+ <div id="actions">
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="javascript:popup('registration.html/++help++/@@contexthelp.html','OnlineHelp','height=400
+ ,width=700
+ ,resizable=1
+ ,scrollbars=yes
+ ,location=no
+ ,status=no
+ ,toolbar=no
+ ,menubar=no')">Help</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@undoAll.html">Undo all</a>
+ <a href="@@undoMore.html">Undo more</a>
+ <a href="@@undo.html">Undo!</a>
+ <a href="@@errorRedirect.html">Errors</a>
+ <a href="@@find.html">Find</a>
+ <a href="@@grant.html">Grant</a>
+ <a href="@@tools.html">Tools</a>
+ <a href="@@+">Add</a>
+ <BLANKLINE>
+
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="viewspace">
+ <BLANKLINE>
+ <div id="message">
+ </div>
+ <BLANKLINE>
+ <div id="content">
+ <div>
+ <BLANKLINE>
+ <form method="POST"
+ action="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@registration.html">
+ <BLANKLINE>
+ <div>
+ <div>
+ <p>This object is registered as:</p>
+ <BLANKLINE>
+ <div class="registrationSummary">
+ <div class="usageSummary">Authentication Service</div>
+ <div class="implementationSummary">PluggableAuthenticationService</div>
+ <div class="modificationLink">
+ <a href="http://localhost:8081/++etc++site/default/RegistrationManager/Authentication">(modify)</a>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <p>This object is currently active.</p>
+ <input type="submit" value="Deactivate"
+ name="deactivate" />
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <hr />
+ <a href="registrations.html">
+ Advanced Options
+ </a>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </form>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="context_information">
+ <BLANKLINE>
+ <div id="helpers">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <!--
+ <div id="inspectors">
+ <BLANKLINE>
+ <div class="box" id="metadata"
+ tal:define="view context/@@MetaDataBox|nothing"
+ tal:condition="view/strip|nothing">
+ <BLANKLINE>
+ <h4 i18n:translate="">Metadata</h4>
+ <BLANKLINE>
+ <div class="body">
+ <BLANKLINE>
+ <div class="content" tal:content="structure view">
+ Some metadata
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ </div>
+ -->
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <div class="spacer">
+
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <div id="footer" />
+ <BLANKLINE>
+ <div id="logger" />
+ <BLANKLINE>
+ </body>
+ <BLANKLINE>
+ </html>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+
+
+ >>> print http(r"""
+ ... GET /++etc++site/default/PluggableAuthenticationService/@@contents.html HTTP/1.1
+ ... Authorization: Basic Z2xvYmFsbWdyOmdsb2JhbG1ncnB3
+ ... Referer: http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@registration.html
+ ... """)
+ HTTP/1.1 200 Ok
+ Connection: close
+ Content-Length: 6583
+ Content-Type: text/html;charset=utf-8
+ <BLANKLINE>
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <BLANKLINE>
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ lang="en">
+ <BLANKLINE>
+ <head>
+ <title>Z3: PluggableAuthenticationService</title>
+ <BLANKLINE>
+ <style type="text/css" media="all">@import url(http://localhost:8081/@@/zope3.css);</style>
+ <BLANKLINE>
+ <style type="text/css" media="all">@import url(http://localhost:8081/@@/site_management.css);</style>
+ <BLANKLINE>
+ <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Popup script for the OnlineHelp -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/onlinehelp.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/xmltree.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <link rel="icon" type="image/png"
+ href="http://localhost:8081/@@/favicon.png" />
+ </head>
+ <BLANKLINE>
+ <body onload="loadtree('http://localhost:8081/', 'http://localhost:8081/++etc++site/default/PluggableAuthenticationService/')">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="global">
+ <div id="userDetails">
+ <BLANKLINE>
+ User:
+ Sample Manager
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@logout.html?nextURL=http%3A//localhost%3A8081/%2B%2Betc%2B%2Bsite/default/PluggableAuthenticationService/%40%40contents.html">[Logout]</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <img src="http://localhost:8081/@@/zope3logo.gif" />
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="navigators">
+ <BLANKLINE>
+ <!-- Navigation tree box -->
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <div class="box" id="navigationTree">
+ <h4>Navigation</h4>
+ <div xmlns="http://www.zope.org/zope3xmltree"
+ id="navtreecontents" class="body"
+ onclick="treeclicked(event);">Loading...</div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="box" id="commonTasks">
+ <BLANKLINE>
+ <BLANKLINE>
+ <h4>Add:</h4>
+ <div class="body">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="content even">
+ <a href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@contents.html?type_name=zope.app.browser.add.zope.app.pluggableauth.BTreePrincipalSource"
+ class="">Add Principal Source</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Tree of the help topics that appears on the help namespace -->
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="workspace">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="breadcrumbs"> Location: <a
+ href="http://localhost:8081/@@SelectedManagementView.html">[top]</a>
+ /
+ <a href="http://localhost:8081/++etc++site/@@SelectedManagementView.html">++etc++site</a> /
+ <a href="http://localhost:8081/++etc++site/default/@@SelectedManagementView.html">default</a> /
+ <a href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@SelectedManagementView.html">PluggableAuthenticationService</a> /
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="itemViews">
+ <BLANKLINE>
+ <a href="@@contents.html" class="selected">Contents</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@registration.html" class="">Registration</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@EditMetaData.html" class="">Metadata</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@classBrowser.html" class="">Introspector</a>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <!-- OnlineHelp with popup support -->
+ <!-- note, we reverse the actions list 'cos they're packed to the
+ screen from the right -->
+ <div id="actions">
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="javascript:popup('contents.html/++help++/@@contexthelp.html','OnlineHelp','height=400
+ ,width=700
+ ,resizable=1
+ ,scrollbars=yes
+ ,location=no
+ ,status=no
+ ,toolbar=no
+ ,menubar=no')">Help</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@undoAll.html">Undo all</a>
+ <a href="@@undoMore.html">Undo more</a>
+ <a href="@@undo.html">Undo!</a>
+ <a href="@@errorRedirect.html">Errors</a>
+ <a href="@@find.html">Find</a>
+ <a href="@@grant.html">Grant</a>
+ <a href="@@tools.html">Tools</a>
+ <a href="@@+">Add</a>
+ <BLANKLINE>
+
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="viewspace">
+ <BLANKLINE>
+ <div id="message">
+ </div>
+ <BLANKLINE>
+ <div id="content">
+ <div>
+ <div>
+ <BLANKLINE>
+ <form name="containerContentsForm" method="POST"
+ action="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@contents.html">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <table id="sortable" class="listing"
+ summary="Content listing">
+ <BLANKLINE>
+ <thead>
+ <tr>
+ <th> </th>
+ <th>Name</th>
+ <th>Title</th>
+ <th>Size</th>
+ <th>Created</th>
+ <th>Modified</th>
+ </tr>
+ </thead>
+ <BLANKLINE>
+ <tbody>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </tbody>
+ </table>
+ <BLANKLINE>
+ <div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <input type="submit" name="container_add_button"
+ value="Add" />
+ <input type="text" name="single_new_value"
+ id="focusid" />
+ <input type="hidden" name="single_type_name"
+ value="zope.app.browser.add.zope.app.pluggableauth.BTreePrincipalSource" />
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </form>
+ <BLANKLINE>
+ <script><!--
+ prettydump('focus', LG_INFO);
+ if (document.containerContentsForm.new_value)
+ document.containerContentsForm.new_value.focus();
+ //-->
+ </script>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="context_information">
+ <BLANKLINE>
+ <div id="helpers">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <!--
+ <div id="inspectors">
+ <BLANKLINE>
+ <div class="box" id="metadata"
+ tal:define="view context/@@MetaDataBox|nothing"
+ tal:condition="view/strip|nothing">
+ <BLANKLINE>
+ <h4 i18n:translate="">Metadata</h4>
+ <BLANKLINE>
+ <div class="body">
+ <BLANKLINE>
+ <div class="content" tal:content="structure view">
+ Some metadata
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ </div>
+ -->
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <div class="spacer">
+
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <div id="footer" />
+ <BLANKLINE>
+ <div id="logger" />
+ <BLANKLINE>
+ </body>
+ <BLANKLINE>
+ </html>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+
+
+ >>> print http(r"""
+ ... POST /++etc++site/default/PluggableAuthenticationService/@@contents.html HTTP/1.1
+ ... Authorization: Basic Z2xvYmFsbWdyOmdsb2JhbG1ncnB3
+ ... Content-Length: 124
+ ... Content-Type: application/x-www-form-urlencoded
+ ... Referer: http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@contents.html
+ ...
+ ... container_add_button=Add&single_new_value=&single_type_name=zope.app.browser.add.zope.app.pluggableauth.BTreePrincipalSource""")
+ HTTP/1.1 303 See Other
+ Connection: close
+ Content-Length: 6479
+ Content-Type: text/html;charset=utf-8
+ Location: http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@contents.html
+ <BLANKLINE>
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <BLANKLINE>
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ lang="en">
+ <BLANKLINE>
+ <head>
+ <title>Z3: PluggableAuthenticationService</title>
+ <BLANKLINE>
+ <style type="text/css" media="all">@import url(http://localhost:8081/@@/zope3.css);</style>
+ <BLANKLINE>
+ <style type="text/css" media="all">@import url(http://localhost:8081/@@/site_management.css);</style>
+ <BLANKLINE>
+ <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Popup script for the OnlineHelp -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/onlinehelp.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/xmltree.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <link rel="icon" type="image/png"
+ href="http://localhost:8081/@@/favicon.png" />
+ </head>
+ <BLANKLINE>
+ <body onload="loadtree('http://localhost:8081/', 'http://localhost:8081/++etc++site/default/PluggableAuthenticationService/')">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="global">
+ <div id="userDetails">
+ <BLANKLINE>
+ User:
+ Sample Manager
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@logout.html?nextURL=http%3A//localhost%3A8081/%2B%2Betc%2B%2Bsite/default/PluggableAuthenticationService/%40%40contents.html">[Logout]</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <img src="http://localhost:8081/@@/zope3logo.gif" />
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="navigators">
+ <BLANKLINE>
+ <!-- Navigation tree box -->
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <div class="box" id="navigationTree">
+ <h4>Navigation</h4>
+ <div xmlns="http://www.zope.org/zope3xmltree"
+ id="navtreecontents" class="body"
+ onclick="treeclicked(event);">Loading...</div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="box" id="commonTasks">
+ <BLANKLINE>
+ <BLANKLINE>
+ <h4>Add:</h4>
+ <div class="body">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="content even">
+ <a href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@contents.html?type_name=zope.app.browser.add.zope.app.pluggableauth.BTreePrincipalSource"
+ class="">Add Principal Source</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Tree of the help topics that appears on the help namespace -->
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="workspace">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="breadcrumbs"> Location: <a
+ href="http://localhost:8081/@@SelectedManagementView.html">[top]</a>
+ /
+ <a href="http://localhost:8081/++etc++site/@@SelectedManagementView.html">++etc++site</a> /
+ <a href="http://localhost:8081/++etc++site/default/@@SelectedManagementView.html">default</a> /
+ <a href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@SelectedManagementView.html">PluggableAuthenticationService</a> /
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="itemViews">
+ <BLANKLINE>
+ <a href="@@contents.html" class="selected">Contents</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@registration.html" class="">Registration</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@EditMetaData.html" class="">Metadata</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@classBrowser.html" class="">Introspector</a>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <!-- OnlineHelp with popup support -->
+ <!-- note, we reverse the actions list 'cos they're packed to the
+ screen from the right -->
+ <div id="actions">
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="javascript:popup('contents.html/++help++/@@contexthelp.html','OnlineHelp','height=400
+ ,width=700
+ ,resizable=1
+ ,scrollbars=yes
+ ,location=no
+ ,status=no
+ ,toolbar=no
+ ,menubar=no')">Help</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@undoAll.html">Undo all</a>
+ <a href="@@undoMore.html">Undo more</a>
+ <a href="@@undo.html">Undo!</a>
+ <a href="@@errorRedirect.html">Errors</a>
+ <a href="@@find.html">Find</a>
+ <a href="@@grant.html">Grant</a>
+ <a href="@@tools.html">Tools</a>
+ <a href="@@+">Add</a>
+ <BLANKLINE>
+
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="viewspace">
+ <BLANKLINE>
+ <div id="message">
+ </div>
+ <BLANKLINE>
+ <div id="content">
+ <div>
+ <div>
+ <BLANKLINE>
+ <form name="containerContentsForm" method="POST"
+ action="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@contents.html">
+ <BLANKLINE>
+ <input type="hidden" name="type_name"
+ value="zope.app.browser.add.zope.app.pluggableauth.BTreePrincipalSource" />
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <table id="sortable" class="listing"
+ summary="Content listing">
+ <BLANKLINE>
+ <thead>
+ <tr>
+ <th> </th>
+ <th>Name</th>
+ <th>Title</th>
+ <th>Size</th>
+ <th>Created</th>
+ <th>Modified</th>
+ </tr>
+ </thead>
+ <BLANKLINE>
+ <tbody>
+ <BLANKLINE>
+ <tr>
+ <td></td>
+ <td><input name="new_value" id="focusid" value="" /></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <BLANKLINE>
+ <BLANKLINE>
+ </tbody>
+ </table>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </form>
+ <BLANKLINE>
+ <script><!--
+ prettydump('focus', LG_INFO);
+ if (document.containerContentsForm.new_value)
+ document.containerContentsForm.new_value.focus();
+ //-->
+ </script>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="context_information">
+ <BLANKLINE>
+ <div id="helpers">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <!--
+ <div id="inspectors">
+ <BLANKLINE>
+ <div class="box" id="metadata"
+ tal:define="view context/@@MetaDataBox|nothing"
+ tal:condition="view/strip|nothing">
+ <BLANKLINE>
+ <h4 i18n:translate="">Metadata</h4>
+ <BLANKLINE>
+ <div class="body">
+ <BLANKLINE>
+ <div class="content" tal:content="structure view">
+ Some metadata
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ </div>
+ -->
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <div class="spacer">
+
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <div id="footer" />
+ <BLANKLINE>
+ <div id="logger" />
+ <BLANKLINE>
+ </body>
+ <BLANKLINE>
+ </html>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+
+
+ >>> print http(r"""
+ ... GET /++etc++site/default/PluggableAuthenticationService/@@contents.html HTTP/1.1
+ ... Authorization: Basic Z2xvYmFsbWdyOmdsb2JhbG1ncnB3
+ ... Referer: http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@contents.html
+ ... """)
+ HTTP/1.1 200 Ok
+ Connection: close
+ Content-Length: 7799
+ Content-Type: text/html;charset=utf-8
+ <BLANKLINE>
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <BLANKLINE>
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ lang="en">
+ <BLANKLINE>
+ <head>
+ <title>Z3: PluggableAuthenticationService</title>
+ <BLANKLINE>
+ <style type="text/css" media="all">@import url(http://localhost:8081/@@/zope3.css);</style>
+ <BLANKLINE>
+ <style type="text/css" media="all">@import url(http://localhost:8081/@@/site_management.css);</style>
+ <BLANKLINE>
+ <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Popup script for the OnlineHelp -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/onlinehelp.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/xmltree.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <link rel="icon" type="image/png"
+ href="http://localhost:8081/@@/favicon.png" />
+ </head>
+ <BLANKLINE>
+ <body onload="loadtree('http://localhost:8081/', 'http://localhost:8081/++etc++site/default/PluggableAuthenticationService/')">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="global">
+ <div id="userDetails">
+ <BLANKLINE>
+ User:
+ Sample Manager
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@logout.html?nextURL=http%3A//localhost%3A8081/%2B%2Betc%2B%2Bsite/default/PluggableAuthenticationService/%40%40contents.html">[Logout]</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <img src="http://localhost:8081/@@/zope3logo.gif" />
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="navigators">
+ <BLANKLINE>
+ <!-- Navigation tree box -->
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <div class="box" id="navigationTree">
+ <h4>Navigation</h4>
+ <div xmlns="http://www.zope.org/zope3xmltree"
+ id="navtreecontents" class="body"
+ onclick="treeclicked(event);">Loading...</div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="box" id="commonTasks">
+ <BLANKLINE>
+ <BLANKLINE>
+ <h4>Add:</h4>
+ <div class="body">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="content even">
+ <a href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@contents.html?type_name=zope.app.browser.add.zope.app.pluggableauth.BTreePrincipalSource"
+ class="">Add Principal Source</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Tree of the help topics that appears on the help namespace -->
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="workspace">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="breadcrumbs"> Location: <a
+ href="http://localhost:8081/@@SelectedManagementView.html">[top]</a>
+ /
+ <a href="http://localhost:8081/++etc++site/@@SelectedManagementView.html">++etc++site</a> /
+ <a href="http://localhost:8081/++etc++site/default/@@SelectedManagementView.html">default</a> /
+ <a href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@SelectedManagementView.html">PluggableAuthenticationService</a> /
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="itemViews">
+ <BLANKLINE>
+ <a href="@@contents.html" class="selected">Contents</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@registration.html" class="">Registration</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@EditMetaData.html" class="">Metadata</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@classBrowser.html" class="">Introspector</a>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <!-- OnlineHelp with popup support -->
+ <!-- note, we reverse the actions list 'cos they're packed to the
+ screen from the right -->
+ <div id="actions">
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="javascript:popup('contents.html/++help++/@@contexthelp.html','OnlineHelp','height=400
+ ,width=700
+ ,resizable=1
+ ,scrollbars=yes
+ ,location=no
+ ,status=no
+ ,toolbar=no
+ ,menubar=no')">Help</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@undoAll.html">Undo all</a>
+ <a href="@@undoMore.html">Undo more</a>
+ <a href="@@undo.html">Undo!</a>
+ <a href="@@errorRedirect.html">Errors</a>
+ <a href="@@find.html">Find</a>
+ <a href="@@grant.html">Grant</a>
+ <a href="@@tools.html">Tools</a>
+ <a href="@@+">Add</a>
+ <BLANKLINE>
+
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="viewspace">
+ <BLANKLINE>
+ <div id="message">
+ </div>
+ <BLANKLINE>
+ <div id="content">
+ <div>
+ <div>
+ <BLANKLINE>
+ <form name="containerContentsForm" method="POST"
+ action="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@contents.html">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <table id="sortable" class="listing"
+ summary="Content listing">
+ <BLANKLINE>
+ <thead>
+ <tr>
+ <th> </th>
+ <th>Name</th>
+ <th>Title</th>
+ <th>Size</th>
+ <th>Created</th>
+ <th>Modified</th>
+ </tr>
+ </thead>
+ <BLANKLINE>
+ <tbody>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <tr class="even">
+ <td>
+ <input type="checkbox" class="noborder"
+ name="ids:list"
+ id="BTreePrincipalSource"
+ value="BTreePrincipalSource" />
+ </td>
+ <td><a href="BTreePrincipalSource/@@SelectedManagementView.html"></a><span>
+ <a href="BTreePrincipalSource/@@SelectedManagementView.html">BTreePrincipalSource</a><a
+ href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@contents.html?rename_ids:list=BTreePrincipalSource"> </a></span></td>
+ <td>
+ <BLANKLINE>
+ <BLANKLINE>
+ <span> </span>
+ </td>
+ <BLANKLINE>
+ <td><span>0 items</span></td>
+ <td><span> </span></td>
+ <td><span> </span></td>
+ </tr>
+ <BLANKLINE>
+ <BLANKLINE>
+ </tbody>
+ </table>
+ <BLANKLINE>
+ <div>
+ <BLANKLINE>
+ <input type="submit" name="container_rename_button"
+ value="Rename" />
+ <input type="submit" name="container_cut_button"
+ value="Cut" />
+ <input type="submit" name="container_copy_button"
+ value="Copy" />
+ <BLANKLINE>
+ <input type="submit" name="container_delete_button"
+ value="Delete" />
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <input type="submit" name="container_add_button"
+ value="Add" />
+ <input type="text" name="single_new_value"
+ id="focusid" />
+ <input type="hidden" name="single_type_name"
+ value="zope.app.browser.add.zope.app.pluggableauth.BTreePrincipalSource" />
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </form>
+ <BLANKLINE>
+ <script><!--
+ prettydump('focus', LG_INFO);
+ if (document.containerContentsForm.new_value)
+ document.containerContentsForm.new_value.focus();
+ //-->
+ </script>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="context_information">
+ <BLANKLINE>
+ <div id="helpers">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <!--
+ <div id="inspectors">
+ <BLANKLINE>
+ <div class="box" id="metadata"
+ tal:define="view context/@@MetaDataBox|nothing"
+ tal:condition="view/strip|nothing">
+ <BLANKLINE>
+ <h4 i18n:translate="">Metadata</h4>
+ <BLANKLINE>
+ <div class="body">
+ <BLANKLINE>
+ <div class="content" tal:content="structure view">
+ Some metadata
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ </div>
+ -->
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <div class="spacer">
+
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <div id="footer" />
+ <BLANKLINE>
+ <div id="logger" />
+ <BLANKLINE>
+ </body>
+ <BLANKLINE>
+ </html>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+
+
+ >>> print http(r"""
+ ... GET /++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/@@SelectedManagementView.html HTTP/1.1
+ ... Authorization: Basic Z2xvYmFsbWdyOmdsb2JhbG1ncnB3
+ ... Referer: http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@contents.html
+ ... """)
+ HTTP/1.1 303 See Other
+ Connection: close
+ Content-Length: 0
+ Content-Type: text/plain;charset=utf-8
+ Location: @@contents.html
+ <BLANKLINE>
+
+
+ >>> print http(r"""
+ ... GET /++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/@@contents.html HTTP/1.1
+ ... Authorization: Basic Z2xvYmFsbWdyOmdsb2JhbG1ncnB3
+ ... Referer: http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@contents.html
+ ... """)
+ HTTP/1.1 200 Ok
+ Connection: close
+ Content-Length: 6407
+ Content-Type: text/html;charset=utf-8
+ <BLANKLINE>
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <BLANKLINE>
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ lang="en">
+ <BLANKLINE>
+ <head>
+ <title>Z3: BTreePrincipalSource</title>
+ <BLANKLINE>
+ <style type="text/css" media="all">@import url(http://localhost:8081/@@/zope3.css);</style>
+ <BLANKLINE>
+ <style type="text/css" media="all">@import url(http://localhost:8081/@@/site_management.css);</style>
+ <BLANKLINE>
+ <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Popup script for the OnlineHelp -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/onlinehelp.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/xmltree.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <link rel="icon" type="image/png"
+ href="http://localhost:8081/@@/favicon.png" />
+ </head>
+ <BLANKLINE>
+ <body onload="loadtree('http://localhost:8081/', 'http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/')">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="global">
+ <div id="userDetails">
+ <BLANKLINE>
+ User:
+ Sample Manager
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@logout.html?nextURL=http%3A//localhost%3A8081/%2B%2Betc%2B%2Bsite/default/PluggableAuthenticationService/BTreePrincipalSource/%40%40contents.html">[Logout]</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <img src="http://localhost:8081/@@/zope3logo.gif" />
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="navigators">
+ <BLANKLINE>
+ <!-- Navigation tree box -->
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <div class="box" id="navigationTree">
+ <h4>Navigation</h4>
+ <div xmlns="http://www.zope.org/zope3xmltree"
+ id="navtreecontents" class="body"
+ onclick="treeclicked(event);">Loading...</div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="box" id="commonTasks">
+ <BLANKLINE>
+ <BLANKLINE>
+ <h4>Add:</h4>
+ <div class="body">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="content even">
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/@@+/action.html?type_name=AddPrincipalForm.html"
+ class="">Principal</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Tree of the help topics that appears on the help namespace -->
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="workspace">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="breadcrumbs"> Location: <a
+ href="http://localhost:8081/@@SelectedManagementView.html">[top]</a>
+ /
+ <a href="http://localhost:8081/++etc++site/@@SelectedManagementView.html">++etc++site</a> /
+ <a href="http://localhost:8081/++etc++site/default/@@SelectedManagementView.html">default</a> /
+ <a href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@SelectedManagementView.html">PluggableAuthenticationService</a> /
+ <a href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/@@SelectedManagementView.html">BTreePrincipalSource</a> /
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="itemViews">
+ <BLANKLINE>
+ <a href="@@contents.html" class="selected">Contents</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@classBrowser.html" class="">Introspector</a>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <!-- OnlineHelp with popup support -->
+ <!-- note, we reverse the actions list 'cos they're packed to the
+ screen from the right -->
+ <div id="actions">
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="javascript:popup('contents.html/++help++/@@contexthelp.html','OnlineHelp','height=400
+ ,width=700
+ ,resizable=1
+ ,scrollbars=yes
+ ,location=no
+ ,status=no
+ ,toolbar=no
+ ,menubar=no')">Help</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@undoAll.html">Undo all</a>
+ <a href="@@undoMore.html">Undo more</a>
+ <a href="@@undo.html">Undo!</a>
+ <a href="@@errorRedirect.html">Errors</a>
+ <a href="@@find.html">Find</a>
+ <a href="@@+">Add</a>
+ <BLANKLINE>
+
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="viewspace">
+ <BLANKLINE>
+ <div id="message">
+ </div>
+ <BLANKLINE>
+ <div id="content">
+ <div>
+ <div>
+ <BLANKLINE>
+ <form name="containerContentsForm" method="POST"
+ action="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/@@contents.html">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <table id="sortable" class="listing"
+ summary="Content listing">
+ <BLANKLINE>
+ <thead>
+ <tr>
+ <th> </th>
+ <th>Name</th>
+ <th>Title</th>
+ <th>Size</th>
+ <th>Created</th>
+ <th>Modified</th>
+ </tr>
+ </thead>
+ <BLANKLINE>
+ <tbody>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </tbody>
+ </table>
+ <BLANKLINE>
+ <div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <input type="submit" name="container_add_button"
+ value="Add" />
+ <BLANKLINE>
+ <input type="hidden" name="single_type_name"
+ value="AddPrincipalForm.html" />
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </form>
+ <BLANKLINE>
+ <script><!--
+ prettydump('focus', LG_INFO);
+ if (document.containerContentsForm.new_value)
+ document.containerContentsForm.new_value.focus();
+ //-->
+ </script>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="context_information">
+ <BLANKLINE>
+ <div id="helpers">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <!--
+ <div id="inspectors">
+ <BLANKLINE>
+ <div class="box" id="metadata"
+ tal:define="view context/@@MetaDataBox|nothing"
+ tal:condition="view/strip|nothing">
+ <BLANKLINE>
+ <h4 i18n:translate="">Metadata</h4>
+ <BLANKLINE>
+ <div class="body">
+ <BLANKLINE>
+ <div class="content" tal:content="structure view">
+ Some metadata
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ </div>
+ -->
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <div class="spacer">
+
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <div id="footer" />
+ <BLANKLINE>
+ <div id="logger" />
+ <BLANKLINE>
+ </body>
+ <BLANKLINE>
+ </html>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+
+
+ >>> print http(r"""
+ ... POST /++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/@@contents.html HTTP/1.1
+ ... Authorization: Basic Z2xvYmFsbWdyOmdsb2JhbG1ncnB3
+ ... Content-Length: 63
+ ... Content-Type: application/x-www-form-urlencoded
+ ... Referer: http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/@@contents.html
+ ...
+ ... container_add_button=Add&single_type_name=AddPrincipalForm.html""")
+ HTTP/1.1 303 See Other
+ Connection: close
+ Content-Length: 6212
+ Content-Type: text/html;charset=utf-8
+ Location: http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/+/AddPrincipalForm.html=
+ <BLANKLINE>
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <BLANKLINE>
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ lang="en">
+ <BLANKLINE>
+ <head>
+ <title>Z3: BTreePrincipalSource</title>
+ <BLANKLINE>
+ <style type="text/css" media="all">@import url(http://localhost:8081/@@/zope3.css);</style>
+ <BLANKLINE>
+ <style type="text/css" media="all">@import url(http://localhost:8081/@@/site_management.css);</style>
+ <BLANKLINE>
+ <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Popup script for the OnlineHelp -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/onlinehelp.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/xmltree.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <link rel="icon" type="image/png"
+ href="http://localhost:8081/@@/favicon.png" />
+ </head>
+ <BLANKLINE>
+ <body onload="loadtree('http://localhost:8081/', 'http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/')">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="global">
+ <div id="userDetails">
+ <BLANKLINE>
+ User:
+ Sample Manager
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@logout.html?nextURL=http%3A//localhost%3A8081/%2B%2Betc%2B%2Bsite/default/PluggableAuthenticationService/BTreePrincipalSource/%40%40contents.html">[Logout]</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <img src="http://localhost:8081/@@/zope3logo.gif" />
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="navigators">
+ <BLANKLINE>
+ <!-- Navigation tree box -->
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <div class="box" id="navigationTree">
+ <h4>Navigation</h4>
+ <div xmlns="http://www.zope.org/zope3xmltree"
+ id="navtreecontents" class="body"
+ onclick="treeclicked(event);">Loading...</div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="box" id="commonTasks">
+ <BLANKLINE>
+ <BLANKLINE>
+ <h4>Add:</h4>
+ <div class="body">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="content even">
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/@@+/action.html?type_name=AddPrincipalForm.html"
+ class="">Principal</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Tree of the help topics that appears on the help namespace -->
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="workspace">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="breadcrumbs"> Location: <a
+ href="http://localhost:8081/@@SelectedManagementView.html">[top]</a>
+ /
+ <a href="http://localhost:8081/++etc++site/@@SelectedManagementView.html">++etc++site</a> /
+ <a href="http://localhost:8081/++etc++site/default/@@SelectedManagementView.html">default</a> /
+ <a href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@SelectedManagementView.html">PluggableAuthenticationService</a> /
+ <a href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/@@SelectedManagementView.html">BTreePrincipalSource</a> /
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="itemViews">
+ <BLANKLINE>
+ <a href="@@contents.html" class="selected">Contents</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@classBrowser.html" class="">Introspector</a>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <!-- OnlineHelp with popup support -->
+ <!-- note, we reverse the actions list 'cos they're packed to the
+ screen from the right -->
+ <div id="actions">
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="javascript:popup('contents.html/++help++/@@contexthelp.html','OnlineHelp','height=400
+ ,width=700
+ ,resizable=1
+ ,scrollbars=yes
+ ,location=no
+ ,status=no
+ ,toolbar=no
+ ,menubar=no')">Help</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@undoAll.html">Undo all</a>
+ <a href="@@undoMore.html">Undo more</a>
+ <a href="@@undo.html">Undo!</a>
+ <a href="@@errorRedirect.html">Errors</a>
+ <a href="@@find.html">Find</a>
+ <a href="@@+">Add</a>
+ <BLANKLINE>
+
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="viewspace">
+ <BLANKLINE>
+ <div id="message">
+ </div>
+ <BLANKLINE>
+ <div id="content">
+ <div>
+ <div>
+ <BLANKLINE>
+ <form name="containerContentsForm" method="POST"
+ action="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/@@contents.html">
+ <BLANKLINE>
+ <input type="hidden" name="type_name"
+ value="AddPrincipalForm.html" />
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <table id="sortable" class="listing"
+ summary="Content listing">
+ <BLANKLINE>
+ <thead>
+ <tr>
+ <th> </th>
+ <th>Name</th>
+ <th>Title</th>
+ <th>Size</th>
+ <th>Created</th>
+ <th>Modified</th>
+ </tr>
+ </thead>
+ <BLANKLINE>
+ <tbody>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </tbody>
+ </table>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </form>
+ <BLANKLINE>
+ <script><!--
+ prettydump('focus', LG_INFO);
+ if (document.containerContentsForm.new_value)
+ document.containerContentsForm.new_value.focus();
+ //-->
+ </script>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="context_information">
+ <BLANKLINE>
+ <div id="helpers">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <!--
+ <div id="inspectors">
+ <BLANKLINE>
+ <div class="box" id="metadata"
+ tal:define="view context/@@MetaDataBox|nothing"
+ tal:condition="view/strip|nothing">
+ <BLANKLINE>
+ <h4 i18n:translate="">Metadata</h4>
+ <BLANKLINE>
+ <div class="body">
+ <BLANKLINE>
+ <div class="content" tal:content="structure view">
+ Some metadata
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ </div>
+ -->
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <div class="spacer">
+
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <div id="footer" />
+ <BLANKLINE>
+ <div id="logger" />
+ <BLANKLINE>
+ </body>
+ <BLANKLINE>
+ </html>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+
+
+ >>> print http(r"""
+ ... GET /++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/+/AddPrincipalForm.html= HTTP/1.1
+ ... Authorization: Basic Z2xvYmFsbWdyOmdsb2JhbG1ncnB3
+ ... Referer: http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/@@contents.html
+ ... """)
+ HTTP/1.1 200 Ok
+ Connection: close
+ Content-Length: 6224
+ Content-Type: text/html;charset=utf-8
+ <BLANKLINE>
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <BLANKLINE>
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ lang="en">
+ <BLANKLINE>
+ <head>
+ <title>Z3: +</title>
+ <BLANKLINE>
+ <style type="text/css" media="all">@import url(http://localhost:8081/@@/zope3.css);</style>
+ <BLANKLINE>
+ <style type="text/css" media="all">@import url(http://localhost:8081/@@/site_management.css);</style>
+ <BLANKLINE>
+ <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Popup script for the OnlineHelp -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/onlinehelp.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/xmltree.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <link rel="icon" type="image/png"
+ href="http://localhost:8081/@@/favicon.png" />
+ </head>
+ <BLANKLINE>
+ <body onload="loadtree('http://localhost:8081/', 'http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/+/')">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="global">
+ <div id="userDetails">
+ <BLANKLINE>
+ User:
+ Sample Manager
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@logout.html?nextURL=http%3A//localhost%3A8081/%2B%2Betc%2B%2Bsite/default/PluggableAuthenticationService/BTreePrincipalSource/%2B/AddPrincipalForm.html%253D">[Logout]</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <img src="http://localhost:8081/@@/zope3logo.gif" />
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="navigators">
+ <BLANKLINE>
+ <!-- Navigation tree box -->
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <div class="box" id="navigationTree">
+ <h4>Navigation</h4>
+ <div xmlns="http://www.zope.org/zope3xmltree"
+ id="navtreecontents" class="body"
+ onclick="treeclicked(event);">Loading...</div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Tree of the help topics that appears on the help namespace -->
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="workspace">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="breadcrumbs"> Location: <a
+ href="http://localhost:8081/@@SelectedManagementView.html">[top]</a>
+ /
+ <a href="http://localhost:8081/++etc++site/@@SelectedManagementView.html">++etc++site</a> /
+ <a href="http://localhost:8081/++etc++site/default/@@SelectedManagementView.html">default</a> /
+ <a href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@SelectedManagementView.html">PluggableAuthenticationService</a> /
+ <a href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/@@SelectedManagementView.html">BTreePrincipalSource</a> /
+ <a href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/+/@@SelectedManagementView.html">+</a> /
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- OnlineHelp with popup support -->
+ <!-- note, we reverse the actions list 'cos they're packed to the
+ screen from the right -->
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="viewspace">
+ <BLANKLINE>
+ <div id="message">
+ </div>
+ <BLANKLINE>
+ <div id="content">
+ <div>
+ <BLANKLINE>
+ <div>
+ <BLANKLINE>
+ <form action="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/+/AddPrincipalForm.html%3D"
+ method="post" enctype="multipart/form-data">
+ <BLANKLINE>
+ <div>
+ <BLANKLINE>
+ <h3>Add Simple User with details</h3>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="row">
+ <BLANKLINE>
+ <div class="label">
+ <label for="field.login"
+ title="The Login/Username of the user. This value can change.">Login</label>
+ </div>
+ <div class="field"><input class="textType" id="field.login" name="field.login" size="20" type="text" value="" /></div>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <div class="row">
+ <BLANKLINE>
+ <div class="label">
+ <label for="field.password"
+ title="The password for the user.">Password</label>
+ </div>
+ <div class="field"><input class="passwordType" id="field.password" name="field.password" size="20" type="password" value="" /></div>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <div class="row">
+ <BLANKLINE>
+ <div class="label">
+ <label for="field.title"
+ title="The title of the principal. This is usually used in the UI.">Title</label>
+ </div>
+ <div class="field"><input class="textType" id="field.title" name="field.title" size="20" type="text" value="" /></div>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <div class="row">
+ <BLANKLINE>
+ <div class="label">
+ <label for="field.description"
+ title="A detailed description of the principal.">Description</label>
+ </div>
+ <div class="field"><textarea cols="60" id="field.description" name="field.description" rows="15" ></textarea></div>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="separator"></div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="separator"></div>
+ <BLANKLINE>
+ </div>
+ <br /><br />
+ <div class="row">
+ <div class="controls"><hr />
+ <input type="submit" value="Refresh" />
+ <input type="submit" value="Add"
+ name="UPDATE_SUBMIT" />
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="separator"></div>
+ </form>
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="context_information">
+ <BLANKLINE>
+ <div id="helpers">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <!--
+ <div id="inspectors">
+ <BLANKLINE>
+ <div class="box" id="metadata"
+ tal:define="view context/@@MetaDataBox|nothing"
+ tal:condition="view/strip|nothing">
+ <BLANKLINE>
+ <h4 i18n:translate="">Metadata</h4>
+ <BLANKLINE>
+ <div class="body">
+ <BLANKLINE>
+ <div class="content" tal:content="structure view">
+ Some metadata
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ </div>
+ -->
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <div class="spacer">
+
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <div id="footer" />
+ <BLANKLINE>
+ <div id="logger" />
+ <BLANKLINE>
+ </body>
+ <BLANKLINE>
+ </html>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+
+
+ >>> print http(r"""
+ ... POST /++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/+/AddPrincipalForm.html%3D HTTP/1.1
+ ... Authorization: Basic Z2xvYmFsbWdyOmdsb2JhbG1ncnB3
+ ... Content-Length: 670
+ ... Content-Type: multipart/form-data; boundary=---------------------------1667868105456130284903308969
+ ... Referer: http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/+/AddPrincipalForm.html=
+ ...
+ ... -----------------------------1667868105456130284903308969
+ ... Content-Disposition: form-data; name="field.login"
+ ...
+ ... mgr
+ ... -----------------------------1667868105456130284903308969
+ ... Content-Disposition: form-data; name="field.password"
+ ...
+ ... mgrpw
+ ... -----------------------------1667868105456130284903308969
+ ... Content-Disposition: form-data; name="field.title"
+ ...
+ ... Test Manager
+ ... -----------------------------1667868105456130284903308969
+ ... Content-Disposition: form-data; name="field.description"
+ ...
+ ...
+ ... -----------------------------1667868105456130284903308969
+ ... Content-Disposition: form-data; name="UPDATE_SUBMIT"
+ ...
+ ... Add
+ ... -----------------------------1667868105456130284903308969--
+ ... """)
+ HTTP/1.1 303 See Other
+ Connection: close
+ Content-Length: 6239
+ Content-Type: text/html;charset=utf-8
+ Location: http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/@@contents.html
+ <BLANKLINE>
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <BLANKLINE>
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ lang="en">
+ <BLANKLINE>
+ <head>
+ <title>Z3: +</title>
+ <BLANKLINE>
+ <style type="text/css" media="all">@import url(http://localhost:8081/@@/zope3.css);</style>
+ <BLANKLINE>
+ <style type="text/css" media="all">@import url(http://localhost:8081/@@/site_management.css);</style>
+ <BLANKLINE>
+ <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Popup script for the OnlineHelp -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/onlinehelp.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/xmltree.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <link rel="icon" type="image/png"
+ href="http://localhost:8081/@@/favicon.png" />
+ </head>
+ <BLANKLINE>
+ <body onload="loadtree('http://localhost:8081/', 'http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/+/')">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="global">
+ <div id="userDetails">
+ <BLANKLINE>
+ User:
+ Sample Manager
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@logout.html?nextURL=http%3A//localhost%3A8081/%2B%2Betc%2B%2Bsite/default/PluggableAuthenticationService/BTreePrincipalSource/%2B/AddPrincipalForm.html%253D">[Logout]</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <img src="http://localhost:8081/@@/zope3logo.gif" />
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="navigators">
+ <BLANKLINE>
+ <!-- Navigation tree box -->
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <div class="box" id="navigationTree">
+ <h4>Navigation</h4>
+ <div xmlns="http://www.zope.org/zope3xmltree"
+ id="navtreecontents" class="body"
+ onclick="treeclicked(event);">Loading...</div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Tree of the help topics that appears on the help namespace -->
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="workspace">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="breadcrumbs"> Location: <a
+ href="http://localhost:8081/@@SelectedManagementView.html">[top]</a>
+ /
+ <a href="http://localhost:8081/++etc++site/@@SelectedManagementView.html">++etc++site</a> /
+ <a href="http://localhost:8081/++etc++site/default/@@SelectedManagementView.html">default</a> /
+ <a href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@SelectedManagementView.html">PluggableAuthenticationService</a> /
+ <a href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/@@SelectedManagementView.html">BTreePrincipalSource</a> /
+ <a href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/+/@@SelectedManagementView.html">+</a> /
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- OnlineHelp with popup support -->
+ <!-- note, we reverse the actions list 'cos they're packed to the
+ screen from the right -->
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="viewspace">
+ <BLANKLINE>
+ <div id="message">
+ </div>
+ <BLANKLINE>
+ <div id="content">
+ <div>
+ <BLANKLINE>
+ <div>
+ <BLANKLINE>
+ <form action="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/+/AddPrincipalForm.html%3D"
+ method="post" enctype="multipart/form-data">
+ <BLANKLINE>
+ <div>
+ <BLANKLINE>
+ <h3>Add Simple User with details</h3>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="row">
+ <BLANKLINE>
+ <div class="label">
+ <label for="field.login"
+ title="The Login/Username of the user. This value can change.">Login</label>
+ </div>
+ <div class="field"><input class="textType" id="field.login" name="field.login" size="20" type="text" value="mgr" /></div>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <div class="row">
+ <BLANKLINE>
+ <div class="label">
+ <label for="field.password"
+ title="The password for the user.">Password</label>
+ </div>
+ <div class="field"><input class="passwordType" id="field.password" name="field.password" size="20" type="password" value="" /></div>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <div class="row">
+ <BLANKLINE>
+ <div class="label">
+ <label for="field.title"
+ title="The title of the principal. This is usually used in the UI.">Title</label>
+ </div>
+ <div class="field"><input class="textType" id="field.title" name="field.title" size="20" type="text" value="Test Manager" /></div>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <div class="row">
+ <BLANKLINE>
+ <div class="label">
+ <label for="field.description"
+ title="A detailed description of the principal.">Description</label>
+ </div>
+ <div class="field"><textarea cols="60" id="field.description" name="field.description" rows="15" ></textarea></div>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="separator"></div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="separator"></div>
+ <BLANKLINE>
+ </div>
+ <br /><br />
+ <div class="row">
+ <div class="controls"><hr />
+ <input type="submit" value="Refresh" />
+ <input type="submit" value="Add"
+ name="UPDATE_SUBMIT" />
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="separator"></div>
+ </form>
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="context_information">
+ <BLANKLINE>
+ <div id="helpers">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <!--
+ <div id="inspectors">
+ <BLANKLINE>
+ <div class="box" id="metadata"
+ tal:define="view context/@@MetaDataBox|nothing"
+ tal:condition="view/strip|nothing">
+ <BLANKLINE>
+ <h4 i18n:translate="">Metadata</h4>
+ <BLANKLINE>
+ <div class="body">
+ <BLANKLINE>
+ <div class="content" tal:content="structure view">
+ Some metadata
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ </div>
+ -->
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <div class="spacer">
+
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <div id="footer" />
+ <BLANKLINE>
+ <div id="logger" />
+ <BLANKLINE>
+ </body>
+ <BLANKLINE>
+ </html>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+
+
+ >>> print http(r"""
+ ... GET /++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/@@contents.html HTTP/1.1
+ ... Authorization: Basic Z2xvYmFsbWdyOmdsb2JhbG1ncnB3
+ ... Referer: http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/+/AddPrincipalForm.html=
+ ... """)
+ HTTP/1.1 200 Ok
+ Connection: close
+ Content-Length: 7252
+ Content-Type: text/html;charset=utf-8
+ <BLANKLINE>
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <BLANKLINE>
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ lang="en">
+ <BLANKLINE>
+ <head>
+ <title>Z3: BTreePrincipalSource</title>
+ <BLANKLINE>
+ <style type="text/css" media="all">@import url(http://localhost:8081/@@/zope3.css);</style>
+ <BLANKLINE>
+ <style type="text/css" media="all">@import url(http://localhost:8081/@@/site_management.css);</style>
+ <BLANKLINE>
+ <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Popup script for the OnlineHelp -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/onlinehelp.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <script type="text/javascript"
+ src="http://localhost:8081/@@/xmltree.js">
+ </script>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <link rel="icon" type="image/png"
+ href="http://localhost:8081/@@/favicon.png" />
+ </head>
+ <BLANKLINE>
+ <body onload="loadtree('http://localhost:8081/', 'http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/')">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="global">
+ <div id="userDetails">
+ <BLANKLINE>
+ User:
+ Sample Manager
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@logout.html?nextURL=http%3A//localhost%3A8081/%2B%2Betc%2B%2Bsite/default/PluggableAuthenticationService/BTreePrincipalSource/%40%40contents.html">[Logout]</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <img src="http://localhost:8081/@@/zope3logo.gif" />
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="navigators">
+ <BLANKLINE>
+ <!-- Navigation tree box -->
+ <BLANKLINE>
+ <!-- Ugly is better than lobotomized. -->
+ <div class="box" id="navigationTree">
+ <h4>Navigation</h4>
+ <div xmlns="http://www.zope.org/zope3xmltree"
+ id="navtreecontents" class="body"
+ onclick="treeclicked(event);">Loading...</div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="box" id="commonTasks">
+ <BLANKLINE>
+ <BLANKLINE>
+ <h4>Add:</h4>
+ <div class="body">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="content even">
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/@@+/action.html?type_name=AddPrincipalForm.html"
+ class="">Principal</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <!-- Tree of the help topics that appears on the help namespace -->
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="workspace">
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="breadcrumbs"> Location: <a
+ href="http://localhost:8081/@@SelectedManagementView.html">[top]</a>
+ /
+ <a href="http://localhost:8081/++etc++site/@@SelectedManagementView.html">++etc++site</a> /
+ <a href="http://localhost:8081/++etc++site/default/@@SelectedManagementView.html">default</a> /
+ <a href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/@@SelectedManagementView.html">PluggableAuthenticationService</a> /
+ <a href="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/@@SelectedManagementView.html">BTreePrincipalSource</a> /
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div class="itemViews">
+ <BLANKLINE>
+ <a href="@@contents.html" class="selected">Contents</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@classBrowser.html" class="">Introspector</a>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <!-- OnlineHelp with popup support -->
+ <!-- note, we reverse the actions list 'cos they're packed to the
+ screen from the right -->
+ <div id="actions">
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="javascript:popup('contents.html/++help++/@@contexthelp.html','OnlineHelp','height=400
+ ,width=700
+ ,resizable=1
+ ,scrollbars=yes
+ ,location=no
+ ,status=no
+ ,toolbar=no
+ ,menubar=no')">Help</a>
+ <BLANKLINE>
+ <BLANKLINE>
+ <a href="@@undoAll.html">Undo all</a>
+ <a href="@@undoMore.html">Undo more</a>
+ <a href="@@undo.html">Undo!</a>
+ <a href="@@errorRedirect.html">Errors</a>
+ <a href="@@find.html">Find</a>
+ <a href="@@+">Add</a>
+ <BLANKLINE>
+
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="viewspace">
+ <BLANKLINE>
+ <div id="message">
+ </div>
+ <BLANKLINE>
+ <div id="content">
+ <div>
+ <div>
+ <BLANKLINE>
+ <form name="containerContentsForm" method="POST"
+ action="http://localhost:8081/++etc++site/default/PluggableAuthenticationService/BTreePrincipalSource/@@contents.html">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <table id="sortable" class="listing"
+ summary="Content listing">
+ <BLANKLINE>
+ <thead>
+ <tr>
+ <th> </th>
+ <th>Name</th>
+ <th>Title</th>
+ <th>Size</th>
+ <th>Created</th>
+ <th>Modified</th>
+ </tr>
+ </thead>
+ <BLANKLINE>
+ <tbody>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <tr class="even">
+ <td>
+ <input type="checkbox" class="noborder"
+ name="ids:list" id="mgr" value="mgr" />
+ </td>
+ <td><a href="mgr/@@SelectedManagementView.html"></a><span>
+ <a href="mgr/@@SelectedManagementView.html">mgr</a></span></td>
+ <td>
+ <BLANKLINE>
+ <BLANKLINE>
+ <span> </span>
+ </td>
+ <BLANKLINE>
+ <td><span>n/a</span></td>
+ <td><span> </span></td>
+ <td><span> </span></td>
+ </tr>
+ <BLANKLINE>
+ <BLANKLINE>
+ </tbody>
+ </table>
+ <BLANKLINE>
+ <div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <input type="submit" name="container_cut_button"
+ value="Cut" />
+ <input type="submit" name="container_copy_button"
+ value="Copy" />
+ <BLANKLINE>
+ <input type="submit" name="container_delete_button"
+ value="Delete" />
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <input type="submit" name="container_add_button"
+ value="Add" />
+ <BLANKLINE>
+ <input type="hidden" name="single_type_name"
+ value="AddPrincipalForm.html" />
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </form>
+ <BLANKLINE>
+ <script><!--
+ prettydump('focus', LG_INFO);
+ if (document.containerContentsForm.new_value)
+ document.containerContentsForm.new_value.focus();
+ //-->
+ </script>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <BLANKLINE>
+ <div id="context_information">
+ <BLANKLINE>
+ <div id="helpers">
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <!--
+ <div id="inspectors">
+ <BLANKLINE>
+ <div class="box" id="metadata"
+ tal:define="view context/@@MetaDataBox|nothing"
+ tal:condition="view/strip|nothing">
+ <BLANKLINE>
+ <h4 i18n:translate="">Metadata</h4>
+ <BLANKLINE>
+ <div class="body">
+ <BLANKLINE>
+ <div class="content" tal:content="structure view">
+ Some metadata
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ </div>
+ -->
+ <BLANKLINE>
+ </div>
+ <BLANKLINE>
+ <div class="spacer">
+
+ </div>
+ <BLANKLINE>
+ </div>
+ </div>
+ <BLANKLINE>
+ <div id="footer" />
+ <BLANKLINE>
+ <div id="logger" />
+ <BLANKLINE>
+ </body>
+ <BLANKLINE>
+ </html>
+ <BLANKLINE>
+ <BLANKLINE>
+ <BLANKLINE>
Modified: Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/tests/test_directives.py
===================================================================
--- Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/tests/test_directives.py 2004-08-27 14:28:18 UTC (rev 27289)
+++ Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/tests/test_directives.py 2004-08-27 14:28:21 UTC (rev 27290)
@@ -43,31 +43,31 @@
def testView(self):
self.assertEqual(queryView(ob, 'test', request), None)
- context = xmlconfig.file("xmlrpc.zcml", xmlrpc.tests)
+ xmlconfig.file("xmlrpc.zcml", xmlrpc.tests)
self.assertEqual(queryView(ob, 'test', request).__class__, V1)
def testInterfaceProtectedView(self):
- context = xmlconfig.file("xmlrpc.zcml", xmlrpc.tests)
+ xmlconfig.file("xmlrpc.zcml", xmlrpc.tests)
v = getView(ob, 'test2', request)
v = ProxyFactory(v)
self.assertEqual(v.index(), 'V1 here')
self.assertRaises(Exception, getattr, v, 'action')
def testAttributeProtectedView(self):
- context = xmlconfig.file("xmlrpc.zcml", xmlrpc.tests)
+ xmlconfig.file("xmlrpc.zcml", xmlrpc.tests)
v = getView(ob, 'test3', request)
v = ProxyFactory(v)
self.assertEqual(v.action(), 'done')
self.assertRaises(Exception, getattr, v, 'index')
def testInterfaceAndAttributeProtectedView(self):
- context = xmlconfig.file("xmlrpc.zcml", xmlrpc.tests)
+ xmlconfig.file("xmlrpc.zcml", xmlrpc.tests)
v = getView(ob, 'test4', request)
self.assertEqual(v.index(), 'V1 here')
self.assertEqual(v.action(), 'done')
def testDuplicatedInterfaceAndAttributeProtectedView(self):
- context = xmlconfig.file("xmlrpc.zcml", xmlrpc.tests)
+ xmlconfig.file("xmlrpc.zcml", xmlrpc.tests)
v = getView(ob, 'test5', request)
self.assertEqual(v.index(), 'V1 here')
self.assertEqual(v.action(), 'done')
@@ -76,11 +76,16 @@
self.assertRaises(ConfigurationError, xmlconfig.file,
"xmlrpc_error.zcml", xmlrpc.tests)
- def testDefaultView(self):
- context = xmlconfig.file("xmlrpc.zcml", xmlrpc.tests)
- self.assertEqual(getDefaultViewName(ob, request), 'test')
+ def test_no_name(self):
+ xmlconfig.file("xmlrpc.zcml", xmlrpc.tests)
+ v = getView(ob, 'index', request)
+ self.assertEqual(v(), 'V1 here')
+ v = getView(ob, 'action', request)
+ self.assertEqual(v(), 'done')
+
+
def test_suite():
return unittest.TestSuite((
unittest.makeSuite(DirectivesTest),
Modified: Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/tests/xmlrpc.zcml
===================================================================
--- Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/tests/xmlrpc.zcml 2004-08-27 14:28:18 UTC (rev 27289)
+++ Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/tests/xmlrpc.zcml 2004-08-27 14:28:21 UTC (rev 27290)
@@ -8,40 +8,46 @@
<xmlrpc:view
name="test"
class="zope.app.component.tests.views.V1"
- for="zope.app.component.tests.views.IC" />
+ for="zope.app.component.tests.views.IC"
+ />
<xmlrpc:view
name="test2"
class="zope.app.component.tests.views.V1"
for="zope.app.component.tests.views.IC"
permission="zope.Public"
- allowed_interface="zope.app.component.tests.views.IV" />
+ interface="zope.app.component.tests.views.IV"
+ />
<xmlrpc:view
name="test3"
class="zope.app.component.tests.views.V1"
for="zope.app.component.tests.views.IC"
permission="zope.Public"
- allowed_attributes="action" />
+ methods="action" />
<xmlrpc:view
name="test4"
class="zope.app.component.tests.views.V1"
for="zope.app.component.tests.views.IC"
permission="zope.Public"
- allowed_attributes="action"
- allowed_interface="zope.app.component.tests.views.IV" />
+ methods="action"
+ interface="zope.app.component.tests.views.IV" />
<xmlrpc:view
name="test5"
class="zope.app.component.tests.views.V1"
for="zope.app.component.tests.views.IC"
permission="zope.Public"
- allowed_attributes="action index"
- allowed_interface="zope.app.component.tests.views.IV" />
+ methods="action index"
+ interface="zope.app.component.tests.views.IV" />
- <xmlrpc:defaultView
- name="test"
- for="zope.app.component.tests.views.IC" />
+
+ <xmlrpc:view
+ class="zope.app.component.tests.views.V1"
+ for="zope.app.component.tests.views.IC"
+ interface="zope.app.component.tests.views.IV"
+ methods="action"
+ />
</configure>
Modified: Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/tests/xmlrpc_error.zcml
===================================================================
--- Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/tests/xmlrpc_error.zcml 2004-08-27 14:28:18 UTC (rev 27289)
+++ Zope3/branches/ZopeX3-3.0/src/zope/app/publisher/xmlrpc/tests/xmlrpc_error.zcml 2004-08-27 14:28:21 UTC (rev 27290)
@@ -8,6 +8,6 @@
name="test"
factory="zope.component.tests.views.V1"
for="zope.component.tests.views.IC"
- allowed_attributes="action index" />
+ methods="action index" />
</configure>
More information about the Zope3-Checkins
mailing list