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
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