def test_fetch_empty(self): """Test whether it works when no issues are fetched""" bodies_json = read_file('data/jira/jira_issues_page_empty.json') body = read_file('data/jira/jira_fields.json') httpretty.register_uri(httpretty.GET, JIRA_SEARCH_URL, body=bodies_json, status=200) httpretty.register_uri(httpretty.GET, JIRA_FIELDS_URL, body=body, status=200) jira = Jira(JIRA_SERVER_URL) issues = [issue for issue in jira.fetch()] expected_req = { 'expand': ['renderedFields,transitions,operations,changelog'], 'jql': ['updated > 0 order by updated asc'], 'startAt': ['0'], 'maxResults': ['100'] } self.assertEqual(len(issues), 0) request = httpretty.last_request() self.assertEqual(request.method, 'GET') self.assertRegex(request.path, '/rest/api/2/search') self.assertDictEqual(request.querystring, expected_req)
def test_fetch_from_date(self): """Test whether a list of issues is returned from a given date""" from_date = str_to_datetime('2015-01-01') bodies_json = read_file('data/jira/jira_issues_page_2.json') empty_comment = read_file('data/jira/jira_comments_issue_empty.json') body = read_file('data/jira/jira_fields.json') httpretty.register_uri(httpretty.GET, JIRA_SEARCH_URL, body=bodies_json, status=200) httpretty.register_uri(httpretty.GET, JIRA_FIELDS_URL, body=body, status=200) httpretty.register_uri(httpretty.GET, JIRA_ISSUE_3_COMMENTS_URL, body=empty_comment, status=200) jira = Jira(JIRA_SERVER_URL) issues = [issue for issue in jira.fetch(from_date=from_date)] self.assertEqual(len(issues), 1) issue = issues[0] self.assertEqual(issue['origin'], 'http://example.com') self.assertEqual(issue['uuid'], '1c7765e2a5d27495cf389f5f951c544693c4655f') self.assertEqual(issue['updated_on'], 1457006245) self.assertEqual(issue['category'], 'issue') self.assertEqual(issue['tag'], 'http://example.com') self.assertEqual(issue['data']['comments_data'], []) requests = httpretty.HTTPretty.latest_requests request = requests[-2] expected_req = { 'expand': ['renderedFields,transitions,operations,changelog'], 'jql': ['updated > 1420070400000 order by updated asc'], 'startAt': ['0'], 'maxResults': ['100'] } self.assertEqual(request.method, 'GET') self.assertRegex(request.path, '/rest/api/2/search') self.assertDictEqual(request.querystring, expected_req) request = requests[-1] expected_req = { 'jql': ['updated > 0 order by updated asc'], 'startAt': ['0'], 'maxResults': ['100'] } self.assertEqual(request.method, 'GET') self.assertRegex(request.path, '/rest/api/2/issue/3/comment') self.assertDictEqual(request.querystring, expected_req)
def test_fetch_from_date(self): """Test whether a list of issues is returned from a given date""" from_date = str_to_datetime('2015-01-01') bodies_json = read_file('data/jira/jira_issues_page_2.json') body = read_file('data/jira/jira_fields.json') httpretty.register_uri(httpretty.GET, JIRA_SEARCH_URL, body=bodies_json, status=200) httpretty.register_uri(httpretty.GET, JIRA_FIELDS_URL, body=body, status=200) jira = Jira(JIRA_SERVER_URL) issues = [issue for issue in jira.fetch(from_date=from_date)] expected_req = { 'expand': ['renderedFields,transitions,operations,changelog'], 'jql': ['updated > 1420070400000 order by updated asc'], 'startAt': ['0'], 'maxResults': ['100'] } self.assertEqual(len(issues), 1) self.assertEqual(issues[0]['origin'], 'http://example.com') self.assertEqual(issues[0]['uuid'], '2e988d555915991228d81144b018c8321d628265') self.assertEqual(issues[0]['updated_on'], 1457006245) self.assertEqual(issues[0]['category'], 'issue') self.assertEqual(issues[0]['tag'], 'http://example.com') request = httpretty.last_request() self.assertEqual(request.method, 'GET') self.assertRegex(request.path, '/rest/api/2/search') self.assertDictEqual(request.querystring, expected_req)
def test_fetch(self): """Test whether a list of issues is returned""" requests = [] bodies_json = [read_file('data/jira/jira_issues_page_1.json'), read_file('data/jira/jira_issues_page_2.json')] body = read_file('data/jira/jira_fields.json') def request_callback(method, uri, headers): body = bodies_json.pop(0) requests.append(httpretty.last_request()) return (200, headers, body) httpretty.register_uri(httpretty.GET, JIRA_SEARCH_URL, responses=[httpretty.Response(body=request_callback) for _ in range(2)]) httpretty.register_uri(httpretty.GET, JIRA_FIELDS_URL, body=body, status=200) jira = Jira(JIRA_SERVER_URL) issues = [issue for issue in jira.fetch()] body_json = json.loads(body) custom_fields = filter_custom_fields(body_json) expected_req = [ { 'expand': ['renderedFields,transitions,operations,changelog'], 'jql': ['updated > 0 order by updated asc'], 'startAt': ['0'], 'maxResults': ['100'] }, { 'expand': ['renderedFields,transitions,operations,changelog'], 'jql': ['updated > 0 order by updated asc'], 'startAt': ['2'], 'maxResults': ['100'] } ] for i in range(len(expected_req)): self.assertEqual(requests[i].method, 'GET') self.assertRegex(requests[i].path, '/rest/api/2/search') self.assertDictEqual(requests[i].querystring, expected_req[i]) self.assertEqual(len(issues), 3) self.assertEqual(issues[0]['origin'], 'http://example.com') self.assertEqual(issues[0]['uuid'], 'dfe008e19e2b720d1d377607680e90c250134164') self.assertEqual(issues[0]['updated_on'], 1457015567) self.assertEqual(issues[0]['category'], 'issue') self.assertEqual(issues[0]['tag'], 'http://example.com') self.assertEqual(issues[0]['data']['key'], 'HELP-6043') self.assertEqual(issues[0]['data']['fields']['issuetype']['name'], 'extRequest') self.assertEqual(issues[0]['data']['fields']['creator']['name'], 'user2') self.assertEqual(issues[0]['data']['fields']['assignee']['name'], 'user1') self.assertEqual(issues[0]['data']['fields']['assignee']['name'], 'user1') self.assertEqual(issues[0]['data']['fields']['assignee']['name'], 'user1') self.assertEqual(issues[0]['data']['fields']['assignee']['name'], 'user1') self.assertEqual(issues[0]['data']['fields']['customfield_10301']['id'], custom_fields['customfield_10301']['id']) self.assertEqual(issues[0]['data']['fields']['customfield_10301']['name'], custom_fields['customfield_10301']['name']) self.assertEqual(issues[0]['data']['fields']['customfield_10400']['id'], custom_fields['customfield_10400']['id']) self.assertEqual(issues[0]['data']['fields']['customfield_10400']['name'], custom_fields['customfield_10400']['name']) self.assertEqual(issues[0]['data']['fields']['customfield_10600']['id'], custom_fields['customfield_10600']['id']) self.assertEqual(issues[0]['data']['fields']['customfield_10600']['name'], custom_fields['customfield_10600']['name']) self.assertEqual(issues[0]['data']['fields']['customfield_10603']['id'], custom_fields['customfield_10603']['id']) self.assertEqual(issues[0]['data']['fields']['customfield_10603']['name'], custom_fields['customfield_10603']['name']) self.assertEqual(issues[1]['origin'], 'http://example.com') self.assertEqual(issues[1]['uuid'], '830747ed8cc9af800fcd6284e9dccfdb11daf15b') self.assertEqual(issues[1]['updated_on'], 1457015417) self.assertEqual(issues[1]['category'], 'issue') self.assertEqual(issues[1]['tag'], 'http://example.com') self.assertEqual(issues[1]['data']['key'], 'HELP-6042') self.assertEqual(issues[1]['data']['fields']['issuetype']['name'], 'extRequest') self.assertEqual(issues[1]['data']['fields']['creator']['name'], 'user2') self.assertEqual(issues[1]['data']['fields']['assignee']['name'], 'user1') self.assertEqual(issues[1]['data']['fields']['customfield_10301']['id'], custom_fields['customfield_10301']['id']) self.assertEqual(issues[1]['data']['fields']['customfield_10301']['name'], custom_fields['customfield_10301']['name']) self.assertEqual(issues[1]['data']['fields']['customfield_10400']['id'], custom_fields['customfield_10400']['id']) self.assertEqual(issues[1]['data']['fields']['customfield_10400']['name'], custom_fields['customfield_10400']['name']) self.assertEqual(issues[1]['data']['fields']['customfield_10600']['id'], custom_fields['customfield_10600']['id']) self.assertEqual(issues[1]['data']['fields']['customfield_10600']['name'], custom_fields['customfield_10600']['name']) self.assertEqual(issues[1]['data']['fields']['customfield_10603']['id'], custom_fields['customfield_10603']['id']) self.assertEqual(issues[1]['data']['fields']['customfield_10603']['name'], custom_fields['customfield_10603']['name']) self.assertEqual(issues[2]['origin'], 'http://example.com') self.assertEqual(issues[2]['uuid'], '2e988d555915991228d81144b018c8321d628265') self.assertEqual(issues[2]['updated_on'], 1457006245) self.assertEqual(issues[2]['category'], 'issue') self.assertEqual(issues[2]['tag'], 'http://example.com') self.assertEqual(issues[2]['data']['key'], 'HELP-6041') self.assertEqual(issues[2]['data']['fields']['issuetype']['name'], 'extRequest') self.assertEqual(issues[2]['data']['fields']['creator']['name'], 'user2') self.assertEqual(issues[2]['data']['fields']['assignee']['name'], 'user3') self.assertEqual(issues[2]['data']['fields']['customfield_10301']['id'], custom_fields['customfield_10301']['id']) self.assertEqual(issues[2]['data']['fields']['customfield_10301']['name'], custom_fields['customfield_10301']['name']) self.assertEqual(issues[2]['data']['fields']['customfield_10400']['id'], custom_fields['customfield_10400']['id']) self.assertEqual(issues[2]['data']['fields']['customfield_10400']['name'], custom_fields['customfield_10400']['name']) self.assertEqual(issues[2]['data']['fields']['customfield_10600']['id'], custom_fields['customfield_10600']['id']) self.assertEqual(issues[2]['data']['fields']['customfield_10600']['name'], custom_fields['customfield_10600']['name']) self.assertEqual(issues[2]['data']['fields']['customfield_10603']['id'], custom_fields['customfield_10603']['id']) self.assertEqual(issues[2]['data']['fields']['customfield_10603']['name'], custom_fields['customfield_10603']['name'])
def test_search_fields(self): """Test whether the search_fields is properly set""" bodies_json = [read_file('data/jira/jira_issues_page_1.json'), read_file('data/jira/jira_issues_page_2.json')] comment_json = read_file('data/jira/jira_comments_issue_page_2.json') empty_comment = read_file('data/jira/jira_comments_issue_empty.json') body = read_file('data/jira/jira_fields.json') def request_callback(method, uri, headers): body = bodies_json.pop(0) return 200, headers, body httpretty.register_uri(httpretty.GET, JIRA_SEARCH_URL, responses=[httpretty.Response(body=request_callback) for _ in range(2)]) httpretty.register_uri(httpretty.GET, JIRA_ISSUE_1_COMMENTS_URL, body=empty_comment, status=200) httpretty.register_uri(httpretty.GET, JIRA_ISSUE_2_COMMENTS_URL, body=comment_json, status=200) httpretty.register_uri(httpretty.GET, JIRA_ISSUE_3_COMMENTS_URL, body=empty_comment, status=200) httpretty.register_uri(httpretty.GET, JIRA_FIELDS_URL, body=body, status=200) jira = Jira(JIRA_SERVER_URL) issues = [issue for issue in jira.fetch()] issue = issues[0] self.assertEqual(issue['origin'], 'http://example.com') self.assertEqual(issue['uuid'], '6a7ba2a01aee56603b9d8a5f6b40c843fc089b2f') self.assertEqual(issue['updated_on'], 1457015567) self.assertEqual(issue['category'], 'issue') self.assertEqual(issue['tag'], 'http://example.com') self.assertEqual(jira.metadata_id(issue['data']), issue['search_fields']['item_id']) self.assertEqual(issue['data']['fields']['project']['id'], '10841') self.assertEqual(issue['data']['fields']['project']['id'], issue['search_fields']['project_id']) self.assertEqual(issue['data']['fields']['project']['key'], 'HELP') self.assertEqual(issue['data']['fields']['project']['key'], issue['search_fields']['project_key']) self.assertEqual(issue['data']['fields']['project']['name'], 'Help-Desk') self.assertEqual(issue['data']['fields']['project']['name'], issue['search_fields']['project_name']) self.assertEqual(issue['data']['key'], 'HELP-6043') self.assertEqual(issue['data']['key'], issue['search_fields']['issue_key']) issue = issues[1] self.assertEqual(issue['origin'], 'http://example.com') self.assertEqual(issue['uuid'], '3c3d67925b108a37f88cc6663f7f7dd493fa818c') self.assertEqual(issue['updated_on'], 1457015417) self.assertEqual(issue['category'], 'issue') self.assertEqual(issue['tag'], 'http://example.com') self.assertEqual(jira.metadata_id(issue['data']), issue['search_fields']['item_id']) self.assertEqual(issue['data']['fields']['project']['id'], '10841') self.assertEqual(issue['data']['fields']['project']['id'], issue['search_fields']['project_id']) self.assertEqual(issue['data']['fields']['project']['key'], 'HELP') self.assertEqual(issue['data']['fields']['project']['key'], issue['search_fields']['project_key']) self.assertEqual(issue['data']['fields']['project']['name'], 'Help-Desk') self.assertEqual(issue['data']['fields']['project']['name'], issue['search_fields']['project_name']) self.assertEqual(issue['data']['key'], 'HELP-6042') self.assertEqual(issue['data']['key'], issue['search_fields']['issue_key']) issue = issues[2] self.assertEqual(issue['origin'], 'http://example.com') self.assertEqual(issue['uuid'], '1c7765e2a5d27495cf389f5f951c544693c4655f') self.assertEqual(issue['updated_on'], 1457006245) self.assertEqual(issue['category'], 'issue') self.assertEqual(issue['tag'], 'http://example.com') self.assertEqual(jira.metadata_id(issue['data']), issue['search_fields']['item_id']) self.assertEqual(issue['data']['fields']['project']['id'], '10843') self.assertEqual(issue['data']['fields']['project']['id'], issue['search_fields']['project_id']) self.assertEqual(issue['data']['fields']['project']['key'], 'HELP') self.assertEqual(issue['data']['fields']['project']['key'], issue['search_fields']['project_key']) self.assertEqual(issue['data']['fields']['project']['name'], 'Help-Desk') self.assertEqual(issue['data']['fields']['project']['name'], issue['search_fields']['project_name']) self.assertEqual(issue['data']['key'], 'HELP-6041') self.assertEqual(issue['data']['key'], issue['search_fields']['issue_key'])
def test_fetch(self): """Test whether a list of issues is returned""" requests = [] bodies_json = [read_file('data/jira/jira_issues_page_1.json'), read_file('data/jira/jira_issues_page_2.json')] comment_json = read_file('data/jira/jira_comments_issue_page_2.json') empty_comment = read_file('data/jira/jira_comments_issue_empty.json') body = read_file('data/jira/jira_fields.json') def request_callback(method, uri, headers): body = bodies_json.pop(0) requests.append(httpretty.last_request()) return 200, headers, body httpretty.register_uri(httpretty.GET, JIRA_SEARCH_URL, responses=[httpretty.Response(body=request_callback) for _ in range(2)]) httpretty.register_uri(httpretty.GET, JIRA_ISSUE_1_COMMENTS_URL, body=empty_comment, status=200) httpretty.register_uri(httpretty.GET, JIRA_ISSUE_2_COMMENTS_URL, body=comment_json, status=200) httpretty.register_uri(httpretty.GET, JIRA_ISSUE_3_COMMENTS_URL, body=empty_comment, status=200) httpretty.register_uri(httpretty.GET, JIRA_FIELDS_URL, body=body, status=200) jira = Jira(JIRA_SERVER_URL) issues = [issue for issue in jira.fetch()] body_json = json.loads(body) custom_fields = filter_custom_fields(body_json) expected_req = [ { 'expand': ['renderedFields,transitions,operations,changelog'], 'jql': ['updated > 0 order by updated asc'], 'startAt': ['0'], 'maxResults': ['100'] }, { 'expand': ['renderedFields,transitions,operations,changelog'], 'jql': ['updated > 0 order by updated asc'], 'startAt': ['2'], 'maxResults': ['100'] } ] for i in range(len(expected_req)): self.assertEqual(requests[i].method, 'GET') self.assertRegex(requests[i].path, '/rest/api/2/search') self.assertDictEqual(requests[i].querystring, expected_req[i]) self.assertEqual(len(issues), 3) issue = issues[0] self.assertEqual(issue['origin'], 'http://example.com') self.assertEqual(issue['uuid'], '6a7ba2a01aee56603b9d8a5f6b40c843fc089b2f') self.assertEqual(issue['updated_on'], 1457015567) self.assertEqual(issue['category'], 'issue') self.assertEqual(issue['tag'], 'http://example.com') self.assertEqual(issue['data']['key'], 'HELP-6043') self.assertEqual(issue['data']['fields']['issuetype']['name'], 'extRequest') self.assertEqual(issue['data']['fields']['creator']['name'], 'user2') self.assertEqual(issue['data']['fields']['assignee']['name'], 'user1') self.assertEqual(issue['data']['fields']['assignee']['name'], 'user1') self.assertEqual(issue['data']['fields']['assignee']['name'], 'user1') self.assertEqual(issue['data']['fields']['assignee']['name'], 'user1') self.assertEqual(issue['data']['fields']['customfield_10301']['id'], custom_fields['customfield_10301']['id']) self.assertEqual(issue['data']['fields']['customfield_10301']['name'], custom_fields['customfield_10301']['name']) self.assertEqual(issue['data']['fields']['customfield_10400']['id'], custom_fields['customfield_10400']['id']) self.assertEqual(issue['data']['fields']['customfield_10400']['name'], custom_fields['customfield_10400']['name']) self.assertEqual(issue['data']['fields']['customfield_10600']['id'], custom_fields['customfield_10600']['id']) self.assertEqual(issue['data']['fields']['customfield_10600']['name'], custom_fields['customfield_10600']['name']) self.assertEqual(issue['data']['fields']['customfield_10603']['id'], custom_fields['customfield_10603']['id']) self.assertEqual(issue['data']['fields']['customfield_10603']['name'], custom_fields['customfield_10603']['name']) self.assertEqual(issue['data']['comments_data'], []) issue = issues[1] self.assertEqual(issue['origin'], 'http://example.com') self.assertEqual(issue['uuid'], '3c3d67925b108a37f88cc6663f7f7dd493fa818c') self.assertEqual(issue['updated_on'], 1457015417) self.assertEqual(issue['category'], 'issue') self.assertEqual(issue['tag'], 'http://example.com') self.assertEqual(issue['data']['key'], 'HELP-6042') self.assertEqual(issue['data']['fields']['issuetype']['name'], 'extRequest') self.assertEqual(issue['data']['fields']['creator']['name'], 'user2') self.assertEqual(issue['data']['fields']['assignee']['name'], 'user1') self.assertEqual(issue['data']['fields']['customfield_10301']['id'], custom_fields['customfield_10301']['id']) self.assertEqual(issue['data']['fields']['customfield_10301']['name'], custom_fields['customfield_10301']['name']) self.assertEqual(issue['data']['fields']['customfield_10400']['id'], custom_fields['customfield_10400']['id']) self.assertEqual(issue['data']['fields']['customfield_10400']['name'], custom_fields['customfield_10400']['name']) self.assertEqual(issue['data']['fields']['customfield_10600']['id'], custom_fields['customfield_10600']['id']) self.assertEqual(issue['data']['fields']['customfield_10600']['name'], custom_fields['customfield_10600']['name']) self.assertEqual(issue['data']['fields']['customfield_10603']['id'], custom_fields['customfield_10603']['id']) self.assertEqual(issue['data']['fields']['customfield_10603']['name'], custom_fields['customfield_10603']['name']) self.assertEqual(len(issue['data']['comments_data']), 2) self.assertEqual(issue['data']['comments_data'][0]['author']['displayName'], 'Tim Monks') self.assertEqual(issue['data']['comments_data'][1]['author']['displayName'], 'Scott Monks') issue = issues[2] self.assertEqual(issue['origin'], 'http://example.com') self.assertEqual(issue['uuid'], '1c7765e2a5d27495cf389f5f951c544693c4655f') self.assertEqual(issue['updated_on'], 1457006245) self.assertEqual(issue['category'], 'issue') self.assertEqual(issue['tag'], 'http://example.com') self.assertEqual(issue['data']['key'], 'HELP-6041') self.assertEqual(issue['data']['fields']['issuetype']['name'], 'extRequest') self.assertEqual(issue['data']['fields']['creator']['name'], 'user2') self.assertEqual(issue['data']['fields']['assignee']['name'], 'user3') self.assertEqual(issue['data']['fields']['customfield_10301']['id'], custom_fields['customfield_10301']['id']) self.assertEqual(issue['data']['fields']['customfield_10301']['name'], custom_fields['customfield_10301']['name']) self.assertEqual(issue['data']['fields']['customfield_10400']['id'], custom_fields['customfield_10400']['id']) self.assertEqual(issue['data']['fields']['customfield_10400']['name'], custom_fields['customfield_10400']['name']) self.assertEqual(issue['data']['fields']['customfield_10600']['id'], custom_fields['customfield_10600']['id']) self.assertEqual(issue['data']['fields']['customfield_10600']['name'], custom_fields['customfield_10600']['name']) self.assertEqual(issue['data']['fields']['customfield_10603']['id'], custom_fields['customfield_10603']['id']) self.assertEqual(issue['data']['fields']['customfield_10603']['name'], custom_fields['customfield_10603']['name']) self.assertEqual(issue['data']['comments_data'], [])
def test_fetch_from_cache(self): """Test whether a list of issues is returned from cache""" requests = [] bodies_json = [read_file('data/jira/jira_issues_page_1.json'), read_file('data/jira/jira_issues_page_2.json')] body = read_file('data/jira/jira_fields.json') def request_callback(method, uri, headers): body = bodies_json.pop(0) requests.append(httpretty.last_request()) return (200, headers, body) httpretty.register_uri(httpretty.GET, JIRA_SEARCH_URL, responses=[httpretty.Response(body=request_callback) \ for _ in range(2)]) httpretty.register_uri(httpretty.GET, JIRA_FIELDS_URL, body=body, status=200) # First, we fetch the issues from the server, storing them # in a cache cache = Cache(self.tmp_path) jira = Jira(JIRA_SERVER_URL, cache=cache) issues = [issue for issue in jira.fetch()] del issues[0]['timestamp'] # Now, we get the issues from the cache. # The contents should be the same and there won't be # any new request to the server cache_issues = [cache_issue for cache_issue in jira.fetch_from_cache()] expected_req = [{ 'expand': ['renderedFields,transitions,operations,changelog'], 'jql': ['updated > 0 order by updated asc'], 'startAt': ['0'] }, { 'expand': ['renderedFields,transitions,operations,changelog'], 'jql': ['updated > 0 order by updated asc'], 'startAt': ['2'] }] for i in range(len(expected_req)): self.assertEqual(requests[i].method, 'GET') self.assertRegex(requests[i].path, '/rest/api/2/search') self.assertDictEqual(requests[i].querystring, expected_req[i]) self.assertEqual(len(issues), len(cache_issues)) for i in range(len(cache_issues)): self.assertEqual(issues[i]['origin'], cache_issues[i]['origin']) self.assertEqual(issues[i]['uuid'], cache_issues[i]['uuid']) self.assertEqual(issues[i]['updated_on'], cache_issues[i]['updated_on']) self.assertEqual(issues[i]['category'], cache_issues[i]['category']) self.assertEqual(issues[1]['tag'], cache_issues[i]['tag']) self.assertEqual(issues[i]['data']['key'], cache_issues[i]['data']['key']) self.assertEqual(issues[i]['data']['fields']['issuetype']['name'], cache_issues[i]['data']['fields']['issuetype']['name']) self.assertEqual(issues[i]['data']['fields']['creator']['name'], cache_issues[i]['data']['fields']['creator']['name']) self.assertEqual(issues[i]['data']['fields']['assignee']['name'], cache_issues[i]['data']['fields']['assignee']['name'])
# print(args) # print ((args.date_from, args.date_to)) jira = Jira(args.url, project=args.project, user=args.user, password=args.password, verify=False, cert=None, max_issues=args.issues, tag=None, archive=None) # print(jira) oids = set() for issue in jira.fetch(category=args.category, from_date=args.date_from): # print(issue.keys()) # print(issue['data'].keys()) # print(issue['data']['fields'].keys()) # print(datetime.datetime.fromtimestamp(issue['data']['fields']['created']).strftime('%Y-%m-%d %H:%M:%S.%f')) # dtu = dateutil.parser.parse(issue['data']['fields']['updated']) dtu = utc.localize( datetime.datetime.fromtimestamp(jira.metadata_updated_on( issue['data']))) # print(dtu) if args.use_created_date: dtc = dateutil.parser.parse(issue['data']['fields']['created']) diff = (dtu - dtc) / datetime.timedelta(seconds=1) # print(diff) # print((dtc, dtu)) if (args.updated_diff >= 0 and diff > args.updated_diff
class JIRAImporter(BugTrackerImporter): severity_level_map = { 'Blocker': 4, 'Critical': 4, 'Major': 3, 'Minor': 2, 'Optional': 1, 'Trivial': 1, } def __init__(self, bt_info): super().__init__(bt_info) self.backend = Jira(bt_info.bug_tracker.baseurl, user=bt_info.bug_tracker.username, password=bt_info.bug_tracker.password) def _import_comment(self, bug, comment_id, author, timestamp): """ Import comment into `bug'. @arg bug btinfo.models.Bug object to import comment for @arg comment_id String representing comment ID @arg author Jira user @arg timestamp String timestamp in iso8601 form @returns True if comment was created, otherwise false """ timestamp = str_to_datetime(timestamp) name = author['displayName'] email = author.get('emailAddress', None) author = get_participant(name, email) _, created = bug.comments.get_or_create(comment_id=comment_id, defaults={ 'author': author, 'timestamp': timestamp }) if created: self.record_timestamp(timestamp) return created def iter_bugs(self): issues = self.backend.fetch() for issue in issues: yield issue def _run(self): for bug in self.iter_bugs(): issue = bug['data'] cl_date = issue['fields']['resolutiondate'] if cl_date: close_date = str_to_datetime(cl_date) else: close_date = None try: with transaction.atomic(): bug, created = self.object.bugs.get_or_create( bug_id=issue['key'], defaults={'close_date': close_date}) logger.info("%s bug [%s]", "Imported" if created else "Found", issue['key']) # Create first comment, since that seems to be merged into # the issue if created: self._import_comment(bug, 'VIRTUAL-1', issue['fields']['reporter'], issue['fields']['created']) # We didn't import a new bug, so set the .close_date else: bug.close_date = close_date bug.save() # TODO: comments not supported yet comments = [] for comment in comments: created_comment = self._import_comment( bug, comment.id, comment.author, comment.created) logger.info("%s comment [%s]", "Imported" if created_comment else "Found", comment.id) except: logger.info("Couldn't import issue [%s], skipping", issue, exc_info=True)
# Boston, MA 02110-1301 USA, from datetime import datetime, timedelta from perceval.backends.core.gerrit import Gerrit from perceval.backends.core.jira import Jira from pprint import pprint # hostname hostname = 'https://tickets.puppetlabs.com' # retrieve only reviews changed since one day ago from_date = datetime.now() - timedelta(days=1) repo = Jira(hostname) # # fetch all reviews as an iterator, and iterate it printing each review id for review in repo.fetch(from_date=from_date): print(review) print( "---------------------------------------------------------------------------------------------------------------------------------------" ) print( "---------------------------------------------------------------------------------------------------------------------------------------" ) for review in repo.fetch(from_date=from_date): pprint(review['data']['fields']['creator']['displayName']) print( "---------------------------------------------------------------------------------------------------------------------------------------" ) print( "---------------------------------------------------------------------------------------------------------------------------------------"