~fabricematrat/charmworld/redirect-charm

« back to all changes in this revision

Viewing changes to charmworld/search.py

  • Committer: Tarmac
  • Author(s): Brad Crittenden
  • Date: 2014-10-16 14:02:32 UTC
  • mfrom: (517.1.3 bug-1379397)
  • Revision ID: tarmac-20141016140232-dyls640scsvdz0a3
Add 'start' parameter to API search.

The start is the zero-based index into the search results.  It can be used
in conjunction with limit.

https://codereview.appspot.com/158010043/

R=jcsackett. Fixes: https://bugs.launchpad.net/bugs/1379397.

Approved by Juju Gui Bot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
63
63
    """Raised when a negative limit is specified."""
64
64
 
65
65
 
 
66
class InvalidStart(Exception):
 
67
    """Raised when an invalid 'start' is specified."""
 
68
 
 
69
 
66
70
class IncompatibleMapping(Exception):
67
71
    """Raised when desired mapping is not compatible with active mapping."""
68
72
 
615
619
    def api_search(self, text='', filters=None, type_=None,
616
620
                   limit=None, valid_only=True, sort=None,
617
621
                   autocomplete=False, doctype=CHARM,
618
 
                   min_score=None):
 
622
                   min_score=None, start=None):
619
623
        """Search charms and bundles (as used by the API).
620
624
 
621
625
        :param text: A string to search for -- will be analyzed (i.e. split
641
645
            overridden by use of 'charm:' or 'bundle:' query string prefix.
642
646
        :param min_score: Only return results with a score of at least
643
647
            min_score.
 
648
        :param start: Return the 'limit' number of items from the start
 
649
            index, e.g. items[start:start+limit].  Start is zero-based.
644
650
        return: A list of {doctype=<charm|bundle>, data=entity}.
645
651
        """
646
652
        if limit is not None:
647
653
            if limit < 0:
648
654
                raise NegativeLimit()
649
655
 
 
656
        if start is not None:
 
657
            if start < 0:
 
658
                raise InvalidStart()
 
659
 
650
660
        text, doctype, all_requested = extract_doctype_from_search_terms(
651
661
            text, doctype)
652
662
 
679
689
            else:
680
690
                limit = min(limit, self.default_search_limit)
681
691
 
 
692
        if start is not None and limit is not None:
 
693
            limit = limit + start
 
694
 
682
695
        try:
683
696
            hits = self._unlimited_search(dsl, limit)
 
697
            if start is not None:
 
698
                hits = hits[start:]
684
699
        except ElasticHttpError:
685
700
            hits = []
686
701