airflow-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From criccom...@apache.org
Subject [06/35] incubator-airflow-site git commit: 1.9.0
Date Wed, 03 Jan 2018 17:48:06 GMT
http://git-wip-us.apache.org/repos/asf/incubator-airflow-site/blob/28a3eb60/concepts.html
----------------------------------------------------------------------
diff --git a/concepts.html b/concepts.html
index a329ae8..16d995c 100644
--- a/concepts.html
+++ b/concepts.html
@@ -13,6 +13,8 @@
 
   
   
+  
+  
 
   
 
@@ -81,7 +83,10 @@
           
             
             
-                <ul class="current">
+              
+            
+            
+              <ul class="current">
 <li class="toctree-l1"><a class="reference internal" href="project.html">Project</a></li>
 <li class="toctree-l1"><a class="reference internal" href="license.html">License</a></li>
 <li class="toctree-l1"><a class="reference internal" href="start.html">Quick Start</a></li>
@@ -208,23 +213,23 @@ workflows.</p>
 <h2>Core Ideas<a class="headerlink" href="#core-ideas" title="Permalink to this headline">¶</a></h2>
 <div class="section" id="dags">
 <h3>DAGs<a class="headerlink" href="#dags" title="Permalink to this headline">¶</a></h3>
-<p>In Airflow, a <code class="docutils literal"><span class="pre">DAG</span></code> &#8211; or a Directed Acyclic Graph &#8211; is a collection of all
+<p>In Airflow, a <code class="docutils literal"><span class="pre">DAG</span></code> – or a Directed Acyclic Graph – is a collection of all
 the tasks you want to run, organized in a way that reflects their relationships
 and dependencies.</p>
 <p>For example, a simple DAG could consist of three tasks: A, B, and C. It could
 say that A has to run successfully before B can run, but C can run anytime. It
 could say that task A times out after 5 minutes, and B can be restarted up to 5
 times in case it fails. It might also say that the workflow will run every night
-at 10pm, but shouldn&#8217;t start until a certain date.</p>
+at 10pm, but shouldn’t start until a certain date.</p>
 <p>In this way, a DAG describes <em>how</em> you want to carry out your workflow; but
-notice that we haven&#8217;t said anything about <em>what</em> we actually want to do! A, B,
+notice that we haven’t said anything about <em>what</em> we actually want to do! A, B,
 and C could be anything. Maybe A prepares data for B to analyze while C sends an
 email. Or perhaps A monitors your location so B can open your garage door while
-C turns on your house lights. The important thing is that the DAG isn&#8217;t
+C turns on your house lights. The important thing is that the DAG isn’t
 concerned with what its constituent tasks do; its job is to make sure that
 whatever they do happens at the right time, or in the right order, or with the
 right handling of any unexpected issues.</p>
-<p>DAGs are defined in standard Python files that are placed in Airflow&#8217;s
+<p>DAGs are defined in standard Python files that are placed in Airflow’s
 <code class="docutils literal"><span class="pre">DAG_FOLDER</span></code>. Airflow will execute the code in each file to dynamically build
 the <code class="docutils literal"><span class="pre">DAG</span></code> objects. You can have as many DAGs as you want, each describing an
 arbitrary number of tasks. In general, each one should correspond to a single
@@ -245,7 +250,7 @@ scope.</p>
 </div>
 <p>Sometimes this can be put to good use. For example, a common pattern with
 <code class="docutils literal"><span class="pre">SubDagOperator</span></code> is to define the subdag inside a function so that Airflow
-doesn&#8217;t try to load it as a standalone DAG.</p>
+doesn’t try to load it as a standalone DAG.</p>
 </div>
 <div class="section" id="default-arguments">
 <h4>Default Arguments<a class="headerlink" href="#default-arguments" title="Permalink to this headline">¶</a></h4>
@@ -278,13 +283,13 @@ any of its operators. This makes it easy to apply a common parameter to many ope
 <p>While DAGs describe <em>how</em> to run a workflow, <code class="docutils literal"><span class="pre">Operators</span></code> determine what
 actually gets done.</p>
 <p>An operator describes a single task in a workflow. Operators are usually (but
-not always) atomic, meaning they can stand on their own and don&#8217;t need to share
+not always) atomic, meaning they can stand on their own and don’t need to share
 resources with any other operators. The DAG will make sure that operators run in
 the correct certain order; other than those dependencies, operators generally
 run independently. In fact, they may run on two completely different machines.</p>
 <p>This is a subtle but very important point: in general, if two operators need to
 share information, like a filename or small amount of data, you should consider
-combining them into a single operator. If it absolutely can&#8217;t be avoided,
+combining them into a single operator. If it absolutely can’t be avoided,
 Airflow does have a feature for operator cross-communication called XCom that is
 described elsewhere in this document.</p>
 <p>Airflow provides operators for many common tasks, including:</p>
@@ -293,14 +298,14 @@ described elsewhere in this document.</p>
 <li><code class="docutils literal"><span class="pre">PythonOperator</span></code> - calls an arbitrary Python function</li>
 <li><code class="docutils literal"><span class="pre">EmailOperator</span></code> - sends an email</li>
 <li><code class="docutils literal"><span class="pre">HTTPOperator</span></code> - sends an HTTP request</li>
-<li><code class="docutils literal"><span class="pre">SqlOperator</span></code> - executes a SQL command</li>
-<li><code class="docutils literal"><span class="pre">Sensor</span></code> - waits for a certain time, file, database row, S3 key, etc...</li>
+<li><code class="docutils literal"><span class="pre">MySqlOperator</span></code>, <code class="docutils literal"><span class="pre">SqliteOperator</span></code>, <code class="docutils literal"><span class="pre">PostgresOperator</span></code>, <code class="docutils literal"><span class="pre">MsSqlOperator</span></code>, <code class="docutils literal"><span class="pre">OracleOperator</span></code>, <code class="docutils literal"><span class="pre">JdbcOperator</span></code>, etc. - executes a SQL command</li>
+<li><code class="docutils literal"><span class="pre">Sensor</span></code> - waits for a certain time, file, database row, S3 key, etc…</li>
 </ul>
 <p>In addition to these basic building blocks, there are many more specific
 operators: <code class="docutils literal"><span class="pre">DockerOperator</span></code>, <code class="docutils literal"><span class="pre">HiveOperator</span></code>, <code class="docutils literal"><span class="pre">S3FileTransferOperator</span></code>,
-<code class="docutils literal"><span class="pre">PrestoToMysqlOperator</span></code>, <code class="docutils literal"><span class="pre">SlackOperator</span></code>... you get the idea!</p>
+<code class="docutils literal"><span class="pre">PrestoToMysqlOperator</span></code>, <code class="docutils literal"><span class="pre">SlackOperator</span></code>… you get the idea!</p>
 <p>The <code class="docutils literal"><span class="pre">airflow/contrib/</span></code> directory contains yet more operators built by the
-community. These operators aren&#8217;t always as complete or well-tested as those in
+community. These operators aren’t always as complete or well-tested as those in
 the main distribution, but allow users to more easily add new functionality to
 the platform.</p>
 <p>Operators are only loaded by Airflow if they are assigned to a DAG.</p>
@@ -344,7 +349,7 @@ functionally equivalent:</p>
 <p>When using the bitshift to compose operators, the relationship is set in the
 direction that the bitshift operator points. For example, <code class="docutils literal"><span class="pre">op1</span> <span class="pre">&gt;&gt;</span> <span class="pre">op2</span></code> means
 that <code class="docutils literal"><span class="pre">op1</span></code> runs first and <code class="docutils literal"><span class="pre">op2</span></code> runs second. Multiple operators can be
-composed &#8211; keep in mind the chain is executed left-to-right and the rightmost
+composed – keep in mind the chain is executed left-to-right and the rightmost
 object is always returned. For example:</p>
 <div class="code python highlight-default"><div class="highlight"><pre><span></span><span class="n">op1</span> <span class="o">&gt;&gt;</span> <span class="n">op2</span> <span class="o">&gt;&gt;</span> <span class="n">op3</span> <span class="o">&lt;&lt;</span> <span class="n">op4</span>
 </pre></div>
@@ -367,8 +372,7 @@ object is always returned. For example:</p>
 <p>We can put this all together to build a simple pipeline:</p>
 <div class="code python highlight-default"><div class="highlight"><pre><span></span><span class="k">with</span> <span class="n">DAG</span><span class="p">(</span><span class="s1">&#39;my_dag&#39;</span><span class="p">,</span> <span class="n">start_date</span><span class="o">=</span><span class="n">datetime</span><span class="p">(</span><span class="mi">2016</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span> <span class="k">as</span> <span class="n">dag</span><span class="p">:</span>
     <span class="p">(</span>
-        <span class="n">dag</span>
-        <span class="o">&gt;&gt;</span> <span class="n">DummyOperator</span><span class="p">(</span><span class="n">task_id</span><span class="o">=</span><span class="s1">&#39;dummy_1&#39;</span><span class="p">)</span>
+        <span class="n">DummyOperator</span><span class="p">(</span><span class="n">task_id</span><span class="o">=</span><span class="s1">&#39;dummy_1&#39;</span><span class="p">)</span>
         <span class="o">&gt;&gt;</span> <span class="n">BashOperator</span><span class="p">(</span>
             <span class="n">task_id</span><span class="o">=</span><span class="s1">&#39;bash_1&#39;</span><span class="p">,</span>
             <span class="n">bash_command</span><span class="o">=</span><span class="s1">&#39;echo &quot;HELLO!&quot;&#39;</span><span class="p">)</span>
@@ -382,7 +386,7 @@ object is always returned. For example:</p>
 </div>
 <div class="section" id="tasks">
 <h3>Tasks<a class="headerlink" href="#tasks" title="Permalink to this headline">¶</a></h3>
-<p>Once an operator is instantiated, it is referred to as a &#8220;task&#8221;. The
+<p>Once an operator is instantiated, it is referred to as a “task”. The
 instantiation defines specific values when calling the abstract operator, and
 the parameterized task becomes a node in a DAG.</p>
 </div>
@@ -390,12 +394,12 @@ the parameterized task becomes a node in a DAG.</p>
 <h3>Task Instances<a class="headerlink" href="#task-instances" title="Permalink to this headline">¶</a></h3>
 <p>A task instance represents a specific run of a task and is characterized as the
 combination of a dag, a task, and a point in time. Task instances also have an
-indicative state, which could be &#8220;running&#8221;, &#8220;success&#8221;, &#8220;failed&#8221;, &#8220;skipped&#8221;, &#8220;up
-for retry&#8221;, etc.</p>
+indicative state, which could be “running”, “success”, “failed”, “skipped”, “up
+for retry”, etc.</p>
 </div>
 <div class="section" id="workflows">
 <h3>Workflows<a class="headerlink" href="#workflows" title="Permalink to this headline">¶</a></h3>
-<p>You&#8217;re now familiar with the core building blocks of Airflow.
+<p>You’re now familiar with the core building blocks of Airflow.
 Some of the concepts may sound very similar, but the vocabulary can
 be conceptualized like this:</p>
 <ul class="simple">
@@ -457,8 +461,8 @@ gets prioritized accordingly.</p>
 reached, runnable tasks get queued and their state will show as such in the
 UI. As slots free up, queued tasks start running based on the
 <code class="docutils literal"><span class="pre">priority_weight</span></code> (of the task and its descendants).</p>
-<p>Note that by default tasks aren&#8217;t assigned to any pool and their
-execution parallelism is only limited to the executor&#8217;s setting.</p>
+<p>Note that by default tasks aren’t assigned to any pool and their
+execution parallelism is only limited to the executor’s setting.</p>
 </div>
 <div class="section" id="connections">
 <h3>Connections<a class="headerlink" href="#connections" title="Permalink to this headline">¶</a></h3>
@@ -489,7 +493,7 @@ variable to be in a URI format (e.g.
 <p>When using the CeleryExecutor, the celery queues that tasks are sent to
 can be specified. <code class="docutils literal"><span class="pre">queue</span></code> is an attribute of BaseOperator, so any
 task can be assigned to any queue. The default queue for the environment
-is defined in the <code class="docutils literal"><span class="pre">airflow.cfg</span></code>&#8216;s <code class="docutils literal"><span class="pre">celery</span> <span class="pre">-&gt;</span> <span class="pre">default_queue</span></code>. This defines
+is defined in the <code class="docutils literal"><span class="pre">airflow.cfg</span></code>’s <code class="docutils literal"><span class="pre">celery</span> <span class="pre">-&gt;</span> <span class="pre">default_queue</span></code>. This defines
 the queue that tasks get assigned to when not specified, as well as which
 queue Airflow workers listen to when started.</p>
 <p>Workers can listen to one or multiple queues of tasks. When a worker is
@@ -505,16 +509,16 @@ itself because it needs a very specific environment and security rights).</p>
 <div class="section" id="xcoms">
 <h3>XComs<a class="headerlink" href="#xcoms" title="Permalink to this headline">¶</a></h3>
 <p>XComs let tasks exchange messages, allowing more nuanced forms of control and
-shared state. The name is an abbreviation of &#8220;cross-communication&#8221;. XComs are
+shared state. The name is an abbreviation of “cross-communication”. XComs are
 principally defined by a key, value, and timestamp, but also track attributes
 like the task/DAG that created the XCom and when it should become visible. Any
 object that can be pickled can be used as an XCom value, so users should make
 sure to use objects of appropriate size.</p>
-<p>XComs can be &#8220;pushed&#8221; (sent) or &#8220;pulled&#8221; (received). When a task pushes an
+<p>XComs can be “pushed” (sent) or “pulled” (received). When a task pushes an
 XCom, it makes it generally available to other tasks. Tasks can push XComs at
 any time by calling the <code class="docutils literal"><span class="pre">xcom_push()</span></code> method. In addition, if a task returns
-a value (either from its Operator&#8217;s <code class="docutils literal"><span class="pre">execute()</span></code> method, or from a
-PythonOperator&#8217;s <code class="docutils literal"><span class="pre">python_callable</span></code> function), then an XCom containing that
+a value (either from its Operator’s <code class="docutils literal"><span class="pre">execute()</span></code> method, or from a
+PythonOperator’s <code class="docutils literal"><span class="pre">python_callable</span></code> function), then an XCom containing that
 value is automatically pushed.</p>
 <p>Tasks call <code class="docutils literal"><span class="pre">xcom_pull()</span></code> to retrieve XComs, optionally applying filters
 based on criteria like <code class="docutils literal"><span class="pre">key</span></code>, source <code class="docutils literal"><span class="pre">task_ids</span></code>, and source <code class="docutils literal"><span class="pre">dag_id</span></code>. By
@@ -533,7 +537,7 @@ passed, then a correpsonding list of XCom values is returned.</p>
     <span class="n">value</span> <span class="o">=</span> <span class="n">context</span><span class="p">[</span><span class="s1">&#39;task_instance&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">xcom_pull</span><span class="p">(</span><span class="n">task_ids</span><span class="o">=</span><span class="s1">&#39;pushing_task&#39;</span><span class="p">)</span>
 </pre></div>
 </div>
-<p>It is also possible to pull XCom directly in a template, here&#8217;s an example
+<p>It is also possible to pull XCom directly in a template, here’s an example
 of what this may look like:</p>
 <div class="code sql highlight-default"><div class="highlight"><pre><span></span><span class="n">SELECT</span> <span class="o">*</span> <span class="n">FROM</span> <span class="p">{{</span> <span class="n">task_instance</span><span class="o">.</span><span class="n">xcom_pull</span><span class="p">(</span><span class="n">task_ids</span><span class="o">=</span><span class="s1">&#39;foo&#39;</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s1">&#39;table_name&#39;</span><span class="p">)</span> <span class="p">}}</span>
 </pre></div>
@@ -575,9 +579,9 @@ directly downstream from the BranchPythonOperator task.</p>
 will invariably lead to block tasks that depend on their past successes.
 <code class="docutils literal"><span class="pre">skipped</span></code> states propagates where all directly upstream tasks are
 <code class="docutils literal"><span class="pre">skipped</span></code>.</p>
-<p>If you want to skip some tasks, keep in mind that you can&#8217;t have an empty
+<p>If you want to skip some tasks, keep in mind that you can’t have an empty
 path, if so make a dummy task.</p>
-<p>like this, the dummy task &#8220;branch_false&#8221; is skipped</p>
+<p>like this, the dummy task “branch_false” is skipped</p>
 <img alt="_images/branch_good.png" src="_images/branch_good.png" />
 <p>Not like this, where the join task is skipped</p>
 <img alt="_images/branch_bad.png" src="_images/branch_bad.png" />
@@ -649,11 +653,11 @@ the tasks contained within the SubDAG:</p>
 <img alt="_images/subdag_zoom.png" src="_images/subdag_zoom.png" />
 <p>Some other tips when using SubDAGs:</p>
 <ul class="simple">
-<li>by convention, a SubDAG&#8217;s <code class="docutils literal"><span class="pre">dag_id</span></code> should be prefixed by its parent and
+<li>by convention, a SubDAG’s <code class="docutils literal"><span class="pre">dag_id</span></code> should be prefixed by its parent and
 a dot. As in <code class="docutils literal"><span class="pre">parent.child</span></code></li>
 <li>share arguments between the main DAG and the SubDAG by passing arguments to
 the SubDAG operator (as demonstrated above)</li>
-<li>SubDAGs must have a schedule and be enabled. If the SubDAG&#8217;s schedule is
+<li>SubDAGs must have a schedule and be enabled. If the SubDAG’s schedule is
 set to <code class="docutils literal"><span class="pre">None</span></code> or <code class="docutils literal"><span class="pre">&#64;once</span></code>, the SubDAG will succeed without having done
 anything</li>
 <li>clearing a SubDagOperator also clears the state of the tasks within</li>
@@ -685,8 +689,8 @@ directly upstream tasks have succeeded, Airflow allows for more complex
 dependency settings.</p>
 <p>All operators have a <code class="docutils literal"><span class="pre">trigger_rule</span></code> argument which defines the rule by which
 the generated task get triggered. The default value for <code class="docutils literal"><span class="pre">trigger_rule</span></code> is
-<code class="docutils literal"><span class="pre">all_success</span></code> and can be defined as &#8220;trigger this task when all directly
-upstream tasks have succeeded&#8221;. All other rules described here are based
+<code class="docutils literal"><span class="pre">all_success</span></code> and can be defined as “trigger this task when all directly
+upstream tasks have succeeded”. All other rules described here are based
 on direct parent tasks and are values that can be passed to any operator
 while creating tasks:</p>
 <ul class="simple">
@@ -699,7 +703,7 @@ while creating tasks:</p>
 </ul>
 <p>Note that these can be used in conjunction with <code class="docutils literal"><span class="pre">depends_on_past</span></code> (boolean)
 that, when set to <code class="docutils literal"><span class="pre">True</span></code>, keeps a task from getting triggered if the
-previous schedule for the task hasn&#8217;t succeeded.</p>
+previous schedule for the task hasn’t succeeded.</p>
 </div>
 <div class="section" id="latest-run-only">
 <h3>Latest Run Only<a class="headerlink" href="#latest-run-only" title="Permalink to this headline">¶</a></h3>
@@ -772,16 +776,16 @@ and <code class="docutils literal"><span class="pre">task2</span></code> has suc
 but sometimes unexpectedly.</p>
 <p>Zombie tasks are characterized by the absence
 of an heartbeat (emitted by the job periodically) and a <code class="docutils literal"><span class="pre">running</span></code> status
-in the database. They can occur when a worker node can&#8217;t reach the database,
+in the database. They can occur when a worker node can’t reach the database,
 when Airflow processes are killed externally, or when a node gets rebooted
-for instance. Zombie killing is performed periodically by the scheduler&#8217;s
+for instance. Zombie killing is performed periodically by the scheduler’s
 process.</p>
 <p>Undead processes are characterized by the existence of a process and a matching
-heartbeat, but Airflow isn&#8217;t aware of this task as <code class="docutils literal"><span class="pre">running</span></code> in the database.
+heartbeat, but Airflow isn’t aware of this task as <code class="docutils literal"><span class="pre">running</span></code> in the database.
 This mismatch typically occurs as the state of the database is altered,
-most likely by deleting rows in the &#8220;Task Instances&#8221; view in the UI.
+most likely by deleting rows in the “Task Instances” view in the UI.
 Tasks are instructed to verify their state as part of the heartbeat routine,
-and terminate themselves upon figuring out that they are in this &#8220;undead&#8221;
+and terminate themselves upon figuring out that they are in this “undead”
 state.</p>
 </div>
 <div class="section" id="cluster-policy">
@@ -792,10 +796,10 @@ attributes. It receives a single argument as a reference to task objects,
 and is expected to alter its attributes.</p>
 <p>For example, this function could apply a specific queue property when
 using a specific operator, or enforce a task timeout policy, making sure
-that no tasks run for more than 48 hours. Here&#8217;s an example of what this
+that no tasks run for more than 48 hours. Here’s an example of what this
 may look like inside your <code class="docutils literal"><span class="pre">airflow_settings.py</span></code>:</p>
 <div class="code python highlight-default"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">policy</span><span class="p">(</span><span class="n">task</span><span class="p">):</span>
-    <span class="k">if</span> <span class="n">task</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span> <span class="o">==</span> <span class="s1">&#39;HivePartitionSensor&#39;</span><span class="p">:</span>
+    <span class="k">if</span> <span class="n">task</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;HivePartitionSensor&#39;</span><span class="p">:</span>
         <span class="n">task</span><span class="o">.</span><span class="n">queue</span> <span class="o">=</span> <span class="s2">&quot;sensor_queue&quot;</span>
     <span class="k">if</span> <span class="n">task</span><span class="o">.</span><span class="n">timeout</span> <span class="o">&gt;</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="mi">48</span><span class="p">):</span>
         <span class="n">task</span><span class="o">.</span><span class="n">timeout</span> <span class="o">=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="mi">48</span><span class="p">)</span>
@@ -804,8 +808,8 @@ may look like inside your <code class="docutils literal"><span class="pre">airfl
 </div>
 <div class="section" id="documentation-notes">
 <h3>Documentation &amp; Notes<a class="headerlink" href="#documentation-notes" title="Permalink to this headline">¶</a></h3>
-<p>It&#8217;s possible to add documentation or notes to your dags &amp; task objects that
-become visible in the web interface (&#8220;Graph View&#8221; for dags, &#8220;Task Details&#8221; for
+<p>It’s possible to add documentation or notes to your dags &amp; task objects that
+become visible in the web interface (“Graph View” for dags, “Task Details” for
 tasks). There are a set of special task attributes that get rendered as rich
 content if defined:</p>
 <table border="1" class="docutils">
@@ -845,7 +849,7 @@ to the related tasks in Airflow.</p>
 <span class="sd">&quot;&quot;&quot;</span>
 
 <span class="n">dag</span> <span class="o">=</span> <span class="n">DAG</span><span class="p">(</span><span class="s1">&#39;my_dag&#39;</span><span class="p">,</span> <span class="n">default_args</span><span class="o">=</span><span class="n">default_args</span><span class="p">)</span>
-<span class="n">dag</span><span class="o">.</span><span class="n">doc_md</span> <span class="o">=</span> <span class="n">__doc__</span>
+<span class="n">dag</span><span class="o">.</span><span class="n">doc_md</span> <span class="o">=</span> <span class="vm">__doc__</span>
 
 <span class="n">t</span> <span class="o">=</span> <span class="n">BashOperator</span><span class="p">(</span><span class="s2">&quot;foo&quot;</span><span class="p">,</span> <span class="n">dag</span><span class="o">=</span><span class="n">dag</span><span class="p">)</span>
 <span class="n">t</span><span class="o">.</span><span class="n">doc_md</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;</span><span class="se">\</span>
@@ -854,11 +858,11 @@ to the related tasks in Airflow.</p>
 <span class="s2">&quot;&quot;&quot;</span>
 </pre></div>
 </div>
-<p>This content will get rendered as markdown respectively in the &#8220;Graph View&#8221; and
-&#8220;Task Details&#8221; pages.</p>
+<p>This content will get rendered as markdown respectively in the “Graph View” and
+“Task Details” pages.</p>
 </div>
 <div class="section" id="jinja-templating">
-<h3>Jinja Templating<a class="headerlink" href="#jinja-templating" title="Permalink to this headline">¶</a></h3>
+<span id="id1"></span><h3>Jinja Templating<a class="headerlink" href="#jinja-templating" title="Permalink to this headline">¶</a></h3>
 <p>Airflow leverages the power of
 <a class="reference external" href="http://jinja.pocoo.org/docs/dev/">Jinja Templating</a> and this can be a
 powerful tool to use in combination with macros (see the <a class="reference internal" href="code.html#macros"><span class="std std-ref">Macros</span></a> section).</p>
@@ -876,8 +880,9 @@ to a Bash script using the <code class="docutils literal"><span class="pre">Bash
 <p>Here, <code class="docutils literal"><span class="pre">{{</span> <span class="pre">ds</span> <span class="pre">}}</span></code> is a macro, and because the <code class="docutils literal"><span class="pre">env</span></code> parameter of the
 <code class="docutils literal"><span class="pre">BashOperator</span></code> is templated with Jinja, the execution date will be available
 as an environment variable named <code class="docutils literal"><span class="pre">EXECUTION_DATE</span></code> in your Bash script.</p>
-<p>You can use Jinja templating with every parameter that is marked as &#8220;templated&#8221;
-in the documentation.</p>
+<p>You can use Jinja templating with every parameter that is marked as “templated”
+in the documentation. Template substitution occurs just before the pre_execute
+function of your operator is called.</p>
 </div>
 </div>
 <div class="section" id="packaged-dags">

http://git-wip-us.apache.org/repos/asf/incubator-airflow-site/blob/28a3eb60/configuration.html
----------------------------------------------------------------------
diff --git a/configuration.html b/configuration.html
index ea1d2e9..881716e 100644
--- a/configuration.html
+++ b/configuration.html
@@ -13,6 +13,8 @@
 
   
   
+  
+  
 
   
 
@@ -81,7 +83,10 @@
           
             
             
-                <ul class="current">
+              
+            
+            
+              <ul class="current">
 <li class="toctree-l1"><a class="reference internal" href="project.html">Project</a></li>
 <li class="toctree-l1"><a class="reference internal" href="license.html">License</a></li>
 <li class="toctree-l1"><a class="reference internal" href="start.html">Quick Start</a></li>
@@ -92,6 +97,7 @@
 <li class="toctree-l2"><a class="reference internal" href="#setting-up-a-backend">Setting up a Backend</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#connections">Connections</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#scaling-out-with-celery">Scaling Out with Celery</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#scaling-out-with-dask">Scaling Out with Dask</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#logs">Logs</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#scaling-out-on-mesos-community-contributed">Scaling Out on Mesos (community contributed)</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#integration-with-systemd">Integration with systemd</a></li>
@@ -180,7 +186,7 @@ building a production-grade environment requires a bit more work!</p>
 <div class="section" id="setting-configuration-options">
 <span id="setting-options"></span><h2>Setting Configuration Options<a class="headerlink" href="#setting-configuration-options" title="Permalink to this headline">¶</a></h2>
 <p>The first time you run Airflow, it will create a file called <code class="docutils literal"><span class="pre">airflow.cfg</span></code> in
-your <code class="docutils literal"><span class="pre">$AIRFLOW_HOME</span></code> directory (<code class="docutils literal"><span class="pre">~/airflow</span></code> by default). This file contains Airflow&#8217;s configuration and you
+your <code class="docutils literal"><span class="pre">$AIRFLOW_HOME</span></code> directory (<code class="docutils literal"><span class="pre">~/airflow</span></code> by default). This file contains Airflow’s configuration and you
 can edit it to change any of the settings. You can also set options with environment variables by using this format:
 <code class="docutils literal"><span class="pre">$AIRFLOW__{SECTION}__{KEY}</span></code> (note the double underscores).</p>
 <p>For example, the
@@ -222,10 +228,10 @@ specific schema in the Postgres connection URI, you may
 want to set a default schema for your role with a
 command similar to <code class="docutils literal"><span class="pre">ALTER</span> <span class="pre">ROLE</span> <span class="pre">username</span> <span class="pre">SET</span> <span class="pre">search_path</span> <span class="pre">=</span> <span class="pre">airflow,</span> <span class="pre">foobar;</span></code></p>
 </div>
-<p>Once you&#8217;ve setup your database to host Airflow, you&#8217;ll need to alter the
+<p>Once you’ve setup your database to host Airflow, you’ll need to alter the
 SqlAlchemy connection string located in your configuration file
-<code class="docutils literal"><span class="pre">$AIRFLOW_HOME/airflow.cfg</span></code>. You should then also change the &#8220;executor&#8221;
-setting to use &#8220;LocalExecutor&#8221;, an executor that can parallelize task
+<code class="docutils literal"><span class="pre">$AIRFLOW_HOME/airflow.cfg</span></code>. You should then also change the “executor”
+setting to use “LocalExecutor”, an executor that can parallelize task
 instances locally.</p>
 <div class="highlight-bash"><div class="highlight"><pre><span></span><span class="c1"># initialize the database</span>
 airflow initdb
@@ -237,12 +243,35 @@ airflow initdb
 <p>Airflow needs to know how to connect to your environment. Information
 such as hostname, port, login and passwords to other systems and services is
 handled in the <code class="docutils literal"><span class="pre">Admin-&gt;Connection</span></code> section of the UI. The pipeline code you
-will author will reference the &#8216;conn_id&#8217; of the Connection objects.</p>
+will author will reference the ‘conn_id’ of the Connection objects.</p>
 <img alt="_images/connections.png" src="_images/connections.png" />
 <p>By default, Airflow will save the passwords for the connection in plain text
 within the metadata database. The <code class="docutils literal"><span class="pre">crypto</span></code> package is highly recommended
 during installation. The <code class="docutils literal"><span class="pre">crypto</span></code> package does require that your operating
 system have libffi-dev installed.</p>
+<p>If <code class="docutils literal"><span class="pre">crypto</span></code> package was not installed initially, you can still enable encryption for
+connections by following steps below:</p>
+<ol class="arabic simple">
+<li>Install crypto package <code class="docutils literal"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">apache-airflow[crypto]</span></code></li>
+<li>Generate fernet_key, using this code snippet below. fernet_key must be a base64-encoded 32-byte key.</li>
+</ol>
+<div class="code python highlight-default"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">cryptography.fernet</span> <span class="k">import</span> <span class="n">Fernet</span>
+<span class="n">fernet_key</span><span class="o">=</span> <span class="n">Fernet</span><span class="o">.</span><span class="n">generate_key</span><span class="p">()</span>
+<span class="nb">print</span><span class="p">(</span><span class="n">fernet_key</span><span class="p">)</span> <span class="c1"># your fernet_key, keep it in secured place!</span>
+</pre></div>
+</div>
+<p>3. Replace <code class="docutils literal"><span class="pre">airflow.cfg</span></code> fernet_key value with the one from step 2.
+Alternatively, you can store your fernet_key in OS environment variable. You
+do not need to change <code class="docutils literal"><span class="pre">airflow.cfg</span></code> in this case as AirFlow will use environment
+variable over the value in <code class="docutils literal"><span class="pre">airflow.cfg</span></code>:</p>
+<div class="highlight-bash"><div class="highlight"><pre><span></span><span class="c1"># Note the double underscores</span>
+EXPORT <span class="nv">AIRFLOW__CORE__FERNET_KEY</span> <span class="o">=</span> your_fernet_key
+</pre></div>
+</div>
+<ol class="arabic simple" start="4">
+<li>Restart AirFlow webserver.</li>
+<li>For existing connections (the ones that you had defined before installing <code class="docutils literal"><span class="pre">airflow[crypto]</span></code> and creating a Fernet key), you need to open each connection in the connection admin UI, re-type the password, and save it.</li>
+</ol>
 <p>Connections in Airflow pipelines can be created using environment variables.
 The environment variable needs to have a prefix of <code class="docutils literal"><span class="pre">AIRFLOW_CONN_</span></code> for
 Airflow with the value in a URI format to use the connection properly. Please
@@ -252,7 +281,7 @@ variables and connections.</p>
 <div class="section" id="scaling-out-with-celery">
 <h2>Scaling Out with Celery<a class="headerlink" href="#scaling-out-with-celery" title="Permalink to this headline">¶</a></h2>
 <p><code class="docutils literal"><span class="pre">CeleryExecutor</span></code> is one of the ways you can scale out the number of workers. For this
-to work, you need to setup a Celery backend (<strong>RabbitMQ</strong>, <strong>Redis</strong>, ...) and
+to work, you need to setup a Celery backend (<strong>RabbitMQ</strong>, <strong>Redis</strong>, …) and
 change your <code class="docutils literal"><span class="pre">airflow.cfg</span></code> to point the executor parameter to
 <code class="docutils literal"><span class="pre">CeleryExecutor</span></code> and provide the related Celery settings.</p>
 <p>For more information about setting up a Celery broker, refer to the
@@ -280,10 +309,37 @@ subcommand</p>
 </div>
 <p>Your worker should start picking up tasks as soon as they get fired in
 its direction.</p>
-<p>Note that you can also run &#8220;Celery Flower&#8221;, a web UI built on top of Celery,
+<p>Note that you can also run “Celery Flower”, a web UI built on top of Celery,
 to monitor your workers. You can use the shortcut command <code class="docutils literal"><span class="pre">airflow</span> <span class="pre">flower</span></code>
 to start a Flower web server.</p>
 </div>
+<div class="section" id="scaling-out-with-dask">
+<h2>Scaling Out with Dask<a class="headerlink" href="#scaling-out-with-dask" title="Permalink to this headline">¶</a></h2>
+<p><code class="docutils literal"><span class="pre">DaskExecutor</span></code> allows you to run Airflow tasks in a Dask Distributed cluster.</p>
+<p>Dask clusters can be run on a single machine or on remote networks. For complete
+details, consult the <a class="reference external" href="https://distributed.readthedocs.io/">Distributed documentation</a>.</p>
+<p>To create a cluster, first start a Scheduler:</p>
+<div class="highlight-bash"><div class="highlight"><pre><span></span><span class="c1"># default settings for a local cluster</span>
+<span class="nv">DASK_HOST</span><span class="o">=</span><span class="m">127</span>.0.0.1
+<span class="nv">DASK_PORT</span><span class="o">=</span><span class="m">8786</span>
+
+dask-scheduler --host <span class="nv">$DASK_HOST</span> --port <span class="nv">$DASK_PORT</span>
+</pre></div>
+</div>
+<p>Next start at least one Worker on any machine that can connect to the host:</p>
+<div class="highlight-bash"><div class="highlight"><pre><span></span>dask-worker <span class="nv">$DASK_HOST</span>:<span class="nv">$DASK_PORT</span>
+</pre></div>
+</div>
+<p>Edit your <code class="docutils literal"><span class="pre">airflow.cfg</span></code> to set your executor to <code class="docutils literal"><span class="pre">DaskExecutor</span></code> and provide
+the Dask Scheduler address in the <code class="docutils literal"><span class="pre">[dask]</span></code> section.</p>
+<p>Please note:</p>
+<ul class="simple">
+<li>Each Dask worker must be able to import Airflow and any dependencies you
+require.</li>
+<li>Dask does not support queues. If an Airflow task was created with a queue, a
+warning will be raised but the task will be submitted to the cluster.</li>
+</ul>
+</div>
 <div class="section" id="logs">
 <h2>Logs<a class="headerlink" href="#logs" title="Permalink to this headline">¶</a></h2>
 <p>Users can specify a logs folder in <code class="docutils literal"><span class="pre">airflow.cfg</span></code>. By default, it is in
@@ -302,13 +358,14 @@ To enable this feature, <code class="docutils literal"><span class="pre">airflow
 <span class="nv">encrypt_s3_logs</span> <span class="o">=</span> False
 </pre></div>
 </div>
-<p>Remote logging uses an existing Airflow connection to read/write logs. If you don&#8217;t
+<p>Remote logging uses an existing Airflow connection to read/write logs. If you don’t
 have a connection properly setup, this will fail. In the above example, Airflow will
 try to use <code class="docutils literal"><span class="pre">S3Hook('MyS3Conn')</span></code>.</p>
 <p>In the Airflow Web UI, local logs take precedance over remote logs. If local logs
 can not be found or accessed, the remote logs will be displayed. Note that logs
 are only sent to remote storage once a task completes (including failure). In other
-words, remote logs for running tasks are unavailable.</p>
+words, remote logs for running tasks are unavailable. Logs are stored in the log
+folder as <code class="docutils literal"><span class="pre">{dag_id}/{task_id}/{execution_date}/{try_number}.log</span></code>.</p>
 </div>
 <div class="section" id="scaling-out-on-mesos-community-contributed">
 <h2>Scaling Out on Mesos (community contributed)<a class="headerlink" href="#scaling-out-on-mesos-community-contributed" title="Permalink to this headline">¶</a></h2>
@@ -317,7 +374,7 @@ For this to work, you need a running mesos cluster and you must perform the foll
 steps -</p>
 <ol class="arabic simple">
 <li>Install airflow on a machine where web server and scheduler will run,
-let&#8217;s refer to this as the &#8220;Airflow server&#8221;.</li>
+let’s refer to this as the “Airflow server”.</li>
 <li>On the Airflow server, install mesos python eggs from <a class="reference external" href="http://open.mesosphere.com/downloads/mesos/">mesos downloads</a>.</li>
 <li>On the Airflow server, use a database (such as mysql) which can be accessed from mesos
 slave machines and add configuration in <code class="docutils literal"><span class="pre">airflow.cfg</span></code>.</li>
@@ -374,7 +431,7 @@ integrated with upstart</p>
 </div>
 <div class="section" id="test-mode">
 <h2>Test Mode<a class="headerlink" href="#test-mode" title="Permalink to this headline">¶</a></h2>
-<p>Airflow has a fixed set of &#8220;test mode&#8221; configuration options. You can load these
+<p>Airflow has a fixed set of “test mode” configuration options. You can load these
 at any time by calling <code class="docutils literal"><span class="pre">airflow.configuration.load_test_config()</span></code> (note this
 operation is not reversible!). However, some options (like the DAG_FOLDER) are
 loaded before you have a chance to call load_test_config(). In order to eagerly load
@@ -383,7 +440,7 @@ the test configuration, set test_mode in airflow.cfg:</p>
 <span class="nv">unit_test_mode</span> <span class="o">=</span> True
 </pre></div>
 </div>
-<p>Due to Airflow&#8217;s automatic environment variable expansion (see <a class="reference internal" href="#setting-options"><span class="std std-ref">Setting Configuration Options</span></a>),
+<p>Due to Airflow’s automatic environment variable expansion (see <a class="reference internal" href="#setting-options"><span class="std std-ref">Setting Configuration Options</span></a>),
 you can also set the env var <code class="docutils literal"><span class="pre">AIRFLOW__CORE__UNIT_TEST_MODE</span></code> to temporarily overwrite
 airflow.cfg.</p>
 </div>

http://git-wip-us.apache.org/repos/asf/incubator-airflow-site/blob/28a3eb60/faq.html
----------------------------------------------------------------------
diff --git a/faq.html b/faq.html
index 7b6c8ab..f223045 100644
--- a/faq.html
+++ b/faq.html
@@ -13,6 +13,8 @@
 
   
   
+  
+  
 
   
 
@@ -81,7 +83,10 @@
           
             
             
-                <ul class="current">
+              
+            
+            
+              <ul class="current">
 <li class="toctree-l1"><a class="reference internal" href="project.html">Project</a></li>
 <li class="toctree-l1"><a class="reference internal" href="license.html">License</a></li>
 <li class="toctree-l1"><a class="reference internal" href="start.html">Quick Start</a></li>
@@ -98,10 +103,10 @@
 <li class="toctree-l1"><a class="reference internal" href="api.html">Experimental Rest API</a></li>
 <li class="toctree-l1"><a class="reference internal" href="integration.html">Integration</a></li>
 <li class="toctree-l1 current"><a class="current reference internal" href="#">FAQ</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="#why-isn-t-my-task-getting-scheduled">Why isn&#8217;t my task getting scheduled?</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#how-do-i-trigger-tasks-based-on-another-task-s-failure">How do I trigger tasks based on another task&#8217;s failure?</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#why-isn-t-my-task-getting-scheduled">Why isn’t my task getting scheduled?</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#how-do-i-trigger-tasks-based-on-another-task-s-failure">How do I trigger tasks based on another task’s failure?</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#why-are-connection-passwords-still-not-encrypted-in-the-metadata-db-after-i-installed-airflow-crypto">Why are connection passwords still not encrypted in the metadata db after I installed airflow[crypto]?</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#what-s-the-deal-with-start-date">What&#8217;s the deal with <code class="docutils literal"><span class="pre">start_date</span></code>?</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#what-s-the-deal-with-start-date">What’s the deal with <code class="docutils literal"><span class="pre">start_date</span></code>?</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#how-can-i-create-dags-dynamically">How can I create DAGs dynamically?</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#what-are-all-the-airflow-run-commands-in-my-process-list">What are all the <code class="docutils literal"><span class="pre">airflow</span> <span class="pre">run</span></code> commands in my process list?</a></li>
 </ul>
@@ -173,11 +178,11 @@
   <div class="section" id="faq">
 <h1>FAQ<a class="headerlink" href="#faq" title="Permalink to this headline">¶</a></h1>
 <div class="section" id="why-isn-t-my-task-getting-scheduled">
-<h2>Why isn&#8217;t my task getting scheduled?<a class="headerlink" href="#why-isn-t-my-task-getting-scheduled" title="Permalink to this headline">¶</a></h2>
+<h2>Why isn’t my task getting scheduled?<a class="headerlink" href="#why-isn-t-my-task-getting-scheduled" title="Permalink to this headline">¶</a></h2>
 <p>There are very many reasons why your task might not be getting scheduled.
 Here are some of the common causes:</p>
 <ul class="simple">
-<li>Does your script &#8220;compile&#8221;, can the Airflow engine parse it and find your
+<li>Does your script “compile”, can the Airflow engine parse it and find your
 DAG object. To test this, you can run <code class="docutils literal"><span class="pre">airflow</span> <span class="pre">list_dags</span></code> and
 confirm that your DAG shows up in the list. You can also run
 <code class="docutils literal"><span class="pre">airflow</span> <span class="pre">list_tasks</span> <span class="pre">foo_dag_id</span> <span class="pre">--tree</span></code> and confirm that your task
@@ -189,9 +194,9 @@ task soon after the <code class="docutils literal"><span class="pre">start_date<
 <li>Is your <code class="docutils literal"><span class="pre">schedule_interval</span></code> set properly? The default <code class="docutils literal"><span class="pre">schedule_interval</span></code>
 is one day (<code class="docutils literal"><span class="pre">datetime.timedelta(1)</span></code>). You must specify a different <code class="docutils literal"><span class="pre">schedule_interval</span></code>
 directly to the DAG object you instantiate, not as a <code class="docutils literal"><span class="pre">default_param</span></code>, as task instances
-do not override their parent DAG&#8217;s <code class="docutils literal"><span class="pre">schedule_interval</span></code>.</li>
+do not override their parent DAG’s <code class="docutils literal"><span class="pre">schedule_interval</span></code>.</li>
 <li>Is your <code class="docutils literal"><span class="pre">start_date</span></code> beyond where you can see it in the UI? If you
-set your it to some time say 3 months ago, you won&#8217;t be able to see
+set your <code class="docutils literal"><span class="pre">start_date</span></code> to some time say 3 months ago, you won’t be able to see
 it in the main view in the UI, but you should be able to see it in the
 <code class="docutils literal"><span class="pre">Menu</span> <span class="pre">-&gt;</span> <span class="pre">Browse</span> <span class="pre">-&gt;Task</span> <span class="pre">Instances</span></code>.</li>
 <li>Are the dependencies for the task met. The task instances directly
@@ -203,7 +208,7 @@ what it means.
 You can view how these properties are set from the <code class="docutils literal"><span class="pre">Task</span> <span class="pre">Instance</span> <span class="pre">Details</span></code>
 page for your task.</li>
 <li>Are the DagRuns you need created and active? A DagRun represents a specific
-execution of an entire DAG and has a state (running, success, failed, ...).
+execution of an entire DAG and has a state (running, success, failed, …).
 The scheduler creates new DagRun as it moves forward, but never goes back
 in time to create new ones. The scheduler only evaluates <code class="docutils literal"><span class="pre">running</span></code> DagRuns
 to see what task instances it can trigger. Note that clearing tasks
@@ -220,19 +225,17 @@ how many <code class="docutils literal"><span class="pre">running</span></code>
 sure you fully understand how it proceeds.</p>
 </div>
 <div class="section" id="how-do-i-trigger-tasks-based-on-another-task-s-failure">
-<h2>How do I trigger tasks based on another task&#8217;s failure?<a class="headerlink" href="#how-do-i-trigger-tasks-based-on-another-task-s-failure" title="Permalink to this headline">¶</a></h2>
+<h2>How do I trigger tasks based on another task’s failure?<a class="headerlink" href="#how-do-i-trigger-tasks-based-on-another-task-s-failure" title="Permalink to this headline">¶</a></h2>
 <p>Check out the <code class="docutils literal"><span class="pre">Trigger</span> <span class="pre">Rule</span></code> section in the Concepts section of the
 documentation</p>
 </div>
 <div class="section" id="why-are-connection-passwords-still-not-encrypted-in-the-metadata-db-after-i-installed-airflow-crypto">
 <h2>Why are connection passwords still not encrypted in the metadata db after I installed airflow[crypto]?<a class="headerlink" href="#why-are-connection-passwords-still-not-encrypted-in-the-metadata-db-after-i-installed-airflow-crypto" title="Permalink to this headline">¶</a></h2>
-<ul class="simple">
-<li>Verify that the <code class="docutils literal"><span class="pre">fernet_key</span></code> defined in <code class="docutils literal"><span class="pre">$AIRFLOW_HOME/airflow.cfg</span></code> is a valid Fernet key. It must be a base64-encoded 32-byte key. You need to restart the webserver after you update the key</li>
-<li>For existing connections (the ones that you had defined before installing <code class="docutils literal"><span class="pre">airflow[crypto]</span></code> and creating a Fernet key), you need to open each connection in the connection admin UI, re-type the password, and save it</li>
-</ul>
+<p>Check out the <code class="docutils literal"><span class="pre">Connections</span></code> section in the Configuration section of the
+documentation</p>
 </div>
 <div class="section" id="what-s-the-deal-with-start-date">
-<h2>What&#8217;s the deal with <code class="docutils literal"><span class="pre">start_date</span></code>?<a class="headerlink" href="#what-s-the-deal-with-start-date" title="Permalink to this headline">¶</a></h2>
+<h2>What’s the deal with <code class="docutils literal"><span class="pre">start_date</span></code>?<a class="headerlink" href="#what-s-the-deal-with-start-date" title="Permalink to this headline">¶</a></h2>
 <p><code class="docutils literal"><span class="pre">start_date</span></code> is partly legacy from the pre-DagRun era, but it is still
 relevant in many ways. When creating a new DAG, you probably want to set
 a global <code class="docutils literal"><span class="pre">start_date</span></code> for your tasks using <code class="docutils literal"><span class="pre">default_args</span></code>. The first
@@ -241,7 +244,7 @@ task. From that point on, the scheduler creates new DagRuns based on
 your <code class="docutils literal"><span class="pre">schedule_interval</span></code> and the corresponding task instances run as your
 dependencies are met. When introducing new tasks to your DAG, you need to
 pay special attention to <code class="docutils literal"><span class="pre">start_date</span></code>, and may want to reactivate
-inactive DagRuns to get the new task to get onboarded properly.</p>
+inactive DagRuns to get the new task onboarded properly.</p>
 <p>We recommend against using dynamic values as <code class="docutils literal"><span class="pre">start_date</span></code>, especially
 <code class="docutils literal"><span class="pre">datetime.now()</span></code> as it can be quite confusing. The task is triggered
 once the period closes, and in theory an <code class="docutils literal"><span class="pre">&#64;hourly</span></code> DAG would never get to
@@ -257,16 +260,16 @@ the execution of tasks within the schedule interval.
 While <code class="docutils literal"><span class="pre">schedule_interval</span></code> does allow specifying a <code class="docutils literal"><span class="pre">datetime.timedelta</span></code>
 object, we recommend using the macros or cron expressions instead, as
 it enforces this idea of rounded schedules.</p>
-<p>When using <code class="docutils literal"><span class="pre">depends_on_past=True</span></code> it&#8217;s important to pay special attention
+<p>When using <code class="docutils literal"><span class="pre">depends_on_past=True</span></code> it’s important to pay special attention
 to <code class="docutils literal"><span class="pre">start_date</span></code> as the past dependency is not enforced only on the specific
-schedule of the <code class="docutils literal"><span class="pre">start_date</span></code> specified for the task. It&#8217; also
+schedule of the <code class="docutils literal"><span class="pre">start_date</span></code> specified for the task. It’s also
 important to watch DagRun activity status in time when introducing
 new <code class="docutils literal"><span class="pre">depends_on_past=True</span></code>, unless you are planning on running a backfill
 for the new task(s).</p>
 <p>Also important to note is that the tasks <code class="docutils literal"><span class="pre">start_date</span></code>, in the context of a
-backfill CLI command, get overridden by the backfill&#8217;s command <code class="docutils literal"><span class="pre">start_date</span></code>.
+backfill CLI command, get overridden by the backfill’s command <code class="docutils literal"><span class="pre">start_date</span></code>.
 This allows for a backfill on tasks that have <code class="docutils literal"><span class="pre">depends_on_past=True</span></code> to
-actually start, if it wasn&#8217;t the case, the backfill just wouldn&#8217;t start.</p>
+actually start, if that wasn’t the case, the backfill just wouldn’t start.</p>
 </div>
 <div class="section" id="how-can-i-create-dags-dynamically">
 <h2>How can I create DAGs dynamically?<a class="headerlink" href="#how-can-i-create-dags-dynamically" title="Permalink to this headline">¶</a></h2>
@@ -295,7 +298,7 @@ LocalExecutor, that translates into running it in a subprocess pool.</li>
 command (described below) as a subprocess and is in charge of
 emitting heartbeats, listening for external kill signals
 and ensures some cleanup takes place if the subprocess fails</li>
-<li>Raw <code class="docutils literal"><span class="pre">airflow</span> <span class="pre">run</span> <span class="pre">--raw</span></code> runs the actual operator&#8217;s execute method and
+<li>Raw <code class="docutils literal"><span class="pre">airflow</span> <span class="pre">run</span> <span class="pre">--raw</span></code> runs the actual operator’s execute method and
 performs the actual work</li>
 </ul>
 </div>


Mime
View raw message