"""Mongodb implementations of learning searches."""

# pylint: disable=no-init
#     Numerous classes don't require __init__.
# pylint: disable=too-many-public-methods,too-few-public-methods
#     Number of methods are defined in specification
# pylint: disable=protected-access
#     Access to protected methods allowed in package mongo package scope
# pylint: disable=too-many-ancestors
#     Inheritance defined in specification



from .. import utilities
from ...abstract_osid.learning import searches as abc_learning_searches
from dlkit.mongo.osid import searches as osid_searches




class ObjectiveSearch(abc_learning_searches.ObjectiveSearch, osid_searches.OsidSearch):
    """``ObjectiveSearch`` defines the interface for specifying objective search options."""

    @utilities.arguments_not_none
    def search_among_objectives(self, objective_ids):
        """Execute this search among the given list of objectives.


        arg:    objective_ids (osid.id.IdList): list of objectives
        raise:  NullArgument - ``objective_ids`` is ``null``
        *compliance: mandatory -- This method must be implemented.*


        """
        raise errors.Unimplemented()

    @utilities.arguments_not_none
    def order_objective_results(self, objective_search_order):
        """Specify an ordering to the search results.


        arg:    objective_search_order
                (osid.learning.ObjectiveSearchOrder): objective search
                order
        raise:  NullArgument - ``objective_search_order`` is ``null``
        raise:  Unsupported - ``objective_search_order`` is not of this
                service
        *compliance: mandatory -- This method must be implemented.*


        """
        raise errors.Unimplemented()

    @utilities.arguments_not_none
    def get_objective_search_record(self, objective_search_record_type):
        """Gets the objective search record corresponding to the given objective search record ``Type``.


        This method is used to retrieve an object implementing the
        requested record.


        arg:    objective_search_record_type (osid.type.Type): an
                objective search record type
        return: (osid.learning.records.ObjectiveSearchRecord) - the
                objective search record
        raise:  NullArgument - ``objective_search_record_type`` is
                ``null``
        raise:  OperationFailed - unable to complete request
        raise:  Unsupported -
                ``has_search_record_type(objective_search_record_type)``
                is ``false``
        *compliance: mandatory -- This method must be implemented.*