def _pluck_pull_request_info(pull_request_url: str) -> PullRequestInfo:
    """
    # Plucks a PullRequestInfo from  a valid
    >>> _pluck_pull_request_info('https://github.com/zhammer/morning-cd/pull/17')
    PullRequestInfo(owner='zhammer', repo='morning-cd', number=17)

    # Raises a GithubPrError on bad urls
    >>> _pluck_pull_request_info('bad url')
    Traceback (most recent call last):
        ...
    faaspact_verifier.delivery.github_prs.GithubPrError: ...
    """
    match = re.search(
        r'github\.com/(?P<owner>[\w-]+)/(?P<repo>[\w-]+)/pull/(?P<number>\d+)',
        pull_request_url
    )

    if not match:
        raise GithubPrError(f'Couldnt parse url: {pull_request_url}')

    return PullRequestInfo(
        owner=match.group('owner'),
        repo=match.group('repo'),
        number=int(match.group('number'))
    )