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