Ejemplo n.º 1
0
    def raw_search(token, raw_query):
        """
        Handles a GitHub search.

        Search syntax reference at
        https://help.github.com/articles/understanding-the-search-syntax/

        :param token:        A GitHubToken object to use for authentication.
        :param raw_query:    A string with the search query following syntax.
        :yields:             Search results as GitHubIssue(...) and
                             GitHubMergeRequest(...) objects for Issues and
                             Merge Requests respectively.
        """
        base_url = '/search/issues'
        query_params = {'q': raw_query, 'per_page': '100'}
        resp = get(token, base_url, query_params)

        issue_url_re = re.compile(
            r'https://(?:.+)/(\S+)/(\S+)/(issues|pull)/(\d+)')
        for item in resp:
            user, repo, item_type, item_number = issue_url_re.match(
                item['html_url']).groups()
            if item_type == 'issues':
                yield GitHubIssue.from_data(item, token, user + '/' + repo,
                                            int(item_number))
            elif item_type == 'pull':
                yield GitHubMergeRequest.from_data(item, token,
                                                   user + '/' + repo,
                                                   int(item_number))
Ejemplo n.º 2
0
    def filter_issues(self, state: str='opened') -> set:
        """
        Filters the issues from the repository based on properties.

        :param state: 'opened' or 'closed' or 'all'.
        """
        params = {'state': GH_ISSUE_STATE_TRANSLATION[state]}
        return {GitHubIssue.from_data(res, self._token,
                                      self.full_name, res['number'])
                for res in get(self._token, self._url + '/issues', params)
                if 'pull_request' not in res}
Ejemplo n.º 3
0
    def _handle_webhook_issues(self, data, repository):
        """Handles 'issues' event."""
        issue = data['issue']
        issue_obj = GitHubIssue.from_data(issue, self._token, repository,
                                          issue['number'])
        trigger_event = {
            'opened': IssueActions.OPENED,
            'closed': IssueActions.CLOSED,
            'reopened': IssueActions.REOPENED,
            'labeled': IssueActions.LABELED,
            'unlabeled': IssueActions.UNLABELED,
        }.get(data['action'], IssueActions.ATTRIBUTES_CHANGED)

        if (trigger_event is IssueActions.LABELED
                or trigger_event is IssueActions.UNLABELED):
            yield trigger_event, [issue_obj, data['label']['name']]
        else:
            yield trigger_event, [issue_obj]
Ejemplo n.º 4
0
    def _handle_webhook_issue_comment(self, data, repository):
        """Handles 'issue_comment' event."""
        if data['action'] != 'deleted':
            comment_obj = GitHubComment.from_data(data['comment'], self._token,
                                                  repository,
                                                  CommentType.MERGE_REQUEST,
                                                  data['comment']['id'])

            if 'pull_request' in data['issue']:
                yield (MergeRequestActions.COMMENTED, [
                    GitHubMergeRequest.from_data(data['issue'], self._token,
                                                 repository,
                                                 data['issue']['number']),
                    comment_obj
                ])
            else:
                yield IssueActions.COMMENTED, [
                    GitHubIssue.from_data(data['issue'], self._token,
                                          repository, data['issue']['number']),
                    comment_obj
                ]