def __init__(self, p_args: SqlDatabaseArguments, p_client_id: str = ""): super().__init__(p_args, p_client_id) self.where = WhereBuilder(p_client_id)
def _select_from_queue( self, # pylint: disable=R0912, R0913, R0914, R0915 p_passenger_module: str = None, p_processor_status: QueueStatus = None, p_pusher_status: QueueStatus = None, p_puller_notified: bool = None, p_pulled_before: datetime = None, p_queue_id: str = None) -> List[PassengerQueueStatus]: output = [] where = WhereBuilder(self.client_id) if p_queue_id is not None: where.add_and("queue_id = '" + p_queue_id + "'") if p_passenger_module is not None: where.add_and("passenger_module = '" + p_passenger_module + "'") if p_puller_notified is not None: where.add_and("puller_notified = " + str(DatabusToSql.boolean(p_puller_notified))) if p_pulled_before is not None: where.add_and_date_lt("pulled_on", p_pulled_before) where.set_order_by(["pulled_on"]) queue_list = self._query_helper.select_all_where_builder( "queue", where) for queue_row in queue_list: queue_row_is_eligible = True queue_where = "queue_id = '" + queue_row["queue_id"] + "'" processor_list = self._query_helper.select_all( "queue_processor", queue_where, p_order_fields=["exe_order"]) # pylint: disable= C0301 if p_processor_status is not None and len(processor_list) > 0: for processor_row in processor_list: if SqlToDatabus.queue_status( processor_row["status"]) != p_processor_status: queue_row_is_eligible = False break if not queue_row_is_eligible: continue pusher_list = self._query_helper.select_all( "queue_pusher", queue_where, p_order_fields=["exe_order"]) # pylint: disable= C0301 if p_pusher_status is not None and len(pusher_list) > 0: for pusher_row in pusher_list: if SqlToDatabus.queue_status( pusher_row["status"]) != p_pusher_status: queue_row_is_eligible = False break if not queue_row_is_eligible: continue passenger = self.passenger_factory.create_passenger( queue_row["passenger_module"]) # pylint: disable=C0301 passenger.external_id = queue_row["external_id"] passenger.internal_id = queue_row["queue_id"] passenger.source_system = queue_row["source_system"] passenger.puller_module = queue_row["puller_module"] passenger.pull_datetime = SqlToDatabus.date_time( queue_row["pulled_on"]) attachment_list = self._query_helper.select_all( "queue_attachment", queue_where) for attachment_row in attachment_list: if attachment_row["bin_content"] is None: bin_content = None else: bin_content = attachment_row["bin_content"] if attachment_row["txt_content"] is None: txt_content = None else: txt_content = attachment_row["txt_content"] attachment = Attachment( p_name=attachment_row["attachment_id"], p_format=SqlToDatabus.attachment_format( attachment_row["file_format"]), p_text_content=txt_content, p_binary_content=bin_content) passenger.attachments.append(attachment) log_list = self._query_helper.select_all("queue_log", queue_where) for log in log_list: passenger.collect_log_guid(UUID(log["log_id"])) output_row = PassengerQueueStatus( p_passenger=passenger, p_puller_notified=SqlToDatabus.boolean( queue_row["puller_notified"])) for processor_row in processor_list: pqs = ProcessorQueueStatus( processor_row["processor_module"], SqlToDatabus.queue_status(processor_row["status"])) output_row.processor_statuses.append(pqs) for pusher_row in pusher_list: pqs = PusherQueueStatus( pusher_row["pusher_module"], SqlToDatabus.queue_status(pusher_row["status"])) output_row.pusher_statuses.append(pqs) output.append(output_row) return output