:mod:`airflow.models.dagrun`
============================

.. py:module:: airflow.models.dagrun


Module Contents
---------------

.. py:class:: DagRun

   Bases: :class:`airflow.models.base.Base`, :class:`airflow.utils.log.logging_mixin.LoggingMixin`

   DagRun describes an instance of a Dag. It can be created
   by the scheduler (for regular runs) or by an external trigger

   .. attribute:: __tablename__
      :annotation: = dag_run

      

   .. attribute:: ID_PREFIX
      :annotation: = scheduled__

      

   .. attribute:: ID_FORMAT_PREFIX
      

      

   .. attribute:: id
      

      

   .. attribute:: dag_id
      

      

   .. attribute:: execution_date
      

      

   .. attribute:: start_date
      

      

   .. attribute:: end_date
      

      

   .. attribute:: _state
      

      

   .. attribute:: run_id
      

      

   .. attribute:: external_trigger
      

      

   .. attribute:: conf
      

      

   .. attribute:: dag
      

      

   .. attribute:: __table_args__
      

      

   .. attribute:: state
      

      

   .. attribute:: is_backfill
      

      

   
   .. method:: __repr__(self)



   
   .. method:: get_state(self)



   
   .. method:: set_state(self, state)



   
   .. classmethod:: id_for_date(cls, date, prefix=ID_FORMAT_PREFIX)



   
   .. method:: refresh_from_db(self, session=None)

      Reloads the current dagrun from the database

      :param session: database session



   
   .. staticmethod:: find(dag_id=None, run_id=None, execution_date=None, state=None, external_trigger=None, no_backfills=False, session=None)

      Returns a set of dag runs for the given search criteria.

      :param dag_id: the dag_id to find dag runs for
      :type dag_id: int, list
      :param run_id: defines the the run id for this dag run
      :type run_id: str
      :param execution_date: the execution date
      :type execution_date: datetime.datetime
      :param state: the state of the dag run
      :type state: str
      :param external_trigger: whether this dag run is externally triggered
      :type external_trigger: bool
      :param no_backfills: return no backfills (True), return all (False).
          Defaults to False
      :type no_backfills: bool
      :param session: database session
      :type session: sqlalchemy.orm.session.Session



   
   .. method:: get_task_instances(self, state=None, session=None)

      Returns the task instances for this dag run



   
   .. method:: get_task_instance(self, task_id, session=None)

      Returns the task instance specified by task_id for this dag run

      :param task_id: the task id



   
   .. method:: get_dag(self)

      Returns the Dag associated with this DagRun.

      :return: DAG



   
   .. method:: get_previous_dagrun(self, state=None, session=None)

      The previous DagRun, if there is one



   
   .. method:: get_previous_scheduled_dagrun(self, session=None)

      The previous, SCHEDULED DagRun, if there is one



   
   .. method:: update_state(self, session=None)

      Determines the overall state of the DagRun based on the state
      of its TaskInstances.

      :return: State



   
   .. method:: _emit_duration_stats_for_finished_state(self)



   
   .. method:: verify_integrity(self, session=None)

      Verifies the DagRun by checking for removed tasks or tasks that are not in the
      database yet. It will set state to removed or add the task if required.



   
   .. staticmethod:: get_run(session, dag_id, execution_date)

      :param dag_id: DAG ID
      :type dag_id: unicode
      :param execution_date: execution date
      :type execution_date: datetime
      :return: DagRun corresponding to the given dag_id and execution date
          if one exists. None otherwise.
      :rtype: airflow.models.DagRun



   
   .. classmethod:: get_latest_runs(cls, session)

      Returns the latest DagRun for each DAG. 




