예제 #1
0
    def execute(self, p_request: ExportRequest = None):
        """ Executes the export operation """
        self._prepare_before_execute(p_request)

        try:
            self._status = ExportStatus.BUSY
            log = Log()
            log.append_text("Starting data export")
            self.request.dispatcher.export_data_begin()
            source_db = self.request.dispatcher.get_client_database(
                self.request.client)
            package = Exporter._pull(source_db)
            Exporter._push(package, self.request.target_db)
        except Exception as error:  # pylint: disable=W0703
            error_entry = LogEntry(str(error), p_type=MessageType.error)
            log.append_entry(error_entry)
        finally:
            self.request.dispatcher.export_data_end()
            log.append_text("Data export finished")
            try:
                self.request.target_db.insert_log(log)
            except Exception:  # pylint: disable=W0703
                pass
            self._status = ExportStatus.IDLE
            print("Export complete")
예제 #2
0
    def _drive_passenger(self, p_client: Client,
                         p_client_passenger: ClientPassenger):
        if self.paused or self._status.shutting_down:
            return
        log = Log()
        db = None  # pylint: disable=C0103
        driver = None
        try:
            log.append_text("Dispatching client " + p_client.id +
                            " passenger " + p_client_passenger.name)

            log.append_text(f"Creating database {self.ticket.database_module}")
            db = self.get_client_database(p_client.id, log)  # pylint: disable=C0103
            log.append_text("Checking schema")
            db.ensure_schema_existence()
            log.append_text(f"Creating driver {self.ticket.driver_module}")
            driver = self.get_driver()
            log.append_text("Creating ticket")

            ticket = BusTicket(p_client_passenger=p_client_passenger,
                               p_log=log,
                               p_database=db)

            log.append_text("Driving")
            driver.drive(ticket)

        except Exception as drive_error:  # pylint: disable=W0703
            if log is not None:
                log.append_entry(
                    LogEntry(p_message=str(drive_error),
                             p_type=MessageType.error))
        finally:
            self._tick_count.reset_tick(p_client.id, p_client_passenger.name)
            if self.ticket.dispatcher_observer is not None and log is not None:
                self.ticket.dispatcher_observer.drive_passenger_complete(
                    p_client, p_client_passenger, log)
            if db is not None:
                db.insert_log(log)
                db.delete_old_logs(p_client.log_expiry_date)
            if driver is not None:
                driver.queue.delete_completed_passengers(
                    p_client_passenger.name,
                    p_client_passenger.queue_expiry_date)