def test_project_get_one_with_builds(self, f_users, f_mock_chroots, f_coprs, f_builds, f_db): p_id_list = [p.id for p in self.basic_coprs_list] for p_id in p_id_list: href = "/api_2/projects/{}?show_builds=True".format(p_id) r = self.tc.get(href) assert r.status_code == 200 obj = json.loads(r.data.decode("utf-8")) assert obj["project"]["id"] == p_id assert obj["_links"]["self"]["href"] == href project = CoprsLogic.get_by_id(p_id).one() builds = BuildsLogic.get_multiple_by_copr(project).all() assert len(obj["project_builds"]) == len(builds)
def test_project_get_one_with_builds( self, f_users, f_mock_chroots, f_coprs, f_builds, f_db): p_id_list = [p.id for p in self.basic_coprs_list] for p_id in p_id_list: href = "/api_2/projects/{}?show_builds=True".format(p_id) r = self.tc.get(href) assert r.status_code == 200 obj = json.loads(r.data.decode("utf-8")) assert obj["project"]["id"] == p_id assert obj["_links"]["self"]["href"] == href project = CoprsLogic.get_by_id(p_id).one() builds = BuildsLogic.get_multiple_by_copr(project).all() assert len(obj["project_builds"]) == len(builds)
def get_build_list(ownername, projectname, packagename=None, status=None, **kwargs): copr = get_copr(ownername, projectname) query = BuildsLogic.get_multiple_by_copr(copr) if packagename: query = BuildsLogic.filter_by_package_name(query, packagename) # WORKAROUND # We can't filter builds by status directly in the database, because we # use a logic in Build.status property to determine a build status. # Therefore if we want to filter by `status`, we need to query all builds # and filter them in the application and then return the desired number. limit = kwargs["limit"] paginator_limit = None if status else kwargs["limit"] del kwargs["limit"] paginator = Paginator(query, models.Build, limit=paginator_limit, **kwargs) builds = paginator.map(to_dict) if status: builds = [b for b in builds if b["state"] == status][:limit] paginator.limit = limit return flask.jsonify(items=builds, meta=paginator.meta)