## Licensed to the Apache Software Foundation (ASF) under one# or more contributor license agreements. See the NOTICE file# distributed with this work for additional information# regarding copyright ownership. The ASF licenses this file# to you under the Apache License, Version 2.0 (the# "License"); you may not use this file except in compliance# with the License. You may obtain a copy of the License at## http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing,# software distributed under the License is distributed on an# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY# KIND, either express or implied. See the License for the# specific language governing permissions and limitations# under the License."""TaskReschedule tracks rescheduled task instances."""fromsqlalchemyimportColumn,ForeignKeyConstraint,Index,Integer,String,asc,descfromairflow.models.baseimportCOLLATION_ARGS,ID_LEN,Basefromairflow.utils.sessionimportprovide_sessionfromairflow.utils.sqlalchemyimportUtcDateTime
[docs]defquery_for_task_instance(task_instance,descending=False,session=None):""" Returns query for task reschedules for a given the task instance. :param session: the database session object :type session: sqlalchemy.orm.session.Session :param task_instance: the task instance to find task reschedules for :type task_instance: airflow.models.TaskInstance :param descending: If True then records are returned in descending order :type descending: bool """TR=TaskRescheduleqry=session.query(TR).filter(TR.dag_id==task_instance.dag_id,TR.task_id==task_instance.task_id,TR.execution_date==task_instance.execution_date,TR.try_number==task_instance.try_number,)ifdescending:returnqry.order_by(desc(TR.id))else:returnqry.order_by(asc(TR.id))
@staticmethod@provide_session
[docs]deffind_for_task_instance(task_instance,session=None):""" Returns all task reschedules for the task instance and try number, in ascending order. :param session: the database session object :type session: sqlalchemy.orm.session.Session :param task_instance: the task instance to find task reschedules for :type task_instance: airflow.models.TaskInstance """returnTaskReschedule.query_for_task_instance(task_instance,session=session).all()