def import_tool()

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