Exemplo n.º 1
0
def convert_pr(pr: PullRequest) -> GprrPR:
    """
        Converts PyGithub pull request representation to GPRR pull request representation

        :param pr: PyGithub pull request
        :return: GPRR pull request
    """
    gprr_pr = GprrPR()
    gprr_pr.id = pr.id
    gprr_pr.number = pr.number
    gprr_pr.url = pr.html_url
    gprr_pr.repository = convert_repo(pr.head.repo)
    gprr_pr.title = pr.title
    gprr_pr.creator = convert_user(pr.user)
    gprr_pr.created = pr.created_at
    gprr_pr.updated = pr.updated_at
    gprr_pr.since_updated = (datetime.today() - gprr_pr.updated).days
    gprr_pr.flags.append(GprrPrFlag("Draft", str(pr.draft)))
    gprr_pr.flags.append(GprrPrFlag("Mergeable", str(pr.mergeable)))
    gprr_pr.flags.append(GprrPrFlag("Mergeable State",
                                    str(pr.mergeable_state)))
    gprr_pr.initial_branch = pr.head.ref

    for assignee in pr.assignees:
        gprr_pr.assignees.append(convert_user(assignee))

    for label in pr.get_labels(
    ):  # this makes additional call to Github REST API
        gprr_pr.labels.append(convert_label(label))

    active_reviewers = []
    for review in pr.get_reviews(
    ):  # this makes additional call to Github REST API
        reviewer = convert_user(review.user)
        if not known_review(active_reviewers, reviewer):
            active_reviewers.append(reviewer)
            gprr_review = GprrReview(
                user=reviewer,
                state=review.state,
                submitted_at=review.submitted_at,
                url=review.html_url,
            )
            gprr_pr.reviews.append(gprr_review)

    pr_review_requests = pr.get_review_requests()
    for revusr in pr_review_requests[
            0]:  # this makes additional call to Github REST API
        usr = convert_user(revusr)
        review = GprrReview(user=usr, state="PENDING")
        gprr_pr.reviews_pending.append(review)

    # for revteam in pr_review_requests[1]:
    #     team_as_user = convert_team_to_user(revteam)
    #     review = GprrReview(user=team_as_user, state="PENDING")
    #     gprr_pr.reviews_pending.append(review)

    return gprr_pr
Exemplo n.º 2
0
    def store(self, pull_request: GithubPullRequest):
        """Override :func:`~Entity.store`."""
        commits = pull_request.commits

        created_at = int(pull_request.created_at.timestamp())
        closed_at = int(pull_request.closed_at.timestamp()
                        ) if pull_request.closed_at is not None else None
        merged_at = int(pull_request.merged_at.timestamp()
                        ) if pull_request.merged_at is not None else None

        closed_by = pull_request.as_issue(
        ).closed_by.login if pull_request.as_issue(
        ).closed_by is not None else None

        labels = [label.name for label in pull_request.get_labels()]

        # Evaluate size of PR
        pull_request_size = None
        if labels:
            pull_request_size = GitHubKnowledge.get_labeled_size(labels)

        if not pull_request_size:
            lines_changes = pull_request.additions + pull_request.deletions
            pull_request_size = GitHubKnowledge.assign_pull_request_size(
                lines_changes=lines_changes)

        self.stored_entities[str(pull_request.number)] = {
            "size":
            pull_request_size,
            "created_by":
            pull_request.user.login,
            "created_at":
            created_at,
            "closed_at":
            closed_at,
            "closed_by":
            closed_by,
            "merged_at":
            merged_at,
            "commits_number":
            commits,
            "referenced_issues":
            PullRequest.get_referenced_issues(pull_request),
            "interactions":
            GitHubKnowledge.get_interactions(
                pull_request.get_issue_comments()),
            "reviews":
            self.extract_pull_request_reviews(pull_request),
            "requested_reviewers":
            self.extract_pull_request_review_requests(pull_request),
            "labels":
            GitHubKnowledge.get_labels(pull_request.as_issue()),
        }
Exemplo n.º 3
0
    def store(self, pull_request: GithubPullRequest):
        """Override :func:`~Entity.store`."""
        _LOGGER.info("Extracting PR #%d", pull_request.number)

        if pull_request.number in self.previous_knowledge.index:
            _LOGGER.debug("PullRequest %s already analysed, skipping")
            return

        created_at = int(pull_request.created_at.timestamp())
        closed_at = int(pull_request.closed_at.timestamp()
                        ) if pull_request.closed_at is not None else None
        merged_at = int(pull_request.merged_at.timestamp()
                        ) if pull_request.merged_at is not None else None

        closed_by = pull_request.as_issue(
        ).closed_by.login if pull_request.as_issue(
        ).closed_by is not None else None
        merged_by = pull_request.merged_by.login if pull_request.merged_by is not None else None

        labels = [label.name for label in pull_request.get_labels()]

        # Evaluate size of PR
        pull_request_size = None
        if labels:
            pull_request_size = GitHubKnowledge.get_labeled_size(labels)

        if not pull_request_size:
            lines_changes = pull_request.additions + pull_request.deletions
            pull_request_size = GitHubKnowledge.assign_pull_request_size(
                lines_changes=lines_changes)

        reviews = self.extract_pull_request_reviews(pull_request)

        self.stored_entities[str(pull_request.number)] = {
            "title":
            pull_request.title,
            "body":
            pull_request.body,
            "size":
            pull_request_size,
            "created_by":
            pull_request.user.login,
            "created_at":
            created_at,
            "closed_at":
            closed_at,
            "closed_by":
            closed_by,
            "merged_at":
            merged_at,
            "merged_by":
            merged_by,
            "commits_number":
            pull_request.commits,
            "changed_files_number":
            pull_request.changed_files,
            "interactions":
            GitHubKnowledge.get_interactions(
                pull_request.get_issue_comments()),
            "reviews":
            reviews,
            "labels":
            labels,
            "commits": [c.sha for c in pull_request.get_commits()],
            "changed_files": [f.filename for f in pull_request.get_files()],
            "first_review_at":
            get_first_review_time(reviews),
            "first_approve_at":
            get_approve_time(reviews),
        }