.. _property-ref:

Properties and Types
====================

CouchDB document are saved as JSON object. So any type supported by javascript could be saved. Simplecouchdb provides a fixed set of values types that could be saved in database. :ref:`property-class` can define new types and their validations.

CouchDB values types
--------------------

Document types can be one of the folllowing:

:class:`unicode`
 
    Striung value

:class:`int`
    
    Integer value

:class:`long`

    Long value

:class:`bool`
    
    Boolean value

:class:`float`

    Float valye

:class:`decimal.Decimal`

    Decimal value

:class:`datetime.datetime`

    Datetime value. Datetime value are converted in :rfc:`8601` in CouchDB

:class:`datetime.date`

    Date value.

:class:`datetime.time`

    Time value.

:class:`list`

    List value

:class:`tuple`

    Tuple are saved as list.

Properties Classes
------------------

All document property classes provided by simplecouchdb.schema are subclasses of the :ref:`property-class`, and support all of the base constructor's arguments. See the base class documentation for information about those arguments.

.. autoclass:: simplecouchdb.schema.StringProperty

.. autoclass:: simplecouchdb.schema.IntegerProperty

.. autoclass:: simplecouchdb.schema.FloatProperty

.. autoclass:: simplecouchdb.schema.BooleanProperty

.. autoclass:: simplecouchdb.schema.DecimalProperty

.. autoclass:: simplecouchdb.schema.DateTimeProperty

.. autoclass:: simplecouchdb.schema.DateProperty

.. autoclass:: simplecouchdb.schema.TimeProperty

.. autoclass:: simplecouchdb.schema.ListProperty


.. _property-class:

Property base class
-------------------

.. autoclass:: simplecouchdb.schema.Property

    **Properties**

    .. attribute:: verbose_name

         str, verbose name of field, could be use for description

    .. attribute:: name

        str, name of field

    .. attribute:: default

        default value

    .. attribute:: required

        True if required

    .. attribute:: validators

        callable or list of callable to validate the field

    **Methods***

    .. automethod:: simplecouchdb.schema.Property.validate

    .. automethod:: simplecouchdb.schema.Property.default_value

    .. automethod:: simplecouchdb.schema.Property.empty

    .. automethod:: simplecouchdb.schema.Property._to_python

    .. automethod:: simplecouchdb.schema.Property._to_json

Exceptions
----------

.. autoexception:: simplecouchdb.schema.exceptions.DuplicatePropertyError

.. autoexception:: simplecouchdb.schema.exceptions.BadValueError

