예제 #1
0
    def post(self, send_build):
        """ launch build """
        project_name = pecan.request.context['project_name']
        user = User.fetch(pecan.request.context['username'])
        project = Project.fetch(user.username, project_name)

        if project is None:
            # The project doesn't exist
            # We have to create it
            # TODO Maybe it's better to force users to create project before
            # they can create builds
            sent_project = {"name": project_name, "username": user.username}
            project = Project(sent_project, sub_objects=False)
            if not project.create():
                # Handle error
                return {"result": "Error creating %s project" % project_name}

        build = Build(send_build)
        build.username = user.username
        build.project_name = project.name
        build.create()
        carrier = Carrier(pecan.conf.rabbit_server, pecan.conf.rabbit_port,
                          pecan.conf.rabbit_user, pecan.conf.rabbit_password,
                          pecan.conf.rabbit_vhost, pecan.conf.rabbit_db)
        carrier.declare_queue('builds.queue')
        # carrier.declare_builds()
        if not carrier.send_message(build.dumps(), 'builds.queue'):
            return None
        return {"result": {"build": int(build.id_)}}
예제 #2
0
def update_user_info_from_gitlab(username, access_token):
    user = User.fetch(username, with_password=False)
    # TODO handle better access
    #    user = User.fetch_from_github_token(access_token)
    #    if user is None or user.username != username:
    #        return False
    # Get data from github
    gl_user = get_user(user.id_gitlab, access_token)
    gl_repos = get_user_repos(user.id_gitlab, access_token)
    gl_orgs = get_user_orgs(username, access_token)

    # Update user data
    user.email = gl_user.get('email')
    #user.github_url = gh_user['html_url']
    user.name = gl_user['name']
    user.orgs = [org['name'] for org in gl_orgs]
    # Update repos and create it if not exists
    for repo in gl_repos:
        project = Project.fetch(user.username, repo['name'])
        if project is None:
            project = Project({
                "name": repo['name'],
                "description": repo['description'],
                "username": user.username,
                "enabled": False,
                "gitlab_project_id": repo['id'],
                "url": repo['web_url'],
            })
            project.create()
        # TODO get Project status (webhook) (enable) from gitlab
        # Save project
        project.update()
    # Update user orgs
    user._save()
    return True
예제 #3
0
def update_group_info_from_gitlab(group, access_token):
    # TODO handle better access
    #    user = User.fetch_from_github_token(access_token)
    #    if user is None or user.username != username:
    #        return False
    # Get data from gitlab
    gl_repos = get_group_repos(group.id_gitlab, access_token)

    # Update repos and create it if not exists
    for repo in gl_repos:
        project = Project.fetch(group.username, repo['name'])
        if project is None:
            project = Project({
                "name": repo['name'],
                "description": repo['description'],
                "username": group.username,
                "enabled": False,
                "gitlab_project_id": repo['id'],
                "url": repo['web_url'],
            })
            project.create()
        # TODO get Project status (enable) from gitlab
        # Save project
        project.update()
    return True
예제 #4
0
 def post(self, sent_project):
     """Create project"""
     projects = self.user.get_projects()
     if self.project_name not in [p.name for p in projects]:
         sent_project.name = self.project_name
         new_project = Project(sent_project.as_dict())
         new_project.username = self.user.username
         if not new_project.create():
             # Handle error
             return {
                 "result":
                 "Error creating %s with data %s" %
                 (self.project_name, sent_project)
             }
         return {"result": "Project %s created" % self.project_name}
     else:
         return {"result": "Project %s exists" % self.project_name}
예제 #5
0
 def get_projects(self):
     projects = mongo.projects.find({"username": self.username})
     return [Project(x) for x in projects]