Пример #1
0
 def test_update_changes_modified(self, session):
     repo = Repo(self.p, **self.data)
     initial_timestamp = repo.modified.time()
     session.commit()
     repo.distro = "centos"
     session.commit()
     assert initial_timestamp < repo.modified.time()
Пример #2
0
 def test_update_changes_modified(self, session):
     repo = Repo(self.p, **self.data)
     initial_timestamp = repo.modified.time()
     session.commit()
     repo.distro = "centos"
     session.commit()
     assert initial_timestamp < repo.modified.time()
Пример #3
0
 def test_can_create_with_many_archs(self, session):
     repo = Repo(self.p, **self.data)
     arch1 = Arch(name="x86_64", repo=repo)
     arch2 = Arch(name="arm64", repo=repo)
     session.commit()
     repo = Repo.get(1)
     assert arch1 in repo.archs
     assert arch2 in repo.archs
Пример #4
0
 def test_can_create(self, session):
     Repo(self.p, **self.data)
     session.commit()
     repo = Repo.get(1)
     assert repo.project.name == "ceph"
     assert repo.distro == "ubuntu"
     assert repo.distro_version == "trusty"
     assert repo.flavor == "default"
Пример #5
0
 def test_update_a_repo_url(self, session):
     result = session.app.post_json('/api/repos/ceph/', params=self.repo_data)
     assert result.status_int == 200
     assert not Repo.get(1).url
     new_data = self.repo_data.copy()
     new_data["url"] = "chacra.ceph.com/r/ceph/jewel/"
     result = session.app.post_json('/api/repos/ceph/', params=new_data)
     assert Repo.get(1).url == "chacra.ceph.com/r/ceph/jewel/"
Пример #6
0
 def test_delete_a_repo(self, session):
     result = session.app.post_json('/api/repos/ceph/', params=self.repo_data)
     assert result.status_int == 200
     assert Repo.get(1).status == "requested"
     new_data = self.repo_data.copy()
     new_data["status"] = "deleted"
     result = session.app.post_json('/api/repos/ceph/', params=new_data)
     assert not Repo.get(1)
Пример #7
0
 def test_delete_will_delete_arch(self, session):
     repo = Repo(self.p, **self.data)
     Arch(name="x86_64", repo=repo)
     session.commit()
     repo = Repo.get(1)
     repo.delete()
     session.commit()
     assert not Repo.query.first()
     assert not Arch.query.first()
Пример #8
0
 def test_update_a_repo_url(self, session):
     result = session.app.post_json('/api/repos/ceph/',
                                    params=self.repo_data)
     assert result.status_int == 200
     assert not Repo.get(1).url
     new_data = self.repo_data.copy()
     new_data["url"] = "chacra.ceph.com/r/ceph/jewel/"
     result = session.app.post_json('/api/repos/ceph/', params=new_data)
     assert Repo.get(1).url == "chacra.ceph.com/r/ceph/jewel/"
Пример #9
0
 def test_delete_a_repo(self, session):
     result = session.app.post_json('/api/repos/ceph/',
                                    params=self.repo_data)
     assert result.status_int == 200
     assert Repo.get(1).status == "requested"
     new_data = self.repo_data.copy()
     new_data["status"] = "deleted"
     result = session.app.post_json('/api/repos/ceph/', params=new_data)
     assert not Repo.get(1)
Пример #10
0
 def test_delete_will_delete_arch(self, session):
     repo = Repo(self.p, **self.data)
     Arch(name="x86_64", repo=repo)
     session.commit()
     repo = Repo.get(1)
     repo.delete()
     session.commit()
     assert not Repo.query.first()
     assert not Arch.query.first()
Пример #11
0
 def test_update_repo_with_archs(self, session):
     data = self.repo_data.copy()
     data["archs"] = ["x86_64"]
     session.app.post_json('/api/repos/ceph/', params=data)
     repo = Repo.get(1)
     assert len(repo.archs) == 1
     data["archs"] = ["x86_64", "arm64"]
     session.app.post_json('/api/repos/ceph/', params=data)
     repo = Repo.get(1)
     assert len(repo.archs) == 2
Пример #12
0
 def test_update_repo_with_archs(self, session):
     data = self.repo_data.copy()
     data["archs"] = ["x86_64"]
     session.app.post_json('/api/repos/ceph/', params=data)
     repo = Repo.get(1)
     assert len(repo.archs) == 1
     data["archs"] = ["x86_64", "arm64"]
     session.app.post_json('/api/repos/ceph/', params=data)
     repo = Repo.get(1)
     assert len(repo.archs) == 2
Пример #13
0
    def index(self):
        documentation = "https://github.com/ceph/shaman#shaman"
        projects = Project.query.all()
        now = datetime.datetime.utcnow()
        # five days worth of data
        periods = [
            (now - datetime.timedelta(days=day-1), now - datetime.timedelta(days=day+1))
            for day in range(0, 10)
        ]
        area_data = []

        for upper_range, lower_range in periods:
            day = lower_range + datetime.timedelta(days=1)
            day_data = {'period': day.strftime("%Y-%m-%d")}
            for project in projects:
                repository_count = Repo.filter_by(
                    project=project).filter(Repo.status == "ready").filter(
                        and_(Repo.modified > lower_range),
                        and_(Repo.modified < upper_range)
                ).count()
                day_data[str(project.name)] = int(repository_count)
            area_data.append(day_data)

        latest_repos = Repo.query.filter_by(status="ready").order_by(desc(Repo.modified)).limit(10).all()
        latest_builds = Build.query.filter_by(status="completed").order_by(desc(Build.modified)).limit(10).all()

        return dict(
            description=description,
            documentation=documentation,
            area_data=str(area_data),
            projects=[str(p.name) for p in projects],
            latest_repos=latest_repos,
            latest_builds=latest_builds,
        )
Пример #14
0
 def test_can_create(self, session):
     Repo(self.p, **self.data)
     session.commit()
     repo = Repo.get(1)
     assert repo.project.name == "ceph"
     assert repo.distro == "ubuntu"
     assert repo.distro_version == "trusty"
     assert repo.flavor == "default"
Пример #15
0
 def test_create_a_repo(self, session):
     result = session.app.post_json('/api/repos/ceph/', params=self.repo_data)
     assert result.status_int == 200
     repo = Repo.get(1)
     assert repo.ref == "jewel"
     assert repo.project.name == "ceph"
     assert repo.flavor == "default"
     assert repo.extra["version"] == "10.2.2"
Пример #16
0
 def test_can_create_with_many_archs(self, session):
     repo = Repo(self.p, **self.data)
     arch1 = Arch(name="x86_64", repo=repo)
     arch2 = Arch(name="arm64", repo=repo)
     session.commit()
     repo = Repo.get(1)
     assert arch1 in repo.archs
     assert arch2 in repo.archs
Пример #17
0
 def __init__(self, _id):
     self.project = Project.get(request.context['project_id'])
     self.repo = Repo.get(_id)
     if not self.project:
         # TODO: nice project not found error template
         abort(404, 'project not found')
     if not self.repo:
         # TODO: nice project not found error template
         abort(404, 'build not found')
Пример #18
0
 def test_create_a_repo(self, session):
     result = session.app.post_json('/api/repos/ceph/',
                                    params=self.repo_data)
     assert result.status_int == 200
     repo = Repo.get(1)
     assert repo.ref == "jewel"
     assert repo.project.name == "ceph"
     assert repo.flavor == "default"
     assert repo.extra["version"] == "10.2.2"
Пример #19
0
    def index(self):
        repos = Repo.filter_by(project=self.project).order_by(desc(Repo.modified)).all()
        distinct = {
            "refs": list(set([b.ref for b in repos]))
        }

        return dict(
            project_name=self.project_name,
            distinct=distinct,
            builds=repos,
            section="Repos",
        )
Пример #20
0
    def index(self):
        repos = Repo.filter_by(
            project=self.project,
            ref=request.context['ref'],
            sha1=request.context['sha1'],
            flavor=self.flavor_name
        ).order_by(desc(Repo.modified)).all()

        return dict(
            project_name=self.project.name,
            builds=repos,
            breadcrumb="> {} > {} > {}".format(request.context['ref'], request.context['sha1'], self.flavor_name),
            section="Repos",
        )
Пример #21
0
    def index(self):
        repos = Repo.filter_by(
            project=self.project,
            ref=self.ref_name
        ).order_by(desc(Repo.modified)).all()

        distinct = {
            "sha1s": list(set([r.sha1 for r in repos]))
        }

        return dict(
            project_name=self.project.name,
            distinct=distinct,
            builds=repos,
            breadcrumb="> {}".format(self.ref_name),
            section="Repos",
        )
Пример #22
0
    def index(self):
        repos = Repo.filter_by(
            project=self.project,
            ref=request.context['ref'],
            sha1=self.sha1_name
        ).order_by(desc(Repo.modified)).all()

        distinct = {
            "flavors": list(set([r.flavor for r in repos]))
        }

        return dict(
            project_name=self.project.name,
            distinct=distinct,
            builds=repos,
            breadcrumb="> {} > {}".format(request.context['ref'], self.sha1_name),
            section="Repos",
        )
Пример #23
0
 def apply_filters(self, filters):
     # TODO: allow operators
     filters = deepcopy(filters)
     try:
         project = Project.filter_by(name=filters.pop('project')).first()
         query = Repo.filter_by(project=project)
     except KeyError:
         query = Repo.query
     if filters.get("distros", None):
         # TODO: we'll need some sort of schema validation here
         distro_list = util.parse_distro_query(filters.pop("distros"))
         distro_filter_list = []
         has_arch_filter = False
         for distro in distro_list:
             # for deb-based distros we store codename in the db as version,
             # so try first with the codename, but fallback to
             # distro_version otherwise
             version_filter = distro["distro_codename"] or distro['distro_version']
             if not version_filter:
                 abort(400, "Invalid version or codename for distro: %s" % distro["distro"])
             repo_filters = [Repo.distro == distro["distro"], Repo.distro_version == version_filter]
             if distro["arch"]:
                 repo_filters.append(Arch.name == distro["arch"])
                 has_arch_filter = True
             distro_filter_list.append(
                 and_(*repo_filters)
             )
         if has_arch_filter:
             query = query.join(Repo.archs).filter(or_(*distro_filter_list))
         else:
             query = query.filter(or_(*distro_filter_list))
     for k, v in filters.items():
         if k not in self.filters:
             # TODO: improve error reporting
             # 'invalid query params: %s' % k
             abort(400)
         if k in self.filters:
             query = self.filter_repo(k, v, query)
     return query
Пример #24
0
    def index(self):
        documentation = "https://github.com/ceph/shaman#shaman"
        projects = Project.query.all()
        now = datetime.datetime.utcnow()
        # five days worth of data
        periods = [(now - datetime.timedelta(days=day - 1),
                    now - datetime.timedelta(days=day + 1))
                   for day in range(0, 10)]
        area_data = []

        for upper_range, lower_range in periods:
            day = lower_range + datetime.timedelta(days=1)
            day_data = {'period': day.strftime("%Y-%m-%d")}
            for project in projects:
                repository_count = Repo.filter_by(project=project).filter(
                    Repo.status == "ready").filter(
                        and_(Repo.modified > lower_range),
                        and_(Repo.modified < upper_range)).count()
                # Do not add all the projects that haven't built anything for
                # the day
                if int(repository_count) == 0:
                    continue
                day_data[str(project.name)] = int(repository_count)
            area_data.append(day_data)

        latest_repos = Repo.query.filter_by(status="ready").order_by(
            desc(Repo.modified)).limit(10).all()
        latest_builds = Build.query.filter_by(status="completed").order_by(
            desc(Build.modified)).limit(10).all()

        return dict(
            description=description,
            documentation=documentation,
            area_data=str(area_data),
            projects=[str(p.name) for p in projects],
            latest_repos=latest_repos,
            latest_builds=latest_builds,
        )
Пример #25
0
 def setup(self):
     self.p = Project("ceph")
     self.data = base_repo_data()
     self.repo = Repo(self.p, **self.data)
     Arch(name="x86_64", repo=self.repo)
Пример #26
0
 def test_can_create_with_extra(self, session):
     r = Repo(self.p, **self.data)
     r.extra = dict(version="10.2.2")
     session.commit()
     repo = Repo.get(1)
     assert repo.extra['version'] == "10.2.2"
Пример #27
0
 def test_sets_modified(self, session):
     repo = Repo(self.p, **self.data)
     session.commit()
     assert repo.modified.timetuple()
Пример #28
0
 def test_can_create_with_arch(self, session):
     repo = Repo(self.p, **self.data)
     arch = Arch(name="x86_64", repo=repo)
     session.commit()
     repo = Repo.get(1)
     assert arch in repo.archs
Пример #29
0
 def test_can_create_with_arch(self, session):
     repo = Repo(self.p, **self.data)
     arch = Arch(name="x86_64", repo=repo)
     session.commit()
     repo = Repo.get(1)
     assert arch in repo.archs
Пример #30
0
 def test_can_create_with_extra(self, session):
     r = Repo(self.p, **self.data)
     r.extra = dict(version="10.2.2")
     session.commit()
     repo = Repo.get(1)
     assert repo.extra['version'] == "10.2.2"