'Given a value, coerce it into the target type.
Can be overridden by custom subclasses to coerce incoming
data into a particular type.
By default, raises ``ValueError``.
This method is called in different scenarios depending on if
the parent class is of type :class:`.Mutable` or of type
:class:`.MutableComposite`.  In the case of the former, it is called
for both attribute-set operations as well as during ORM loading
operations.  For the latter, it is only called during attribute-set
operations; the mechanics of the :func:`.composite` construct
handle coercion during load operations.
:param key: string name of the ORM-mapped attribute being set.
:param value: the incoming value.
:return: the method should return the coerced value, or raise
``ValueError`` if the coercion cannot be completed.'

@classmethod
def coerce(cls, key, value):

    if (value is None):
        return None
    msg = "Attribute    '%s'    does    not    accept    objects    of    type    %s"
    raise ValueError((msg % (key, type(value))))
