def on_created(installation: Installation, repository: Repository, pull_request: PullRequest): logger.info( f"Created pull request: {pull_request.remote_id} on {repository.full_name}" ) # refresh files and commits refresh_commits(installation, repository, pull_request) rules.evaluate(repository, PR_CREATED, {"pull_request": pull_request})
def on_source_change(installation: Installation, repository: Repository, name: str, sha: str): for pull_request in (repository.pull_requests.filter( base_branch_name=name).filter(~Q(base_sha=sha)).all() ): # type: PullRequest logger.info( f"PR's base branch updated, updating pull request: {pull_request.remote_id} " f"on {repository.full_name}") rules.evaluate(repository, BASE_BRANCH_UPDATED, {"pull_request": pull_request})
def refresh(installation: Installation, repository: Repository): for pull_request in installation.client.get_pull_requests(repository): for context, state in installation.client.get_statuses( repository.identifier, pull_request.source_sha): status = PullRequestStatus.objects.create( pull_request=pull_request, context=context, state=state) rules.evaluate(repository, STATUS_UPDATED, { "pull_request": pull_request, "status": status }) refresh_commits(installation, repository, pull_request) rules.evaluate(repository, PR_CREATED, {"pull_request": pull_request})
def update_status(installation: Installation, repository: Repository, context: str, state: CheckStatus, sha: str): for pr in repository.pull_requests.filter( source_sha=sha).all(): # type: PullRequest status = pr.statuses.filter(context=context).first() if status: dirty = dirty_set_all(status, dict(state=str(state))) else: status = PullRequestStatus.objects.create(pull_request=pr, context=context, state=state) dirty = True if dirty: logger.info( f"Updated check {status.context} to {status.state} for pull request: {pr.remote_id} " f"on {repository.full_name}") rules.evaluate(repository, STATUS_UPDATED, { "pull_request": pr, "status": status })
def update_review( installation: Installation, repository: Repository, pull_request: PullRequest, reviewer: ExternalUser, state: ReviewState, ): review: PullRequestReviewer = pull_request.reviewers.filter( user=reviewer).first() if review: dirty = dirty_set_all(review, dict(state=state)) if dirty: logger.info( f"Updated review {reviewer.remote_id} to {state} for pull request: {pull_request.remote_id} " f"on {repository.full_name}") rules.evaluate(repository, REVIEW_UPDATED, { "pull_request": pull_request, "reviewer": review }) else: logger.error( f"Missing existing pr reviewer for user {reviewer.id} on pr {pull_request.id}" )