Commit 24d87feb authored by Tres Seaver's avatar Tres Seaver

Cloned ``ZopeVocabularyRegistry`` from ``zope.app.schema``.

o Added "sane" registration of it during initialization of Five, instead
  of registering it via import side effects.
parent 146cc221
......@@ -39,13 +39,13 @@ Zope2 depends on the following zope.app packages directly:
* Products.Five.form.metaconfigure (for ``menuItemDirective``)
* Products.Five.fivedirectives (for ``IBasicResourceInformation``)
- [_] zope.app.schema
o Products.Five (imports ``zope.app.schema.vocabulary`` for
- [X] zope.app.schema
* Products.Five (imports ``zope.app.schema.vocabulary`` for
side-effects ?!).
- [_] zope.app.twisted
o Zope2.Startup.datatypes (conditionally imports ``ServerFactory``)
o Zope2.Startup.handlers (conditionally imports ``ServerType``,
- [X] zope.app.twisted
* Zope2.Startup.datatypes (conditionally imports ``ServerFactory``)
* Zope2.Startup.handlers (conditionally imports ``ServerType``,
``SSLServerType``, ``IServerType``; worse, conditionally imports
``zope.app.twisted.main`` for side effects, which includes pulling
back ``zope.app.appsetup`` as well as adding ``zope.app.wsgi``?!)
......
......@@ -11,6 +11,9 @@ Trunk (unreleased)
Restructuring
+++++++++++++
- Cloned ``ZopeVocabularyRegistry`` from ``zope.app.schema``, and added
sane registration of it during initialization of Five.
- Removed experimental support for configuring the Twisted HTTP server
as an alternative to ``ZServer``.
......
......@@ -22,13 +22,14 @@ from Products.Five import zcml
from Products.Five.browser import BrowserView
from Products.Five.skin.standardmacros import StandardMacros
# hook up ZopeVocabularyRegistry
import zope.app.schema.vocabulary
# load the site's ZCML tree (usually site.zcml) upon product
# initialization
def initialize(context):
from zope.schema.vocabulary import setVocabularyRegistry
from Products.Five.schema import Zope2VocabularyRegistry
zcml.load_site()
setVocabularyRegistry(Zope2VocabularyRegistry())
# some convenience methods/decorators
......
##############################################################################
#
# Copyright (c) 2004, 2005 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.
#
##############################################################################
"""Five-specific schema support
$Id$
"""
from zope.component import getUtility
from zope.interface import implements
from zope.schema.interfaces import IVocabularyRegistry
from zope.schema.interfaces import IVocabularyFactory
class Zope2VocabularyRegistry(object):
"""IVocabularyRegistry that supports global and local utilities.
Cloned from the version in zope.app.schema.vocabulary: it was the
only feature in that package!
"""
implements(IVocabularyRegistry)
__slots__ = ()
def get(self, context, name):
"""See zope.schema.interfaces.IVocabularyRegistry.
"""
factory = getUtility(IVocabularyFactory, name)
return factory(context)
##############################################################################
#
# Copyright (c) 2006 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.
#
##############################################################################
""" Unit tests for Products.Five.schema module.
$Id: tests.py 71093 2006-11-07 13:54:29Z yuppie $
"""
import unittest
from zope.testing.cleanup import CleanUp
class Zope2VocabularyRegistryTests(unittest.TestCase, CleanUp):
def _getTargetClass(self):
from Products.Five.schema import Zope2VocabularyRegistry
return Zope2VocabularyRegistry
def _makeOne(self):
return self._getTargetClass()()
def test_class_conforms_to_IVocabularyRegistry(self):
from zope.interface.verify import verifyClass
from zope.schema.interfaces import IVocabularyRegistry
verifyClass(IVocabularyRegistry, self._getTargetClass())
def test_instance_conforms_to_IVocabularyRegistry(self):
from zope.interface.verify import verifyObject
from zope.schema.interfaces import IVocabularyRegistry
verifyObject(IVocabularyRegistry, self._makeOne())
def test_get_miss_raises_LookupError(self):
registry = self._makeOne()
context = object()
self.assertRaises(LookupError, registry.get, context, 'nonesuch')
def test_get_hit_finds_registered_IVocabularyFactory(self):
from zope.component import provideUtility
from zope.schema.interfaces import IVocabularyFactory
_marker = object()
def _factory(context):
return _marker
provideUtility(_factory, IVocabularyFactory, 'foundit')
registry = self._makeOne()
context = object()
found = registry.get(context, 'foundit')
self.failUnless(found is _marker)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment