Returns an iterable of objects matching criteria expressed in `query`.

        Implementations of query will be the largest differentiating factor
        amongst datastores. All datastores **must** implement query, even using
        query's worst case scenario, see :ref:class:`Query` for details.

        :param query: Query object describing the objects to return.
        :return: iterable cursor with all objects matching criteria

def query(self, query):
        """Returns an iterable of objects matching criteria expressed in `query`.

        Implementations of query will be the largest differentiating factor
        amongst datastores. All datastores **must** implement query, even using
        query's worst case scenario, see :ref:class:`Query` for details.

        :param query: Query object describing the objects to return.
        :return: iterable cursor with all objects matching criteria
        """
        return query((self._deserialised_value(x) for x in self.container.get_objects(prefix=query.key)))