Beispiel #1
0
def get_project_repositories(auth_user: AuthUser, project_id):
    """
    Get a project's repositories.

    :param project_id: The ID of the project.
    :type project_id: string
    """

    # Load Project
    project = Project()
    try:
        project.load(project_id=str(project_id))
    except DoesNotExist as err:
        return {'valid': False, 'errors': {'errors': {'project_id': str(err)}}}

    # Get SFDC project identifier
    sfid = project.get_project_external_id()

    # Validate user is authorized for this project
    can_access = check_user_authorization(auth_user, sfid)
    if not can_access['valid']:
        return can_access['errors']

    # Obtain repositories
    repositories = project.get_project_repositories()
    return [repository.to_dict() for repository in repositories]
Beispiel #2
0
def get_project_repositories_group_by_organization(auth_user: AuthUser,
                                                   project_id):
    """
    Get a project's repositories.

    :param project_id: The ID of the project.
    :type project_id: string
    """

    # Load Project
    project = Project()
    try:
        project.load(project_id=str(project_id))
    except DoesNotExist as err:
        return {'valid': False, 'errors': {'errors': {'project_id': str(err)}}}

    # Get SFDC project identifier
    sfid = project.get_project_external_id()

    # Validate user is authorized for this project
    can_access = check_user_authorization(auth_user, sfid)
    if not can_access['valid']:
        return can_access['errors']

    # Obtain repositories
    repositories = project.get_project_repositories()
    repositories = [repository.to_dict() for repository in repositories]

    # Group them by organization
    organizations_dict = {}
    for repository in repositories:
        org_name = repository['repository_organization_name']
        if org_name in organizations_dict:
            organizations_dict[org_name].append(repository)
        else:
            organizations_dict[org_name] = [repository]

    organizations = []
    for key, value in organizations_dict.items():
        organizations.append({'name': key, 'repositories': value})

    return organizations
Beispiel #3
0
def get_project_configuration_orgs_and_repos(auth_user: AuthUser, project_id):
    # Load Project
    project = Project()
    try:
        project.load(project_id=str(project_id))
    except DoesNotExist as err:
        return {'valid': False, 'errors': {'errors': {'project_id': str(err)}}}

    # Get SFDC project identifier
    sfid = project.get_project_external_id()

    # Validate user is authorized for this project
    can_access = check_user_authorization(auth_user, sfid)
    if not can_access['valid']:
        return can_access['errors']

    # Obtain information for this project
    orgs_and_repos = get_github_repositories_by_org(project)
    repositories = get_sfdc_project_repositories(project)
    return {'orgs_and_repos': orgs_and_repos, 'repositories': repositories}
Beispiel #4
0
def create_repository(auth_user: AuthUser, # pylint: disable=too-many-arguments
                      repository_project_id,
                      repository_name,
                      repository_organization_name, 
                      repository_type,
                      repository_url,
                      repository_external_id=None):
    """
    Creates a repository and returns the newly created repository in dict format.

    :param repository_project_id: The ID of the repository project.
    :type repository_project_id: string
    :param repository_name: The new repository name.
    :type repository_name: string
    :param repository_type: The new repository type ('github', 'gerrit', etc).
    :type repository_organization_name: string
    :param repository_organization_name: The repository organization name
    :type repository_type: string
    :param repository_url: The new repository URL.
    :type repository_url: string
    :param repository_external_id: The ID of the repository from the repository provider.
    :type repository_external_id: string
    :return: dict representation of the new repository object.
    :rtype: dict
    """

    # Check that organization exists 
    github_organization = GitHubOrg()
    try:
        github_organization.load(str(repository_organization_name))
    except DoesNotExist as err:
        return {'errors': {'organization_name': str(err)}}

    # Check that project is valid. 
    project = Project()
    try:
        project.load(str(repository_project_id))
    except DoesNotExist as err:
        return {'errors': {'repository_project_id': str(err)}}

    # Get SFDC project identifier
    sfdc_id = project.get_project_external_id()

    # Validate user is authorized for this project
    can_access = cla.controllers.project.check_user_authorization(auth_user, sfdc_id)
    if not can_access['valid']:
      return can_access['errors']

    # Validate if exist already repository linked to a contract group
    if repository_external_id is not None:
        # Seach for the repository
        linked_repository = Repository().get_repository_by_external_id(repository_external_id, repository_type)
        # If found return an error
        if linked_repository is not None:
            return {'errors': {'repository_external_id': 'This repository is alredy configured for a contract group.'}}

    repository = Repository()
    repository.set_repository_id(str(uuid.uuid4()))
    repository.set_repository_project_id(str(repository_project_id))
    repository.set_repository_sfdc_id(str(sfdc_id))
    repository.set_repository_name(repository_name)
    repository.set_repository_organization_name(repository_organization_name)
    repository.set_repository_type(repository_type)
    repository.set_repository_url(repository_url)
    if repository_external_id is not None:
        repository.set_repository_external_id(repository_external_id)
    repository.save()
    return repository.to_dict()