[Zope3-checkins] CVS: Zope3/src/zope/app/publisher/browser - metadirectives.py:1.1 globalbrowsermenuservice.py:1.19 i18nresourcemeta.py:1.11 icon.py:1.8 meta.zcml:1.10 metaconfigure.py:1.9 resourcemeta.py:1.8 viewmeta.py:1.28
Philipp von Weitershausen
philikon@philikon.de
Sat, 2 Aug 2003 03:04:48 -0400
Update of /cvs-repository/Zope3/src/zope/app/publisher/browser
In directory cvs.zope.org:/tmp/cvs-serv29115/publisher/browser
Modified Files:
globalbrowsermenuservice.py i18nresourcemeta.py icon.py
meta.zcml metaconfigure.py resourcemeta.py viewmeta.py
Added Files:
metadirectives.py
Log Message:
Converted the three most important packages that define ZCML directives
to the new ZCML architecture (using schemas):
- zope.app.component
- zope.app.browser
- zope.app.publisher.browser
=== Added File Zope3/src/zope/app/publisher/browser/metadirectives.py ===
##############################################################################
#
# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (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.
#
##############################################################################
"""Browser configuration code
This module defines the schemas for browser directives.
$Id: metadirectives.py,v 1.1 2003/08/02 07:04:09 philikon Exp $
"""
from zope.interface import Interface
from zope.configuration.fields import GlobalObject, Tokens, Path, \
PythonIdentifier
from zope.schema import Text, TextLine
from zope.app.component.metadirectives import IBasicViewInformation
#
# browser views
#
class IViewDirective(IBasicViewInformation):
"""
The view directive defines a view that has subpages.
The pages provided by the defined view are accessed by first
traversing to the view name and then traversing to the page name.
"""
name = TextLine(
title=u"The name of the view.",
description=u"The name shows up in URLs/paths. For example 'foo'.",
required=True
)
menu = TextLine(
title=u"The browser menu to include the page (view) in.",
description=u"""
Many views are included in menus. It's convenient to name
the menu in the page directive, rather than having to give a
separate menuItem directive.
</description>
""",
required=False
)
title = TextLine(
title=u"The browser menu label for the page (view)",
description=u"""
This attribute must be supplied if a menu attribute is
supplied.
""",
required=False
)
class IViewPageSubdirective(Interface):
"""
Subdirective to IViewDirective.
"""
name = TextLine(
title=u"The name of a sub page of a view.",
description=u"""
The name attribute is always required for the 'page'
directive. It is common to use an extension for the name, such
as '.html'.""",
required=True
)
attribute = PythonIdentifier(
title=u"The name of the view attribute implementing the page.",
description=u"""
This refers to the attribute (method) on the view that is
implementing a specific sub page.""",
required=False
)
template = Path(
title=u"The name of a template that implements the page.",
description=u"""
Refers to a file containing a page template (must end in
extension '.pt').""",
required=False
)
class IViewDefaultPageSubdirective(Interface):
"""
Subdirective to IViewDirective.
"""
name = TextLine(
title=u"The name of the page that is the default.",
description=u"""
The named page will be used as the default if no name is
specified explicitly in the path. If no defaultPage directive
is supplied, the default page will be the first page
listed.""",
required=True
)
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
)
for_ = GlobalObject(
title=u"The interface this view is the default for.",
description=u"""
The view is the default view for the supplied interface. If
this is not supplied, the view applies to all objects (XXX
this ought to change).""",
required=False
)
#
# browser pages
#
class IPagesDirective(IBasicViewInformation):
"""
Define multiple pages without repeating all of the parameters.
The pages directive allows multiple page views to be defined
without repeating the 'for', 'permission', 'class', 'layer',
'allowed_attributes', and 'allowed_interface' attributes.
"""
class IPagesPageSubdirective(Interface):
"""
Subdirective to IPagesDirective
"""
name = TextLine(
title=u"The name of the page (view)",
description=u"""
The name shows up in URLs/paths. For example 'foo' or
'foo.html'. This attribute is required unless you use the
subdirective 'page' to create sub views. If you do not have
sub pages, it is common to use an extension for the view name
such as '.html'. If you do have sub pages and you want to
provide a view name, you shouldn't use extensions.""",
required=True
)
template = TextLine(
title=u"The name of a page template.",
description=u"""
Refers to a file containing a page template (must end in
extension '.pt').""",
required=False
)
attribute = PythonIdentifier(
title=u"The name of an attribute to publish.",
description=u"""
This is used to publish an attribute provided by a class,
instead of a template.
This is the attribute, usually a method, to be published as
the page (view). The default is "__call__".""",
required=False
)
menu = TextLine(
title=u"The browser menu to include the page (view) in.",
description=u"""
Many views are included in menus. It's convenient to name the
menu in the page directive, rather than having to give a
separate menuItem directive.""",
required=False
)
title = TextLine(
title=u"The browser menu label for the page (view)",
description=u"""
This attribute must be supplied if a menu attribute is
supplied.""",
required=False
)
class IPageDirective(IPagesDirective, IPagesPageSubdirective):
"""
The page directive is used to create views that provide a single
url or page.
The page directive creates a new view class from a given template
and/or class and registers it.
"""
usage = TextLine(
title=u"The template usage top-level variable",
description=u"""
See the usage documentation in the README.txt in the
zope/app/browser/skins directory.
If this view is associated with a menu item, this attribute should
not be supplied as the view will get its usage from the menu the
menu item is registered to.
This attribute is available for views not associated with a menu
item.
""",
required=False
)
#
# browser resources
#
class IBasicResourceInformation(Interface):
"""
This is the basic information for all browser resources.
"""
layer = TextLine(
title=u"The layer the resource should be found in",
description=u"""
For information on layers, see the documentation for the skin
directive. Defaults to "default".""",
required=False
)
permission = TextLine(
title=u"The permission needed to access the resource.",
description=u"""
If a permission isn't specified, the resource will always be
accessible.""",
required=False
)
class IResourceDirective(IBasicResourceInformation):
"""
Defines a browser resource
"""
name = TextLine(
title=u"The name of the resource",
description=u"""
This is the name used in resource urls. Resource urls are of
the form site/@@/resourcename, where site is the url of
"site", a folder with a service manager.
We make resource urls site-relative (as opposed to
content-relative) so as not to defeat caches.""",
required=True
)
file = Path(
title=u"File",
description=u"The file containing the resource data.",
required=False
)
image = Path(
title=u"Image",
description=u"""
If the image attribute is used, then an image resource, rather
than a file resource will be created.""",
required=False
)
class II18nResourceDirective(IBasicResourceInformation):
"""
Defines an i18n'd resource.
"""
name = TextLine(
title=u"The name of the resource",
description=u"""
This is the name used in resource urls. Resource urls are of
the form site/@@/resourcename, where site is the url of
"site", a folder with a service manager.
We make resource urls site-relative (as opposed to
content-relative) so as not to defeat caches.""",
required=True
)
defaultLanguage = TextLine(
title=u"Default language",
description=u"Defines the default language",
required=False
)
class II18nResourceTranslationSubdirective(IBasicResourceInformation):
"""
Subdirective to II18nResourceDirective.
"""
language = TextLine(
title=u"Language",
description=u"Language of this translation of the resource",
required=True
)
file = Path(
title=u"File",
description=u"The file containing the resource data.",
required=False
)
image = Path(
title=u"Image",
description=u"""
If the image attribute is used, then an image resource, rather
than a file resource will be created.""",
required=False
)
#
# browser menus
#
class IMenuDirective(Interface):
"""
Define a browser menu
"""
id = TextLine(
title=u"The name of the menu.",
description=u"This is, effectively, an id.",
required=True
)
title = TextLine(
title=u"Title",
description=u"A descriptive title for documentation purposes",
required=True
)
usage = TextLine(
title=u"The templates usage top-level variable",
description=u"""
See the usage documentation in the README.txt in the
zope/app/browser/skins directory. If a view is associated with
a menu item, the view will get its usage from the menu the
menu item is registered to.""",
required=False
)
class IMenuItemsDirective(Interface):
"""
Define a group of browser menu items
This directive is useful when many menu items are defined for the
same interface and menu.
"""
menu = TextLine(
title=u"Menu name",
description=u"The (name of the) menu the items are defined for",
required=True,
)
for_ = GlobalObject(
title=u"Interface",
description=u"The interface the menu items are defined for",
required=False
)
class IMenuItemSubdirective(Interface):
"""
Define a menu item within a group of menu items
"""
action = TextLine(
title=u"The relative url to use if the item is selected",
description=u"""
The url is relative to the object the menu is being displayed
for.""",
required=True
)
title = TextLine(
title=u"Title",
description=u"The text to be displayed for the menu item",
required=True
)
description = Text(
title=u"A longer explanation of the menu item",
description=u"""
A UI may display this with the item or display it when the
user requests more assistance.""",
required=False
)
permission = TextLine(
title=u"The permission needed access the item",
description=u"""
This can usually be inferred by the system, however, doing so
may be expensive. When displaying a menu, the system tries to
traverse to the URLs given in each action to determine whether
the url is accessible to the current user. This can be
avoided if the permission is given explicitly.""",
required=False
)
filter = TextLine(
title=u"A condition for displaying the menu item",
description=u"""
The condition is given as a TALES expression. The expression
has access to the variables:
context -- The object the menu is being displayed for
request -- The browser request
nothing -- None
The menu item will not be displayed if there is a filter and
the filter evaluates to a false value.""",
required=False
)
class IMenuItemDirective(IMenuItemsDirective, IMenuItemSubdirective):
"""
Define one menu item
"""
#
# misc. directives
#
class ISkinDirective(Interface):
"""
Defines a browser skin
"""
name = TextLine(
title=u"Name",
description=u"The name of the skin.",
required=True
)
layers = Tokens(
title=u"A list of names of layers.",
description=u"""
This should be in order of lookup. Usually one of the layers
has the same name as the skin, and the last skin should be
'default', unless you want to completely override all views.
""",
value_type=TextLine()
)
class IIconDirective(Interface):
"""
Define an icon for an interface
"""
name = TextLine(
title=u"The name of the icon.",
description=u"The name shows up in URLs/paths. For example 'foo'.",
required=True
)
for_ = GlobalObject(
title=u"The interface this icon is for.",
description=u"""
The icon will be for all objects that implement this
interface.""",
required=True
)
file = Path(
title=u"File",
description=u"The file containing the icon.",
required=False
)
resource = TextLine(
title=u"Resource",
description=u"A resource containing the icon.",
required=False
)
# XXX this ought to be renamed title
alt = TextLine(
title=u"Title",
description=u"Descriptive title",
required=False
)
layer = TextLine(
title=u"The layer the icon should be found in",
description=u"""
For information on layers, see the documentation for the skin
directive. Defaults to "default".""",
required=False
)
=== Zope3/src/zope/app/publisher/browser/globalbrowsermenuservice.py 1.18 => 1.19 ===
--- Zope3/src/zope/app/publisher/browser/globalbrowsermenuservice.py:1.18 Mon Jul 28 18:21:02 2003
+++ Zope3/src/zope/app/publisher/browser/globalbrowsermenuservice.py Sat Aug 2 03:04:09 2003
@@ -15,8 +15,6 @@
from zope.interface import classProvides
from zope.exceptions import DuplicationError, Unauthorized, Forbidden
-from zope.configuration.action import Action
-
from zope.interface.type import TypeRegistry
from zope.interface import implements
@@ -27,7 +25,7 @@
from zope.app.security.permission import checkPermission
-from zope.app.component.metaconfigure import handler, resolveInterface
+from zope.app.component.metaconfigure import handler
from zope.app.interfaces.publisher.browser import IBrowserMenuService
from zope.app.pagetemplate.engine import Engine
from zope.app.publication.browser import PublicationTraverser
@@ -175,11 +173,11 @@
return None
def menuDirective(_context, id, title, description='', usage=u''):
- return [Action(
+ _context.action(
discriminator = ('browser:menu', id),
callable = globalBrowserMenuService.menu,
args = (id, title, description, usage),
- )]
+ )
def menuItemDirective(_context, menu, for_,
action, title, description='', filter=None,
@@ -191,36 +189,27 @@
class menuItemsDirective:
def __init__(self, _context, menu, for_):
- if for_ == '*':
- self.interface = None
- else:
- self.interface = resolveInterface(_context, for_)
+ self.interface = for_
self.menu = menu
def menuItem(self, _context, action, title, description='',
filter=None, permission=None):
-
- return [
- Action(
- discriminator = ('browser:menuItem',
- self.menu, self.interface, title),
- callable = globalBrowserMenuService.menuItem,
- args = (self.menu, self.interface,
- action, title, description, filter, permission),
- ),
- ]
-
- def __call__(self):
- return [
- Action(
- discriminator = None,
- callable = handler,
- args = (Interfaces, 'provideInterface',
- self.interface.__module__+'.'+self.interface.__name__,
- self.interface)
- )
- ]
-
+ _context.action(
+ discriminator = ('browser:menuItem',
+ self.menu, self.interface, title),
+ callable = globalBrowserMenuService.menuItem,
+ args = (self.menu, self.interface,
+ action, title, description, filter, permission),
+ ),
+
+ def __call__(self, _context):
+ _context.action(
+ discriminator = None,
+ callable = handler,
+ args = (Interfaces, 'provideInterface',
+ self.interface.__module__+'.'+self.interface.__name__,
+ self.interface)
+ )
globalBrowserMenuService = GlobalBrowserMenuService()
=== Zope3/src/zope/app/publisher/browser/i18nresourcemeta.py 1.10 => 1.11 ===
--- Zope3/src/zope/app/publisher/browser/i18nresourcemeta.py:1.10 Mon Jul 28 18:21:02 2003
+++ Zope3/src/zope/app/publisher/browser/i18nresourcemeta.py Sat Aug 2 03:04:09 2003
@@ -20,17 +20,13 @@
from zope.security.proxy import Proxy
from zope.security.checker import CheckerPublic, Checker
-from zope.configuration.action import Action
from zope.configuration.exceptions import ConfigurationError
-
from zope.app.services.servicenames import Resources
-
from zope.publisher.interfaces.browser import IBrowserPresentation
-
from zope.app.component.metaconfigure import handler
from zope.app.publisher.fileresource import File, Image
-from zope.app.publisher.browser.i18nfileresource import I18nFileResourceFactory
+from i18nfileresource import I18nFileResourceFactory
class I18nResource(object):
@@ -39,6 +35,7 @@
def __init__(self, _context, name=None, defaultLanguage='en',
layer='default', permission=None):
+ self._context = _context
self.name = name
self.defaultLanguage = defaultLanguage
self.layer = layer
@@ -46,7 +43,6 @@
self.__data = {}
self.__format = None
-
def translation(self, _context, language, file=None, image=None):
if file is not None and image is not None:
@@ -104,15 +100,12 @@
factory = self._proxyFactory(factory, checker)
- return [
- Action(
- discriminator = ('i18n-resource', self.name, self.type,
- self.layer),
- callable = handler,
- args = (Resources, 'provideResource', self.name, self.type,
- factory, self.layer)
- )
- ]
+ self._context.action(
+ discriminator = ('i18n-resource', self.name, self.type, self.layer),
+ callable = handler,
+ args = (Resources, 'provideResource', self.name, self.type,
+ factory, self.layer)
+ )
def _proxyFactory(self, factory, checker):
=== Zope3/src/zope/app/publisher/browser/icon.py 1.7 => 1.8 ===
--- Zope3/src/zope/app/publisher/browser/icon.py:1.7 Wed Apr 9 16:51:32 2003
+++ Zope3/src/zope/app/publisher/browser/icon.py Sat Aug 2 03:04:09 2003
@@ -20,8 +20,7 @@
import os
import re
-from zope.app.component.metaconfigure import handler, resolveInterface
-from zope.configuration.action import Action
+from zope.app.component.metaconfigure import handler
from zope.app.publisher.browser import metaconfigure
from zope.app.traversing.namespace import getResourceInContext
from zope.publisher.interfaces.browser import IBrowserPresentation
@@ -64,7 +63,6 @@
def IconDirective(_context, name, for_, file=None, resource=None,
layer='default', alt=None):
- for_ = resolveInterface(_context, for_)
iname = for_.__name__
if alt is None:
@@ -72,7 +70,6 @@
if IName.match(alt):
alt = alt[1:] # Remove leading 'I'
- results = []
if file is not None and resource is not None:
raise ConfigurationError(
"Can't use more than one of file, and resource "
@@ -84,8 +81,8 @@
ext = os.path.splitext(file)[1]
if ext:
resource += ext
- results = metaconfigure.resource(_context, image=file,
- name=resource, layer=layer)
+ metaconfigure.resource(_context, image=file,
+ name=resource, layer=layer)
elif resource is None:
raise ConfigurationError(
"At least one of the file, and resource "
@@ -94,18 +91,17 @@
vfactory = IconViewFactory(resource, alt)
- return results + [
- Action(
+ _context.action(
discriminator = ('view', name, vfactory, layer),
callable = handler,
args = ('Views', 'provideView',
for_, name, IBrowserPresentation,
- vfactory, layer)),
- Action(
+ vfactory, layer)
+ )
+ _context.action(
discriminator = None,
callable = handler,
args = (Interfaces, 'provideInterface',
for_.__module__+'.'+for_.__name__,
for_)
)
- ]
=== Zope3/src/zope/app/publisher/browser/meta.zcml 1.9 => 1.10 ===
--- Zope3/src/zope/app/publisher/browser/meta.zcml:1.9 Mon Jul 28 18:21:48 2003
+++ Zope3/src/zope/app/publisher/browser/meta.zcml Sat Aug 2 03:04:09 2003
@@ -1,847 +1,139 @@
-<zopeConfigure xmlns='http://namespaces.zope.org/zope'>
-
- <directives namespace="http://namespaces.zope.org/browser">
-
- <directive name="page" handler=".viewmeta.page">
-
- <description>
- The page directive is used to create views that provide a
- single url or page.
-
- The page directive creates a new view class from a given
- template and/or class and registers it.
- </description>
-
-
- <attribute name="name" required="yes">
- <description>
- The name of the page (view).
-
- The name shows up in URLs/paths. For example 'foo' or
- 'foo.html'. This attribute is required unless you use the
- subdirective 'page' to create sub views. If you do not have
- sub pages, it is common to use an extension for the view name
- such as '.html'. If you do have sub pages and you want to
- provide a view name, you shouldn't use
- extensions.
- </description>
- </attribute>
-
- <attribute name="for" required="yes">
- <description>
- The interface this page (view) applies to.
-
- The view will be for all objects that implement this interface.
-
- To provide a page for all components, use
- "zope.interface.Interface". To provide a page for all
- objects, use "*".
- </description>
- </attribute>
-
- <attribute name="permission" required="yes">
- <description>
- The permission needed to use the view.
- </description>
- </attribute>
-
- <attribute name="template">
- <description>
- The name of a page template.
-
- Refers to a file containing a page template (must end in
- extension '.pt').
- </description>
- </attribute>
-
- <attribute name="attribute" required="no">
- <description>
- The name of an attribute to publish.
-
- This is used to publish an attribute provided by a class,
- instead of a template.
-
- This is the attribute, usually a method, to be published as
- the page (view). The default is "__call__".
- </description>
- </attribute>
-
- <attribute name="class">
- <description>
- A class to use with a template, or to provide an attribute
- to publish.
-
- It's common to provide a class with methods to be used by
- the template to prevent including Python code in the template.
- </description>
- </attribute>
-
- <attribute name="layer" required="no">
- <description>
- The layer the view is in.
-
- A skin is composed of layers. It is common to put skin specific
- views in a layer named after the skin. If the 'layer' attribute
- is not supplied, it defaults to
- 'default'.
- </description>
- </attribute>
-
- <attribute name="allowed_interface" required="no">
- <description>
- Interface that is also allowed if user has permission.
-
- By default, 'permission' only applies to viewing the view and
- any possible sub views. By specifying this attribute, you can
- make the permission also apply to everything described in the
- supplied interface.
-
- Multiple interfaces, separated by whitespace, can be provided.
- </description>
- </attribute>
-
- <attribute name="allowed_attributes" required="no">
- <description>
- View attributes that are also allowed if user has permission.
-
- By default, 'permission' only applies to viewing the view and any
- possible sub views. By specifying 'allowed_attributes', you can
- make the permission also apply to the extra attributes on the
- view object.
- </description>
- </attribute>
-
- <attribute name="menu" required="no">
- <description>
- The browser menu to include the page (view) in.
-
- Many views are included in menus. It's convenient to name
- the menu in the page directive, rather than having to give a
- separate menuItem directive.
- </description>
- </attribute>
-
- <attribute name="title" required="no">
- <description>
- The browser menu label for the page (view)
-
- This attribute must be supplied if a menu attribute is
- supplied.
- </description>
- </attribute>
-
- <attribute name="usage" required="no">
- <description>
- The template usage top-level variable
-
- See the usage documentation in the README.txt in the
- zope/app/browser/skins directory.
- If this view is associated with a menu item, this attribute should
- not be supplied as the view will get its usage from the menu the
- menu item is registered to.
- This attribute is available for views not associated with a menu
- item.
- </description>
- </attribute>
-
- </directive>
-
- <directive name="pages" handler=".viewmeta.pages">
-
- <description>
- Define multiple pages without repeating all of the parameters.
-
- The pages directive allows multiple page views to be defined
- without repeating the 'for', 'permission', 'class', 'layer',
- 'allowed_attributes', and 'allowed_interface' attributes.
- </description>
-
- <attribute name="for" required="yes">
- <description>
- The interface this page (view) applies to.
-
- The view will be for all objects that implement this interface.
-
- To provide a page for all components, use
- "zope.interface.Interface". To provide a page for all
- objects, use "*".
- </description>
- </attribute>
-
- <attribute name="permission" required="yes">
- <description>
- The permission needed to use the view.
- </description>
- </attribute>
-
- <attribute name="class">
- <description>
- A class to use with a template, or to provide an attribute
- to publish.
-
- It's common to provide a class with methods to be used by
- the template to prevent including Python code in the template.
- </description>
- </attribute>
-
- <attribute name="layer" required="no">
- <description>
- The layer the view is in.
-
- A skin is composed of layers. It is common to put skin specific
- views in a layer named after the skin. If the 'layer' attribute
- is not supplied, it defaults to
- 'default'.
- </description>
- </attribute>
-
- <attribute name="allowed_interface" required="no">
- <description>
- Interface that is also allowed if user has permission.
-
- By default, 'permission' only applies to viewing the view and
- any possible sub views. By specifying this attribute, you can
- make the permission also apply to everything described in the
- supplied interface.
- </description>
- </attribute>
-
- <attribute name="allowed_attributes" required="no">
- <description>
- View attributes that are also allowed if user has permission.
-
- By default, 'permission' only applies to viewing the view and any
- possible sub views. By specifying 'allowed_attributes', you can
- make the permission also apply to the extra attributes on the
- view object.
- </description>
- </attribute>
-
- <subdirective name="page">
-
- <attribute name="name" required="yes">
- <description>
- The name of the view defined by the page.
-
- The name shows up in URLs/paths. For example 'foo' or
- 'foo.html'. This attribute is required unless you use the
- subdirective 'page' to create sub views. If you do not have
- sub pages, it is common to use an extension for the view name
- such as '.html'. If you do have sub pages and you want to
- provide a view name, you shouldn't use
- extensions.
- </description>
- </attribute>
-
- <attribute name="template">
- <description>
- The name of a page template.
-
- Refers to a file containing a page template (must end in
- extension '.pt').
- </description>
- </attribute>
-
- <attribute name="attribute" required="no">
- <description>
- If a class is used, this is the name of the attribute to be used
-
- This is the attribute, usually a method, to be published as
- the page (view). The fault is "__call__".
- </description>
- </attribute>
-
- <attribute name="menu" required="no">
- <description>
- The browser menu to include the page (view) in.
-
- Many views are included in menus. It's convenient to name
- the menu in the page directive, rather than having to give a
- separate menuItem directive.
- </description>
- </attribute>
-
- <attribute name="title" required="no">
- <description>
- The browser menu label for the page (view)
-
- This attribute must be supplied if a menu attribute is
- supplied.
- </description>
- </attribute>
-
- </subdirective>
-
- </directive>
-
- <directive name="view" handler=".viewmeta.view">
-
- <description>
- The view directive defines a view that has subpages.
-
- The pages provided by the defined view are accessed by first
- traversing to the view name and then traversing to the page
- name.
- </description>
-
- <attribute name="name" required="yes">
-
- <description>
- The name of the view.
-
- The name shows up in URLs/paths. For example 'foo'.
- </description>
- </attribute>
-
- <attribute name="for" required="yes">
- <description>
- The interface this view applies to.
-
- The view will be for all objects that implement this interface.
- If 'for' is not supplied, the view applies to all objects
- (XXX this ought to change).
- </description>
- </attribute>
-
- <attribute name="class" required="no">
- <description>
- A class that provides attributes used by the view.
- </description>
- </attribute>
-
- <attribute name="permission" required="yes">
- <description>
- The permission needed to use the view.
- </description>
- </attribute>
-
- <attribute name="layer" required="no">
- <description>
- The layer the view is in.
-
- A skin is composed of layers. It is common to put skin specific
- views in a layer named after the skin. If the 'layer' attribute
- is not supplied, it defaults to
- 'default'.
- </description>
- </attribute>
-
- <attribute name="allowed_interface" required="no">
- <description>
- Interface that is also allowed if user has permission.
-
- By default, 'permission' only applies to viewing the view and
- any possible sub views. By specifying this attribute, you can
- make the permission also apply to everything described in the
- supplied interface.
-
- Multiple interfaces can be provided, separated by whitespace.
- </description>
- </attribute>
-
- <attribute name="allowed_attributes" required="no">
- <description>
- View attributes that are also allowed if user has permission.
-
- By default, 'permission' only applies to viewing the view and any
- possible sub views. By specifying 'allowed_attributes', you can
- make the permission also apply to the extra attributes on the
- view object.
- </description>
- </attribute>
-
- <attribute name="menu" required="no">
- <description>
- The browser menu to include the page (view) in.
-
- Many views are included in menus. It's convenient to name
- the menu in the page directive, rather than having to give a
- separate menuItem directive.
- </description>
- </attribute>
-
- <attribute name="title" required="no">
- <description>
- The browser menu label for the page (view)
-
- This attribute must be supplied if a menu attribute is
- supplied.
- </description>
- </attribute>
-
- <subdirective name="page">
-
- <attribute name="name" required="yes">
- <description>
- The name of a sub page of a view.
-
- The name attribute is always required for the 'page'
- directive. It is common to use an extension for the name,
- such as '.html'.
- </description>
- </attribute>
-
- <attribute name="attribute">
- <description>
- The name of the view attribute implementing the page.
-
- This refers to the attribute (method) on the view that is
- implementing a specific sub page.
- </description>
- </attribute>
-
- <attribute name="template">
- <description>
- The name of a template that implements the page.
- </description>
- </attribute>
-
- </subdirective>
-
- <subdirective name="defaultPage">
-
- <attribute name="name" required="yes">
- <description>
- The name of the page that is the default.
-
- The named page will be used as the default if no name is
- specified explicitly in the path. If no defaultPage
- directive is supplied, the default page will be the
- first page listed.
- </description>
- </attribute>
-
- </subdirective>
- </directive>
-
- <directive name="addview" handler=".viewmeta.addview">
-
- <description>
- The addview directive defines an add view that has subpages.
-
- An add view is a view for a specific adding interface,
- IAdding. This directive is a convenience directive that allows
- the for interface to be omitted, since it is implied.
-
- The pages provided by the defined view are accessed by first
- traversing to the view name and then traversing to the page
- name.
- </description>
-
- <attribute name="name" required="yes">
-
- <description>
- The name of the view.
-
- The name shows up in URLs/paths. For example 'foo'.
- </description>
- </attribute>
-
- <attribute name="for" required="yes">
- <description>
- The interface this view applies to.
-
- The view will be for all objects that implement this interface.
- If 'for' is not supplied, the view applies to all objects
- (XXX this ought to change).
- </description>
- </attribute>
-
- <attribute name="class" required="no">
- <description>
- A class that provides attributes used by the view.
- </description>
- </attribute>
-
- <attribute name="permission" required="yes">
- <description>
- The permission needed to use the view.
- </description>
- </attribute>
-
- <attribute name="layer" required="no">
- <description>
- The layer the view is in.
-
- A skin is composed of layers. It is common to put skin specific
- views in a layer named after the skin. If the 'layer' attribute
- is not supplied, it defaults to
- 'default'.
- </description>
- </attribute>
-
- <attribute name="allowed_interface" required="no">
- <description>
- Interface that is also allowed if user has permission.
-
- By default, 'permission' only applies to viewing the view and
- any possible sub views. By specifying this attribute, you can
- make the permission also apply to everything described in the
- supplied interface.
-
- Multiple interfaces can be provided, separated by whitespace.
- </description>
- </attribute>
-
- <attribute name="allowed_attributes" required="no">
- <description>
- View attributes that are also allowed if user has permission.
-
- By default, 'permission' only applies to viewing the view and any
- possible sub views. By specifying 'allowed_attributes', you can
- make the permission also apply to the extra attributes on the
- view object.
- </description>
- </attribute>
-
- <attribute name="menu" required="no">
- <description>
- The browser menu to include the page (view) in.
-
- Many views are included in menus. It's convenient to name
- the menu in the page directive, rather than having to give a
- separate menuItem directive.
- </description>
- </attribute>
-
- <attribute name="title" required="no">
- <description>
- The browser menu label for the page (view)
-
- This attribute must be supplied if a menu attribute is
- supplied.
- </description>
- </attribute>
-
- <subdirective name="page">
-
- <attribute name="name" required="yes">
- <description>
- The name of a sub page of a view.
-
- The name attribute is always required for the 'page'
- directive. It is common to use an extension for the name,
- such as '.html'.
- </description>
- </attribute>
-
- <attribute name="attribute">
- <description>
- The name of the view attribute implementing the page.
-
- This refers to the attribute (method) on the view that is
- implementing a specific sub page.
- </description>
- </attribute>
-
- <attribute name="template">
- <description>
- The name of a template that implements the page.
- </description>
- </attribute>
-
- </subdirective>
-
- <subdirective name="defaultPage">
-
- <attribute name="name" required="yes">
- <description>
- The name of the page that is the default.
-
- The named page will be used as the default if no name is
- specified explicitly in the path. If no defaultPage
- directive is supplied, the default page will be the
- first page listed.
- </description>
- </attribute>
-
- </subdirective>
- </directive>
-
- <directive name="defaultView"
- handler="zope.app.publisher.browser.metaconfigure.defaultView"
- >
- <attribute name="name" >
- <description>
- 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).
- </description>
- </attribute>
-
- <attribute name="for">
- <description>
- The interface this view is the default for.
-
- The view is the default view for the supplied
- interface.
- </description>
- </attribute>
-
- </directive>
-
- <directive name="resource"
- handler="zope.app.publisher.browser.metaconfigure.resource"
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:meta="http://namespaces.zope.org/meta">
+
+ <meta:directives namespace="http://namespaces.zope.org/browser">
+
+ <!-- browser views -->
+
+ <meta:complexDirective
+ name="view"
+ schema=".metadirectives.IViewDirective"
+ handler=".viewmeta.view"
>
- <attribute name="name" required="yes">
-
- <description>
- The name of the resource
-
- This is the name used in resource urls. Resource urls are
- of the form site/@@/resourcename, where site is the url of
- "site", a folder with a service manager.
-
- We make resource urls site-relative (as opposed to
- content-relative) so as not to defeat caches.
- </description>
-
- </attribute>
-
- <attribute name="layer" required="no">
-
- <description>
- The layer the resource should be found in
-
- For information on layers, see the documentation for the
- skin directive.
-
- Defaults to "default".
- </description>
-
- </attribute>
+ <meta:subdirective
+ name="page"
+ schema=".metadirectives.IViewPageSubdirective"
+ />
- <attribute name="file">
+ <meta:subdirective
+ name="defaultPage"
+ schema=".metadirectives.IViewDefaultPageSubdirective"
+ />
- <description>
- The file containing the resource data.
- </description>
+ </meta:complexDirective>
- </attribute>
+ <meta:complexDirective
+ name="addview"
+ schema=".metadirectives.IViewDirective"
+ handler=".viewmeta.addview"
+ >
- <attribute name="image">
+ <meta:subdirective
+ name="page"
+ schema=".metadirectives.IViewPageSubdirective"
+ />
- <description>
- The file containing the resource data.
+ <meta:subdirective
+ name="defaultPage"
+ schema=".metadirectives.IViewDefaultPageSubdirective"
+ />
- If the image attribute is used, then an image resource,
- rather than a file resource will be created.
- </description>
+ </meta:complexDirective>
- </attribute>
+ <meta:directive
+ name="defaultView"
+ schema=".metadirectives.IDefaultViewDirective"
+ handler=".metaconfigure.defaultView"
+ />
+
+
+ <!-- browser pages -->
+
+ <meta:directive
+ name="page"
+ schema=".metadirectives.IPageDirective"
+ handler=".viewmeta.page"
+ />
+
+ <meta:complexDirective
+ name="pages"
+ schema=".metadirectives.IPagesDirective"
+ handler=".viewmeta.pages"
+ >
- <attribute name="permission" required="no">
+ <meta:subdirective
+ name="page"
+ schema=".metadirectives.IPagesPageSubdirective"
+ />
- <description>
- The id of the permission needed to access the resource.
+ </meta:complexDirective>
- If a permission isn't specified, the resource will always
- be accessible.
- </description>
- </attribute>
+ <!-- browser resources -->
- </directive>
+ <meta:directive
+ name="resource"
+ schema=".metadirectives.IResourceDirective"
+ handler=".metaconfigure.resource"
+ />
- <directive
+ <meta:complexDirective
name="i18n-resource"
- attributes="name defaultLanguage"
- handler="zope.app.publisher.browser.metaconfigure.I18nResource">
- <attribute
- name="name" />
- <attribute
- name="default_language" />
- <subdirective name="translation">
- <attribute
- name="language" />
- <attribute
- name="file" />
- <attribute
- name="image" />
- </subdirective>
- </directive>
-
- <directive name="skin"
- handler="zope.app.publisher.browser.metaconfigure.skin"
- >
-
- <attribute
- name="name"
- description="The name of the skin." />
- <attribute name="layers">
- <description>
- A list of names of layers.
-
- This should be in order of lookup. Usually one of the layers
- has the same name as the skin, and the last skin should be
- 'default', unless you want to completely override all
- views.
- </description>
- </attribute>
-
- </directive>
-
- <directive name="menu"
- handler="
- zope.app.publisher.browser.globalbrowsermenuservice.menuDirective"
- description="Define a new browser menu"
+ schema=".metadirectives.II18nResourceDirective"
+ handler=".metaconfigure.I18nResource"
>
- <attribute name="id">
- <description>
- The name of the menu.
-
- This is, effectively, an id.
- </description>
- </attribute>
-
-
- <attribute
- name="title"
- description="A descriptive title for documentation purposes"
+ <meta:subdirective
+ name="translation"
+ schema=".metadirectives.II18nResourceTranslationSubdirective"
/>
- <attribute name="usage">
- <description>
- The templates usage top-level variable
-
- See the usage documentation in the README.txt in the
- zope/app/browser/skins directory.
- If a view is associated with a menu item, the view will get its
- usage from the menu the menu item is registered to.
- </description>
- </attribute>
+ </meta:complexDirective>
+
- </directive>
+ <!-- browser menus -->
+ <meta:directive
+ name="menu"
+ schema=".metadirectives.IMenuDirective"
+ handler=".globalbrowsermenuservice.menuDirective"
+ />
-
- <directive
+ <meta:complexDirective
name="menuItems"
- attributes="menu for"
- handler="
- zope.app.publisher.browser.globalbrowsermenuservice.menuItemsDirective"
+ schema=".metadirectives.IMenuItemsDirective"
+ handler=".globalbrowsermenuservice.menuItemsDirective"
>
- <description>
- Define a group of browser menu items
- This directive is useful when many menu items are defined for
- the same interface and menu.
- </description>
-
- <attribute
- name="menu"
- required="yes"
- description="The (name of the) menu the items are defined for"
+ <meta:subdirective
+ name="menuItem"
+ schema=".metadirectives.IMenuItemSubdirective"
/>
- <attribute
- name="for"
- required="no"
- description="The interface the menu items are defined for"
- />
-
- <subdirective
- name="menuItem"
- description="Define a menu item within a group of menu items"
- >
-
- <attribute name="action" required="yes">
- <description>
- The relative url to use if the item is selected
-
- The url is relative to the object the menu is being
- displayed for.
- </description>
- </attribute>
-
- <attribute
- name="title"
- required="yes"
- description="The text to be displayed for the menu item"
- />
-
- <attribute name="description">
- <description>
- A longer explanation of the menu item
-
- A UI may display this with the item or display it when the
- user requests more assistance.
- </description>
- </attribute>
-
- <attribute name="permission" required="no">
- <description>
- The id of the permission needed access the item
-
- This can usually be inferred by the system, however, doing
- so may be expensive. When displaying a menu, the system
- tries to traverse to the URLs given in each action to
- determine whether the url is accessible to the current
- user. This can be avoided if the permission is given explicitly.
- </description>
- </attribute>
-
- <attribute name="filter" required="no">
- <description>
- A condition for displaying the menu item
-
- The condition is given as a TALES expression. The
- expression has access to the variables:
-
- context -- The object the menu is being displayed for
-
- request -- The browser request
-
- nothing -- None
-
- The menu item will not be displayed if there is a filter
- and the filter evaluates to a false value.
- </description>
- </attribute>
- </subdirective>
- </directive>
-
- <directive name="menuItem"
- handler="
- zope.app.publisher.browser.globalbrowsermenuservice.menuItemDirective"
- >
+ </meta:complexDirective>
- <attribute
- name="menu" />
- <attribute
- name="for" />
- <attribute
- name="action" />
- <attribute
- name="title" />
- <attribute
- name="description" />
- <attribute
- name="filter" />
- <attribute
- name="permission" />
- </directive>
-
- <directive name="icon" handler=".icon.IconDirective">
-
- <attribute
- name="name" />
- <attribute
- name="for" />
- <attribute
- name="file" />
- <attribute
- name="resource" />
- <attribute
- name="alt" />
- <attribute
- name="layer" />
- </directive>
+ <meta:directive
+ name="menuItem"
+ schema=".metadirectives.IMenuItemDirective"
+ handler=".globalbrowsermenuservice.menuItemDirective"
+ />
+
+ <!-- misc. directives -->
+
+ <meta:directive
+ name="skin"
+ schema=".metadirectives.ISkinDirective"
+ handler=".metaconfigure.skin"
+ />
+
+ <meta:directive
+ name="icon"
+ schema=".metadirectives.IIconDirective"
+ handler=".icon.IconDirective"
+ />
- </directives>
+ </meta:directives>
-</zopeConfigure>
+</configure>
=== Zope3/src/zope/app/publisher/browser/metaconfigure.py 1.8 => 1.9 ===
--- Zope3/src/zope/app/publisher/browser/metaconfigure.py:1.8 Tue Jun 3 18:46:21 2003
+++ Zope3/src/zope/app/publisher/browser/metaconfigure.py Sat Aug 2 03:04:09 2003
@@ -16,13 +16,11 @@
$Id$
"""
-from zope.configuration.action import Action
-
from zope.publisher.interfaces.browser import IBrowserPresentation
from zope.app.services.servicenames import Interfaces
from zope.app.component.metaconfigure import skin as _skin
-from zope.app.component.metaconfigure import handler, resolveInterface
+from zope.app.component.metaconfigure import handler
# referred to through ZCML
from zope.app.publisher.browser.resourcemeta import resource
@@ -31,40 +29,26 @@
from zope.app.publisher.browser.viewmeta import view
def skin(_context, **__kw):
- return _skin(_context,
- type='zope.publisher.interfaces.browser.IBrowserPresentation',
- **__kw)
+ return _skin(_context, type=IBrowserPresentation, **__kw)
def defaultView(_context, name, for_=None, **__kw):
if __kw:
- actions = view(_context, name=name, for_=for_, **__kw)()
- else:
- actions = []
-
- if for_ is not None:
- for_ = resolveInterface(_context, for_)
+ view(_context, name=name, for_=for_, **__kw)()
type = IBrowserPresentation
- actions += [
- Action(
+ _context.action(
discriminator = ('defaultViewName', for_, type, name),
callable = handler,
args = ('Views','setDefaultViewName', for_, type, name),
)
- ]
- if for_ is not None:
- actions.append
- (
- Action(
- discriminator = None,
- callable = handler,
- args = (Interfaces, 'provideInterface',
- for_.__module__+'.'+for_.__name__,
- for_)
- )
- )
-
- return actions
+ if for_ is not None:
+ _context.action(
+ discriminator = None,
+ callable = handler,
+ args = (Interfaces, 'provideInterface',
+ for_.__module__+'.'+for_.__name__,
+ for_)
+ )
=== Zope3/src/zope/app/publisher/browser/resourcemeta.py 1.7 => 1.8 ===
--- Zope3/src/zope/app/publisher/browser/resourcemeta.py:1.7 Tue Feb 11 21:17:27 2003
+++ Zope3/src/zope/app/publisher/browser/resourcemeta.py Sat Aug 2 03:04:09 2003
@@ -17,18 +17,12 @@
"""
from zope.security.checker import CheckerPublic, NamesChecker
-
-from zope.configuration.action import Action
from zope.configuration.exceptions import ConfigurationError
-
from zope.app.services.servicenames import Resources
-
from zope.publisher.interfaces.browser import IBrowserPresentation
-
from zope.app.component.metaconfigure import handler
-from zope.app.publisher.browser.fileresource import FileResourceFactory
-from zope.app.publisher.browser.fileresource import ImageResourceFactory
+from fileresource import FileResourceFactory, ImageResourceFactory
allowed_names = ('GET', 'HEAD', 'publishTraverse', 'browserDefault',
'request', '__call__')
@@ -52,11 +46,9 @@
else:
factory = ImageResourceFactory(_context.path(image), checker)
- return [
- Action(
- discriminator = ('resource', name, IBrowserPresentation, layer),
- callable = handler,
- args = (Resources, 'provideResource',
- name, IBrowserPresentation, factory, layer),
- )
- ]
+ _context.action(
+ discriminator = ('resource', name, IBrowserPresentation, layer),
+ callable = handler,
+ args = (Resources, 'provideResource',
+ name, IBrowserPresentation, factory, layer),
+ )
=== Zope3/src/zope/app/publisher/browser/viewmeta.py 1.27 => 1.28 ===
--- Zope3/src/zope/app/publisher/browser/viewmeta.py:1.27 Mon Jul 28 18:21:02 2003
+++ Zope3/src/zope/app/publisher/browser/viewmeta.py Sat Aug 2 03:04:09 2003
@@ -27,7 +27,6 @@
from zope.security.checker import CheckerPublic, Checker
from zope.security.checker import defineChecker
-from zope.configuration.action import Action
from zope.configuration.exceptions import ConfigurationError
from zope.app.services.servicenames import Interfaces, Views
@@ -37,7 +36,7 @@
from zope.publisher.browser import BrowserView
-from zope.app.component.metaconfigure import handler, resolveInterface
+from zope.app.component.metaconfigure import handler
from zope.app.pagetemplate.simpleviewclass import SimpleViewClass
from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile
@@ -102,16 +101,16 @@
def page(_context, name, permission, for_,
layer='default', template=None, class_=None,
- allowed_interface='', allowed_attributes='',
+ allowed_interface=None, allowed_attributes=None,
attribute='__call__', menu=None, title=None,
usage=u''
):
- actions = _handle_menu(_context, menu, title, for_, name, permission)
+ _handle_menu(_context, menu, title, for_, name, permission)
required = {}
- permission = _handle_permission(_context, permission, actions)
+ permission = _handle_permission(_context, permission)
if not (class_ or template):
raise ConfigurationError("Must specify a class or template")
@@ -132,20 +131,18 @@
required['__getitem__'] = permission
if class_:
- original_class = _context.resolve(class_)
-
if attribute != '__call__':
- if not hasattr(original_class, attribute):
+ if not hasattr(class_, attribute):
raise ConfigurationError(
"The provided class doesn't have the specified attribute "
)
if template:
# class and template
new_class = SimpleViewClass(
- template, bases=(original_class, ), usage=usage
+ template, bases=(class_, ), usage=usage
)
else:
- if not hasattr(original_class, 'browserDefault'):
+ if not hasattr(class_, 'browserDefault'):
cdict = {
'browserDefault':
ContextMethod(lambda self, request:
@@ -156,12 +153,12 @@
cdict = {}
cdict['__page_attribute__'] = attribute
- new_class = type(original_class.__name__,
- (original_class, simple,),
- cdict)
+ new_class = type(class_.__name__,
+ (class_, simple,),
+ cdict)
new_class.usage = usage
- if hasattr(original_class, '__implements__'):
+ if hasattr(class_, '__implements__'):
classImplements(new_class, IBrowserPublisher)
classImplements(new_class, IBrowserPresentation)
@@ -173,31 +170,26 @@
required[n] = permission
_handle_allowed_interface(_context, allowed_interface, permission,
- required, actions)
+ required)
_handle_allowed_attributes(_context, allowed_interface, permission,
required)
- for_ = _handle_for(_context, for_, actions)
+ for_ = _handle_for(_context, for_)
defineChecker(new_class, Checker(required))
- actions.append(
- Action(
- discriminator = ('view', for_, name, IBrowserPresentation, layer),
- callable = handler,
- args = (Views, 'provideView',
- for_, name, IBrowserPresentation, [new_class], layer),
- )
+ _context.action(
+ discriminator = ('view', for_, name, IBrowserPresentation, layer),
+ callable = handler,
+ args = (Views, 'provideView',
+ for_, name, IBrowserPresentation, [new_class], layer),
)
if not usage and menu:
- actions.append(
- Action(discriminator = None,
+ _context.action(
+ discriminator = None,
callable = _handle_usage_from_menu,
args = (new_class, menu, ),
)
- )
-
- return actions
# pages, which are just a short-hand for multiple page directives.
@@ -212,7 +204,7 @@
def __init__(self, _context, for_, permission,
layer='default', class_=None,
- allowed_interface='', allowed_attributes='',
+ allowed_interface=None, allowed_attributes=None,
):
self.opts = opts(for_=for_, permission=permission,
layer=layer, class_=class_,
@@ -244,19 +236,16 @@
def __init__(self, _context, name, for_, permission,
layer='default', class_=None,
- allowed_interface='', allowed_attributes='',
+ allowed_interface=None, allowed_attributes=None,
menu=None, title=None, usage=u''
):
- actions = _handle_menu(_context, menu, title, for_, name, permission)
-
- if class_:
- class_ = _context.resolve(class_)
+ _handle_menu(_context, menu, title, for_, name, permission)
- permission = _handle_permission(_context, permission, actions)
+ permission = _handle_permission(_context, permission)
self.args = (_context, name, for_, permission, layer, class_,
- allowed_interface, allowed_attributes, actions)
+ allowed_interface, allowed_attributes)
self.pages = []
# default usage is u''
@@ -281,9 +270,8 @@
return ()
def __call__(self):
-
(_context, name, for_, permission, layer, class_,
- allowed_interface, allowed_attributes, actions) = self.args
+ allowed_interface, allowed_attributes) = self.args
required = {}
@@ -362,28 +350,23 @@
required[n] = permission
_handle_allowed_interface(_context, allowed_interface, permission,
- required, actions)
+ required)
_handle_allowed_attributes(_context, allowed_interface, permission,
required)
- for_ = _handle_for(_context, for_, actions)
+ for_ = _handle_for(_context, for_)
defineChecker(newclass, Checker(required))
- actions.append(
- Action(
- discriminator = ('view',
- for_, name, IBrowserPresentation, layer),
- callable = handler,
- args = (Views, 'provideView',
- for_, name, IBrowserPresentation, [newclass], layer),
- )
+ _context.action(
+ discriminator = ('view', for_, name, IBrowserPresentation, layer),
+ callable = handler,
+ args = (Views, 'provideView',
+ for_, name, IBrowserPresentation, [newclass], layer),
)
- return actions
-
def addview(_context, name, permission,
layer='default', class_=None,
- allowed_interface='', allowed_attributes='',
+ allowed_interface=None, allowed_attributes=None,
menu=None, title=None, usage=u'',
):
return view(_context, name,
@@ -396,29 +379,20 @@
def defaultView(_context, name, for_=None):
- if for_ is not None:
- for_ = resolveInterface(_context, for_)
-
- actions = [
- Action(
+ _context.action(
discriminator = ('defaultViewName', for_, IBrowserPresentation, name),
callable = handler,
args = (Views,'setDefaultViewName', for_, IBrowserPresentation,
name),
- )]
+ )
if for_ is not None:
- actions .append(
- Action(
+ _context.action(
discriminator = None,
callable = handler,
args = (Interfaces, 'provideInterface',
- for_.__module__+'.'+for_.__name__,
- for_)
+ for_.__module__+'.'+for_.__name__, for_)
)
- )
-
- return actions
def _handle_menu(_context, menu, title, for_, name, permission):
if menu or title:
@@ -434,50 +408,52 @@
return []
-def _handle_permission(_context, permission, actions):
+def _handle_permission(_context, permission):
if permission == 'zope.Public':
permission = CheckerPublic
else:
- actions.append(Action(discriminator = None, callable = checkPermission,
- args = (None, permission)))
+ _context.action(
+ discriminator = None,
+ callable = checkPermission,
+ args = (None, permission)
+ )
return permission
def _handle_allowed_interface(_context, allowed_interface, permission,
- required, actions):
+ required):
# Allow access for all names defined by named interfaces
- if allowed_interface.strip():
- for i in allowed_interface.strip().split():
- i = resolveInterface(_context, i)
- actions .append(
- Action(discriminator = None, callable = handler,
- args = (Interfaces, 'provideInterface', None, i)
- ))
+ if allowed_interface:
+ for i in allowed_interface:
+ _context.action(
+ discriminator = None,
+ callable = handler,
+ args = (Interfaces, 'provideInterface', None, i)
+ )
for name in i:
required[name] = permission
def _handle_allowed_attributes(_context, allowed_attributes, permission,
required):
# Allow access for all named attributes
- if allowed_attributes.strip():
- for name in allowed_attributes.strip().split():
+ if allowed_attributes:
+ for name in allowed_attributes:
required[name] = permission
def _handle_usage_from_menu(view, menu_id):
usage = globalBrowserMenuService.getMenuUsage(menu_id)
view.usage = usage
-def _handle_for(_context, for_, actions):
+def _handle_for(_context, for_):
if for_ == '*':
for_ = None
if for_ is not None:
- for_ = resolveInterface(_context, for_)
-
- actions .append(
- Action(discriminator = None, callable = handler,
- args = (Interfaces, 'provideInterface', None, for_)
- ))
+ _context.action(
+ discriminator = None,
+ callable = handler,
+ args = (Interfaces, 'provideInterface', None, for_)
+ )
return for_