<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div style="" class="markdown-here-wrapper"
data-md-url="Thunderbird">
<p style="margin: 0px 0px 1.2em ! important;">If the app is passed
in, you can optionally choose to use it. See Flask-SQLAlchemy
for an example of how to check multiple sources for the app.
It’s probably better to always rely on <code style="font-size: 0.85em; font-family: Consolas,Inconsolata,Courier,monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;">current_app</code>,
because then instructions for using the extension are
consistent: it must always be in a valid app context. People
following instructions that assume the app was passed in is a
common source of questions on Stack Overflow. The tradeoff is
that you have to remember to push an app context (or use a shell
from Flask-Script, etc. that does that for you), you can’t just
use the extension directly.</p>
<p style="margin: 0px 0px 1.2em ! important;">On 04/09/2016 05:58
AM, Andrew Pashkin wrote:</p>
<p style="margin: 0px 0px 1.2em ! important;"></p>
<div class="markdown-here-exclude">
<p></p>
<blockquote cite="mid:5708FC79.1080103@gmx.co.uk" type="cite">
<meta http-equiv="content-type" content="text/html;
charset=UTF-8">
Hello, everybody!<br>
<br>
I'm reading about <a moz-do-not-send="true"
href="http://flask.pocoo.org/docs/0.10/extensiondev/">extensions
development</a> and it says:<br>
<blockquote>
<p>As you noticed, <code class="docutils literal"><span
class="pre">init_app</span></code> does not assign <code
class="docutils literal"><span class="pre">app</span></code>
to <code class="docutils literal"><span class="pre">self</span></code>.
This is intentional! <b>Class based Flask extensions must
only store the application on the object when the
application was passed to the constructor.</b> This
tells the extension: I am not interested in using multiple
applications.</p>
<p class="last"><b>When the extension needs to find the
current application and it does not have a reference to
it, it must either use the </b><b><a
moz-do-not-send="true" class="reference internal"
href="http://flask.pocoo.org/docs/0.10/api/#flask.current_app"
title="flask.current_app"><code class="xref py py-data
docutils literal"><span class="pre">current_app</span></code></a></b>
context local or change the API in a way that you can pass
the application explicitly.</p>
</blockquote>
But <a moz-do-not-send="true"
href="http://flask.pocoo.org/docs/0.10/extensiondev/#the-extension-code">the
example extension</a>, just uses <tt>flask.current_app</tt>,
without checking whether an application instance was attached
to the extension instance:<br>
<blockquote>
<pre><span class="k">...
def</span> <span class="nf">connect</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><b><span class="n">current_app</span></b><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s1">'SQLITE3_DATABASE'</span><span class="p">])</span>
...
</pre>
</blockquote>
So, where is the truth? What extension should really do -
always use <tt>flask.current_app</tt>, or use it only if
application instance wasn't passed to the constructor?<br>
<pre class="moz-signature" cols="72">--
With kind regards, Andrew Pashkin.
cell phone - +7 (985) 898 57 59
Skype - waves_in_fluids
e-mail - <a moz-do-not-send="true" class="moz-txt-link-abbreviated" href="mailto:andrew.pashkin@gmx.co.uk">andrew.pashkin@gmx.co.uk</a></pre>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
Flask mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Flask@python.org">Flask@python.org</a>
<a class="moz-txt-link-freetext" href="https://mail.python.org/mailman/listinfo/flask">https://mail.python.org/mailman/listinfo/flask</a>
</pre>
</blockquote>
<p></p>
</div>
<p style="margin: 0px 0px 1.2em ! important;"></p>
<div
title="MDH:SWYgdGhlIGFwcCBpcyBwYXNzZWQgaW4sIHlvdSBjYW4gb3B0aW9uYWxseSBjaG9vc2UgdG8gdXNlIGl0LsKgIFNlZSBGbGFzay1TUUxBbGNoZW15IGZvciBhbiBleGFtcGxlIG9mIGhvdyB0byBjaGVj
ayBtdWx0aXBsZSBzb3VyY2VzIGZvciB0aGUgYXBwLsKgIEl0J3MgcHJvYmFibHkgYmV0dGVyIHRv
IGFsd2F5cyByZWx5IG9uIGBjdXJyZW50X2FwcGAsIGJlY2F1c2UgdGhlbiBpbnN0cnVjdGlvbnMg
Zm9yIHVzaW5nIHRoZSBleHRlbnNpb24gYXJlIGNvbnNpc3RlbnQ6IGl0IG11c3QgYWx3YXlzIGJl
IGluIGEgdmFsaWQgYXBwIGNvbnRleHQuwqAgUGVvcGxlIGZvbGxvd2luZyBpbnN0cnVjdGlvbnMg
dGhhdCBhc3N1bWUgdGhlIGFwcCB3YXMgcGFzc2VkIGluIGlzIGEgY29tbW9uIHNvdXJjZSBvZiBx
dWVzdGlvbnMgb24gU3RhY2sgT3ZlcmZsb3cuwqAgVGhlIHRyYWRlb2ZmIGlzIHRoYXQgeW91IGhh
dmUgdG8gcmVtZW1iZXIgdG8gcHVzaCBhbiBhcHAgY29udGV4dCAob3IgdXNlIGEgc2hlbGwgZnJv
bSBGbGFzay1TY3JpcHQsIGV0Yy4gdGhhdCBkb2VzIHRoYXQgZm9yIHlvdSksIHlvdSBjYW4ndCBq
dXN0IHVzZSB0aGUgZXh0ZW5zaW9uIGRpcmVjdGx5Ljxicj48YnI+PGRpdiBjbGFzcz0ibW96LWNp
dGUtcHJlZml4Ij5PbiAwNC8wOS8yMDE2IDA1OjU4IEFNLCBBbmRyZXcgUGFzaGtpbiB3cm90ZTo8
YnI+PC9kaXY+PGJsb2NrcXVvdGUgY2l0ZT0ibWlkOjU3MDhGQzc5LjEwODAxMDNAZ214LmNvLnVr
IiB0eXBlPSJjaXRlIj4KICAKCiAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNv
bnRlbnQ9InRleHQvaHRtbDsgIj4KICAKICAKICAgIEhlbGxvLCBldmVyeWJvZHkhPGJyPgogICAg
PGJyPgogICAgSSdtIHJlYWRpbmcgYWJvdXQgPGEgbW96LWRvLW5vdC1zZW5kPSJ0cnVlIiBocmVm
PSJodHRwOi8vZmxhc2sucG9jb28ub3JnL2RvY3MvMC4xMC9leHRlbnNpb25kZXYvIj5leHRlbnNp
b25zCiAgICAgIGRldmVsb3BtZW50PC9hPiBhbmQgaXQgc2F5czo8YnI+CiAgICA8YmxvY2txdW90
ZT4KICAgICAgPHA+QXMgeW91IG5vdGljZWQsIDxjb2RlIGNsYXNzPSJkb2N1dGlscyBsaXRlcmFs
Ij48c3BhbiBjbGFzcz0icHJlIj5pbml0X2FwcDwvc3Bhbj48L2NvZGU+IGRvZXMgbm90IGFzc2ln
biA8Y29kZSBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+YXBwPC9z
cGFuPjwvY29kZT4KICAgICAgICB0byA8Y29kZSBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNw
YW4gY2xhc3M9InByZSI+c2VsZjwvc3Bhbj48L2NvZGU+LgogICAgICAgIFRoaXMKICAgICAgICBp
cyBpbnRlbnRpb25hbCEgPGI+Q2xhc3MgYmFzZWQgRmxhc2sgZXh0ZW5zaW9ucyBtdXN0IG9ubHkg
c3RvcmUKICAgICAgICAgIHRoZQogICAgICAgICAgYXBwbGljYXRpb24gb24gdGhlIG9iamVjdCB3
aGVuIHRoZSBhcHBsaWNhdGlvbiB3YXMgcGFzc2VkIHRvCiAgICAgICAgICB0aGUKICAgICAgICAg
IGNvbnN0cnVjdG9yLjwvYj4gVGhpcyB0ZWxscyB0aGUgZXh0ZW5zaW9uOiBJIGFtIG5vdCBpbnRl
cmVzdGVkCiAgICAgICAgaW4gdXNpbmcKICAgICAgICBtdWx0aXBsZSBhcHBsaWNhdGlvbnMuPC9w
PgogICAgICA8cCBjbGFzcz0ibGFzdCI+PGI+V2hlbiB0aGUgZXh0ZW5zaW9uIG5lZWRzIHRvIGZp
bmQgdGhlIGN1cnJlbnQKICAgICAgICAgIGFwcGxpY2F0aW9uIGFuZCBpdCBkb2VzCiAgICAgICAg
ICBub3QgaGF2ZSBhIHJlZmVyZW5jZSB0byBpdCwgaXQgbXVzdCBlaXRoZXIgdXNlIHRoZQogICAg
ICAgIDwvYj48Yj48YSBtb3otZG8tbm90LXNlbmQ9InRydWUiIGNsYXNzPSJyZWZlcmVuY2UgaW50
ZXJuYWwiIGhyZWY9Imh0dHA6Ly9mbGFzay5wb2Nvby5vcmcvZG9jcy8wLjEwL2FwaS8jZmxhc2su
Y3VycmVudF9hcHAiIHRpdGxlPSJmbGFzay5jdXJyZW50X2FwcCI+PGNvZGUgY2xhc3M9InhyZWYg
cHkgcHktZGF0YQogICAgICAgICAgICAgIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJw
cmUiPmN1cnJlbnRfYXBwPC9zcGFuPjwvY29kZT48L2E+PC9iPgogICAgICAgIGNvbnRleHQgbG9j
YWwgb3IgY2hhbmdlIHRoZSBBUEkgaW4gYSB3YXkKICAgICAgICB0aGF0IHlvdSBjYW4gcGFzcyB0
aGUgYXBwbGljYXRpb24gZXhwbGljaXRseS48L3A+CiAgICA8L2Jsb2NrcXVvdGU+CiAgICBCdXQg
PGEgbW96LWRvLW5vdC1zZW5kPSJ0cnVlIiBocmVmPSJodHRwOi8vZmxhc2sucG9jb28ub3JnL2Rv
Y3MvMC4xMC9leHRlbnNpb25kZXYvI3RoZS1leHRlbnNpb24tY29kZSI+dGhlCiAgICAgIGV4YW1w
bGUgZXh0ZW5zaW9uPC9hPiwganVzdCB1c2VzIDx0dD5mbGFzay5jdXJyZW50X2FwcDwvdHQ+LAog
ICAgd2l0aG91dCBjaGVja2luZyB3aGV0aGVyIGFuIGFwcGxpY2F0aW9uIGluc3RhbmNlIHdhcyBh
dHRhY2hlZCB0byB0aGUKICAgIGV4dGVuc2lvbiBpbnN0YW5jZTo8YnI+CiAgICA8YmxvY2txdW90
ZT4KICAgICAgPHByZT48c3BhbiBjbGFzcz0iayI+Li4uCmRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9
Im5mIj5jb25uZWN0PC9zcGFuPjxzcGFuIGNsYXNzPSJwIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJi
cCI+c2VsZjwvc3Bhbj48c3BhbiBjbGFzcz0icCI+KTo8L3NwYW4+CiAgICA8c3BhbiBjbGFzcz0i
ayI+cmV0dXJuPC9zcGFuPiA8c3BhbiBjbGFzcz0ibiI+c3FsaXRlMzwvc3Bhbj48c3BhbiBjbGFz
cz0ibyI+Ljwvc3Bhbj48c3BhbiBjbGFzcz0ibiI+Y29ubmVjdDwvc3Bhbj48c3BhbiBjbGFzcz0i
cCI+KDwvc3Bhbj48Yj48c3BhbiBjbGFzcz0ibiI+Y3VycmVudF9hcHA8L3NwYW4+PC9iPjxzcGFu
IGNsYXNzPSJvIj4uPC9zcGFuPjxzcGFuIGNsYXNzPSJuIj5jb25maWc8L3NwYW4+PHNwYW4gY2xh
c3M9InAiPls8L3NwYW4+PHNwYW4gY2xhc3M9InMxIj4nU1FMSVRFM19EQVRBQkFTRSc8L3NwYW4+
PHNwYW4gY2xhc3M9InAiPl0pPC9zcGFuPgouLi4KPC9wcmU+CiAgICA8L2Jsb2NrcXVvdGU+CiAg
ICBTbywgd2hlcmUgaXMgdGhlIHRydXRoPyBXaGF0IGV4dGVuc2lvbiBzaG91bGQgcmVhbGx5IGRv
IC0gYWx3YXlzIHVzZQogICAgPHR0PmZsYXNrLmN1cnJlbnRfYXBwPC90dD4sIG9yIHVzZSBpdCBv
bmx5IGlmIGFwcGxpY2F0aW9uIGluc3RhbmNlCiAgICB3YXNuJ3QgcGFzc2VkIHRvIHRoZSBjb25z
dHJ1Y3Rvcj88YnI+CiAgICA8cHJlIGNsYXNzPSJtb3otc2lnbmF0dXJlIiBjb2xzPSI3MiI+LS0g
CldpdGgga2luZCByZWdhcmRzLCBBbmRyZXcgUGFzaGtpbi4KY2VsbCBwaG9uZSAtICs3ICg5ODUp
IDg5OCA1NyA1OQpTa3lwZSAtIHdhdmVzX2luX2ZsdWlkcwplLW1haWwgLSA8YSBtb3otZG8tbm90
LXNlbmQ9InRydWUiIGNsYXNzPSJtb3otdHh0LWxpbmstYWJicmV2aWF0ZWQiIGhyZWY9Im1haWx0
bzphbmRyZXcucGFzaGtpbkBnbXguY28udWsiPmFuZHJldy5wYXNoa2luQGdteC5jby51azwvYT48
L3ByZT4KICAKCgo8YnI+PGZpZWxkc2V0IGNsYXNzPSJtaW1lQXR0YWNobWVudEhlYWRlciI+PC9m
aWVsZHNldD48YnI+PHByZSB3cmFwPSIiPl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkZsYXNrIG1haWxpbmcgbGlzdApGbGFza0BweXRob24ub3JnCmh0dHBz
Oi8vbWFpbC5weXRob24ub3JnL21haWxtYW4vbGlzdGluZm8vZmxhc2sKPC9wcmU+Cgo8L2Jsb2Nr
cXVvdGU+PGJyPg=="
style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0;"></div>
</div>
</body>
</html>