==========
Annotation
==========

The :mod:`helmholtz.annotation` component allows you to attach arbitrary notes 
or files to any item in the database.

This component depends on :mod:`helmholtz.core` and :mod:`helmholtz.units`.

Documentation to follow...

.. it seems to me that this needs some work. What are TextAnnotation and DocumentAnnotation for?
.. For example, IntegerText does not inherit from TextAnnotation.

.. Suggested renaming:
..    IntegerText --> TextAnnotationI
..    IntegerDocument --> DocumentAnnotationI
..    CharText --> TextAnnotationC  
..    etc.
    
.. We could also do with some helper functions or classes, e.g.

.. def annotate(object, annotation):
..    """Annotate a database object with text or with an uploaded file."""
..    # this function takes care of determining whether object has an int
..    # or char primary key, and of choosing the right subclass of Annotation
..    # to use.
..    ...

Reference
---------

.. automodule:: helmholtz.annotation.models

.. autoclass:: Annotation
   :members:
   
.. autoclass:: IntegerAnnotation
   :members:

.. autoclass:: IntegerText
   :members:

.. autoclass:: IntegerDocument
   :members:

.. autoclass:: CharAnnotation
   :members:

.. autoclass:: CharText
   :members:

.. autoclass:: CharDocument
   :members:

.. autoclass:: Descriptor
   :members:

.. autoclass:: StaticDescription
   :members:

.. autoclass:: ContentTypeParameter
   :members:

.. autoclass:: TextAnnotation
   :members:

.. autoclass:: DocumentAnnotation
   :members:

.. autoclass:: IsAnnotated
   :members:

.. autoclass:: IntegerObjectIsAnnotated
   :members:

.. autoclass:: CharObjectIsAnnotated
   :members: