Change & Version Information
============================

The following is a summary of changes and improvements to
:mod:`eulfedora`.  New features in each version should be listed, with
any necessary information about installation or upgrade notes.

0.22
----

* A repository administrator can configure a script to periodically check
  content checksums in order to identify integrity issues so that they can
  be dealt with.
* A repository administrator will receive an email notification if the system
  encounters bad or missing checksums so that they can then resolve any
  integrity issues.
* A repository admin can view fixity check results for individual objects
  in the premis data stream (for objects where premis exists) in order to
  view a more detailed result and the history.
* Support for *basic* HTTP Range requests in :meth:`eulfedora.views.raw_datastream`
  (e.g., to allow audio/video seek in HTML5 media players)

0.21
----

* It is now possible to add new datastreams using
  :meth:`eulfedora.models.DigitalObject.getDatastreamObject` (in contrast
  to predefined datastreams on a subclass of
  :class:`~eulfedora.models.DigitalObject`).  Adding new datastreams is
  supported when ingesting a new object as well as when saving an
  existing object.  This method can also be used to update
  existing datastreams that are not predefined on a DigitalObject subclass.

0.20
----

* Development requirements can now be installed as an optional requirement
  of the eulfedora package (``pip install "eulfedora[dev]"``).
* Unit tests have been updated to use :mod:`nose`
* Provides a nose plugin to set up and tear down for a test Fedora Commons
  repository instance for tests, as an alternative to the custom test runners.


0.19.2
------

* Bugfix: don't auto-create an XML datastream at ingest when the xml content
  is empty (i.e., content consists of bootstrapped :class:`xmlmap.XmlObject` only)

0.19.1
------

* Bugfix: handle Fedora restriction of ownerId field length to 64 characters.
  When setting :attr:`~eulfedora.models.DigitalObject.owner`, will now warn
  and truncate the value to allow the object to be saved.

0.19.0
------

* New command-line script ``fedora-checksums`` for datastream
  checksums validation and repair.  See :doc:`scripts` for more
  details.
* :class:`~eulfedora.models.DigitalObject` now provides access to the
  Fedora built-in audit trail; see
  :attr:`~eulfedora.models.DigitalObject.audit_trail`.  Also provides:

  * :meth:`eulfedora.views.raw_audit_trail`: Django view to serve out
    audit trail XML, comparable to
    :meth:`eulfedora.views.raw_datastream`.
  * :class:`~eulfedora.models.DigitalObject` attribute
    :attr:`~eulfedora.models.DigitalObject.audit_trail_users`: set of
    all usernames listed in the audit trail (i.e., any users who have
    modified the object)
  * :class:`~eulfedora.models.DigitalObject` attribute
    :attr:`~eulfedora.models.DigitalObject.ingest_user`: username
    responsible for ingesting the object into Fedora if ingest is
    listed in the audit trail
* :class:`~eulfedora.models.Relation` now supports recursive relations
  via the option ``type="self"``.
* API wrappers have been updated to take advantage of all methods
  available in the REST API as of Fedora 3.4 which were unavailable in
  3.2.  This removes the need for any SOAP-based APIs and the
  dependency on :mod:`soaplib`.
* Minor API / unit test updates to support Fedora 3.5 in addition to
  3.4.x.

0.18.1
------

* Bugfix: Default checksum type for
  :class:`~eulfedora.models.DatastreamObject` was previously ignored
  when creating a new datastream from scratch (e.g., when ingesting a
  new object).  In certain versions of Fedora, this could result in
  datastreams with missing checksums (checksum type of 'DISABLED',
  checksum value of 'none').

0.18.0
------

* Exposed RIsearch ``count`` return option via
  :meth:`eulfedora.api.ResourceIndex.count_statements`
* :class:`~eulfedora.models.DatastreamObject` now supports setting
  datastream content by URI through the new
  :attr:`~eulfedora.models.DatastreamObject.ds_location` attribute
  (this is in addition to the previously-available
  :attr:`~eulfedora.models.DatastreamObject.content` attribute).


0.17.0
------

* Previously, several of the REST API calls in
  :class:`eulfedora.api.REST_API` suppressed errors and only returned
  True or False for success or failure; this made it difficult to
  determine what went wrong when an API call fails.  This version of
  :mod:`eulfedora` revises that logic so that all methods in
  :class:`eulfedora.api.REST_API` will raise exceptions when an
  exception-worthy error occurs (e.g., permission denied, object not
  found, etc. - anything that returns a 40x or 500 HTTP error response
  from Fedora).  The affected REST methods are:

    * :meth:`~eulfedora.api.REST_API.addDatastream`
    * :meth:`~eulfedora.api.REST_API.modifyDatastream`
    * :meth:`~eulfedora.api.REST_API.purgeDatastream`
    * :meth:`~eulfedora.api.REST_API.modifyObject`
    * :meth:`~eulfedora.api.REST_API.purgeObject`
    * :meth:`~eulfedora.api.REST_API.setDatastreamState`
    * :meth:`~eulfedora.api.REST_API.setDatastreamVersionable`

* New custom Exception :class:`eulfedora.util.ChecksumMismatch`, which
  is a subclass of :class:`eulfedora.util.RequestFailed`.  This
  exception will be raised if
  :meth:`~eulfedora.api.REST_API.addDatastream` or
  :meth:`~eulfedora.api.REST_API.modifyDatastream` is called with a
  checksum value that Fedora determines to be invalid.

  .. note::

    If :meth:`~eulfedora.api.REST_API.addDatastream` is called with a
    checksum value but no checksum type, current versions of Fedora
    ignore the checksum value entirely; in particular, an invalid
    checksum with no type does not result in a
    :class:`~eulfedora.util.ChecksumMismatch` exception being raised.
    You should see a warning if your code attempts to do this.

* Added read-only access to :class:`~eulfedora.models.DigitalObject`
  owners as a list; changed default
  :meth:`eulfedora.models.DigitalObject.index_data` to make owner
  field a list.

* Modified default :meth:`eulfedora.models.DigitalObject.index_data`
  and sample Solr schema to include a new field (dsids) with a list of
  datastream IDs available on the indexed object.


0.16.0 - Indexing Support
-------------------------

* Addition of :mod:`eulfedora.indexdata` to act as a generic
  webservice that can be used for the creation and updating of indexes
  such as SOLR; intended to be used with :mod:`eulindexer`.


0.15.0 - Initial Release
------------------------

* Split out fedora-specific components from :mod:`eulcore`; now
  depends on :mod:`eulxml`.
