Skip to content

Commit 4dd1276

Browse files
author
Exploding Labs Bot
committed
Update site from Jekyll source repo
1 parent 5d7750c commit 4dd1276

File tree

176 files changed

+14884
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

176 files changed

+14884
-0
lines changed

blog/2018/06/30/vibora.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<p>Removed since Vibora is not in a working state.</p>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<p>Removed.</p>

blog/ads.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
google.com, pub-2763887710139976, DIRECT, f08c47fec0942fa0

blog/airflow/execute-context.html

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
5+
6+
<meta charset="utf-8">
7+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
8+
<meta name="viewport" content="width=device-width, initial-scale=1">
9+
10+
<meta property="og:title" content="What's in Airflow's context dictionary?" />
11+
<meta property="og:type" content="website" />
12+
<meta property="og:url" content="https://explodinglabs.github.io/" />
13+
<meta property="og:image" content="https://explodinglabs.github.io/assets/opengraph.png" />
14+
<meta property="og:image:secure_url" content="https://explodinglabs.github.io/assets/opengraph.png" />
15+
<meta property="og:image:type" content="image/png" />
16+
<meta property="og:image:width" content="1200" />
17+
<meta property="og:image:height" content="630" />
18+
<meta property="og:image:alt" content="Composition in architecture" />
19+
20+
<link rel="stylesheet" href="/blog/main.css">
21+
<link rel="alternate" type="application/rss+xml" title="Exploding Labs Blog" href="https://explodinglabs.com/blog/feed.xml">
22+
<link rel="author" href="https://plus.google.com/u/0/110235318020270619650?rel=author" />
23+
24+
<link rel="icon" type="image/png" href="/assets/favicon-16x16.png?v=2" sizes="16x16">
25+
<link rel="icon" type="image/png" href="/assets/favicon-32x32.png?v=2" sizes="32x32">
26+
<link rel="icon" type="image/png" href="/assets/favicon-96x96.png?v=2" sizes="96x96">
27+
28+
<link rel="apple-touch-icon" sizes="120x120" href="/assets/apple-touch-icon-120x120.png?v=2">
29+
<link rel="apple-touch-icon" sizes="152x152" href="/assets/apple-touch-icon-152x152.png?v=2">
30+
<link rel="apple-touch-icon" sizes="167x167" href="/assets/apple-touch-icon-167x167.png?v=2">
31+
<link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon-180x180.png?v=2">
32+
33+
34+
35+
<!-- Begin Jekyll SEO tag v2.7.1 -->
36+
<title>What’s in Airflow’s context dictionary? | Exploding Labs Blog</title>
37+
<meta name="generator" content="Jekyll v4.2.0" />
38+
<meta property="og:title" content="What’s in Airflow’s context dictionary?" />
39+
<meta name="author" content="Beau Barker" />
40+
<meta property="og:locale" content="en_AU" />
41+
<meta name="description" content="Showing the contents of the “context” object, which is available in an Operator’s execute method, or a PythonOperator’s function definition." />
42+
<meta property="og:description" content="Showing the contents of the “context” object, which is available in an Operator’s execute method, or a PythonOperator’s function definition." />
43+
<link rel="canonical" href="https://explodinglabs.com/blog/airflow/execute-context" />
44+
<meta property="og:url" content="https://explodinglabs.com/blog/airflow/execute-context" />
45+
<meta property="og:site_name" content="Exploding Labs Blog" />
46+
<meta property="og:image" content="https://explodinglabs.com/blog/assets/airflow-wide.png" />
47+
<meta property="og:type" content="article" />
48+
<meta property="article:published_time" content="2017-12-13T00:00:00+00:00" />
49+
<meta name="twitter:card" content="summary_large_image" />
50+
<meta property="twitter:image" content="https://explodinglabs.com/blog/assets/airflow-wide.png" />
51+
<meta property="twitter:title" content="What’s in Airflow’s context dictionary?" />
52+
<script type="application/ld+json">
53+
{"description":"Showing the contents of the “context” object, which is available in an Operator’s execute method, or a PythonOperator’s function definition.","mainEntityOfPage":{"@type":"WebPage","@id":"https://explodinglabs.com/blog/airflow/execute-context"},"image":"https://explodinglabs.com/blog/assets/airflow-wide.png","headline":"What’s in Airflow’s context dictionary?","dateModified":"2025-07-15T22:47:43+00:00","datePublished":"2017-12-13T00:00:00+00:00","url":"https://explodinglabs.com/blog/airflow/execute-context","author":{"@type":"Person","name":"Beau Barker"},"@type":"BlogPosting","@context":"https://schema.org"}</script>
54+
<!-- End Jekyll SEO tag -->
55+
56+
</head>
57+
<body>
58+
59+
60+
61+
62+
<nav>
63+
<div id="logo">
64+
<a href="/">Exploding Labs Blog<!--img src="/assets/composed.png" /--></a>
65+
</div>
66+
<div id="categories">
67+
<!--a href="/">All</a> <span>(73)</span-->
68+
<a href="/haskell/">Haskell</a> <span>(2)</span>
69+
<a href="/jsonrpc/">JSON-RPC</a> <span>(16)</span>
70+
<a href="/python/">Python</a> <span>(19)</span>
71+
<a href="/airflow/">Airflow</a> <span>(6)</span>
72+
</div>
73+
</nav>
74+
75+
<main>
76+
77+
<article itemscope itemtype="http://schema.org/BlogPosting">
78+
<header>
79+
<h1>What's in Airflow's context dictionary?</h1>
80+
<div class="post-meta">
81+
<time datetime="2017-12-13T00:00:00+00:00" itemprop="datePublished">
82+
Beau Barker, <time>Dec 13, 2017</time>.
83+
84+
Updated <time>Jul 15, 2025</time>.
85+
86+
<a href="https://github.com/explodinglabs/explodinglabs.github.io/edit/main/docs/_posts/airflow/2017-12-13-airflows-execute-context.markdown">
87+
&#9998;
88+
</a>
89+
</time>
90+
</div>
91+
</header>
92+
<div class="wide-logos">
93+
<p><img src="/assets/airflow.png" alt="airflow" /></p>
94+
</div>
95+
96+
<p>Airflow’s context dictionary can be found in the <code class="language-plaintext highlighter-rouge">get_template_context</code> method,
97+
in Airflow’s
98+
<a href="https://github.com/databricks/incubator-airflow/blob/master/airflow/models.py">models.py</a>.</p>
99+
100+
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span>
101+
<span class="s">'dag'</span><span class="p">:</span> <span class="n">task</span><span class="p">.</span><span class="n">dag</span><span class="p">,</span>
102+
<span class="s">'ds'</span><span class="p">:</span> <span class="n">ds</span><span class="p">,</span>
103+
<span class="s">'ds_nodash'</span><span class="p">:</span> <span class="n">ds_nodash</span><span class="p">,</span>
104+
<span class="s">'ts'</span><span class="p">:</span> <span class="n">ts</span><span class="p">,</span>
105+
<span class="s">'ts_nodash'</span><span class="p">:</span> <span class="n">ts_nodash</span><span class="p">,</span>
106+
<span class="s">'yesterday_ds'</span><span class="p">:</span> <span class="n">yesterday_ds</span><span class="p">,</span>
107+
<span class="s">'yesterday_ds_nodash'</span><span class="p">:</span> <span class="n">yesterday_ds_nodash</span><span class="p">,</span>
108+
<span class="s">'tomorrow_ds'</span><span class="p">:</span> <span class="n">tomorrow_ds</span><span class="p">,</span>
109+
<span class="s">'tomorrow_ds_nodash'</span><span class="p">:</span> <span class="n">tomorrow_ds_nodash</span><span class="p">,</span>
110+
<span class="s">'END_DATE'</span><span class="p">:</span> <span class="n">ds</span><span class="p">,</span>
111+
<span class="s">'end_date'</span><span class="p">:</span> <span class="n">ds</span><span class="p">,</span>
112+
<span class="s">'dag_run'</span><span class="p">:</span> <span class="n">dag_run</span><span class="p">,</span>
113+
<span class="s">'run_id'</span><span class="p">:</span> <span class="n">run_id</span><span class="p">,</span>
114+
<span class="s">'execution_date'</span><span class="p">:</span> <span class="bp">self</span><span class="p">.</span><span class="n">execution_date</span><span class="p">,</span>
115+
<span class="s">'prev_execution_date'</span><span class="p">:</span> <span class="n">prev_execution_date</span><span class="p">,</span>
116+
<span class="s">'next_execution_date'</span><span class="p">:</span> <span class="n">next_execution_date</span><span class="p">,</span>
117+
<span class="s">'latest_date'</span><span class="p">:</span> <span class="n">ds</span><span class="p">,</span>
118+
<span class="s">'macros'</span><span class="p">:</span> <span class="n">macros</span><span class="p">,</span>
119+
<span class="s">'params'</span><span class="p">:</span> <span class="n">params</span><span class="p">,</span>
120+
<span class="s">'tables'</span><span class="p">:</span> <span class="n">tables</span><span class="p">,</span>
121+
<span class="s">'task'</span><span class="p">:</span> <span class="n">task</span><span class="p">,</span>
122+
<span class="s">'task_instance'</span><span class="p">:</span> <span class="bp">self</span><span class="p">,</span>
123+
<span class="s">'ti'</span><span class="p">:</span> <span class="bp">self</span><span class="p">,</span>
124+
<span class="s">'task_instance_key_str'</span><span class="p">:</span> <span class="n">ti_key_str</span><span class="p">,</span>
125+
<span class="s">'conf'</span><span class="p">:</span> <span class="n">configuration</span><span class="p">,</span>
126+
<span class="s">'test_mode'</span><span class="p">:</span> <span class="bp">self</span><span class="p">.</span><span class="n">test_mode</span><span class="p">,</span>
127+
<span class="s">'var'</span><span class="p">:</span> <span class="p">{</span>
128+
<span class="s">'value'</span><span class="p">:</span> <span class="n">VariableAccessor</span><span class="p">(),</span>
129+
<span class="s">'json'</span><span class="p">:</span> <span class="n">VariableJsonAccessor</span><span class="p">()</span>
130+
<span class="p">}</span>
131+
<span class="p">}</span>
132+
</code></pre></div></div>
133+
134+
<p>An explanation of each item is found in the documentation under
135+
<a href="https://airflow.apache.org/docs/stable/macros-ref.html">Macros</a>.</p>
136+
137+
<p>Incidentally, you can generate the context from a TaskInstance.</p>
138+
139+
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">context</span> <span class="o">=</span> <span class="n">TaskInstance</span><span class="p">(</span>
140+
<span class="n">task</span><span class="o">=</span><span class="n">task</span><span class="p">,</span>
141+
<span class="n">execution_date</span><span class="o">=</span><span class="n">datetime</span><span class="p">.</span><span class="n">now</span><span class="p">()</span>
142+
<span class="p">).</span><span class="n">get_template_context</span><span class="p">()</span>
143+
</code></pre></div></div>
144+
145+
<footer>
146+
<a href="/airflow">More Airflow posts</a>
147+
</footer>
148+
</article>
149+
150+
151+
152+
</main>
153+
154+
</body>
155+
</html>

blog/airflow/fernet-key.html

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
5+
6+
<meta charset="utf-8">
7+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
8+
<meta name="viewport" content="width=device-width, initial-scale=1">
9+
10+
<meta property="og:title" content="How to generate a Fernet key?" />
11+
<meta property="og:type" content="website" />
12+
<meta property="og:url" content="https://explodinglabs.github.io/" />
13+
<meta property="og:image" content="https://explodinglabs.github.io/assets/opengraph.png" />
14+
<meta property="og:image:secure_url" content="https://explodinglabs.github.io/assets/opengraph.png" />
15+
<meta property="og:image:type" content="image/png" />
16+
<meta property="og:image:width" content="1200" />
17+
<meta property="og:image:height" content="630" />
18+
<meta property="og:image:alt" content="Composition in architecture" />
19+
20+
<link rel="stylesheet" href="/blog/main.css">
21+
<link rel="alternate" type="application/rss+xml" title="Exploding Labs Blog" href="https://explodinglabs.com/blog/feed.xml">
22+
<link rel="author" href="https://plus.google.com/u/0/110235318020270619650?rel=author" />
23+
24+
<link rel="icon" type="image/png" href="/assets/favicon-16x16.png?v=2" sizes="16x16">
25+
<link rel="icon" type="image/png" href="/assets/favicon-32x32.png?v=2" sizes="32x32">
26+
<link rel="icon" type="image/png" href="/assets/favicon-96x96.png?v=2" sizes="96x96">
27+
28+
<link rel="apple-touch-icon" sizes="120x120" href="/assets/apple-touch-icon-120x120.png?v=2">
29+
<link rel="apple-touch-icon" sizes="152x152" href="/assets/apple-touch-icon-152x152.png?v=2">
30+
<link rel="apple-touch-icon" sizes="167x167" href="/assets/apple-touch-icon-167x167.png?v=2">
31+
<link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon-180x180.png?v=2">
32+
33+
34+
35+
<!-- Begin Jekyll SEO tag v2.7.1 -->
36+
<title>How to generate a Fernet key? | Exploding Labs Blog</title>
37+
<meta name="generator" content="Jekyll v4.2.0" />
38+
<meta property="og:title" content="How to generate a Fernet key?" />
39+
<meta name="author" content="Beau Barker" />
40+
<meta property="og:locale" content="en_AU" />
41+
<meta name="description" content="How to create a fernet key which is required for storing encrypted passwords." />
42+
<meta property="og:description" content="How to create a fernet key which is required for storing encrypted passwords." />
43+
<link rel="canonical" href="https://explodinglabs.com/blog/airflow/fernet-key" />
44+
<meta property="og:url" content="https://explodinglabs.com/blog/airflow/fernet-key" />
45+
<meta property="og:site_name" content="Exploding Labs Blog" />
46+
<meta property="og:image" content="https://explodinglabs.com/blog/assets/airflow-wide.png" />
47+
<meta property="og:type" content="article" />
48+
<meta property="article:published_time" content="2018-01-12T00:00:00+00:00" />
49+
<meta name="twitter:card" content="summary_large_image" />
50+
<meta property="twitter:image" content="https://explodinglabs.com/blog/assets/airflow-wide.png" />
51+
<meta property="twitter:title" content="How to generate a Fernet key?" />
52+
<script type="application/ld+json">
53+
{"description":"How to create a fernet key which is required for storing encrypted passwords.","mainEntityOfPage":{"@type":"WebPage","@id":"https://explodinglabs.com/blog/airflow/fernet-key"},"image":"https://explodinglabs.com/blog/assets/airflow-wide.png","headline":"How to generate a Fernet key?","dateModified":"2025-07-15T22:47:43+00:00","datePublished":"2018-01-12T00:00:00+00:00","url":"https://explodinglabs.com/blog/airflow/fernet-key","author":{"@type":"Person","name":"Beau Barker"},"@type":"BlogPosting","@context":"https://schema.org"}</script>
54+
<!-- End Jekyll SEO tag -->
55+
56+
</head>
57+
<body>
58+
59+
60+
61+
62+
<nav>
63+
<div id="logo">
64+
<a href="/">Exploding Labs Blog<!--img src="/assets/composed.png" /--></a>
65+
</div>
66+
<div id="categories">
67+
<!--a href="/">All</a> <span>(73)</span-->
68+
<a href="/haskell/">Haskell</a> <span>(2)</span>
69+
<a href="/jsonrpc/">JSON-RPC</a> <span>(16)</span>
70+
<a href="/python/">Python</a> <span>(19)</span>
71+
<a href="/airflow/">Airflow</a> <span>(6)</span>
72+
</div>
73+
</nav>
74+
75+
<main>
76+
77+
<article itemscope itemtype="http://schema.org/BlogPosting">
78+
<header>
79+
<h1>How to generate a Fernet key?</h1>
80+
<div class="post-meta">
81+
<time datetime="2018-01-12T00:00:00+00:00" itemprop="datePublished">
82+
Beau Barker, <time>Jan 12, 2018</time>.
83+
84+
Updated <time>Jul 15, 2025</time>.
85+
86+
<a href="https://github.com/explodinglabs/explodinglabs.github.io/edit/main/docs/_posts/airflow/2018-01-12-generate-fernet-key.markdown">
87+
&#9998;
88+
</a>
89+
</time>
90+
</div>
91+
</header>
92+
<div class="wide-logos">
93+
<p><img src="/assets/airflow.png" alt="airflow" /></p>
94+
</div>
95+
96+
<p>Install cryptography:</p>
97+
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>pip <span class="nb">install </span>cryptography
98+
</code></pre></div></div>
99+
100+
<p>Generate a fernet key:</p>
101+
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>python <span class="nt">-c</span> <span class="s2">"from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"</span>
102+
<span class="nv">81HqDtbqAywKSOumSha3BhWNOdQ26slT6K0YaZeZyPs</span><span class="o">=</span>
103+
</code></pre></div></div>
104+
105+
<h2 id="use-a-fernet-key-with-airflow">Use a fernet key with Airflow</h2>
106+
107+
<p>Paste the key into your <code class="language-plaintext highlighter-rouge">airflow.cfg</code>.</p>
108+
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>fernet_key = 81HqDtbqAywKSOumSha3BhWNOdQ26slT6K0YaZeZyPs=
109+
</code></pre></div></div>
110+
111+
<p>Alternatively, set the environment variable.</p>
112+
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">AIRFLOW__CORE__FERNET_KEY</span><span class="o">=</span><span class="s1">'81HqDtbqAywKSOumSha3BhWNOdQ26slT6K0YaZeZyPs='</span>
113+
</code></pre></div></div>
114+
115+
<p>Restart Airflow’s webserver.</p>
116+
117+
<div class="warning">
118+
<p>For existing connections (the ones that were defined before setting the Fernet
119+
key), you need to open each connection in the web admin, re-type the password
120+
and save it.</p>
121+
</div>
122+
123+
<footer>
124+
<a href="/airflow">More Airflow posts</a>
125+
</footer>
126+
</article>
127+
128+
129+
130+
</main>
131+
132+
</body>
133+
</html>

0 commit comments

Comments
 (0)