summaryrefslogtreecommitdiff
path: root/docs/html/cheps/2_import.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/html/cheps/2_import.html')
-rw-r--r--docs/html/cheps/2_import.html248
1 files changed, 248 insertions, 0 deletions
diff --git a/docs/html/cheps/2_import.html b/docs/html/cheps/2_import.html
new file mode 100644
index 0000000..3f238ad
--- /dev/null
+++ b/docs/html/cheps/2_import.html
@@ -0,0 +1,248 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>(#2) Conditionalized #import behavior &#8212; Cheetah3 - The Python-Powered Template Engine</title>
+ <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+ <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <script type="text/javascript" src="../_static/language_data.js"></script>
+ <link rel="index" title="Index" href="../genindex.html" />
+ <link rel="search" title="Search" href="../search.html" />
+ <link rel="next" title="(#3) Exposing of super() and self via Template searchList" href="3_super.html" />
+ <link rel="prev" title="(#1) CHEP Purpose and Guidelines" href="1_chep.html" />
+ </head><body>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../genindex.html" title="General Index"
+ accesskey="I">index</a></li>
+ <li class="right" >
+ <a href="../py-modindex.html" title="Python Module Index"
+ >modules</a> |</li>
+ <li class="right" >
+ <a href="3_super.html" title="(#3) Exposing of super() and self via Template searchList"
+ accesskey="N">next</a> |</li>
+ <li class="right" >
+ <a href="1_chep.html" title="(#1) CHEP Purpose and Guidelines"
+ accesskey="P">previous</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
+ <li class="nav-item nav-item-1"><a href="../chep.html" accesskey="U">Cheetah Enhancement Proposals</a> &#187;</li>
+ </ul>
+ </div>
+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+ <div class="sphinxsidebarwrapper">
+ <h3><a href="../index.html">Table of Contents</a></h3>
+ <ul>
+<li><a class="reference internal" href="#">(#2) Conditionalized #import behavior</a><ul>
+<li><a class="reference internal" href="#abstract">Abstract</a></li>
+<li><a class="reference internal" href="#motivation">Motivation</a></li>
+<li><a class="reference internal" href="#specification">Specification</a></li>
+<li><a class="reference internal" href="#rationale">Rationale</a></li>
+<li><a class="reference internal" href="#backwards-compatibility">Backwards Compatibility</a></li>
+<li><a class="reference internal" href="#reference-implementation">Reference Implementation</a></li>
+<li><a class="reference internal" href="#copyright">Copyright</a></li>
+</ul>
+</li>
+</ul>
+
+ <h4>Previous topic</h4>
+ <p class="topless"><a href="1_chep.html"
+ title="previous chapter">(#1) CHEP Purpose and Guidelines</a></p>
+ <h4>Next topic</h4>
+ <p class="topless"><a href="3_super.html"
+ title="next chapter">(#3) Exposing of super() and self via Template searchList</a></p>
+ <div role="note" aria-label="source link">
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="../_sources/cheps/2_import.rst.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ </div>
+<div id="searchbox" style="display: none" role="search">
+ <h3>Quick search</h3>
+ <div class="searchformwrapper">
+ <form class="search" action="../search.html" method="get">
+ <input type="text" name="q" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ </div>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body" role="main">
+
+ <div class="section" id="conditionalized-import-behavior">
+<h1>(#2) Conditionalized #import behavior<a class="headerlink" href="#conditionalized-import-behavior" title="Permalink to this headline">¶</a></h1>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">CHEP:</th><td class="field-body">2</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Title:</th><td class="field-body">Conditionalized #import behavior</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">Version:</th><td class="field-body">1</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Author:</th><td class="field-body">R Tyler Ballance &lt;tyler at slide.com&gt;</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">Status:</th><td class="field-body">Draft</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Type:</th><td class="field-body">Standards Track</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">Content-Type:</th><td class="field-body">text/x-rst</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Created:</th><td class="field-body">07-Jun-2009</td>
+</tr>
+</tbody>
+</table>
+<hr class="docutils" />
+<div class="section" id="abstract">
+<h2>Abstract<a class="headerlink" href="#abstract" title="Permalink to this headline">¶</a></h2>
+<p>This CHEP proposes an update to the way the #import and #from
+directives are handled such that locally scoped imports and
+module-level imports are handled appropriately.</p>
+</div>
+<div class="section" id="motivation">
+<h2>Motivation<a class="headerlink" href="#motivation" title="Permalink to this headline">¶</a></h2>
+<p>Currently Cheetah (v2.2.1) provides two different, but mutually exclusive,
+means of importing Python modules with the #from/#import directives. The
+“traditional” handling for #from/#import (hereafter referred to as “module imports”)
+is that the generated import statements shall all be relocated to
+the top of the generated module’s source code, i.e.</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>#import cjson
+
+Hello $cjson.encode([1, 2, 3])
+</pre></div>
+</div>
+<p>Will result in generated module code along the lines of:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">cjson</span>
+
+<span class="k">class</span> <span class="nc">Foo</span><span class="p">(</span><span class="n">Template</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">writeBody</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="n">write</span><span class="p">(</span><span class="s1">&#39;Hello &#39;</span><span class="p">)</span>
+ <span class="n">write</span><span class="p">(</span><span class="n">cjson</span><span class="o">.</span><span class="n">encode</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]))</span>
+</pre></div>
+</div>
+<p>Also currently in Cheetah is the ability to switch off this
+behavior and enable location specific #from/#import handling
+(hereafter referred to as “function imports”) in the generated
+code, with this block of Cheetah for example:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1">#def aFunction(arg)</span>
+ <span class="c1">#try</span>
+ <span class="c1">#from hashlib import md5</span>
+ <span class="c1">#except ImportError</span>
+ <span class="c1">#from md5 import md5</span>
+ <span class="c1">#end try</span>
+ <span class="c1">#return $md5.new(arg).hexdigest()</span>
+<span class="c1">#end def</span>
+</pre></div>
+</div>
+<p>Will result in code generated with everything in
+place such that the Python looks something like:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">Foo</span><span class="p">(</span><span class="n">Template</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">aFunction</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="kn">from</span> <span class="nn">hashlib</span> <span class="k">import</span> <span class="n">md5</span>
+ <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
+ <span class="kn">from</span> <span class="nn">md5</span> <span class="k">import</span> <span class="n">md5</span>
+ <span class="k">return</span> <span class="n">md5</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
+</pre></div>
+</div>
+<p>These two approaches to handling the #from/#import directives
+are both beneficial for different situations but currently they
+are handled in mutually exclusive code paths and in mutually
+exclusive fashions.</p>
+</div>
+<div class="section" id="specification">
+<h2>Specification<a class="headerlink" href="#specification" title="Permalink to this headline">¶</a></h2>
+<p>The change in #from/#import behavior and how these directives
+are handled is all based on context of their use, making the
+#from/#import handling “intelligent”. For module imports, the
+“traditional” handling of the #from/#import directives will
+still apply. Whereas function imports will result in inline
+generated import code.</p>
+<p>The basic premise of the change proposed by this document is
+that all #from/#import directives contained within a #def/#end def
+closure will result in import statements contained within that
+function block whereas everywhere else the statements will be relocated
+to the top of the generated module code (i.e. the module import)</p>
+</div>
+<div class="section" id="rationale">
+<h2>Rationale<a class="headerlink" href="#rationale" title="Permalink to this headline">¶</a></h2>
+<p>The concept of the “function import” was introduced in Cheetah v2.1.0
+and quickly retrofitted to “live” behind a compiler setting due to the
+regressions with older templates or templates that were designed to utilize
+module imports (through heavy #block/#end block use, etc). Through discussion
+with Tavis Rudd, this middle ground between the two styles of importing was
+concluded to be the most reasonable solution to providing “pythonic” import
+functionality (i.e. “function import” also known as “inline imports”) while
+still providing the ability to have #from/#import directives declared at the
+module scope within the template (within the Cheetah templates, markup and most
+directives declared within the module scope are placed inside the default method).</p>
+</div>
+<div class="section" id="backwards-compatibility">
+<h2>Backwards Compatibility<a class="headerlink" href="#backwards-compatibility" title="Permalink to this headline">¶</a></h2>
+<p>Changes proposed in this document should be <em>mostly</em> backwards
+compatible with current versions of Cheetah, Any unforeseen issues
+could arise from the use of #from/#import inside of a function
+expecting those symbols to be available outside of the function
+that they’re declared in.</p>
+</div>
+<div class="section" id="reference-implementation">
+<h2>Reference Implementation<a class="headerlink" href="#reference-implementation" title="Permalink to this headline">¶</a></h2>
+<p><em>still in development</em></p>
+</div>
+<div class="section" id="copyright">
+<h2>Copyright<a class="headerlink" href="#copyright" title="Permalink to this headline">¶</a></h2>
+<p>This document has been placed in the public domain.</p>
+</div>
+</div>
+
+
+ </div>
+ </div>
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../genindex.html" title="General Index"
+ >index</a></li>
+ <li class="right" >
+ <a href="../py-modindex.html" title="Python Module Index"
+ >modules</a> |</li>
+ <li class="right" >
+ <a href="3_super.html" title="(#3) Exposing of super() and self via Template searchList"
+ >next</a> |</li>
+ <li class="right" >
+ <a href="1_chep.html" title="(#1) CHEP Purpose and Guidelines"
+ >previous</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
+ <li class="nav-item nav-item-1"><a href="../chep.html" >Cheetah Enhancement Proposals</a> &#187;</li>
+ </ul>
+ </div>
+ <div class="footer" role="contentinfo">
+ &#169; Copyright 2017-2018, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
+ Last updated on Mar 19, 2019.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
+ </div>
+ </body>
+</html> \ No newline at end of file