[Zope3-checkins] CVS: Zope3/lib/python/Zope/App/ComponentArchitecture - IGlobalInterfaceService.py:1.3 IInterfaceService.py:1.4 InterfaceField.py:1.4 InterfaceService.py:1.3 configure.zcml:1.9 meta.zcml:1.3 metaConfigure.py:1.6
Jim Fulton
jim@zope.com
Thu, 19 Dec 2002 15:19:36 -0500
Update of /cvs-repository/Zope3/lib/python/Zope/App/ComponentArchitecture
In directory cvs.zope.org:/tmp/cvs-serv25031
Modified Files:
IGlobalInterfaceService.py IInterfaceService.py
InterfaceField.py InterfaceService.py configure.zcml meta.zcml
metaConfigure.py
Log Message:
date: 2002/12/12 15:12:00; author: jim
- Added an interface directive for registering interfaces directly
- Added a "type" field to interface fields to limit interfaces to
those that extend a type.
- Changed the provideInterface in the global InterfaceService to
accept a false id, in which case it computes the id from the
interface module and name.
- Updated the widget to reflect the changes.
=== Zope3/lib/python/Zope/App/ComponentArchitecture/IGlobalInterfaceService.py 1.2 => 1.3 ===
--- Zope3/lib/python/Zope/App/ComponentArchitecture/IGlobalInterfaceService.py:1.2 Tue Nov 19 18:15:14 2002
+++ Zope3/lib/python/Zope/App/ComponentArchitecture/IGlobalInterfaceService.py Thu Dec 19 15:19:05 2002
@@ -25,6 +25,10 @@
"""Register an interface with a given id
The id is the full dotted name for the interface.
+
+ If the id is false, the id will be computed from the interface
+ module and name.
+
"""
__doc__ = IGlobalInterfaceService.__doc__ + __doc__
=== Zope3/lib/python/Zope/App/ComponentArchitecture/IInterfaceService.py 1.3 => 1.4 ===
--- Zope3/lib/python/Zope/App/ComponentArchitecture/IInterfaceService.py:1.3 Wed Dec 4 04:54:04 2002
+++ Zope3/lib/python/Zope/App/ComponentArchitecture/IInterfaceService.py Thu Dec 19 15:19:05 2002
@@ -33,12 +33,22 @@
The default is returned if the interface can't be found.
"""
- def searchInterface(search_string):
- """Return the interfaces that match the search string.
+ def searchInterface(search_string='', base=None):
+ """Return the interfaces that match the search criteria
+
+ If a search string is given, only interfaces that contain the
+ string in their documentation will be returned.
+
+ If base is given, only interfaces that equal or extend base
+ will be returned.
+
"""
- def searchInterfaceIds(search_string):
- """Return the ids of the interfaces that match the search string.
+ def searchInterfaceIds(search_string='', base=None):
+ """Return the ids of the interfaces that match the search criteria.
+
+ See searchInterface
+
"""
=== Zope3/lib/python/Zope/App/ComponentArchitecture/InterfaceField.py 1.3 => 1.4 ===
--- Zope3/lib/python/Zope/App/ComponentArchitecture/InterfaceField.py:1.3 Thu Dec 5 08:27:02 2002
+++ Zope3/lib/python/Zope/App/ComponentArchitecture/InterfaceField.py Thu Dec 19 15:19:05 2002
@@ -17,7 +17,7 @@
"""
from Zope.Schema.IField import IValueSet
-from Zope.Schema import ValueSet
+from Zope.Schema import ValueSet, Field
from Interface import Interface
from Interface.IInterface import IInterface
from Zope.Schema.Exceptions import ValidationError
@@ -25,11 +25,22 @@
class IInterfaceField(IValueSet):
u"""Fields with Interfaces as values
"""
+
+ type = Field(title=u"Base type",
+ description=u"All values must extend (or be) this type",
+ default=Interface,
+ )
class InterfaceField(ValueSet):
__doc__ = IInterfaceField.__doc__
__implements__ = IInterfaceField
+ type = Interface
+
+ def __init__(self, type=Interface, *args, **kw):
+ super(InterfaceField, self).__init__(*args, **kw)
+ self.validate(type)
+ self.type = type
def _validate(self, value):
super(InterfaceField, self)._validate(value)
@@ -37,4 +48,7 @@
if not IInterface.isImplementedBy(value):
raise ValidationError("Not an interface", value)
+ if not value.extends(self.type, 0):
+ raise ValidationError("Does not extend", value, self.type)
+
=== Zope3/lib/python/Zope/App/ComponentArchitecture/InterfaceService.py 1.2 => 1.3 ===
--- Zope3/lib/python/Zope/App/ComponentArchitecture/InterfaceService.py:1.2 Tue Nov 19 18:15:14 2002
+++ Zope3/lib/python/Zope/App/ComponentArchitecture/InterfaceService.py Thu Dec 19 15:19:05 2002
@@ -16,8 +16,6 @@
"""
from IGlobalInterfaceService import IGlobalInterfaceService
from Zope.ComponentArchitecture.Exceptions import ComponentLookupError
-import string
-
class InterfaceService:
__implements__ = IGlobalInterfaceService
@@ -39,41 +37,44 @@
else:
return default
- def searchInterface(self, search_string):
- search_result = []
+ def searchInterfaceIds(self, search_string='', base=None):
+ result = []
+
+ data = self.__data
+ search_string = search_string.lower()
- for id in self.__data.keys():
+ for id in data:
+ interface, doc = data[id]
+
if search_string:
- if string.find(string.lower(self.__data[id][1]),
- string.lower(search_string)
- ) >= 0:
- search_result.append(self.__data[id][0])
- else:
- search_result.append(self.__data[id][0])
+ if doc.find(search_string) < 0:
+ continue
- return search_result
+ if base is not None and not interface.extends(base, 0):
+ continue
- def searchInterfaceIds(self, search_string):
- search_result = []
+ result.append(id)
- for id in self.__data.keys():
- if search_string:
- if string.find(string.lower(self.__data[id][1]),
- string.lower(search_string)
- ) >= 0:
- search_result.append(id)
- else:
- search_result.append(id)
+ return result
- return search_result
+ def searchInterface(self, search_string='', base=None):
+ data = self.__data
+ return [data[id][0]
+ for id in self.searchInterfaceIds(search_string, base)]
def _getAllDocs(self,interface):
- docs = str(interface.__name__)+'\n'+str(interface.__doc__)
- for name in interface.names():
- docs = docs + '\n' + str(interface.getDescriptionFor(name).__doc__)
- return docs
+ docs = [str(interface.__name__).lower(),
+ str(interface.__doc__).lower()]
+
+ for name in interface:
+ docs.append(str(interface.getDescriptionFor(name).__doc__).lower())
+
+ return '\n'.join(docs)
def provideInterface(self, id, interface):
+ if not id:
+ id = "%s.%s" % (interface.__module__, interface.__name__)
+
self.__data[id]=(interface, self._getAllDocs(interface))
_clear = __init__
=== Zope3/lib/python/Zope/App/ComponentArchitecture/configure.zcml 1.8 => 1.9 ===
--- Zope3/lib/python/Zope/App/ComponentArchitecture/configure.zcml:1.8 Wed Dec 4 04:54:04 2002
+++ Zope3/lib/python/Zope/App/ComponentArchitecture/configure.zcml Thu Dec 19 15:19:05 2002
@@ -55,6 +55,8 @@
component=
'Zope.App.ComponentArchitecture.InterfaceService.interfaceService' />
+ <interface interface="Interface.Interface" />
+
<include package="Zope.App.ComponentArchitecture.Browser" />
</zopeConfigure>
=== Zope3/lib/python/Zope/App/ComponentArchitecture/meta.zcml 1.2 => 1.3 ===
--- Zope3/lib/python/Zope/App/ComponentArchitecture/meta.zcml:1.2 Sun Dec 15 15:16:37 2002
+++ Zope3/lib/python/Zope/App/ComponentArchitecture/meta.zcml Thu Dec 19 15:19:05 2002
@@ -2,11 +2,11 @@
<directives namespace="http://namespaces.zope.org/zope">
- <directive
- name="adapter"
- attributes="factory provides for permission name"
- handler="Zope.App.ComponentArchitecture.metaConfigure.adapter"
- />
+ <directive name="interface" attributes="interface"
+ handler="Zope.App.ComponentArchitecture.metaConfigure.interface" />
+
+ <directive name="adapter" attributes="factory provides for permission"
+ handler="Zope.App.ComponentArchitecture.metaConfigure.adapter" />
<directive name="utility" attributes="component provides permission name"
handler="Zope.App.ComponentArchitecture.metaConfigure.utility" />
=== Zope3/lib/python/Zope/App/ComponentArchitecture/metaConfigure.py 1.5 => 1.6 ===
--- Zope3/lib/python/Zope/App/ComponentArchitecture/metaConfigure.py:1.5 Sun Dec 15 15:16:37 2002
+++ Zope3/lib/python/Zope/App/ComponentArchitecture/metaConfigure.py Thu Dec 19 15:19:05 2002
@@ -52,6 +52,17 @@
method=getattr(getServiceManager(None), methodName)
method(*args, **kwargs)
+def interface(_context, interface):
+ interface = _context.resolve(interface)
+ return [
+ Action(
+ discriminator = None,
+ callable = handler,
+ args = ('Interfaces', 'provideInterface', '', interface)
+ ),
+ ]
+
+
def adapter(_context, factory, provides, for_=None, permission=None, name=''):
if for_ is not None: for_ = _context.resolve(for_)
provides = _context.resolve(provides)
@@ -72,8 +83,7 @@
Action(
discriminator = None,
callable = handler,
- args = ('Interfaces', 'provideInterface',
- provides.__module__+'.'+provides.__name__, provides)
+ args = ('Interfaces', 'provideInterface', '', provides)
)
]
if for_ is not None:
@@ -82,8 +92,7 @@
Action(
discriminator = None,
callable = handler,
- args = ('Interfaces', 'provideInterface',
- for_.__module__+'.'+for_.__name__, for_)
+ args = ('Interfaces', 'provideInterface', '', for_)
)
)