<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>