##
## interfaces.py
## Login : <uli@pu.smp.net>
## Started on  Sat May 28 13:36:51 2011 Uli Fouquet
## $Id$
## 
## Copyright (C) 2011 Uli Fouquet
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
## 
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##
"""
Interfaces for :mod:`waeup.sirp.index`.
"""
from zope.index.interfaces import IInjection
from zope.catalog.field import IFieldIndex

class IUnique(IInjection):
    def index_doc(docid, value):
        """Add a document to the index.

        `docid`: int, identifying the document

        `value`: the value to be indexed

        return: None

        This can also be used to reindex documents.

        If the same value is already stored under a different `docid`,
        a :exc:`KeyError` is raised.
        """


class IUniqueFieldIndex(IFieldIndex):
    """A field index that only accepts unique values.
    """

    def index_doc(docid, value):
        """Index `value` under the given `docid`.

        Raises :exc:`KeyError` if the value is already stored for a
        different docid (unique-constraint violation).
        """
