Ejemplo n.º 1
0
    def get_all_issues(self, project_key, total, max_results):
        """Fetch all project issues."""
        log.debug("%s issues to fetch" % total)

        # Setup a session for concurrent fetching
        s = FuturesSession(executor=ThreadPoolExecutor(max_workers=4))
        s.auth = (self.username, self.password)
        s.params = {
            'jql': "project=%s" % project_key,
            'fields': 'summary,description,issuetype,status,resolution',
            'maxResults': max_results
        }
        s.headers = {'Content-Type': 'application/json'}

        def parse_json_cb(sess, resp):
            resp.data = map(
                lambda item: {
                    'key': item['key'],
                    'summary': item['fields']['summary'],
                    'description': item['fields']['description'],
                    'type': item['fields']['issuetype']['name'],
                    'status': item['fields']['status']['name'],
                    'resolved': True if item['fields']['resolution'] else False
                },
                resp.json()['issues'])

        def get_issues(start_at=0):
            future = s.get("%s/search" % self.url,
                           params={'startAt': start_at},
                           background_callback=parse_json_cb)
            next_at = start_at + max_results
            log.debug("... %s/%s" % (min(next_at, total), total))
            if next_at < total:
                data = get_issues(next_at)
            else:
                return future.result().data
            return future.result().data + data

        issues = get_issues()
        return issues
Ejemplo n.º 2
0
    def get_all_issues(self, project_key, total, max_results):
        """Fetch all project issues."""
        log.debug("%s issues to fetch" % total)

        # Setup a session for concurrent fetching
        s = FuturesSession(executor=ThreadPoolExecutor(max_workers=4))
        s.auth = (self.username, self.password)
        s.params = {
            'jql': "project=%s" % project_key,
            'fields': 'summary,description,issuetype,status,resolution',
            'maxResults': max_results
            }
        s.headers = {'Content-Type': 'application/json'}

        def parse_json_cb(sess, resp):
            resp.data = map(lambda item: {
                'key': item['key'],
                'summary': item['fields']['summary'],
                'description': item['fields']['description'],
                'type': item['fields']['issuetype']['name'],
                'status': item['fields']['status']['name'],
                'resolved': True if item['fields']['resolution'] else False
                }, resp.json()['issues'])

        def get_issues(start_at=0):
            future = s.get(
                "%s/search" % self.url,
                params={'startAt': start_at},
                background_callback=parse_json_cb)
            next_at = start_at + max_results
            log.debug("... %s/%s" % (min(next_at, total), total))
            if next_at < total:
                data = get_issues(next_at)
            else:
                return future.result().data
            return future.result().data + data

        issues = get_issues()
        return issues