plone.dexterity


Nameplone.dexterity JSON
Version 3.0.6 PyPI version JSON
download
home_pagehttps://github.com/plone/plone.dexterity
SummaryFramework for content types as filesystem code and TTW (Zope/CMF/Plone)
upload_time2024-04-25 19:34:58
maintainerThe Plone Release Team and Community
docs_urlNone
authorMartin Aspeli
requires_python>=3.8
licenseGPL version 2
keywords plone dexterity contenttypes
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            Dexterity
=========

    "Same, same, but different"

Dexterity is a system for building content types, both through-the-web and as filesystem code.
It is aimed at Plone, although this package should work with plain Zope + CMF systems.

Key use cases
-------------

Dexterity wants to make some things really easy. These are:

- Create a "real" content type entirely through-the-web without having to know programming.

- As a business user, create a schema using visual or through-the-web tools, and augment it with adapters, event handlers, and other Python code written on the filesystem by a Python programmer.

- Create content types in filesystem code quickly and easily, without losing the ability to customise any aspect of the type and its operation later if required.

- Support general "behaviours" that can be enabled on a custom type in a declarative fashion.
  Behaviours can be things like title-to-id naming, support for locking or versioning, or sets of standard metadata with associated UI elements.

- Easily package up and distribute content types defined through-the-web, on the filesystem, or using a combination of the two.

Philosophy
----------

Dexterity is designed with a specific philosophy in mind.
This can be summarised as follows:

Reuse over reinvention
   As far as possible, Dexterity should reuse components and technologies that already exist.
   More importantly, however, Dexterity should reuse *concepts* that exist elsewhere.
   It should be easy to learn Dexterity by analogy, and to work with Dexterity types using familiar APIs and techniques.

Small over big
   Mega-frameworks be damned.
   Dexterity consists of a number of specialised packages, each of which is independently tested and reusable.
   Furthermore, packages should have as few dependencies as possible, and should declare their dependencies explicitly.
   This helps keep the design clean and the code manageable.

Natural interaction over excessive generality
   The Dexterity design was driven by several use cases (see docs/Design.txt) that express the way in which we want people to work with Dexterity.
   The end goal is to make it easy to get started, but also easy to progress from an initial prototype to a complex set of types and associated behaviours through step-wise learning and natural interaction patterns.
   Dexterity aims to consider its users - be they business analysts, light integrators, or Python developers, and be they new or experienced - and cater to them explicitly with obvious, well-documented, natural interaction patterns.

Real code over generated code
   Generated code is difficult to understand and difficult to debug when it  doesn't work as expected.
   There is rarely, if ever, any reason to scribble methods or 'exec' strings of Python code.

ZCA over old Zope 2
   As many components as possible should work with plain ZCA (Zope Component Architecture, ``zope.*`` packages with origins in Zope 3).
   Although Dexterity does not pretend to work with non-CMF systems,
   Even where there are dependencies on Zope 2, CMF or Plone, they should - as far as is practical - follow ZCA techniques and best practices.
   Many operations (e.g. managing objects in a folder, creating new objects or manipulating objects through a defined schema) are better designed in
   ZCA than they were in Zope 2.

Zope concepts over new paradigms
   We want Dexterity to be "Zope-ish" (and really, "ZCA-ish").
   Zope is a mature, well-designed (well, mostly) and battle tested platform.
   We do not want to invent brand new paradigms and techniques if we can help it.

Automated testing over wishful thinking
   "Everything" should be covered by automated tests.
   Dexterity necessarily has a lot of moving parts.
   Untested moving parts tend to come lose and fall on people's heads.
   Nobody likes that.

What's it all about?
--------------------

With the waffle out of the way, let's look in a bit more detail about what
makes up a "content type" in the Dexterity system.

The model
   The Dexterity "model" describes a type's schemata and metadata associated with those schemata.
   A schema is just a series of fields that can be used to render add/edit forms and introspect an object of the given type.
   The metadata storage is extensible via the component architecture.
   Typical forms of metadata include UI hints such as specifying the type of widget to use when rendering a particular field, and per-field security settings.

   The model is described in also XML.
   Though at runtime it is an instance of an object providing the IModel interface from ``plone.supermodel``.
   Schemata in the model are interfaces with ``zope.schema`` fields.

   The model can exist purely as data in the ZODB if a type is created through-the-web.
   Alternatively, it can be loaded from a file.
   The XML representation is intended to be human-readable and self-documenting.
   It is also designed with tools like `AGX  <http://agx.me>`_ in mind, that can generate models from a visual representation.

The schema
   All content types have at least one (unnamed) schema.
   A schema is simply an Interface with zope.schema fields.
   The schema can be specified in Python code (in which case it is simply referenced by name), or it can be loaded from an XML model.

   The unnamed schema is also known as the IContentType schema.
   In that, the schema interface will provide the zope IContentType interface.
   This means that if you call ``queryContentType()`` on a Dexterity content object, you should get back its unnamed schema, and that schema should be provided by the object that was queried.
   Thus, the object will directly support the attributes promised by the schema.
   This makes Dexterity content objects "Pythonic" and easy to work with.

The class
   Of course, all content objects are instances of a particular class.
   It is easy to provide your own class, and Dexterity has convenient base classes for you to use.
   However, many types will not need a class at all.
   Instead, they will use the standard Dexterity "Item" and "Container" classes.

   Dexterity's content factory will initialise an object of one of these classes with the fields in the type's content schema.
   The factory will ensure that objects provide the relevant interfaces, including the schema interface itself.

   The preferred way to add behaviour and logic to Dexterity content objects is via adapters.
   In this case, you will probably want a filesystem version of the schema interface (this can still be loaded from XML if you
   wish, but it will have an interface with a real module path) that you  can register components against.

The factory
   Dexterity content is constructed using a standard zope IFactory named utility.
   By convention the factory utility has the same name as the portal_type of the content type.

   When a Dexterity FTI (Factory Type Information, see below) is created, an appropriate factory will be registered as a local utility unless one    with that name already exists.

   The default factory is capable of initialising a generic ``Item`` or  ``Container`` object to exhibit a content type schema and have the security and other aspects specified in the type's model.
   You can use this if you wish, or provide your own factory.

Views
   Dexterity will by default create an:
   - add view (registered as a local utility, since it needs to take the portal_type of the content type into account when determining what fields to render) and an
   - edit view (registered as a generic, global view, which inspects the context's portal_type at runtime) for each type.
   - A default main view exists, which simply outputs the fields set on the context.

   To register new views, you will normally need a filesystem schema interface.
   You can then register views for this interface as you normally would.

   If you need to override the default add view, create a view for IAdding with a name corresponding to the portal_type of the content type.
   This will prevent Dexterity from registering a local view with the same name when the FTI is created.

The Factory Type Information (FTI)
   The FTI holds various information about the content type.
   Many operations performed by the Dexterity framework begin by looking up the type's FTI to find out some information about the type.

   The FTI is an object stored in portal_types in the ZMI.
   Most settings can be changed through the web.
   See the IDexterityFTI interface for more information.

   When a Dexterity FTI is created, an event handler will create a few local components, including the factory utility and add view for the new type. The FTI itself is also registered as a named utility, to make it easy to look up using syntax like::

       getUtility(IDexterityFTI, name=portal_type)

   The FTI is also fully importable and exportable using GenericSetup.
   Thus, the easiest way to create and distribute a content type is to create a new FTI, set some properties (including a valid XML model,
   which can be entered TTW if there is no file or schema interface to use), and export it as a GenericSetup extension profile.

Behaviors
   Behaviors are a way write make reusable bits of functionality that can be toggled on or off on a per-type basis.
   Examples may include common metadata, or common functionality such as locking, tagging or ratings.

   Behaviors are implemented using the plone.behavior package.
   See its documentation for more details about how to write your own behaviors.

   In Dexterity, behaviors can "inject" fields into the standard add and edit forms, and may provide marker interfaces for newly created objects.
   See the example.dexterity package for an example of a behavior that provides form fields.

   In use, a behavior is essentially just an adapter that only appears to be registered if the behavior is enabled in the FTI of the object being adapted.
   Thus, if you have a behavior described by my.package.IMyBehavior, you'll typically interact with this behavior by doing::

       my_behavior = IMyBehavior(context, None)
       if my_behavior is not None:
           ...

   The enabled behaviors for a given type are kept in the FTI, as a list of dotted interface names.

The Dexterity Ecosystem
-----------------------

The Dexterity system comprises a number of packages, most of which are
independently reusable. In addition, Dexterity uses many components from
Zope and CMF.

The most important packages are:

`plone.dexterity <https://pypi.python.org/pypi/plone.alterego>`_ (CMF)
   **this package** Defines the FTI and content classes.
   It provides basic views (with forms based on z3c.form), handles security and so on.
   It also provides components to orchestrate the various functionality provided by the packages above in order to bring the Dexterity system together.

`plone.behavior <https://pypi.python.org/pypi/plone.behavior>`_ (ZCA)
   Supports "conditional" adapters. A product author can write and register  a generic behaviour that works via a simple adapter.
   The adapter will appear to be registered for types that have the named behaviour available.

   Dexterity wires this up in such a way that the list of enabled behaviours is stored as a property in the FTI.
   This makes it easy to add/remove behaviours through the web, or using GenericSetup at install time.

`plone.folder <https://pypi.python.org/pypi/plone.folder>`_ (CMF)
   This is an implementation of an ordered, BTree-backed folder, with ZCA
   dictionary-style semantics for managing content items inside the folder.
   The standard Dexterity 'Container' type uses plone.folder as its base.

`plone.autoform <https://pypi.python.org/pypi/plone.autoform>`_ (CMF, z3cform)
   Contains helper functions to construct forms based on tagged values stored on schema interfaces.

`plone.supermodel <https://pypi.python.org/pypi/plone.supermodel>`_ (ZCA)
   Supports parsing and serialisation of interfaces from/to XML.
   The XML format is based directly on the interfaces that describe zope.schema type fields.
   Thus it is easily extensible to new field types.
   This has the added benefit that the interface documentation in the zope.schema package applies to the XML format as well.

   Supermodel is extensible via adapters and XML namespaces.
   plone.dexterity uses this to allow security and UI hints to be embedded as metadata in the XML model.

`plone.alterego <https://pypi.python.org/pypi/plone.alterego>`_ (Python)
   Support for dynamic modules that create objects on the fly.
   Dexterity uses this to generate "real" interfaces for types that exist only through-the-web.
   This allows these types to have a proper IContentType schema.
   It also allows local adapters to be registered for this interface (e.g. a custom view with a template defined through the web).

   Note that if a type uses a filesystem interface (whether written manually or loaded from an XML model), this module is not used.

`plone.app.dexterity <https://pypi.python.org/pypi/plone.app.dexterity>`_ (Plone)
   This package contains all Plone-specific aspects of Dexterity, including Ploneish UI components, behaviours and defaults.


Developer Manual
----------------

The `Dexterity Developer Manual <http://docs.plone.org/external/plone.app.dexterity/docs/index.html>`_ is a complete documentation with practical examples and part of the `Official Plone Documentation <http://docs.plone.org/>`_.


Source Code
===========

Contributors please read the document `Contributing to Plone <https://6.docs.plone.org/contributing/index.html>`_

Sources are at the `Plone code repository hosted at Github <https://github.com/plone/plone.dexterity>`_.

Changelog
=========


.. You should *NOT* be adding new change log entries to this file.
   You should create a file in the news directory instead.
   For helpful instructions, please see:
   https://github.com/plone/plone.releaser/blob/master/ADD-A-NEWS-ITEM.rst

.. towncrier release notes start

3.0.6 (2024-04-25)
------------------

Bug fixes:


- Fix tests to work with Zope master which expects requests to have an `ensure_publishable` method.
  [maurits] (#1202)


3.0.5 (2024-02-27)
------------------

Bug fixes:


- Fix a traversal error that happens when traversing a WebDAV resource and the virtual host monster is used.
  [ale-rt] (#195)


3.0.4 (2024-01-22)
------------------

Internal:


- Update configuration files.
  [plone devs] (6e36bcc4)


3.0.3 (2023-09-01)
------------------

Bug fixes:


- Respect locally allowed types when pasting objects [cekk] (#146)
- Fix a memory leak as reported in https://github.com/plone/Products.CMFPlone/issues/3829, changing interface declaration type as suggested by @d-maurer in https://github.com/plone/plone.dexterity/issues/186 [mamico] (#187)


Internal:


- Update configuration files.
  [plone devs] (55bda5c9)


3.0.2 (2023-03-14)
------------------

Bug fixes:


- Type error is removed and none is returned.
  In this modified version of the code, if no primary field adapter is found, the fieldname and field attributes are set to None.
  The value property checks whether the field attribute is None, and returns None if it is, instead of raising an error.
  [Coder-aadarsh] (#59)


Internal:


- Update configuration files.
  [plone devs] (13d8d6c0)


Tests


- Fix webdav tests to pass with Zope 5.8 and the master branch.
  [maurits] (#844)


3.0.1 (2023-02-08)
------------------

Bug fixes:


- Configure packages with plone/meta.
  [gforcada] (#1)


3.0.0 (2022-12-02)
------------------

Bug fixes:


- Final release for Plone 6.0.0 (#600)


3.0.0b2 (2022-08-30)
--------------------

Bug fixes:


- Check code quality with fresh plone/code-quality 2.0.0.
  [maurits+erico] (#171)


3.0.0b1 (2022-07-14)
--------------------

Breaking changes:


- Remove long deprecated imports and fallbacks.
  [jensens, maurits] (#161)
- Python 3.7+ only, drop Python 2 support.
  [jensens, maurits] (#161)


Bug fixes:


- Use Bootstrap 5 classes for buttons.
  [jensens] (#161)


3.0.0a3 (2022-05-24)
--------------------

Bug fixes:


- Added missing icon_expr to default actions.
  [agitator] (#167)


3.0.0a2 (2022-01-25)
--------------------

Bug fixes:


- Really always use a lines property for behaviors, no longer the deprecated ulines.
  This improves the fix from the previous release.
  Part of `issue 3305 <https://github.com/plone/Products.CMFPlone/issues/3305>`_.
  [maurits] (#3305)


3.0.0a1 (2022-01-07)
--------------------

Breaking changes:


- Plone 6: Always use a lines property for behaviors, no longer the deprecated ulines.
  Part of `issue 3305 <https://github.com/plone/Products.CMFPlone/issues/3305>`_.
  [maurits] (#3305)


2.10.5 (2021-11-25)
-------------------

Bug fixes:


- Incorporate ``plone.synchronize`` its one and only simple ``synchronized`` function into ``plone.dexterity``, which were the only consumer.
  Also moves the test. Removes a dependency and a package to look after.
  [jensens] (#157)
- Avoid setting a default value on methods.
  If a Schema Interface has a method in it, i.e. to be used as a
  constraint for another field, etc. the `default_from_schema` function
  would trip over it while trying to get a default value for it.
  [gforcada, jensens] (#158)
- Fixes schema name generated in Python 2. [wesleybl] (#159)


2.10.4 (2021-10-07)
-------------------

Bug fixes:


- Catch maximum recursion error when lookup FTI
  [petschki] (#155)
- Optimize local components access by shortcutting `utilities` attribute access. [jensens] (#156)


2.10.3 (2021-09-01)
-------------------

Bug fixes:


- Fix ft._updateProperty so it doesn't break when receiving an empty value.
  This happens when an DX FTI is part of a Generic Setup baseline import.
  Update more code to work when the Plone Site is a dexterity item.
  [jaroel] (#85)
- Codestyle black and isort [jensens] (#154)


2.10.2 (2021-07-29)
-------------------

Bug fixes:


- Fix export/import of content in Python 3.
  Fixes `issue 124 <https://github.com/plone/plone.dexterity/issues/124>`_.
  Also fixes the tests in combination with newest ``Products.GenericSetup`` 2.1.2.
  [maurits] (#124)


2.10.1 (2021-06-30)
-------------------

Bug fixes:


- Officially support Plone 6.0 and Python 3.9.
  No code changes.
  [maurits] (#1)


2.10.0 (2020-10-12)
-------------------

New features:


- Make sure that Dynamic schema is updated on all ZEO clients on change
  [@avoinea] (#136)


Bug fixes:


- Fixes test to work clean with zope.interface.
  Interfaces are hashed based on just their name and module.
  So every one of these local `IBlank` interfaces will hash the same way, and be treated the same for purposes of zope.interface's `_dependents`.
  Thus in tests mock interfaces must not be used under the same name in the same module.
  [jensens] (#135)
- Use mock from unittest on Python 3 [ale-rt]
  DefaultReadFile properly implements the IStreamIterator interface [ale-rt] (#138)
- Restore webdav support when the webdav library is importable [ale-rt] (#141)


2.9.8 (2020-09-28)
------------------

Bug fixes:


- Fixed missing ISiteRoot utility when running tests with Zope 5.
  [maurits] (#680)
- Removed call of listing macro in ``content-core`` view for containers.
  It was broken.  We now show the same as for items: only the fields.
  Fixes `issue 3177 <https://github.com/plone/Products.CMFPlone/issues/3177>`_.
  [maurits] (#3177)


2.9.7 (2020-04-20)
------------------

Bug fixes:


- Update tests for Zope 4.2.1.  [jensens] (#421)


2.9.6 (2020-03-13)
------------------

Bug fixes:


- Fixed package install error with Python 3.6 without system locale.
  See `coredev issue 642 <https://github.com/plone/buildout.coredev/issues/642#issuecomment-597008272>`_.
  [maurits] (#642)


2.9.5 (2019-12-30)
------------------

Bug fixes:


- Speedup (~1.6x) parallel thread execution by removing superfluous synchronization [jensens] (#123)


2.9.4 (2019-12-26)
------------------

Bug fixes:


- Invalidate cached FTIs on request to allow complex/long running auto-installations. [jensens]


2.9.3 (2019-12-23)
------------------

Bug fixes:


- Fix thread safe recursion detection. This fixes an issue in plone.restapi: https://github.com/plone/plone.dexterity/issues/120. [jensens] (#120)


2.9.2 (2019-10-12)
------------------

Bug fixes:


- The debug messages issued when a non existent behavior is recorded in an FTI have been improved [ale-rt] (#109)
- Avoid looking up behaviors with an empty name [ale-rt] (#110)
- Performance enhancement in schema cache by factor ~1.5.
  [jensens] (#113)
- Performance enhancement in schema cache and assignable.
  [jensens] (#115)
- Performance enhancement:
  Refine pre-filtering of attributes on content ``__getattr__``.
  Filter out all permissions (ending with ``_Permission``) and some portal-tools.
  Also often called acquired functions are skipped.
  [jensens] (#116)
- Performance enhancement: avoid a providedBy in ``_default_from_schema``.
  [jensens] (#117)


2.9.1 (2019-05-21)
------------------

Bug fixes:


- Fix WebDAV compatibility issues with ZServer on Python 3 [datakurre] (#102)
- Avoid passing in unicode data into the WebDAV message parser.
  [Rotonen] (#103)


2.9.0 (2019-05-01)
------------------

New features:


- Avoid expensive lookups for other common attributes.
  [gforcada] (#98)
- Add container property to ``AddForm`` to simplify target container selection in subclasses. [jensens] (#101)


Bug fixes:


- Turn a warning meant as deprecation warning into a a real DeprecationWarning,
  follows Deprecation Guide best practice.
  [jensens] (#95)
- Fixed DeprecationWarning for ObjectEvent.  [maurits] (#96)


2.8.0 (2019-02-08)
------------------

New features:


- Implement getSize method to sum the size of all field values that have a
  getSize method. [davisagli] (#89)


Bug fixes:


- Other Python 3 compatibility fixes [ale-rt] (#90)
- Add PathReprProvider as a baseclass of Container to restore the original
  __repr__ behavior instead of the new __repr__ from persistent.Persistent.
  PathReprProvider needs to be before CMFOrderedBTreeFolderBase (which inherits
  OrderedBTreeFolderBase > BTreeFolder2Base > Persistent). [pbauer] (#93)
- Fixed test for minor check_id change. We need the 'Access contents
  information' permission. (#2582)
- Remove deprecation warning, see
  https://github.com/plone/Products.CMFPlone/issues/2667 (#2667)


2.6.1 (2018-09-23)
------------------

New features:

- ZServer is now optional
  [pbauer]

Bug fixes:

- Other Python 3 compatibility fixes
  [ale-rt, pbauer, jensens]


2.6.0 (2018-04-03)
------------------

New features:

- Move translations to plone.app.locales
  [erral]

Bug fixes:

- Other Python 3 compatibility fixes
  [pbauer]


2.5.5 (2018-02-05)
------------------

Bug fixes:

- Prepare for Python 2 / 3 compatibility
  [pbauer]


2.5.4 (2017-11-24)
------------------

Bug fixes:

- Fix tests on Zope 4. [davisagli]


2.5.3 (2017-10-17)
------------------

Bug fixes:

- Give more context to the 'schema cannot be resolved' warning.  [gotcha]


2.5.2 (2017-06-03)
------------------

Bug fixes:

- Fix problem with new zope.interface not accepting None as value.
  [jensens]


2.5.1 (2017-02-27)
------------------

Bug fixes:

- Make sure that all fields are initialized to their default value
  when items are added via the add form. This is important in the case
  of fields with a defaultFactory that can change with time
  (such as defaulting to the current date).
  [davisagli]


2.5.0 (2017-02-12)
------------------

Breaking changes:

- When calling the DC metadata accessor for ``Description``, remove newlines from the output.
  This makes the removal of newlines from the description behavior setter in plone.app.dexterity obsolete.
  [thet]

Bug fixes:

- Relax tests for ZMI tabs for compatibility with Zope 4. [davisagli]


2.4.5 (2016-11-19)
------------------

New features:

- Removed test dependency on plone.mocktestcase [davisagli]


2.4.4 (2016-09-23)
------------------

Bug fixes:

- Fix error when copying DX containers with AT children which caused the
  children to not have the UID updated properly.  [jone]


2.4.3 (2016-08-12)
------------------

Bug fixes:

- Use zope.interface decorator.
  [gforcada]


2.4.2 (2016-05-12)
------------------

Fixes:

- Added security declarations from Products.PloneHotfix20160419.  [maurits]


2.4.1 (2016-02-27)
------------------

Incompatibilities:

- addCreator should not add if a creator is already set for content. This prevents every
  editor on content from adding to the list of creators for an object.
  [vangheem]


2.4.0 (2016-02-17)
------------------

New:

- Added Russian translation.  [serge73]

- Updated to and depended on pytz 2015.7 and DateTime 4.0.1.  [jensens]

Fixes:

- Skipped the tests
  ``test_portalTypeToSchemaName_looks_up_portal_for_prefix`` and
  ``test_getAdditionalSchemata`` with isolation problems in Zope 4.
  [pbauer]

- Made utils/datify work with newer DateTime and pytz.  Adjust tests
  to reflect changes.  [jensens]

- Fixed: duplicate aq_base without using Acquistion API resulted in an
  AttributeError that was masqued in the calling hasattr and resulted
  in wrong conclusion.  [jensens]

- Made modification test more stable.  [do3cc]


2.3.7 (2016-01-08)
------------------

Fixes:

- Sync schema when schema_policy name is changed (issue #44)
  [sgeulette]

- Corrected tests on date comparison (avoid 1h shift)
  [sgeulette]


2.3.6 (2015-10-28)
------------------

Fixes:

- No longer rely on deprecated ``bobobase_modification_time`` from
  ``Persistence.Persistent``.
  [thet]


2.3.5 (2015-09-20)
------------------

- Use registry lookup for types_use_view_action_in_listings
  [esteele]

- Don't check type constraints in AddForm.update() if request provides
  IDeferSecurityChecks.
  [alecm]


2.3.4 (2015-08-14)
------------------

- Avoid our own DeprecationWarning about portalTypeToSchemaName.
  [maurits]

- Set title on WebDAV upload
  [tomgross]

2.3.3 (2015-07-29)
------------------

- This version is still Plone 4.3.x compatible. Newer versions
  are only Plone 5 compatible.

- Check add_permission before checking constrains. Refs #37
  [jaroel]

- Remove obsolete css-class and text from statusmessages.
  [pbauer]

- Complete invalidate_cache.
  [adamcheasley]


2.3.2 (2015-07-18)
------------------

- Check allowed types for add form.
  [vangheem]


2.3.1 (2015-05-31)
------------------

- Fix issue where webdav PUT created items with empty id
  [datakurre]

- fix #27: createContent ignores empty fields
  [jensens]


2.3.0 (2015-03-13)
------------------

- Use attribute for DefaultAddForm and DefaultEditForm success message so it can
  be easily customized.
  [cedricmessiant]

- Big major overhaul to use everywhere the same way to fetch the main schema,
  behavior schemata and its markers. This was very scrmabled: sometimes
  behaviors weren't taken into account, or only FTI based behaviors but not
  those returned by the IBehaviorAssignable adapter. Also the caching was
  cleaned up. The tests are now better readable (at least I hope so).  In order
  to avoid circular imports some methods where moved for ``utils.py`` to
  ``schema.py``.  Deprecations are in place.
  [jensens]

- Fix (security): Attribute access to schema fields can be protected. This
  worked for direct schemas, but was not implemented for permissions coming
  from behaviors.
  [jensens]

2.2.4 (2014-10-20)
------------------

- Fix the default attribute accessor to bind field to context when finding
  the field default.
  [datakurre]

- fix: when Dexterity container or its children contains any AT content with
  AT references in them, any move or rename operation for the parent
  Dexterity object will cause AT ReferenceEngine to remove those references.
  see #20.
  [datakurre]

- Let utils.createContent also handle setting of attributes on behaviors, which
  derive from other behaviors.
  [thet]

- overhaul (no logic changed):
  pep8, sorted imports plone.api style, readability, utf8header,
  remove bbb code (plone 3)
  [jensens]

2.2.3 (2014-04-15)
------------------

- Re-release 2.2.2 which was a brown bag release.
  [timo]

2.2.2 (2014-04-13)
------------------

- Add a 'success' class to the status message shown after successfully
  adding or editing an item.  The previous 'info' class is also
  retained for backwards-compatibility.
  [davisagli]

- If an object being added to a container already has an id, preserve it.
  [davisagli]

2.2.1 (2014-02-14)
------------------

- Also check behavior-fields for IPrimaryField since plone.app.contenttypes
  uses fields provided by behaviors as primary fields
  [pbauer]


2.2.0 (2014-01-31)
------------------

- utils.createContent honors behaviors.
  [toutpt]

- Date index method works even if source field is a dexterity field
  which provides a  datetime python value.
  Now you can manually add a field with the name of a common Plone metadata field
  (as effective_date, publication_date, etc.)
  [tdesvenain]

- Replace deprecated test assert statements.
  [timo]

- Put a marker interface on the default edit view so viewlets
  can be registered for it.
  [davisagli]

- Ensure FTI's isConstructionAllowed method returns a boolean.
  [danjacka]

- Hide the Dublin Core tab and show the Properties tab for
  items when viewed in the ZMI.
  [davisagli]

- Avoid storing dublin core metadata on new instances unless it
  differs from the default values.
  [davisagli]

- Implement CMF's dublin core interfaces inline rather than
  depending on CMFDefault.
  [davisagli]

- Support GenericSetup structure import/export of Dexterity content.
  Content is serialized the same way as for WebDAV,
  using plone.rfc822. Not all field types are supported yet,
  but this at least gets the basics in place.

  GS import used to work by accident in a basic way for Dexterity
  containers. If you were using this, you'll need to recreate your
  exported files with the rfc822 serialization.
  [davisagli]

- Creator accessor should return encoded strings
  If your catalog was broken, try to clear & reindex Creator::

    cat.clearIndex('Creator')
    cat.manage_reindexIndex(['Creator'])

  [kiorky]

- Use the same message string for the default fieldset as Archetypes does.
  [davisagli]

2.1.3 (2013-05-26)
------------------

- Fail gracefully when a schema lookup fails due to schema that doesn't
  exist or no longer exists for some reason or another.
  [eleddy]


2.1.2 (2013-03-05)
------------------

- Merged Rafael Oliveira's (@rafaelbco) @content-core views from
  collective.cmfeditionsdexteritycompat.
  [rpatterson]

2.1.1 (2013-01-17)
------------------

* No longer add title and description fields to new FTIs by default.
  [davisagli, cedricmessiant]

* When pasting into a dexterity container check the FTI for the the pasted
  object to see if it is allowed in the new container.
  [wichert]

* Fixed schema caching. Previously, a non-persistent counter would be
  used as part of the cache key, and changes made to this counter in
  one process would obviously not propagate to other processes.

  Instead, the cache key now includes the schema and subtypes which
  are both retrieved from a FTI-specific volatile cache that uses the
  modification time as its cache key.
  [malthe]


2.1 (2013-01-01)
----------------

* Added Finnish translations.
  [pingviini]

* Override allowedContentTypes and invokeFactory from PortalFolder
  to mimic the behavior of Archetypes based folders. This allows the
  registration of IConstrainTypes adapters to actually have the
  expected effect.
  [gaudenzius]

* The default attribute accessor now also looks through subtypes
  (behaviors) to find a field default.
  [malthe]

* Added support in the FTI to look up behaviors by utility name when
  getting additional schemata (i.e. fields provided by behaviors).

  This functionality makes it possible to create a behavior where the
  interface is dynamically generated.
  [malthe]

* Return early for attributes that begin with two underscores.
  https://github.com/plone/plone.dexterity/pull/11
  [malthe]

* Make it possible to define a SchemaPolicy for the FTI
  [Frédéric Péters]
  [gbastien]

2.0 (2012-08-30)
----------------

* Add a UID method to Dexterity items for compatibility with the Archetypes
  API.
  [davisagli]

* Remove hard dependency on zope.app.content.
  [davisagli]

* Use standard Python properties instead of rwproperty.
  [davisagli]

* Removed support for Plone 3 / CMF 2.1 / Zope 2.10.
  [davisagli]

* Update package dependencies and imports as appropriate for Zope 2.12 & 2.13.
  [davisagli]

1.1.2 - 2012-02-20
------------------

* Fix UnicodeDecodeError when getting an FTI title or description with
  non-ASCII characters.
  [davisagli]

1.1.1 - 2012-02-20
------------------

* When deleting items from a container using manage_delObjects,
  check for the "DeleteObjects" permission on each item being
  deleted. This fixes
  http://code.google.com/p/dexterity/issues/detail?id=252
  [davisagli]

1.1 - 2011-11-26
----------------

* Added Italian translation.
  [zedr]

* Ensure that a factory utility really isn't needed before removing it.
  [lentinj]

* Work around issue where user got a 404 upon adding content if a content
  rule had moved the new item to a different folder. This closes
  http://code.google.com/p/dexterity/issues/detail?id=240
  [davisagli]

* Added events: IEditBegunEvent, IEditCancelledEvent, IEditFinished,
  IAddBegunEvent, IAddCancelledEvent
  [jbaumann]

* Make sure Dexterity content items get UIDs when they are created if
  ``plone.uuid`` is present. This closes
  http://code.google.com/p/dexterity/issues/detail?id=235
  [davisagli]

* Make sure the Title() and Description() accessors of containers return an
  encoded bytestring as expected for CMF-style accessors.
  [buchi]

* Added zh_TW translation.
  [marr, davisagli]

1.0.1 - 2011-09-24
------------------

* Support importing the ``add_view_expr`` property of the FTI via GenericSetup.
  This closes http://code.google.com/p/dexterity/issues/detail?id=192
  [davisagli]

* Make it possible to use DefaultAddForm without a form wrapper.
  [davisagli]

* Make sure the Subject accessor returns an encoded bytestring as expected for
  CMF-style accessors. This fixes
  http://code.google.com/p/dexterity/issues/detail?id=197
  [davisagli]

* Added pt_BR translation.
  [rafaelbco, davisagli]


1.0 - 2011-05-20
----------------

* Make sure the Title and Description accessors handle a value of None.
  [davisagli]

* Make sure the Title() accessor for Dexterity content returns an encoded
  bytestring as expected for CMF-style accessors.
  [davisagli]

1.0rc1 - 2011-04-30
-------------------

* Look up additional schemata by adapting to IBehaviorAssignable in cases
  where a Dexterity instance is available. (The list of behaviors in the
  FTI is still consulted for add forms.)
  [maurits]

* Explicitly load CMFCore ZCML.
  [davisagli]

* Add ids to group fieldsets.
  [elro]

* Do a deep copy instead of shallow when assigning field defaults. Content
  generated via script wound up with linked list (and other
  AbstractCollection) fields.
  [cah190, esteele]

* Make setDescription coerce to unicode in the same way as setTitle.
  [elro]

* Change the FTI default to enable dynamic view.
  [elro]

* Setup folder permissions in the same way as Archetypes so copy / paste /
  rename work consistently with the rest of Plone.
  [elro]

* Make sure the typesUseViewActionInListings property is respected when
  redirecting after edit.
  [elro, davisagli]

* Fix #145: UnicodeDecodeError After renaming item from @@folder_contents
  [toutpt]

1.0b7 - 2011-02-11
------------------

* Add adapter for plone.rfc822.interfaces.IPrimaryFieldInfo.
  [elro]

* Fixed deadlock in synchronized methods of schema cache by using
  threading.RLock instead of threading.Lock.
  [jbaumann]

* Add Spanish translation.
  [dukebody]

* Add French translation.
  [toutpt]


1.0b6 - 2010-08-30
------------------

* Send ObjectCreatedEvent event from createContent utility method.
  [wichert]

* Update content base classes to use allow keyword arguments to set
  initial values for instance variables.
  [wichert]

* Avoid empty <div class="field"> tag for title and description in
  item.pt.
  [gaudenzius]


1.0b5 - 2010-08-05
------------------

* Fix folder ordering bug.
  See: http://code.google.com/p/dexterity/issues/detail?id=113
  [optilude]

* Switch to the .Title() and .Description() methods of fti when used in
  a translatable context, to ensure that these strings are translated.
  [mj]

* Add Norwegian translation.
  [mj]


1.0b4 - 2010-07-22
------------------

* Improve robustness: catch and log import errors when trying to resolve
  behaviours.
  [wichert]

* Add German translation from Christian Stengel.
  [wichert]


1.0b3 - 2010-07-19
------------------

* Clarify license to GPL version 2 only.
  [wichert]

* Configure Babel plugins for i18n extraction and add a Dutch translation.
  [wichert]


1.0b2 - 2010-05-24
------------------

* Fix invalid license declaration in package metadata.
  [wichert]

* Do not assume "view" is the right immediate view - in some cases
  it might not exist. Instead use the absolute URL directly.
  [wichert]


1.0b1 - 2010-04-20
------------------

* Update the label for the default fieldset to something more humane.
  [wichert]

* Make the default add form extend BrowserPage to avoid warnings about
  security declarations for nonexistent methods.  This closes
  http://code.google.com/p/dexterity/issues/detail?id=69
  [davisagli]

* For now, no longer ensure that Dexterity content provides ILocation (in
  particular, that it has a __parent__ pointer), since that causes problems
  when exporting in Zope 2.10.
  [davisagli]

* Don't assume the cancel and actions buttons are always present in the
  default forms.
  [optilude]

1.0a3 - 2010-01-08
------------------

* require zope.filerepresentation>=3.6.0 for IRawReadFile
  [csenger]

1.0a2 - 2009-10-12
------------------

* Added support for zope.size.interfaces.ISized. An adapter to this interface
  may be used to specify the file size that is reported in WebDAV operations
  or used for Plone's folder listings. This requires that the sizeForSorting()
  method is implemented to return a tuple ('bytes', numBytes), where numBytes
  is the size in bytes.
  [optilude]

* Added support for WebDAV. This is primarily implemented by adapting content
  objects to the IRawReadFile and IRawWriteFile interfaces from the
  zope.filerepresentation package. The default is to use plone.rfc822 to
  construct an RFC(2)822 style message containing all fields. One or more
  fields may be marked with the IPrimaryField interface from that package,
  in which case they will be sent in the body of the message.

  In addition, the creation of new files (PUT requests to a null resource) is
  delegated to an IFileFactory adapter, whilst the creation of new directories
  (MKCOL requests) is delegated to an IDirectoryFactory adapter. See
  zope.filerepresentation for details, and filerepresentation.py for the
  default implementation.
  [optilude]

* Move AddViewActionCompat to the second base class of DexterityFTI, so that
  the FTI interfaces win over IAction. This fixes a problem with GenericSetup
  export: http://code.google.com/p/dexterity/issues/detail?id=79
  [optilude]

* Add getMapping() to AddViewActionCompat.
  Fixes http://code.google.com/p/dexterity/issues/detail?id=78
  [optilude]

1.0a1 - 2009-07-25
------------------

* Initial release

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/plone/plone.dexterity",
    "name": "plone.dexterity",
    "maintainer": "The Plone Release Team and Community",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "releaseteam@plone.org",
    "keywords": "plone dexterity contenttypes",
    "author": "Martin Aspeli",
    "author_email": "optilude@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/67/94/a79150503c4778224d5b9ad58bbe6175dbc94648e9f72bde4f01b768f6c4/plone_dexterity-3.0.6.tar.gz",
    "platform": null,
    "description": "Dexterity\n=========\n\n    \"Same, same, but different\"\n\nDexterity is a system for building content types, both through-the-web and as filesystem code.\nIt is aimed at Plone, although this package should work with plain Zope + CMF systems.\n\nKey use cases\n-------------\n\nDexterity wants to make some things really easy. These are:\n\n- Create a \"real\" content type entirely through-the-web without having to know programming.\n\n- As a business user, create a schema using visual or through-the-web tools, and augment it with adapters, event handlers, and other Python code written on the filesystem by a Python programmer.\n\n- Create content types in filesystem code quickly and easily, without losing the ability to customise any aspect of the type and its operation later if required.\n\n- Support general \"behaviours\" that can be enabled on a custom type in a declarative fashion.\n  Behaviours can be things like title-to-id naming, support for locking or versioning, or sets of standard metadata with associated UI elements.\n\n- Easily package up and distribute content types defined through-the-web, on the filesystem, or using a combination of the two.\n\nPhilosophy\n----------\n\nDexterity is designed with a specific philosophy in mind.\nThis can be summarised as follows:\n\nReuse over reinvention\n   As far as possible, Dexterity should reuse components and technologies that already exist.\n   More importantly, however, Dexterity should reuse *concepts* that exist elsewhere.\n   It should be easy to learn Dexterity by analogy, and to work with Dexterity types using familiar APIs and techniques.\n\nSmall over big\n   Mega-frameworks be damned.\n   Dexterity consists of a number of specialised packages, each of which is independently tested and reusable.\n   Furthermore, packages should have as few dependencies as possible, and should declare their dependencies explicitly.\n   This helps keep the design clean and the code manageable.\n\nNatural interaction over excessive generality\n   The Dexterity design was driven by several use cases (see docs/Design.txt) that express the way in which we want people to work with Dexterity.\n   The end goal is to make it easy to get started, but also easy to progress from an initial prototype to a complex set of types and associated behaviours through step-wise learning and natural interaction patterns.\n   Dexterity aims to consider its users - be they business analysts, light integrators, or Python developers, and be they new or experienced - and cater to them explicitly with obvious, well-documented, natural interaction patterns.\n\nReal code over generated code\n   Generated code is difficult to understand and difficult to debug when it  doesn't work as expected.\n   There is rarely, if ever, any reason to scribble methods or 'exec' strings of Python code.\n\nZCA over old Zope 2\n   As many components as possible should work with plain ZCA (Zope Component Architecture, ``zope.*`` packages with origins in Zope 3).\n   Although Dexterity does not pretend to work with non-CMF systems,\n   Even where there are dependencies on Zope 2, CMF or Plone, they should - as far as is practical - follow ZCA techniques and best practices.\n   Many operations (e.g. managing objects in a folder, creating new objects or manipulating objects through a defined schema) are better designed in\n   ZCA than they were in Zope 2.\n\nZope concepts over new paradigms\n   We want Dexterity to be \"Zope-ish\" (and really, \"ZCA-ish\").\n   Zope is a mature, well-designed (well, mostly) and battle tested platform.\n   We do not want to invent brand new paradigms and techniques if we can help it.\n\nAutomated testing over wishful thinking\n   \"Everything\" should be covered by automated tests.\n   Dexterity necessarily has a lot of moving parts.\n   Untested moving parts tend to come lose and fall on people's heads.\n   Nobody likes that.\n\nWhat's it all about?\n--------------------\n\nWith the waffle out of the way, let's look in a bit more detail about what\nmakes up a \"content type\" in the Dexterity system.\n\nThe model\n   The Dexterity \"model\" describes a type's schemata and metadata associated with those schemata.\n   A schema is just a series of fields that can be used to render add/edit forms and introspect an object of the given type.\n   The metadata storage is extensible via the component architecture.\n   Typical forms of metadata include UI hints such as specifying the type of widget to use when rendering a particular field, and per-field security settings.\n\n   The model is described in also XML.\n   Though at runtime it is an instance of an object providing the IModel interface from ``plone.supermodel``.\n   Schemata in the model are interfaces with ``zope.schema`` fields.\n\n   The model can exist purely as data in the ZODB if a type is created through-the-web.\n   Alternatively, it can be loaded from a file.\n   The XML representation is intended to be human-readable and self-documenting.\n   It is also designed with tools like `AGX  <http://agx.me>`_ in mind, that can generate models from a visual representation.\n\nThe schema\n   All content types have at least one (unnamed) schema.\n   A schema is simply an Interface with zope.schema fields.\n   The schema can be specified in Python code (in which case it is simply referenced by name), or it can be loaded from an XML model.\n\n   The unnamed schema is also known as the IContentType schema.\n   In that, the schema interface will provide the zope IContentType interface.\n   This means that if you call ``queryContentType()`` on a Dexterity content object, you should get back its unnamed schema, and that schema should be provided by the object that was queried.\n   Thus, the object will directly support the attributes promised by the schema.\n   This makes Dexterity content objects \"Pythonic\" and easy to work with.\n\nThe class\n   Of course, all content objects are instances of a particular class.\n   It is easy to provide your own class, and Dexterity has convenient base classes for you to use.\n   However, many types will not need a class at all.\n   Instead, they will use the standard Dexterity \"Item\" and \"Container\" classes.\n\n   Dexterity's content factory will initialise an object of one of these classes with the fields in the type's content schema.\n   The factory will ensure that objects provide the relevant interfaces, including the schema interface itself.\n\n   The preferred way to add behaviour and logic to Dexterity content objects is via adapters.\n   In this case, you will probably want a filesystem version of the schema interface (this can still be loaded from XML if you\n   wish, but it will have an interface with a real module path) that you  can register components against.\n\nThe factory\n   Dexterity content is constructed using a standard zope IFactory named utility.\n   By convention the factory utility has the same name as the portal_type of the content type.\n\n   When a Dexterity FTI (Factory Type Information, see below) is created, an appropriate factory will be registered as a local utility unless one    with that name already exists.\n\n   The default factory is capable of initialising a generic ``Item`` or  ``Container`` object to exhibit a content type schema and have the security and other aspects specified in the type's model.\n   You can use this if you wish, or provide your own factory.\n\nViews\n   Dexterity will by default create an:\n   - add view (registered as a local utility, since it needs to take the portal_type of the content type into account when determining what fields to render) and an\n   - edit view (registered as a generic, global view, which inspects the context's portal_type at runtime) for each type.\n   - A default main view exists, which simply outputs the fields set on the context.\n\n   To register new views, you will normally need a filesystem schema interface.\n   You can then register views for this interface as you normally would.\n\n   If you need to override the default add view, create a view for IAdding with a name corresponding to the portal_type of the content type.\n   This will prevent Dexterity from registering a local view with the same name when the FTI is created.\n\nThe Factory Type Information (FTI)\n   The FTI holds various information about the content type.\n   Many operations performed by the Dexterity framework begin by looking up the type's FTI to find out some information about the type.\n\n   The FTI is an object stored in portal_types in the ZMI.\n   Most settings can be changed through the web.\n   See the IDexterityFTI interface for more information.\n\n   When a Dexterity FTI is created, an event handler will create a few local components, including the factory utility and add view for the new type. The FTI itself is also registered as a named utility, to make it easy to look up using syntax like::\n\n       getUtility(IDexterityFTI, name=portal_type)\n\n   The FTI is also fully importable and exportable using GenericSetup.\n   Thus, the easiest way to create and distribute a content type is to create a new FTI, set some properties (including a valid XML model,\n   which can be entered TTW if there is no file or schema interface to use), and export it as a GenericSetup extension profile.\n\nBehaviors\n   Behaviors are a way write make reusable bits of functionality that can be toggled on or off on a per-type basis.\n   Examples may include common metadata, or common functionality such as locking, tagging or ratings.\n\n   Behaviors are implemented using the plone.behavior package.\n   See its documentation for more details about how to write your own behaviors.\n\n   In Dexterity, behaviors can \"inject\" fields into the standard add and edit forms, and may provide marker interfaces for newly created objects.\n   See the example.dexterity package for an example of a behavior that provides form fields.\n\n   In use, a behavior is essentially just an adapter that only appears to be registered if the behavior is enabled in the FTI of the object being adapted.\n   Thus, if you have a behavior described by my.package.IMyBehavior, you'll typically interact with this behavior by doing::\n\n       my_behavior = IMyBehavior(context, None)\n       if my_behavior is not None:\n           ...\n\n   The enabled behaviors for a given type are kept in the FTI, as a list of dotted interface names.\n\nThe Dexterity Ecosystem\n-----------------------\n\nThe Dexterity system comprises a number of packages, most of which are\nindependently reusable. In addition, Dexterity uses many components from\nZope and CMF.\n\nThe most important packages are:\n\n`plone.dexterity <https://pypi.python.org/pypi/plone.alterego>`_ (CMF)\n   **this package** Defines the FTI and content classes.\n   It provides basic views (with forms based on z3c.form), handles security and so on.\n   It also provides components to orchestrate the various functionality provided by the packages above in order to bring the Dexterity system together.\n\n`plone.behavior <https://pypi.python.org/pypi/plone.behavior>`_ (ZCA)\n   Supports \"conditional\" adapters. A product author can write and register  a generic behaviour that works via a simple adapter.\n   The adapter will appear to be registered for types that have the named behaviour available.\n\n   Dexterity wires this up in such a way that the list of enabled behaviours is stored as a property in the FTI.\n   This makes it easy to add/remove behaviours through the web, or using GenericSetup at install time.\n\n`plone.folder <https://pypi.python.org/pypi/plone.folder>`_ (CMF)\n   This is an implementation of an ordered, BTree-backed folder, with ZCA\n   dictionary-style semantics for managing content items inside the folder.\n   The standard Dexterity 'Container' type uses plone.folder as its base.\n\n`plone.autoform <https://pypi.python.org/pypi/plone.autoform>`_ (CMF, z3cform)\n   Contains helper functions to construct forms based on tagged values stored on schema interfaces.\n\n`plone.supermodel <https://pypi.python.org/pypi/plone.supermodel>`_ (ZCA)\n   Supports parsing and serialisation of interfaces from/to XML.\n   The XML format is based directly on the interfaces that describe zope.schema type fields.\n   Thus it is easily extensible to new field types.\n   This has the added benefit that the interface documentation in the zope.schema package applies to the XML format as well.\n\n   Supermodel is extensible via adapters and XML namespaces.\n   plone.dexterity uses this to allow security and UI hints to be embedded as metadata in the XML model.\n\n`plone.alterego <https://pypi.python.org/pypi/plone.alterego>`_ (Python)\n   Support for dynamic modules that create objects on the fly.\n   Dexterity uses this to generate \"real\" interfaces for types that exist only through-the-web.\n   This allows these types to have a proper IContentType schema.\n   It also allows local adapters to be registered for this interface (e.g. a custom view with a template defined through the web).\n\n   Note that if a type uses a filesystem interface (whether written manually or loaded from an XML model), this module is not used.\n\n`plone.app.dexterity <https://pypi.python.org/pypi/plone.app.dexterity>`_ (Plone)\n   This package contains all Plone-specific aspects of Dexterity, including Ploneish UI components, behaviours and defaults.\n\n\nDeveloper Manual\n----------------\n\nThe `Dexterity Developer Manual <http://docs.plone.org/external/plone.app.dexterity/docs/index.html>`_ is a complete documentation with practical examples and part of the `Official Plone Documentation <http://docs.plone.org/>`_.\n\n\nSource Code\n===========\n\nContributors please read the document `Contributing to Plone <https://6.docs.plone.org/contributing/index.html>`_\n\nSources are at the `Plone code repository hosted at Github <https://github.com/plone/plone.dexterity>`_.\n\nChangelog\n=========\n\n\n.. You should *NOT* be adding new change log entries to this file.\n   You should create a file in the news directory instead.\n   For helpful instructions, please see:\n   https://github.com/plone/plone.releaser/blob/master/ADD-A-NEWS-ITEM.rst\n\n.. towncrier release notes start\n\n3.0.6 (2024-04-25)\n------------------\n\nBug fixes:\n\n\n- Fix tests to work with Zope master which expects requests to have an `ensure_publishable` method.\n  [maurits] (#1202)\n\n\n3.0.5 (2024-02-27)\n------------------\n\nBug fixes:\n\n\n- Fix a traversal error that happens when traversing a WebDAV resource and the virtual host monster is used.\n  [ale-rt] (#195)\n\n\n3.0.4 (2024-01-22)\n------------------\n\nInternal:\n\n\n- Update configuration files.\n  [plone devs] (6e36bcc4)\n\n\n3.0.3 (2023-09-01)\n------------------\n\nBug fixes:\n\n\n- Respect locally allowed types when pasting objects [cekk] (#146)\n- Fix a memory leak as reported in https://github.com/plone/Products.CMFPlone/issues/3829, changing interface declaration type as suggested by @d-maurer in https://github.com/plone/plone.dexterity/issues/186 [mamico] (#187)\n\n\nInternal:\n\n\n- Update configuration files.\n  [plone devs] (55bda5c9)\n\n\n3.0.2 (2023-03-14)\n------------------\n\nBug fixes:\n\n\n- Type error is removed and none is returned.\n  In this modified version of the code, if no primary field adapter is found, the fieldname and field attributes are set to None.\n  The value property checks whether the field attribute is None, and returns None if it is, instead of raising an error.\n  [Coder-aadarsh] (#59)\n\n\nInternal:\n\n\n- Update configuration files.\n  [plone devs] (13d8d6c0)\n\n\nTests\n\n\n- Fix webdav tests to pass with Zope 5.8 and the master branch.\n  [maurits] (#844)\n\n\n3.0.1 (2023-02-08)\n------------------\n\nBug fixes:\n\n\n- Configure packages with plone/meta.\n  [gforcada] (#1)\n\n\n3.0.0 (2022-12-02)\n------------------\n\nBug fixes:\n\n\n- Final release for Plone 6.0.0 (#600)\n\n\n3.0.0b2 (2022-08-30)\n--------------------\n\nBug fixes:\n\n\n- Check code quality with fresh plone/code-quality 2.0.0.\n  [maurits+erico] (#171)\n\n\n3.0.0b1 (2022-07-14)\n--------------------\n\nBreaking changes:\n\n\n- Remove long deprecated imports and fallbacks.\n  [jensens, maurits] (#161)\n- Python 3.7+ only, drop Python 2 support.\n  [jensens, maurits] (#161)\n\n\nBug fixes:\n\n\n- Use Bootstrap 5 classes for buttons.\n  [jensens] (#161)\n\n\n3.0.0a3 (2022-05-24)\n--------------------\n\nBug fixes:\n\n\n- Added missing icon_expr to default actions.\n  [agitator] (#167)\n\n\n3.0.0a2 (2022-01-25)\n--------------------\n\nBug fixes:\n\n\n- Really always use a lines property for behaviors, no longer the deprecated ulines.\n  This improves the fix from the previous release.\n  Part of `issue 3305 <https://github.com/plone/Products.CMFPlone/issues/3305>`_.\n  [maurits] (#3305)\n\n\n3.0.0a1 (2022-01-07)\n--------------------\n\nBreaking changes:\n\n\n- Plone 6: Always use a lines property for behaviors, no longer the deprecated ulines.\n  Part of `issue 3305 <https://github.com/plone/Products.CMFPlone/issues/3305>`_.\n  [maurits] (#3305)\n\n\n2.10.5 (2021-11-25)\n-------------------\n\nBug fixes:\n\n\n- Incorporate ``plone.synchronize`` its one and only simple ``synchronized`` function into ``plone.dexterity``, which were the only consumer.\n  Also moves the test. Removes a dependency and a package to look after.\n  [jensens] (#157)\n- Avoid setting a default value on methods.\n  If a Schema Interface has a method in it, i.e. to be used as a\n  constraint for another field, etc. the `default_from_schema` function\n  would trip over it while trying to get a default value for it.\n  [gforcada, jensens] (#158)\n- Fixes schema name generated in Python 2. [wesleybl] (#159)\n\n\n2.10.4 (2021-10-07)\n-------------------\n\nBug fixes:\n\n\n- Catch maximum recursion error when lookup FTI\n  [petschki] (#155)\n- Optimize local components access by shortcutting `utilities` attribute access. [jensens] (#156)\n\n\n2.10.3 (2021-09-01)\n-------------------\n\nBug fixes:\n\n\n- Fix ft._updateProperty so it doesn't break when receiving an empty value.\n  This happens when an DX FTI is part of a Generic Setup baseline import.\n  Update more code to work when the Plone Site is a dexterity item.\n  [jaroel] (#85)\n- Codestyle black and isort [jensens] (#154)\n\n\n2.10.2 (2021-07-29)\n-------------------\n\nBug fixes:\n\n\n- Fix export/import of content in Python 3.\n  Fixes `issue 124 <https://github.com/plone/plone.dexterity/issues/124>`_.\n  Also fixes the tests in combination with newest ``Products.GenericSetup`` 2.1.2.\n  [maurits] (#124)\n\n\n2.10.1 (2021-06-30)\n-------------------\n\nBug fixes:\n\n\n- Officially support Plone 6.0 and Python 3.9.\n  No code changes.\n  [maurits] (#1)\n\n\n2.10.0 (2020-10-12)\n-------------------\n\nNew features:\n\n\n- Make sure that Dynamic schema is updated on all ZEO clients on change\n  [@avoinea] (#136)\n\n\nBug fixes:\n\n\n- Fixes test to work clean with zope.interface.\n  Interfaces are hashed based on just their name and module.\n  So every one of these local `IBlank` interfaces will hash the same way, and be treated the same for purposes of zope.interface's `_dependents`.\n  Thus in tests mock interfaces must not be used under the same name in the same module.\n  [jensens] (#135)\n- Use mock from unittest on Python 3 [ale-rt]\n  DefaultReadFile properly implements the IStreamIterator interface [ale-rt] (#138)\n- Restore webdav support when the webdav library is importable [ale-rt] (#141)\n\n\n2.9.8 (2020-09-28)\n------------------\n\nBug fixes:\n\n\n- Fixed missing ISiteRoot utility when running tests with Zope 5.\n  [maurits] (#680)\n- Removed call of listing macro in ``content-core`` view for containers.\n  It was broken.  We now show the same as for items: only the fields.\n  Fixes `issue 3177 <https://github.com/plone/Products.CMFPlone/issues/3177>`_.\n  [maurits] (#3177)\n\n\n2.9.7 (2020-04-20)\n------------------\n\nBug fixes:\n\n\n- Update tests for Zope 4.2.1.  [jensens] (#421)\n\n\n2.9.6 (2020-03-13)\n------------------\n\nBug fixes:\n\n\n- Fixed package install error with Python 3.6 without system locale.\n  See `coredev issue 642 <https://github.com/plone/buildout.coredev/issues/642#issuecomment-597008272>`_.\n  [maurits] (#642)\n\n\n2.9.5 (2019-12-30)\n------------------\n\nBug fixes:\n\n\n- Speedup (~1.6x) parallel thread execution by removing superfluous synchronization [jensens] (#123)\n\n\n2.9.4 (2019-12-26)\n------------------\n\nBug fixes:\n\n\n- Invalidate cached FTIs on request to allow complex/long running auto-installations. [jensens]\n\n\n2.9.3 (2019-12-23)\n------------------\n\nBug fixes:\n\n\n- Fix thread safe recursion detection. This fixes an issue in plone.restapi: https://github.com/plone/plone.dexterity/issues/120. [jensens] (#120)\n\n\n2.9.2 (2019-10-12)\n------------------\n\nBug fixes:\n\n\n- The debug messages issued when a non existent behavior is recorded in an FTI have been improved [ale-rt] (#109)\n- Avoid looking up behaviors with an empty name [ale-rt] (#110)\n- Performance enhancement in schema cache by factor ~1.5.\n  [jensens] (#113)\n- Performance enhancement in schema cache and assignable.\n  [jensens] (#115)\n- Performance enhancement:\n  Refine pre-filtering of attributes on content ``__getattr__``.\n  Filter out all permissions (ending with ``_Permission``) and some portal-tools.\n  Also often called acquired functions are skipped.\n  [jensens] (#116)\n- Performance enhancement: avoid a providedBy in ``_default_from_schema``.\n  [jensens] (#117)\n\n\n2.9.1 (2019-05-21)\n------------------\n\nBug fixes:\n\n\n- Fix WebDAV compatibility issues with ZServer on Python 3 [datakurre] (#102)\n- Avoid passing in unicode data into the WebDAV message parser.\n  [Rotonen] (#103)\n\n\n2.9.0 (2019-05-01)\n------------------\n\nNew features:\n\n\n- Avoid expensive lookups for other common attributes.\n  [gforcada] (#98)\n- Add container property to ``AddForm`` to simplify target container selection in subclasses. [jensens] (#101)\n\n\nBug fixes:\n\n\n- Turn a warning meant as deprecation warning into a a real DeprecationWarning,\n  follows Deprecation Guide best practice.\n  [jensens] (#95)\n- Fixed DeprecationWarning for ObjectEvent.  [maurits] (#96)\n\n\n2.8.0 (2019-02-08)\n------------------\n\nNew features:\n\n\n- Implement getSize method to sum the size of all field values that have a\n  getSize method. [davisagli] (#89)\n\n\nBug fixes:\n\n\n- Other Python 3 compatibility fixes [ale-rt] (#90)\n- Add PathReprProvider as a baseclass of Container to restore the original\n  __repr__ behavior instead of the new __repr__ from persistent.Persistent.\n  PathReprProvider needs to be before CMFOrderedBTreeFolderBase (which inherits\n  OrderedBTreeFolderBase > BTreeFolder2Base > Persistent). [pbauer] (#93)\n- Fixed test for minor check_id change. We need the 'Access contents\n  information' permission. (#2582)\n- Remove deprecation warning, see\n  https://github.com/plone/Products.CMFPlone/issues/2667 (#2667)\n\n\n2.6.1 (2018-09-23)\n------------------\n\nNew features:\n\n- ZServer is now optional\n  [pbauer]\n\nBug fixes:\n\n- Other Python 3 compatibility fixes\n  [ale-rt, pbauer, jensens]\n\n\n2.6.0 (2018-04-03)\n------------------\n\nNew features:\n\n- Move translations to plone.app.locales\n  [erral]\n\nBug fixes:\n\n- Other Python 3 compatibility fixes\n  [pbauer]\n\n\n2.5.5 (2018-02-05)\n------------------\n\nBug fixes:\n\n- Prepare for Python 2 / 3 compatibility\n  [pbauer]\n\n\n2.5.4 (2017-11-24)\n------------------\n\nBug fixes:\n\n- Fix tests on Zope 4. [davisagli]\n\n\n2.5.3 (2017-10-17)\n------------------\n\nBug fixes:\n\n- Give more context to the 'schema cannot be resolved' warning.  [gotcha]\n\n\n2.5.2 (2017-06-03)\n------------------\n\nBug fixes:\n\n- Fix problem with new zope.interface not accepting None as value.\n  [jensens]\n\n\n2.5.1 (2017-02-27)\n------------------\n\nBug fixes:\n\n- Make sure that all fields are initialized to their default value\n  when items are added via the add form. This is important in the case\n  of fields with a defaultFactory that can change with time\n  (such as defaulting to the current date).\n  [davisagli]\n\n\n2.5.0 (2017-02-12)\n------------------\n\nBreaking changes:\n\n- When calling the DC metadata accessor for ``Description``, remove newlines from the output.\n  This makes the removal of newlines from the description behavior setter in plone.app.dexterity obsolete.\n  [thet]\n\nBug fixes:\n\n- Relax tests for ZMI tabs for compatibility with Zope 4. [davisagli]\n\n\n2.4.5 (2016-11-19)\n------------------\n\nNew features:\n\n- Removed test dependency on plone.mocktestcase [davisagli]\n\n\n2.4.4 (2016-09-23)\n------------------\n\nBug fixes:\n\n- Fix error when copying DX containers with AT children which caused the\n  children to not have the UID updated properly.  [jone]\n\n\n2.4.3 (2016-08-12)\n------------------\n\nBug fixes:\n\n- Use zope.interface decorator.\n  [gforcada]\n\n\n2.4.2 (2016-05-12)\n------------------\n\nFixes:\n\n- Added security declarations from Products.PloneHotfix20160419.  [maurits]\n\n\n2.4.1 (2016-02-27)\n------------------\n\nIncompatibilities:\n\n- addCreator should not add if a creator is already set for content. This prevents every\n  editor on content from adding to the list of creators for an object.\n  [vangheem]\n\n\n2.4.0 (2016-02-17)\n------------------\n\nNew:\n\n- Added Russian translation.  [serge73]\n\n- Updated to and depended on pytz 2015.7 and DateTime 4.0.1.  [jensens]\n\nFixes:\n\n- Skipped the tests\n  ``test_portalTypeToSchemaName_looks_up_portal_for_prefix`` and\n  ``test_getAdditionalSchemata`` with isolation problems in Zope 4.\n  [pbauer]\n\n- Made utils/datify work with newer DateTime and pytz.  Adjust tests\n  to reflect changes.  [jensens]\n\n- Fixed: duplicate aq_base without using Acquistion API resulted in an\n  AttributeError that was masqued in the calling hasattr and resulted\n  in wrong conclusion.  [jensens]\n\n- Made modification test more stable.  [do3cc]\n\n\n2.3.7 (2016-01-08)\n------------------\n\nFixes:\n\n- Sync schema when schema_policy name is changed (issue #44)\n  [sgeulette]\n\n- Corrected tests on date comparison (avoid 1h shift)\n  [sgeulette]\n\n\n2.3.6 (2015-10-28)\n------------------\n\nFixes:\n\n- No longer rely on deprecated ``bobobase_modification_time`` from\n  ``Persistence.Persistent``.\n  [thet]\n\n\n2.3.5 (2015-09-20)\n------------------\n\n- Use registry lookup for types_use_view_action_in_listings\n  [esteele]\n\n- Don't check type constraints in AddForm.update() if request provides\n  IDeferSecurityChecks.\n  [alecm]\n\n\n2.3.4 (2015-08-14)\n------------------\n\n- Avoid our own DeprecationWarning about portalTypeToSchemaName.\n  [maurits]\n\n- Set title on WebDAV upload\n  [tomgross]\n\n2.3.3 (2015-07-29)\n------------------\n\n- This version is still Plone 4.3.x compatible. Newer versions\n  are only Plone 5 compatible.\n\n- Check add_permission before checking constrains. Refs #37\n  [jaroel]\n\n- Remove obsolete css-class and text from statusmessages.\n  [pbauer]\n\n- Complete invalidate_cache.\n  [adamcheasley]\n\n\n2.3.2 (2015-07-18)\n------------------\n\n- Check allowed types for add form.\n  [vangheem]\n\n\n2.3.1 (2015-05-31)\n------------------\n\n- Fix issue where webdav PUT created items with empty id\n  [datakurre]\n\n- fix #27: createContent ignores empty fields\n  [jensens]\n\n\n2.3.0 (2015-03-13)\n------------------\n\n- Use attribute for DefaultAddForm and DefaultEditForm success message so it can\n  be easily customized.\n  [cedricmessiant]\n\n- Big major overhaul to use everywhere the same way to fetch the main schema,\n  behavior schemata and its markers. This was very scrmabled: sometimes\n  behaviors weren't taken into account, or only FTI based behaviors but not\n  those returned by the IBehaviorAssignable adapter. Also the caching was\n  cleaned up. The tests are now better readable (at least I hope so).  In order\n  to avoid circular imports some methods where moved for ``utils.py`` to\n  ``schema.py``.  Deprecations are in place.\n  [jensens]\n\n- Fix (security): Attribute access to schema fields can be protected. This\n  worked for direct schemas, but was not implemented for permissions coming\n  from behaviors.\n  [jensens]\n\n2.2.4 (2014-10-20)\n------------------\n\n- Fix the default attribute accessor to bind field to context when finding\n  the field default.\n  [datakurre]\n\n- fix: when Dexterity container or its children contains any AT content with\n  AT references in them, any move or rename operation for the parent\n  Dexterity object will cause AT ReferenceEngine to remove those references.\n  see #20.\n  [datakurre]\n\n- Let utils.createContent also handle setting of attributes on behaviors, which\n  derive from other behaviors.\n  [thet]\n\n- overhaul (no logic changed):\n  pep8, sorted imports plone.api style, readability, utf8header,\n  remove bbb code (plone 3)\n  [jensens]\n\n2.2.3 (2014-04-15)\n------------------\n\n- Re-release 2.2.2 which was a brown bag release.\n  [timo]\n\n2.2.2 (2014-04-13)\n------------------\n\n- Add a 'success' class to the status message shown after successfully\n  adding or editing an item.  The previous 'info' class is also\n  retained for backwards-compatibility.\n  [davisagli]\n\n- If an object being added to a container already has an id, preserve it.\n  [davisagli]\n\n2.2.1 (2014-02-14)\n------------------\n\n- Also check behavior-fields for IPrimaryField since plone.app.contenttypes\n  uses fields provided by behaviors as primary fields\n  [pbauer]\n\n\n2.2.0 (2014-01-31)\n------------------\n\n- utils.createContent honors behaviors.\n  [toutpt]\n\n- Date index method works even if source field is a dexterity field\n  which provides a  datetime python value.\n  Now you can manually add a field with the name of a common Plone metadata field\n  (as effective_date, publication_date, etc.)\n  [tdesvenain]\n\n- Replace deprecated test assert statements.\n  [timo]\n\n- Put a marker interface on the default edit view so viewlets\n  can be registered for it.\n  [davisagli]\n\n- Ensure FTI's isConstructionAllowed method returns a boolean.\n  [danjacka]\n\n- Hide the Dublin Core tab and show the Properties tab for\n  items when viewed in the ZMI.\n  [davisagli]\n\n- Avoid storing dublin core metadata on new instances unless it\n  differs from the default values.\n  [davisagli]\n\n- Implement CMF's dublin core interfaces inline rather than\n  depending on CMFDefault.\n  [davisagli]\n\n- Support GenericSetup structure import/export of Dexterity content.\n  Content is serialized the same way as for WebDAV,\n  using plone.rfc822. Not all field types are supported yet,\n  but this at least gets the basics in place.\n\n  GS import used to work by accident in a basic way for Dexterity\n  containers. If you were using this, you'll need to recreate your\n  exported files with the rfc822 serialization.\n  [davisagli]\n\n- Creator accessor should return encoded strings\n  If your catalog was broken, try to clear & reindex Creator::\n\n    cat.clearIndex('Creator')\n    cat.manage_reindexIndex(['Creator'])\n\n  [kiorky]\n\n- Use the same message string for the default fieldset as Archetypes does.\n  [davisagli]\n\n2.1.3 (2013-05-26)\n------------------\n\n- Fail gracefully when a schema lookup fails due to schema that doesn't\n  exist or no longer exists for some reason or another.\n  [eleddy]\n\n\n2.1.2 (2013-03-05)\n------------------\n\n- Merged Rafael Oliveira's (@rafaelbco) @content-core views from\n  collective.cmfeditionsdexteritycompat.\n  [rpatterson]\n\n2.1.1 (2013-01-17)\n------------------\n\n* No longer add title and description fields to new FTIs by default.\n  [davisagli, cedricmessiant]\n\n* When pasting into a dexterity container check the FTI for the the pasted\n  object to see if it is allowed in the new container.\n  [wichert]\n\n* Fixed schema caching. Previously, a non-persistent counter would be\n  used as part of the cache key, and changes made to this counter in\n  one process would obviously not propagate to other processes.\n\n  Instead, the cache key now includes the schema and subtypes which\n  are both retrieved from a FTI-specific volatile cache that uses the\n  modification time as its cache key.\n  [malthe]\n\n\n2.1 (2013-01-01)\n----------------\n\n* Added Finnish translations.\n  [pingviini]\n\n* Override allowedContentTypes and invokeFactory from PortalFolder\n  to mimic the behavior of Archetypes based folders. This allows the\n  registration of IConstrainTypes adapters to actually have the\n  expected effect.\n  [gaudenzius]\n\n* The default attribute accessor now also looks through subtypes\n  (behaviors) to find a field default.\n  [malthe]\n\n* Added support in the FTI to look up behaviors by utility name when\n  getting additional schemata (i.e. fields provided by behaviors).\n\n  This functionality makes it possible to create a behavior where the\n  interface is dynamically generated.\n  [malthe]\n\n* Return early for attributes that begin with two underscores.\n  https://github.com/plone/plone.dexterity/pull/11\n  [malthe]\n\n* Make it possible to define a SchemaPolicy for the FTI\n  [Fr\u00e9d\u00e9ric P\u00e9ters]\n  [gbastien]\n\n2.0 (2012-08-30)\n----------------\n\n* Add a UID method to Dexterity items for compatibility with the Archetypes\n  API.\n  [davisagli]\n\n* Remove hard dependency on zope.app.content.\n  [davisagli]\n\n* Use standard Python properties instead of rwproperty.\n  [davisagli]\n\n* Removed support for Plone 3 / CMF 2.1 / Zope 2.10.\n  [davisagli]\n\n* Update package dependencies and imports as appropriate for Zope 2.12 & 2.13.\n  [davisagli]\n\n1.1.2 - 2012-02-20\n------------------\n\n* Fix UnicodeDecodeError when getting an FTI title or description with\n  non-ASCII characters.\n  [davisagli]\n\n1.1.1 - 2012-02-20\n------------------\n\n* When deleting items from a container using manage_delObjects,\n  check for the \"DeleteObjects\" permission on each item being\n  deleted. This fixes\n  http://code.google.com/p/dexterity/issues/detail?id=252\n  [davisagli]\n\n1.1 - 2011-11-26\n----------------\n\n* Added Italian translation.\n  [zedr]\n\n* Ensure that a factory utility really isn't needed before removing it.\n  [lentinj]\n\n* Work around issue where user got a 404 upon adding content if a content\n  rule had moved the new item to a different folder. This closes\n  http://code.google.com/p/dexterity/issues/detail?id=240\n  [davisagli]\n\n* Added events: IEditBegunEvent, IEditCancelledEvent, IEditFinished,\n  IAddBegunEvent, IAddCancelledEvent\n  [jbaumann]\n\n* Make sure Dexterity content items get UIDs when they are created if\n  ``plone.uuid`` is present. This closes\n  http://code.google.com/p/dexterity/issues/detail?id=235\n  [davisagli]\n\n* Make sure the Title() and Description() accessors of containers return an\n  encoded bytestring as expected for CMF-style accessors.\n  [buchi]\n\n* Added zh_TW translation.\n  [marr, davisagli]\n\n1.0.1 - 2011-09-24\n------------------\n\n* Support importing the ``add_view_expr`` property of the FTI via GenericSetup.\n  This closes http://code.google.com/p/dexterity/issues/detail?id=192\n  [davisagli]\n\n* Make it possible to use DefaultAddForm without a form wrapper.\n  [davisagli]\n\n* Make sure the Subject accessor returns an encoded bytestring as expected for\n  CMF-style accessors. This fixes\n  http://code.google.com/p/dexterity/issues/detail?id=197\n  [davisagli]\n\n* Added pt_BR translation.\n  [rafaelbco, davisagli]\n\n\n1.0 - 2011-05-20\n----------------\n\n* Make sure the Title and Description accessors handle a value of None.\n  [davisagli]\n\n* Make sure the Title() accessor for Dexterity content returns an encoded\n  bytestring as expected for CMF-style accessors.\n  [davisagli]\n\n1.0rc1 - 2011-04-30\n-------------------\n\n* Look up additional schemata by adapting to IBehaviorAssignable in cases\n  where a Dexterity instance is available. (The list of behaviors in the\n  FTI is still consulted for add forms.)\n  [maurits]\n\n* Explicitly load CMFCore ZCML.\n  [davisagli]\n\n* Add ids to group fieldsets.\n  [elro]\n\n* Do a deep copy instead of shallow when assigning field defaults. Content\n  generated via script wound up with linked list (and other\n  AbstractCollection) fields.\n  [cah190, esteele]\n\n* Make setDescription coerce to unicode in the same way as setTitle.\n  [elro]\n\n* Change the FTI default to enable dynamic view.\n  [elro]\n\n* Setup folder permissions in the same way as Archetypes so copy / paste /\n  rename work consistently with the rest of Plone.\n  [elro]\n\n* Make sure the typesUseViewActionInListings property is respected when\n  redirecting after edit.\n  [elro, davisagli]\n\n* Fix #145: UnicodeDecodeError After renaming item from @@folder_contents\n  [toutpt]\n\n1.0b7 - 2011-02-11\n------------------\n\n* Add adapter for plone.rfc822.interfaces.IPrimaryFieldInfo.\n  [elro]\n\n* Fixed deadlock in synchronized methods of schema cache by using\n  threading.RLock instead of threading.Lock.\n  [jbaumann]\n\n* Add Spanish translation.\n  [dukebody]\n\n* Add French translation.\n  [toutpt]\n\n\n1.0b6 - 2010-08-30\n------------------\n\n* Send ObjectCreatedEvent event from createContent utility method.\n  [wichert]\n\n* Update content base classes to use allow keyword arguments to set\n  initial values for instance variables.\n  [wichert]\n\n* Avoid empty <div class=\"field\"> tag for title and description in\n  item.pt.\n  [gaudenzius]\n\n\n1.0b5 - 2010-08-05\n------------------\n\n* Fix folder ordering bug.\n  See: http://code.google.com/p/dexterity/issues/detail?id=113\n  [optilude]\n\n* Switch to the .Title() and .Description() methods of fti when used in\n  a translatable context, to ensure that these strings are translated.\n  [mj]\n\n* Add Norwegian translation.\n  [mj]\n\n\n1.0b4 - 2010-07-22\n------------------\n\n* Improve robustness: catch and log import errors when trying to resolve\n  behaviours.\n  [wichert]\n\n* Add German translation from Christian Stengel.\n  [wichert]\n\n\n1.0b3 - 2010-07-19\n------------------\n\n* Clarify license to GPL version 2 only.\n  [wichert]\n\n* Configure Babel plugins for i18n extraction and add a Dutch translation.\n  [wichert]\n\n\n1.0b2 - 2010-05-24\n------------------\n\n* Fix invalid license declaration in package metadata.\n  [wichert]\n\n* Do not assume \"view\" is the right immediate view - in some cases\n  it might not exist. Instead use the absolute URL directly.\n  [wichert]\n\n\n1.0b1 - 2010-04-20\n------------------\n\n* Update the label for the default fieldset to something more humane.\n  [wichert]\n\n* Make the default add form extend BrowserPage to avoid warnings about\n  security declarations for nonexistent methods.  This closes\n  http://code.google.com/p/dexterity/issues/detail?id=69\n  [davisagli]\n\n* For now, no longer ensure that Dexterity content provides ILocation (in\n  particular, that it has a __parent__ pointer), since that causes problems\n  when exporting in Zope 2.10.\n  [davisagli]\n\n* Don't assume the cancel and actions buttons are always present in the\n  default forms.\n  [optilude]\n\n1.0a3 - 2010-01-08\n------------------\n\n* require zope.filerepresentation>=3.6.0 for IRawReadFile\n  [csenger]\n\n1.0a2 - 2009-10-12\n------------------\n\n* Added support for zope.size.interfaces.ISized. An adapter to this interface\n  may be used to specify the file size that is reported in WebDAV operations\n  or used for Plone's folder listings. This requires that the sizeForSorting()\n  method is implemented to return a tuple ('bytes', numBytes), where numBytes\n  is the size in bytes.\n  [optilude]\n\n* Added support for WebDAV. This is primarily implemented by adapting content\n  objects to the IRawReadFile and IRawWriteFile interfaces from the\n  zope.filerepresentation package. The default is to use plone.rfc822 to\n  construct an RFC(2)822 style message containing all fields. One or more\n  fields may be marked with the IPrimaryField interface from that package,\n  in which case they will be sent in the body of the message.\n\n  In addition, the creation of new files (PUT requests to a null resource) is\n  delegated to an IFileFactory adapter, whilst the creation of new directories\n  (MKCOL requests) is delegated to an IDirectoryFactory adapter. See\n  zope.filerepresentation for details, and filerepresentation.py for the\n  default implementation.\n  [optilude]\n\n* Move AddViewActionCompat to the second base class of DexterityFTI, so that\n  the FTI interfaces win over IAction. This fixes a problem with GenericSetup\n  export: http://code.google.com/p/dexterity/issues/detail?id=79\n  [optilude]\n\n* Add getMapping() to AddViewActionCompat.\n  Fixes http://code.google.com/p/dexterity/issues/detail?id=78\n  [optilude]\n\n1.0a1 - 2009-07-25\n------------------\n\n* Initial release\n",
    "bugtrack_url": null,
    "license": "GPL version 2",
    "summary": "Framework for content types as filesystem code and TTW (Zope/CMF/Plone)",
    "version": "3.0.6",
    "project_urls": {
        "Homepage": "https://github.com/plone/plone.dexterity"
    },
    "split_keywords": [
        "plone",
        "dexterity",
        "contenttypes"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8a8b4096c1816d59d04e1c26c0d96ebb964382b82d2ec99629fd70b2e3b27eda",
                "md5": "fa1f496b492e43fe2e6d5ea47ca655bc",
                "sha256": "c97eb687d9df8b314bd6d6b80bdc906efa399c18de7ba811bfe311cc2d456b4a"
            },
            "downloads": -1,
            "filename": "plone.dexterity-3.0.6-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "fa1f496b492e43fe2e6d5ea47ca655bc",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 98433,
            "upload_time": "2024-04-25T19:34:55",
            "upload_time_iso_8601": "2024-04-25T19:34:55.395846Z",
            "url": "https://files.pythonhosted.org/packages/8a/8b/4096c1816d59d04e1c26c0d96ebb964382b82d2ec99629fd70b2e3b27eda/plone.dexterity-3.0.6-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6794a79150503c4778224d5b9ad58bbe6175dbc94648e9f72bde4f01b768f6c4",
                "md5": "e9bac0649de608023e3623f1e64d1b5e",
                "sha256": "59c704e486dd1fe4d8a449d718dfe8e38c70f9da95b7ff824aa4eb6bc69160e8"
            },
            "downloads": -1,
            "filename": "plone_dexterity-3.0.6.tar.gz",
            "has_sig": false,
            "md5_digest": "e9bac0649de608023e3623f1e64d1b5e",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 121995,
            "upload_time": "2024-04-25T19:34:58",
            "upload_time_iso_8601": "2024-04-25T19:34:58.085271Z",
            "url": "https://files.pythonhosted.org/packages/67/94/a79150503c4778224d5b9ad58bbe6175dbc94648e9f72bde4f01b768f6c4/plone_dexterity-3.0.6.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-25 19:34:58",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "plone",
    "github_project": "plone.dexterity",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "plone.dexterity"
}
        
Elapsed time: 0.25445s