in ForgeImporters/forgeimporters/forge/tracker.py [0:0]
def import_tool(self, project, user, mount_point=None,
mount_label=None, **kw):
import_id_converter = ImportIdConverter.get()
tracker_json = self._load_json(project)
tracker_json['tracker_config']['options'].pop('ordinal', None)
tracker_json['tracker_config']['options'].pop('mount_point', None)
tracker_json['tracker_config']['options'].pop('mount_label', None)
tracker_json['tracker_config']['options'].pop('import_id', None)
app = project.install_app('tickets', mount_point, mount_label,
import_id={
'source': self.source,
'app_config_id': tracker_json['tracker_config']['_id'],
},
open_status_names=tracker_json[
'open_status_names'],
closed_status_names=tracker_json[
'closed_status_names'],
**tracker_json['tracker_config']['options']
)
ThreadLocalODMSession.flush_all()
try:
M.session.artifact_orm_session._get().skip_mod_date = True
for ticket_json in tracker_json['tickets']:
reporter = self.get_user(ticket_json['reported_by'])
owner = self.get_user(ticket_json['assigned_to'])
with h.push_config(c, user=reporter, app=app):
self.max_ticket_num = max(
ticket_json['ticket_num'], self.max_ticket_num)
ticket = TM.Ticket(
app_config_id=app.config._id,
import_id=import_id_converter.expand(
ticket_json['ticket_num'], app),
description=self.annotate(
self.annotate(
ticket_json['description'],
owner, ticket_json[
'assigned_to'], label=' owned'),
reporter, ticket_json[
'reported_by'], label=' created'),
created_date=dateutil.parser.parse(
ticket_json['created_date']),
mod_date=dateutil.parser.parse(
ticket_json['mod_date']),
ticket_num=ticket_json['ticket_num'],
summary=ticket_json['summary'],
custom_fields=ticket_json['custom_fields'],
status=ticket_json['status'],
labels=ticket_json['labels'],
votes_down=ticket_json['votes_down'],
votes_up=ticket_json['votes_up'],
votes=ticket_json['votes_up'] -
ticket_json['votes_down'],
assigned_to_id=owner._id,
)
# add an attachment to the ticket
ticket.add_multiple_attachments([File(a['url'])
for a in ticket_json['attachments']])
# trigger the private property
ticket.private = ticket_json['private']
self.process_comments(
ticket, ticket_json['discussion_thread']['posts'])
session(ticket).flush(ticket)
session(ticket).expunge(ticket)
app.globals.custom_fields = tracker_json['custom_fields']
self.process_bins(app, tracker_json['saved_bins'])
app.globals.last_ticket_num = self.max_ticket_num
M.AuditLog.log(
'import tool {} from exported Allura JSON'.format(
app.config.options.mount_point,
),
project=project,
user=user,
url=app.url,
)
g.post_event('project_updated')
app.globals.invalidate_bin_counts()
ThreadLocalODMSession.flush_all()
return app
except Exception:
h.make_app_admin_only(app)
raise
finally:
M.session.artifact_orm_session._get().skip_mod_date = False