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]
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
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}
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()