def get_two_last()

in crashclouseau/buildhub.py [0:0]


def get_two_last(buildid, channel, product):
    """Get the two last build (including the one from buildid)"""
    buildid = utils.get_buildid(buildid)
    product = PRODS.get(product, product)
    data = {
        "aggs": {
            "buildids": {
                "terms": {"field": "build.id", "size": 2, "order": {"_term": "desc"}},
                "aggs": {
                    "revisions": {"terms": {"field": "source.revision", "size": 1}},
                    "versions": {"terms": {"field": "target.version", "size": 1}},
                },
            }
        },
        "query": {
            "bool": {
                "filter": [
                    {"term": {"target.channel": channel}},
                    {"term": {"source.product": product}},
                    {"range": {"build.id": {"lte": buildid}}},
                    {"regexp": {"target.version": VERSION_PATS.get(channel, "*")}},
                ]
            }
        },
        "size": 0,
    }

    def get_info(data):
        bids = []
        for i in data["aggregations"]["buildids"]["buckets"]:
            bid = i["key"]
            revision = utils.short_rev(i["revisions"]["buckets"][0]["key"])
            version = i["versions"]["buckets"][0]["key"]
            bids.append({"buildid": bid, "revision": revision, "version": version})

        if bids[0]["buildid"] != buildid:
            return None

        x = bids[0]
        bids[0] = bids[1]
        bids[1] = x

        return bids

    return make_request(data, 0.1, 100, get_info)