Skip to main content

Zope Container

Project 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.

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
>>> @interface.implementer(IBuddy)
... class Buddy:
...     pass
>>> @interface.implementer(IBuddyFolder)
... class BuddyFolder:
...     pass
>>> 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:

>>> @interface.implementer(IContainer)
... class Container:
...     pass
>>> @interface.implementer(IContained)
... class Contained:
...     pass
>>> 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)
>>> @interface.implementer(IContact)
... class Contact:
...     pass
>>> @interface.implementer(IContacts)
... class Contacts:
...     pass
>>> 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

4.0.0a1 (2013-02-20)

  • Added support for Python 3.3.

  • Made Folder class inherit from BTreeContainer class, so that the IContainer interface does not need to be re-implemented. Added a data attribute for BBB.

  • Replaced deprecated zope.component.adapts usage with equivalent zope.component.adapter decorator.

  • Replaced deprecated zope.interface.implements usage with equivalent zope.interface.implementer decorator.

  • Dropped support for Python 2.4 and 2.5.

  • Send IContainerModifiedEvent after the container is modified (LP#705600).

  • Preserve the original exception traceback in OrderedContainer.__setitem__.

  • Handle Broken Objects more gracefully

  • Fix a bug that made it impossible to store None values in containers (LP#1070719).

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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zope.container-4.0.0a1.zip (82.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

zope.container-4.0.0a1.win-amd64-py2.7.exe (310.2 kB view details)

Uploaded Source

zope.container-4.0.0a1.win-amd64-py2.6.exe (310.2 kB view details)

Uploaded Source

zope.container-4.0.0a1.win32-py2.7.exe (281.8 kB view details)

Uploaded Source

zope.container-4.0.0a1.win32-py2.6.exe (281.8 kB view details)

Uploaded Source

zope.container-4.0.0a1-py2.7-win-amd64.egg (130.1 kB view details)

Uploaded Egg

zope.container-4.0.0a1-py2.7-win32.egg (129.2 kB view details)

Uploaded Egg

zope.container-4.0.0a1-py2.6-win-amd64.egg (130.3 kB view details)

Uploaded Egg

zope.container-4.0.0a1-py2.6-win32.egg (129.4 kB view details)

Uploaded Egg

File details

Details for the file zope.container-4.0.0a1.zip.

File metadata

  • Download URL: zope.container-4.0.0a1.zip
  • Upload date:
  • Size: 82.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for zope.container-4.0.0a1.zip
Algorithm Hash digest
SHA256 7f78ca3466de9409a2ea9630e1fbac5020bde573c9b2e446ca0ced54ba3f2833
MD5 7e15c0113beb2bfd7e77f2846901fffa
BLAKE2b-256 6bc8925bd127f46c4716192ca25d3ef9acb5901a5ccc20e80ad39ec8335184af

See more details on using hashes here.

File details

Details for the file zope.container-4.0.0a1.win-amd64-py2.7.exe.

File metadata

File hashes

Hashes for zope.container-4.0.0a1.win-amd64-py2.7.exe
Algorithm Hash digest
SHA256 850d0c982bcea8eab4df0d6438ea48fb59451f02329974eb6d73fa4066e5caf0
MD5 47298865f6bb24b4a87e80435b6b1d12
BLAKE2b-256 3705238edf109955eaf12afc2b6b64ee1dc0fe0731342ba9148ddb4165adc3c3

See more details on using hashes here.

File details

Details for the file zope.container-4.0.0a1.win-amd64-py2.6.exe.

File metadata

File hashes

Hashes for zope.container-4.0.0a1.win-amd64-py2.6.exe
Algorithm Hash digest
SHA256 42c7b961a1a6f3ea3c47220270c3fcb7e77eb1da27090043ad379a44d630b751
MD5 6d7fd5b0e3e6598fc2e587b990f82785
BLAKE2b-256 fa9e3e14aa32e32bbd2dafc0b566688e5cd9c900ee9d77f8e8df15d762acec71

See more details on using hashes here.

File details

Details for the file zope.container-4.0.0a1.win32-py2.7.exe.

File metadata

File hashes

Hashes for zope.container-4.0.0a1.win32-py2.7.exe
Algorithm Hash digest
SHA256 6e40bf51cd989fd6dc5ea29dac43a79ce61e03d4d3c0a633d9c1ba1c460faf1e
MD5 fdce9ec911734e9882faf4eee7110c68
BLAKE2b-256 8e6b9de79d5a3634d5ef89e00b8ee3d194bfffc70acf5c856cb34952468a0372

See more details on using hashes here.

File details

Details for the file zope.container-4.0.0a1.win32-py2.6.exe.

File metadata

File hashes

Hashes for zope.container-4.0.0a1.win32-py2.6.exe
Algorithm Hash digest
SHA256 becf8b37f213481cb9862707c63c9b6b5c73ed377a426642ee892c16ef2fa1cb
MD5 959a56db42f23c88bab8a42b686b6a3c
BLAKE2b-256 60b32480492dc3094df978079dbcc7e0b99999ea784f2105d8c54f18fd919db9

See more details on using hashes here.

File details

Details for the file zope.container-4.0.0a1-py2.7-win-amd64.egg.

File metadata

File hashes

Hashes for zope.container-4.0.0a1-py2.7-win-amd64.egg
Algorithm Hash digest
SHA256 3f8f89176727fba54723e7859ccb1ee78db944492445be38788edc451072bcad
MD5 df7db111258020da06cfca35a54623cc
BLAKE2b-256 78f8534e9797bc72c84417ffbfe5d531acd152f99c0af8dd93652f93a15462bc

See more details on using hashes here.

File details

Details for the file zope.container-4.0.0a1-py2.7-win32.egg.

File metadata

File hashes

Hashes for zope.container-4.0.0a1-py2.7-win32.egg
Algorithm Hash digest
SHA256 aae48b19c206d13ff593b87042b9d80fa24cc6d7db990f40f9cfd5befd3dc0ba
MD5 27384fbae39d0d134da29431418e0f23
BLAKE2b-256 658cafb28b77b9770e9987d451e0081c16496a56f024ccf57ea76bf9db5d32c5

See more details on using hashes here.

File details

Details for the file zope.container-4.0.0a1-py2.6-win-amd64.egg.

File metadata

File hashes

Hashes for zope.container-4.0.0a1-py2.6-win-amd64.egg
Algorithm Hash digest
SHA256 5cfeca555c0f91c214b7384ee0d58eccb71f03a395fd602444180b505b8568fd
MD5 3912e534441cbb62ed4368ae29851109
BLAKE2b-256 1c929518581214b2ca97a5c540cb29bb0b4633658f35d306042e8c23d3a74e1d

See more details on using hashes here.

File details

Details for the file zope.container-4.0.0a1-py2.6-win32.egg.

File metadata

File hashes

Hashes for zope.container-4.0.0a1-py2.6-win32.egg
Algorithm Hash digest
SHA256 d322889df157866adfd3ee83b511990d47aec75e839b3a39d0b8f7c4ba8ed1cf
MD5 db677c698080ea4865a6ebed1a6843e1
BLAKE2b-256 15fd268fd085e2bcf4265804e8bbe04fead6d95537a221ec53636b37044151a6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page