From 9c45e354d50ce45912e5e4bc85837d847cc1f883 Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Nov 13 2016 11:44:09 +0000 Subject: [PATCH 1/3] add custom key value in the json representation of an issue --- diff --git a/pagure_importer/utils/models.py b/pagure_importer/utils/models.py index 8b0dfbf..7a17ea6 100644 --- a/pagure_importer/utils/models.py +++ b/pagure_importer/utils/models.py @@ -9,7 +9,7 @@ class Issue(): self, id, title, content, status, date_created, user, private, attachment, tags, depends, blocks, assignee, close_status, comments=None, - milestone=None): + milestone=None, custom_fields=None): self.id = id self.title = title @@ -27,6 +27,7 @@ class Issue(): self.comments = comments self.uid = uuid.uuid4().hex self.milestone = milestone + self.custom_fields = custom_fields if custom_fields else [] def to_json(self): ''' Returns a dictionary representation of the issue. @@ -46,7 +47,8 @@ class Issue(): 'blocks': self.blocks, 'assignee': self.assignee, 'comments': self.comments, - 'milestone': self.milestone + 'milestone': self.milestone, + 'custom_fields': self.custom_fields, } return output From 922c3bfa1dc3c09743edecc9f06c2860c434c58c Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Nov 13 2016 17:24:31 +0000 Subject: [PATCH 2/3] Custom field support for fedorahosted --- diff --git a/pagure_importer/utils/importer_trac.py b/pagure_importer/utils/importer_trac.py index 7d52531..d435c20 100644 --- a/pagure_importer/utils/importer_trac.py +++ b/pagure_importer/utils/importer_trac.py @@ -28,6 +28,7 @@ class TracImporter(): self.somebody = User(name='somebody', fullname='somebody', emails=['some@body.com']) self.reqid = 0 + self.custom_fields = self.get_custom_fields() def request(self, method, *args): ''' Common method for querying trac ''' @@ -56,6 +57,21 @@ class TracImporter(): ts = str(time.mktime(date.timetuple()))[:-2] # Strip the .0 return ts + def get_custom_fields(self): + ''' Queries the fedorahosted api to get all ticket fields + and filters all the custom fields, returns + a list of dicts - dict with keys 'name' and 'key_type' ''' + + all_ticket_fields = self.request('ticket.getTicketFields') + custom_fields = [] + for field in all_ticket_fields: + if field.get('custom') is True: + current_field = {} + current_field['name'] = field['name'] + current_field['key_type'] = 'text' + custom_fields.append(current_field) + return custom_fields + def import_issues(self, repo_name, repo_folder, trac_query='max=0&order=id'): ''' Import issues from trac instance using jsonrpc API ''' @@ -84,6 +100,21 @@ class TracImporter(): str(ticket_id) + '/' + str(tickets_id[-1])) push_delete_repo(newpath, new_repo) + def get_custom_fields_of_ticket(self, trac_ticket): + ''' Given the trac ticket, it will return all the + custom fields of the ticket, in a form that it can + be used for pagure Issue ''' + + pagure_fields = [] + for field in self.custom_fields: + if field['name'] in trac_ticket: + pagure_field = {} + pagure_field['name'] = field.get('name') + pagure_field['key_type'] = field.get('key_type') + pagure_field['value'] = trac_ticket.get(pagure_field['name']) + pagure_fields.append(pagure_field) + return pagure_fields + def create_issue(self, ticket_id): ''' Create Issue object from track ticket ''' @@ -99,6 +130,7 @@ class TracImporter(): ticket_id, filename)['__jsonclass__'][1].replace('\n', '') pagure_attachment[filename] = base64.b64decode(content) + pagure_custom_fields = self.get_custom_fields_of_ticket(trac_ticket) pagure_issue_title = trac_ticket['summary'] pagure_issue_content = trac_ticket['description'] @@ -160,7 +192,8 @@ class TracImporter(): milestone=pagure_milestone, depends=pagure_issue_depends, blocks=pagure_issue_blocks, - assignee=pagure_issue_assignee.to_json()) + assignee=pagure_issue_assignee.to_json(), + custom_fields=pagure_custom_fields,) return pagure_issue def pre_process_tags(self, tags): From 17908f1f61670543e3bc15c0c7189a33b68b2312 Mon Sep 17 00:00:00 2001 From: Vivek Anand Date: Nov 13 2016 17:24:35 +0000 Subject: [PATCH 3/3] Allow key_type to be boolean when it's a chekbox on fedorahosted custom field --- diff --git a/pagure_importer/utils/importer_trac.py b/pagure_importer/utils/importer_trac.py index d435c20..2e69720 100644 --- a/pagure_importer/utils/importer_trac.py +++ b/pagure_importer/utils/importer_trac.py @@ -68,7 +68,10 @@ class TracImporter(): if field.get('custom') is True: current_field = {} current_field['name'] = field['name'] - current_field['key_type'] = 'text' + key_type = 'text' + if field['type'] == 'checkbox': + key_type = 'boolean' + current_field['key_type'] = key_type custom_fields.append(current_field) return custom_fields