Plone Add-on Gallery

collective.edtf-behavior

https://secure.travis-ci.org/collective/collective.edtf_behavior.png?branch=master Coveralls License Join the chat at https://gitter.im/collective/collective.edtf_behavior

collective.edtf_behavior

A Plone behavior which provides a EDTF Date field and some indexes to search and sort on complex and historic dates.

Note: the current implementation of the used library python-edtf , still uses an earlier draft of the standard: http://www.loc.gov/standards/datetime/pre-submission.html

Features

  • Allows unspecific dates or date intervals: “1989-11” or “1989-11~” or “1989-11-01/1989-11-30”

  • Seasons: 2001-21 >> Spring, 2001

  • old dates like 03.08.1492

  • Search indexes: date_earliest and date_latest

  • Sort indexes: date_sort_ascending and date_sort_descending

Installation

Install collective.edtf_behavior by adding it to your buildout:

[buildout]

...

eggs =
    collective.edtf_behavior

and then running bin/buildout

After you activated the add-on in the Plone Add-ons section, you can Enable this behavior on any Dexterity based content type.

Querying

from plone import api

find any document which earliest date is 06.02.1920 or later.

results = api.content.find(
    portal_type='Document',
    date_earliest={
        'query': datetime.date(1920, 2, 6),
        'range': 'min',
    },
)

find any document which latest date is 11.11.1711 or earlier.

results = api.content.find(
    portal_type='Document',
    date_latest={
        'query': datetime.date(1711, 11, 11),
        'range': 'max',
    },
)

This package provides a DateRangeInRangeIndex named edtf_start_end_range.

find all documents that fall at least with one start/end date of there interval into the range:

results = api.content.find(
    portal_type='Document',
    edtf_start_end_range={
        'start': datetime.date(1711, 11, 11),
        'end':   datetime.date(1920, 2, 6),
    },
)

For more examples how to query the indexes, have a look at the tests .

Extending it

One could improve indexing by using a DateRangeIndex, like the effectiveRange index in Plone if needed.

<!-- Example of a DateRangeIndex like the effectiveRange index in Plone -->
<index name="edtf_date_range" meta_type="DateRangeIndex"
  since_field="date_earliest" until_field="date_latest" />

Contribute

Support

If you are having issues, please let us know. You can reach us on Gitter.

License

The project is licensed under the GPLv2.

Contributors

Changelog

1.0.3 (2019-08-26)

  • Faxed test and test setup, small cleanup [MrTango]

1.0.2 (2019-03-22)

  • Add edtf_parseable validator (constraint) to edtf_behavior [MrTango]

1.0.1 (2019-03-18)

  • Add absolute_import statement to all files, to improve Py3 support, fix README syntax [MrTango]

1.0 (2019-03-18)

  • Add edtf_start_end_range index and document querying in the readme. [MrTango]

1.0a1 (2019-03-14)

  • Initial release, with EDTF behavior and 4 main indexes. [MrTango]