Exemplo n.º 1
0
def test_invalid_user_password():
    with pytest.raises(SystemExit):
        gh = GitHubRepo(
            username='******',
            password='******',
            repo=REPO, )
        gh.milestone(TEST_MILESTONE)
Exemplo n.º 2
0
def test_invalid_user_password():
    with pytest.raises(SystemExit):
        gh = GitHubRepo(
            username='******',
            password='******',
            repo=REPO,
        )
        gh.milestone(TEST_MILESTONE)
Exemplo n.º 3
0
def test_dates():
    date = GitHubRepo.str_to_date('2016-10-10T08:08:08Z')
    assert date.year == 2016
    assert date.month == 10
    assert date.day == 10
    assert date.hour == 8
    assert date.minute == 8
    assert date.second == 8
Exemplo n.º 4
0
def test_dates():
    date = GitHubRepo.str_to_date('2016-10-10T08:08:08Z')
    assert date.year == 2016
    assert date.month == 10
    assert date.day == 10
    assert date.hour == 8
    assert date.minute == 8
    assert date.second == 8
Exemplo n.º 5
0
def process_labels(username, password, token, action, repo, filename):
    """Get or update labels on a given repository."""
    # Separator
    s = ';'

    # Instantiate Github API
    gh = GitHubRepo(
        username=username,
        password=password,
        token=token,
        repo=repo,
    )

    labels = gh.labels()

    if action == 'get':
        print('Getting labels from {0}\n'.format(repo))
        labels = sorted((l.name, l.color) for l in labels)
        data = ''.join('{0}{1}{2}\n'.format(l, s, c) for (l, c) in labels)

        with open(filename, 'wt') as f:
            f.write(data[:-1])

    elif action == 'update':
        print('Updating labels on {0}\n'.format(repo))
        with open(filename, 'r') as f:
            data = f.read()

        lines = [line for line in data.split('\n') if line]
        labels = []
        for line in lines:
            parts = [p for p in line.strip().split(s)]
            if len(parts) == 3:
                old_name, new_name, color = parts
            else:
                new_name, color = parts
                old_name = new_name

            label_dict = {
                'new_name': new_name,
                'old_name': old_name,
                'color': color
            }
            labels.append(label_dict)

        gh.set_labels(labels)
Exemplo n.º 6
0
def process_labels(username, password, token, action, repo, filename):
    """Get or update labels on a given repository."""
    # Separator
    s = ';'

    # Instantiate Github API
    gh = GitHubRepo(
        username=username,
        password=password,
        token=token,
        repo=repo, )

    labels = gh.labels()

    if action == 'get':
        print('Getting labels from {0}\n'.format(repo))
        labels = sorted((l.name, l.color) for l in labels)
        data = ''.join('{0}{1}{2}\n'.format(l, s, c) for (l, c) in labels)

        with open(filename, 'wt') as f:
            f.write(data[:-1])

    elif action == 'update':
        print('Updating labels on {0}\n'.format(repo))
        with open(filename, 'r') as f:
            data = f.read()

        lines = [line for line in data.split('\n') if line]
        labels = []
        for line in lines:
            parts = [p for p in line.strip().split(s)]
            if len(parts) == 3:
                old_name, new_name, color = parts
            else:
                new_name, color = parts
                old_name = new_name

            label_dict = {
                'new_name': new_name,
                'old_name': old_name,
                'color': color
            }
            labels.append(label_dict)

        gh.set_labels(labels)
Exemplo n.º 7
0
def test_invalid_token():
    with pytest.raises(SystemExit):
        gh = GitHubRepo(token='this-is-an-invalid-token', repo=REPO)
        gh.milestone(TEST_MILESTONE)
Exemplo n.º 8
0
def test_valid_token():
    gh = GitHubRepo(token=TEST_TOKEN, repo=REPO)
    gh.milestone(TEST_MILESTONE)
Exemplo n.º 9
0
def test_valid_user_password():
    gh = GitHubRepo(username=TEST_USER, password=TEST_PASS, repo=REPO)
    assert bool(gh.milestone(TEST_MILESTONE))
Exemplo n.º 10
0
def test_invalid_token():
    with pytest.raises(SystemExit):
        gh = GitHubRepo(token='this-is-an-invalid-token', repo=REPO)
        gh.milestone(TEST_MILESTONE)
Exemplo n.º 11
0
def test_valid_token():
    gh = GitHubRepo(token=TEST_TOKEN, repo=REPO)
    gh.milestone(TEST_MILESTONE)
Exemplo n.º 12
0
def test_valid_user_password():
    gh = GitHubRepo(username=TEST_USER, password=TEST_PASS, repo=REPO)
    assert bool(gh.milestone(TEST_MILESTONE))
Exemplo n.º 13
0
def gh_repo():
    return GitHubRepo(token=TEST_TOKEN, repo=REPO)
Exemplo n.º 14
0
def create_changelog(repo=None,
                     username=None,
                     password=None,
                     token=None,
                     milestone=None,
                     since_tag=None,
                     until_tag=None,
                     branch=None,
                     output_format='changelog',
                     issue_label_regex='',
                     pr_label_regex='',
                     template_file=None,
                     issue_label_groups=None,
                     batch=None,
                     show_prs=True):
    """Create changelog data for single and batched mode."""
    gh = GitHubRepo(
        username=username,
        password=password,
        token=token,
        repo=repo,
    )

    all_changelogs = []
    version_tag_prefix = 'v'

    if batch:
        # This will get all the issues, might eat up the api rate limit!
        base_issues = issues = gh.issues(state='closed', branch=branch)
        if batch == 'milestones':
            milestones = [i.get('title') for i in gh.milestones()]
            empty_items = [None] * len(milestones)
            items = zip(*(milestones, empty_items, empty_items))
        elif batch == 'tags':
            tags = [
                i.get('ref', '').replace('refs/tags/', '') for i in gh.tags()
            ]
            since_tags = [None] + tags
            until_tags = tags + [None]
            empty_items = [None] * len(since_tags)
            items = zip(*(empty_items, since_tags, until_tags))
    else:
        base_issues = None
        if milestone:
            items = [(milestone, None, None)]
        else:
            items = [(None, since_tag, until_tag)]

    for (milestone, since_tag, until_tag) in reversed(items):
        version = until_tag or None
        closed_at = None
        since = None
        until = None

        # Set milestone or from tag
        if milestone and not since_tag:
            milestone_data = gh.milestone(milestone)
            closed_at = milestone_data['closed_at']
            version = milestone

            if version.startswith(version_tag_prefix):
                version = version[len(version_tag_prefix):]

        elif not milestone and since_tag:
            since = gh.tag(since_tag)['tagger']['date']
            if until_tag:
                until = gh.tag(until_tag)['tagger']['date']
                closed_at = until

        # This returns issues and pull requests
        issues = gh.issues(
            milestone=milestone,
            state='closed',
            since=since,
            until=until,
            branch=branch,
            base_issues=base_issues,
        )

        # Filter by regex if available
        filtered_prs = filter_prs_by_regex(issues, pr_label_regex)
        filtered_issues = filter_issues_by_regex(issues, issue_label_regex)

        # If issue label grouping, filter issues
        new_filtered_issues, issue_label_groups = filter_issue_label_groups(
            filtered_issues, issue_label_groups)

        filter_issues_fixed_by_prs(filtered_issues, filtered_prs)

        ch = render_changelog(repo,
                              new_filtered_issues,
                              filtered_prs,
                              version,
                              closed_at=closed_at,
                              output_format=output_format,
                              template_file=template_file,
                              issue_label_groups=issue_label_groups,
                              show_prs=show_prs)

        all_changelogs.append(ch)

    changelog = '\n'.join(all_changelogs)
    write_changelog(changelog=changelog)

    return changelog
Exemplo n.º 15
0
def create_changelog(repo=None,
                     username=None,
                     password=None,
                     token=None,
                     milestone=None,
                     zenhub_release=None,
                     zenhub_token=None,
                     since_tag=None,
                     until_tag=None,
                     branch=None,
                     output_format='changelog',
                     issue_label_regex='',
                     pr_label_regex='',
                     template_file=None,
                     issue_label_groups=None,
                     pr_label_groups=None,
                     batch=None,
                     show_prs=True,
                     show_related_prs=True,
                     show_related_issues=True):
    """Create changelog data for single and batched mode."""
    if issue_label_groups is None:
        issue_label_groups = []

    if pr_label_groups is None:
        pr_label_groups = []

    gh = GitHubRepo(
        username=username,
        password=password,
        token=token,
        repo=repo,
    )

    all_changelogs = []
    version_tag_prefix = 'v'

    base_issues = None
    if zenhub_release:
        items = [(None, None, None)]
    elif batch:
        # This will get all the issues, might eat up the api rate limit!
        base_issues = issues = gh.issues(state='closed', branch=branch)
        if batch == 'milestones':
            milestones = [i.get('title') for i in gh.milestones()]
            empty_items = [None] * len(milestones)
            items = list(zip(milestones, empty_items, empty_items))
        elif batch == 'tags':
            tags = [
                i.get('ref', '').replace('refs/tags/', '') for i in gh.tags()
            ]
            since_tags = [None] + tags
            until_tags = tags + [None]
            empty_items = [None] * len(since_tags)
            items = list(zip(empty_items, since_tags, until_tags))
    else:
        if milestone:
            items = [(milestone, None, None)]
        else:
            items = [(None, since_tag, until_tag)]

    for (milestone, since_tag, until_tag) in reversed(items):
        version = until_tag or None
        closed_at = None
        since = None
        until = None

        # Set milestone or from tag
        if milestone and not since_tag:
            milestone_data = gh.milestone(milestone)
            closed_at = milestone_data['closed_at']
            version = milestone

            if version.startswith(version_tag_prefix):
                version = version[len(version_tag_prefix):]

        elif not milestone and since_tag:
            since = gh.tag(since_tag)['tagger']['date']
            if until_tag:
                until = gh.tag(until_tag)['tagger']['date']
                closed_at = until

        if not bool(zenhub_release):
            # This returns issues and pull requests
            issues = gh.issues(
                milestone=milestone,
                state='closed',
                since=since,
                until=until,
                branch=branch,
                base_issues=base_issues,
            )
        else:
            version = zenhub_release
            zh = ZenHub(zenhub_token)

            # Get repo id
            repo_id = gh.repo.get()['id']

            # Get list of releases and select the right one
            releases = zh.releases(repo_id)
            release_id = None
            for release in releases:
                if zenhub_release == release['title']:
                    release_id = release['release_id']
                    break

            # Get all the specific issues 1 by 1
            if release_id is not None:
                zh_issues = zh.issues(release_id)

                # Filter issues that belong to this repository
                zh_issues = [
                    issue for issue in zh_issues if issue['repo_id'] == repo_id
                ]

                # Get all issues from github
                issues = []
                print('\n{} issues found!'.format(len(zh_issues)))
                for idx, zh_issue in enumerate(reversed(zh_issues)):
                    print(idx)
                    issue = gh.issue(zh_issue['issue_number'])
                    if issue['state'] == 'closed':
                        # Add filtered label names inside additional key
                        issue['loghub_label_names'] = [
                            l['name'] for l in issue.get('labels')
                        ]
                        issues.append(issue)
            else:
                print("Error!")
                sys.exit(1)

        # Filter by regex if available
        filtered_prs = filter_prs_by_regex(issues, pr_label_regex)
        filtered_issues = filter_issues_by_regex(issues, issue_label_regex)

        # If issue label grouping, filter issues
        filtered_issues, grouped_issues = filter_issue_label_groups(
            filtered_issues, issue_label_groups)
        filtered_prs, grouped_prs = filter_issue_label_groups(
            filtered_prs, pr_label_groups)
        label_groups = join_label_groups(grouped_issues, grouped_prs,
                                         issue_label_groups, pr_label_groups)

        filter_issues_fixed_by_prs(filtered_issues, filtered_prs,
                                   show_related_prs, show_related_issues)

        ch = render_changelog(repo,
                              filtered_issues,
                              filtered_prs,
                              version,
                              closed_at=closed_at,
                              output_format=output_format,
                              template_file=template_file,
                              label_groups=label_groups,
                              issue_label_groups=grouped_issues,
                              pr_label_groups=grouped_prs,
                              show_prs=show_prs)

        all_changelogs.append(ch)

    changelog = '\n'.join(all_changelogs)
    write_changelog(changelog=changelog)

    return changelog
Exemplo n.º 16
0
def create_changelog(repo=None,
                     username=None,
                     password=None,
                     token=None,
                     milestone=None,
                     since_tag=None,
                     until_tag=None,
                     branch=None,
                     output_format='changelog',
                     issue_label_regex='',
                     pr_label_regex='',
                     template_file=None,
                     issue_label_groups=None,
                     pr_label_groups=None,
                     batch=None,
                     show_prs=True):
    """Create changelog data for single and batched mode."""
    if issue_label_groups is None:
        issue_label_groups = []
    if pr_label_groups is None:
        pr_label_groups = []

    gh = GitHubRepo(
        username=username,
        password=password,
        token=token,
        repo=repo, )

    all_changelogs = []
    version_tag_prefix = 'v'

    if batch:
        # This will get all the issues, might eat up the api rate limit!
        base_issues = issues = gh.issues(state='closed', branch=branch)
        if batch == 'milestones':
            milestones = [i.get('title') for i in gh.milestones()]
            empty_items = [None] * len(milestones)
            items = list(zip(milestones, empty_items, empty_items))
        elif batch == 'tags':
            tags = [
                i.get('ref', '').replace('refs/tags/', '') for i in gh.tags()
            ]
            since_tags = [None] + tags
            until_tags = tags + [None]
            empty_items = [None] * len(since_tags)
            items = list(zip(empty_items, since_tags, until_tags))
    else:
        base_issues = None
        if milestone:
            items = [(milestone, None, None)]
        else:
            items = [(None, since_tag, until_tag)]

    for (milestone, since_tag, until_tag) in reversed(items):
        version = until_tag or None
        closed_at = None
        since = None
        until = None

        # Set milestone or from tag
        if milestone and not since_tag:
            milestone_data = gh.milestone(milestone)
            closed_at = milestone_data['closed_at']
            version = milestone

            if version.startswith(version_tag_prefix):
                version = version[len(version_tag_prefix):]

        elif not milestone and since_tag:
            since = gh.tag(since_tag)['tagger']['date']
            if until_tag:
                until = gh.tag(until_tag)['tagger']['date']
                closed_at = until

        # This returns issues and pull requests
        issues = gh.issues(
            milestone=milestone,
            state='closed',
            since=since,
            until=until,
            branch=branch,
            base_issues=base_issues, )

        # Filter by regex if available
        filtered_prs = filter_prs_by_regex(issues, pr_label_regex)
        filtered_issues = filter_issues_by_regex(issues, issue_label_regex)

        # If issue label grouping, filter issues
        new_filtered_issues, grouped_issues = filter_issue_label_groups(
            filtered_issues, issue_label_groups)
        new_filtered_prs, grouped_prs = filter_issue_label_groups(
            filtered_prs, pr_label_groups)
        label_groups = join_label_groups(grouped_issues, grouped_prs,
                                         issue_label_groups, pr_label_groups)

        filter_issues_fixed_by_prs(filtered_issues, filtered_prs)

        ch = render_changelog(
            repo,
            new_filtered_issues,
            new_filtered_prs,
            version,
            closed_at=closed_at,
            output_format=output_format,
            template_file=template_file,
            label_groups=label_groups,
            issue_label_groups=grouped_issues,
            pr_label_groups=grouped_prs,
            show_prs=show_prs)

        all_changelogs.append(ch)

    changelog = '\n'.join(all_changelogs)
    write_changelog(changelog=changelog)

    return changelog