~ubuntu-branches/ubuntu/utopic/zope.container/utopic

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
Metadata-Version: 1.0
Name: zope.container
Version: 3.12.0
Summary: Zope Container
Home-page: http://pypi.python.org/pypi/zope.container
Author: Zope Foundation and Contributors
Author-email: zope-dev@zope.org
License: ZPL 2.1
Description: This package define interfaces of container components, and provides
        container implementations such as a BTreeContainer and
        OrderedContainer, as well as the base class used by ``zope.site.folder``
        for the Folder implementation.
        
        
        .. contents::
        
        
        =========================
         Containment constraints
        =========================
        
        Containment constraints allow us to express restrictions on the types
        of items that can be placed in containers or on the types of
        containers an item can be placed in.  We express these constraints in
        interfaces.  Let's define some container and item interfaces:
        
            >>> from zope.container.interfaces import IContainer
            >>> from zope.location.interfaces import IContained
            >>> from zope.container.constraints import containers, contains
        
            >>> class IBuddyFolder(IContainer):
            ...     contains('.IBuddy')
        
        
        In this example, we used the contains function to declare that objects
        that provide IBuddyFolder can only contain items that provide IBuddy.
        Note that we used a string containing a dotted name for the IBuddy
        interface. This is because IBuddy hasn't been defined yet.  When we
        define IBuddy, we can use IBuddyFolder directly:
        
            >>> class IBuddy(IContained):
            ...     containers(IBuddyFolder)
        
        
        Now, with these interfaces in place, we can define Buddy and
        BuddyFolder classes and verify that we can put buddies in buddy
        folders:
        
            >>> from zope import interface
        
            >>> class Buddy:
            ...     interface.implements(IBuddy)
        
            >>> class BuddyFolder:
            ...     interface.implements(IBuddyFolder)
        
            >>> from zope.container.constraints import checkObject, checkFactory
            >>> from zope.component.factory import Factory
        
            >>> checkObject(BuddyFolder(), 'x', Buddy())
            >>> checkFactory(BuddyFolder(), 'x', Factory(Buddy))
            True
        
        If we try to use other containers or folders, we'll get errors:
        
            >>> class Container:
            ...     interface.implements(IContainer)
        
            >>> class Contained:
            ...     interface.implements(IContained)
        
            >>> checkObject(Container(), 'x', Buddy())
            ... # doctest: +ELLIPSIS
            Traceback (most recent call last):
            InvalidContainerType: ...
        
            >>> checkFactory(Container(), 'x', Factory(Buddy))
            False
        
            >>> checkObject(BuddyFolder(), 'x', Contained())
            ... # doctest: +ELLIPSIS
            Traceback (most recent call last):
            InvalidItemType: ...
        
            >>> checkFactory(BuddyFolder(), 'x', Factory(Contained))
            False
        
        In the example, we defined the container first and then the items.  We
        could have defined these in the opposite order:
        
            >>> class IContact(IContained):
            ...     containers('.IContacts')
        
            >>> class IContacts(IContainer):
            ...     contains(IContact)
        
            >>> class Contact:
            ...     interface.implements(IContact)
        
            >>> class Contacts:
            ...     interface.implements(IContacts)
        
            >>> checkObject(Contacts(), 'x', Contact())
        
            >>> checkFactory(Contacts(), 'x', Factory(Contact))
            True
        
            >>> checkObject(Contacts(), 'x', Buddy())
            ... # doctest: +ELLIPSIS
            Traceback (most recent call last):
            InvalidItemType: ...
        
            >>> checkFactory(Contacts(), 'x', Factory(Buddy))
            False
        
        The constraints prevent us from moving a container beneath itself (either into
        itself or another folder beneath it):
        
            >>> container = Container()
            >>> checkObject(container, 'x', container)
            Traceback (most recent call last):
            TypeError: Cannot add an object to itself or its children.
        
            >>> import zope.location.interfaces
            >>> import zope.interface
            >>> subcontainer = Container()
            >>> zope.interface.directlyProvides(subcontainer,
            ...     zope.location.interfaces.ILocation)
            >>> subcontainer.__parent__ = container
            >>> checkObject(subcontainer, 'x', container)
            Traceback (most recent call last):
            TypeError: Cannot add an object to itself or its children.
        
        
        =======
        CHANGES
        =======
        
        3.12.0 (2010-12-14)
        -------------------
        
        - Fix detection of moving folders into itself or a subfolder of itself.
          (#118088)
        
        - Fixed ZCML-related tests and dependencies.
        
        - Added ``zcml`` extra dependencies.
        
        3.11.1 (2010-04-30)
        -------------------
        
        - Prefer the standard libraries doctest module to the one from zope.testing.
        
        - Added compatibility with ZODB3 3.10 by importing the IBroken interface from
          it directly. Once we can rely on the new ZODB3 version exclusively, we can
          remove the dependency onto the zope.broken distribution.
        
        - Never fail if the suggested name is in a wrong type (#227617)
        
        - ``checkName`` first checks the parameter type before the emptiness.
        
        3.11.0 (2009-12-31)
        -------------------
        
        - Copy two trivial classes from zope.cachedescriptors into this package, which
          allows us to remove that dependency. We didn't actually use any caching
          properties as the dependency suggested.
        
        3.10.1 (2009-12-29)
        -------------------
        
        - Moved zope.copypastemove related tests into that package.
        
        - Removed no longer used zcml prefix from the configure file.
        
        - Stop importing DocTestSuite from zope.testing.doctestunit. Fixes
          compatibility problems with zope.testing 3.8.4.
        
        3.10.0 (2009-12-15)
        -------------------
        
        - Break testing dependency on zope.app.testing.
        
        - Break testing dependency on zope.app.dependable by moving the code and tests
          into that package.
        
        - Import ISite from zope.component after it was moved there from
          zope.location.
        
        3.9.1 (2009-10-18)
        ------------------
        
        - Rerelease 3.9.0 as it had a broken Windows 2.6 egg.
        
        - Marked as part of the ZTK.
        
        3.9.0 (2009-08-28)
        ------------------
        
        - Previous releases should be versioned 3.9.0 as they are not pure bugfix
          releases and worth a "feature" release, increasing feature version.
          
          Packages that depend on any changes introduced in version 3.8.2 or 3.8.3
          should depend on version 3.9 or greater.
        
        3.8.3 (2009-08-27)
        ------------------
        
        - Move IXMLRPCPublisher ZCML registrations for containers from
          zope.app.publisher.xmlrpc to zope.container for now.
        
        3.8.2 (2009-05-17)
        ------------------
        
        - Rid ourselves of ``IContained`` interface.  This interface was moved
          to ``zope.location.interfaces``.  A b/w compat import still exists
          to keep old code running.  Depend on ``zope.location``>=3.5.4.
        
        - Rid ourselves of the implementations of ``IObjectMovedEvent``,
          ``IObjectAddedEvent``, ``IObjectRemovedEvent`` interfaces and
          ``ObjectMovedEvent``, ``ObjectAddedEvent`` and
          ``ObjectRemovedEvent`` classes.  B/w compat imports still exist.
          All of these were moved to ``zope.lifecycleevent``. Depend on
          ``zope.lifecycleevent``>=3.5.2.
        
        - Fix a bug in OrderedContainer where trying to set the value for a
          key that already exists (duplication error) would actually delete the
          key from the order, leaving a dangling reference.
        
        - Partially break dependency on ``zope.traversing`` by disusing
          zope.traversing.api.getPath in favor of using
          ILocationInfo(object).getPath().  The rest of the runtime
          dependencies on zope.traversing are currently interface
          dependencies.
        
        - Break runtime dependency on ``zope.app.dependable`` by using a zcml
          condition on the qsubscriber ZCML directive that registers the
          CheckDependency handler for IObjectRemovedEvent.  If
          ``zope.app.dependable`` is not installed, this subscriber will never
          be registered.  ``zope.app.dependable`` is now a testing dependency
          only.
        
        3.8.1 (2009-04-03)
        ------------------
        
        - Fixed misspackaged 3.8.0
        
        
        3.8.0 (2009-04-03)
        ------------------
        
        - Change configure.zcml to not depend on zope.app.component.
          Fixes: https://bugs.launchpad.net/bugs/348329
        
        - Moved the declaration of ``IOrderedContainer.updateOrder``  to a new, basic
          ``IOrdered`` interface and let ``IOrderedContainer`` inherit it. This allows
          easier reuse of the declaration.
        
        3.7.2 (2009-03-12)
        ------------------
        
        - Fix: added missing ComponentLookupError, missing since revision 95429 and 
          missing in last release.
        
        - Adapt to the move of IDefaultViewName from zope.component.interfaces
          to zope.publisher.interfaces.
        
        - Add support for reserved names for containers. To specify reserved
          names for some container, you need to provide an adapter from the
          container to the ``zope.container.interfaces.IReservedNames`` interface.
          The default NameChooser is now also aware of reserved names.
        
        3.7.1 (2009-02-05)
        ------------------
        
        - Raise more "Pythonic" errors from ``__setitem__``, losing the dependency
          on ``zope.exceptions``:
        
          o ``zope.exceptions.DuplicationError`` -> ``KeyError``
        
          o ``zope.exceptions.UserError`` -> ``ValueError``
        
        - Moved import of ``IBroken`` interface to use new ``zope.broken``
          package, which has no dependencies beyond ``zope.interface``.
        
        - Made ``test`` part pull in the extra test requirements of this package.
        
        - Split the ``z3c.recipe.compattest`` configuration out into a new file,
          ``compat.cfg``, to reduce the burden of doing standard unit tests.
        
        - Stripped out bogus develop eggs from ``buildout.cfg``.
        
        3.7.0 (2009-01-31)
        ------------------
        
        - Split this package off ``zope.app.container``. This package is
          intended to have far less dependencies than ``zope.app.container``.
        
        - This package also contains the container implementation that
          used to be in ``zope.app.folder``.
        
Keywords: zope container
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Zope Public License
Classifier: Programming Language :: Python
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Framework :: Zope3