'Return a list of methods implementing Python constraints.'

@property
def _constraint_methods(self):

    def is_constraint(func):
        return (callable(func) and hasattr(func, '_constrains'))
    cls = type(self)
    methods = []
    for (attr, func) in getmembers(cls, is_constraint):
        for name in func._constrains:
            field = cls._fields.get(name)
            if (not field):
                _logger.warning('method    %s.%s:    @constrains    parameter    %r    is    not    a    field    name', cls._name, attr, name)
            elif (not (field.store or field.inverse or field.inherited)):
                _logger.warning('method    %s.%s:    @constrains    parameter    %r    is    not    writeable', cls._name, attr, name)
        methods.append(func)
    cls._constraint_methods = methods
    return methods
