summaryrefslogtreecommitdiff
path: root/tests/examplefiles/test.html
diff options
context:
space:
mode:
authorgbrandl <devnull@localhost>2007-02-14 17:18:40 +0100
committergbrandl <devnull@localhost>2007-02-14 17:18:40 +0100
commit3e1463ced2669526d6c1ea5cc7748438367c2847 (patch)
treeda8e5b61674c372d5e70a082ba4423c3aff9dd66 /tests/examplefiles/test.html
parent0fa948e73c48996de904aeb2f0e4990fc40385ec (diff)
downloadpygments-3e1463ced2669526d6c1ea5cc7748438367c2847.tar.gz
[svn] Shorten some testfiles, silence some pylint warnings,
add a latex formatter unittest.
Diffstat (limited to 'tests/examplefiles/test.html')
-rw-r--r--tests/examplefiles/test.html1668
1 files changed, 0 insertions, 1668 deletions
diff --git a/tests/examplefiles/test.html b/tests/examplefiles/test.html
index 72cba437..ea723232 100644
--- a/tests/examplefiles/test.html
+++ b/tests/examplefiles/test.html
@@ -1119,1671 +1119,3 @@ pre.syntax { padding: 5px; margin-top: 0px; }
<span class="kw">else</span>:
<span class="kw">raise</span> <span class="name">PocooRuntimeError</span>(<span class="st st-sg">&#39;</span><span class="st">req.cache_control invalid</span><span class="st st-sg">&#39;</span>)
- <span class="kw">return</span> <span class="name">resp</span>
-
-<span class="cm"># -*- coding: utf-8 -*-</span>
-<span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- pocoo.pkg.core.captcha
- ~~~~~~~~~~~~~~~~~~~~~~
-
- Captcha URL Handler.
-
- Displays a random captcha picture (debugging only).
-
- :copyright: 2006-2007 by Armin Ronacher.
- :license: GNU GPL, see LICENSE for more details.
-</span><span class="st st-db">&quot;&quot;&quot;</span>
-<span class="kw">from </span><span class="cls">pocoo.application</span><span class="kw"> import</span> <span class="name">RequestHandler</span>
-<span class="kw">from </span><span class="cls">pocoo.http</span><span class="kw"> import</span> <span class="name">Response</span>
-
-
-<span class="kw">class </span><span class="cls">CaptchaImage</span>(<span class="name">RequestHandler</span>):
- <span class="name">handler_regexes</span> <span class="op">=</span> [<span class="st st-sg">&#39;</span><span class="st">!captcha$</span><span class="st st-sg">&#39;</span>]
-
- <span class="kw">def </span><span class="fun">handle_request</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>):
- <span class="kw">from </span><span class="cls">pocoo.utils.captcha</span><span class="kw"> import</span> <span class="name">Captcha</span>
-
- <span class="name">c</span> <span class="op">=</span> <span class="name">Captcha</span>()
- <span class="name">response</span> <span class="op">=</span> <span class="name">Response</span>(<span class="name">c</span>.<span class="name">generate_image</span>())
- <span class="name">response</span>[<span class="st st-sg">&#39;</span><span class="st">Content-Type</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">image/png</span><span class="st st-sg">&#39;</span>
-
- <span class="kw">return</span> <span class="name">response</span>
-<span class="cm"># -*- coding: utf-8 -*-</span>
-<span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- pocoo.pkg.core.cobalt
- ~~~~~~~~~~~~~~~~~~~~~
-
- Provides static content serving like mozilla&#39;s chrome:// scheme.
-
- :copyright: 2006-2007 by Armin Ronacher, Georg Brandl.
- :license: GNU GPL, see LICENSE for more details.
-</span><span class="st st-db">&quot;&quot;&quot;</span>
-<span class="kw">import </span><span class="cls">os</span>
-<span class="kw">import </span><span class="cls">time</span>
-
-<span class="kw">from </span><span class="cls">mimetypes</span><span class="kw"> import</span> <span class="name">guess_type</span>
-<span class="kw">from </span><span class="cls">pocoo.template</span><span class="kw"> import</span> <span class="name">FileRequirements</span>
-
-
-<span class="kw">class </span><span class="cls">CobaltMiddleware</span>(<span class="bn">object</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- The Cobalt middleware serves static files.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">def </span><span class="fun">__init__</span>(<span class="bn bn-pseudo">self</span>, <span class="name">app</span>, <span class="name">ctx</span>):
- <span class="bn bn-pseudo">self</span>.<span class="name">app</span> <span class="op">=</span> <span class="name">app</span>
-
- <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span> <span class="op">=</span> <span class="name">ctx</span>
- <span class="bn bn-pseudo">self</span>.<span class="name">cache_enabled</span> <span class="op">=</span> <span class="name">ctx</span>.<span class="name">cfg</span>.<span class="name">get_bool</span>(<span class="st st-sg">&#39;</span><span class="st">cache</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">static_cache</span><span class="st st-sg">&#39;</span>)
-
- <span class="kw">def </span><span class="fun">get_stylesheet_imports</span>(<span class="bn bn-pseudo">self</span>):
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="bn bn-pseudo">self</span>.<span class="name">cache_enabled</span> <span class="op op-word">or</span> <span class="st st-sg">&#39;</span><span class="st">cobalt/stylesheet_imports</span><span class="st st-sg">&#39;</span> <span class="op op-word">not</span> <span class="op op-word">in</span> <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">_cache</span>:
- <span class="name">handled</span> <span class="op">=</span> <span class="name">set</span>()
- <span class="name">lines</span> <span class="op">=</span> []
- <span class="kw">for</span> <span class="name">comp</span> <span class="op op-word">in</span> <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">get_components</span>(<span class="name">FileRequirements</span>):
- <span class="kw">for</span> <span class="name">name</span> <span class="op op-word">in</span> <span class="name">comp</span>.<span class="name">get_stylesheet_imports</span>():
- <span class="name">item</span> <span class="op">=</span> (<span class="name">comp</span>.<span class="name">package</span>, <span class="name">name</span>)
- <span class="kw">if</span> <span class="name">item</span> <span class="op op-word">in</span> <span class="name">handled</span>:
- <span class="kw">continue</span>
-
- <span class="name">handled</span>.<span class="name">add</span>(<span class="name">item</span>)
- <span class="name">url</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">!cobalt/</span><span class="st st-int">%s</span><span class="st">/</span><span class="st st-int">%s</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">item</span>
-
- <span class="name">lines</span>.<span class="name">append</span>(<span class="st st-sg">&#39;</span><span class="st">@import url(</span><span class="st st-int">%s</span><span class="st">);</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="bn">str</span>(<span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">make_url</span>(<span class="name">url</span>)))
- <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">_cache</span>[<span class="st st-sg">&#39;</span><span class="st">cobalt/stylesheet_imports</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st st-esc">\n</span><span class="st st-sg">&#39;</span>.<span class="name">join</span>(<span class="name">lines</span>)
- <span class="kw">return</span> <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">_cache</span>[<span class="st st-sg">&#39;</span><span class="st">cobalt/stylesheet_imports</span><span class="st st-sg">&#39;</span>]
-
- <span class="kw">def </span><span class="fun">get_javascript_imports</span>(<span class="bn bn-pseudo">self</span>):
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="bn bn-pseudo">self</span>.<span class="name">cache_enabled</span> <span class="op op-word">or</span> <span class="st st-sg">&#39;</span><span class="st">cobalt/javascript_imports</span><span class="st st-sg">&#39;</span> <span class="op op-word">not</span> <span class="op op-word">in</span> <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">_cache</span>:
- <span class="name">handled</span> <span class="op">=</span> <span class="name">set</span>()
- <span class="name">lines</span> <span class="op">=</span> []
- <span class="name">onload</span> <span class="op">=</span> []
- <span class="kw">for</span> <span class="name">comp</span> <span class="op op-word">in</span> <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">get_components</span>(<span class="name">FileRequirements</span>):
- <span class="kw">for</span> <span class="name">name</span> <span class="op op-word">in</span> <span class="name">comp</span>.<span class="name">get_javascript_imports</span>():
- <span class="name">item</span> <span class="op">=</span> (<span class="name">comp</span>.<span class="name">package</span>, <span class="name">name</span>)
- <span class="kw">if</span> <span class="name">item</span> <span class="op op-word">in</span> <span class="name">handled</span>:
- <span class="kw">continue</span>
-
- <span class="name">handled</span>.<span class="name">add</span>(<span class="name">item</span>)
- <span class="name">imp</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">pkgmanager</span>.<span class="name">importers</span>[<span class="name">comp</span>.<span class="name">package</span>]
- <span class="name">lines</span>.<span class="name">append</span>(<span class="name">imp</span>.<span class="name">get_data</span>(<span class="name">os</span>.<span class="name">path</span>.<span class="name">join</span>(<span class="st st-sg">&#39;</span><span class="st">static</span><span class="st st-sg">&#39;</span>, <span class="name">name</span>)))
- <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">_cache</span>[<span class="st st-sg">&#39;</span><span class="st">cobalt/javascript_imports</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st st-esc">\n\n</span><span class="st st-sg">&#39;</span>.<span class="name">join</span>(<span class="name">lines</span>)
- <span class="kw">return</span> <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">_cache</span>[<span class="st st-sg">&#39;</span><span class="st">cobalt/javascript_imports</span><span class="st st-sg">&#39;</span>]
-
- <span class="kw">def </span><span class="fun">__call__</span>(<span class="bn bn-pseudo">self</span>, <span class="name">environ</span>, <span class="name">start_response</span>):
- <span class="name">path</span> <span class="op">=</span> <span class="name">environ</span>.<span class="name">get</span>(<span class="st st-sg">&#39;</span><span class="st">PATH_INFO</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">/</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="name">path</span>.<span class="name">startswith</span>(<span class="st st-sg">&#39;</span><span class="st">/!cobalt/</span><span class="st st-sg">&#39;</span>):
- <span class="name">mime_type</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
-
- <span class="kw">try</span>:
- <span class="name">pkgname</span>, <span class="name">fname</span> <span class="op">=</span> <span class="name">path</span>[<span class="nb nb-int">9</span>:].<span class="name">split</span>(<span class="st st-sg">&#39;</span><span class="st">/</span><span class="st st-sg">&#39;</span>, <span class="nb nb-int">1</span>)
- <span class="kw">if</span> <span class="name">pkgname</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">_import_</span><span class="st st-sg">&#39;</span>:
- <span class="kw">if</span> <span class="name">fname</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">styles.css</span><span class="st st-sg">&#39;</span>:
- <span class="name">mime_type</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">text/css</span><span class="st st-sg">&#39;</span>
-
- <span class="name">content</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">get_stylesheet_imports</span>()
- <span class="kw">elif</span> <span class="name">fname</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">script.js</span><span class="st st-sg">&#39;</span>:
- <span class="name">mime_type</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">application/x-javascript</span><span class="st st-sg">&#39;</span>
-
- <span class="name">content</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">get_javascript_imports</span>()
- <span class="kw">else</span>:
- <span class="name">guessed_type</span> <span class="op">=</span> <span class="name">guess_type</span>(<span class="name">fname</span>)
- <span class="name">mime_type</span> <span class="op">=</span> <span class="name">guessed_type</span>[<span class="nb nb-int">0</span>] <span class="op op-word">or</span> <span class="st st-sg">&#39;</span><span class="st">text/plain</span><span class="st st-sg">&#39;</span>
-
- <span class="name">imp</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">pkgmanager</span>.<span class="name">importers</span>[<span class="name">pkgname</span>]
- <span class="name">content</span> <span class="op">=</span> <span class="name">imp</span>.<span class="name">get_data</span>(<span class="name">os</span>.<span class="name">path</span>.<span class="name">join</span>(<span class="st st-sg">&#39;</span><span class="st">static</span><span class="st st-sg">&#39;</span>, <span class="name">fname</span>))
- <span class="kw">if</span> <span class="name">mime_type</span> <span class="op op-word">is</span> <span class="op op-word">not</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">expiry</span> <span class="op">=</span> <span class="name">time</span>.<span class="name">time</span>() <span class="op">+</span> <span class="nb nb-int">3600</span> <span class="cm"># cache for one hour</span>
-
- <span class="name">expiry</span> <span class="op">=</span> <span class="name">time</span>.<span class="name">asctime</span>(<span class="name">time</span>.<span class="name">gmtime</span>(<span class="name">expiry</span>))
- <span class="name">headers</span> <span class="op">=</span> [(<span class="st st-sg">&#39;</span><span class="st">Content-Type</span><span class="st st-sg">&#39;</span>, <span class="name">mime_type</span>),
- (<span class="st st-sg">&#39;</span><span class="st">Cache-Control</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">public</span><span class="st st-sg">&#39;</span>),
- (<span class="st st-sg">&#39;</span><span class="st">Expires</span><span class="st st-sg">&#39;</span>, <span class="name">expiry</span>)]
- <span class="name">start_response</span>(<span class="st st-sg">&#39;</span><span class="st">200 OK</span><span class="st st-sg">&#39;</span>, <span class="name">headers</span>)
- <span class="kw">if</span> <span class="name">environ</span>.<span class="name">get</span>(<span class="st st-sg">&#39;</span><span class="st">REQUEST_METHOD</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">GET</span><span class="st st-sg">&#39;</span>) <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">HEAD</span><span class="st st-sg">&#39;</span>:
- <span class="kw">return</span> []
- <span class="kw">else</span>:
- <span class="kw">return</span> [<span class="name">content</span>]
- <span class="kw">except</span> (<span class="exc">ValueError</span>, <span class="exc">KeyError</span>, <span class="exc">IOError</span>):
- <span class="cm"># XXX: output custom error message?</span>
-
- <span class="kw">pass</span>
- <span class="kw">return</span> <span class="bn bn-pseudo">self</span>.<span class="name">app</span>(<span class="name">environ</span>, <span class="name">start_response</span>)
-<span class="cm"># -*- coding: utf-8 -*-</span>
-<span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- pocoo.pkg.core.db
- ~~~~~~~~~~~~~~~~~
-
- Pocoo core database definition.
-
- :copyright: 2006-2007 by Armin Ronacher, Georg Brandl.
- :license: GNU GPL, see LICENSE for more details.
-</span><span class="st st-db">&quot;&quot;&quot;</span>
-<span class="kw">from </span><span class="cls">pocoo.db</span><span class="kw"> import</span> <span class="name">meta</span>, <span class="name">DatabaseObserver</span>
-
-
-<span class="name">ANONYMOUS_USER_ID</span> <span class="op">=</span> <span class="op">-</span><span class="nb nb-int">1</span>
-
-<span class="name">DEFAULT_USER_ID</span> <span class="op">=</span> <span class="nb nb-int">0</span>
-
-
-<span class="name">sessions</span> <span class="op">=</span> <span class="name">meta</span>.<span class="name">Table</span>(<span class="st st-sg">&#39;</span><span class="st">core_sessions</span><span class="st st-sg">&#39;</span>,
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">session_key</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Unicode</span>(<span class="nb nb-int">40</span>), <span class="name">primary_key</span><span class="op">=</span><span class="bn bn-pseudo">True</span>),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">ip_addr</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Unicode</span>(<span class="nb nb-int">15</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">expires</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">DateTime</span>),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">last_reload</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">DateTime</span>),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">data</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Pickled</span>(<span class="bn">dict</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">action</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Unicode</span>),
-)
-
-
-<span class="name">users</span> <span class="op">=</span> <span class="name">meta</span>.<span class="name">Table</span>(<span class="st st-sg">&#39;</span><span class="st">core_users</span><span class="st st-sg">&#39;</span>,
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>, <span class="name">primary_key</span><span class="op">=</span><span class="bn bn-pseudo">True</span>),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">subject_id</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>,
- <span class="name">meta</span>.<span class="name">ForeignKey</span>(<span class="st st-sg">&#39;</span><span class="st">core_acl_subjects.subject_id</span><span class="st st-sg">&#39;</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Unicode</span>(<span class="nb nb-int">40</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">email</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Unicode</span>(<span class="nb nb-int">250</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">pwhash</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Unicode</span>(<span class="nb nb-int">60</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">act_key</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Unicode</span>(<span class="nb nb-int">8</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">language</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Unicode</span>(<span class="nb nb-int">2</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">profile</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Pickled</span>(<span class="bn">dict</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">settings</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Pickled</span>(<span class="bn">dict</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">last_login</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">DateTime</span>),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">register_date</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">DateTime</span>),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">post_count</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">read_threads</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Binary</span>),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">read_posts</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Binary</span>),
-)
-
-
-<span class="name">groups</span> <span class="op">=</span> <span class="name">meta</span>.<span class="name">Table</span>(<span class="st st-sg">&#39;</span><span class="st">core_groups</span><span class="st st-sg">&#39;</span>,
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">group_id</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>, <span class="name">primary_key</span><span class="op">=</span><span class="bn bn-pseudo">True</span>),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">subject_id</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>,
- <span class="name">meta</span>.<span class="name">ForeignKey</span>(<span class="st st-sg">&#39;</span><span class="st">core_acl_subjects.subject_id</span><span class="st st-sg">&#39;</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">name</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Unicode</span>(<span class="nb nb-int">40</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">public</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Boolean</span>),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">hidden</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Boolean</span>)
-)
-
-
-<span class="name">group_members</span> <span class="op">=</span> <span class="name">meta</span>.<span class="name">Table</span>(<span class="st st-sg">&#39;</span><span class="st">core_group_members</span><span class="st st-sg">&#39;</span>,
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>,
- <span class="name">meta</span>.<span class="name">ForeignKey</span>(<span class="st st-sg">&#39;</span><span class="st">core_users.user_id</span><span class="st st-sg">&#39;</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">group_id</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>,
- <span class="name">meta</span>.<span class="name">ForeignKey</span>(<span class="st st-sg">&#39;</span><span class="st">core_groups.group_id</span><span class="st st-sg">&#39;</span>))
-)
-
-
-<span class="name">forums</span> <span class="op">=</span> <span class="name">meta</span>.<span class="name">Table</span>(<span class="st st-sg">&#39;</span><span class="st">core_forums</span><span class="st st-sg">&#39;</span>,
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">forum_id</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>, <span class="name">primary_key</span><span class="op">=</span><span class="bn bn-pseudo">True</span>),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">parent_id</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>,
- <span class="name">meta</span>.<span class="name">ForeignKey</span>(<span class="st st-sg">&#39;</span><span class="st">core_forums.forum_id</span><span class="st st-sg">&#39;</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">object_id</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>,
- <span class="name">meta</span>.<span class="name">ForeignKey</span>(<span class="st st-sg">&#39;</span><span class="st">core_acl_objects.object_id</span><span class="st st-sg">&#39;</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">name</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Unicode</span>(<span class="nb nb-int">100</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">description</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Unicode</span>),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">position</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">link</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Unicode</span>(<span class="nb nb-int">100</span>)),
- <span class="cm">#XXX: foreign key doesn&#39;t work</span>
-
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">last_post_id</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">post_count</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">thread_count</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>)
-)
-
-
-<span class="name">posts</span> <span class="op">=</span> <span class="name">meta</span>.<span class="name">Table</span>(<span class="st st-sg">&#39;</span><span class="st">core_posts</span><span class="st st-sg">&#39;</span>,
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>, <span class="name">primary_key</span><span class="op">=</span><span class="bn bn-pseudo">True</span>),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">forum_id</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>,
- <span class="name">meta</span>.<span class="name">ForeignKey</span>(<span class="st st-sg">&#39;</span><span class="st">core_forums.forum_id</span><span class="st st-sg">&#39;</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">parent_id</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>,
- <span class="name">meta</span>.<span class="name">ForeignKey</span>(<span class="st st-sg">&#39;</span><span class="st">core_posts.post_id</span><span class="st st-sg">&#39;</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">root_post_id</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>,
- <span class="name">meta</span>.<span class="name">ForeignKey</span>(<span class="st st-sg">&#39;</span><span class="st">core_posts.post_id</span><span class="st st-sg">&#39;</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">object_id</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>,
- <span class="name">meta</span>.<span class="name">ForeignKey</span>(<span class="st st-sg">&#39;</span><span class="st">core_acl_objects.object_id</span><span class="st st-sg">&#39;</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">post_count</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">view_count</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">author_id</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>,
- <span class="name">meta</span>.<span class="name">ForeignKey</span>(<span class="st st-sg">&#39;</span><span class="st">core_users.user_id</span><span class="st st-sg">&#39;</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Unicode</span>(<span class="nb nb-int">200</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Unicode</span>(<span class="nb nb-int">200</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">text</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Unicode</span>),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">timestamp</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">DateTime</span>)
-)
-
-
-<span class="name">privileges</span> <span class="op">=</span> <span class="name">meta</span>.<span class="name">Table</span>(<span class="st st-sg">&#39;</span><span class="st">core_privileges</span><span class="st st-sg">&#39;</span>,
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">priv_id</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>, <span class="name">primary_key</span><span class="op">=</span><span class="bn bn-pseudo">True</span>),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">name</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Unicode</span>(<span class="nb nb-int">100</span>))
-)
-
-
-<span class="name">acl_mapping</span> <span class="op">=</span> <span class="name">meta</span>.<span class="name">Table</span>(<span class="st st-sg">&#39;</span><span class="st">core_acl_mapping</span><span class="st st-sg">&#39;</span>,
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">priv_id</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>,
- <span class="name">meta</span>.<span class="name">ForeignKey</span>(<span class="st st-sg">&#39;</span><span class="st">core_privileges.priv_id</span><span class="st st-sg">&#39;</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">subject_id</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>,
- <span class="name">meta</span>.<span class="name">ForeignKey</span>(<span class="st st-sg">&#39;</span><span class="st">core_acl_subjects.subject_id</span><span class="st st-sg">&#39;</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">object_id</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>,
- <span class="name">meta</span>.<span class="name">ForeignKey</span>(<span class="st st-sg">&#39;</span><span class="st">core_acl_objects.object_id</span><span class="st st-sg">&#39;</span>)),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">state</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>)
-)
-
-
-<span class="name">acl_subjects</span> <span class="op">=</span> <span class="name">meta</span>.<span class="name">Table</span>(<span class="st st-sg">&#39;</span><span class="st">core_acl_subjects</span><span class="st st-sg">&#39;</span>,
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">subject_id</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>, <span class="name">primary_key</span><span class="op">=</span><span class="bn bn-pseudo">True</span>),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">subject_type</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">String</span>(<span class="nb nb-int">10</span>))
-)
-
-
-<span class="name">acl_objects</span> <span class="op">=</span> <span class="name">meta</span>.<span class="name">Table</span>(<span class="st st-sg">&#39;</span><span class="st">core_acl_objects</span><span class="st st-sg">&#39;</span>,
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">object_id</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">Integer</span>, <span class="name">primary_key</span><span class="op">=</span><span class="bn bn-pseudo">True</span>),
- <span class="name">meta</span>.<span class="name">Column</span>(<span class="st st-sg">&#39;</span><span class="st">object_type</span><span class="st st-sg">&#39;</span>, <span class="name">meta</span>.<span class="name">String</span>(<span class="nb nb-int">10</span>))
-)
-
-
-<span class="name">acl_subject_join</span> <span class="op">=</span> <span class="name">meta</span>.<span class="name">polymorphic_union</span>({
- <span class="st st-sg">&#39;</span><span class="st">user</span><span class="st st-sg">&#39;</span>: <span class="name">users</span>,
- <span class="st st-sg">&#39;</span><span class="st">group</span><span class="st st-sg">&#39;</span>: <span class="name">groups</span>
-}, <span class="st st-sg">&#39;</span><span class="st">subject_type</span><span class="st st-sg">&#39;</span>)
-
-
-<span class="name">acl_object_join</span> <span class="op">=</span> <span class="name">meta</span>.<span class="name">polymorphic_union</span>({
- <span class="st st-sg">&#39;</span><span class="st">forum</span><span class="st st-sg">&#39;</span>: <span class="name">forums</span>,
- <span class="st st-sg">&#39;</span><span class="st">post</span><span class="st st-sg">&#39;</span>: <span class="name">posts</span>
-}, <span class="st st-sg">&#39;</span><span class="st">object_type</span><span class="st st-sg">&#39;</span>)
-
-
-<span class="kw">class </span><span class="cls">CoreTableObserver</span>(<span class="name">DatabaseObserver</span>):
-
- <span class="kw">def </span><span class="fun">after_table_creation</span>(<span class="bn bn-pseudo">self</span>, <span class="name">table</span>):
- <span class="kw">if</span> <span class="name">table</span> <span class="op op-word">is</span> <span class="name">users</span>:
- <span class="name">e</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>
-
- <span class="name">e</span>(<span class="name">users</span>.<span class="name">insert</span>(), <span class="name">user_id</span><span class="op">=</span><span class="name">ANONYMOUS_USER_ID</span>, <span class="name">username</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">anonymous</span><span class="st st-sg">&#39;</span>)
- <span class="name">e</span>(<span class="name">users</span>.<span class="name">insert</span>(), <span class="name">user_id</span><span class="op">=</span><span class="name">DEFAULT_USER_ID</span>, <span class="name">username</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">default</span><span class="st st-sg">&#39;</span>)
-
-<span class="cm"># -*- coding: utf-8 -*-</span>
-<span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- pocoo.pkg.core.feeds
- ~~~~~~~~~~~~~~~~~~~~
-
- Provides RSS Feeds.
-
- :copyright: 2006-2007 by Armin Ronacher.
- :license: GNU GPL, see LICENSE for more details.
-</span><span class="st st-db">&quot;&quot;&quot;</span>
-<span class="kw">from </span><span class="cls">pocoo</span><span class="kw"> import</span> <span class="name">Component</span>
-<span class="kw">from </span><span class="cls">pocoo.http</span><span class="kw"> import</span> <span class="name">PageNotFound</span>, <span class="name">Response</span>
-
-<span class="kw">from </span><span class="cls">pocoo.application</span><span class="kw"> import</span> <span class="name">RequestHandler</span>
-<span class="kw">from </span><span class="cls">pocoo.db</span><span class="kw"> import</span> <span class="name">meta</span>
-<span class="kw">from </span><span class="cls">pocoo.utils.feed</span><span class="kw"> import</span> <span class="name">Feed</span>
-
-<span class="kw">from </span><span class="cls">pocoo.pkg.core.db</span><span class="kw"> import</span> <span class="name">forums</span>, <span class="name">posts</span>, <span class="name">users</span>
-<span class="kw">from </span><span class="cls">pocoo.pkg.core.textfmt</span><span class="kw"> import</span> <span class="name">parse_and_render</span>
-
-
-<span class="kw">class </span><span class="cls">FeedProvider</span>(<span class="name">Component</span>):
- <span class="cm">#: identifier for this feed. must be lowercase</span>
- <span class="name">identifier</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">unknown</span><span class="st st-sg">&#39;</span>
-
- <span class="kw">def </span><span class="fun">get_feed</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">parameter</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Return a dict in the following form::
-
- {&#39;title&#39;: &#39;Title of this feed&#39;,
- &#39;description&#39;: &#39;Description of this feed&#39;,
- &#39;items&#39;: [{
- &#39;title&#39;: &#39;title of this item&#39;,
- &#39;link&#39;: &#39;relative link of this item&#39;,
- &#39;author&#39;: &#39;author of this item&#39;,
- &#39;description&#39;: &#39;description of this item&#39;,
- &#39;pub_date&#39;: &#39;date of this item&#39;
-
- }]}
-
- Can raise a `FeedNotFound` exception.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="deco">@property</span>
- <span class="kw">def </span><span class="fun">url</span>(<span class="bn bn-pseudo">self</span>):
- <span class="kw">return</span> <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">feeds/</span><span class="st st-int">%s</span><span class="st">.xml</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="bn bn-pseudo">self</span>.<span class="name">identifier</span>)
-
-
-
-<span class="kw">class </span><span class="cls">FeedNotFound</span>(<span class="exc">Exception</span>):
- <span class="kw">pass</span>
-
-
-<span class="kw">class </span><span class="cls">ThreadFeed</span>(<span class="name">FeedProvider</span>):
- <span class="name">identifier</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">thread</span><span class="st st-sg">&#39;</span>
-
- <span class="kw">def </span><span class="fun">get_feed</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">post_id</span>):
- <span class="name">_</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">gettext</span>
-
- <span class="kw">try</span>:
- <span class="name">post_id</span> <span class="op">=</span> <span class="bn">int</span>(<span class="name">post_id</span>)
- <span class="kw">except</span>:
- <span class="kw">raise</span> <span class="name">FeedNotFound</span>()
- <span class="name">row</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">posts</span>.<span class="name">c</span>.<span class="name">root_post_id</span>],
- (<span class="name">posts</span>.<span class="name">c</span>.<span class="name">post_id</span> <span class="op">==</span> <span class="name">post_id</span>)
- )).<span class="name">fetchone</span>()
- <span class="kw">if</span> <span class="name">row</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="kw">raise</span> <span class="name">FeedNotFound</span>()
- <span class="name">root_post_id</span> <span class="op">=</span> <span class="name">row</span>[<span class="nb nb-int">0</span>]
- <span class="cm"># select data</span>
-
- <span class="name">result</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>(
- [<span class="name">posts</span>.<span class="name">c</span>.<span class="name">post_id</span>, <span class="name">posts</span>.<span class="name">c</span>.<span class="name">title</span>, <span class="name">posts</span>.<span class="name">c</span>.<span class="name">text</span>,
- <span class="name">posts</span>.<span class="name">c</span>.<span class="name">timestamp</span>, <span class="name">users</span>.<span class="name">c</span>.<span class="name">username</span>],
- (<span class="name">posts</span>.<span class="name">c</span>.<span class="name">root_post_id</span> <span class="op">==</span> <span class="name">root_post_id</span>) <span class="op">&amp;</span>
-
- (<span class="name">users</span>.<span class="name">c</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">posts</span>.<span class="name">c</span>.<span class="name">author_id</span>),
- <span class="name">order_by</span><span class="op">=</span>[<span class="name">meta</span>.<span class="name">desc</span>(<span class="name">posts</span>.<span class="name">c</span>.<span class="name">post_id</span>)],
- <span class="name">limit</span><span class="op">=</span><span class="nb nb-int">10</span>
-
- ))
- <span class="kw">return</span> {
- <span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>: <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Last Posts in Thread </span><span class="st st-int">%d</span><span class="st st-sg">&#39;</span>) <span class="op">%</span> <span class="name">root_post_id</span>,
- <span class="st st-sg">&#39;</span><span class="st">description</span><span class="st st-sg">&#39;</span>: <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">The last 10 posts in Thread </span><span class="st st-int">%d</span><span class="st st-sg">&#39;</span>) <span class="op">%</span> <span class="name">root_post_id</span>,
- <span class="st st-sg">&#39;</span><span class="st">items</span><span class="st st-sg">&#39;</span>: [{
- <span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>: <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">link</span><span class="st st-sg">&#39;</span>: <span class="st st-sg">&#39;</span><span class="st">post/</span><span class="st st-int">%d</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">description</span><span class="st st-sg">&#39;</span>: <span class="name">parse_and_render</span>(<span class="name">req</span>, <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">text</span><span class="st st-sg">&#39;</span>]),
- <span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>: <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">pub_date</span><span class="st st-sg">&#39;</span>: <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">timestamp</span><span class="st st-sg">&#39;</span>]
- } <span class="kw">for</span> <span class="name">post</span> <span class="op op-word">in</span> <span class="name">result</span>]
- }
-
-
-
-<span class="kw">class </span><span class="cls">ForumFeed</span>(<span class="name">FeedProvider</span>):
- <span class="name">identifier</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">forum</span><span class="st st-sg">&#39;</span>
-
- <span class="kw">def </span><span class="fun">get_feed</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">forum_id</span>):
- <span class="name">_</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">gettext</span>
-
- <span class="kw">try</span>:
- <span class="name">forum_id</span> <span class="op">=</span> <span class="bn">int</span>(<span class="name">forum_id</span>)
- <span class="kw">except</span>:
- <span class="kw">raise</span> <span class="name">FeedNotFound</span>()
- <span class="kw">if</span> <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">forums</span>.<span class="name">c</span>.<span class="name">forum_id</span>],
- (<span class="name">forums</span>.<span class="name">c</span>.<span class="name">forum_id</span> <span class="op">==</span> <span class="name">forum_id</span>)
- )).<span class="name">fetchone</span>() <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="kw">raise</span> <span class="name">FeedNotFound</span>()
- <span class="cm"># select data</span>
-
- <span class="name">result</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>(
- [<span class="name">posts</span>.<span class="name">c</span>.<span class="name">post_id</span>, <span class="name">posts</span>.<span class="name">c</span>.<span class="name">title</span>, <span class="name">posts</span>.<span class="name">c</span>.<span class="name">text</span>,
- <span class="name">posts</span>.<span class="name">c</span>.<span class="name">timestamp</span>, <span class="name">users</span>.<span class="name">c</span>.<span class="name">username</span>],
- (<span class="name">posts</span>.<span class="name">c</span>.<span class="name">forum_id</span> <span class="op">==</span> <span class="name">forum_id</span>) <span class="op">&amp;</span>
-
- (<span class="name">users</span>.<span class="name">c</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">posts</span>.<span class="name">c</span>.<span class="name">author_id</span>),
- <span class="name">order_by</span><span class="op">=</span>[<span class="name">meta</span>.<span class="name">desc</span>(<span class="name">posts</span>.<span class="name">c</span>.<span class="name">post_id</span>)],
- <span class="name">limit</span><span class="op">=</span><span class="nb nb-int">10</span>
-
- ))
- <span class="kw">return</span> {
- <span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>: <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Last Posts in Forum </span><span class="st st-int">%d</span><span class="st st-sg">&#39;</span>) <span class="op">%</span> <span class="name">forum_id</span>,
- <span class="st st-sg">&#39;</span><span class="st">description</span><span class="st st-sg">&#39;</span>: <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">The last 10 posts of forum </span><span class="st st-int">%d</span><span class="st st-sg">&#39;</span>) <span class="op">%</span> <span class="name">forum_id</span>,
- <span class="st st-sg">&#39;</span><span class="st">items</span><span class="st st-sg">&#39;</span>: [{
- <span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>: <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">link</span><span class="st st-sg">&#39;</span>: <span class="st st-sg">&#39;</span><span class="st">post/</span><span class="st st-int">%d</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">description</span><span class="st st-sg">&#39;</span>: <span class="name">parse_and_render</span>(<span class="name">req</span>, <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">text</span><span class="st st-sg">&#39;</span>]),
- <span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>: <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">pub_date</span><span class="st st-sg">&#39;</span>: <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">timestamp</span><span class="st st-sg">&#39;</span>]
- } <span class="kw">for</span> <span class="name">post</span> <span class="op op-word">in</span> <span class="name">result</span>]
- }
-
-
-
-<span class="kw">class </span><span class="cls">RecentChangesFeed</span>(<span class="name">FeedProvider</span>):
- <span class="name">identifier</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">recent</span><span class="st st-sg">&#39;</span>
-
- <span class="kw">def </span><span class="fun">get_title</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>):
- <span class="name">_</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">gettext</span>
-
- <span class="kw">return</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Recent Changes</span><span class="st st-sg">&#39;</span>)
-
- <span class="kw">def </span><span class="fun">get_description</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>):
- <span class="name">_</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">gettext</span>
-
- <span class="kw">return</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">The recent posts</span><span class="st st-sg">&#39;</span>)
-
- <span class="kw">def </span><span class="fun">get_feed</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">parameter</span>):
- <span class="name">_</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">gettext</span>
-
- <span class="kw">if</span> <span class="name">parameter</span>:
- <span class="kw">raise</span> <span class="name">FeedNotFound</span>()
- <span class="name">result</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>(
- [<span class="name">posts</span>.<span class="name">c</span>.<span class="name">post_id</span>, <span class="name">posts</span>.<span class="name">c</span>.<span class="name">title</span>, <span class="name">posts</span>.<span class="name">c</span>.<span class="name">text</span>,
- <span class="name">posts</span>.<span class="name">c</span>.<span class="name">timestamp</span>, <span class="name">users</span>.<span class="name">c</span>.<span class="name">username</span>],
- (<span class="name">users</span>.<span class="name">c</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">posts</span>.<span class="name">c</span>.<span class="name">author_id</span>),
- <span class="name">order_by</span><span class="op">=</span>[<span class="name">meta</span>.<span class="name">desc</span>(<span class="name">posts</span>.<span class="name">c</span>.<span class="name">post_id</span>)],
- <span class="name">limit</span><span class="op">=</span><span class="nb nb-int">10</span>
-
- ))
- <span class="kw">return</span> {
- <span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>: <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Recent Changes</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">description</span><span class="st st-sg">&#39;</span>: <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">The most recent posts</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">items</span><span class="st st-sg">&#39;</span>: [{
- <span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>: <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">link</span><span class="st st-sg">&#39;</span>: <span class="st st-sg">&#39;</span><span class="st">post/</span><span class="st st-int">%d</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">description</span><span class="st st-sg">&#39;</span>: <span class="name">parse_and_render</span>(<span class="name">req</span>, <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">text</span><span class="st st-sg">&#39;</span>]),
- <span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>: <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">pub_date</span><span class="st st-sg">&#39;</span>: <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">timestamp</span><span class="st st-sg">&#39;</span>]
- } <span class="kw">for</span> <span class="name">post</span> <span class="op op-word">in</span> <span class="name">result</span>]
- }
-
-
-
-<span class="kw">class </span><span class="cls">FeedDisplay</span>(<span class="name">RequestHandler</span>):
- <span class="name">handler_regexes</span> <span class="op">=</span> [
- <span class="st st-sg">r&#39;</span><span class="st">^feeds/(?P&lt;feed&gt;[a-z0-9_-]+)\.xml$</span><span class="st st-sg">&#39;</span>,
- <span class="st st-sg">r&#39;</span><span class="st">^feeds/(?P&lt;feed&gt;[a-z0-9_-]+)/(?P&lt;parameter&gt;.+)\.xml$</span><span class="st st-sg">&#39;</span>
-
- ]
-
- <span class="kw">def </span><span class="fun">handle_request</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">feed</span>, <span class="name">parameter</span><span class="op">=</span><span class="bn bn-pseudo">None</span>):
- <span class="kw">for</span> <span class="name">feed_provider</span> <span class="op op-word">in</span> <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">get_components</span>(<span class="name">FeedProvider</span>):
- <span class="kw">if</span> <span class="name">feed_provider</span>.<span class="name">identifier</span> <span class="op">==</span> <span class="name">feed</span>:
- <span class="name">data</span> <span class="op">=</span> <span class="name">feed_provider</span>.<span class="name">get_feed</span>(<span class="name">req</span>, <span class="name">parameter</span>)
- <span class="name">feed</span> <span class="op">=</span> <span class="name">Feed</span>(<span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>, <span class="name">data</span>[<span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>],
- <span class="name">data</span>[<span class="st st-sg">&#39;</span><span class="st">description</span><span class="st st-sg">&#39;</span>],
- <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">make_external_url</span>(<span class="st st-sg">&#39;&#39;</span>))
- <span class="kw">try</span>:
- <span class="kw">for</span> <span class="name">item</span> <span class="op op-word">in</span> <span class="name">data</span>[<span class="st st-sg">&#39;</span><span class="st">items</span><span class="st st-sg">&#39;</span>]:
- <span class="name">feed</span>.<span class="name">add_item</span>(<span class="op">**</span><span class="name">item</span>)
- <span class="kw">except</span> <span class="name">FeedNotFound</span>:
- <span class="kw">return</span> <span class="name">PageNotFound</span>()
- <span class="name">resp</span> <span class="op">=</span> <span class="name">Response</span>(<span class="name">feed</span>.<span class="name">generate</span>())
- <span class="name">resp</span>[<span class="st st-sg">&#39;</span><span class="st">Content-Type</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">text/xml</span><span class="st st-sg">&#39;</span>
-
- <span class="kw">return</span> <span class="name">resp</span>
- <span class="kw">return</span> <span class="name">PageNotFound</span>()
-<span class="cm"># -*- coding: utf-8 -*-</span>
-<span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- pocoo.pkg.core.forum
- ~~~~~~~~~~~~~~~~~~~~
-
- Forum Utilities.
-
- :copyright: 2006-2007 by Armin Ronacher, Benjamin Wiegand.
- :license: GNU GPL, see LICENSE for more details.
-</span><span class="st st-db">&quot;&quot;&quot;</span>
-<span class="kw">from </span><span class="cls">datetime</span><span class="kw"> import</span> <span class="name">datetime</span>
-
-<span class="kw">from </span><span class="cls">math</span><span class="kw"> import</span> <span class="name">ceil</span>
-
-<span class="kw">from </span><span class="cls">pocoo</span><span class="kw"> import</span> <span class="name">Component</span>
-<span class="kw">from </span><span class="cls">pocoo.db</span><span class="kw"> import</span> <span class="name">meta</span>, <span class="name">DatabaseModel</span>, <span class="name">lazy_column</span>
-
-<span class="kw">from </span><span class="cls">pocoo.pkg.core.user</span><span class="kw"> import</span> <span class="name">User</span>
-<span class="kw">from </span><span class="cls">pocoo.pkg.core.db</span><span class="kw"> import</span> <span class="name">forums</span>, <span class="name">posts</span>, <span class="name">users</span>, <span class="name">ANONYMOUS_USER_ID</span>
-
-<span class="kw">from </span><span class="cls">pocoo.pkg.core.template</span><span class="kw"> import</span> <span class="name">Pagination</span>, <span class="name">LazyPagination</span>
-<span class="kw">from </span><span class="cls">pocoo.pkg.core.textfmt</span><span class="kw"> import</span> <span class="name">parse_and_render</span>, <span class="name">quote_text</span>
-
-<span class="kw">from </span><span class="cls">pocoo.utils.uri</span><span class="kw"> import</span> <span class="name">urlencode</span>
-<span class="kw">from </span><span class="cls">pocoo.utils.iterators</span><span class="kw"> import</span> <span class="name">inciter</span>
-
-<span class="cm"># for default arguments in Thread</span>
-
-<span class="name">_missing</span> <span class="op">=</span> <span class="bn">object</span>()
-
-
-<span class="kw">class </span><span class="cls">PostProcessor</span>(<span class="name">Component</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Process a posting before it is stored in the database.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">def </span><span class="fun">process_post</span>(<span class="bn bn-pseudo">self</span>, <span class="name">text</span>, <span class="name">title</span>, <span class="name">reason</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- Process a posting.
-
- :param text: Text of the posting, possibly changed by
- another PostProcessor.
- :param title: The subject of the posting
- :param reason: Can be ``&#39;new&#39;`` or ``&#39;edit&#39;``.
-
- :returns:
- * ``True``: store the posting as-is, or
- * ``False``: refuse to store the posting, or
- * a string: use as the new posting text, or
- * a tuple: (text, title) for the posting
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">return</span> <span class="bn bn-pseudo">True</span>
-
-
-<span class="kw">def </span><span class="fun">apply_post_processors</span>(<span class="name">ctx</span>, <span class="name">text</span>, <span class="name">title</span>, <span class="name">reason</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- Apply all `PostProcessor` components to the posting.
-
- Return (``text``, ``title``) tuple.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">for</span> <span class="name">comp</span> <span class="op op-word">in</span> <span class="name">ctx</span>.<span class="name">get_components</span>(<span class="name">PostProcessor</span>):
- <span class="name">rv</span> <span class="op">=</span> <span class="name">comp</span>.<span class="name">process_post</span>(<span class="name">text</span>, <span class="name">title</span>, <span class="st st-sg">&#39;</span><span class="st">new</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">rv</span>:
- <span class="kw">raise</span> <span class="exc">ValueError</span>(<span class="st st-sg">&#39;</span><span class="st">creation of posting denied</span><span class="st st-sg">&#39;</span>)
- <span class="kw">elif</span> <span class="bn">isinstance</span>(<span class="name">rv</span>, <span class="bn">basestring</span>):
- <span class="name">text</span> <span class="op">=</span> <span class="bn">unicode</span>(<span class="name">rv</span>)
- <span class="kw">elif</span> <span class="bn">isinstance</span>(<span class="name">rv</span>, <span class="bn">tuple</span>):
- <span class="name">text</span> <span class="op">=</span> <span class="bn">unicode</span>(<span class="name">rv</span>[<span class="nb nb-int">0</span>])
- <span class="name">title</span> <span class="op">=</span> <span class="bn">unicode</span>(<span class="name">rv</span>[<span class="nb nb-int">1</span>])
- <span class="kw">return</span> <span class="name">text</span>, <span class="name">title</span>
-
-
-<span class="kw">def </span><span class="fun">get_forum_index</span>(<span class="name">req</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Return a list of dicts with forum information so that
- the template can use it.
-
- If the request object has an identified user object attached
- the returned dict will include status information. (read,
- unread)
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">ctx</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">ctx</span>
-
- <span class="name">f</span> <span class="op">=</span> <span class="name">forums</span>.<span class="name">c</span>
- <span class="name">p</span> <span class="op">=</span> <span class="name">posts</span>.<span class="name">c</span>
-
- <span class="name">u</span> <span class="op">=</span> <span class="name">users</span>.<span class="name">c</span>
- <span class="name">columns</span> <span class="op">=</span> [<span class="name">f</span>.<span class="name">forum_id</span>, <span class="name">f</span>.<span class="name">description</span>, <span class="name">f</span>.<span class="name">name</span>, <span class="name">f</span>.<span class="name">link</span>, <span class="name">f</span>.<span class="name">post_count</span>,
- <span class="name">f</span>.<span class="name">thread_count</span>]
-
- <span class="name">categories</span> <span class="op">=</span> []
- <span class="kw">def </span><span class="fun">do</span>(<span class="name">con</span>):
- <span class="kw">for</span> <span class="name">category</span> <span class="op op-word">in</span> <span class="name">con</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>(<span class="name">columns</span>,
- <span class="name">f</span>.<span class="name">parent_id</span> <span class="op">==</span> <span class="bn bn-pseudo">None</span>)):
- <span class="name">category</span> <span class="op">=</span> <span class="bn">dict</span>(<span class="name">category</span>)
- <span class="name">category</span>[<span class="st st-sg">&#39;</span><span class="st">is_external_link</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="bn">bool</span>(<span class="name">category</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">link</span><span class="st st-sg">&#39;</span>))
- <span class="name">category</span>[<span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">forum</span><span class="st st-sg">&#39;</span>, <span class="name">category</span>[<span class="st st-sg">&#39;</span><span class="st">forum_id</span><span class="st st-sg">&#39;</span>])
- <span class="name">forums</span> <span class="op">=</span> []
- <span class="kw">for</span> <span class="name">forum</span> <span class="op op-word">in</span> <span class="name">con</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>(<span class="name">columns</span> <span class="op">+</span> [<span class="name">f</span>.<span class="name">last_post_id</span>],
- <span class="name">f</span>.<span class="name">parent_id</span> <span class="op">==</span> <span class="name">category</span>[<span class="st st-sg">&#39;</span><span class="st">forum_id</span><span class="st st-sg">&#39;</span>])):
- <span class="name">forum</span> <span class="op">=</span> <span class="bn">dict</span>(<span class="name">forum</span>)
- <span class="name">forum</span>[<span class="st st-sg">&#39;</span><span class="st">is_external_link</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="bn">bool</span>(<span class="name">forum</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">link</span><span class="st st-sg">&#39;</span>))
- <span class="name">forum</span>[<span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">forum</span><span class="st st-sg">&#39;</span>, <span class="name">forum</span>[<span class="st st-sg">&#39;</span><span class="st">forum_id</span><span class="st st-sg">&#39;</span>])
- <span class="cm"># get last post</span>
-
- <span class="name">last_post_id</span> <span class="op">=</span> <span class="name">forum</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">last_post_id</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="name">last_post_id</span> <span class="op op-word">is</span> <span class="op op-word">not</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">result</span> <span class="op">=</span> <span class="name">con</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">u</span>.<span class="name">user_id</span>, <span class="name">u</span>.<span class="name">username</span>,
- <span class="name">p</span>.<span class="name">post_id</span>, <span class="name">p</span>.<span class="name">title</span>,
- <span class="name">p</span>.<span class="name">timestamp</span>,
- <span class="name">p</span>.<span class="name">username</span>.<span class="name">label</span>(<span class="st st-sg">&#39;</span><span class="st">guestname</span><span class="st st-sg">&#39;</span>)],
- (<span class="name">p</span>.<span class="name">post_id</span> <span class="op">==</span> <span class="name">last_post_id</span>) <span class="op">&amp;</span>
-
- (<span class="name">p</span>.<span class="name">post_id</span> <span class="op">!=</span> <span class="bn bn-pseudo">None</span>) <span class="op">&amp;</span>
- (<span class="name">u</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">p</span>.<span class="name">author_id</span>)
- ))
- <span class="name">last_post</span> <span class="op">=</span> <span class="bn">dict</span>(<span class="name">result</span>.<span class="name">fetchone</span>())
- <span class="name">username</span> <span class="op">=</span> <span class="name">urlencode</span>(<span class="name">last_post</span>[<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>])
- <span class="name">last_post</span>[<span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> {
- <span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>: <span class="name">last_post</span>[<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">registered</span><span class="st st-sg">&#39;</span>: <span class="name">last_post</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>) <span class="op">&gt;</span> <span class="nb nb-int">0</span>,
- <span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>: <span class="name">last_post</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">guestname</span><span class="st st-sg">&#39;</span>) <span class="op op-word">or</span>\
- <span class="name">last_post</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>: <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">users</span><span class="st st-sg">&#39;</span>, <span class="name">username</span>)
- }
- <span class="name">last_post</span>[<span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">post</span><span class="st st-sg">&#39;</span>, <span class="name">last_post</span>[<span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>])
- <span class="kw">else</span>:
- <span class="name">last_post</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
-
- <span class="name">forum</span>[<span class="st st-sg">&#39;</span><span class="st">last_post</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">last_post</span>
- <span class="name">subforums</span> <span class="op">=</span> []
- <span class="kw">for</span> <span class="name">sf</span> <span class="op op-word">in</span> <span class="name">con</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">f</span>.<span class="name">forum_id</span>, <span class="name">f</span>.<span class="name">name</span>, <span class="name">f</span>.<span class="name">link</span>],
- <span class="name">f</span>.<span class="name">parent_id</span> <span class="op">==</span> <span class="name">forum</span>[<span class="st st-sg">&#39;</span><span class="st">forum_id</span><span class="st st-sg">&#39;</span>])):
- <span class="name">sf</span> <span class="op">=</span> <span class="bn">dict</span>(<span class="name">sf</span>)
- <span class="name">sf</span>[<span class="st st-sg">&#39;</span><span class="st">is_external_url</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="bn">bool</span>(<span class="name">sf</span>[<span class="st st-sg">&#39;</span><span class="st">forum_id</span><span class="st st-sg">&#39;</span>])
- <span class="name">sf</span>[<span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">forum</span><span class="st st-sg">&#39;</span>, <span class="name">sf</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">forum_id</span><span class="st st-sg">&#39;</span>))
- <span class="name">subforums</span>.<span class="name">append</span>(<span class="name">sf</span>)
- <span class="name">forum</span>[<span class="st st-sg">&#39;</span><span class="st">subforums</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">subforums</span>
-
- <span class="name">forums</span>.<span class="name">append</span>(<span class="name">forum</span>)
- <span class="name">category</span>[<span class="st st-sg">&#39;</span><span class="st">forums</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">forums</span>
- <span class="name">categories</span>.<span class="name">append</span>(<span class="name">category</span>)
- <span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">transaction</span>(<span class="name">do</span>)
- <span class="kw">return</span> <span class="name">categories</span>
-
-
-<span class="kw">def </span><span class="fun">get_forum</span>(<span class="name">req</span>, <span class="name">forum_id</span>, <span class="name">page</span><span class="op">=</span><span class="nb nb-int">1</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Return a list of dicts so that the template can use it.
-
- Return ``None`` if the forum does not exist.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="name">ctx</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">ctx</span>
- <span class="name">f</span> <span class="op">=</span> <span class="name">forums</span>.<span class="name">c</span>
-
- <span class="name">p</span> <span class="op">=</span> <span class="name">posts</span>.<span class="name">c</span>
- <span class="name">u</span> <span class="op">=</span> <span class="name">users</span>.<span class="name">c</span>
-
- <span class="name">columns</span> <span class="op">=</span> [<span class="name">f</span>.<span class="name">forum_id</span>, <span class="name">f</span>.<span class="name">description</span>, <span class="name">f</span>.<span class="name">name</span>, <span class="name">f</span>.<span class="name">link</span>, <span class="name">f</span>.<span class="name">post_count</span>,
- <span class="name">f</span>.<span class="name">thread_count</span>]
- <span class="name">forum_columns</span> <span class="op">=</span> [<span class="name">f</span>.<span class="name">forum_id</span>, <span class="name">f</span>.<span class="name">name</span>, <span class="name">f</span>.<span class="name">description</span>, <span class="name">f</span>.<span class="name">link</span>,
- <span class="name">f</span>.<span class="name">post_count</span>, <span class="name">f</span>.<span class="name">thread_count</span>, <span class="name">f</span>.<span class="name">last_post_id</span>]
- <span class="name">sf_columns</span> <span class="op">=</span> [<span class="name">f</span>.<span class="name">forum_id</span>, <span class="name">f</span>.<span class="name">name</span>, <span class="name">f</span>.<span class="name">link</span>]
- <span class="name">thread_columns</span> <span class="op">=</span> [<span class="name">p</span>.<span class="name">post_id</span>, <span class="name">p</span>.<span class="name">title</span>, <span class="name">p</span>.<span class="name">timestamp</span>, <span class="name">u</span>.<span class="name">user_id</span>, <span class="name">u</span>.<span class="name">username</span>,
- <span class="name">p</span>.<span class="name">post_count</span>, <span class="name">p</span>.<span class="name">view_count</span>, <span class="name">p</span>.<span class="name">username</span>.<span class="name">label</span>(<span class="st st-sg">&#39;</span><span class="st">guestname</span><span class="st st-sg">&#39;</span>)]
- <span class="kw">def </span><span class="fun">do</span>(<span class="name">con</span>):
- <span class="name">category</span> <span class="op">=</span> <span class="name">con</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>(<span class="name">columns</span>,
- <span class="name">f</span>.<span class="name">forum_id</span> <span class="op">==</span> <span class="name">forum_id</span>
-
- )).<span class="name">fetchone</span>()
- <span class="kw">if</span> <span class="name">category</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="kw">return</span>
- <span class="name">category</span> <span class="op">=</span> <span class="bn">dict</span>(<span class="name">category</span>)
- <span class="name">category</span>[<span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">forum</span><span class="st st-sg">&#39;</span>, <span class="name">category</span>[<span class="st st-sg">&#39;</span><span class="st">forum_id</span><span class="st st-sg">&#39;</span>])
- <span class="cm"># wo don&#39;t pop link here so that the ForumPage request handler</span>
-
- <span class="cm"># can use the link key for redirecting. That means we don&#39;t</span>
- <span class="cm"># need a second query. But template designers shouldn&#39;t</span>
- <span class="cm"># ever access {{ forum.link }}</span>
- <span class="name">category</span>[<span class="st st-sg">&#39;</span><span class="st">is_external_url</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="bn">bool</span>(<span class="name">category</span>[<span class="st st-sg">&#39;</span><span class="st">link</span><span class="st st-sg">&#39;</span>])
- <span class="name">forums</span> <span class="op">=</span> []
- <span class="kw">for</span> <span class="name">forum</span> <span class="op op-word">in</span> <span class="name">con</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>(<span class="name">forum_columns</span>,
- <span class="name">f</span>.<span class="name">parent_id</span> <span class="op">==</span> <span class="name">category</span>[<span class="st st-sg">&#39;</span><span class="st">forum_id</span><span class="st st-sg">&#39;</span>])):
- <span class="name">forum</span> <span class="op">=</span> <span class="bn">dict</span>(<span class="name">forum</span>)
- <span class="name">forum</span>[<span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">forum</span><span class="st st-sg">&#39;</span>, <span class="name">forum</span>[<span class="st st-sg">&#39;</span><span class="st">forum_id</span><span class="st st-sg">&#39;</span>])
- <span class="cm"># wo don&#39;t pop that here so that the ForumPage request handler</span>
-
- <span class="cm"># can use the link key for redirecting. That means we don&#39;t</span>
- <span class="cm"># need a second query. But template designers shouldn&#39;t</span>
- <span class="cm"># ever access {{ forum.link }}</span>
- <span class="name">forum</span>[<span class="st st-sg">&#39;</span><span class="st">is_external_link</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="bn">bool</span>(<span class="name">forum</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">link</span><span class="st st-sg">&#39;</span>))
- <span class="name">subforums</span> <span class="op">=</span> []
- <span class="kw">for</span> <span class="name">sf</span> <span class="op op-word">in</span> <span class="name">con</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>(<span class="name">sf_columns</span>,
- <span class="name">f</span>.<span class="name">parent_id</span> <span class="op">==</span> <span class="name">forum</span>[<span class="st st-sg">&#39;</span><span class="st">forum_id</span><span class="st st-sg">&#39;</span>])):
- <span class="name">sf</span> <span class="op">=</span> <span class="bn">dict</span>(<span class="name">sf</span>)
- <span class="name">sf</span>[<span class="st st-sg">&#39;</span><span class="st">is_external_link</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="bn">bool</span>(<span class="name">sf</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">link</span><span class="st st-sg">&#39;</span>))
- <span class="name">sf</span>[<span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">forum</span><span class="st st-sg">&#39;</span>, <span class="name">sf</span>[<span class="st st-sg">&#39;</span><span class="st">forum_id</span><span class="st st-sg">&#39;</span>])
- <span class="name">subforums</span>.<span class="name">append</span>(<span class="name">sf</span>)
- <span class="name">forum</span>[<span class="st st-sg">&#39;</span><span class="st">subforums</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">subforums</span>
-
- <span class="cm"># get last post</span>
- <span class="name">last_post_id</span> <span class="op">=</span> <span class="name">forum</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">last_post_id</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="name">last_post_id</span> <span class="op op-word">is</span> <span class="op op-word">not</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">result</span> <span class="op">=</span> <span class="name">con</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">u</span>.<span class="name">user_id</span>, <span class="name">u</span>.<span class="name">username</span>,
- <span class="name">p</span>.<span class="name">post_id</span>, <span class="name">p</span>.<span class="name">title</span>,
- <span class="name">p</span>.<span class="name">username</span>.<span class="name">label</span>(<span class="st st-sg">&#39;</span><span class="st">guestname</span><span class="st st-sg">&#39;</span>),
- <span class="name">p</span>.<span class="name">timestamp</span>],
- (<span class="name">p</span>.<span class="name">post_id</span> <span class="op">==</span> <span class="name">last_post_id</span>) <span class="op">&amp;</span>
-
- (<span class="name">p</span>.<span class="name">post_id</span> <span class="op">!=</span> <span class="bn bn-pseudo">None</span>) <span class="op">&amp;</span>
- (<span class="name">u</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">p</span>.<span class="name">author_id</span>)
- ))
- <span class="name">last_post</span> <span class="op">=</span> <span class="name">result</span>.<span class="name">fetchone</span>()
- <span class="name">last_post</span> <span class="op">=</span> <span class="bn">dict</span>(<span class="name">last_post</span>)
- <span class="name">username</span> <span class="op">=</span> <span class="name">urlencode</span>(<span class="name">last_post</span>[<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>])
- <span class="name">last_post</span>[<span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> {
- <span class="st st-sg">&#39;</span><span class="st">registered</span><span class="st st-sg">&#39;</span>: <span class="name">last_post</span>[<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>] <span class="op">&gt;</span> <span class="nb nb-int">0</span>,
- <span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>: <span class="name">last_post</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>: <span class="name">last_post</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">guestname</span><span class="st st-sg">&#39;</span>) <span class="op op-word">or</span>\
- <span class="name">last_post</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>: <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">users</span><span class="st st-sg">&#39;</span>, <span class="name">username</span>),
- }
- <span class="name">last_post</span>[<span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">post</span><span class="st st-sg">&#39;</span>, <span class="name">last_post</span>[<span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>])
- <span class="kw">else</span>:
- <span class="name">last_post</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
-
- <span class="name">forum</span>[<span class="st st-sg">&#39;</span><span class="st">last_post</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">last_post</span>
- <span class="name">forums</span>.<span class="name">append</span>(<span class="name">forum</span>)
- <span class="name">category</span>[<span class="st st-sg">&#39;</span><span class="st">forums</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">forums</span>
-
- <span class="cm"># pagination</span>
- <span class="kw">def </span><span class="fun">get_page_link</span>(<span class="name">number</span>):
- <span class="name">link</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">forum/</span><span class="st st-int">%d</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">forum_id</span>
-
- <span class="kw">if</span> <span class="name">number</span> <span class="op">&gt;</span> <span class="nb nb-int">1</span>:
- <span class="name">link</span> <span class="op">+=</span> <span class="st st-sg">&#39;</span><span class="st">?page=</span><span class="st st-int">%d</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">number</span>
-
- <span class="kw">return</span> <span class="name">link</span>
- <span class="name">threads_per_page</span> <span class="op">=</span> <span class="name">get_threads_per_page</span>(<span class="name">req</span>)
- <span class="name">page_count</span> <span class="op">=</span> <span class="bn">int</span>(<span class="name">ceil</span>(<span class="name">category</span>[<span class="st st-sg">&#39;</span><span class="st">thread_count</span><span class="st st-sg">&#39;</span>] <span class="op">/</span> (<span class="name">threads_per_page</span> <span class="op">*</span> <span class="nb nb-flt">1.0</span>)))
- <span class="name">pagination</span> <span class="op">=</span> <span class="name">LazyPagination</span>(<span class="name">req</span>, <span class="name">page</span>, <span class="name">threads_per_page</span>, <span class="name">page_count</span>,
- <span class="name">get_page_link</span>)
-
- <span class="name">threads</span> <span class="op">=</span> []
- <span class="kw">for</span> <span class="name">thread</span> <span class="op op-word">in</span> <span class="name">con</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>(<span class="name">thread_columns</span>,
- (<span class="name">p</span>.<span class="name">forum_id</span> <span class="op">==</span> <span class="name">category</span>[<span class="st st-sg">&#39;</span><span class="st">forum_id</span><span class="st st-sg">&#39;</span>]) <span class="op">&amp;</span>
-
- (<span class="name">p</span>.<span class="name">parent_id</span> <span class="op">==</span> <span class="bn bn-pseudo">None</span>) <span class="op">&amp;</span>
- (<span class="name">u</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">p</span>.<span class="name">author_id</span>),
- <span class="name">order_by</span><span class="op">=</span>[<span class="name">meta</span>.<span class="name">desc</span>(<span class="name">p</span>.<span class="name">post_id</span>)],
- <span class="name">limit</span><span class="op">=</span><span class="name">threads_per_page</span>,
- <span class="name">offset</span><span class="op">=</span><span class="name">threads_per_page</span> <span class="op">*</span> (<span class="name">page</span> <span class="op">-</span> <span class="nb nb-int">1</span>)
- )):
- <span class="name">thread</span> <span class="op">=</span> <span class="bn">dict</span>(<span class="name">thread</span>)
- <span class="name">thread</span>[<span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">post</span><span class="st st-sg">&#39;</span>, <span class="name">thread</span>[<span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>])
- <span class="name">thread</span>[<span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> {
- <span class="st st-sg">&#39;</span><span class="st">registered</span><span class="st st-sg">&#39;</span>: <span class="name">thread</span>[<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>] <span class="op">&gt;</span> <span class="nb nb-int">0</span>,
- <span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>: <span class="name">thread</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>: <span class="name">thread</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">guestname</span><span class="st st-sg">&#39;</span>) <span class="op op-word">or</span> <span class="name">thread</span>[<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>: <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">users</span><span class="st st-sg">&#39;</span>, <span class="name">urlencode</span>(<span class="name">thread</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>)))
- }
- <span class="cm"># get last post</span>
-
- <span class="name">result</span> <span class="op">=</span> <span class="name">con</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">u</span>.<span class="name">user_id</span>, <span class="name">u</span>.<span class="name">username</span>, <span class="name">p</span>.<span class="name">post_id</span>,
- <span class="name">p</span>.<span class="name">title</span>, <span class="name">p</span>.<span class="name">timestamp</span>,
- <span class="name">p</span>.<span class="name">username</span>.<span class="name">label</span>(<span class="st st-sg">&#39;</span><span class="st">guestname</span><span class="st st-sg">&#39;</span>)],
- (<span class="name">p</span>.<span class="name">root_post_id</span> <span class="op">==</span> <span class="name">thread</span>[<span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>]) <span class="op">&amp;</span>
-
- (<span class="name">u</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">p</span>.<span class="name">author_id</span>),
- <span class="name">order_by</span><span class="op">=</span>[<span class="name">meta</span>.<span class="name">desc</span>(<span class="name">p</span>.<span class="name">post_id</span>)],
- <span class="name">limit</span><span class="op">=</span><span class="nb nb-int">1</span>
-
- ))
- <span class="name">last_post</span> <span class="op">=</span> <span class="name">result</span>.<span class="name">fetchone</span>()
- <span class="kw">if</span> <span class="name">last_post</span> <span class="op op-word">is</span> <span class="op op-word">not</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">last_post</span> <span class="op">=</span> <span class="bn">dict</span>(<span class="name">last_post</span>)
- <span class="name">username</span> <span class="op">=</span> <span class="name">last_post</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>)
- <span class="name">last_post</span>[<span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> {
- <span class="st st-sg">&#39;</span><span class="st">registered</span><span class="st st-sg">&#39;</span>: <span class="name">last_post</span>[<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>] <span class="op">&gt;</span> <span class="nb nb-int">0</span>,
- <span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>: <span class="name">last_post</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>: <span class="name">last_post</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">guestname</span><span class="st st-sg">&#39;</span>) <span class="op op-word">or</span> <span class="name">username</span>,
- <span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>: <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">users</span><span class="st st-sg">&#39;</span>, <span class="name">urlencode</span>(<span class="name">username</span>)),
- }
- <span class="name">last_post</span>[<span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">post</span><span class="st st-sg">&#39;</span>, <span class="name">last_post</span>[<span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>])
- <span class="name">thread</span>[<span class="st st-sg">&#39;</span><span class="st">last_post</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">last_post</span>
-
- <span class="name">threads</span>.<span class="name">append</span>(<span class="name">thread</span>)
- <span class="name">category</span>[<span class="st st-sg">&#39;</span><span class="st">threads</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">threads</span>
- <span class="name">category</span>[<span class="st st-sg">&#39;</span><span class="st">pagination</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">pagination</span>
-
- <span class="kw">return</span> <span class="name">category</span>
- <span class="kw">return</span> <span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">transaction</span>(<span class="name">do</span>)
-
-
-<span class="kw">def </span><span class="fun">get_forum_pathbar</span>(<span class="name">ctx</span>, <span class="name">forum_id</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Return the pathbar for a given forum.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="name">f</span> <span class="op">=</span> <span class="name">forums</span>.<span class="name">c</span>
- <span class="name">pathbar</span> <span class="op">=</span> []
- <span class="kw">def </span><span class="fun">do</span>(<span class="name">con</span>, <span class="name">fid</span><span class="op">=</span><span class="bn bn-pseudo">None</span>):
- <span class="kw">if</span> <span class="name">fid</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">fid</span> <span class="op">=</span> <span class="name">forum_id</span>
-
- <span class="name">row</span> <span class="op">=</span> <span class="name">con</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">f</span>.<span class="name">parent_id</span>, <span class="name">f</span>.<span class="name">name</span>],
- <span class="name">forums</span>.<span class="name">c</span>.<span class="name">forum_id</span> <span class="op">==</span> <span class="name">fid</span>
-
- )).<span class="name">fetchone</span>()
- <span class="kw">if</span> <span class="name">row</span> <span class="op op-word">is</span> <span class="op op-word">not</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">l</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">forum/</span><span class="st st-int">%d</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">fid</span>
-
- <span class="name">pathbar</span>.<span class="name">append</span>({
- <span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>: <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="name">l</span>),
- <span class="st st-sg">&#39;</span><span class="st">forum_id</span><span class="st st-sg">&#39;</span>: <span class="name">fid</span>,
- <span class="st st-sg">&#39;</span><span class="st">name</span><span class="st st-sg">&#39;</span>: <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">name</span><span class="st st-sg">&#39;</span>]
- })
- <span class="kw">if</span> <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">parent_id</span><span class="st st-sg">&#39;</span>] <span class="op op-word">is</span> <span class="op op-word">not</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">do</span>(<span class="name">con</span>, <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">parent_id</span><span class="st st-sg">&#39;</span>])
- <span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">transaction</span>(<span class="name">do</span>)
- <span class="name">pathbar</span>.<span class="name">reverse</span>()
- <span class="kw">return</span> <span class="name">pathbar</span>
-
-
-<span class="kw">def </span><span class="fun">get_post_pathbar</span>(<span class="name">ctx</span>, <span class="name">post_id</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Returns the pathbar for a given post including all forums and subforums</span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">thread</span> <span class="op">=</span> <span class="name">Thread</span>.<span class="name">by_child</span>(<span class="name">ctx</span>, <span class="name">post_id</span>)
- <span class="name">pathbar</span> <span class="op">=</span> <span class="name">get_forum_pathbar</span>(<span class="name">ctx</span>, <span class="name">thread</span>.<span class="name">forum_id</span>)
- <span class="name">post_list</span> <span class="op">=</span> [ <span class="name">thread</span>.<span class="name">root_post_id</span> ]
- <span class="name">p</span> <span class="op">=</span> <span class="name">posts</span>.<span class="name">c</span>
-
- <span class="kw">if</span> <span class="name">thread</span>.<span class="name">root_post_id</span> <span class="op">!=</span> <span class="bn">int</span>(<span class="name">post_id</span>):
- <span class="name">post_list</span>.<span class="name">append</span>(<span class="name">post_id</span>)
-
- <span class="kw">def </span><span class="fun">do</span>(<span class="name">con</span>):
- <span class="kw">for</span> <span class="bn">id</span> <span class="op op-word">in</span> <span class="name">post_list</span>:
- <span class="name">row</span> <span class="op">=</span> <span class="name">con</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">p</span>.<span class="name">title</span>],
- <span class="name">p</span>.<span class="name">post_id</span> <span class="op">==</span> <span class="bn">id</span>
-
- )).<span class="name">fetchone</span>()
- <span class="name">pathbar</span>.<span class="name">append</span>({
- <span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>: <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">post/</span><span class="st st-int">%s</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="bn">id</span>),
- <span class="st st-sg">&#39;</span><span class="st">name</span><span class="st st-sg">&#39;</span>: <span class="name">row</span>[<span class="st st-db">&quot;</span><span class="st">title</span><span class="st st-db">&quot;</span>]
- })
- <span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">transaction</span>(<span class="name">do</span>)
- <span class="kw">return</span> <span class="name">pathbar</span>
-
-
-<span class="kw">def </span><span class="fun">get_post_tree</span>(<span class="name">req</span>, <span class="name">post_id</span>, <span class="name">inc_view_count</span><span class="op">=</span><span class="bn bn-pseudo">True</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Return a dict with the thread information and a tree of posts.
-
- Per default it will increment the view counter of the
- thread requested. If you don&#39;t want that set ``inc_view_count``
- to ``False``.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="name">ctx</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">ctx</span>
- <span class="name">p</span> <span class="op">=</span> <span class="name">posts</span>.<span class="name">c</span>
-
- <span class="name">u</span> <span class="op">=</span> <span class="name">users</span>.<span class="name">c</span>
- <span class="name">f</span> <span class="op">=</span> <span class="name">forums</span>.<span class="name">c</span>
-
- <span class="cm"># load the post requested and lookup root_post_id</span>
- <span class="name">result</span> <span class="op">=</span> <span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">p</span>.<span class="name">root_post_id</span>, <span class="name">p</span>.<span class="name">post_id</span>, <span class="name">p</span>.<span class="name">title</span>,
- <span class="name">p</span>.<span class="name">text</span>, <span class="name">p</span>.<span class="name">timestamp</span>, <span class="name">u</span>.<span class="name">user_id</span>,
- <span class="name">u</span>.<span class="name">register_date</span>,
- <span class="name">u</span>.<span class="name">username</span>, <span class="name">u</span>.<span class="name">profile</span>, <span class="name">u</span>.<span class="name">post_count</span>,
- <span class="name">p</span>.<span class="name">username</span>.<span class="name">label</span>(<span class="st st-sg">&#39;</span><span class="st">guestname</span><span class="st st-sg">&#39;</span>)],
- (<span class="name">p</span>.<span class="name">post_id</span> <span class="op">==</span> <span class="name">post_id</span>) <span class="op">&amp;</span>
-
- (<span class="name">u</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">p</span>.<span class="name">author_id</span>)
- ))
- <span class="name">row</span> <span class="op">=</span> <span class="name">result</span>.<span class="name">fetchone</span>()
- <span class="kw">if</span> <span class="name">row</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="cm"># XXX: need error return here</span>
-
- <span class="kw">return</span>
- <span class="name">post</span> <span class="op">=</span> <span class="bn">dict</span>(<span class="name">row</span>)
- <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">post</span><span class="st st-sg">&#39;</span>, <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>])
- <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> {
- <span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>: <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>: <span class="name">post</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">guestname</span><span class="st st-sg">&#39;</span>) <span class="op op-word">or</span> <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">self</span><span class="st st-sg">&#39;</span>: <span class="name">req</span>.<span class="name">user</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">registered</span><span class="st st-sg">&#39;</span>: <span class="name">post</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>) <span class="op">&gt;</span> <span class="nb nb-int">0</span>,
- <span class="st st-sg">&#39;</span><span class="st">register_date</span><span class="st st-sg">&#39;</span>: <span class="name">post</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">register_date</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>: <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">users</span><span class="st st-sg">&#39;</span>, <span class="name">urlencode</span>(<span class="name">post</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>))),
- <span class="st st-sg">&#39;</span><span class="st">profile</span><span class="st st-sg">&#39;</span>: <span class="name">post</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">profile</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">post_count</span><span class="st st-sg">&#39;</span>: <span class="name">post</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">post_count</span><span class="st st-sg">&#39;</span>),
- }
- <span class="name">signature</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
-
- <span class="kw">if</span> <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>][<span class="st st-sg">&#39;</span><span class="st">profile</span><span class="st st-sg">&#39;</span>].<span class="name">get</span>(<span class="st st-sg">&#39;</span><span class="st">signature</span><span class="st st-sg">&#39;</span>):
- <span class="name">signature</span> <span class="op">=</span> <span class="name">parse_and_render</span>(<span class="name">req</span>, <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>][<span class="st st-sg">&#39;</span><span class="st">profile</span><span class="st st-sg">&#39;</span>][<span class="st st-sg">&#39;</span><span class="st">signature</span><span class="st st-sg">&#39;</span>],
- <span class="name">signature</span><span class="op">=</span><span class="bn bn-pseudo">True</span>)
- <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>][<span class="st st-sg">&#39;</span><span class="st">signature</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">signature</span>
-
- <span class="cm">#XXX: cache here</span>
- <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">parsed_text</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">parse_and_render</span>(<span class="name">req</span>, <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">text</span><span class="st st-sg">&#39;</span>])
- <span class="name">root_post_id</span> <span class="op">=</span> <span class="name">post</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">root_post_id</span><span class="st st-sg">&#39;</span>)
-
- <span class="name">result</span> <span class="op">=</span> <span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">p</span>.<span class="name">post_id</span>, <span class="name">p</span>.<span class="name">root_post_id</span>, <span class="name">p</span>.<span class="name">title</span>,
- <span class="name">p</span>.<span class="name">parent_id</span>, <span class="name">p</span>.<span class="name">timestamp</span>, <span class="name">u</span>.<span class="name">username</span>,
- <span class="name">u</span>.<span class="name">user_id</span>, <span class="name">p</span>.<span class="name">username</span>.<span class="name">label</span>(<span class="st st-sg">&#39;</span><span class="st">guestname</span><span class="st st-sg">&#39;</span>)],
- (<span class="name">p</span>.<span class="name">root_post_id</span> <span class="op">==</span> <span class="name">root_post_id</span>) <span class="op">&amp;</span>
-
- (<span class="name">u</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">p</span>.<span class="name">author_id</span>)
- ))
-
- <span class="kw">def </span><span class="fun">prepare</span>(<span class="name">row</span>):
- <span class="name">d</span> <span class="op">=</span> <span class="bn">dict</span>(<span class="name">row</span>)
- <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> {
- <span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>: <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>: <span class="name">d</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">guestname</span><span class="st st-sg">&#39;</span>) <span class="op op-word">or</span> <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">self</span><span class="st st-sg">&#39;</span>: <span class="name">req</span>.<span class="name">user</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">registered</span><span class="st st-sg">&#39;</span>: <span class="name">d</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>) <span class="op">&gt;</span> <span class="nb nb-int">0</span>,
- <span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>: <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">users</span><span class="st st-sg">&#39;</span>, <span class="name">urlencode</span>(<span class="name">d</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>))),
- }
- <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">active</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>] <span class="op">==</span> <span class="name">post_id</span>
-
- <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">post</span><span class="st st-sg">&#39;</span>, <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>])
- <span class="kw">return</span> <span class="name">d</span>
-
- <span class="cm"># map threads by their parents and prepare the context</span>
- <span class="name">mapping</span> <span class="op">=</span> {}
- <span class="name">flat_posts</span> <span class="op">=</span> []
- <span class="kw">for</span> <span class="name">row</span> <span class="op op-word">in</span> <span class="name">result</span>:
- <span class="name">tmp</span> <span class="op">=</span> <span class="name">prepare</span>(<span class="name">row</span>)
- <span class="name">mapping</span>.<span class="name">setdefault</span>(<span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">parent_id</span><span class="st st-sg">&#39;</span>], []).<span class="name">append</span>(<span class="name">tmp</span>)
- <span class="name">flat_posts</span>.<span class="name">append</span>(<span class="name">tmp</span>)
- <span class="name">root</span> <span class="op">=</span> <span class="name">mapping</span>.<span class="name">pop</span>(<span class="bn bn-pseudo">None</span>, <span class="bn bn-pseudo">None</span>)
- <span class="kw">if</span> <span class="name">root</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="kw">return</span>
-
- <span class="kw">assert</span> <span class="bn">len</span>(<span class="name">root</span>) <span class="op">==</span> <span class="nb nb-int">1</span>, <span class="st st-sg">&#39;</span><span class="st">something went seriously wrong</span><span class="st st-sg">&#39;</span>
-
- <span class="cm"># reassamble thread</span>
-
- <span class="kw">def </span><span class="fun">reassamble</span>(<span class="name">nodes</span>):
- <span class="kw">for</span> <span class="name">node</span> <span class="op op-word">in</span> <span class="name">nodes</span>:
- <span class="name">node</span>[<span class="st st-sg">&#39;</span><span class="st">children</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">n</span> <span class="op">=</span> <span class="name">mapping</span>.<span class="name">pop</span>(<span class="name">node</span>[<span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>], [])
- <span class="name">reassamble</span>(<span class="name">n</span>)
- <span class="name">reassamble</span>(<span class="name">root</span>)
-
- <span class="cm"># increment view_count</span>
-
- <span class="kw">if</span> <span class="name">inc_view_count</span>:
- <span class="name">result</span> <span class="op">=</span> <span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">p</span>.<span class="name">view_count</span>],
- <span class="name">p</span>.<span class="name">post_id</span> <span class="op">==</span> <span class="name">root_post_id</span>))
- <span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">posts</span>.<span class="name">update</span>(<span class="name">p</span>.<span class="name">post_id</span> <span class="op">==</span> <span class="name">root_post_id</span>),
- <span class="name">view_count</span> <span class="op">=</span> <span class="name">result</span>.<span class="name">fetchone</span>()[<span class="nb nb-int">0</span>] <span class="op">+</span> <span class="nb nb-int">1</span>
-
- )
-
-
- <span class="cm"># fetch overall information for whole thread</span>
- <span class="name">result</span> <span class="op">=</span> <span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">p</span>.<span class="name">post_id</span>, <span class="name">p</span>.<span class="name">title</span>, <span class="name">p</span>.<span class="name">forum_id</span>,
- <span class="name">p</span>.<span class="name">timestamp</span>, <span class="name">u</span>.<span class="name">user_id</span>, <span class="name">u</span>.<span class="name">username</span>,
- <span class="name">f</span>.<span class="name">name</span>, <span class="name">p</span>.<span class="name">username</span>.<span class="name">label</span>(<span class="st st-sg">&#39;</span><span class="st">guestname</span><span class="st st-sg">&#39;</span>)],
- (<span class="name">p</span>.<span class="name">post_id</span> <span class="op">==</span> <span class="name">root_post_id</span>) <span class="op">&amp;</span>
-
- (<span class="name">u</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">p</span>.<span class="name">author_id</span>) <span class="op">&amp;</span>
- (<span class="name">f</span>.<span class="name">forum_id</span> <span class="op">==</span> <span class="name">p</span>.<span class="name">forum_id</span>)
- ))
- <span class="name">row</span> <span class="op">=</span> <span class="name">result</span>.<span class="name">fetchone</span>()
- <span class="kw">return</span> {
- <span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>: <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>: <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">post</span><span class="st st-sg">&#39;</span>, <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>]),
- <span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>: <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">timestamp</span><span class="st st-sg">&#39;</span>: <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">timestamp</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">forum</span><span class="st st-sg">&#39;</span>: {
- <span class="st st-sg">&#39;</span><span class="st">forum_id</span><span class="st st-sg">&#39;</span>: <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">forum_id</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">name</span><span class="st st-sg">&#39;</span>: <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">name</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>: <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">forum</span><span class="st st-sg">&#39;</span>, <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">forum_id</span><span class="st st-sg">&#39;</span>]),
- },
- <span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>: {
- <span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>: <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">registered</span><span class="st st-sg">&#39;</span>: <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>] <span class="op">&gt;</span> <span class="nb nb-int">0</span>,
- <span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>: <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">guestname</span><span class="st st-sg">&#39;</span>] <span class="op op-word">or</span> <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>: <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">users</span><span class="st st-sg">&#39;</span>, <span class="name">urlencode</span>(<span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>])),
- },
- <span class="st st-sg">&#39;</span><span class="st">posts</span><span class="st st-sg">&#39;</span>: <span class="name">root</span>,
- <span class="st st-sg">&#39;</span><span class="st">post</span><span class="st st-sg">&#39;</span>: <span class="name">post</span>
-
- }
-
-
-<span class="kw">def </span><span class="fun">get_post</span>(<span class="name">req</span>, <span class="name">post_id</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Return exactly one post. If the post does not exist the result
- will be ``None``.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">ctx</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">ctx</span>
-
- <span class="name">p</span> <span class="op">=</span> <span class="name">posts</span>.<span class="name">c</span>
- <span class="name">u</span> <span class="op">=</span> <span class="name">users</span>.<span class="name">c</span>
-
- <span class="name">r</span> <span class="op">=</span> <span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">p</span>.<span class="name">post_id</span>, <span class="name">p</span>.<span class="name">title</span>, <span class="name">p</span>.<span class="name">text</span>, <span class="name">p</span>.<span class="name">timestamp</span>,
- <span class="name">u</span>.<span class="name">user_id</span>, <span class="name">u</span>.<span class="name">username</span>, <span class="name">u</span>.<span class="name">profile</span>,
- <span class="name">u</span>.<span class="name">register_date</span>,
- <span class="name">u</span>.<span class="name">post_count</span>, <span class="name">p</span>.<span class="name">username</span>.<span class="name">label</span>(<span class="st st-sg">&#39;</span><span class="st">guestname</span><span class="st st-sg">&#39;</span>)],
- (<span class="name">p</span>.<span class="name">post_id</span> <span class="op">==</span> <span class="name">post_id</span>) <span class="op">&amp;</span>
-
- (<span class="name">u</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">p</span>.<span class="name">author_id</span>)
- ))
- <span class="name">row</span> <span class="op">=</span> <span class="name">r</span>.<span class="name">fetchone</span>()
- <span class="kw">if</span> <span class="name">row</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="kw">return</span>
-
- <span class="name">post</span> <span class="op">=</span> <span class="bn">dict</span>(<span class="name">row</span>)
- <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">post</span><span class="st st-sg">&#39;</span>, <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>])
- <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> {
- <span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>: <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>: <span class="name">post</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">guestname</span><span class="st st-sg">&#39;</span>) <span class="op op-word">or</span> <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">self</span><span class="st st-sg">&#39;</span>: <span class="name">req</span>.<span class="name">user</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">registered</span><span class="st st-sg">&#39;</span>: <span class="name">post</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>) <span class="op">&gt;</span> <span class="nb nb-int">0</span>,
- <span class="st st-sg">&#39;</span><span class="st">register_date</span><span class="st st-sg">&#39;</span>: <span class="name">post</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">register_date</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>: <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">users</span><span class="st st-sg">&#39;</span>, <span class="name">urlencode</span>(<span class="name">post</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>))),
- <span class="st st-sg">&#39;</span><span class="st">profile</span><span class="st st-sg">&#39;</span>: <span class="name">post</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">profile</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">post_count</span><span class="st st-sg">&#39;</span>: <span class="name">post</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">post_count</span><span class="st st-sg">&#39;</span>)
- }
- <span class="name">signature</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
-
- <span class="kw">if</span> <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>][<span class="st st-sg">&#39;</span><span class="st">profile</span><span class="st st-sg">&#39;</span>].<span class="name">get</span>(<span class="st st-sg">&#39;</span><span class="st">signature</span><span class="st st-sg">&#39;</span>):
- <span class="name">signature</span> <span class="op">=</span> <span class="name">parse_and_render</span>(<span class="name">req</span>, <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>][<span class="st st-sg">&#39;</span><span class="st">profile</span><span class="st st-sg">&#39;</span>][<span class="st st-sg">&#39;</span><span class="st">signature</span><span class="st st-sg">&#39;</span>])
- <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>][<span class="st st-sg">&#39;</span><span class="st">signature</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">signature</span>
-
- <span class="cm">#XXX: cache here</span>
- <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">parsed_text</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">parse_and_render</span>(<span class="name">req</span>, <span class="name">post</span>[<span class="st st-sg">&#39;</span><span class="st">text</span><span class="st st-sg">&#39;</span>])
- <span class="kw">return</span> <span class="name">post</span>
-
-
-<span class="kw">def </span><span class="fun">get_last_posts</span>(<span class="name">req</span>, <span class="name">root_post_id</span>, <span class="name">n</span><span class="op">=</span><span class="nb nb-int">1</span>, <span class="name">offset</span><span class="op">=</span><span class="nb nb-int">0</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- Returns a flat view of the n latest posts that are
- children of root_post_id.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">p</span> <span class="op">=</span> <span class="name">posts</span>.<span class="name">c</span>
- <span class="name">u</span> <span class="op">=</span> <span class="name">users</span>.<span class="name">c</span>
-
- <span class="name">result</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">p</span>.<span class="name">post_id</span>, <span class="name">p</span>.<span class="name">title</span>, <span class="name">p</span>.<span class="name">text</span>,
- <span class="name">p</span>.<span class="name">timestamp</span>, <span class="name">u</span>.<span class="name">username</span>,
- <span class="name">u</span>.<span class="name">user_id</span>, <span class="name">u</span>.<span class="name">profile</span>,
- <span class="name">u</span>.<span class="name">post_count</span>, <span class="name">u</span>.<span class="name">register_date</span>,
- <span class="name">p</span>.<span class="name">username</span>.<span class="name">label</span>(<span class="st st-sg">&#39;</span><span class="st">guestname</span><span class="st st-sg">&#39;</span>)],
- (<span class="name">p</span>.<span class="name">root_post_id</span> <span class="op">==</span> <span class="name">root_post_id</span>) <span class="op">&amp;</span>
-
- (<span class="name">u</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">p</span>.<span class="name">author_id</span>),
- <span class="name">order_by</span><span class="op">=</span>[<span class="name">meta</span>.<span class="name">desc</span>(<span class="name">p</span>.<span class="name">post_id</span>)],
- <span class="name">limit</span><span class="op">=</span><span class="name">n</span>,
- <span class="name">offset</span><span class="op">=</span><span class="name">offset</span>
-
- ))
-
- <span class="kw">def </span><span class="fun">prepare</span>(<span class="name">row</span>):
- <span class="name">d</span> <span class="op">=</span> <span class="bn">dict</span>(<span class="name">row</span>)
- <span class="name">user_id</span> <span class="op">=</span> <span class="name">d</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>)
- <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">req</span>.<span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">post</span><span class="st st-sg">&#39;</span>, <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>])
- <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> {
- <span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>: <span class="name">user_id</span>,
- <span class="st st-sg">&#39;</span><span class="st">registered</span><span class="st st-sg">&#39;</span>: <span class="name">user_id</span> <span class="op">&gt;</span> <span class="nb nb-int">0</span>,
- <span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>: <span class="name">d</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">guestname</span><span class="st st-sg">&#39;</span>) <span class="op op-word">or</span> <span class="name">d</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">self</span><span class="st st-sg">&#39;</span>: <span class="name">req</span>.<span class="name">user</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">user_id</span>,
- <span class="st st-sg">&#39;</span><span class="st">profile</span><span class="st st-sg">&#39;</span>: <span class="name">d</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">profile</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">post_count</span><span class="st st-sg">&#39;</span>: <span class="name">d</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">post_count</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">register_date</span><span class="st st-sg">&#39;</span>: <span class="name">d</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">register_date</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>: <span class="name">req</span>.<span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">users</span><span class="st st-sg">&#39;</span>, <span class="name">urlencode</span>(<span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>])),
- }
- <span class="name">signature</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
-
- <span class="kw">if</span> <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>][<span class="st st-sg">&#39;</span><span class="st">profile</span><span class="st st-sg">&#39;</span>].<span class="name">get</span>(<span class="st st-sg">&#39;</span><span class="st">signature</span><span class="st st-sg">&#39;</span>):
- <span class="name">signature</span> <span class="op">=</span> <span class="name">parse_and_render</span>(<span class="name">req</span>, <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>][<span class="st st-sg">&#39;</span><span class="st">profile</span><span class="st st-sg">&#39;</span>][<span class="st st-sg">&#39;</span><span class="st">signature</span><span class="st st-sg">&#39;</span>],
- <span class="name">signature</span><span class="op">=</span><span class="bn bn-pseudo">True</span>)
- <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>][<span class="st st-sg">&#39;</span><span class="st">signature</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">signature</span>
-
- <span class="cm">#XXX: this doesn&#39;t cache by now</span>
- <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">parsed_text</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">parse_and_render</span>(<span class="name">req</span>, <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">text</span><span class="st st-sg">&#39;</span>])
- <span class="kw">return</span> <span class="name">d</span>
-
- <span class="name">post_list</span> <span class="op">=</span> [<span class="name">prepare</span>(<span class="name">row</span>) <span class="kw">for</span> <span class="name">row</span> <span class="op op-word">in</span> <span class="name">result</span>]
- <span class="kw">return</span> <span class="name">post_list</span>
-
-
-<span class="kw">def </span><span class="fun">get_flat_view</span>(<span class="name">req</span>, <span class="name">post_id</span>, <span class="name">inc_view_count</span><span class="op">=</span><span class="bn bn-pseudo">True</span>, <span class="name">order</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">asc</span><span class="st st-sg">&#39;</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- Returns the flat view of an post and the next n posts so
- that the template can render a page. n is the number of
- posts per page defined in either the user settings or the
- global forum configuration.
-
- Per default it will increment the view counter of the
- thread requested. If you don&#39;t want that set ``inc_view_count``
- to ``False``.
-
- If you want to get the latest post first, set ``order``
- to ``&#39;desc&#39;``.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">ctx</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">ctx</span>
- <span class="name">p</span> <span class="op">=</span> <span class="name">posts</span>.<span class="name">c</span>
-
- <span class="name">f</span> <span class="op">=</span> <span class="name">forums</span>.<span class="name">c</span>
- <span class="name">u</span> <span class="op">=</span> <span class="name">users</span>.<span class="name">c</span>
-
- <span class="cm"># find root_post_id</span>
- <span class="name">result</span> <span class="op">=</span> <span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">p</span>.<span class="name">root_post_id</span>],
- <span class="name">p</span>.<span class="name">post_id</span> <span class="op">==</span> <span class="name">post_id</span>
-
- ))
- <span class="cm"># XXX: This raises TypeError on failure.</span>
- <span class="name">root_post_id</span> <span class="op">=</span> <span class="name">result</span>.<span class="name">fetchone</span>()[<span class="nb nb-int">0</span>]
-
- <span class="cm"># select all post ids to calculate the position of the post on a page</span>
-
- <span class="cm"># the purpose of this calculation is to find the first and last post</span>
- <span class="cm"># on the page if the post_id given the function</span>
- <span class="name">result</span> <span class="op">=</span> <span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">p</span>.<span class="name">post_id</span>],
- <span class="name">p</span>.<span class="name">root_post_id</span> <span class="op">==</span> <span class="name">root_post_id</span>
-
- ))
- <span class="name">posts_per_page</span> <span class="op">=</span> <span class="name">get_posts_per_page</span>(<span class="name">req</span>)
- <span class="name">postlist</span> <span class="op">=</span> [<span class="name">row</span>[<span class="nb nb-int">0</span>] <span class="kw">for</span> <span class="name">row</span> <span class="op op-word">in</span> <span class="name">result</span>]
- <span class="name">post_index</span> <span class="op">=</span> <span class="name">postlist</span>.<span class="name">index</span>(<span class="name">post_id</span>)
- <span class="name">page</span> <span class="op">=</span> <span class="name">post_index</span> <span class="op">//</span> <span class="name">posts_per_page</span>
-
- <span class="name">page_start</span> <span class="op">=</span> <span class="name">page</span> <span class="op">*</span> <span class="name">posts_per_page</span>
- <span class="name">post_range_low</span> <span class="op">=</span> <span class="name">postlist</span>[<span class="name">page_start</span>]
- <span class="name">post_range_high</span> <span class="op">=</span> <span class="name">postlist</span>[<span class="name">page_start</span>:<span class="name">page_start</span> <span class="op">+</span> <span class="name">posts_per_page</span>][<span class="op">-</span><span class="nb nb-int">1</span>]
-
- <span class="name">pagination</span> <span class="op">=</span> <span class="name">Pagination</span>(<span class="name">req</span>, <span class="name">postlist</span>, <span class="name">page_start</span>, <span class="name">posts_per_page</span>,
- <span class="kw">lambda</span> <span class="name">x</span>: <span class="st st-sg">&#39;</span><span class="st">post/</span><span class="st st-int">%d</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">x</span>)
-
- <span class="name">orderfunc</span> <span class="op">=</span> (<span class="name">order</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">desc</span><span class="st st-sg">&#39;</span> <span class="op op-word">and</span> <span class="name">meta</span>.<span class="name">desc</span> <span class="op op-word">or</span> <span class="name">meta</span>.<span class="name">asc</span>)
- <span class="cm"># select matching posts</span>
-
- <span class="name">result</span> <span class="op">=</span> <span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">p</span>.<span class="name">post_id</span>, <span class="name">p</span>.<span class="name">root_post_id</span>, <span class="name">p</span>.<span class="name">title</span>,
- <span class="name">p</span>.<span class="name">forum_id</span>, <span class="name">p</span>.<span class="name">parent_id</span>, <span class="name">p</span>.<span class="name">text</span>,
- <span class="name">p</span>.<span class="name">timestamp</span>, <span class="name">u</span>.<span class="name">username</span>, <span class="name">u</span>.<span class="name">user_id</span>,
- <span class="name">u</span>.<span class="name">profile</span>, <span class="name">u</span>.<span class="name">post_count</span>, <span class="name">u</span>.<span class="name">register_date</span>,
- <span class="name">p</span>.<span class="name">username</span>.<span class="name">label</span>(<span class="st st-sg">&#39;</span><span class="st">guestname</span><span class="st st-sg">&#39;</span>)],
- (<span class="name">p</span>.<span class="name">root_post_id</span> <span class="op">==</span> <span class="name">root_post_id</span>) <span class="op">&amp;</span>
-
- (<span class="name">p</span>.<span class="name">post_id</span> <span class="op">&gt;=</span> <span class="name">post_range_low</span>) <span class="op">&amp;</span>
- (<span class="name">p</span>.<span class="name">post_id</span> <span class="op">&lt;=</span> <span class="name">post_range_high</span>) <span class="op">&amp;</span>
-
- (<span class="name">u</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">p</span>.<span class="name">author_id</span>),
- <span class="name">order_by</span><span class="op">=</span>[<span class="name">orderfunc</span>(<span class="name">p</span>.<span class="name">post_id</span>)]
- ))
-
- <span class="kw">def </span><span class="fun">prepare</span>(<span class="name">number</span>, <span class="name">row</span>):
- <span class="name">d</span> <span class="op">=</span> <span class="bn">dict</span>(<span class="name">row</span>)
- <span class="name">user_id</span> <span class="op">=</span> <span class="name">d</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>)
- <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">post_number</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">number</span>
-
- <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">post</span><span class="st st-sg">&#39;</span>, <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>])
- <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> {
- <span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>: <span class="name">user_id</span>,
- <span class="st st-sg">&#39;</span><span class="st">registered</span><span class="st st-sg">&#39;</span>: <span class="name">user_id</span> <span class="op">&gt;</span> <span class="nb nb-int">0</span>,
- <span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>: <span class="name">d</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">guestname</span><span class="st st-sg">&#39;</span>) <span class="op op-word">or</span> <span class="name">d</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">self</span><span class="st st-sg">&#39;</span>: <span class="name">req</span>.<span class="name">user</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">user_id</span>,
- <span class="st st-sg">&#39;</span><span class="st">profile</span><span class="st st-sg">&#39;</span>: <span class="name">d</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">profile</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">post_count</span><span class="st st-sg">&#39;</span>: <span class="name">d</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">post_count</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">register_date</span><span class="st st-sg">&#39;</span>: <span class="name">d</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">register_date</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>: <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">users</span><span class="st st-sg">&#39;</span>, <span class="name">urlencode</span>(<span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>])),
- }
- <span class="name">signature</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
-
- <span class="kw">if</span> <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>][<span class="st st-sg">&#39;</span><span class="st">profile</span><span class="st st-sg">&#39;</span>].<span class="name">get</span>(<span class="st st-sg">&#39;</span><span class="st">signature</span><span class="st st-sg">&#39;</span>):
- <span class="name">signature</span> <span class="op">=</span> <span class="name">parse_and_render</span>(<span class="name">req</span>, <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>][<span class="st st-sg">&#39;</span><span class="st">profile</span><span class="st st-sg">&#39;</span>][<span class="st st-sg">&#39;</span><span class="st">signature</span><span class="st st-sg">&#39;</span>],
- <span class="name">signature</span><span class="op">=</span><span class="bn bn-pseudo">True</span>)
- <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>][<span class="st st-sg">&#39;</span><span class="st">signature</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">signature</span>
-
- <span class="cm">#XXX: this doesn&#39;t cache by now</span>
- <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">parsed_text</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">parse_and_render</span>(<span class="name">req</span>, <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">text</span><span class="st st-sg">&#39;</span>])
- <span class="kw">return</span> <span class="name">d</span>
-
- <span class="name">real_posts</span> <span class="op">=</span> [<span class="name">prepare</span>(<span class="name">num</span>, <span class="name">row</span>) <span class="kw">for</span> <span class="name">num</span>, <span class="name">row</span> <span class="op op-word">in</span> <span class="name">inciter</span>(<span class="name">result</span>, <span class="name">page_start</span>)]
-
- <span class="cm"># increment view_count</span>
-
- <span class="kw">if</span> <span class="name">inc_view_count</span>:
- <span class="name">result</span> <span class="op">=</span> <span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">p</span>.<span class="name">view_count</span>],
- <span class="name">p</span>.<span class="name">post_id</span> <span class="op">==</span> <span class="name">root_post_id</span>))
- <span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">posts</span>.<span class="name">update</span>(<span class="name">p</span>.<span class="name">post_id</span> <span class="op">==</span> <span class="name">root_post_id</span>),
- <span class="name">view_count</span> <span class="op">=</span> <span class="name">result</span>.<span class="name">fetchone</span>()[<span class="nb nb-int">0</span>] <span class="op">+</span> <span class="nb nb-int">1</span>
-
- )
-
- <span class="cm"># and another query for the overview page</span>
- <span class="name">result</span> <span class="op">=</span> <span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">p</span>.<span class="name">post_id</span>, <span class="name">p</span>.<span class="name">title</span>, <span class="name">p</span>.<span class="name">forum_id</span>,
- <span class="name">p</span>.<span class="name">timestamp</span>, <span class="name">u</span>.<span class="name">user_id</span>, <span class="name">u</span>.<span class="name">username</span>,
- <span class="name">f</span>.<span class="name">name</span>, <span class="name">p</span>.<span class="name">username</span>.<span class="name">label</span>(<span class="st st-sg">&#39;</span><span class="st">guestname</span><span class="st st-sg">&#39;</span>)],
- (<span class="name">p</span>.<span class="name">post_id</span> <span class="op">==</span> <span class="name">root_post_id</span>) <span class="op">&amp;</span>
-
- (<span class="name">u</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">p</span>.<span class="name">author_id</span>) <span class="op">&amp;</span>
- (<span class="name">f</span>.<span class="name">forum_id</span> <span class="op">==</span> <span class="name">p</span>.<span class="name">forum_id</span>)
- ))
- <span class="name">row</span> <span class="op">=</span> <span class="name">result</span>.<span class="name">fetchone</span>()
- <span class="kw">return</span> {
- <span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>: <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>: <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">post</span><span class="st st-sg">&#39;</span>, <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>]),
- <span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>: <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">timestamp</span><span class="st st-sg">&#39;</span>: <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">timestamp</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">forum</span><span class="st st-sg">&#39;</span>: {
- <span class="st st-sg">&#39;</span><span class="st">forum_id</span><span class="st st-sg">&#39;</span>: <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">forum_id</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">name</span><span class="st st-sg">&#39;</span>: <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">name</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>: <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">forum</span><span class="st st-sg">&#39;</span>, <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">forum_id</span><span class="st st-sg">&#39;</span>]),
- },
- <span class="st st-sg">&#39;</span><span class="st">author</span><span class="st st-sg">&#39;</span>: {
- <span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>: <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>: <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">guestname</span><span class="st st-sg">&#39;</span>] <span class="op op-word">or</span> <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>: <span class="name">ctx</span>.<span class="name">make_url</span>(<span class="st st-sg">&#39;</span><span class="st">users</span><span class="st st-sg">&#39;</span>, <span class="name">urlencode</span>(<span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>])),
- },
- <span class="st st-sg">&#39;</span><span class="st">pagination</span><span class="st st-sg">&#39;</span>: <span class="name">pagination</span>,
- <span class="st st-sg">&#39;</span><span class="st">posts</span><span class="st st-sg">&#39;</span>: <span class="name">real_posts</span>
-
- }
-
-
-<span class="kw">def </span><span class="fun">get_last_thread_change</span>(<span class="name">req</span>, <span class="name">post_id</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Return the timestamp of the last change in the thread.
- ``post_id`` must be the root_post_id, there is no further
- check done.
-
- Return ``None`` if something in the query went wrong (eg.
- no thread with the requested root_post_id exists)
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="cm">#XXX: doesn&#39;t cover edits</span>
-
- <span class="name">result</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">posts</span>.<span class="name">c</span>.<span class="name">timestamp</span>],
- (<span class="name">posts</span>.<span class="name">c</span>.<span class="name">root_post_id</span> <span class="op">==</span> <span class="name">post_id</span>),
- <span class="name">order_by</span><span class="op">=</span>[<span class="name">meta</span>.<span class="name">desc</span>(<span class="name">posts</span>.<span class="name">c</span>.<span class="name">post_id</span>)],
- <span class="name">limit</span><span class="op">=</span><span class="nb nb-int">1</span>
-
- ))
- <span class="name">row</span> <span class="op">=</span> <span class="name">result</span>.<span class="name">fetchone</span>()
- <span class="kw">if</span> <span class="name">row</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="kw">return</span>
-
- <span class="kw">return</span> <span class="name">row</span>[<span class="nb nb-int">0</span>]
-
-
-<span class="kw">def </span><span class="fun">get_posts_per_page</span>(<span class="name">req</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Return the number of posts a user wishes to display on the
- flat view page.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">try</span>:
- <span class="name">posts_per_page</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">user</span>.<span class="name">settings</span>[<span class="st st-sg">&#39;</span><span class="st">posts_per_page</span><span class="st st-sg">&#39;</span>]
- <span class="kw">if</span> <span class="name">posts_per_page</span> <span class="op op-word">is</span> <span class="op op-word">not</span> <span class="bn bn-pseudo">None</span>:
- <span class="kw">return</span> <span class="name">posts_per_page</span>
-
- <span class="kw">except</span> <span class="exc">KeyError</span>:
- <span class="kw">pass</span>
- <span class="kw">return</span> <span class="name">req</span>.<span class="name">ctx</span>.<span class="name">cfg</span>.<span class="name">get_int</span>(<span class="st st-sg">&#39;</span><span class="st">board</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">posts_per_page</span><span class="st st-sg">&#39;</span>, <span class="nb nb-int">15</span>)
-
-
-
-<span class="kw">def </span><span class="fun">get_threads_per_page</span>(<span class="name">req</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Return the number of posts a users whishes to display on the
- viewforum page.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">try</span>:
- <span class="name">threads_per_page</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">user</span>.<span class="name">settings</span>[<span class="st st-sg">&#39;</span><span class="st">threads_per_page</span><span class="st st-sg">&#39;</span>]
- <span class="kw">if</span> <span class="name">threads_per_page</span> <span class="op op-word">is</span> <span class="op op-word">not</span> <span class="bn bn-pseudo">None</span>:
- <span class="kw">return</span> <span class="name">threads_per_page</span>
-
- <span class="kw">except</span> <span class="exc">KeyError</span>:
- <span class="kw">pass</span>
- <span class="kw">return</span> <span class="name">req</span>.<span class="name">ctx</span>.<span class="name">cfg</span>.<span class="name">get_int</span>(<span class="st st-sg">&#39;</span><span class="st">board</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">threads_per_page</span><span class="st st-sg">&#39;</span>, <span class="nb nb-int">20</span>)
-
-
-
-<span class="kw">def </span><span class="fun">get_view_mode</span>(<span class="name">req</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Return the display mode a user has defined in the user settings
- or fall back to the default mode from the pocoo.conf.
-
- :return: either ``&#39;flat&#39;`` or ``&#39;threaded&#39;``.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">val</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">user</span>.<span class="name">settings</span>.<span class="name">get</span>(<span class="st st-sg">&#39;</span><span class="st">view_mode</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="name">val</span> <span class="op op-word">in</span> (<span class="st st-sg">&#39;</span><span class="st">flat</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">threaded</span><span class="st st-sg">&#39;</span>):
- <span class="kw">return</span> <span class="name">val</span>
-
- <span class="name">val</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">ctx</span>.<span class="name">cfg</span>.<span class="name">get</span>(<span class="st st-sg">&#39;</span><span class="st">board</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">default_view</span><span class="st st-sg">&#39;</span>, <span class="bn bn-pseudo">None</span>)
- <span class="kw">return</span> (<span class="name">val</span> <span class="op op-word">in</span> (<span class="st st-sg">&#39;</span><span class="st">flat</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">threaded</span><span class="st st-sg">&#39;</span>)) <span class="op op-word">and</span> <span class="name">val</span> <span class="op op-word">or</span> <span class="st st-sg">&#39;</span><span class="st">threaded</span><span class="st st-sg">&#39;</span>
-
-
-<span class="kw">def </span><span class="fun">quote_post</span>(<span class="name">req</span>, <span class="name">post_id</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Return a tuple in the form ``(text, title)`` which is useful
- for replying and quoting existing posts. The title is
- prefixed with a local representation of &#39;Re:&#39; and the text
- is quoted with the selected markup.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">p</span> <span class="op">=</span> <span class="name">posts</span>.<span class="name">c</span>
-
- <span class="name">u</span> <span class="op">=</span> <span class="name">users</span>.<span class="name">c</span>
- <span class="name">_</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">gettext</span>
-
- <span class="name">result</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">p</span>.<span class="name">title</span>, <span class="name">p</span>.<span class="name">text</span>, <span class="name">u</span>.<span class="name">username</span>],
- (<span class="name">p</span>.<span class="name">post_id</span> <span class="op">==</span> <span class="name">post_id</span>) <span class="op">&amp;</span>
-
- (<span class="name">u</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">p</span>.<span class="name">author_id</span>)
- ))
- <span class="name">row</span> <span class="op">=</span> <span class="name">result</span>.<span class="name">fetchone</span>()
- <span class="kw">if</span> <span class="name">row</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="cm"># XXX: ValueError?</span>
-
- <span class="kw">raise</span> <span class="exc">ValueError</span>(<span class="st st-sg">&#39;</span><span class="st">post </span><span class="st st-int">%s</span><span class="st"> does not exist</span><span class="st st-sg">&#39;</span>)
-
- <span class="name">suffix</span> <span class="op">=</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Re:</span><span class="st st-sg">&#39;</span>)
- <span class="name">title</span> <span class="op">=</span> <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>]
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">title</span>.<span class="name">startswith</span>(<span class="name">suffix</span>):
- <span class="name">title</span> <span class="op">=</span> <span class="name">u</span><span class="st st-sg">&#39;</span><span class="st st-int">%s</span><span class="st"> </span><span class="st st-int">%s</span><span class="st st-sg">&#39;</span> <span class="op">%</span> (<span class="name">suffix</span>, <span class="name">title</span>)
- <span class="name">text</span> <span class="op">=</span> <span class="name">quote_text</span>(<span class="name">req</span>, <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">text</span><span class="st st-sg">&#39;</span>], <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>])
- <span class="kw">return</span> <span class="name">text</span>, <span class="name">title</span>
-
-
-<span class="kw">def </span><span class="fun">edit_post</span>(<span class="name">req</span>, <span class="name">post_id</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Return a tuple in the form (``text``, ``title``, ``username``)
- for the edit view.
-
- :see: `quote_post`
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">p</span> <span class="op">=</span> <span class="name">posts</span>.<span class="name">c</span>
-
- <span class="name">result</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">p</span>.<span class="name">text</span>, <span class="name">p</span>.<span class="name">title</span>, <span class="name">p</span>.<span class="name">username</span>],
- (<span class="name">p</span>.<span class="name">post_id</span> <span class="op">==</span> <span class="name">post_id</span>)
- ))
- <span class="name">row</span> <span class="op">=</span> <span class="name">result</span>.<span class="name">fetchone</span>()
- <span class="kw">if</span> <span class="name">row</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="cm"># XXX: ValueError?</span>
-
- <span class="kw">raise</span> <span class="exc">ValueError</span>(<span class="st st-sg">&#39;</span><span class="st">post </span><span class="st st-int">%s</span><span class="st"> does not exist</span><span class="st st-sg">&#39;</span>)
- <span class="kw">return</span> <span class="bn">tuple</span>(<span class="name">row</span>)
-
-
-<span class="kw">class </span><span class="cls">_Site</span>(<span class="bn">object</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">A special singleton representing a whole site.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="name">object_id</span> <span class="op">=</span> <span class="nb nb-int">0</span>
-
- <span class="kw">def </span><span class="fun">__repr__</span>(<span class="bn bn-pseudo">self</span>):
- <span class="kw">return</span> <span class="st st-sg">&#39;</span><span class="st">&lt;</span><span class="st st-int">%s</span><span class="st">&gt;</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="bn bn-pseudo">self</span>.<span class="name">__class__</span>.<span class="name">__name__</span>
-
-<span class="name">Site</span> <span class="op">=</span> <span class="name">_Site</span>()
-
-
-<span class="kw">class </span><span class="cls">Forum</span>(<span class="name">DatabaseModel</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- This class represents one forum. Don&#39;t pass instances of this
- class to templates, therefore there are some other functions
- in this module.
-
- The main purpose of this class is the creation and management
- of forums. You can also use this class for the ACL functions.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">def </span><span class="fun">__init__</span>(<span class="bn bn-pseudo">self</span>, <span class="name">ctx</span>, <span class="name">forum_id</span>):
- <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span> <span class="op">=</span> <span class="name">ctx</span>
-
- <span class="bn bn-pseudo">self</span>.<span class="name">forum_id</span> <span class="op">=</span> <span class="name">forum_id</span>
- <span class="bn">super</span>(<span class="name">Forum</span>, <span class="bn bn-pseudo">self</span>).<span class="name">__init__</span>(<span class="name">ctx</span>, <span class="name">forums</span>, <span class="st st-sg">&#39;</span><span class="st">forum_id</span><span class="st st-sg">&#39;</span>)
-
- <span class="name">parent_id</span> <span class="op">=</span> <span class="name">lazy_column</span>(<span class="st st-sg">&#39;</span><span class="st">parent_id</span><span class="st st-sg">&#39;</span>)
- <span class="name">object_id</span> <span class="op">=</span> <span class="name">lazy_column</span>(<span class="st st-sg">&#39;</span><span class="st">object_id</span><span class="st st-sg">&#39;</span>)
- <span class="name">name</span> <span class="op">=</span> <span class="name">lazy_column</span>(<span class="st st-sg">&#39;</span><span class="st">name</span><span class="st st-sg">&#39;</span>)
- <span class="name">description</span> <span class="op">=</span> <span class="name">lazy_column</span>(<span class="st st-sg">&#39;</span><span class="st">description</span><span class="st st-sg">&#39;</span>)
- <span class="name">position</span> <span class="op">=</span> <span class="name">lazy_column</span>(<span class="st st-sg">&#39;</span><span class="st">position</span><span class="st st-sg">&#39;</span>)
- <span class="name">link</span> <span class="op">=</span> <span class="name">lazy_column</span>(<span class="st st-sg">&#39;</span><span class="st">link</span><span class="st st-sg">&#39;</span>)
-
- <span class="deco">@staticmethod</span>
-
- <span class="kw">def </span><span class="fun">create</span>(<span class="name">ctx</span>, <span class="name">name</span>, <span class="name">description</span><span class="op">=</span><span class="st st-db">&quot;&quot;</span>, <span class="name">parent</span><span class="op">=</span><span class="bn bn-pseudo">None</span>, <span class="name">position</span><span class="op">=</span><span class="bn bn-pseudo">None</span>,
- <span class="name">link</span><span class="op">=</span><span class="bn bn-pseudo">None</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Create a new forum.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">if</span> <span class="bn">isinstance</span>(<span class="name">parent</span>, <span class="name">Forum</span>):
- <span class="name">parent</span> <span class="op">=</span> <span class="name">parent</span>.<span class="name">forum_id</span>
-
- <span class="name">result</span> <span class="op">=</span> <span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">forums</span>.<span class="name">insert</span>(),
- <span class="name">parent_id</span><span class="op">=</span><span class="name">parent</span>,
- <span class="name">name</span><span class="op">=</span><span class="name">name</span>,
- <span class="name">description</span><span class="op">=</span><span class="name">description</span>,
- <span class="name">position</span><span class="op">=</span><span class="name">position</span>,
- <span class="name">link</span><span class="op">=</span><span class="name">link</span>,
- <span class="name">post_count</span><span class="op">=</span><span class="nb nb-int">0</span>,
- <span class="name">thread_count</span><span class="op">=</span><span class="nb nb-int">0</span>
-
- )
- <span class="kw">return</span> <span class="name">Forum</span>(<span class="name">ctx</span>, <span class="name">result</span>.<span class="name">last_inserted_ids</span>()[<span class="nb nb-int">0</span>])
-
- <span class="kw">def </span><span class="fun">parent_get</span>(<span class="bn bn-pseudo">self</span>):
- <span class="kw">return</span> <span class="name">Forum</span>(<span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>, <span class="bn bn-pseudo">self</span>.<span class="name">parent_id</span>)
- <span class="kw">def </span><span class="fun">parent_set</span>(<span class="bn bn-pseudo">self</span>, <span class="name">value</span>):
- <span class="kw">if</span> <span class="name">value</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="bn bn-pseudo">self</span>.<span class="name">parent_id</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
-
- <span class="kw">if</span> <span class="bn">isinstance</span>(<span class="name">value</span>, <span class="name">Forum</span>):
- <span class="bn bn-pseudo">self</span>.<span class="name">parent_id</span> <span class="op">=</span> <span class="name">value</span>.<span class="name">forum_id</span>
-
- <span class="name">parent</span> <span class="op">=</span> <span class="bn">property</span>(<span class="name">parent_get</span>, <span class="name">parent_set</span>)
- <span class="kw">del</span> <span class="name">parent_get</span>, <span class="name">parent_set</span>
-
- <span class="kw">def </span><span class="fun">__repr__</span>(<span class="bn bn-pseudo">self</span>):
- <span class="kw">return</span> <span class="st st-sg">&#39;</span><span class="st">&lt;</span><span class="st st-int">%s</span><span class="st"> </span><span class="st st-int">%d</span><span class="st">: </span><span class="st st-int">%r</span><span class="st">&gt;</span><span class="st st-sg">&#39;</span> <span class="op">%</span> (
- <span class="bn bn-pseudo">self</span>.<span class="name">__class__</span>.<span class="name">__name__</span>,
- <span class="bn bn-pseudo">self</span>.<span class="name">forum_id</span>,
- <span class="bn bn-pseudo">self</span>.<span class="name">name</span>
-
- )
-
-
-<span class="kw">class </span><span class="cls">Thread</span>(<span class="name">DatabaseModel</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- This class represents a root post with all of its children.
- You can use this class to manage a thread, add a new reply
- or edit one of its children.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">def </span><span class="fun">__init__</span>(<span class="bn bn-pseudo">self</span>, <span class="name">ctx</span>, <span class="name">root_post_id</span>):
- <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span> <span class="op">=</span> <span class="name">ctx</span>
-
- <span class="bn bn-pseudo">self</span>.<span class="name">post_id</span> <span class="op">=</span> <span class="name">root_post_id</span>
- <span class="bn">super</span>(<span class="name">Thread</span>, <span class="bn bn-pseudo">self</span>).<span class="name">__init__</span>(<span class="name">ctx</span>, <span class="name">posts</span>, <span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>,
- <span class="name">posts</span>.<span class="name">c</span>.<span class="name">parent_id</span> <span class="op">==</span> <span class="bn bn-pseudo">None</span>
-
- )
-
- <span class="name">forum_id</span> <span class="op">=</span> <span class="name">lazy_column</span>(<span class="st st-sg">&#39;</span><span class="st">forum_id</span><span class="st st-sg">&#39;</span>)
- <span class="name">parent_id</span> <span class="op">=</span> <span class="name">lazy_column</span>(<span class="st st-sg">&#39;</span><span class="st">parent_id</span><span class="st st-sg">&#39;</span>)
- <span class="name">root_post_id</span> <span class="op">=</span> <span class="name">lazy_column</span>(<span class="st st-sg">&#39;</span><span class="st">root_post_id</span><span class="st st-sg">&#39;</span>)
- <span class="name">object_id</span> <span class="op">=</span> <span class="name">lazy_column</span>(<span class="st st-sg">&#39;</span><span class="st">object_id</span><span class="st st-sg">&#39;</span>)
- <span class="name">author_id</span> <span class="op">=</span> <span class="name">lazy_column</span>(<span class="st st-sg">&#39;</span><span class="st">author_id</span><span class="st st-sg">&#39;</span>)
- <span class="name">title</span> <span class="op">=</span> <span class="name">lazy_column</span>(<span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>)
- <span class="name">text</span> <span class="op">=</span> <span class="name">lazy_column</span>(<span class="st st-sg">&#39;</span><span class="st">text</span><span class="st st-sg">&#39;</span>)
- <span class="name">timestamp</span> <span class="op">=</span> <span class="name">lazy_column</span>(<span class="st st-sg">&#39;</span><span class="st">timestamp</span><span class="st st-sg">&#39;</span>)
-
- <span class="deco">@staticmethod</span>
-
- <span class="kw">def </span><span class="fun">create</span>(<span class="name">ctx</span>, <span class="name">forum</span>, <span class="name">author</span>, <span class="name">title</span>, <span class="name">text</span>, <span class="name">timestamp</span><span class="op">=</span><span class="bn bn-pseudo">None</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Create a new thread.
- If author is a string it will be an anonymous posting.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="name">username</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
- <span class="kw">if</span> <span class="bn">isinstance</span>(<span class="name">forum</span>, <span class="name">Forum</span>):
- <span class="name">forum</span> <span class="op">=</span> <span class="name">forum</span>.<span class="name">forum_id</span>
-
- <span class="kw">if</span> <span class="bn">isinstance</span>(<span class="name">author</span>, <span class="name">User</span>):
- <span class="name">author</span> <span class="op">=</span> <span class="name">author</span>.<span class="name">user_id</span>
-
- <span class="kw">elif</span> <span class="bn">isinstance</span>(<span class="name">author</span>, <span class="bn">basestring</span>):
- <span class="name">username</span> <span class="op">=</span> <span class="name">author</span>
- <span class="name">author</span> <span class="op">=</span> <span class="name">ANONYMOUS_USER_ID</span>
-
- <span class="kw">if</span> <span class="name">timestamp</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">timestamp</span> <span class="op">=</span> <span class="name">datetime</span>.<span class="name">utcnow</span>()
- <span class="kw">def </span><span class="fun">do</span>(<span class="name">con</span>):
- <span class="name">result</span> <span class="op">=</span> <span class="name">con</span>.<span class="name">execute</span>(<span class="name">posts</span>.<span class="name">insert</span>(),
- <span class="name">forum_id</span> <span class="op">=</span> <span class="name">forum</span>,
- <span class="name">author_id</span> <span class="op">=</span> <span class="name">author</span>,
- <span class="name">username</span> <span class="op">=</span> <span class="name">username</span>,
- <span class="name">title</span> <span class="op">=</span> <span class="name">title</span>,
- <span class="name">text</span> <span class="op">=</span> <span class="name">text</span>,
- <span class="name">timestamp</span> <span class="op">=</span> <span class="name">timestamp</span>,
- <span class="name">post_count</span> <span class="op">=</span> <span class="nb nb-int">1</span>,
- <span class="name">view_count</span> <span class="op">=</span> <span class="nb nb-int">0</span>
-
- )
- <span class="name">thread_id</span> <span class="op">=</span> <span class="name">result</span>.<span class="name">last_inserted_ids</span>()[<span class="op">-</span><span class="nb nb-int">1</span>]
- <span class="cm"># increment author post count</span>
- <span class="kw">if</span> <span class="name">author</span> <span class="op">&gt;</span> <span class="op">-</span><span class="nb nb-int">1</span>:
- <span class="name">old</span> <span class="op">=</span> <span class="name">meta</span>.<span class="name">select</span>([<span class="name">users</span>.<span class="name">c</span>.<span class="name">post_count</span>], <span class="name">users</span>.<span class="name">c</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">author</span>)
- <span class="name">con</span>.<span class="name">execute</span>(<span class="name">users</span>.<span class="name">update</span>(<span class="name">users</span>.<span class="name">c</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">author</span>),
- <span class="name">post_count</span> <span class="op">=</span> <span class="name">con</span>.<span class="name">execute</span>(<span class="name">old</span>).<span class="name">fetchone</span>()[<span class="nb nb-int">0</span>] <span class="op">+</span> <span class="nb nb-int">1</span>
-
- )
- <span class="cm"># increment forum post and thread count</span>
- <span class="name">old</span> <span class="op">=</span> <span class="name">meta</span>.<span class="name">select</span>([<span class="name">forums</span>.<span class="name">c</span>.<span class="name">post_count</span>, <span class="name">forums</span>.<span class="name">c</span>.<span class="name">thread_count</span>],
- <span class="name">forums</span>.<span class="name">c</span>.<span class="name">forum_id</span> <span class="op">==</span> <span class="name">forum</span>)
- <span class="name">row</span> <span class="op">=</span> <span class="name">con</span>.<span class="name">execute</span>(<span class="name">old</span>).<span class="name">fetchone</span>()
- <span class="name">con</span>.<span class="name">execute</span>(<span class="name">forums</span>.<span class="name">update</span>(<span class="name">forums</span>.<span class="name">c</span>.<span class="name">forum_id</span> <span class="op">==</span> <span class="name">forum</span>),
- <span class="name">post_count</span> <span class="op">=</span> <span class="name">row</span>[<span class="nb nb-int">0</span>] <span class="op">+</span> <span class="nb nb-int">1</span>,
- <span class="name">thread_count</span> <span class="op">=</span> <span class="name">row</span>[<span class="nb nb-int">1</span>] <span class="op">+</span> <span class="nb nb-int">1</span>,
- <span class="name">last_post_id</span> <span class="op">=</span> <span class="name">thread_id</span>
-
- )
- <span class="kw">return</span> <span class="name">thread_id</span>
- <span class="name">thread_id</span> <span class="op">=</span> <span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">transaction</span>(<span class="name">do</span>)
- <span class="cm"># XXX: this feels a bit strange</span>
-
- <span class="name">t</span> <span class="op">=</span> <span class="name">Thread</span>(<span class="name">ctx</span>, <span class="name">thread_id</span>)
- <span class="name">t</span>.<span class="name">root_post_id</span> <span class="op">=</span> <span class="name">t</span>.<span class="name">post_id</span>
-
- <span class="name">t</span>.<span class="name">save</span>()
- <span class="kw">return</span> <span class="name">t</span>
-
- <span class="deco">@staticmethod</span>
- <span class="kw">def </span><span class="fun">by_child</span>(<span class="name">ctx</span>, <span class="name">post_id</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- Return the thread of a given ``post_id``.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">result</span> <span class="op">=</span> <span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">posts</span>.<span class="name">c</span>.<span class="name">root_post_id</span>],
- (<span class="name">posts</span>.<span class="name">c</span>.<span class="name">post_id</span> <span class="op">==</span> <span class="name">post_id</span>)
- ))
- <span class="name">row</span> <span class="op">=</span> <span class="name">result</span>.<span class="name">fetchone</span>()
- <span class="kw">if</span> <span class="name">row</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="cm"># XXX: ValueError?</span>
-
- <span class="kw">raise</span> <span class="exc">ValueError</span>(<span class="st st-sg">&#39;</span><span class="st">post </span><span class="st st-int">%s</span><span class="st"> does not exist</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">post_id</span>)
- <span class="kw">return</span> <span class="name">Thread</span>(<span class="name">ctx</span>, <span class="name">row</span>[<span class="nb nb-int">0</span>])
-
- <span class="kw">def </span><span class="fun">reply</span>(<span class="bn bn-pseudo">self</span>, <span class="name">post_id</span>, <span class="name">author</span>, <span class="name">title</span>, <span class="name">text</span>, <span class="name">timestamp</span><span class="op">=</span><span class="bn bn-pseudo">None</span>,
- <span class="name">no_processor</span><span class="op">=</span><span class="bn bn-pseudo">False</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- Reply to post ``post_id`` which is a child of the thread.
- Return the id of the new post.
-
- If ``author`` is a string it will be an anonymous posting.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">username</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
- <span class="kw">if</span> <span class="name">post_id</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">post_id</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">post_id</span>
-
- <span class="kw">if</span> <span class="bn">isinstance</span>(<span class="name">author</span>, <span class="name">User</span>):
- <span class="name">author</span> <span class="op">=</span> <span class="name">author</span>.<span class="name">user_id</span>
-
- <span class="kw">elif</span> <span class="bn">isinstance</span>(<span class="name">author</span>, <span class="bn">basestring</span>):
- <span class="name">username</span> <span class="op">=</span> <span class="name">author</span>
- <span class="name">author</span> <span class="op">=</span> <span class="name">ANONYMOUS_USER_ID</span>
-
- <span class="kw">if</span> <span class="name">timestamp</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">timestamp</span> <span class="op">=</span> <span class="name">datetime</span>.<span class="name">utcnow</span>()
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">no_processor</span>:
- <span class="name">text</span>, <span class="name">title</span> <span class="op">=</span> <span class="name">apply_post_processors</span>(<span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>, <span class="name">text</span>,
- <span class="name">title</span>, <span class="st st-sg">&#39;</span><span class="st">new</span><span class="st st-sg">&#39;</span>)
-
- <span class="kw">def </span><span class="fun">do</span>(<span class="name">con</span>):
- <span class="name">result</span> <span class="op">=</span> <span class="name">con</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">posts</span>.<span class="name">c</span>.<span class="name">root_post_id</span>],
- <span class="name">posts</span>.<span class="name">c</span>.<span class="name">post_id</span> <span class="op">==</span> <span class="name">post_id</span>
-
- ))
- <span class="name">row</span> <span class="op">=</span> <span class="name">result</span>.<span class="name">fetchone</span>()
- <span class="kw">if</span> <span class="name">row</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span> <span class="op op-word">or</span> <span class="name">row</span>[<span class="nb nb-int">0</span>] <span class="op">!=</span> <span class="bn">int</span>(<span class="bn bn-pseudo">self</span>.<span class="name">post_id</span>):
- <span class="cm"># XXX: ValueError?</span>
-
- <span class="kw">raise</span> <span class="exc">ValueError</span>(<span class="st st-sg">&#39;</span><span class="st">The post either does not exist or does not </span><span class="st st-sg">&#39;</span>
- <span class="st st-sg">&#39;</span><span class="st">belong to this thread</span><span class="st st-sg">&#39;</span>)
- <span class="name">new_post_id</span> <span class="op">=</span> <span class="name">con</span>.<span class="name">execute</span>(<span class="name">posts</span>.<span class="name">insert</span>(),
- <span class="name">forum_id</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">forum_id</span>,
- <span class="name">parent_id</span> <span class="op">=</span> <span class="name">post_id</span>,
- <span class="name">root_post_id</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">post_id</span>,
- <span class="name">author_id</span> <span class="op">=</span> <span class="name">author</span>,
- <span class="name">username</span> <span class="op">=</span> <span class="name">username</span>,
- <span class="name">title</span> <span class="op">=</span> <span class="name">title</span>,
- <span class="name">text</span> <span class="op">=</span> <span class="name">text</span>,
- <span class="name">timestamp</span> <span class="op">=</span> <span class="name">timestamp</span>
-
- ).<span class="name">last_inserted_ids</span>()[<span class="nb nb-int">0</span>]
-
- <span class="cm"># increment author post count</span>
- <span class="kw">if</span> <span class="name">author</span> <span class="op">&gt;</span> <span class="op">-</span><span class="nb nb-int">1</span>:
- <span class="name">old</span> <span class="op">=</span> <span class="name">meta</span>.<span class="name">select</span>([<span class="name">users</span>.<span class="name">c</span>.<span class="name">post_count</span>], <span class="name">users</span>.<span class="name">c</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">author</span>)
- <span class="name">con</span>.<span class="name">execute</span>(<span class="name">users</span>.<span class="name">update</span>(<span class="name">users</span>.<span class="name">c</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">author</span>),
- <span class="name">post_count</span> <span class="op">=</span> <span class="name">con</span>.<span class="name">execute</span>(<span class="name">old</span>).<span class="name">fetchone</span>()[<span class="nb nb-int">0</span>] <span class="op">+</span> <span class="nb nb-int">1</span>
-
- )
- <span class="cm"># increment forum post count and update last_post_id</span>
- <span class="name">old</span> <span class="op">=</span> <span class="name">meta</span>.<span class="name">select</span>([<span class="name">forums</span>.<span class="name">c</span>.<span class="name">post_count</span>],
- <span class="name">forums</span>.<span class="name">c</span>.<span class="name">forum_id</span> <span class="op">==</span> <span class="bn bn-pseudo">self</span>.<span class="name">forum_id</span>)
- <span class="name">con</span>.<span class="name">execute</span>(<span class="name">forums</span>.<span class="name">update</span>(<span class="name">forums</span>.<span class="name">c</span>.<span class="name">forum_id</span> <span class="op">==</span> <span class="bn bn-pseudo">self</span>.<span class="name">forum_id</span>),
- <span class="name">post_count</span> <span class="op">=</span> <span class="name">con</span>.<span class="name">execute</span>(<span class="name">old</span>).<span class="name">fetchone</span>()[<span class="nb nb-int">0</span>] <span class="op">+</span> <span class="nb nb-int">1</span>,
- <span class="name">last_post_id</span> <span class="op">=</span> <span class="name">new_post_id</span>
-
- )
- <span class="cm"># increment thread post count</span>
- <span class="name">old</span> <span class="op">=</span> <span class="name">meta</span>.<span class="name">select</span>([<span class="name">posts</span>.<span class="name">c</span>.<span class="name">post_count</span>],
- <span class="name">posts</span>.<span class="name">c</span>.<span class="name">post_id</span> <span class="op">==</span> <span class="bn bn-pseudo">self</span>.<span class="name">post_id</span>)
- <span class="name">con</span>.<span class="name">execute</span>(<span class="name">posts</span>.<span class="name">update</span>(<span class="name">posts</span>.<span class="name">c</span>.<span class="name">post_id</span> <span class="op">==</span> <span class="bn bn-pseudo">self</span>.<span class="name">post_id</span>),
- <span class="name">post_count</span> <span class="op">=</span> <span class="name">con</span>.<span class="name">execute</span>(<span class="name">old</span>).<span class="name">fetchone</span>()[<span class="nb nb-int">0</span>] <span class="op">+</span> <span class="nb nb-int">1</span>
-
- )
- <span class="kw">return</span> <span class="name">new_post_id</span>
- <span class="kw">return</span> <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">transaction</span>(<span class="name">do</span>)
-
- <span class="kw">def </span><span class="fun">edit_reply</span>(<span class="bn bn-pseudo">self</span>, <span class="name">post_id</span>, <span class="name">author</span><span class="op">=</span><span class="name">_missing</span>, <span class="name">title</span><span class="op">=</span><span class="name">_missing</span>,
- <span class="name">text</span><span class="op">=</span><span class="name">_missing</span>, <span class="name">timestamp</span><span class="op">=</span><span class="name">_missing</span>,
- <span class="name">no_processor</span><span class="op">=</span><span class="bn bn-pseudo">False</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Edit a reply.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="name">d</span> <span class="op">=</span> {}
- <span class="kw">if</span> <span class="name">author</span> <span class="op op-word">is</span> <span class="op op-word">not</span> <span class="name">_missing</span>:
- <span class="kw">if</span> <span class="bn">isinstance</span>(<span class="name">author</span>, <span class="name">User</span>):
- <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">author_id</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">author</span>.<span class="name">user_id</span> <span class="cm"># pylint: disable-msg=E1101</span>
-
- <span class="kw">else</span>:
- <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">author_id</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">author</span>
- <span class="kw">if</span> <span class="name">title</span> <span class="op op-word">is</span> <span class="op op-word">not</span> <span class="name">_missing</span>:
- <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">title</span>
-
- <span class="kw">if</span> <span class="name">text</span> <span class="op op-word">is</span> <span class="op op-word">not</span> <span class="name">_missing</span>:
- <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">text</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">text</span>
-
- <span class="kw">if</span> <span class="name">timestamp</span> <span class="op op-word">is</span> <span class="op op-word">not</span> <span class="name">_missing</span>:
- <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">timestamp</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">timestamp</span>
-
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">no_processor</span> <span class="op op-word">and</span> <span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span> <span class="op op-word">in</span> <span class="name">d</span> <span class="op op-word">and</span> <span class="st st-sg">&#39;</span><span class="st">text</span><span class="st st-sg">&#39;</span> <span class="op op-word">in</span> <span class="name">d</span>:
- <span class="name">rv</span> <span class="op">=</span> <span class="name">apply_post_processors</span>(<span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>, <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">text</span><span class="st st-sg">&#39;</span>], <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>], <span class="st st-sg">&#39;</span><span class="st">edit</span><span class="st st-sg">&#39;</span>)
- <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">text</span><span class="st st-sg">&#39;</span>], <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">rv</span>
-
- <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">posts</span>.<span class="name">update</span>(<span class="name">posts</span>.<span class="name">c</span>.<span class="name">post_id</span> <span class="op">==</span> <span class="name">post_id</span>), <span class="op">**</span><span class="name">d</span>)
-
- <span class="kw">def </span><span class="fun">has_child</span>(<span class="bn bn-pseudo">self</span>, <span class="name">post_id</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Check if a post_id is a child of this thread.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="name">result</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">posts</span>.<span class="name">c</span>.<span class="name">root_post_id</span>],
- <span class="name">posts</span>.<span class="name">c</span>.<span class="name">post_id</span> <span class="op">==</span> <span class="name">post_id</span>
-
- ))
- <span class="name">row</span> <span class="op">=</span> <span class="name">result</span>.<span class="name">fetchone</span>()
- <span class="kw">return</span> <span class="name">row</span> <span class="op op-word">is</span> <span class="op op-word">not</span> <span class="bn bn-pseudo">None</span> <span class="op op-word">and</span> <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">root_post_id</span><span class="st st-sg">&#39;</span>] <span class="op">==</span> <span class="bn bn-pseudo">self</span>.<span class="name">post_id</span>
-
- <span class="kw">def </span><span class="fun">get_post_list</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Return a flat list of all posts in this thread sorted by their post_id.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">result</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">posts</span>.<span class="name">select</span>(
- <span class="name">posts</span>.<span class="name">c</span>.<span class="name">root_post_id</span> <span class="op">==</span> <span class="bn bn-pseudo">self</span>.<span class="name">post_id</span>
-
- ))
- <span class="kw">return</span> <span class="bn">map</span>(<span class="bn">dict</span>, <span class="name">result</span>)
-
- <span class="kw">def </span><span class="fun">count_children</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Return the number of direct or indirect children of this thread.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="name">p</span> <span class="op">=</span> <span class="name">posts</span>.<span class="name">c</span>
- <span class="name">result</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">engine</span>.<span class="name">execute</span>(<span class="name">meta</span>.<span class="name">select</span>([<span class="name">meta</span>.<span class="name">func</span>.<span class="name">count</span>(<span class="name">p</span>.<span class="name">post_id</span>)],
- <span class="name">p</span>.<span class="name">root_post_id</span> <span class="op">==</span> <span class="bn bn-pseudo">self</span>.<span class="name">post_id</span>
-
- ))
- <span class="kw">return</span> <span class="name">result</span>.<span class="name">fetchone</span>()[<span class="nb nb-int">0</span>]
-
- <span class="name">__len__</span> <span class="op">=</span> <span class="name">count_children</span>
-
- <span class="kw">def </span><span class="fun">forum_get</span>(<span class="bn bn-pseudo">self</span>):
- <span class="kw">if</span> <span class="bn bn-pseudo">self</span>.<span class="name">forum_id</span> <span class="op op-word">is</span> <span class="op op-word">not</span> <span class="bn bn-pseudo">None</span>:
- <span class="kw">return</span> <span class="name">Forum</span>(<span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>, <span class="bn bn-pseudo">self</span>.<span class="name">forum_id</span>)
- <span class="kw">def </span><span class="fun">forum_set</span>(<span class="bn bn-pseudo">self</span>, <span class="name">value</span>):
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="bn">isinstance</span>(<span class="name">value</span>, <span class="name">Forum</span>):
- <span class="kw">raise</span> <span class="exc">TypeError</span>(<span class="st st-sg">&#39;</span><span class="st">Can only set Forum instances</span><span class="st st-sg">&#39;</span>)
- <span class="bn bn-pseudo">self</span>.<span class="name">forum_id</span> <span class="op">=</span> <span class="name">value</span>.<span class="name">forum_id</span>
-
- <span class="name">forum</span> <span class="op">=</span> <span class="bn">property</span>(<span class="name">forum_get</span>, <span class="name">forum_set</span>)
- <span class="kw">del</span> <span class="name">forum_get</span>, <span class="name">forum_set</span>
-
- <span class="kw">def </span><span class="fun">__eq__</span>(<span class="bn bn-pseudo">self</span>, <span class="name">other</span>):
- <span class="kw">return</span> <span class="bn bn-pseudo">self</span>.<span class="name">post_id</span> <span class="op">==</span> <span class="name">other</span>.<span class="name">post_id</span>
-
- <span class="kw">def </span><span class="fun">__ne__</span>(<span class="bn bn-pseudo">self</span>, <span class="name">other</span>):
- <span class="kw">return</span> <span class="op op-word">not</span> <span class="bn bn-pseudo">self</span>.<span class="name">__eq__</span>(<span class="name">other</span>)
-
- <span class="kw">def </span><span class="fun">__repr__</span>(<span class="bn bn-pseudo">self</span>):
- <span class="kw">return</span> <span class="st st-sg">&#39;</span><span class="st">&lt;</span><span class="st st-int">%s</span><span class="st"> </span><span class="st st-int">%d</span><span class="st">: </span><span class="st st-int">%r</span><span class="st">&gt;</span><span class="st st-sg">&#39;</span> <span class="op">%</span> (
- <span class="bn bn-pseudo">self</span>.<span class="name">__class__</span>.<span class="name">__name__</span>,
- <span class="bn bn-pseudo">self</span>.<span class="name">post_id</span>,
- <span class="bn bn-pseudo">self</span>.<span class="name">title</span>
-
- )
-<span class="cm"># -*- coding: utf-8 -*-</span>
-</pre>
-<script type="text/javascript">initCodeBlock('code-block')</script>
-</body>
-</html>