summaryrefslogtreecommitdiff
path: root/tests/examplefiles/test.html
diff options
context:
space:
mode:
Diffstat (limited to 'tests/examplefiles/test.html')
-rw-r--r--tests/examplefiles/test.html3553
1 files changed, 0 insertions, 3553 deletions
diff --git a/tests/examplefiles/test.html b/tests/examplefiles/test.html
index 4527a3fb..52adca81 100644
--- a/tests/examplefiles/test.html
+++ b/tests/examplefiles/test.html
@@ -2783,3559 +2783,6 @@ pre.syntax { padding: 5px; margin-top: 0px; }
)
<span class="cm"># -*- coding: utf-8 -*-</span>
-<span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- pocoo.pkg.core.i18n
- ~~~~~~~~~~~~~~~~~~~
-
- Pocoo internationalization components.
-
- :copyright: 2006 by Armin Ronacher.
- :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">gettext</span>
-<span class="kw">from </span><span class="cls">pocoo.application</span><span class="kw"> import</span> <span class="name">RequestWrapper</span>
-
-<span class="kw">from </span><span class="cls">jinja.nodes</span><span class="kw"> import</span> <span class="name">Node</span>, <span class="name">KeywordNode</span>, <span class="name">VariableNode</span>, <span class="name">ValueNode</span>, <span class="name">CollectionNode</span>
-<span class="kw">from </span><span class="cls">jinja.base</span><span class="kw"> import</span> <span class="name">TOKEN_TEXT</span>, <span class="name">TOKEN_VAR</span>
-
-<span class="kw">from </span><span class="cls">jinja.exceptions</span><span class="kw"> import</span> <span class="name">TemplateSyntaxError</span>
-<span class="kw">from </span><span class="cls">cStringIO</span><span class="kw"> import</span> <span class="name">StringIO</span>
-
-
-<span class="kw">class </span><span class="cls">TranslatableTag</span>(<span class="name">Node</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- Translatable Tag
- ================
-
- Usage::
-
- {% trans %}
- somestring
- {% trans %}
-
- Or::
-
- {% trans &quot;string&quot; %}
- </span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="name">rules</span> <span class="op">=</span> {
- <span class="st st-sg">&#39;</span><span class="st">long</span><span class="st st-sg">&#39;</span>: [<span class="name">KeywordNode</span>(<span class="st st-sg">&#39;</span><span class="st">trans</span><span class="st st-sg">&#39;</span>)],
- <span class="st st-sg">&#39;</span><span class="st">plural</span><span class="st st-sg">&#39;</span>: [<span class="name">KeywordNode</span>(<span class="st st-sg">&#39;</span><span class="st">trans</span><span class="st st-sg">&#39;</span>), <span class="name">KeywordNode</span>(<span class="st st-sg">&#39;</span><span class="st">pluralizing</span><span class="st st-sg">&#39;</span>),
- <span class="name">VariableNode</span>()],
- <span class="st st-sg">&#39;</span><span class="st">short</span><span class="st st-sg">&#39;</span>: [<span class="name">KeywordNode</span>(<span class="st st-sg">&#39;</span><span class="st">trans</span><span class="st st-sg">&#39;</span>), <span class="name">ValueNode</span>(), <span class="name">CollectionNode</span>()]
- }
-
- <span class="kw">def </span><span class="fun">__init__</span>(<span class="bn bn-pseudo">self</span>, <span class="name">parser</span>, <span class="name">matched_tag</span>, <span class="name">handler_args</span>, <span class="name">stack</span>):
- <span class="bn bn-pseudo">self</span>.<span class="name">_body_pl</span> <span class="op">=</span> []
- <span class="bn bn-pseudo">self</span>.<span class="name">_vars_pl</span> <span class="op">=</span> {}
- <span class="kw">if</span> <span class="name">matched_tag</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">short</span><span class="st st-sg">&#39;</span>:
- <span class="bn bn-pseudo">self</span>.<span class="name">_body_sg</span> <span class="op">=</span> [<span class="name">handler_args</span>[<span class="nb nb-int">1</span>].<span class="name">resolve</span>()]
- <span class="bn bn-pseudo">self</span>.<span class="name">_vars_sg</span> <span class="op">=</span> <span class="name">handler_args</span>[<span class="nb nb-int">2</span>]
- <span class="kw">else</span>:
- <span class="bn bn-pseudo">self</span>.<span class="name">_body_sg</span>, <span class="bn bn-pseudo">self</span>.<span class="name">_vars_sg</span>, <span class="bn bn-pseudo">self</span>.<span class="name">_body_pl</span>, <span class="bn bn-pseudo">self</span>.<span class="name">_vars_pl</span> <span class="op">=</span> \
- <span class="bn bn-pseudo">self</span>.<span class="name">_forkparse</span>(<span class="name">parser</span>)
- <span class="kw">if</span> <span class="name">matched_tag</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">plural</span><span class="st st-sg">&#39;</span>:
- <span class="bn bn-pseudo">self</span>.<span class="name">_indicator</span> <span class="op">=</span> <span class="name">handler_args</span>[<span class="nb nb-int">2</span>]
- <span class="bn bn-pseudo">self</span>.<span class="name">msgid</span> <span class="op">=</span> (<span class="st st-sg">&#39;&#39;</span>.<span class="name">join</span>(<span class="bn bn-pseudo">self</span>.<span class="name">_body_sg</span>)).<span class="name">strip</span>()
- <span class="bn bn-pseudo">self</span>.<span class="name">msgid_plural</span> <span class="op">=</span> (<span class="st st-sg">&#39;&#39;</span>.<span class="name">join</span>(<span class="bn bn-pseudo">self</span>.<span class="name">_body_pl</span>)).<span class="name">strip</span>()
- <span class="name">Node</span>.<span class="name">__init__</span>(<span class="bn bn-pseudo">self</span>)
-
- <span class="kw">def </span><span class="fun">_forkparse</span>(<span class="bn bn-pseudo">self</span>, <span class="name">parser</span>):
- <span class="name">lib</span> <span class="op">=</span> <span class="name">parser</span>.<span class="name">library</span>
-
- <span class="name">sg</span> <span class="op">=</span> []; <span class="name">vars_sg</span> <span class="op">=</span> {}
- <span class="name">pl</span> <span class="op">=</span> []; <span class="name">vars_pl</span> <span class="op">=</span> {}
- <span class="name">out</span> <span class="op">=</span> <span class="name">sg</span>; <span class="name">vars_out</span> <span class="op">=</span> <span class="name">vars_sg</span>
-
- <span class="kw">while</span> <span class="name">parser</span>.<span class="name">tokens</span>:
- <span class="name">token</span> <span class="op">=</span> <span class="name">parser</span>.<span class="name">pop_token</span>()
- <span class="kw">if</span> <span class="name">token</span>.<span class="name">token_type</span> <span class="op">==</span> <span class="name">TOKEN_VAR</span>:
- <span class="name">var</span> <span class="op">=</span> <span class="name">lib</span>.<span class="name">parse</span>(<span class="name">parser</span>, <span class="name">u</span><span class="st st-sg">&#39;</span><span class="st">print </span><span class="st st-int">%s</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">token</span>.<span class="name">contents</span>)
- <span class="name">var_key</span> <span class="op">=</span> <span class="name">token</span>.<span class="name">contents</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">0</span>].<span class="name">strip</span>()
- <span class="name">vars_out</span>[<span class="name">var_key</span>] <span class="op">=</span> <span class="name">var</span>
-
- <span class="name">out</span>.<span class="name">append</span>(<span class="st st-sg">&#39;</span><span class="st st-int">%%</span><span class="st">(</span><span class="st st-int">%s</span><span class="st">)s</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">var_key</span>)
- <span class="kw">elif</span> <span class="name">token</span>.<span class="name">token_type</span> <span class="op">==</span> <span class="name">TOKEN_TEXT</span>:
- <span class="name">lines</span> <span class="op">=</span> <span class="name">token</span>.<span class="name">contents</span>.<span class="name">splitlines</span>()
- <span class="cm"># XXX: this protects whitespaces between different tokens (really?)</span>
-
- <span class="name">text</span> <span class="op">=</span> <span class="name">u</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="nb nb-int">1</span>] <span class="op">+</span> [<span class="name">line</span>.<span class="name">lstrip</span>() <span class="kw">for</span> <span class="name">line</span> <span class="op op-word">in</span> <span class="name">lines</span>[<span class="nb nb-int">1</span>:]])
- <span class="name">out</span>.<span class="name">append</span>(<span class="name">text</span>)
- <span class="kw">else</span>:
- <span class="kw">if</span> <span class="name">token</span>.<span class="name">contents</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">plural</span><span class="st st-sg">&#39;</span>:
- <span class="kw">if</span> <span class="name">out</span> <span class="op op-word">is</span> <span class="name">sg</span>:
- <span class="name">out</span> <span class="op">=</span> <span class="name">pl</span>
-
- <span class="name">vars_out</span> <span class="op">=</span> <span class="name">vars_pl</span>
- <span class="kw">else</span>:
- <span class="kw">raise</span> <span class="name">TemplateSyntaxError</span>(<span class="st st-sg">&#39;</span><span class="st">plural used twice</span><span class="st st-sg">&#39;</span>)
- <span class="kw">elif</span> <span class="name">token</span>.<span class="name">contents</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">endtrans</span><span class="st st-sg">&#39;</span>:
- <span class="kw">break</span>
-
- <span class="kw">else</span>:
- <span class="kw">raise</span> <span class="name">TemplateSyntaxError</span>(<span class="st st-sg">&#39;</span><span class="st">you can</span><span class="st st-esc">\&#39;</span><span class="st">t use blocks inside of a </span><span class="st st-sg">&#39;</span>
- <span class="st st-sg">&#39;</span><span class="st">`trans` tag.</span><span class="st st-sg">&#39;</span>)
- <span class="kw">return</span> <span class="name">sg</span>, <span class="name">vars_sg</span>, <span class="name">pl</span>, <span class="name">vars_pl</span>
-
- <span class="kw">def </span><span class="fun">render</span>(<span class="bn bn-pseudo">self</span>, <span class="name">context</span>):
- <span class="name">req</span> <span class="op">=</span> <span class="name">context</span>[<span class="st st-sg">&#39;</span><span class="st">REQUEST</span><span class="st st-sg">&#39;</span>]
- <span class="kw">if</span> <span class="bn bn-pseudo">self</span>.<span class="name">msgid_plural</span>:
- <span class="name">var</span> <span class="op">=</span> <span class="nb nb-int">1</span>
-
- <span class="kw">if</span> <span class="bn">hasattr</span>(<span class="bn bn-pseudo">self</span>, <span class="st st-sg">&#39;</span><span class="st">_indicator</span><span class="st st-sg">&#39;</span>):
- <span class="name">var</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">_indicator</span>.<span class="name">resolve</span>(<span class="name">context</span>)
- <span class="name">rv</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">gettext</span>(<span class="bn bn-pseudo">self</span>.<span class="name">msgid</span>, <span class="bn bn-pseudo">self</span>.<span class="name">msgid_plural</span>, <span class="name">var</span>)
- <span class="kw">else</span>:
- <span class="name">rv</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">gettext</span>(<span class="bn bn-pseudo">self</span>.<span class="name">msgid</span>)
- <span class="kw">if</span> <span class="bn">isinstance</span>(<span class="bn bn-pseudo">self</span>.<span class="name">_vars_sg</span>, <span class="bn">list</span>):
- <span class="kw">return</span> <span class="name">rv</span> <span class="op">%</span> <span class="bn">tuple</span>(<span class="name">v</span>.<span class="name">render</span>(<span class="name">context</span>) <span class="kw">for</span> <span class="name">v</span> <span class="op op-word">in</span> <span class="bn bn-pseudo">self</span>.<span class="name">_vars_sg</span>)
- <span class="name">args</span> <span class="op">=</span> <span class="bn">dict</span>((<span class="name">n</span>, <span class="name">v</span>.<span class="name">render</span>(<span class="name">context</span>)) <span class="kw">for</span> <span class="name">n</span>, <span class="name">v</span> <span class="op op-word">in</span> <span class="bn bn-pseudo">self</span>.<span class="name">_vars_sg</span>.<span class="name">iteritems</span>())
- <span class="name">args</span>.<span class="name">update</span>(<span class="bn bn-pseudo">self</span>.<span class="name">_vars_pl</span>)
- <span class="kw">return</span> <span class="name">rv</span> <span class="op">%</span> <span class="name">args</span>
-
-
-<span class="kw">def </span><span class="fun">load_translations</span>(<span class="name">ctx</span>, <span class="name">lng</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- loads all available translations for the given language.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">result</span> <span class="op">=</span> []
- <span class="kw">for</span> <span class="name">res</span> <span class="op op-word">in</span> <span class="name">ctx</span>.<span class="name">pkgmanager</span>.<span class="name">get_resources</span>(<span class="st st-sg">&#39;</span><span class="st">i18n</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;&#39;</span>, <span class="name">lng</span>):
- <span class="name">f</span> <span class="op">=</span> <span class="name">StringIO</span>(<span class="name">res</span>)
- <span class="name">result</span>.<span class="name">append</span>(<span class="name">gettext</span>.<span class="name">GNUTranslations</span>(<span class="name">f</span>))
- <span class="kw">return</span> <span class="name">result</span>
-
-
-<span class="kw">def </span><span class="fun">parse_http_accept_language</span>(<span class="name">s</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Return the accepted languages as set in the user browser.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">result</span> <span class="op">=</span> []
- <span class="kw">for</span> <span class="name">item</span> <span class="op op-word">in</span> <span class="name">s</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="name">lng</span> <span class="op">=</span> <span class="name">item</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="nb nb-int">0</span>]
- <span class="name">lng</span> <span class="op">=</span> <span class="name">lng</span>.<span class="name">lower</span>()
- <span class="name">result</span>.<span class="name">append</span>(<span class="name">lng</span>)
- <span class="kw">if</span> <span class="st st-sg">&#39;</span><span class="st">-</span><span class="st st-sg">&#39;</span> <span class="op op-word">in</span> <span class="name">lng</span>:
- <span class="name">result</span>.<span class="name">append</span>(<span class="name">lng</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">0</span>])
- <span class="kw">return</span> <span class="name">result</span>
-
-
-<span class="kw">def </span><span class="fun">get_request_languages</span>(<span class="name">req</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Return the list of languages a request could handle.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">if</span> <span class="bn">hasattr</span>(<span class="name">req</span>, <span class="st st-sg">&#39;</span><span class="st">user</span><span class="st st-sg">&#39;</span>) <span class="op op-word">and</span> <span class="name">req</span>.<span class="name">user</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">req</span>.<span class="name">user</span>.<span class="name">language</span>:
- <span class="name">lng</span> <span class="op">=</span> [<span class="name">req</span>.<span class="name">user</span>.<span class="name">language</span>]
- <span class="kw">else</span>:
- <span class="name">lng</span> <span class="op">=</span> []
- <span class="cm"># before checking the HTTP_ACCEPT_LANGUAGE check for</span>
-
- <span class="cm"># a forced language.</span>
- <span class="name">forced</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">general</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">language</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;&#39;</span>)
- <span class="kw">if</span> <span class="name">forced</span> <span class="op op-word">and</span> <span class="name">forced</span> <span class="op">!=</span> <span class="st st-sg">&#39;</span><span class="st">auto</span><span class="st st-sg">&#39;</span> <span class="op op-word">and</span> <span class="name">forced</span> <span class="op op-word">not</span> <span class="op op-word">in</span> <span class="name">lng</span>:
- <span class="name">lng</span>.<span class="name">append</span>(<span class="name">forced</span>)
- <span class="cm"># now prase the HTTP_ACCEPT_LANGUAGE string and add</span>
-
- <span class="cm"># the languages to the list of accepted languages.</span>
- <span class="name">language_string</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">environ</span>.<span class="name">get</span>(<span class="st st-sg">&#39;</span><span class="st">HTTP_ACCEPT_LANGUAGE</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">en</span><span class="st st-sg">&#39;</span>)
- <span class="kw">for</span> <span class="name">item</span> <span class="op op-word">in</span> <span class="name">parse_http_accept_language</span>(<span class="name">language_string</span>):
- <span class="kw">if</span> <span class="name">item</span> <span class="op op-word">not</span> <span class="op op-word">in</span> <span class="name">lng</span>:
- <span class="name">lng</span>.<span class="name">append</span>(<span class="name">item</span>)
- <span class="cm"># add &quot;en&quot; if not set</span>
-
- <span class="kw">if</span> <span class="st st-sg">&#39;</span><span class="st">en</span><span class="st st-sg">&#39;</span> <span class="op op-word">not</span> <span class="op op-word">in</span> <span class="name">lng</span>:
- <span class="name">lng</span>.<span class="name">append</span>(<span class="st st-sg">&#39;</span><span class="st">en</span><span class="st st-sg">&#39;</span>)
- <span class="kw">return</span> <span class="name">lng</span>
-
-
-<span class="kw">class </span><span class="cls">Translator</span>(<span class="bn">object</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- A callable that allows you to use pluralized and
- non pluralized strings. A translator instance always
- exists on the request object as ``req.gettext``::
-
- _ = req.gettext
- _(&#39;Hello World!&#39;, &#39;Hello Worlds!&#39;, 2)
-
- The example above defines a singular and pluralized
- version of &quot;Hello World&quot;. The number two tells the
- gettext system that we have two worlds in that case.
- Some languages provide more than just one plural form
- so this number allows it to decide which plural form
- to use.
-
- If you just have a singular string you can use this::
-
- _ = req.gettext
- _(&#39;This is just a small example&#39;)
-
- Strings marked as ``_()`` automagically get tracked
- by the gettext translation generator script.
- </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">translations</span>, <span class="name">languages</span>):
- <span class="cm">#XXX: should we cache that?</span>
- <span class="bn bn-pseudo">self</span>.<span class="name">translator</span> <span class="op">=</span> <span class="name">gettext</span>.<span class="name">NullTranslations</span>()
- <span class="kw">for</span> <span class="name">lng</span> <span class="op op-word">in</span> <span class="name">languages</span>:
- <span class="kw">for</span> <span class="name">translation</span> <span class="op op-word">in</span> <span class="name">translations</span>[<span class="name">lng</span>]:
- <span class="bn bn-pseudo">self</span>.<span class="name">translator</span>.<span class="name">add_fallback</span>(<span class="name">translation</span>)
- <span class="bn bn-pseudo">self</span>.<span class="name">languages</span> <span class="op">=</span> <span class="name">languages</span>
-
- <span class="kw">def </span><span class="fun">__call__</span>(<span class="bn bn-pseudo">self</span>, <span class="name">msg</span>, <span class="name">plural</span><span class="op">=</span><span class="bn bn-pseudo">None</span>, <span class="name">n</span><span class="op">=</span><span class="nb nb-int">1</span>):
- <span class="kw">if</span> <span class="name">plural</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="kw">return</span> <span class="bn bn-pseudo">self</span>.<span class="name">translator</span>.<span class="name">ugettext</span>(<span class="name">msg</span>)
- <span class="kw">return</span> <span class="bn bn-pseudo">self</span>.<span class="name">translator</span>.<span class="name">ungettext</span>(<span class="name">msg</span>, <span class="name">plural</span>, <span class="name">n</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">%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">languages</span>
-
- )
-
-
-<span class="name">dummy_translate</span> <span class="op">=</span> <span class="name">Translator</span>({}, [])
-
-
-<span class="kw">class </span><span class="cls">I18nWrapper</span>(<span class="name">RequestWrapper</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="bn">super</span>(<span class="name">I18nWrapper</span>, <span class="bn bn-pseudo">self</span>).<span class="name">__init__</span>(<span class="name">ctx</span>)
- <span class="bn bn-pseudo">self</span>.<span class="name">translations</span> <span class="op">=</span> {}
-
- <span class="kw">def </span><span class="fun">get_priority</span>(<span class="bn bn-pseudo">self</span>):
- <span class="kw">return</span> <span class="nb nb-int">4</span>
-
- <span class="kw">def </span><span class="fun">process_request</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Attach a gettext and dummy translate method to the request.</span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">languages</span> <span class="op">=</span> <span class="name">get_request_languages</span>(<span class="name">req</span>)
- <span class="name">req</span>.<span class="name">accept_languages</span> <span class="op">=</span> <span class="name">languages</span>
-
- <span class="kw">for</span> <span class="name">lng</span> <span class="op op-word">in</span> <span class="name">languages</span>:
- <span class="kw">if</span> <span class="name">lng</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">translations</span>:
- <span class="bn bn-pseudo">self</span>.<span class="name">translations</span>[<span class="name">lng</span>] <span class="op">=</span> <span class="name">load_translations</span>(<span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>, <span class="name">lng</span>)
- <span class="name">req</span>.<span class="name">gettext</span> <span class="op">=</span> <span class="name">Translator</span>(<span class="bn bn-pseudo">self</span>.<span class="name">translations</span>, <span class="name">languages</span>)
- <span class="name">req</span>.<span class="name">dummy_translate</span> <span class="op">=</span> <span class="name">dummy_translate</span>
-
- <span class="kw">def </span><span class="fun">process_response</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">resp</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
- ~~~~~~~~~~~~~~
-
- The Pocoo core component.
-
- :copyright: 2006 by the Pocoo team.
- :license: GNU GPL, see LICENSE for more details.
-</span><span class="st st-db">&quot;&quot;&quot;</span>
-<span class="cm"># -*- coding: utf-8 -*-</span>
-<span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- pocoo.pkg.core.l10n
- ~~~~~~~~~~~~~~~~~~~
-
- Pocoo localisation module.
-
- :copyright: 2006 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.utils.text</span><span class="kw"> import</span> <span class="name">split_format</span>
-
-<span class="kw">from </span><span class="cls">datetime</span><span class="kw"> import</span> <span class="name">datetime</span>
-<span class="kw">import </span><span class="cls">time</span>
-<span class="kw">from </span><span class="cls">calendar</span><span class="kw"> import</span> <span class="name">monthrange</span>
-
-<span class="cm"># Dateformat Constants</span>
-<span class="name">DEFAULT_DATE_FORMAT</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">%a, </span><span class="st st-int">%d</span><span class="st"> %b %Y</span><span class="st st-sg">&#39;</span>
-<span class="name">DEFAULT_TIME_FORMAT</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">%H:%M</span><span class="st st-sg">&#39;</span>
-
-<span class="name">DEFAULT_DATETIME_FORMAT</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">%a, </span><span class="st st-int">%d</span><span class="st"> %b %Y %H:%M</span><span class="st st-sg">&#39;</span>
-
-<span class="cm"># Timedelta Constants</span>
-<span class="name">TIME_DELTA_UNITS</span> <span class="op">=</span> [
- (<span class="nb nb-int">3600</span> <span class="op">*</span> <span class="nb nb-int">24</span> <span class="op">*</span> <span class="nb nb-int">365</span>, <span class="st st-sg">&#39;</span><span class="st">y</span><span class="st st-sg">&#39;</span>),
- (<span class="nb nb-int">3600</span> <span class="op">*</span> <span class="nb nb-int">24</span> <span class="op">*</span> <span class="nb nb-int">30</span>, <span class="st st-sg">&#39;</span><span class="st">M</span><span class="st st-sg">&#39;</span>),
- (<span class="nb nb-int">3600</span> <span class="op">*</span> <span class="nb nb-int">24</span> <span class="op">*</span> <span class="nb nb-int">7</span>, <span class="st st-sg">&#39;</span><span class="st">w</span><span class="st st-sg">&#39;</span>),
- (<span class="nb nb-int">3600</span> <span class="op">*</span> <span class="nb nb-int">24</span>, <span class="st st-sg">&#39;</span><span class="st">d</span><span class="st st-sg">&#39;</span>),
- (<span class="nb nb-int">3600</span>, <span class="st st-sg">&#39;</span><span class="st">h</span><span class="st st-sg">&#39;</span>),
- (<span class="nb nb-int">60</span>, <span class="st st-sg">&#39;</span><span class="st">m</span><span class="st st-sg">&#39;</span>)
-]
-
-
-<span class="cm"># Gettext Helper</span>
-<span class="name">_</span> <span class="op">=</span> <span class="kw">lambda</span> <span class="name">x</span>: <span class="name">x</span>
-
-<span class="kw">class </span><span class="cls">DateFormatter</span>(<span class="bn">object</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- TODO: write documentation about the various format codes.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="cm"># XXX: use &quot;caching&quot; of lists with static strings (weekdays...)</span>
-
- <span class="cm"># allow format_X method names</span>
- <span class="cm"># pylint: disable-msg=C0103</span>
-
- <span class="name">WEEKDAYS_ABBR</span> <span class="op">=</span> [<span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Mon</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Tue</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Wed</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Thu</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Fri</span><span class="st st-sg">&#39;</span>),
- <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Sat</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Sun</span><span class="st st-sg">&#39;</span>)]
- <span class="name">WEEKDAYS_FULL</span> <span class="op">=</span> [<span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Monday</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Tuesday</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Wednesday</span><span class="st st-sg">&#39;</span>),
- <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Thursday</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Friday</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Saturday</span><span class="st st-sg">&#39;</span>),
- <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Sunday</span><span class="st st-sg">&#39;</span>)]
- <span class="name">MONTHS_ABBR</span> <span class="op">=</span> [<span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Jan</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Feb</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Mar</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Apr</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">May:abbr</span><span class="st st-sg">&#39;</span>),
- <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Jun</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Jul</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Aug</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Sep</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Oct</span><span class="st st-sg">&#39;</span>),
- <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Nov</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Dec</span><span class="st st-sg">&#39;</span>)]
- <span class="name">MONTHS_FULL</span> <span class="op">=</span> [<span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">January</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">February</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">March</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">April</span><span class="st st-sg">&#39;</span>),
- <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">May:full</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">June</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">July</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">August</span><span class="st st-sg">&#39;</span>),
- <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">September</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">October</span><span class="st st-sg">&#39;</span>), <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">November</span><span class="st st-sg">&#39;</span>),
- <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">December</span><span class="st st-sg">&#39;</span>)]
-
- <span class="kw">def </span><span class="fun">__init__</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">dateobj</span>):
- <span class="bn bn-pseudo">self</span>.<span class="name">req</span> <span class="op">=</span> <span class="name">req</span>
-
- <span class="kw">if</span> <span class="bn">isinstance</span>(<span class="name">dateobj</span>, <span class="name">datetime</span>):
- <span class="bn bn-pseudo">self</span>.<span class="name">date</span> <span class="op">=</span> <span class="name">dateobj</span>
-
- <span class="kw">elif</span> <span class="bn">isinstance</span>(<span class="name">dateobj</span>, <span class="bn">int</span>):
- <span class="bn bn-pseudo">self</span>.<span class="name">date</span> <span class="op">=</span> <span class="name">datetime</span>.<span class="name">utcfromtimestamp</span>(<span class="name">dateobj</span>)
- <span class="kw">elif</span> <span class="bn">isinstance</span>(<span class="name">dateobj</span>, <span class="name">time</span>.<span class="name">struct_time</span>):
- <span class="bn bn-pseudo">self</span>.<span class="name">date</span> <span class="op">=</span> <span class="name">datetime</span>(<span class="name">dateobj</span>[:<span class="nb nb-int">7</span>])
- <span class="kw">elif</span> <span class="name">dateobj</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">date</span> <span class="op">=</span> <span class="name">datetime</span>(<span class="nb nb-int">1</span>, <span class="nb nb-int">1</span>, <span class="nb nb-int">1</span>)
- <span class="kw">else</span>:
- <span class="kw">raise</span> <span class="exc">TypeError</span>(<span class="st st-sg">&#39;</span><span class="st st-int">%r</span><span class="st"> is not a valid time object</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">dateobj</span>)
-
- <span class="kw">def </span><span class="fun">format</span>(<span class="bn bn-pseudo">self</span>, <span class="name">formatstring</span>):
- <span class="name">bits</span> <span class="op">=</span> []
- <span class="kw">for</span> <span class="name">bit</span> <span class="op op-word">in</span> <span class="name">split_format</span>(<span class="name">formatstring</span>):
- <span class="kw">if</span> <span class="name">bit</span>.<span class="name">startswith</span>(<span class="st st-sg">&#39;</span><span class="st">%</span><span class="st st-sg">&#39;</span>):
- <span class="name">handler</span> <span class="op">=</span> <span class="bn">getattr</span>(<span class="bn bn-pseudo">self</span>, <span class="st st-sg">&#39;</span><span class="st">format_</span><span class="st st-sg">&#39;</span> <span class="op">+</span> <span class="name">bit</span>[<span class="nb nb-int">1</span>], <span class="bn bn-pseudo">None</span>)
- <span class="kw">if</span> <span class="name">handler</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">bits</span>.<span class="name">append</span>(<span class="name">handler</span>())
- <span class="kw">else</span>:
- <span class="name">bits</span>.<span class="name">append</span>(<span class="name">bit</span>)
- <span class="kw">else</span>:
- <span class="name">bits</span>.<span class="name">append</span>(<span class="name">bit</span>)
- <span class="kw">return</span> <span class="name">u</span><span class="st st-sg">&#39;&#39;</span>.<span class="name">join</span>(<span class="name">bits</span>)
-
- <span class="kw">def </span><span class="fun">format_a</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">abbreviated weekday name.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="bn bn-pseudo">self</span>.<span class="name">req</span>.<span class="name">gettext</span>(<span class="bn bn-pseudo">self</span>.<span class="name">WEEKDAYS_ABBR</span>[<span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">weekday</span>()])
-
- <span class="kw">def </span><span class="fun">format_A</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">full weekday name.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="bn bn-pseudo">self</span>.<span class="name">req</span>.<span class="name">gettext</span>(<span class="bn bn-pseudo">self</span>.<span class="name">WEEKDAYS_FULL</span>[<span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">weekday</span>()])
-
- <span class="kw">def </span><span class="fun">format_b</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">abbreviated month name.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="bn bn-pseudo">self</span>.<span class="name">req</span>.<span class="name">gettext</span>(<span class="bn bn-pseudo">self</span>.<span class="name">MONTHS_ABBR</span>[<span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">month</span> <span class="op">-</span> <span class="nb nb-int">1</span>])
-
- <span class="kw">def </span><span class="fun">format_B</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">full month name.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="bn bn-pseudo">self</span>.<span class="name">req</span>.<span class="name">gettext</span>(<span class="bn bn-pseudo">self</span>.<span class="name">MONTHS_FULL</span>[<span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">month</span> <span class="op">-</span> <span class="nb nb-int">1</span>])
-
- <span class="kw">def </span><span class="fun">format_d</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Day of the month as a decimal number [01,31].</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="bn">unicode</span>(<span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">day</span>)
-
- <span class="kw">def </span><span class="fun">format_H</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Hour (24-hour clock) as a decimal number [00,23].</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="bn">unicode</span>(<span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">hour</span>)
-
- <span class="kw">def </span><span class="fun">format_I</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Hour (12-hour clock) as a decimal number [01,12].</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="bn">unicode</span>(<span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">hour</span> <span class="op">%</span> <span class="nb nb-int">12</span>)
-
- <span class="kw">def </span><span class="fun">format_j</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Day of the year as a decimal number [001,366].</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="bn">unicode</span>(<span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">strftime</span>(<span class="st st-sg">&#39;</span><span class="st">%j</span><span class="st st-sg">&#39;</span>))
-
- <span class="kw">def </span><span class="fun">format_J</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Day of the year as decimal number [1,366].</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="bn">unicode</span>(<span class="bn">int</span>(<span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">strftime</span>(<span class="st st-sg">&#39;</span><span class="st">%j</span><span class="st st-sg">&#39;</span>)))
-
- <span class="kw">def </span><span class="fun">format_m</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Month as a decimal number [01,12].</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="name">u</span><span class="st st-sg">&#39;</span><span class="st st-int">%02d</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">month</span>
-
- <span class="kw">def </span><span class="fun">format_n</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Month as a decimal number [1,12].</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="bn">unicode</span>(<span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">month</span>)
-
- <span class="kw">def </span><span class="fun">format_M</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Minute as a decimal number [00,59].</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="name">u</span><span class="st st-sg">&#39;</span><span class="st st-int">%02d</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">minute</span>
-
- <span class="kw">def </span><span class="fun">format_N</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Minute as a decimal number [0,59].</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="bn">unicode</span>(<span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">minute</span>)
-
- <span class="kw">def </span><span class="fun">format_p</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Locale&#39;s equivalent of either AM or PM.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="name">_</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">req</span>.<span class="name">gettext</span>
- <span class="kw">if</span> <span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">hour</span> <span class="op">&gt;</span> <span class="nb nb-int">11</span>:
- <span class="kw">return</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">PM</span><span class="st st-sg">&#39;</span>)
- <span class="kw">return</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">AM</span><span class="st st-sg">&#39;</span>)
-
- <span class="kw">def </span><span class="fun">format_P</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Locale&#39;s equivalent of either a.m. or p.m.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="name">_</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">req</span>.<span class="name">gettext</span>
- <span class="kw">if</span> <span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">hour</span> <span class="op">&gt;</span> <span class="nb nb-int">11</span>:
- <span class="kw">return</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">p.m.</span><span class="st st-sg">&#39;</span>)
- <span class="kw">return</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">a.m.</span><span class="st st-sg">&#39;</span>)
-
- <span class="kw">def </span><span class="fun">format_s</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Second as a decimal number [0,61].</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="bn">unicode</span>(<span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">second</span>)
-
- <span class="kw">def </span><span class="fun">format_S</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Second as a decimal number [00,61].</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="name">u</span><span class="st st-sg">&#39;</span><span class="st st-int">%02d</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">second</span>
-
- <span class="kw">def </span><span class="fun">format_U</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Week number of the year (Sunday as the first day of the week)
- as a decimal number [00,53]. All days in a new year preceding the
- first Sunday are considered to be in week 0.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="bn">unicode</span>(<span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">strftime</span>(<span class="st st-sg">&#39;</span><span class="st">%U</span><span class="st st-sg">&#39;</span>))
-
- <span class="kw">def </span><span class="fun">format_u</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Week number of the year (Sunday as the first day of the week)
- as a decimal number [0,53]. All days in a new year preceding the
- first Sunday are considered to be in week 0.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="bn">unicode</span>(<span class="bn">int</span>(<span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">strftime</span>(<span class="st st-sg">&#39;</span><span class="st">%U</span><span class="st st-sg">&#39;</span>)))
-
- <span class="kw">def </span><span class="fun">format_w</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Weekday as a decimal number [0(Sunday),6].</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="bn">unicode</span>(<span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">strftime</span>(<span class="st st-sg">&#39;</span><span class="st">%w</span><span class="st st-sg">&#39;</span>))
-
- <span class="kw">def </span><span class="fun">format_z</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Weekday as a decimal number [0(Monday),6].</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="cm">#XXX: anyone something better than z?</span>
- <span class="kw">return</span> <span class="bn">unicode</span>(<span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">weekday</span>)
-
- <span class="kw">def </span><span class="fun">format_W</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Week number of the year (Monday as the first day of the week)
- as a decimal number [00,53]. All days in a new year preceding the
- first Monday are considered to be in week 0.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="bn">unicode</span>(<span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">strftime</span>(<span class="st st-sg">&#39;</span><span class="st">%W</span><span class="st st-sg">&#39;</span>))
-
- <span class="kw">def </span><span class="fun">format_v</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Week number of the year (Monday as the first day of the week)
- as a decimal number [0,53]. All days in a new year preceding the
- first Monday are considered to be in week 0.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="bn">unicode</span>(<span class="bn">int</span>(<span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">strftime</span>(<span class="st st-sg">&#39;</span><span class="st">%W</span><span class="st st-sg">&#39;</span>)))
-
- <span class="kw">def </span><span class="fun">format_y</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Year without century as a decimal number [00,99].</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="bn">unicode</span>(<span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">strftime</span>(<span class="st st-sg">&#39;</span><span class="st">%y</span><span class="st st-sg">&#39;</span>))
-
- <span class="kw">def </span><span class="fun">format_Y</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Year with century as a decimal number.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="bn">unicode</span>(<span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">year</span>)
-
- <span class="kw">def </span><span class="fun">format_r</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">English ordinal suffix for the day of the month, 2 characters;
- i.e. &#39;st&#39;, &#39;nd&#39;, &#39;rd&#39; or &#39;th&#39;</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="name">_</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">req</span>.<span class="name">gettext</span>
- <span class="kw">if</span> <span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">day</span> <span class="op op-word">in</span> (<span class="nb nb-int">11</span>, <span class="nb nb-int">12</span>, <span class="nb nb-int">13</span>):
- <span class="kw">return</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">th</span><span class="st st-sg">&#39;</span>)
- <span class="name">last</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">day</span> <span class="op">%</span> <span class="nb nb-int">10</span>
-
- <span class="kw">if</span> <span class="name">last</span> <span class="op">==</span> <span class="nb nb-int">1</span>:
- <span class="kw">return</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">st</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="name">last</span> <span class="op">==</span> <span class="nb nb-int">2</span>:
- <span class="kw">return</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">nd</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="name">last</span> <span class="op">==</span> <span class="nb nb-int">3</span>:
- <span class="kw">return</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">rd</span><span class="st st-sg">&#39;</span>)
- <span class="kw">return</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">th</span><span class="st st-sg">&#39;</span>)
-
- <span class="kw">def </span><span class="fun">format_t</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Number of days in the given month; i.e. &#39;28&#39; to &#39;31&#39;</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="st st-sg">&#39;</span><span class="st st-int">%02d</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">monthrange</span>(<span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">year</span>, <span class="bn bn-pseudo">self</span>.<span class="name">date</span>.<span class="name">month</span>)[<span class="nb nb-int">1</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">%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="st st-sg">&#39;</span><span class="st">, </span><span class="st st-sg">&#39;</span>.<span class="name">join</span>(<span class="bn">str</span>(<span class="name">i</span>[<span class="nb nb-int">7</span>:]) <span class="kw">for</span> <span class="name">i</span> <span class="op op-word">in</span> <span class="bn">dir</span>(<span class="bn bn-pseudo">self</span>) <span class="kw">if</span> <span class="name">i</span>.<span class="name">startswith</span>(<span class="st st-sg">&#39;</span><span class="st">format_</span><span class="st st-sg">&#39;</span>))
- )
-
-
-
-<span class="kw">def </span><span class="fun">format_timedelta</span>(<span class="name">req</span>, <span class="name">time1</span><span class="op">=</span><span class="bn bn-pseudo">None</span>, <span class="name">time2</span><span class="op">=</span><span class="bn bn-pseudo">None</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Format the difference between two datetime or unix timestamp objects::
-
- &gt;&gt;&gt; from pocoo.pkg.core.l10n import timedeltaformat
- &gt;&gt;&gt; now = datetime.now()
- &gt;&gt;&gt; timedeltaformat(req, now)
- u&#39;6 seconds ago&#39;
-
- </span><span class="st st-db">&quot;&quot;&quot;</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">time1</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">time1</span> <span class="op">=</span> <span class="name">datetime</span>.<span class="name">utcnow</span>()
- <span class="kw">if</span> <span class="bn">isinstance</span>(<span class="name">time1</span>, <span class="name">datetime</span>):
- <span class="name">time1</span> <span class="op">=</span> <span class="name">time</span>.<span class="name">mktime</span>(<span class="name">time1</span>.<span class="name">timetuple</span>()) <span class="op">+</span> <span class="name">time1</span>.<span class="name">microsecond</span> <span class="op">/</span> <span class="nb nb-int">1</span><span class="name">e6</span>
-
- <span class="kw">if</span> <span class="name">time2</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">time2</span> <span class="op">=</span> <span class="name">datetime</span>.<span class="name">utcnow</span>()
- <span class="kw">if</span> <span class="bn">isinstance</span>(<span class="name">time2</span>, <span class="name">datetime</span>):
- <span class="name">time2</span> <span class="op">=</span> <span class="name">time</span>.<span class="name">mktime</span>(<span class="name">time2</span>.<span class="name">timetuple</span>()) <span class="op">+</span> <span class="name">time2</span>.<span class="name">microsecond</span> <span class="op">/</span> <span class="nb nb-int">1</span><span class="name">e6</span>
-
- <span class="kw">if</span> <span class="name">time1</span> <span class="op">&gt;</span> <span class="name">time2</span>:
- <span class="name">tmpl</span> <span class="op">=</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st st-int">%d</span><span class="st"> </span><span class="st st-int">%s</span><span class="st"> in the future</span><span class="st st-sg">&#39;</span>)
- <span class="kw">else</span>:
- <span class="name">tmpl</span> <span class="op">=</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st st-int">%d</span><span class="st"> </span><span class="st st-int">%s</span><span class="st"> ago</span><span class="st st-sg">&#39;</span>)
- <span class="kw">def </span><span class="fun">trans</span>(<span class="name">s</span>, <span class="name">entity</span>):
- <span class="kw">if</span> <span class="name">entity</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">s</span><span class="st st-sg">&#39;</span>:
- <span class="name">e</span> <span class="op">=</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">second</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">seconds</span><span class="st st-sg">&#39;</span>, <span class="name">s</span>)
- <span class="kw">elif</span> <span class="name">entity</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">m</span><span class="st st-sg">&#39;</span>:
- <span class="name">e</span> <span class="op">=</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">minute</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">minutes</span><span class="st st-sg">&#39;</span>, <span class="name">s</span>)
- <span class="kw">elif</span> <span class="name">entity</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">h</span><span class="st st-sg">&#39;</span>:
- <span class="name">e</span> <span class="op">=</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">hour</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">hours</span><span class="st st-sg">&#39;</span>, <span class="name">s</span>)
- <span class="kw">elif</span> <span class="name">entity</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">d</span><span class="st st-sg">&#39;</span>:
- <span class="name">e</span> <span class="op">=</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">day</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">days</span><span class="st st-sg">&#39;</span>, <span class="name">s</span>)
- <span class="kw">elif</span> <span class="name">entity</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">w</span><span class="st st-sg">&#39;</span>:
- <span class="name">e</span> <span class="op">=</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">week</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">weeks</span><span class="st st-sg">&#39;</span>, <span class="name">s</span>)
- <span class="kw">elif</span> <span class="name">entity</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">M</span><span class="st st-sg">&#39;</span>:
- <span class="name">e</span> <span class="op">=</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">month</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">months</span><span class="st st-sg">&#39;</span>, <span class="name">s</span>)
- <span class="kw">else</span>:
- <span class="name">e</span> <span class="op">=</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">year</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">years</span><span class="st st-sg">&#39;</span>, <span class="name">s</span>)
- <span class="kw">return</span> <span class="name">tmpl</span> <span class="op">%</span> (<span class="name">s</span>, <span class="name">e</span>)
- <span class="name">diff</span> <span class="op">=</span> <span class="bn">abs</span>(<span class="bn">int</span>(<span class="name">time2</span> <span class="op">-</span> <span class="name">time1</span>))
- <span class="kw">for</span> <span class="name">u</span>, <span class="name">e</span> <span class="op op-word">in</span> <span class="name">TIME_DELTA_UNITS</span>:
- <span class="name">r</span> <span class="op">=</span> <span class="name">diff</span> <span class="op">/</span> <span class="bn">float</span>(<span class="name">u</span>)
- <span class="kw">if</span> <span class="name">r</span> <span class="op">&gt;=</span> <span class="nb nb-flt">0.9</span>:
- <span class="name">s</span> <span class="op">=</span> <span class="bn">int</span>(<span class="bn">round</span>(<span class="name">r</span>))
- <span class="kw">return</span> <span class="name">trans</span>(<span class="name">s</span>, <span class="name">e</span>)
- <span class="kw">return</span> <span class="name">trans</span>(<span class="name">diff</span>, <span class="st st-sg">&#39;</span><span class="st">s</span><span class="st st-sg">&#39;</span>)
-
-
-
-<span class="kw">def </span><span class="fun">dateformat</span>(<span class="name">date</span>, <span class="name">context</span>):
- <span class="cm">#XXX: load default string from i10n language file</span>
- <span class="name">req</span> <span class="op">=</span> <span class="name">context</span>[<span class="st st-sg">&#39;</span><span class="st">REQUEST</span><span class="st st-sg">&#39;</span>]
- <span class="name">formatstr</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">dateformat</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="name">formatstr</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">formatstr</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">general</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">dateformat</span><span class="st st-sg">&#39;</span>,
- <span class="name">DEFAULT_DATE_FORMAT</span>)
- <span class="name">f</span> <span class="op">=</span> <span class="name">DateFormatter</span>(<span class="name">req</span>, <span class="name">date</span> <span class="op op-word">or</span> <span class="bn bn-pseudo">None</span>)
- <span class="kw">return</span> <span class="name">f</span>.<span class="name">format</span>(<span class="name">formatstr</span>)
-
-
-
-<span class="kw">def </span><span class="fun">timeformat</span>(<span class="name">date</span>, <span class="name">context</span>):
- <span class="cm">#XXX: load default string from l10n language file</span>
- <span class="name">req</span> <span class="op">=</span> <span class="name">context</span>[<span class="st st-sg">&#39;</span><span class="st">REQUEST</span><span class="st st-sg">&#39;</span>]
- <span class="name">formatstr</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">timeformat</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="name">formatstr</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">formatstr</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">general</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">timeformat</span><span class="st st-sg">&#39;</span>,
- <span class="name">DEFAULT_TIME_FORMAT</span>)
- <span class="name">f</span> <span class="op">=</span> <span class="name">DateFormatter</span>(<span class="name">req</span>, <span class="name">date</span> <span class="op op-word">or</span> <span class="bn bn-pseudo">None</span>)
- <span class="kw">return</span> <span class="name">f</span>.<span class="name">format</span>(<span class="name">formatstr</span>)
-
-
-
-<span class="kw">def </span><span class="fun">datetimeformat</span>(<span class="name">date</span>, <span class="name">context</span>):
- <span class="cm">#XXX: load default string from l10n language file</span>
- <span class="name">req</span> <span class="op">=</span> <span class="name">context</span>[<span class="st st-sg">&#39;</span><span class="st">REQUEST</span><span class="st st-sg">&#39;</span>]
- <span class="name">formatstr</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">datetimeformat</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="name">formatstr</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">formatstr</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">general</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">datetimeformat</span><span class="st st-sg">&#39;</span>,
- <span class="name">DEFAULT_DATETIME_FORMAT</span>)
- <span class="name">f</span> <span class="op">=</span> <span class="name">DateFormatter</span>(<span class="name">req</span>, <span class="name">date</span> <span class="op op-word">or</span> <span class="bn bn-pseudo">None</span>)
- <span class="kw">return</span> <span class="name">f</span>.<span class="name">format</span>(<span class="name">formatstr</span>)
-
-
-
-<span class="kw">def </span><span class="fun">timedeltaformat</span>(<span class="name">date</span>, <span class="name">context</span>, <span class="name">obj2</span><span class="op">=</span><span class="bn bn-pseudo">None</span>):
- <span class="name">req</span> <span class="op">=</span> <span class="name">context</span>[<span class="st st-sg">&#39;</span><span class="st">REQUEST</span><span class="st st-sg">&#39;</span>]
- <span class="kw">return</span> <span class="name">format_timedelta</span>(<span class="name">req</span>, <span class="name">date</span> <span class="op op-word">or</span> <span class="bn bn-pseudo">None</span>, <span class="name">obj2</span> <span class="op op-word">or</span> <span class="bn bn-pseudo">None</span>)
-
-<span class="cm"># -*- coding: utf-8 -*-</span>
-<span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- pocoo.pkg.core.pages
- ~~~~~~~~~~~~~~~~~~~~
-
- Pocoo core pages.
-
- :copyright: 2006 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">pocoo.http</span><span class="kw"> import</span> <span class="name">Response</span>, <span class="name">HttpRedirect</span>, <span class="name">TemplateResponse</span>, \
- <span class="name">AccessDeniedResponse</span>, <span class="name">PageNotFound</span>
-
-<span class="kw">from </span><span class="cls">pocoo.settings</span><span class="kw"> import</span> <span class="name">cfg</span>
-<span class="kw">from </span><span class="cls">pocoo.template</span><span class="kw"> import</span> <span class="name">PagePublisher</span>, <span class="name">render_template</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.utils.mail</span><span class="kw"> import</span> <span class="name">Email</span>
-<span class="kw">from </span><span class="cls">pocoo.utils.net</span><span class="kw"> import</span> <span class="name">make_url_context_external</span>
-<span class="kw">from </span><span class="cls">pocoo.utils.form</span><span class="kw"> import</span> <span class="name">Form</span>, <span class="name">TextField</span>, <span class="name">TextArea</span>, <span class="name">SelectBox</span>, <span class="name">CheckBox</span>
-
-<span class="kw">from </span><span class="cls">pocoo.utils.validators</span><span class="kw"> import</span> <span class="name">isNotEmpty</span>, <span class="name">isSameValue</span>, <span class="name">isEmail</span>, \
- <span class="name">checkTextLength</span>, <span class="name">isOneLetter</span>, <span class="name">mayEmpty</span>, <span class="name">coppaIsChecked</span>
-
-<span class="kw">from </span><span class="cls">pocoo.utils.json</span><span class="kw"> import</span> <span class="name">parse_datetime</span>
-
-<span class="kw">from </span><span class="cls">pocoo.pkg.core.remotecall</span><span class="kw"> import</span> <span class="name">RemoteCallable</span>, <span class="name">export</span>
-
-<span class="kw">from </span><span class="cls">pocoo.pkg.core.validators</span><span class="kw"> import</span> <span class="name">isAvailableUsername</span>, <span class="name">isStrongPassword</span>, \
- <span class="name">isExistingUsername</span>, <span class="name">isAnonymousUsername</span>
-<span class="kw">from </span><span class="cls">pocoo.pkg.core.usersettings</span><span class="kw"> import</span> <span class="name">UserSettingsPage</span>
-
-<span class="kw">from </span><span class="cls">pocoo.pkg.core.db</span><span class="kw"> import</span> <span class="name">users</span>
-<span class="kw">from </span><span class="cls">pocoo.pkg.core.forum</span><span class="kw"> import</span> <span class="name">get_forum_index</span>, <span class="name">get_forum</span>, <span class="name">get_post_tree</span>, \
- <span class="name">get_forum_pathbar</span>, <span class="name">get_view_mode</span>, <span class="name">get_flat_view</span>, <span class="name">quote_post</span>, <span class="name">edit_post</span>, \
- <span class="name">get_post</span>, <span class="name">Thread</span>, <span class="name">get_last_posts</span>, <span class="name">get_last_thread_change</span>, <span class="name">get_post_pathbar</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="name">get_user_list</span>, \
- <span class="name">get_user</span>, <span class="name">get_user_avatar</span>, <span class="name">reset_password</span>
-<span class="kw">from </span><span class="cls">pocoo.pkg.core.session</span><span class="kw"> import</span> <span class="name">get_active_sessions</span>, <span class="name">get_sessions_by_action</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">get_editor</span>
-
-<span class="name">_</span> <span class="op">=</span> <span class="kw">lambda</span> <span class="name">x</span>: <span class="name">x</span>
-
-
-<span class="kw">class </span><span class="cls">IndexPage</span>(<span class="name">RequestHandler</span>, <span class="name">PagePublisher</span>, <span class="name">RemoteCallable</span>):
- <span class="name">page_name</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">index</span><span class="st st-sg">&#39;</span>
-
- <span class="name">relative_url</span> <span class="op">=</span> <span class="st st-sg">&#39;&#39;</span>
- <span class="name">handler_regexes</span> <span class="op">=</span> [<span class="name">u</span><span class="st st-sg">&#39;</span><span class="st">$</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">return</span> <span class="name">TemplateResponse</span>(<span class="st st-sg">&#39;</span><span class="st">index.html</span><span class="st st-sg">&#39;</span>,
- <span class="name">categories</span><span class="op">=</span><span class="name">get_forum_index</span>(<span class="name">req</span>),
- <span class="name">feed_url</span><span class="op">=</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/recent.xml</span><span class="st st-sg">&#39;</span>)
- )
-
-
-
-<span class="kw">class </span><span class="cls">ForumPage</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">forum/(?P&lt;forum_id&gt;\d+)$</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">forum_id</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">try</span>:
- <span class="name">page</span> <span class="op">=</span> <span class="bn">int</span>(<span class="name">req</span>.<span class="name">args</span>.<span class="name">get</span>(<span class="st st-sg">&#39;</span><span class="st">page</span><span class="st st-sg">&#39;</span>))
- <span class="kw">except</span> (<span class="exc">TypeError</span>, <span class="exc">ValueError</span>):
- <span class="name">page</span> <span class="op">=</span> <span class="nb nb-int">1</span>
-
- <span class="name">forum</span> <span class="op">=</span> <span class="name">get_forum</span>(<span class="name">req</span>, <span class="name">forum_id</span>, <span class="name">page</span>)
- <span class="kw">if</span> <span class="name">forum</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="kw">return</span> <span class="name">PageNotFound</span>()
- <span class="cm"># Redirect if the forum is a link</span>
-
- <span class="kw">if</span> <span class="name">forum</span>[<span class="st st-sg">&#39;</span><span class="st">is_external_url</span><span class="st st-sg">&#39;</span>]:
- <span class="kw">return</span> <span class="name">HttpRedirect</span>(<span class="name">forum</span>[<span class="st st-sg">&#39;</span><span class="st">link</span><span class="st st-sg">&#39;</span>], <span class="name">local</span><span class="op">=</span><span class="bn bn-pseudo">False</span>)
- <span class="kw">return</span> <span class="name">TemplateResponse</span>(<span class="st st-sg">&#39;</span><span class="st">viewforum.html</span><span class="st st-sg">&#39;</span>,
- <span class="name">forum</span><span class="op">=</span><span class="name">forum</span>,
- <span class="name">pathbar</span><span class="op">=</span><span class="name">get_forum_pathbar</span>(<span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>, <span class="name">forum_id</span>),
- <span class="name">feed_url</span><span class="op">=</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/forum/</span><span class="st st-int">%d</span><span class="st">.xml</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">forum_id</span>)
- )
-
-
-
-<span class="kw">class </span><span class="cls">PostPage</span>(<span class="name">RequestHandler</span>, <span class="name">RemoteCallable</span>):
- <span class="name">handler_regexes</span> <span class="op">=</span> [<span class="st st-sg">r&#39;</span><span class="st">post/(?P&lt;post_id&gt;\d+)$</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">post_id</span>):
- <span class="name">view</span> <span class="op">=</span> <span class="name">get_view_mode</span>(<span class="name">req</span>)
- <span class="kw">if</span> <span class="name">view</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">flat</span><span class="st st-sg">&#39;</span>:
- <span class="kw">return</span> <span class="bn bn-pseudo">self</span>.<span class="name">_flat_view</span>(<span class="name">req</span>, <span class="bn">int</span>(<span class="name">post_id</span>))
- <span class="kw">else</span>:
- <span class="kw">return</span> <span class="bn bn-pseudo">self</span>.<span class="name">_threaded_view</span>(<span class="name">req</span>, <span class="bn">int</span>(<span class="name">post_id</span>))
-
- <span class="kw">def </span><span class="fun">_flat_view</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">post_id</span>):
- <span class="name">topic</span> <span class="op">=</span> <span class="name">get_flat_view</span>(<span class="name">req</span>, <span class="name">post_id</span>)
- <span class="kw">if</span> <span class="name">topic</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="kw">return</span> <span class="name">PageNotFound</span>()
- <span class="kw">return</span> <span class="name">TemplateResponse</span>(<span class="st st-sg">&#39;</span><span class="st">viewtopic.html</span><span class="st st-sg">&#39;</span>,
- <span class="name">topic</span><span class="op">=</span><span class="name">topic</span>,
- <span class="name">pathbar</span><span class="op">=</span><span class="name">get_post_pathbar</span>(<span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>, <span class="name">topic</span>[<span class="st st-sg">&#39;</span><span class="st">posts</span><span class="st st-sg">&#39;</span>][<span class="nb nb-int">0</span>][<span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>]),
- <span class="name">feed_url</span><span class="op">=</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/thread/</span><span class="st st-int">%d</span><span class="st">.xml</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">post_id</span>)
- )
-
- <span class="kw">def </span><span class="fun">_threaded_view</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">post_id</span>):
- <span class="name">thread</span> <span class="op">=</span> <span class="name">get_post_tree</span>(<span class="name">req</span>, <span class="name">post_id</span>)
- <span class="kw">if</span> <span class="name">thread</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="kw">return</span> <span class="name">PageNotFound</span>()
- <span class="kw">return</span> <span class="name">TemplateResponse</span>(<span class="st st-sg">&#39;</span><span class="st">viewthread.html</span><span class="st st-sg">&#39;</span>,
- <span class="name">thread</span><span class="op">=</span><span class="name">thread</span>,
- <span class="name">pathbar</span><span class="op">=</span><span class="name">get_post_pathbar</span>(<span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>, <span class="name">thread</span>[<span class="st st-sg">&#39;</span><span class="st">posts</span><span class="st st-sg">&#39;</span>][<span class="nb nb-int">0</span>][<span class="st st-sg">&#39;</span><span class="st">post_id</span><span class="st st-sg">&#39;</span>]),
- <span class="name">feed_url</span><span class="op">=</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/thread/</span><span class="st st-int">%d</span><span class="st">.xml</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">post_id</span>)
- )
-
- <span class="deco">@export</span>(<span class="st st-sg">&#39;</span><span class="st">thread.get_post</span><span class="st st-sg">&#39;</span>)
- <span class="kw">def </span><span class="fun">_get_post</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">post_id</span>):
- <span class="name">post</span> <span class="op">=</span> <span class="name">get_post</span>(<span class="name">req</span>, <span class="name">post_id</span>)
- <span class="kw">if</span> <span class="name">post</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">render_template</span>(<span class="name">req</span>, <span class="st st-sg">&#39;</span><span class="st">partial/post.html</span><span class="st st-sg">&#39;</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="deco">@export</span>(<span class="st st-sg">&#39;</span><span class="st">thread.tree_requires_update</span><span class="st st-sg">&#39;</span>)
- <span class="kw">def </span><span class="fun">_tree_requires_update</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">post_id</span>, <span class="name">last_update</span>):
- <span class="name">last_update</span> <span class="op">=</span> <span class="name">parse_datetime</span>(<span class="name">last_update</span>)
- <span class="name">last_thread_change</span> <span class="op">=</span> <span class="name">get_last_thread_change</span>(<span class="name">req</span>, <span class="name">post_id</span>)
- <span class="kw">print</span> <span class="name">last_thread_change</span>, <span class="name">last_update</span>
-
- <span class="kw">return</span> <span class="name">last_thread_change</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">last_thread_change</span> <span class="op">&gt;</span> <span class="name">last_update</span>
-
- <span class="deco">@export</span>(<span class="st st-sg">&#39;</span><span class="st">thread.get_tree</span><span class="st st-sg">&#39;</span>)
- <span class="kw">def </span><span class="fun">_get_tree</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">post_id</span>):
- <span class="kw">return</span> <span class="name">render_template</span>(<span class="name">req</span>, <span class="st st-sg">&#39;</span><span class="st">partial/tree.html</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">get_post_tree</span>(<span class="name">req</span>, <span class="name">post_id</span>)[<span class="st st-sg">&#39;</span><span class="st">posts</span><span class="st st-sg">&#39;</span>]
- })
-
-
-
-<span class="kw">class </span><span class="cls">LoginPage</span>(<span class="name">RequestHandler</span>, <span class="name">PagePublisher</span>):
- <span class="name">page_name</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">login</span><span class="st st-sg">&#39;</span>
- <span class="name">relative_url</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">login</span><span class="st st-sg">&#39;</span>
-
- <span class="name">handler_regexes</span> <span class="op">=</span> [<span class="st st-sg">&#39;</span><span class="st">^login$</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">next</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">values</span>.<span class="name">get</span>(<span class="st st-sg">&#39;</span><span class="st">next</span><span class="st st-sg">&#39;</span>, <span class="bn bn-pseudo">None</span>)
- <span class="kw">if</span> <span class="name">next</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">next</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">environ</span>.<span class="name">get</span>(<span class="st st-sg">&#39;</span><span class="st">HTTP_REFERER</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">next</span>:
- <span class="name">next</span> <span class="op">=</span> <span class="name">u</span><span class="st st-sg">&#39;&#39;</span>
-
- <span class="name">_</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">gettext</span>
- <span class="name">msg</span> <span class="op">=</span> <span class="name">u</span><span class="st st-sg">&#39;&#39;</span>
- <span class="kw">if</span> <span class="name">req</span>.<span class="name">user</span>.<span class="name">identified</span>:
- <span class="kw">return</span> <span class="name">HttpRedirect</span>(<span class="name">next</span>)
- <span class="name">form</span> <span class="op">=</span> <span class="name">Form</span>(<span class="name">req</span>, <span class="bn bn-pseudo">self</span>, <span class="st st-sg">&#39;</span><span class="st">POST</span><span class="st st-sg">&#39;</span>,
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>, <span class="name">validator</span><span class="op">=</span><span class="name">isNotEmpty</span>()),
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">password</span><span class="st st-sg">&#39;</span>, <span class="name">validator</span><span class="op">=</span><span class="name">isNotEmpty</span>())
- )
- <span class="kw">if</span> <span class="name">req</span>.<span class="name">method</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">POST</span><span class="st st-sg">&#39;</span>:
- <span class="name">form</span>.<span class="name">update</span>(<span class="name">req</span>.<span class="name">form</span>, <span class="name">prefix</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">f_</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">form</span>.<span class="name">has_errors</span>:
- <span class="name">d</span> <span class="op">=</span> <span class="name">form</span>.<span class="name">to_dict</span>()
- <span class="name">login</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">auth</span>.<span class="name">do_login</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="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">password</span><span class="st st-sg">&#39;</span>])
- <span class="kw">if</span> <span class="name">login</span>:
- <span class="kw">if</span> <span class="bn">isinstance</span>(<span class="name">login</span>, <span class="name">Response</span>):
- <span class="kw">return</span> <span class="name">login</span>
-
- <span class="kw">return</span> <span class="name">TemplateResponse</span>(<span class="st st-sg">&#39;</span><span class="st">messages/login.html</span><span class="st st-sg">&#39;</span>,
- <span class="name">username</span><span class="op">=</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="name">next</span><span class="op">=</span><span class="name">next</span>
-
- )
- <span class="kw">else</span>:
- <span class="name">msg</span> <span class="op">=</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Login failed. You may have entered an invalid </span><span class="st st-sg">&#39;</span>
- <span class="st st-sg">&#39;</span><span class="st">username or password or your account is not </span><span class="st st-sg">&#39;</span>
- <span class="st st-sg">&#39;</span><span class="st">activated yet.</span><span class="st st-sg">&#39;</span>)
- <span class="kw">return</span> <span class="name">TemplateResponse</span>(<span class="st st-sg">&#39;</span><span class="st">login.html</span><span class="st st-sg">&#39;</span>,
- <span class="name">msg</span><span class="op">=</span><span class="name">msg</span>,
- <span class="name">form</span><span class="op">=</span><span class="name">form</span>.<span class="name">generate</span>(<span class="name">prefix</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">f_</span><span class="st st-sg">&#39;</span>),
- <span class="name">next</span><span class="op">=</span><span class="name">next</span>
-
- )
-
-
-<span class="kw">class </span><span class="cls">LogoutPage</span>(<span class="name">RequestHandler</span>, <span class="name">PagePublisher</span>):
- <span class="name">page_name</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">logout</span><span class="st st-sg">&#39;</span>
- <span class="name">relative_url</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">logout</span><span class="st st-sg">&#39;</span>
-
- <span class="name">handler_regexes</span> <span class="op">=</span> [<span class="st st-sg">r&#39;</span><span class="st">logout$</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">back</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">environ</span>.<span class="name">get</span>(<span class="st st-sg">&#39;</span><span class="st">HTTP_REFERER</span><span class="st st-sg">&#39;</span>, <span class="name">u</span><span class="st st-sg">&#39;&#39;</span>)
- <span class="kw">try</span>:
- <span class="name">back</span> <span class="op">=</span> <span class="name">make_url_context_external</span>(<span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>, <span class="name">back</span>)
- <span class="kw">except</span> <span class="exc">ValueError</span>:
- <span class="name">back</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
-
- <span class="name">username</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">user</span>.<span class="name">username</span>
- <span class="name">req</span>.<span class="name">auth</span>.<span class="name">do_logout</span>()
- <span class="kw">return</span> <span class="name">TemplateResponse</span>(<span class="st st-sg">&#39;</span><span class="st">messages/logout.html</span><span class="st st-sg">&#39;</span>,
- <span class="name">username</span><span class="op">=</span><span class="name">username</span>,
- <span class="name">back</span><span class="op">=</span><span class="name">back</span>
-
- )
-
-
-<span class="kw">class </span><span class="cls">RegisterPage</span>(<span class="name">RequestHandler</span>, <span class="name">PagePublisher</span>):
- <span class="name">page_name</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">register</span><span class="st st-sg">&#39;</span>
- <span class="name">relative_url</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">register</span><span class="st st-sg">&#39;</span>
-
- <span class="name">handler_regexes</span> <span class="op">=</span> [<span class="st st-sg">&#39;</span><span class="st">register$</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">coppa</span> <span class="op">=</span> <span class="name">req</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">board</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">enable_coppa</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="name">req</span>.<span class="name">user</span>.<span class="name">identified</span>:
- <span class="kw">return</span> <span class="name">HttpRedirect</span>(<span class="st st-sg">&#39;&#39;</span>)
- <span class="kw">if</span> <span class="st st-sg">&#39;</span><span class="st">activate</span><span class="st st-sg">&#39;</span> <span class="op op-word">in</span> <span class="name">req</span>.<span class="name">args</span> <span class="op op-word">and</span> <span class="st st-sg">&#39;</span><span class="st">user</span><span class="st st-sg">&#39;</span> <span class="op op-word">in</span> <span class="name">req</span>.<span class="name">args</span>:
- <span class="kw">return</span> <span class="bn bn-pseudo">self</span>.<span class="name">activation</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="name">form</span> <span class="op">=</span> <span class="name">Form</span>(<span class="name">req</span>, <span class="bn bn-pseudo">self</span>, <span class="st st-sg">&#39;</span><span class="st">POST</span><span class="st st-sg">&#39;</span>,
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>, <span class="name">validator</span><span class="op">=</span><span class="name">isAvailableUsername</span>()),
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">password</span><span class="st st-sg">&#39;</span>, <span class="name">validator</span><span class="op">=</span><span class="name">isStrongPassword</span>()),
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">password2</span><span class="st st-sg">&#39;</span>, <span class="name">validator</span><span class="op">=</span><span class="name">isSameValue</span>(<span class="st st-sg">&#39;</span><span class="st">password</span><span class="st st-sg">&#39;</span>,
- <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">The passwords don</span><span class="st st-esc">\&#39;</span><span class="st">t match.</span><span class="st st-sg">&#39;</span>))),
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">email</span><span class="st st-sg">&#39;</span>, <span class="name">validator</span><span class="op">=</span><span class="name">isEmail</span>()),
- <span class="name">CheckBox</span>(<span class="st st-sg">&#39;</span><span class="st">coppa</span><span class="st st-sg">&#39;</span>, <span class="name">validator</span><span class="op">=</span><span class="name">coppaIsChecked</span>(<span class="name">coppa</span>)),
- )
- <span class="kw">if</span> <span class="name">req</span>.<span class="name">method</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">POST</span><span class="st st-sg">&#39;</span>:
- <span class="name">form</span>.<span class="name">update</span>(<span class="name">req</span>.<span class="name">form</span>, <span class="name">prefix</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">f_</span><span class="st st-sg">&#39;</span>)
- <span class="name">d</span> <span class="op">=</span> <span class="name">form</span>.<span class="name">to_dict</span>()
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">form</span>.<span class="name">has_errors</span>:
- <span class="name">requires_activation</span> <span class="op">=</span> <span class="name">req</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">board</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">email_verification</span><span class="st st-sg">&#39;</span>)
- <span class="name">user</span> <span class="op">=</span> <span class="name">User</span>.<span class="name">create</span>(<span class="name">req</span>.<span class="name">ctx</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="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">password</span><span class="st st-sg">&#39;</span>],
- <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">email</span><span class="st st-sg">&#39;</span>],
- <span class="name">requires_activation</span>
-
- )
- <span class="kw">if</span> <span class="name">requires_activation</span>:
- <span class="name">link</span> <span class="op">=</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;</span><span class="st">register?user=</span><span class="st st-int">%s</span><span class="st">&amp;key</span><span class="st st-int">%s</span><span class="st st-sg">&#39;</span> <span class="op">%</span>
-
- (<span class="name">user</span>.<span class="name">user_id</span>, <span class="name">user</span>.<span class="name">act_key</span>))
- <span class="name">txt</span> <span class="op">=</span> <span class="name">render_template</span>(<span class="name">req</span>, <span class="st st-sg">&#39;</span><span class="st">mails/welcome_verification.txt</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="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">password</span><span class="st st-sg">&#39;</span>: <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">password</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">forum_name</span><span class="st st-sg">&#39;</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">title</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">activate_link</span><span class="st st-sg">&#39;</span>: <span class="name">link</span>
-
- })
- <span class="name">mail</span> <span class="op">=</span> <span class="name">Email</span>(<span class="name">req</span>.<span class="name">ctx</span>, <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Welcome to the </span><span class="st st-int">%s</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">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">title</span><span class="st st-sg">&#39;</span>),
- <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">email</span><span class="st st-sg">&#39;</span>], <span class="name">txt</span>)
- <span class="name">mail</span>.<span class="name">send</span>()
- <span class="kw">return</span> <span class="name">TemplateResponse</span>(<span class="st st-sg">&#39;</span><span class="st">messages/register.html</span><span class="st st-sg">&#39;</span>,
- <span class="name">requires_activation</span><span class="op">=</span><span class="name">requires_activation</span>,
- <span class="name">username</span><span class="op">=</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="name">email</span><span class="op">=</span><span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">email</span><span class="st st-sg">&#39;</span>]
- )
- <span class="kw">return</span> <span class="name">TemplateResponse</span>(<span class="st st-sg">&#39;</span><span class="st">register.html</span><span class="st st-sg">&#39;</span>,
- <span class="name">form</span><span class="op">=</span><span class="name">form</span>.<span class="name">generate</span>(<span class="name">prefix</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">f_</span><span class="st st-sg">&#39;</span>),
- )
-
- <span class="kw">def </span><span class="fun">activation</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="name">uid</span> <span class="op">=</span> <span class="bn">int</span>(<span class="name">req</span>.<span class="name">args</span>[<span class="st st-sg">&#39;</span><span class="st">user</span><span class="st st-sg">&#39;</span>])
- <span class="name">activated</span> <span class="op">=</span> <span class="bn bn-pseudo">False</span>
-
- <span class="name">username</span> <span class="op">=</span> <span class="name">u</span><span class="st st-sg">&#39;&#39;</span>
- <span class="kw">try</span>:
- <span class="name">user</span> <span class="op">=</span> <span class="name">User</span>(<span class="name">req</span>.<span class="name">ctx</span>, <span class="name">uid</span>)
- <span class="name">key</span> <span class="op">=</span> <span class="name">user</span>.<span class="name">act_key</span>
-
- <span class="kw">except</span> <span class="exc">KeyError</span>:
- <span class="kw">pass</span>
- <span class="kw">else</span>:
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">user</span>.<span class="name">active</span> <span class="op op-word">and</span> <span class="name">req</span>.<span class="name">args</span>[<span class="st st-sg">&#39;</span><span class="st">activate</span><span class="st st-sg">&#39;</span>] <span class="op">==</span> <span class="name">key</span>:
- <span class="name">user</span>.<span class="name">activate</span>()
- <span class="name">activated</span> <span class="op">=</span> <span class="bn bn-pseudo">True</span>
-
- <span class="name">username</span> <span class="op">=</span> <span class="name">user</span>.<span class="name">username</span>
- <span class="kw">return</span> <span class="name">TemplateResponse</span>(<span class="st st-sg">&#39;</span><span class="st">messages/activation.html</span><span class="st st-sg">&#39;</span>,
- <span class="name">username</span><span class="op">=</span><span class="name">username</span>,
- <span class="name">activated</span><span class="op">=</span><span class="name">activated</span>
-
- )
-
-
-<span class="kw">class </span><span class="cls">NewPostPage</span>(<span class="name">RequestHandler</span>, <span class="name">RemoteCallable</span>):
- <span class="name">handler_regexes</span> <span class="op">=</span> [
- (<span class="st st-sg">r&#39;</span><span class="st">post/(?P&lt;post_id&gt;\d+)/reply$</span><span class="st st-sg">&#39;</span>,
- {<span class="st st-sg">&#39;</span><span class="st">action</span><span class="st st-sg">&#39;</span>:<span class="st st-sg">&#39;</span><span class="st">reply</span><span class="st st-sg">&#39;</span>}),
- (<span class="st st-sg">r&#39;</span><span class="st">post/(?P&lt;post_id&gt;\d+)/quote$</span><span class="st st-sg">&#39;</span>,
- {<span class="st st-sg">&#39;</span><span class="st">action</span><span class="st st-sg">&#39;</span>:<span class="st st-sg">&#39;</span><span class="st">quote</span><span class="st st-sg">&#39;</span>}),
- (<span class="st st-sg">r&#39;</span><span class="st">post/(?P&lt;post_id&gt;\d+)/edit$</span><span class="st st-sg">&#39;</span>,
- {<span class="st st-sg">&#39;</span><span class="st">action</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="kw">def </span><span class="fun">handle_request</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">action</span>, <span class="name">post_id</span>):
- <span class="kw">try</span>:
- <span class="name">thread</span> <span class="op">=</span> <span class="name">Thread</span>.<span class="name">by_child</span>(<span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>, <span class="name">post_id</span>)
- <span class="kw">except</span> <span class="exc">ValueError</span>:
- <span class="kw">return</span> <span class="name">PageNotFound</span>()
- <span class="name">_</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">gettext</span>
-
- <span class="cm"># note: quote_post can raise a ValueError when a post does</span>
- <span class="cm"># not exist. but since we check for that by calling</span>
- <span class="cm"># Thread.by_child this shouldn&#39;t happen.</span>
- <span class="name">username</span> <span class="op">=</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">anonymous</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="name">action</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">reply</span><span class="st st-sg">&#39;</span>:
- <span class="name">mode</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">reply</span><span class="st st-sg">&#39;</span>
-
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">req</span>.<span class="name">user</span>.<span class="name">acl</span>.<span class="name">can_access</span>(<span class="st st-sg">&#39;</span><span class="st">REPLY_POST</span><span class="st st-sg">&#39;</span>, <span class="name">thread</span>):
- <span class="kw">return</span> <span class="name">AccessDeniedResponse</span>()
- <span class="name">text</span> <span class="op">=</span> <span class="name">u</span><span class="st st-sg">&#39;&#39;</span>
-
- <span class="name">_</span>, <span class="name">title</span> <span class="op">=</span> <span class="name">quote_post</span>(<span class="name">req</span>, <span class="name">post_id</span>)
- <span class="kw">elif</span> <span class="name">action</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">quote</span><span class="st st-sg">&#39;</span>:
- <span class="name">mode</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">reply</span><span class="st st-sg">&#39;</span>
-
- <span class="cm">#XXX: maybe we could use REPLY_POST here too</span>
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">req</span>.<span class="name">user</span>.<span class="name">acl</span>.<span class="name">can_access</span>(<span class="st st-sg">&#39;</span><span class="st">QUOTE_POST</span><span class="st st-sg">&#39;</span>, <span class="name">thread</span>):
- <span class="kw">return</span> <span class="name">AccessDeniedResponse</span>()
- <span class="name">text</span>, <span class="name">title</span> <span class="op">=</span> <span class="name">quote_post</span>(<span class="name">req</span>, <span class="name">post_id</span>)
- <span class="kw">else</span>:
- <span class="name">mode</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">edit</span><span class="st st-sg">&#39;</span>
-
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">req</span>.<span class="name">user</span>.<span class="name">acl</span>.<span class="name">can_access</span>(<span class="st st-sg">&#39;</span><span class="st">EDIT_POST</span><span class="st st-sg">&#39;</span>, <span class="name">thread</span>):
- <span class="kw">return</span> <span class="name">AccessDeniedResponse</span>()
- <span class="name">text</span>, <span class="name">title</span>, <span class="name">username</span> <span class="op">=</span> <span class="name">edit_post</span>(<span class="name">req</span>, <span class="name">post_id</span>)
-
- <span class="name">form</span> <span class="op">=</span> <span class="name">Form</span>(<span class="name">req</span>, <span class="name">req</span>.<span class="name">environ</span>[<span class="st st-sg">&#39;</span><span class="st">APPLICATION_REQUEST</span><span class="st st-sg">&#39;</span>], <span class="st st-sg">&#39;</span><span class="st">POST</span><span class="st st-sg">&#39;</span>,
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>, <span class="name">validator</span><span class="op">=</span><span class="name">isAnonymousUsername</span>(),
- <span class="name">default</span><span class="op">=</span><span class="name">username</span>),
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>, <span class="name">validator</span><span class="op">=</span><span class="name">checkTextLength</span>(<span class="nb nb-int">3</span>, <span class="nb nb-int">60</span>),
- <span class="name">default</span><span class="op">=</span><span class="name">title</span>),
- <span class="name">TextArea</span>(<span class="st st-sg">&#39;</span><span class="st">text</span><span class="st st-sg">&#39;</span>, <span class="name">validator</span><span class="op">=</span><span class="name">checkTextLength</span>(<span class="nb nb-int">3</span>, <span class="nb nb-int">10000</span>),
- <span class="name">default</span><span class="op">=</span><span class="name">text</span>)
- )
- <span class="kw">if</span> <span class="name">req</span>.<span class="name">method</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">POST</span><span class="st st-sg">&#39;</span>:
- <span class="name">form</span>.<span class="name">update</span>(<span class="name">req</span>.<span class="name">form</span>, <span class="name">prefix</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">f_</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">form</span>.<span class="name">has_errors</span>:
- <span class="name">d</span> <span class="op">=</span> <span class="name">form</span>.<span class="name">to_dict</span>()
- <span class="kw">if</span> <span class="name">req</span>.<span class="name">user</span>.<span class="name">identified</span>:
- <span class="name">author</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">user</span>.<span class="name">user_id</span>
-
- <span class="kw">else</span>:
- <span class="name">author</span> <span class="op">=</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="kw">if</span> <span class="name">action</span> <span class="op op-word">in</span> (<span class="st st-sg">&#39;</span><span class="st">quote</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">reply</span><span class="st st-sg">&#39;</span>):
- <span class="name">new_post_id</span> <span class="op">=</span> <span class="name">thread</span>.<span class="name">reply</span>(
- <span class="name">post_id</span> <span class="op">=</span> <span class="bn">int</span>(<span class="name">post_id</span>),
- <span class="name">author</span> <span class="op">=</span> <span class="name">author</span>,
- <span class="name">title</span> <span class="op">=</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="name">text</span> <span class="op">=</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">elif</span> <span class="name">action</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">edit</span><span class="st st-sg">&#39;</span>:
- <span class="name">new_post_id</span> <span class="op">=</span> <span class="bn">int</span>(<span class="name">post_id</span>)
- <span class="name">thread</span>.<span class="name">edit_reply</span>(
- <span class="name">post_id</span> <span class="op">=</span> <span class="name">new_post_id</span>,
- <span class="name">author</span> <span class="op">=</span> <span class="name">author</span>,
- <span class="name">title</span> <span class="op">=</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="name">text</span> <span class="op">=</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">TemplateResponse</span>(<span class="st st-sg">&#39;</span><span class="st">messages/post.html</span><span class="st st-sg">&#39;</span>,
- <span class="name">mode</span> <span class="op">=</span> <span class="name">mode</span>,
- <span class="name">post</span> <span class="op">=</span> {
- <span class="st st-sg">&#39;</span><span class="st">id</span><span class="st st-sg">&#39;</span>: <span class="name">new_post_id</span>,
- <span class="st st-sg">&#39;</span><span class="st">title</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">url</span><span class="st st-sg">&#39;</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">post</span><span class="st st-sg">&#39;</span>, <span class="name">new_post_id</span>),
- }
- )
- <span class="name">js</span>, <span class="name">options</span> <span class="op">=</span> <span class="name">get_editor</span>(<span class="name">req</span>)
- <span class="name">latest_posts</span> <span class="op">=</span> <span class="name">get_last_posts</span>(<span class="name">req</span>, <span class="name">thread</span>.<span class="name">root_post_id</span>, <span class="nb nb-int">5</span>)
- <span class="kw">return</span> <span class="name">TemplateResponse</span>(<span class="st st-sg">&#39;</span><span class="st">newpost.html</span><span class="st st-sg">&#39;</span>,
- <span class="name">mode</span> <span class="op">=</span> <span class="name">mode</span>,
- <span class="name">form</span> <span class="op">=</span> <span class="name">form</span>.<span class="name">generate</span>(<span class="name">prefix</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">f_</span><span class="st st-sg">&#39;</span>),
- <span class="name">show_username_entry</span> <span class="op">=</span> <span class="op op-word">not</span> <span class="name">req</span>.<span class="name">user</span>.<span class="name">identified</span>,
- <span class="name">editor_options</span> <span class="op">=</span> <span class="name">options</span>,
- <span class="name">editor_javascript</span> <span class="op">=</span> <span class="name">js</span>,
- <span class="name">post_id</span> <span class="op">=</span> <span class="name">thread</span>.<span class="name">root_post_id</span>,
- <span class="name">pathbar</span><span class="op">=</span><span class="name">get_post_pathbar</span>(<span class="name">req</span>.<span class="name">ctx</span>, <span class="name">post_id</span>),
- <span class="name">latest_posts</span> <span class="op">=</span> <span class="name">latest_posts</span>
-
- )
-
- <span class="deco">@export</span>(<span class="st st-db">&quot;</span><span class="st">newpost.preview</span><span class="st st-db">&quot;</span>)
- <span class="kw">def </span><span class="fun">preview</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">text</span>):
- <span class="kw">return</span> <span class="name">parse_and_render</span>(<span class="name">req</span>, <span class="name">text</span>)
-
- <span class="deco">@export</span>(<span class="st st-db">&quot;</span><span class="st">newpost.check</span><span class="st st-db">&quot;</span>)
- <span class="kw">def </span><span class="fun">check</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">root_post_id</span>, <span class="name">latest_post</span>, <span class="name">path</span>):
- <span class="cm"># check for new posts</span>
-
- <span class="name">new_posts</span> <span class="op">=</span> <span class="bn bn-pseudo">False</span>
- <span class="name">post</span> <span class="op">=</span> <span class="name">get_last_posts</span>(<span class="name">req</span>, <span class="name">root_post_id</span>, <span class="nb nb-int">1</span>)[<span class="nb nb-int">0</span>]
- <span class="name">post_list</span> <span class="op">=</span> []
- <span class="kw">if</span> <span class="name">latest_post</span> <span class="op">!=</span> <span class="name">post</span>[<span class="st st-db">&quot;</span><span class="st">post_id</span><span class="st st-db">&quot;</span>]:
- <span class="name">z</span> <span class="op">=</span> <span class="nb nb-int">1</span>
-
- <span class="kw">while</span> <span class="name">post</span>[<span class="st st-db">&quot;</span><span class="st">post_id</span><span class="st st-db">&quot;</span>] <span class="op">!=</span> <span class="name">latest_post</span> <span class="op op-word">and</span> <span class="name">z</span> <span class="op">&lt;</span> <span class="nb nb-int">5</span>:
- <span class="name">post_list</span>.<span class="name">append</span>(<span class="name">post</span>)
- <span class="name">post</span> <span class="op">=</span> <span class="name">get_last_posts</span>(<span class="name">req</span>, <span class="name">root_post_id</span>, <span class="nb nb-int">1</span>, <span class="name">z</span>)[<span class="nb nb-int">0</span>]
- <span class="name">z</span> <span class="op">+=</span> <span class="nb nb-int">1</span>
-
- <span class="name">new_posts</span> <span class="op">=</span> {
- <span class="st st-sg">&#39;</span><span class="st">html</span><span class="st st-sg">&#39;</span>: <span class="name">render_template</span>(<span class="name">req</span>, <span class="st st-sg">&#39;</span><span class="st">latestposts.html</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">post_list</span>}),
- <span class="st st-sg">&#39;</span><span class="st">last_post</span><span class="st st-sg">&#39;</span>: <span class="name">post_list</span>[<span class="nb nb-int">0</span>][<span class="st st-db">&quot;</span><span class="st">post_id</span><span class="st st-db">&quot;</span>]
- }
-
- <span class="cm"># check for new editors</span>
-
- <span class="name">new_editors</span> <span class="op">=</span> <span class="name">get_sessions_by_action</span>(<span class="name">req</span>.<span class="name">ctx</span>, <span class="name">path</span>) <span class="op op-word">or</span> <span class="bn bn-pseudo">False</span>
-
- <span class="kw">return</span> (<span class="name">post_list</span> <span class="op op-word">or</span> <span class="name">new_editors</span>) <span class="op op-word">and</span> {
- <span class="st st-sg">&#39;</span><span class="st">posts</span><span class="st st-sg">&#39;</span>: <span class="name">new_posts</span>,
- <span class="st st-sg">&#39;</span><span class="st">editors</span><span class="st st-sg">&#39;</span>: <span class="name">new_editors</span>
-
- } <span class="op op-word">or</span> <span class="bn bn-pseudo">False</span>
-
-
-<span class="kw">class </span><span class="cls">NewThreadPage</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">forum/(?P&lt;forum_id&gt;\d+)/new$</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">forum_id</span>):
- <span class="cm"># TODO: Check whether user is allowed to do this</span>
-
- <span class="name">_</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">gettext</span>
- <span class="name">forum_id</span> <span class="op">=</span> <span class="bn">int</span>(<span class="name">forum_id</span>)
- <span class="name">form</span> <span class="op">=</span> <span class="name">Form</span>(<span class="name">req</span>, <span class="name">req</span>.<span class="name">environ</span>[<span class="st st-sg">&#39;</span><span class="st">APPLICATION_REQUEST</span><span class="st st-sg">&#39;</span>], <span class="st st-sg">&#39;</span><span class="st">POST</span><span class="st st-sg">&#39;</span>,
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>, <span class="name">validator</span><span class="op">=</span><span class="name">isAnonymousUsername</span>(),
- <span class="name">default</span><span class="op">=</span><span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">anonymous</span><span class="st st-sg">&#39;</span>)),
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>, <span class="name">validator</span><span class="op">=</span><span class="name">checkTextLength</span>(<span class="nb nb-int">3</span>, <span class="nb nb-int">60</span>)),
- <span class="name">TextArea</span>(<span class="st st-sg">&#39;</span><span class="st">text</span><span class="st st-sg">&#39;</span>, <span class="name">validator</span><span class="op">=</span><span class="name">checkTextLength</span>(<span class="nb nb-int">3</span>, <span class="nb nb-int">10000</span>))
- )
- <span class="kw">if</span> <span class="name">req</span>.<span class="name">method</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">POST</span><span class="st st-sg">&#39;</span>:
- <span class="name">form</span>.<span class="name">update</span>(<span class="name">req</span>.<span class="name">form</span>, <span class="name">prefix</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">f_</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">form</span>.<span class="name">has_errors</span>:
- <span class="name">d</span> <span class="op">=</span> <span class="name">form</span>.<span class="name">to_dict</span>()
- <span class="kw">if</span> <span class="name">req</span>.<span class="name">user</span>.<span class="name">identified</span>:
- <span class="name">author</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">user</span>.<span class="name">user_id</span>
-
- <span class="kw">else</span>:
- <span class="name">author</span> <span class="op">=</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="name">thread</span> <span class="op">=</span> <span class="name">Thread</span>.<span class="name">create</span>(<span class="name">req</span>.<span class="name">ctx</span>, <span class="name">forum_id</span>, <span class="name">author</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="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">TemplateResponse</span>(<span class="st st-sg">&#39;</span><span class="st">messages/thread.html</span><span class="st st-sg">&#39;</span>,
- <span class="name">thread</span> <span class="op">=</span> {
- <span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>: <span class="name">thread</span>.<span class="name">title</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">post</span><span class="st st-sg">&#39;</span>, <span class="name">thread</span>.<span class="name">root_post_id</span>),
- }
- )
-
- <span class="name">js</span>, <span class="name">options</span> <span class="op">=</span> <span class="name">get_editor</span>(<span class="name">req</span>)
- <span class="kw">return</span> <span class="name">TemplateResponse</span>(<span class="st st-sg">&#39;</span><span class="st">newthread.html</span><span class="st st-sg">&#39;</span>,
- <span class="name">form</span> <span class="op">=</span> <span class="name">form</span>.<span class="name">generate</span>(<span class="name">prefix</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">f_</span><span class="st st-sg">&#39;</span>),
- <span class="name">show_username_entry</span> <span class="op">=</span> <span class="op op-word">not</span> <span class="name">req</span>.<span class="name">user</span>.<span class="name">identified</span>,
- <span class="name">editor_options</span> <span class="op">=</span> <span class="name">options</span>,
- <span class="name">editor_javascript</span> <span class="op">=</span> <span class="name">js</span>,
- <span class="name">pathbar</span> <span class="op">=</span> <span class="name">get_forum_pathbar</span>(<span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>, <span class="name">forum_id</span>)
- )
-
-
-
-<span class="kw">class </span><span class="cls">MemberListPage</span>(<span class="name">RequestHandler</span>, <span class="name">PagePublisher</span>):
- <span class="name">page_name</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">memberlist</span><span class="st st-sg">&#39;</span>
- <span class="name">relative_url</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">users/</span><span class="st st-sg">&#39;</span>
-
- <span class="name">handler_regexes</span> <span class="op">=</span> [<span class="st st-sg">r&#39;</span><span class="st">users/$</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">_</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">gettext</span>
-
- <span class="name">generate</span> <span class="op">=</span> <span class="bn bn-pseudo">False</span>
-
- <span class="name">form</span> <span class="op">=</span> <span class="name">Form</span>(<span class="name">req</span>, <span class="bn bn-pseudo">self</span>, <span class="st st-sg">&#39;</span><span class="st">GET</span><span class="st st-sg">&#39;</span>,
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">letter</span><span class="st st-sg">&#39;</span>, <span class="name">validator</span><span class="op">=</span><span class="name">mayEmpty</span>(<span class="name">isOneLetter</span>())),
- <span class="name">SelectBox</span>(<span class="st st-sg">&#39;</span><span class="st">order_by</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">_</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">_</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">register_date</span><span class="st st-sg">&#39;</span>, <span class="name">_</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">post_count</span><span class="st st-sg">&#39;</span>, <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Number of Posts</span><span class="st st-sg">&#39;</span>))
- ], <span class="name">default</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">SelectBox</span>(<span class="st st-sg">&#39;</span><span class="st">direction</span><span class="st st-sg">&#39;</span>, [
- (<span class="st st-sg">&#39;</span><span class="st">desc</span><span class="st st-sg">&#39;</span>, <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Descending</span><span class="st st-sg">&#39;</span>)),
- (<span class="st st-sg">&#39;</span><span class="st">asc</span><span class="st st-sg">&#39;</span>, <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Ascending</span><span class="st st-sg">&#39;</span>))
- ], <span class="name">default</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="kw">if</span> <span class="st st-sg">&#39;</span><span class="st">letter</span><span class="st st-sg">&#39;</span> <span class="op op-word">in</span> <span class="name">req</span>.<span class="name">args</span> <span class="op op-word">or</span> <span class="st st-sg">&#39;</span><span class="st">order_by</span><span class="st st-sg">&#39;</span> <span class="op op-word">in</span> <span class="name">req</span>.<span class="name">args</span> \
- <span class="op op-word">or</span> <span class="st st-sg">&#39;</span><span class="st">direction</span><span class="st st-sg">&#39;</span> <span class="op op-word">in</span> <span class="name">req</span>.<span class="name">args</span>:
- <span class="name">form</span>.<span class="name">update</span>(<span class="name">req</span>.<span class="name">args</span>)
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">form</span>.<span class="name">has_errors</span>:
- <span class="name">generate</span> <span class="op">=</span> <span class="bn bn-pseudo">True</span>
-
- <span class="kw">else</span>:
- <span class="name">generate</span> <span class="op">=</span> <span class="bn bn-pseudo">True</span>
- <span class="kw">if</span> <span class="name">generate</span>:
- <span class="name">d</span> <span class="op">=</span> <span class="name">form</span>.<span class="name">to_dict</span>()
- <span class="name">userlist</span> <span class="op">=</span> <span class="name">get_user_list</span>(<span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>,
- <span class="name">order_by</span><span class="op">=</span><span class="bn">getattr</span>(<span class="name">users</span>.<span class="name">c</span>, <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">order_by</span><span class="st st-sg">&#39;</span>]),
- <span class="name">order</span><span class="op">=</span><span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">direction</span><span class="st st-sg">&#39;</span>],
- <span class="name">letter</span><span class="op">=</span><span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">letter</span><span class="st st-sg">&#39;</span>] <span class="op op-word">or</span> <span class="bn bn-pseudo">None</span>,
- <span class="name">hide_internal</span><span class="op">=</span><span class="bn bn-pseudo">True</span>
-
- )
- <span class="kw">else</span>:
- <span class="name">userlist</span> <span class="op">=</span> []
-
- <span class="kw">return</span> <span class="name">TemplateResponse</span>(<span class="st st-sg">&#39;</span><span class="st">memberlist.html</span><span class="st st-sg">&#39;</span>,
- <span class="bn">list</span><span class="op">=</span><span class="name">userlist</span>,
- <span class="name">form</span><span class="op">=</span><span class="name">form</span>.<span class="name">generate</span>()
- )
-
-
-
-<span class="kw">class </span><span class="cls">UserPage</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">users/(?P&lt;username&gt;.+)$</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">username</span>):
- <span class="cm"># TODO: add a permission CAN_VIEW_PROFILE</span>
-
- <span class="cm"># check avatar</span>
- <span class="kw">if</span> <span class="name">req</span>.<span class="name">args</span>.<span class="name">get</span>(<span class="st st-sg">&#39;</span><span class="st">show</span><span class="st st-sg">&#39;</span>) <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">avatar</span><span class="st st-sg">&#39;</span>:
- <span class="name">avatar</span> <span class="op">=</span> <span class="name">get_user_avatar</span>(<span class="name">req</span>, <span class="name">username</span>)
- <span class="kw">if</span> <span class="name">avatar</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</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">avatar</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">image/png</span><span class="st st-sg">&#39;</span>
-
- <span class="kw">return</span> <span class="name">resp</span>
- <span class="cm"># display user</span>
- <span class="name">user</span> <span class="op">=</span> <span class="name">get_user</span>(<span class="name">req</span>, <span class="name">username</span>)
- <span class="kw">if</span> <span class="name">user</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="kw">return</span> <span class="name">PageNotFound</span>()
- <span class="kw">return</span> <span class="name">TemplateResponse</span>(<span class="st st-sg">&#39;</span><span class="st">user.html</span><span class="st st-sg">&#39;</span>,
- <span class="name">person</span> <span class="op">=</span> <span class="name">user</span>
-
- )
-
-
-<span class="kw">class </span><span class="cls">GotoPage</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">goto$</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">if</span> <span class="st st-sg">&#39;</span><span class="st">post</span><span class="st st-sg">&#39;</span> <span class="op op-word">in</span> <span class="name">req</span>.<span class="name">args</span>:
- <span class="name">post_id</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">args</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="op">=</span> <span class="name">get_post</span>(<span class="name">req</span>.<span class="name">ctx</span>, <span class="name">post_id</span>)
- <span class="kw">while</span> <span class="name">post</span>.<span class="name">parent</span>: <span class="cm">#get root_post</span>
-
- <span class="name">post</span> <span class="op">=</span> <span class="name">post</span>.<span class="name">parent</span> <span class="op op-word">or</span> <span class="name">post</span>
- <span class="name">thread</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">db</span>.<span class="name">get</span>(<span class="name">Thread</span>, <span class="name">Thread</span>.<span class="name">c</span>.<span class="name">root_post_id</span> <span class="op">==</span> <span class="name">post</span>.<span class="name">post_id</span>)
- <span class="kw">return</span> <span class="name">HttpRedirect</span>(<span class="name">thread</span>.<span class="name">url</span>)
- <span class="kw">else</span>:
- <span class="kw">return</span> <span class="name">HttpRedirect</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;</span><span class="st">/</span><span class="st st-sg">&#39;</span>))
-
-
-
-<span class="kw">class </span><span class="cls">SplitPage</span>(<span class="name">RequestHandler</span>, <span class="name">RemoteCallable</span>):
- <span class="name">handler_regexes</span> <span class="op">=</span> [<span class="st st-sg">r&#39;</span><span class="st">post/(?P&lt;post_id&gt;\d+)/split$</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">post_id</span>):
- <span class="kw">try</span>:
- <span class="name">thread</span> <span class="op">=</span> <span class="name">Thread</span>.<span class="name">by_child</span>(<span class="name">req</span>.<span class="name">ctx</span>, <span class="name">post_id</span>)
- <span class="kw">except</span> <span class="exc">ValueError</span>:
- <span class="kw">return</span> <span class="name">PageNotFound</span>()
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">req</span>.<span class="name">user</span>.<span class="name">acl</span>.<span class="name">can_access</span>(<span class="st st-sg">&#39;</span><span class="st">MODERATOR</span><span class="st st-sg">&#39;</span>, <span class="name">thread</span>.<span class="name">forum_id</span>):
- <span class="kw">return</span> <span class="name">AccessDeniedResponse</span>()
- <span class="kw">return</span> <span class="name">TemplateResponse</span>(<span class="st st-sg">&#39;</span><span class="st">split.html</span><span class="st st-sg">&#39;</span>,
- <span class="name">thread</span> <span class="op">=</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">thread</span>.<span class="name">root_post_id</span>, <span class="st st-sg">&#39;</span><span class="st">title</span><span class="st st-sg">&#39;</span>:<span class="name">thread</span>.<span class="name">title</span>}
- )
-
- <span class="deco">@export</span>(<span class="st st-sg">&#39;</span><span class="st">split.get_post_tree</span><span class="st st-sg">&#39;</span>)
- <span class="kw">def </span><span class="fun">split</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">root_post_id</span>):
- <span class="kw">def </span><span class="fun">iterate_items</span>(<span class="name">post_list</span>):
- <span class="name">tmp</span> <span class="op">=</span> []
- <span class="kw">for</span> <span class="name">post</span> <span class="op op-word">in</span> <span class="name">post_list</span>:
- <span class="name">tmp</span>.<span class="name">append</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-db">&quot;</span><span class="st">post_id</span><span class="st st-db">&quot;</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-db">&quot;</span><span class="st">title</span><span class="st st-db">&quot;</span>],
- <span class="st st-sg">&#39;</span><span class="st">children</span><span class="st st-sg">&#39;</span>: <span class="st st-db">&quot;</span><span class="st">children</span><span class="st st-db">&quot;</span> <span class="op op-word">in</span> <span class="name">post</span> <span class="op op-word">and</span> \
- <span class="name">iterate_items</span>(<span class="name">post</span>[<span class="st st-db">&quot;</span><span class="st">children</span><span class="st st-db">&quot;</span>]) <span class="op op-word">or</span> [],
- <span class="st st-sg">&#39;</span><span class="st">parent_id</span><span class="st st-sg">&#39;</span>: <span class="name">post</span>[<span class="st st-db">&quot;</span><span class="st">parent_id</span><span class="st st-db">&quot;</span>]
- })
- <span class="kw">return</span> <span class="name">tmp</span>
-
- <span class="name">post_tree</span> <span class="op">=</span> <span class="name">get_post_tree</span>(<span class="name">req</span>, <span class="name">root_post_id</span>)
-
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">req</span>.<span class="name">user</span>.<span class="name">acl</span>.<span class="name">can_access</span>(<span class="st st-sg">&#39;</span><span class="st">MODERATOR</span><span class="st st-sg">&#39;</span>, <span class="name">post_tree</span>[<span class="st st-db">&quot;</span><span class="st">forum</span><span class="st st-db">&quot;</span>][<span class="st st-db">&quot;</span><span class="st">forum_id</span><span class="st st-db">&quot;</span>]):
- <span class="kw">return</span> <span class="name">AccessDeniedResponse</span>()
-
- <span class="kw">return</span> {
- <span class="st st-sg">&#39;</span><span class="st">posts</span><span class="st st-sg">&#39;</span>:<span class="name">iterate_items</span>(<span class="name">post_tree</span>[<span class="st st-db">&quot;</span><span class="st">posts</span><span class="st st-db">&quot;</span>]),
- <span class="st st-sg">&#39;</span><span class="st">thread</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">post_tree</span>[<span class="st st-db">&quot;</span><span class="st">forum</span><span class="st st-db">&quot;</span>][<span class="st st-db">&quot;</span><span class="st">forum_id</span><span class="st st-db">&quot;</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">post_tree</span>[<span class="st st-db">&quot;</span><span class="st">post_id</span><span class="st st-db">&quot;</span>]
- }
- }
-
- <span class="deco">@export</span>(<span class="st st-sg">&#39;</span><span class="st">split.commit</span><span class="st st-sg">&#39;</span>)
- <span class="kw">def </span><span class="fun">commit</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">changes</span>):
- <span class="cm"># TODO: Check whether operation is allowed at every subforum of a thread</span>
-
- <span class="cm"># the user changes</span>
- <span class="kw">for</span> <span class="name">tmp</span> <span class="op op-word">in</span> <span class="name">changes</span>.<span class="name">iteritems</span>():
- <span class="name">change</span> <span class="op">=</span> <span class="name">tmp</span>[<span class="nb nb-int">1</span>]
- <span class="bn">id</span> <span class="op">=</span> <span class="name">change</span>[<span class="st st-sg">&#39;</span><span class="st">id</span><span class="st st-sg">&#39;</span>]
- <span class="name">new_pid</span> <span class="op">=</span> <span class="name">change</span>[<span class="st st-sg">&#39;</span><span class="st">new_pid</span><span class="st st-sg">&#39;</span>]
- <span class="name">old_pid</span> <span class="op">=</span> <span class="name">change</span>[<span class="st st-sg">&#39;</span><span class="st">old_pid</span><span class="st st-sg">&#39;</span>]
- <span class="name">act_tid</span> <span class="op">=</span> <span class="name">change</span>[<span class="st st-sg">&#39;</span><span class="st">act_tid</span><span class="st st-sg">&#39;</span>]
- <span class="name">old_tid</span> <span class="op">=</span> <span class="name">change</span>[<span class="st st-sg">&#39;</span><span class="st">old_tid</span><span class="st st-sg">&#39;</span>]
- <span class="name">post</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">db</span>.<span class="name">get</span>(<span class="name">Post</span>, <span class="name">Post</span>.<span class="name">c</span>.<span class="name">post_id</span> <span class="op">==</span> <span class="bn">id</span>)
- <span class="kw">if</span> <span class="name">new_pid</span> <span class="op">!=</span> <span class="op">-</span><span class="nb nb-int">1</span>:
- <span class="name">post</span>.<span class="name">parent_id</span> <span class="op">=</span> <span class="name">new_pid</span>
-
- <span class="kw">else</span>:
- <span class="kw">if</span> <span class="name">act_tid</span> <span class="op">==</span> <span class="op">-</span><span class="nb nb-int">1</span>:
- <span class="cm">#XXX: forum_id</span>
- <span class="name">thread</span> <span class="op">=</span> <span class="name">Thread</span>(
- <span class="name">name</span> <span class="op">=</span> <span class="name">post</span>.<span class="name">name</span>,
- <span class="name">forum_id</span> <span class="op">=</span> <span class="nb nb-int">1</span>,
- <span class="name">root_post_id</span> <span class="op">=</span> <span class="name">post</span>.<span class="name">post_id</span>
-
- )
- <span class="name">req</span>.<span class="name">db</span>.<span class="name">save</span>(<span class="name">thread</span>)
- <span class="kw">else</span>:
- <span class="name">thread</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">db</span>.<span class="name">get</span>(<span class="name">Thread</span>, <span class="name">Thread</span>.<span class="name">c</span>.<span class="name">thread_id</span> <span class="op">==</span> <span class="name">act_tid</span>)
- <span class="name">thread</span>.<span class="name">name</span> <span class="op">=</span> <span class="name">post</span>.<span class="name">name</span>
-
- <span class="name">post</span>.<span class="name">parent_id</span> <span class="op">=</span> <span class="name">thread</span>.<span class="name">thread_id</span>
- <span class="name">req</span>.<span class="name">db</span>.<span class="name">flush</span>()
- <span class="kw">return</span> <span class="st st-db">&quot;&quot;</span>
-
-
-<span class="kw">class </span><span class="cls">WhoIsOnlinePage</span>(<span class="name">RequestHandler</span>, <span class="name">PagePublisher</span>):
- <span class="name">page_name</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">whoisonline</span><span class="st st-sg">&#39;</span>
- <span class="name">relative_url</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">whoisonline</span><span class="st st-sg">&#39;</span>
-
- <span class="name">handler_regexes</span> <span class="op">=</span> [<span class="st st-sg">r&#39;</span><span class="st">whoisonline$</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">sessions</span>, <span class="name">users</span>, <span class="name">guests</span>, <span class="name">total</span> <span class="op">=</span> <span class="name">get_active_sessions</span>(<span class="name">req</span>.<span class="name">ctx</span>)
- <span class="kw">return</span> <span class="name">TemplateResponse</span>(<span class="st st-sg">&#39;</span><span class="st">whoisonline.html</span><span class="st st-sg">&#39;</span>,
- <span class="name">sessions</span><span class="op">=</span><span class="name">sessions</span>,
- <span class="name">user_count</span><span class="op">=</span><span class="name">users</span>,
- <span class="name">guest_count</span><span class="op">=</span><span class="name">guests</span>,
- <span class="name">total_count</span><span class="op">=</span><span class="name">total</span>
-
- )
-
-
-<span class="kw">class </span><span class="cls">UserSettings</span>(<span class="name">RequestHandler</span>, <span class="name">PagePublisher</span>):
- <span class="name">page_name</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">settings</span><span class="st st-sg">&#39;</span>
- <span class="name">relative_url</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">settings/</span><span class="st st-sg">&#39;</span>
-
- <span class="name">handler_regexes</span> <span class="op">=</span> [
- <span class="st st-sg">r&#39;</span><span class="st">settings/$</span><span class="st st-sg">&#39;</span>,
- <span class="st st-sg">r&#39;</span><span class="st">settings/(?P&lt;page&gt;.+?)$</span><span class="st st-sg">&#39;</span>
- ]
- <span class="name">allow_username_change</span> <span class="op">=</span> <span class="name">cfg</span>.<span class="name">bool</span>(<span class="st st-sg">&#39;</span><span class="st">security</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">username_change</span><span class="st st-sg">&#39;</span>, <span class="bn bn-pseudo">False</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">page</span><span class="op">=</span><span class="bn bn-pseudo">None</span>):
- <span class="name">req</span>.<span class="name">user</span>.<span class="name">assert_logged_in</span>()
- <span class="name">sidebar</span> <span class="op">=</span> []
- <span class="name">missing</span> <span class="op">=</span> <span class="bn">object</span>()
- <span class="name">page_result</span> <span class="op">=</span> <span class="name">missing</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">UserSettingsPage</span>):
- <span class="name">caption</span> <span class="op">=</span> <span class="name">comp</span>.<span class="name">get_settings_link_title</span>(<span class="name">req</span>)
- <span class="cm"># if the caption is None the plugin doesn&#39;t want to</span>
-
- <span class="cm"># be visible in the sidebar, skip</span>
- <span class="kw">if</span> <span class="name">caption</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="kw">continue</span>
- <span class="name">active</span> <span class="op">=</span> <span class="name">comp</span>.<span class="name">settings_page_identifier</span> <span class="op">==</span> <span class="name">page</span>
-
- <span class="kw">if</span> <span class="name">active</span>:
- <span class="name">page_result</span> <span class="op">=</span> <span class="name">comp</span>.<span class="name">get_settings_page</span>(<span class="name">req</span>)
- <span class="cm"># the page really wants to output data on its own</span>
-
- <span class="cm"># we don&#39;t need to create a sidebar, stop here</span>
- <span class="kw">if</span> <span class="bn">isinstance</span>(<span class="name">page_result</span>, <span class="name">Response</span>):
- <span class="kw">return</span> <span class="name">page_result</span>
-
- <span class="name">sidebar</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">comp</span>.<span class="name">url</span>,
- <span class="st st-sg">&#39;</span><span class="st">caption</span><span class="st st-sg">&#39;</span>: <span class="name">caption</span>,
- <span class="st st-sg">&#39;</span><span class="st">active</span><span class="st st-sg">&#39;</span>: <span class="name">active</span>,
- <span class="st st-sg">&#39;</span><span class="st">identifier</span><span class="st st-sg">&#39;</span>: <span class="name">comp</span>.<span class="name">settings_page_identifier</span>
-
- })
- <span class="cm"># display error page</span>
- <span class="kw">if</span> <span class="name">page_result</span> <span class="op op-word">is</span> <span class="name">missing</span> <span class="op op-word">and</span> <span class="name">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">PageNotFound</span>()
- <span class="cm"># we have found a page, display it, but first sort the sidebar</span>
-
- <span class="name">sidebar</span>.<span class="name">sort</span>(<span class="name">key</span><span class="op">=</span><span class="kw">lambda</span> <span class="name">x</span>: <span class="name">x</span>[<span class="st st-sg">&#39;</span><span class="st">caption</span><span class="st st-sg">&#39;</span>].<span class="name">lower</span>())
- <span class="kw">if</span> <span class="name">page</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="kw">return</span> <span class="name">TemplateResponse</span>(<span class="st st-sg">&#39;</span><span class="st">settings/index.html</span><span class="st st-sg">&#39;</span>,
- <span class="name">setting_pages</span> <span class="op">=</span> <span class="name">sidebar</span>
-
- )
- <span class="name">template</span>, <span class="name">context</span> <span class="op">=</span> <span class="name">page_result</span>
- <span class="name">context</span>[<span class="st st-sg">&#39;</span><span class="st">setting_pages</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="name">sidebar</span>
-
- <span class="kw">return</span> <span class="name">TemplateResponse</span>(<span class="name">template</span>, <span class="op">**</span><span class="name">context</span>)
-
-
-<span class="kw">class </span><span class="cls">LostPasswordPage</span>(<span class="name">RequestHandler</span>, <span class="name">PagePublisher</span>):
- <span class="name">page_name</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">lostpassword</span><span class="st st-sg">&#39;</span>
-
- <span class="name">relative_url</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">lostpassword</span><span class="st st-sg">&#39;</span>
- <span class="name">handler_regexes</span> <span class="op">=</span> [<span class="st st-sg">&#39;</span><span class="st">lostpassword$</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="cm"># if the user is identified he has probably not lost has password ;)</span>
-
- <span class="kw">if</span> <span class="name">req</span>.<span class="name">user</span>.<span class="name">identified</span>:
- <span class="kw">return</span> <span class="name">HttpRedirect</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="name">_</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">gettext</span>
-
- <span class="name">ctx</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>
- <span class="name">msg</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
- <span class="name">form</span> <span class="op">=</span> <span class="name">Form</span>(<span class="name">req</span>, <span class="bn bn-pseudo">self</span>, <span class="st st-sg">&#39;</span><span class="st">POST</span><span class="st st-sg">&#39;</span>,
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>, <span class="name">validator</span><span class="op">=</span><span class="name">isExistingUsername</span>()),
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">email</span><span class="st st-sg">&#39;</span>, <span class="name">validator</span><span class="op">=</span><span class="name">isEmail</span>())
- )
-
- <span class="kw">if</span> <span class="name">req</span>.<span class="name">method</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">POST</span><span class="st st-sg">&#39;</span>:
- <span class="name">form</span>.<span class="name">update</span>(<span class="name">req</span>.<span class="name">form</span>, <span class="name">prefix</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">f_</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">form</span>.<span class="name">has_errors</span>:
- <span class="name">d</span> <span class="op">=</span> <span class="name">form</span>.<span class="name">to_dict</span>()
- <span class="name">password</span> <span class="op">=</span> <span class="name">reset_password</span>(<span class="name">ctx</span>, <span class="op">**</span><span class="name">d</span>)
- <span class="kw">if</span> <span class="name">password</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">text</span> <span class="op">=</span> <span class="name">render_template</span>(<span class="name">req</span>, <span class="st st-sg">&#39;</span><span class="st">mails/new_password.txt</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="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">password</span><span class="st st-sg">&#39;</span>: <span class="name">password</span>
-
- })
- <span class="name">mail</span> <span class="op">=</span> <span class="name">Email</span>(<span class="name">ctx</span>, <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">New password</span><span class="st st-sg">&#39;</span>), <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">email</span><span class="st st-sg">&#39;</span>], <span class="name">text</span>)
- <span class="name">mail</span>.<span class="name">send</span>()
- <span class="kw">return</span> <span class="name">TemplateResponse</span>(<span class="st st-sg">&#39;</span><span class="st">messages/password.html</span><span class="st st-sg">&#39;</span>, <span class="op">**</span><span class="name">d</span>)
- <span class="kw">else</span>:
- <span class="name">msg</span> <span class="op">=</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Creation of a new password failed. Username </span><span class="st st-sg">&#39;</span>
-
- <span class="st st-sg">&#39;</span><span class="st">or email address is invalid.</span><span class="st st-sg">&#39;</span>)
-
- <span class="kw">return</span> <span class="name">TemplateResponse</span>(<span class="st st-sg">&#39;</span><span class="st">lostpassword.html</span><span class="st st-sg">&#39;</span>,
- <span class="name">form</span> <span class="op">=</span> <span class="name">form</span>.<span class="name">generate</span>(<span class="name">prefix</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">f_</span><span class="st st-sg">&#39;</span>),
- <span class="name">msg</span> <span class="op">=</span> <span class="name">msg</span>
-
- )
-<span class="cm"># -*- coding: utf-8 -*-</span>
-<span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- pocoo.pkg.core.remotecall
- ~~~~~~~~~~~~~~~~~~~~~~~~~
-
- Pocoo remote call support.
-
-
- Remote Call Implementation
- ==========================
-
- The Pocoo XMLRPC/JSONRPC interface works like this::
-
- import time
- from pocoo.pkg.core.remotecall import RemoteCallable, export
-
- class MyClass(RemoteCallable):
-
- @export(&quot;test.hello_world&quot;)
- def say(self, req, name=&#39;World&#39;):
- return &#39;Hello </span><span class="st st-int">%s</span><span class="st">!&#39; % name
-
- @export(&quot;test.get_servertime&quot;)
- def servertime(self, req):
- return time.time()
-
- By now only jsonrpc is available. You can query the jsonrpc interface
- under ``/!jsonrpc``. The exported names are ``packagename.&lt;name&gt;``.
- So for the example above the method names are (assumed that the module
- is in package ``core``)::
-
- core.test.hello_world
-
- and::
-
- core.test.get_servertime
-
-
- JavaScript Query
- =================
-
- You can query those functions using the following syntax::
-
- var rpc = new pocoo.lib.async.RPC(&#39;!jsonrpc&#39;);
- var method = rpc.getMethod(&#39;methodname&#39;);
- method(arguments, kwarguments, callback);
-
- The query for the example above would be::
-
- var rpc = new pocoo.lib.async.RPC(&#39;!jsonrpc&#39;);
- var method = rpc.getMethod(&#39;core.test.hello_world&#39;);
- method([&quot;Benjamin&quot;], {}, function (result) {
- alert(result);
- // alerts &quot;Hello Benjamin!&quot;
-
- });
-
-
- :copyright: 2006 by Armin Ronacher.
- :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">new</span>
-<span class="kw">from </span><span class="cls">types</span><span class="kw"> import</span> <span class="name">FunctionType</span>
-<span class="kw">from </span><span class="cls">pocoo</span><span class="kw"> import</span> <span class="name">Component</span>, <span class="name">ComponentMeta</span>
-
-<span class="kw">from </span><span class="cls">pocoo.http</span><span class="kw"> import</span> <span class="name">DirectResponse</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">from </span><span class="cls">pocoo.utils</span><span class="kw"> import</span> <span class="name">json</span>
-
-
-<span class="kw">class </span><span class="cls">_RemoteCallableMeta</span>(<span class="name">ComponentMeta</span>):
-
- <span class="kw">def </span><span class="fun">__new__</span>(<span class="name">cls</span>, <span class="name">name</span>, <span class="name">bases</span>, <span class="name">dct</span>):
- <span class="name">rpc_exports</span> <span class="op">=</span> {}
- <span class="name">result</span> <span class="op">=</span> <span class="name">ComponentMeta</span>.<span class="name">__new__</span>(<span class="name">cls</span>, <span class="name">name</span>, <span class="name">bases</span>, <span class="name">dct</span>)
- <span class="kw">for</span> <span class="name">name</span>, <span class="name">ref</span> <span class="op op-word">in</span> <span class="name">dct</span>.<span class="name">iteritems</span>():
- <span class="kw">if</span> <span class="bn">isinstance</span>(<span class="name">ref</span>, <span class="name">FunctionType</span>) <span class="op op-word">and</span> \
- <span class="bn">getattr</span>(<span class="name">ref</span>, <span class="st st-sg">&#39;</span><span class="st">rpc_exported</span><span class="st st-sg">&#39;</span>, <span class="bn bn-pseudo">False</span>):
- <span class="name">name</span> <span class="op">=</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">ref</span>.<span class="name">__module__</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">2</span>],
- <span class="name">ref</span>.<span class="name">rpc_name</span>)
- <span class="name">rpc_exports</span>[<span class="name">name</span>] <span class="op">=</span> <span class="name">ref</span>
-
- <span class="name">result</span>.<span class="name">rpc_exports</span> <span class="op">=</span> <span class="name">rpc_exports</span>
- <span class="kw">return</span> <span class="name">result</span>
-
-
-<span class="kw">class </span><span class="cls">RemoteCallable</span>(<span class="name">Component</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- Components inheriting from this base component can export methods
- for jsonrpc if they are decorated using `export`.
-
- Example::
-
- from pocoo.pkg.core.remotecall import RemoteCallable, export
-
- class MyExport(RemoteCallable):
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">__metaclass__</span> <span class="op">=</span> <span class="name">_RemoteCallableMeta</span>
-
-
-<span class="kw">class </span><span class="cls">RemoteCallManager</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">!jsonrpc$</span><span class="st st-sg">&#39;</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="bn">super</span>(<span class="name">RemoteCallManager</span>, <span class="bn bn-pseudo">self</span>).<span class="name">__init__</span>(<span class="name">ctx</span>)
- <span class="bn bn-pseudo">self</span>.<span class="name">_mapping</span> <span class="op">=</span> <span class="bn bn-pseudo">None</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="cm"># TODO: once jsonrpc1.1 is finished: update error codes</span>
- <span class="kw">if</span> <span class="bn bn-pseudo">self</span>.<span class="name">_mapping</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">_mapping</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">RemoteCallable</span>):
- <span class="kw">for</span> <span class="name">name</span>, <span class="name">ref</span> <span class="op op-word">in</span> <span class="name">comp</span>.<span class="name">rpc_exports</span>.<span class="name">iteritems</span>():
- <span class="name">handler</span> <span class="op">=</span> <span class="name">new</span>.<span class="name">instancemethod</span>(<span class="name">ref</span>, <span class="name">comp</span>, <span class="name">comp</span>.<span class="name">__class__</span>)
- <span class="bn bn-pseudo">self</span>.<span class="name">_mapping</span>[<span class="name">name</span>] <span class="op">=</span> <span class="name">handler</span>
-
- <span class="bn">id</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
- <span class="kw">try</span>:
- <span class="name">method</span>, <span class="name">args</span>, <span class="name">kwargs</span>, <span class="bn">id</span> <span class="op">=</span> <span class="name">json</span>.<span class="name">parse_jsonrpc_request</span>(<span class="name">req</span>.<span class="name">data</span>)
- <span class="name">handler</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">_mapping</span>[<span class="name">method</span>]
- <span class="name">json_data</span> <span class="op">=</span> {
- <span class="st st-sg">&#39;</span><span class="st">version</span><span class="st st-sg">&#39;</span>: <span class="st st-sg">&#39;</span><span class="st">1.1</span><span class="st st-sg">&#39;</span>,
- <span class="st st-sg">&#39;</span><span class="st">result</span><span class="st st-sg">&#39;</span>: <span class="name">handler</span>(<span class="name">req</span>, <span class="op">*</span><span class="name">args</span>, <span class="op">**</span><span class="name">kwargs</span>)
- }
- <span class="kw">if</span> <span class="bn">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">json_data</span>[<span class="st st-sg">&#39;</span><span class="st">id</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="bn">id</span>
-
- <span class="kw">except</span> <span class="name">DirectResponse</span>, <span class="name">e</span>:
- <span class="kw">return</span> <span class="name">e</span>.<span class="name">args</span>[<span class="nb nb-int">0</span>]
- <span class="kw">except</span> <span class="exc">Exception</span>, <span class="name">e</span>:
- <span class="name">error</span> <span class="op">=</span> {
- <span class="st st-sg">&#39;</span><span class="st">msg</span><span class="st st-sg">&#39;</span>: <span class="bn">str</span>(<span class="name">e</span>),
- <span class="st st-sg">&#39;</span><span class="st">type</span><span class="st st-sg">&#39;</span>: <span class="name">e</span>.<span class="name">__class__</span>.<span class="name">__name__</span>
-
- }
- <span class="kw">for</span> <span class="name">name</span>, <span class="name">ref</span> <span class="op op-word">in</span> <span class="name">e</span>.<span class="name">__dict__</span>.<span class="name">iteritems</span>():
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">name</span>.<span class="name">startswith</span>(<span class="st st-sg">&#39;</span><span class="st">_</span><span class="st st-sg">&#39;</span>) <span class="op op-word">and</span>\
- <span class="bn">isinstance</span>(<span class="name">ref</span>, (<span class="bn">str</span>, <span class="bn">unicode</span>, <span class="bn">int</span>, <span class="bn">float</span>, <span class="bn">tuple</span>,
- <span class="bn">list</span>, <span class="bn">dict</span>)):
- <span class="name">error</span>[<span class="name">name</span>] <span class="op">=</span> <span class="name">ref</span>
-
- <span class="name">json_data</span> <span class="op">=</span> {
- <span class="st st-sg">&#39;</span><span class="st">version</span><span class="st st-sg">&#39;</span>: <span class="st st-sg">&#39;</span><span class="st">1.1</span><span class="st st-sg">&#39;</span>,
- <span class="st st-sg">&#39;</span><span class="st">error</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="st st-sg">&#39;</span><span class="st">JSONRPCError</span><span class="st st-sg">&#39;</span>,
- <span class="st st-sg">&#39;</span><span class="st">code</span><span class="st st-sg">&#39;</span>: <span class="nb nb-oct">000</span>,
- <span class="st st-sg">&#39;</span><span class="st">message</span><span class="st st-sg">&#39;</span>: <span class="st st-sg">&#39;</span><span class="st">An error occurred parsing the request object.</span><span class="st st-sg">&#39;</span>,
- <span class="st st-sg">&#39;</span><span class="st">error</span><span class="st st-sg">&#39;</span>: <span class="name">error</span>
-
- }
- }
- <span class="kw">if</span> <span class="bn">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">json_data</span>[<span class="st st-sg">&#39;</span><span class="st">id</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="bn">id</span>
-
- <span class="kw">return</span> <span class="name">Response</span>(<span class="name">json</span>.<span class="name">dumps</span>(<span class="name">json_data</span>),
- [(<span class="st st-sg">&#39;</span><span class="st">Content-Type</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">text/javascript</span><span class="st st-sg">&#39;</span>)])
-
-
-<span class="kw">def </span><span class="fun">export</span>(<span class="name">name</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- Exports a function in a RemoteCallable component.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">def </span><span class="fun">wrapped</span>(<span class="name">f</span>):
- <span class="name">f</span>.<span class="name">rpc_exported</span> <span class="op">=</span> <span class="bn bn-pseudo">True</span>
-
- <span class="name">f</span>.<span class="name">rpc_name</span> <span class="op">=</span> <span class="name">name</span>
- <span class="kw">return</span> <span class="name">f</span>
- <span class="kw">return</span> <span class="name">wrapped</span>
-
-<span class="cm"># -*- coding: utf-8 -*-</span>
-<span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- pocoo.pkg.core.restformat
- ~~~~~~~~~~~~~~~~~~~~~~~~~
-
- Pocoo ReST Parser.
-
- A thin wrapper around the docutils ReST parser.
-
- :copyright: 2006 by 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.pkg.core.textfmt</span><span class="kw"> import</span> <span class="name">MarkupFormat</span>
-<span class="kw">from </span><span class="cls">pocoo.utils.html</span><span class="kw"> import</span> <span class="name">escape_html</span>
-
-<span class="kw">from </span><span class="cls">pocoo.pkg.core.smilies</span><span class="kw"> import</span> <span class="name">replace_smilies</span>
-
-
-<span class="kw">class </span><span class="cls">ReST</span>(<span class="name">MarkupFormat</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- ReST markup format.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="name">name</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">rest</span><span class="st st-sg">&#39;</span>
-
- <span class="kw">def </span><span class="fun">parse</span>(<span class="bn bn-pseudo">self</span>, <span class="name">text</span>, <span class="name">signature</span>):
- <span class="kw">from </span><span class="cls">docutils.core</span><span class="kw"> import</span> <span class="name">publish_parts</span>
-
- <span class="kw">try</span>:
- <span class="name">parts</span> <span class="op">=</span> <span class="name">publish_parts</span>(<span class="name">source</span><span class="op">=</span><span class="name">text</span>, <span class="name">writer_name</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">html4css1</span><span class="st st-sg">&#39;</span>)
- <span class="name">text</span> <span class="op">=</span> <span class="name">parts</span>[<span class="st st-sg">&#39;</span><span class="st">fragment</span><span class="st st-sg">&#39;</span>].<span class="name">strip</span>()
- <span class="kw">except</span> <span class="exc">Exception</span>:
- <span class="cm"># TODO: figure out which exceptions this can raise</span>
-
- <span class="name">text</span> <span class="op">=</span> <span class="name">escape_html</span>(<span class="name">text</span>).<span class="name">strip</span>()
- <span class="cm">#XXX: render smilies just in text blocks</span>
- <span class="kw">return</span> <span class="name">replace_smilies</span>(<span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>, <span class="name">text</span>)
-
- <span class="kw">def </span><span class="fun">quote_text</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">text</span>, <span class="name">username</span><span class="op">=</span><span class="bn bn-pseudo">None</span>):
- <span class="name">lines</span> <span class="op">=</span> [<span class="name">u</span><span class="st st-sg">&#39;</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">line</span> <span class="kw">for</span> <span class="name">line</span> <span class="op op-word">in</span> <span class="name">text</span>.<span class="name">splitlines</span>()]
- <span class="kw">if</span> <span class="name">username</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">_</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">gettext</span>
-
- <span class="name">lines</span>.<span class="name">insert</span>(<span class="nb nb-int">0</span>, (<span class="name">u</span><span class="st st-sg">&#39;</span><span class="st"> **</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="name">_</span>(<span class="st st-sg">&#39;</span><span class="st st-int">%s</span><span class="st"> wrote</span><span class="st st-sg">&#39;</span>)) <span class="op">%</span> <span class="name">username</span>)
- <span class="kw">return</span> <span class="name">u</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="cm"># -*- coding: utf-8 -*-</span>
-<span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- pocoo.pkg.core.search
- ~~~~~~~~~~~~~~~~~~~~~
-
- Pocoo Search System
-
- :copyright: 2006 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.application</span><span class="kw"> import</span> <span class="name">LinkableMixin</span>
-
-<span class="kw">from </span><span class="cls">shlex</span><span class="kw"> import</span> <span class="name">split</span>
-
-
-<span class="cm">#XXX: some kind of early draft</span>
-<span class="kw">class </span><span class="cls">Query</span>(<span class="bn">object</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- Search Query Object
- </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">rule</span>):
- <span class="bn bn-pseudo">self</span>.<span class="name">text</span> <span class="op">=</span> <span class="name">rule</span>
-
- <span class="bn bn-pseudo">self</span>.<span class="name">required</span> <span class="op">=</span> []
- <span class="bn bn-pseudo">self</span>.<span class="name">unwanted</span> <span class="op">=</span> []
- <span class="bn bn-pseudo">self</span>.<span class="name">optional</span> <span class="op">=</span> []
- <span class="name">next</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
-
- <span class="name">first</span> <span class="op">=</span> <span class="bn bn-pseudo">True</span>
- <span class="kw">for</span> <span class="name">token</span> <span class="op op-word">in</span> <span class="name">split</span>(<span class="name">rule</span>):
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">next</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="bn">getattr</span>(<span class="bn bn-pseudo">self</span>, <span class="name">next</span>).<span class="name">append</span>(<span class="name">token</span>)
- <span class="name">next</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
-
- <span class="kw">if</span> <span class="name">token</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">NOT</span><span class="st st-sg">&#39;</span>:
- <span class="name">next</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">unwanted</span><span class="st st-sg">&#39;</span>
- <span class="kw">elif</span> <span class="name">token</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">AND</span><span class="st st-sg">&#39;</span>:
- <span class="name">next</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">required</span><span class="st st-sg">&#39;</span>
-
- <span class="kw">elif</span> <span class="name">token</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">OR</span><span class="st st-sg">&#39;</span>:
- <span class="name">next</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">optional</span><span class="st st-sg">&#39;</span>
- <span class="kw">else</span>:
- <span class="kw">if</span> <span class="name">token</span>.<span class="name">startswith</span>(<span class="st st-sg">&#39;</span><span class="st">+</span><span class="st st-sg">&#39;</span>):
- <span class="name">token</span> <span class="op">=</span> <span class="name">token</span>[<span class="nb nb-int">1</span>:]
- <span class="bn bn-pseudo">self</span>.<span class="name">required</span>.<span class="name">append</span>(<span class="name">token</span>)
- <span class="kw">elif</span> <span class="name">token</span>.<span class="name">startswith</span>(<span class="st st-sg">&#39;</span><span class="st">-</span><span class="st st-sg">&#39;</span>):
- <span class="name">token</span> <span class="op">=</span> <span class="name">token</span>[<span class="nb nb-int">1</span>:]
- <span class="bn bn-pseudo">self</span>.<span class="name">unwanted</span>.<span class="name">append</span>(<span class="name">token</span>)
- <span class="kw">elif</span> <span class="name">first</span>:
- <span class="bn bn-pseudo">self</span>.<span class="name">required</span>.<span class="name">append</span>(<span class="name">token</span>)
- <span class="name">first</span> <span class="op">=</span> <span class="bn bn-pseudo">False</span>
-
- <span class="kw">else</span>:
- <span class="bn bn-pseudo">self</span>.<span class="name">optional</span>.<span class="name">append</span>(<span class="name">token</span>)
- <span class="name">first</span> <span class="op">=</span> <span class="bn bn-pseudo">False</span>
-
- <span class="bn bn-pseudo">self</span>.<span class="name">words</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">required</span> <span class="op">+</span> <span class="bn bn-pseudo">self</span>.<span class="name">unwanted</span> <span class="op">+</span> <span class="bn bn-pseudo">self</span>.<span class="name">optional</span>
-
- <span class="kw">def </span><span class="fun">__iter__</span>(<span class="bn bn-pseudo">self</span>):
- <span class="kw">return</span> <span class="bn">iter</span>(<span class="bn bn-pseudo">self</span>.<span class="name">words</span>)
-
- <span class="kw">def </span><span class="fun">__len__</span>(<span class="bn bn-pseudo">self</span>):
- <span class="kw">return</span> <span class="bn">len</span>(<span class="bn bn-pseudo">self</span>.<span class="name">words</span>)
-
- <span class="kw">def </span><span class="fun">is_required</span>(<span class="bn bn-pseudo">self</span>, <span class="name">word</span>):
- <span class="kw">return</span> <span class="name">word</span> <span class="op op-word">in</span> <span class="bn bn-pseudo">self</span>.<span class="name">required</span>
-
- <span class="kw">def </span><span class="fun">is_unwanted</span>(<span class="bn bn-pseudo">self</span>, <span class="name">word</span>):
- <span class="kw">return</span> <span class="name">word</span> <span class="op op-word">in</span> <span class="bn bn-pseudo">self</span>.<span class="name">unwanted</span>
-
- <span class="kw">def </span><span class="fun">is_optional</span>(<span class="bn bn-pseudo">self</span>, <span class="name">word</span>):
- <span class="kw">return</span> <span class="name">word</span> <span class="op op-word">in</span> <span class="bn bn-pseudo">self</span>.<span class="name">optional</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">%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">text</span>
-
- )
-
-
-<span class="cm">#XXX: early draft</span>
-<span class="kw">class </span><span class="cls">Result</span>(<span class="bn">object</span>, <span class="name">LinkableMixin</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Search result object.
- </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">title</span>, <span class="name">relative_url</span>, <span class="name">description</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">title</span> <span class="op">=</span> <span class="name">title</span>
- <span class="bn bn-pseudo">self</span>.<span class="name">relative_url</span> <span class="op">=</span> <span class="name">relative_url</span>
-
- <span class="bn bn-pseudo">self</span>.<span class="name">description</span> <span class="op">=</span> <span class="name">description</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">%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">title</span>
-
- )
-
-
-<span class="kw">class </span><span class="cls">SearchProvider</span>(<span class="name">Component</span>):
- <span class="cm">#: name of the search provider</span>
- <span class="name">name</span> <span class="op">=</span> <span class="bn bn-pseudo">None</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="st st-db">&quot;&quot;&quot;</span><span class="st">Return a translated version of the search provider name.</span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">return</span> <span class="bn bn-pseudo">self</span>.<span class="name">__class__</span>.<span class="name">__name__</span>
-
- <span class="kw">def </span><span class="fun">can_search</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Return True if a user is allowed to use this search provider.</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">query</span>(<span class="bn bn-pseudo">self</span>, <span class="name">query</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Perform a query, has to return an iterable of result objects.</span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">return</span> ()
-<span class="cm"># -*- coding: utf-8 -*-</span>
-<span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- pocoo.pkg.core.session
- ~~~~~~~~~~~~~~~~~~~~~~
-
- Pocoo session handling.
-
- :copyright: 2006 by Georg Brandl, Armin Ronacher.
- :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">md5</span>
-<span class="kw">import </span><span class="cls">time</span>
-<span class="kw">import </span><span class="cls">random</span>
-
-<span class="kw">from </span><span class="cls">datetime</span><span class="kw"> import</span> <span class="name">datetime</span>, <span class="name">timedelta</span>
-
-<span class="kw">from </span><span class="cls">pocoo.application</span><span class="kw"> import</span> <span class="name">RequestWrapper</span>
-<span class="kw">from </span><span class="cls">pocoo.settings</span><span class="kw"> import</span> <span class="name">cfg</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.uri</span><span class="kw"> import</span> <span class="name">urlencode</span>
-<span class="kw">from </span><span class="cls">pocoo.pkg.core.db</span><span class="kw"> import</span> <span class="name">sessions</span>, <span class="name">users</span>
-<span class="kw">from </span><span class="cls">pocoo.pkg.core.auth</span><span class="kw"> import</span> <span class="name">get_auth_provider</span>
-
-
-<span class="kw">def </span><span class="fun">get_active_sessions</span>(<span class="name">ctx</span>, <span class="name">delta</span><span class="op">=</span><span class="name">timedelta</span>(<span class="name">minutes</span><span class="op">=</span><span class="nb nb-int">5</span>)):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Return a tuple in the following form::
-
- (sessions, user_count, guest_count, total)
-
- sessions is a dict for the template with all relevant
- information about the sessions, user_count is the
- amount of all logged in users, guest_count is the
- amount of all anonymous users and total is the total
- number of all sessions being active.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="name">provider</span> <span class="op">=</span> <span class="name">get_auth_provider</span>(<span class="name">ctx</span>)
- <span class="name">now</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">session_list</span> <span class="op">=</span> []
- <span class="name">user_count</span> <span class="op">=</span> <span class="nb nb-int">0</span>
-
- <span class="name">guest_count</span> <span class="op">=</span> <span class="nb nb-int">0</span>
- <span class="name">r</span> <span class="op">=</span> <span class="name">con</span>.<span class="name">execute</span>(<span class="name">sessions</span>.<span class="name">select</span>(
- <span class="name">sessions</span>.<span class="name">c</span>.<span class="name">last_reload</span> <span class="op">&gt;</span> <span class="name">now</span> <span class="op">-</span> <span class="name">delta</span>
-
- ))
- <span class="kw">while</span> <span class="bn bn-pseudo">True</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">break</span>
-
- <span class="name">user</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">users</span>.<span class="name">c</span>.<span class="name">user_id</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">provider</span>.<span class="name">get_user_id</span>(<span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">data</span><span class="st st-sg">&#39;</span>])
- )).<span class="name">fetchone</span>()
- <span class="kw">if</span> <span class="name">user</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">user</span>[<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>] <span class="op">&lt;</span> <span class="nb nb-int">1</span>:
- <span class="name">guest_count</span> <span class="op">+=</span> <span class="nb nb-int">1</span>
-
- <span class="name">user_data</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
- <span class="kw">else</span>:
- <span class="name">user_data</span> <span class="op">=</span> {
- <span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>: <span class="name">user</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">user_id</span><span class="st st-sg">&#39;</span>: <span class="name">user</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">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">user</span>[<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>])),
- }
- <span class="name">user_count</span> <span class="op">+=</span> <span class="nb nb-int">1</span>
-
- <span class="name">session_list</span>.<span class="name">append</span>({
- <span class="st st-sg">&#39;</span><span class="st">last_reload</span><span class="st st-sg">&#39;</span>: <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">last_reload</span><span class="st st-sg">&#39;</span>],
- <span class="st st-sg">&#39;</span><span class="st">user</span><span class="st st-sg">&#39;</span>: <span class="name">user_data</span>
- })
- <span class="name">session_list</span>.<span class="name">sort</span>(<span class="name">key</span><span class="op">=</span><span class="kw">lambda</span> <span class="name">x</span>: <span class="name">x</span>[<span class="st st-sg">&#39;</span><span class="st">last_reload</span><span class="st st-sg">&#39;</span>])
- <span class="kw">return</span> <span class="name">session_list</span>, <span class="name">user_count</span>, <span class="name">guest_count</span>, <span class="name">user_count</span> <span class="op">+</span> <span class="name">guest_count</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_sessions_by_action</span>(<span class="name">ctx</span>, <span class="name">url</span>):
- <span class="name">provider</span> <span class="op">=</span> <span class="name">get_auth_provider</span>(<span class="name">ctx</span>)
- <span class="kw">def </span><span class="fun">do</span>(<span class="name">con</span>):
- <span class="name">session_list</span> <span class="op">=</span> []
- <span class="name">r</span> <span class="op">=</span> <span class="name">con</span>.<span class="name">execute</span>(<span class="name">sessions</span>.<span class="name">select</span>(
- <span class="name">sessions</span>.<span class="name">c</span>.<span class="name">action</span> <span class="op">==</span> <span class="name">url</span>
-
- ))
- <span class="kw">while</span> <span class="bn bn-pseudo">True</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">break</span>
-
- <span class="name">user</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">users</span>.<span class="name">c</span>.<span class="name">user_id</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">provider</span>.<span class="name">get_user_id</span>(<span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">data</span><span class="st st-sg">&#39;</span>])
- )).<span class="name">fetchone</span>()
- <span class="kw">if</span> <span class="name">user</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">user</span>[<span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>] <span class="op">&lt;</span> <span class="nb nb-int">1</span>:
- <span class="name">user_data</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
-
- <span class="kw">else</span>:
- <span class="name">user_data</span> <span class="op">=</span> {
- <span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>: <span class="name">user</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">user</span>[<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>])),
- }
- <span class="name">session_list</span>.<span class="name">append</span>(<span class="name">user_data</span>)
- <span class="kw">return</span> <span class="name">session_list</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">class </span><span class="cls">Session</span>(<span class="bn">dict</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Session Model</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">sid</span>, <span class="name">ip</span>, <span class="name">path</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">path</span> <span class="op">=</span> <span class="name">path</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">sessions</span>.<span class="name">select</span>(
- (<span class="name">sessions</span>.<span class="name">c</span>.<span class="name">session_key</span> <span class="op">==</span> <span class="name">sid</span>) <span class="op">&amp;</span>
-
- (<span class="name">sessions</span>.<span class="name">c</span>.<span class="name">ip_addr</span> <span class="op">==</span> <span class="name">ip</span>) <span class="op">&amp;</span>
- (<span class="name">sessions</span>.<span class="name">c</span>.<span class="name">expires</span> <span class="op">&gt;=</span> <span class="name">datetime</span>.<span class="name">utcnow</span>())
- ))
- <span class="name">data</span> <span class="op">=</span> <span class="name">r</span>.<span class="name">fetchone</span>()
- <span class="kw">if</span> <span class="name">data</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="bn">super</span>(<span class="name">Session</span>, <span class="bn bn-pseudo">self</span>).<span class="name">__init__</span>()
- <span class="bn bn-pseudo">self</span>.<span class="name">sid</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
-
- <span class="kw">else</span>:
- <span class="bn">super</span>(<span class="name">Session</span>, <span class="bn bn-pseudo">self</span>).<span class="name">__init__</span>(<span class="name">data</span>[<span class="st st-sg">&#39;</span><span class="st">data</span><span class="st st-sg">&#39;</span>])
- <span class="bn bn-pseudo">self</span>.<span class="name">sid</span> <span class="op">=</span> <span class="name">sid</span>
-
- <span class="bn bn-pseudo">self</span>.<span class="name">ip</span> <span class="op">=</span> <span class="name">ip</span>
-
- <span class="kw">def </span><span class="fun">__hash__</span>(<span class="bn bn-pseudo">self</span>):
- <span class="kw">return</span> <span class="bn">hash</span>(<span class="bn bn-pseudo">self</span>.<span class="name">sid</span>)
-
- <span class="kw">def </span><span class="fun">to_dict</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Return the session data as normal dict.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="bn">dict</span>(<span class="bn bn-pseudo">self</span>)
-
- <span class="kw">def </span><span class="fun">save</span>(<span class="bn bn-pseudo">self</span>, <span class="name">cookie_expire</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Save changes back to the database and updates
- expires and last_reload. Returns a datetime object
- with the time of the session expire.</span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">now</span> <span class="op">=</span> <span class="name">datetime</span>.<span class="name">utcnow</span>()
- <span class="name">expires</span> <span class="op">=</span> <span class="name">now</span> <span class="op">+</span> <span class="name">timedelta</span>(<span class="name">seconds</span><span class="op">=</span><span class="name">cookie_expire</span>)
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="bn bn-pseudo">self</span>.<span class="name">sid</span>:
- <span class="kw">while</span> <span class="bn bn-pseudo">True</span>:
- <span class="name">hashval</span> <span class="op">=</span> <span class="name">md5</span>.<span class="name">new</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">random</span>.<span class="name">random</span>(), <span class="name">time</span>.<span class="name">time</span>()))
- <span class="name">sid</span> <span class="op">=</span> <span class="name">hashval</span>.<span class="name">hexdigest</span>()
- <span class="name">r</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">sessions</span>.<span class="name">select</span>(
- <span class="name">sessions</span>.<span class="name">c</span>.<span class="name">session_key</span> <span class="op">==</span> <span class="name">sid</span>
-
- ))
- <span class="kw">if</span> <span class="name">r</span>.<span class="name">fetchone</span>() <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="kw">break</span>
- <span class="bn bn-pseudo">self</span>.<span class="name">sid</span> <span class="op">=</span> <span class="name">sid</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">sessions</span>.<span class="name">insert</span>(),
- <span class="name">session_key</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">sid</span>,
- <span class="name">ip_addr</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">ip</span>,
- <span class="name">expires</span> <span class="op">=</span> <span class="name">expires</span>,
- <span class="name">last_reload</span> <span class="op">=</span> <span class="name">now</span>,
- <span class="name">action</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">path</span>,
- <span class="name">data</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">to_dict</span>()
- )
- <span class="kw">else</span>:
- <span class="name">q</span> <span class="op">=</span> <span class="name">sessions</span>.<span class="name">c</span>.<span class="name">session_key</span> <span class="op">==</span> <span class="bn bn-pseudo">self</span>.<span class="name">sid</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">sessions</span>.<span class="name">update</span>(<span class="name">q</span>),
- <span class="name">expires</span> <span class="op">=</span> <span class="name">expires</span>,
- <span class="name">last_reload</span> <span class="op">=</span> <span class="name">now</span>,
- <span class="name">action</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">path</span>,
- <span class="name">data</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">to_dict</span>()
- )
- <span class="kw">return</span> <span class="name">expires</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">%s</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">sid</span>,
- <span class="bn">dict</span>.<span class="name">__repr__</span>(<span class="bn bn-pseudo">self</span>)
- )
-
-
-
-<span class="kw">class </span><span class="cls">SessionWrapper</span>(<span class="name">RequestWrapper</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- SessionWrapper loads/stores request.session.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">cookie_name</span> <span class="op">=</span> <span class="name">cfg</span>.<span class="name">str</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">cookiename</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">SESSION</span><span class="st st-sg">&#39;</span>)
- <span class="name">cookie_expires</span> <span class="op">=</span> <span class="name">cfg</span>.<span class="name">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">cookieexpires</span><span class="st st-sg">&#39;</span>, <span class="nb nb-int">7200</span>)
-
- <span class="kw">def </span><span class="fun">get_priority</span>(<span class="bn bn-pseudo">self</span>):
- <span class="cm"># request.session should be set before anything else,</span>
-
- <span class="cm"># but after a possible caching system.</span>
- <span class="kw">return</span> <span class="nb nb-int">2</span>
-
- <span class="kw">def </span><span class="fun">process_request</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>):
- <span class="name">cookie</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">cookies</span>.<span class="name">get</span>(<span class="bn bn-pseudo">self</span>.<span class="name">cookie_name</span>, <span class="bn bn-pseudo">None</span>)
- <span class="name">sid</span> <span class="op">=</span> <span class="name">cookie</span> <span class="op op-word">and</span> <span class="name">cookie</span>.<span class="name">value</span> <span class="op op-word">or</span> <span class="bn bn-pseudo">None</span>
-
- <span class="name">ip</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">environ</span>[<span class="st st-sg">&#39;</span><span class="st">REMOTE_ADDR</span><span class="st st-sg">&#39;</span>]
- <span class="name">req</span>.<span class="name">session</span> <span class="op">=</span> <span class="name">Session</span>(<span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>, <span class="name">sid</span>, <span class="name">ip</span>, <span class="name">req</span>.<span class="name">path</span>)
-
- <span class="kw">def </span><span class="fun">process_response</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">resp</span>):
- <span class="name">expires</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">session</span>.<span class="name">save</span>(<span class="bn bn-pseudo">self</span>.<span class="name">cookie_expires</span>)
- <span class="name">resp</span>.<span class="name">set_cookie</span>(<span class="bn">str</span>(<span class="bn bn-pseudo">self</span>.<span class="name">cookie_name</span>), <span class="name">req</span>.<span class="name">session</span>.<span class="name">sid</span>,
- <span class="name">max_age</span><span class="op">=</span><span class="bn bn-pseudo">self</span>.<span class="name">cookie_expires</span>, <span class="name">expires</span><span class="op">=</span><span class="name">expires</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.simplehtml
- ~~~~~~~~~~~~~~~~~~~~~~~~~
-
- This module provides a MarkupFormat that allows the user to use
- HTML as markup but strips dangerous tags like ``&lt;script&gt;`` and others.
-
- It uses the ``secure_html`` method from the ``html`` util.
-
- :copyright: 2006 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.utils.html</span><span class="kw"> import</span> <span class="name">secure_html</span>
-<span class="kw">from </span><span class="cls">pocoo.pkg.core.textfmt</span><span class="kw"> import</span> <span class="name">MarkupFormat</span>
-
-
-<span class="kw">class </span><span class="cls">SimpleHTML</span>(<span class="name">MarkupFormat</span>):
- <span class="name">name</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">simplehtml</span><span class="st st-sg">&#39;</span>
-
- <span class="kw">def </span><span class="fun">parse</span>(<span class="bn bn-pseudo">self</span>, <span class="name">text</span>):
- <span class="kw">return</span> <span class="name">secure_html</span>(<span class="name">text</span>)
-
- <span class="kw">def </span><span class="fun">quote_text</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">text</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">username</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">_</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">gettext</span>
-
- <span class="name">text</span> <span class="op">=</span> <span class="name">u</span><span class="st st-sg">&#39;</span><span class="st">&lt;em&gt;</span><span class="st st-int">%s</span><span class="st">:&lt;/em&gt;&lt;br /&gt;</span><span class="st st-int">%s</span><span class="st st-sg">&#39;</span> <span class="op">%</span> ((<span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st st-int">%s</span><span class="st"> wrote</span><span class="st st-sg">&#39;</span>) <span class="op">%</span> <span class="name">username</span>), <span class="name">text</span>)
- <span class="kw">return</span> <span class="name">u</span><span class="st st-sg">&#39;</span><span class="st">&lt;blockquote&gt;</span><span class="st st-int">%s</span><span class="st">&lt;/blockquote&gt;</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">text</span>
-
-<span class="cm"># -*- coding: utf-8 -*-</span>
-<span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- pocoo.pkg.core.smilies
- ~~~~~~~~~~~~~~~~~~~~~~
-
- Pocoo smilies parser.
-
- :copyright: 2006 by Benjamin Wiegand, 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</span><span class="kw"> import</span> <span class="name">Component</span>
-<span class="kw">from </span><span class="cls">pocoo.utils.html</span><span class="kw"> import</span> <span class="name">escape_html</span>
-
-
-<span class="kw">def </span><span class="fun">replace_smilies</span>(<span class="name">ctx</span>, <span class="name">text</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Replace smilies in ``text``, using all providers listed in the
- board config.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">smiley_providers</span> <span class="op">=</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">smiley_providers</span><span class="st st-sg">&#39;</span>, [<span class="st st-sg">&#39;</span><span class="st">default</span><span class="st st-sg">&#39;</span>])
- <span class="kw">for</span> <span class="name">provider</span> <span class="op op-word">in</span> <span class="name">ctx</span>.<span class="name">get_components</span>(<span class="name">SmileyProvider</span>):
- <span class="kw">if</span> <span class="name">provider</span>.<span class="name">name</span> <span class="op op-word">not</span> <span class="op op-word">in</span> <span class="name">smiley_providers</span>:
- <span class="kw">continue</span>
-
- <span class="kw">for</span> <span class="name">smiley</span> <span class="op op-word">in</span> <span class="name">provider</span>.<span class="name">smilies</span>:
- <span class="name">text</span> <span class="op">=</span> <span class="name">text</span>.<span class="name">replace</span>(<span class="name">smiley</span>[<span class="nb nb-int">0</span>], <span class="name">provider</span>.<span class="name">render_smiley</span>(<span class="name">smiley</span>))
- <span class="kw">return</span> <span class="name">text</span>
-
-
-<span class="kw">def </span><span class="fun">get_smiley_buttons</span>(<span class="name">ctx</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Return a list of button dictionaries usable for the BBCodeEditor
- JavaScript app.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">res</span> <span class="op">=</span> []
- <span class="name">smiley_providers</span> <span class="op">=</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">smiley_providers</span><span class="st st-sg">&#39;</span>, [<span class="st st-sg">&#39;</span><span class="st">default</span><span class="st st-sg">&#39;</span>])
- <span class="kw">for</span> <span class="name">provider</span> <span class="op op-word">in</span> <span class="name">ctx</span>.<span class="name">get_components</span>(<span class="name">SmileyProvider</span>):
- <span class="kw">if</span> <span class="name">provider</span>.<span class="name">name</span> <span class="op op-word">not</span> <span class="op op-word">in</span> <span class="name">smiley_providers</span>:
- <span class="kw">continue</span>
-
- <span class="kw">for</span> <span class="name">smiley</span> <span class="op op-word">in</span> <span class="name">provider</span>.<span class="name">smilies</span>:
- <span class="name">res</span>.<span class="name">append</span>(<span class="name">smiley</span> <span class="op">+</span> (<span class="name">ctx</span>.<span class="name">make_url</span>(<span class="name">provider</span>.<span class="name">smiley_dir</span>),))
- <span class="kw">return</span> <span class="name">res</span>
-
-
-<span class="kw">class </span><span class="cls">SmileyProvider</span>(<span class="name">Component</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- A SmileyProvider maps small text strings to images.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="cm">#: List of smilies this component provides, in the form</span>
- <span class="cm">#: ``(&#39;textform&#39;, &#39;imagename&#39;)``.</span>
-
- <span class="cm">#: ``imagename`` is relative to the ``smiley_dir`` below.</span>
- <span class="name">smilies</span> <span class="op">=</span> []
-
- <span class="cm">#: Directory where smilies of this provider can be found.</span>
- <span class="cm">#: Must be relative to the forum root, e.g.</span>
- <span class="cm">#: ``!cobalt/pkgname/default/img/smilies/``.</span>
-
- <span class="name">smiley_dir</span> <span class="op">=</span> <span class="st st-db">&quot;&quot;</span>
-
- <span class="cm">#: Name (can be overwritten, must be lowercase).</span>
- <span class="cm">#: Used for the configuration setting.</span>
- <span class="deco">@property</span>
- <span class="kw">def </span><span class="fun">name</span>(<span class="bn bn-pseudo">self</span>):
- <span class="kw">return</span> <span class="bn bn-pseudo">self</span>.<span class="name">__class__</span>.<span class="name">__name__</span>.<span class="name">lower</span>()
-
- <span class="kw">def </span><span class="fun">render_smiley</span>(<span class="bn bn-pseudo">self</span>, <span class="name">smiley</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- Render a smiley. This doesn&#39;t need to be overridden in normal
- cases.
-
- :return: HTML for the smiley image.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">return</span> <span class="st st-sg">&#39;</span><span class="st">&lt;img src=&quot;</span><span class="st st-int">%s</span><span class="st">&quot; alt=&quot;</span><span class="st st-int">%s</span><span class="st">&quot; /&gt;</span><span class="st st-sg">&#39;</span> <span class="op">%</span> (
- <span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">make_url</span>(<span class="bn bn-pseudo">self</span>.<span class="name">smiley_dir</span>, <span class="name">smiley</span>[<span class="nb nb-int">1</span>]),
- <span class="name">escape_html</span>(<span class="name">smiley</span>[<span class="nb nb-int">0</span>])
- )
-
-
-
-<span class="kw">class </span><span class="cls">Default</span>(<span class="name">SmileyProvider</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Default Pocoo smilies.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">smilies</span> <span class="op">=</span> [
- (<span class="st st-sg">&#39;</span><span class="st">;-)</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">wink.png</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="st st-sg">&#39;</span><span class="st">sad.png</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="st st-sg">&#39;</span><span class="st">smile.png</span><span class="st st-sg">&#39;</span>),
- (<span class="st st-sg">&#39;</span><span class="st">:D</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">grin.png</span><span class="st st-sg">&#39;</span>),
- ]
-
- <span class="name">smiley_dir</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">!cobalt/core/default/img/smilies/</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.template
- ~~~~~~~~~~~~~~~~~~~~~~~
-
- Templating helpers.
-
- :copyright: 2006 by Georg Brandl, Armin Ronacher.
- :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">math</span>
-<span class="kw">import </span><span class="cls">jinja.exceptions</span>
-<span class="kw">from </span><span class="cls">jinja.nodes</span><span class="kw"> import</span> <span class="name">Node</span>, <span class="name">KeywordNode</span>, <span class="name">VariableNode</span>, <span class="name">CollectionNode</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">BaseThemeRequirements</span>(<span class="name">FileRequirements</span>):
-
- <span class="kw">def </span><span class="fun">get_javascript_imports</span>(<span class="bn bn-pseudo">self</span>):
- <span class="kw">return</span> (
- <span class="st st-sg">&#39;</span><span class="st">AJS/AJS.js</span><span class="st st-sg">&#39;</span>,
- <span class="st st-sg">&#39;</span><span class="st">pocoo/lib/async.js</span><span class="st st-sg">&#39;</span>,
- <span class="st st-sg">&#39;</span><span class="st">pocoo/lib/dom.js</span><span class="st st-sg">&#39;</span>,
- <span class="st st-sg">&#39;</span><span class="st">pocoo/lib/effects.js</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">return</span> (
- <span class="st st-sg">&#39;</span><span class="st">default/style/screen.css</span><span class="st st-sg">&#39;</span>,
- )
-
-
-
-<span class="kw">class </span><span class="cls">Pagination</span>(<span class="bn">object</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Pagination Controller. Push this into the template so that
- the template designer has an object he can use for generating
- an pagination.
-
- Normally you are looking for the ``LazyPagination`` class, this
- one is just for posts or if you have many single items which
- are combined to a thread etc. The idea is that you don&#39;t have
- and offset information in the url.
- </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">req</span>, <span class="name">idlist</span>, <span class="name">start</span>, <span class="name">per_page</span>, <span class="name">link</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- :param req: the request
- :param idlist: a list of all ids for the pagination
- :param start: the position of the first item on the page
- :param per_page: number of items on each page
- :param link: function which takes one id and returns a link for it
-
- Example::
-
- p = Pagination(req, range(50), 20, 20, lambda x: &#39;post/</span><span class="st st-int">%d</span><span class="st">&#39; </span><span class="st st-int">% x</span><span class="st">)
-
- In this example the first page would contain the posts 0-19,
- the second 20-39 and the first 40-50.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="bn bn-pseudo">self</span>.<span class="name">req</span> <span class="op">=</span> <span class="name">req</span>
-
- <span class="bn bn-pseudo">self</span>.<span class="name">idlist</span> <span class="op">=</span> <span class="name">idlist</span>
- <span class="bn bn-pseudo">self</span>.<span class="name">start</span> <span class="op">=</span> <span class="name">start</span>
-
- <span class="bn bn-pseudo">self</span>.<span class="name">per_page</span> <span class="op">=</span> <span class="name">per_page</span>
- <span class="bn bn-pseudo">self</span>.<span class="name">link</span> <span class="op">=</span> <span class="name">link</span>
-
- <span class="kw">def </span><span class="fun">generate</span>(<span class="bn bn-pseudo">self</span>, <span class="name">normal</span>, <span class="name">active</span>, <span class="name">commata</span>, <span class="name">ellipsis</span>, <span class="name">threshold</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- Generate a Pagination of the data defined in the constructor.
-
- :param normal: inserted string when the page isn&#39;t active
- :param active: inserted string when the page is active
- :param commata: inserted between links
- :param ellipsis: inserted as space indicator for skiped links
- :param threshold: number of links around start/current page and
- end before they will be replaced by an ellipsis
-
- ``normal`` and ``active`` can contain out of the following formatting
- chars:
-
- ====================== ==================================
- ``</span><span class="st st-int">%(page)s</span><span class="st">`` number of the current page
- ``</span><span class="st st-int">%(url)s</span><span class="st">`` absolute url of the current page
- ====================== ==================================
-
- Example::
-
- p.generate(&#39;&lt;a href=&quot;</span><span class="st st-int">%(url)s</span><span class="st">&quot;&gt;</span><span class="st st-int">%(page)s</span><span class="st">&lt;/a&gt;&#39;,
- &#39;&lt;strong&gt;</span><span class="st st-int">%(page)s</span><span class="st">&lt;/strong&gt;&#39;,
- &#39;, &#39;,
- &#39; ... &#39;,
- 3)
- </span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="name">current_page_number</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">start</span> <span class="op">/</span> <span class="bn bn-pseudo">self</span>.<span class="name">per_page</span> <span class="op">+</span> <span class="nb nb-int">1</span>
-
- <span class="name">number_of_pages</span> <span class="op">=</span> <span class="bn">int</span>(<span class="name">math</span>.<span class="name">ceil</span>(<span class="bn">len</span>(<span class="bn bn-pseudo">self</span>.<span class="name">idlist</span>) <span class="op">/</span> (<span class="bn bn-pseudo">self</span>.<span class="name">per_page</span> <span class="op">*</span> <span class="nb nb-flt">1.0</span>)))
- <span class="name">was_space</span> <span class="op">=</span> <span class="bn bn-pseudo">False</span>
-
- <span class="name">result</span> <span class="op">=</span> []
- <span class="kw">for</span> <span class="name">idx</span> <span class="op op-word">in</span> <span class="bn">range</span>(<span class="nb nb-int">1</span>, <span class="name">number_of_pages</span> <span class="op">+</span> <span class="nb nb-int">1</span>):
- <span class="kw">if</span> <span class="name">idx</span> <span class="op">&lt;=</span> <span class="name">threshold</span> <span class="op op-word">or</span> <span class="name">idx</span> <span class="op">&gt;</span> <span class="name">number_of_pages</span> <span class="op">-</span> <span class="name">threshold</span> <span class="op op-word">or</span>\
- <span class="bn">abs</span>(<span class="name">current_page_number</span> <span class="op">-</span> <span class="name">idx</span>) <span class="op">&lt;</span> <span class="name">math</span>.<span class="name">ceil</span>(<span class="name">threshold</span> <span class="op">/</span> <span class="nb nb-flt">2.0</span>):
- <span class="kw">if</span> <span class="name">result</span> <span class="op op-word">and</span> <span class="name">result</span>[<span class="op">-</span><span class="nb nb-int">1</span>] <span class="op">!=</span> <span class="name">ellipsis</span>:
- <span class="name">result</span>.<span class="name">append</span>(<span class="name">commata</span>)
- <span class="name">was_space</span> <span class="op">=</span> <span class="bn bn-pseudo">False</span>
-
- <span class="kw">if</span> <span class="name">idx</span> <span class="op">==</span> <span class="name">current_page_number</span>:
- <span class="name">schema</span> <span class="op">=</span> <span class="name">active</span>
- <span class="kw">else</span>:
- <span class="name">schema</span> <span class="op">=</span> <span class="name">normal</span>
-
- <span class="name">url</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">link</span>(<span class="bn bn-pseudo">self</span>.<span class="name">idlist</span>[(<span class="name">idx</span> <span class="op">-</span> <span class="nb nb-int">1</span>) <span class="op">*</span> <span class="bn bn-pseudo">self</span>.<span class="name">per_page</span>])
- <span class="name">result</span>.<span class="name">append</span>(<span class="name">schema</span> <span class="op">%</span> {
- <span class="st st-sg">&#39;</span><span class="st">page</span><span class="st st-sg">&#39;</span>: <span class="name">idx</span>,
- <span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>: <span class="bn bn-pseudo">self</span>.<span class="name">req</span>.<span class="name">ctx</span>.<span class="name">make_url</span>(<span class="name">url</span>),
- })
- <span class="kw">else</span>:
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">was_space</span>:
- <span class="name">was_space</span> <span class="op">=</span> <span class="bn bn-pseudo">True</span>
-
- <span class="name">result</span>.<span class="name">append</span>(<span class="name">ellipsis</span>)
- <span class="kw">return</span> <span class="name">u</span><span class="st st-sg">&#39;&#39;</span>.<span class="name">join</span>(<span class="name">result</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">%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">str</span>(<span class="bn bn-pseudo">self</span>)
- )
-
- <span class="kw">def </span><span class="fun">__str__</span>(<span class="bn bn-pseudo">self</span>):
- <span class="kw">return</span> <span class="bn bn-pseudo">self</span>.<span class="name">generate</span>(<span class="st st-sg">&#39;</span><span class="st st-int">%(page)s</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">[</span><span class="st st-int">%(page)s</span><span class="st">]</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="st st-sg">&#39;</span><span class="st"> ... </span><span class="st st-sg">&#39;</span>, <span class="nb nb-int">3</span>)
-
-
-
-<span class="kw">class </span><span class="cls">LazyPagination</span>(<span class="bn">object</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- A lazy pagination controller. Doesn&#39;t require a id list like
- the ``Pagination`` controller.
-
- The ``LazyPagination`` is a cheep to calculate pagination based
- on the current page, the total amount of pages and the information
- about what a link looks like and how many items you have per page.
- </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">req</span>, <span class="name">page</span>, <span class="name">per_page</span>, <span class="name">pages</span>, <span class="name">link</span>):
- <span class="bn bn-pseudo">self</span>.<span class="name">req</span> <span class="op">=</span> <span class="name">req</span>
-
- <span class="bn bn-pseudo">self</span>.<span class="name">page</span> <span class="op">=</span> <span class="name">page</span>
- <span class="bn bn-pseudo">self</span>.<span class="name">per_page</span> <span class="op">=</span> <span class="name">per_page</span>
-
- <span class="bn bn-pseudo">self</span>.<span class="name">pages</span> <span class="op">=</span> <span class="name">pages</span>
- <span class="bn bn-pseudo">self</span>.<span class="name">link</span> <span class="op">=</span> <span class="name">link</span>
-
- <span class="kw">def </span><span class="fun">generate</span>(<span class="bn bn-pseudo">self</span>, <span class="name">normal</span>, <span class="name">active</span>, <span class="name">commata</span>, <span class="name">ellipsis</span>, <span class="name">threshold</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- Generate a Pagination of the data defined in the constructor.
-
- :param normal: inserted string when the page isn&#39;t active
- :param active: inserted string when the page is active
- :param commata: inserted between links
- :param ellipsis: inserted as space indicator for skiped links
- :param threshold: number of links around start/current page and
- end before they will be replaced by an ellipsis
-
- ``normal`` and ``active`` can contain out of the following formatting
- chars:
-
- ====================== ==================================
- ``</span><span class="st st-int">%(page)s</span><span class="st">`` number of the current page
- ``</span><span class="st st-int">%(url)s</span><span class="st">`` absolute url of the current page
- ====================== ==================================
-
- Example::
-
- p.generate(&#39;&lt;a href=&quot;</span><span class="st st-int">%(url)s</span><span class="st">&quot;&gt;</span><span class="st st-int">%(page)s</span><span class="st">&lt;/a&gt;&#39;,
- &#39;&lt;strong&gt;</span><span class="st st-int">%(page)s</span><span class="st">&lt;/strong&gt;&#39;,
- &#39;, &#39;,
- &#39; ... &#39;,
- 3)
- </span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="name">was_space</span> <span class="op">=</span> <span class="bn bn-pseudo">False</span>
- <span class="name">result</span> <span class="op">=</span> []
- <span class="kw">for</span> <span class="name">idx</span> <span class="op op-word">in</span> <span class="bn">range</span>(<span class="nb nb-int">1</span>, <span class="bn bn-pseudo">self</span>.<span class="name">pages</span> <span class="op">+</span> <span class="nb nb-int">1</span>):
- <span class="kw">if</span> <span class="name">idx</span> <span class="op">&lt;=</span> <span class="name">threshold</span> <span class="op op-word">or</span> <span class="name">idx</span> <span class="op">&gt;</span> <span class="bn bn-pseudo">self</span>.<span class="name">pages</span> <span class="op">-</span> <span class="name">threshold</span> <span class="op op-word">or</span>\
- <span class="bn">abs</span>(<span class="bn bn-pseudo">self</span>.<span class="name">page</span> <span class="op">-</span> <span class="name">idx</span>) <span class="op">&lt;</span> <span class="name">math</span>.<span class="name">ceil</span>(<span class="name">threshold</span> <span class="op">/</span> <span class="nb nb-flt">2.0</span>):
- <span class="kw">if</span> <span class="name">result</span> <span class="op op-word">and</span> <span class="name">result</span>[<span class="op">-</span><span class="nb nb-int">1</span>] <span class="op">!=</span> <span class="name">ellipsis</span>:
- <span class="name">result</span>.<span class="name">append</span>(<span class="name">commata</span>)
- <span class="name">was_space</span> <span class="op">=</span> <span class="bn bn-pseudo">False</span>
-
- <span class="kw">if</span> <span class="name">idx</span> <span class="op">==</span> <span class="bn bn-pseudo">self</span>.<span class="name">page</span>:
- <span class="name">schema</span> <span class="op">=</span> <span class="name">active</span>
-
- <span class="kw">else</span>:
- <span class="name">schema</span> <span class="op">=</span> <span class="name">normal</span>
- <span class="name">url</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">link</span>(<span class="name">idx</span>)
- <span class="name">result</span>.<span class="name">append</span>(<span class="name">schema</span> <span class="op">%</span> {
- <span class="st st-sg">&#39;</span><span class="st">page</span><span class="st st-sg">&#39;</span>: <span class="name">idx</span>,
- <span class="st st-sg">&#39;</span><span class="st">url</span><span class="st st-sg">&#39;</span>: <span class="bn bn-pseudo">self</span>.<span class="name">req</span>.<span class="name">ctx</span>.<span class="name">make_url</span>(<span class="name">url</span>),
- })
- <span class="kw">else</span>:
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">was_space</span>:
- <span class="name">was_space</span> <span class="op">=</span> <span class="bn bn-pseudo">True</span>
-
- <span class="name">result</span>.<span class="name">append</span>(<span class="name">ellipsis</span>)
- <span class="kw">return</span> <span class="name">u</span><span class="st st-sg">&#39;&#39;</span>.<span class="name">join</span>(<span class="name">result</span>)
-
- <span class="kw">def </span><span class="fun">__str__</span>(<span class="bn bn-pseudo">self</span>):
- <span class="kw">return</span> <span class="bn bn-pseudo">self</span>.<span class="name">generate</span>(<span class="st st-sg">&#39;</span><span class="st st-int">%(page)s</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">[</span><span class="st st-int">%(page)s</span><span class="st">]</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="st st-sg">&#39;</span><span class="st"> ... </span><span class="st st-sg">&#39;</span>, <span class="nb nb-int">3</span>)
-
-
-
-<span class="kw">class </span><span class="cls">PaginationTag</span>(<span class="name">Node</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Generates a pagination. requires a Pagination object at first
- argument::
-
- {% paginate forum.pagination
- &#39;&lt;a href=&quot;</span><span class="st st-int">%(link)s</span><span class="st">&quot;&gt;</span><span class="st st-int">%(page)s</span><span class="st">&lt;/a&gt;&#39;,
- &#39;&lt;strong&gt;</span><span class="st st-int">%(page)s</span><span class="st">&lt;/strong&gt;&#39;,
- &#39;, &#39;,
- &#39;...&#39;
-
- %}
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">rules</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="name">KeywordNode</span>(<span class="st st-sg">&#39;</span><span class="st">paginate</span><span class="st st-sg">&#39;</span>), <span class="name">VariableNode</span>(),
- <span class="name">CollectionNode</span>()]
- }
- <span class="kw">def </span><span class="fun">__init__</span>(<span class="bn bn-pseudo">self</span>, <span class="name">parser</span>, <span class="name">matched_tag</span>, <span class="name">handler_args</span>, <span class="name">stack</span>):
- <span class="bn bn-pseudo">self</span>.<span class="name">_variable</span> <span class="op">=</span> <span class="name">handler_args</span>[<span class="nb nb-int">1</span>]
- <span class="bn bn-pseudo">self</span>.<span class="name">_arguments</span> <span class="op">=</span> <span class="name">handler_args</span>[<span class="nb nb-int">2</span>]
- <span class="name">Node</span>.<span class="name">__init__</span>(<span class="bn bn-pseudo">self</span>)
-
- <span class="kw">def </span><span class="fun">render</span>(<span class="bn bn-pseudo">self</span>, <span class="name">context</span>):
- <span class="name">pagination_controller</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">_variable</span>.<span class="name">resolve</span>(<span class="name">context</span>)
- <span class="kw">if</span> <span class="bn">len</span>(<span class="bn bn-pseudo">self</span>.<span class="name">_arguments</span>) <span class="op">&lt;</span> <span class="nb nb-int">4</span>:
- <span class="kw">raise</span> <span class="name">jinja</span>.<span class="name">exceptions</span>.<span class="name">TemplateRuntimeError</span>(<span class="st st-sg">&#39;</span><span class="st">invalid argument count </span><span class="st st-sg">&#39;</span>
-
- <span class="st st-sg">&#39;</span><span class="st">for {% paginate %}</span><span class="st st-sg">&#39;</span>)
- <span class="name">link_scheme</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">_arguments</span>[<span class="nb nb-int">0</span>].<span class="name">resolve</span>(<span class="name">context</span>)
- <span class="name">active_scheme</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">_arguments</span>[<span class="nb nb-int">1</span>].<span class="name">resolve</span>(<span class="name">context</span>)
- <span class="name">commata</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">_arguments</span>[<span class="nb nb-int">2</span>].<span class="name">resolve</span>(<span class="name">context</span>)
- <span class="name">ellipsis</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">_arguments</span>[<span class="nb nb-int">3</span>].<span class="name">resolve</span>(<span class="name">context</span>)
- <span class="kw">if</span> <span class="bn">len</span>(<span class="bn bn-pseudo">self</span>.<span class="name">_arguments</span>) <span class="op">==</span> <span class="nb nb-int">5</span>:
- <span class="name">threshold</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">_arguments</span>[<span class="nb nb-int">4</span>].<span class="name">resolve</span>(<span class="name">context</span>)
- <span class="kw">else</span>:
- <span class="name">threshold</span> <span class="op">=</span> <span class="nb nb-int">3</span>
-
- <span class="kw">return</span> <span class="name">pagination_controller</span>.<span class="name">generate</span>(<span class="name">link_scheme</span>, <span class="name">active_scheme</span>,
- <span class="name">commata</span>, <span class="name">ellipsis</span>, <span class="name">threshold</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="cm"># -*- coding: utf-8 -*-</span>
-<span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- pocoo.pkg.core.textfmt
- ~~~~~~~~~~~~~~~~~~~~~~
-
- Pocoo text processing interfaces.
-
- :copyright: 2006 by Georg Brandl, Armin Ronacher.
- :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">re</span>
-<span class="kw">from </span><span class="cls">xml.sax.saxutils</span><span class="kw"> import</span> <span class="name">quoteattr</span>
-
-<span class="kw">from </span><span class="cls">pocoo.http</span><span class="kw"> import</span> <span class="name">Request</span>
-<span class="kw">from </span><span class="cls">pocoo.utils.html</span><span class="kw"> import</span> <span class="name">nl2br</span>, <span class="name">escape_html</span>, <span class="name">unescape_html</span>, <span class="name">urlize</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.pkg.core.smilies</span><span class="kw"> import</span> <span class="name">replace_smilies</span>
-<span class="kw">from </span><span class="cls">pocoo.utils.activecache</span><span class="kw"> import</span> <span class="name">Node</span>, <span class="name">load_cache</span>, <span class="name">generate_cache</span>
-
-<span class="kw">from </span><span class="cls">pocoo.utils</span><span class="kw"> import</span> <span class="name">json</span>
-
-
-<span class="name">frozen_translation_re</span> <span class="op">=</span> <span class="name">re</span>.<span class="name">compile</span>(<span class="st st-sg">r&#39;</span><span class="st">&lt;trans(?: value=&quot;(.*?)&quot;)?&gt;(.*?)&lt;/trans&gt;</span><span class="st st-sg">&#39;</span>)
-
-
-
-<span class="kw">class </span><span class="cls">MarkupFormat</span>(<span class="name">Component</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- A text markup format, such as BBCode or HTML.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="cm">#: The relative path to the javascript file for the editor.</span>
- <span class="name">editor_javascript</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">!cobalt/core/PocooLib/BaseEditor.js</span><span class="st st-sg">&#39;</span>
-
- <span class="cm">#: Name for this format. must be lowercase</span>
- <span class="deco">@property</span>
- <span class="kw">def </span><span class="fun">name</span>(<span class="bn bn-pseudo">self</span>):
- <span class="kw">return</span> <span class="bn bn-pseudo">self</span>.<span class="name">__class__</span>.<span class="name">__name__</span>.<span class="name">lower</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="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- Title of this formatter.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">return</span> <span class="bn bn-pseudo">self</span>.<span class="name">name</span>.<span class="name">title</span>()
-
- <span class="kw">def </span><span class="fun">parse</span>(<span class="bn bn-pseudo">self</span>, <span class="name">text</span>, <span class="name">signature</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- This method has to return either an activecache Node or an
- string/Unicode object.
-
- :param signature: If this is ``True`` the pocoo wants to parse
- a signature. For BBCode there could be special
- rules like allowed and disallowed tags etc.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">def </span><span class="fun">render_callback</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">callback</span>, <span class="name">data</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- If the ``parse`` method returns an activecache `CallbackNode`
- this method will be called for the define callback.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">return</span> <span class="name">u</span><span class="st st-sg">&#39;&#39;</span>
-
- <span class="kw">def </span><span class="fun">quote_text</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">text</span>, <span class="name">username</span><span class="op">=</span><span class="bn bn-pseudo">None</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- This has to quote a given text. For example a BBCode
- Markup Formatter should wrap the text in [quote].
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">return</span> <span class="name">text</span>
-
- <span class="kw">def </span><span class="fun">get_editor_options</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">signature</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- This method has to return a dict of JSON
- serializable values which get passed to the
- function ``initEditor()`` which is defined
- in the editor javascript file.
-
- If `signature` is ``True`` pocoo requested an editor for the
- signature and wants just the editor definitions which are
- relevant for an working signature editor. See the ``BBCode``
- text formatter for an example.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">return</span> {}
-
-
-<span class="kw">class </span><span class="cls">PlainText</span>(<span class="name">MarkupFormat</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- This parser just breaks lines and creates links.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">name</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">plain</span><span class="st st-sg">&#39;</span>
-
- <span class="kw">def </span><span class="fun">parse</span>(<span class="bn bn-pseudo">self</span>, <span class="name">text</span>, <span class="name">signature</span>):
- <span class="name">text</span> <span class="op">=</span> <span class="name">escape_html</span>(<span class="name">text</span>)
- <span class="name">text</span> <span class="op">=</span> <span class="name">nl2br</span>(<span class="name">text</span>)
- <span class="name">text</span> <span class="op">=</span> <span class="name">replace_smilies</span>(<span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>, <span class="name">text</span>)
- <span class="kw">return</span> <span class="name">urlize</span>(<span class="name">text</span>, <span class="nb nb-int">50</span>, <span class="bn bn-pseudo">True</span>)
-
- <span class="kw">def </span><span class="fun">quote_text</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>, <span class="name">text</span>, <span class="name">username</span><span class="op">=</span><span class="bn bn-pseudo">None</span>):
- <span class="name">lines</span> <span class="op">=</span> [<span class="name">u</span><span class="st st-sg">&#39;</span><span class="st">&gt; </span><span class="st st-int">%s</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">line</span> <span class="kw">for</span> <span class="name">line</span> <span class="op op-word">in</span> <span class="name">text</span>.<span class="name">splitlines</span>()]
- <span class="kw">if</span> <span class="name">username</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">_</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">gettext</span>
-
- <span class="name">lines</span>.<span class="name">insert</span>(<span class="nb nb-int">0</span>, (<span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st st-int">%s</span><span class="st"> wrote</span><span class="st st-sg">&#39;</span>) <span class="op">+</span> <span class="name">u</span><span class="st st-sg">&#39;</span><span class="st">:</span><span class="st st-sg">&#39;</span>) <span class="op">%</span> <span class="name">username</span>)
- <span class="kw">return</span> <span class="name">u</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">def </span><span class="fun">parse</span>(<span class="name">ctx</span>, <span class="name">text</span>, <span class="name">signature</span><span class="op">=</span><span class="bn bn-pseudo">False</span>, <span class="name">syntax_parser</span><span class="op">=</span><span class="bn bn-pseudo">None</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Parses an text and returns a marshalled object. You then can
- put such an string into the database or push it to the
- render function.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="bn">isinstance</span>(<span class="name">text</span>, <span class="bn">unicode</span>):
- <span class="name">text</span> <span class="op">=</span> <span class="bn">unicode</span>(<span class="name">text</span>)
- <span class="kw">if</span> <span class="name">syntax_parser</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">syntax_parser</span> <span class="op">=</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">syntax_parser</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">plain</span><span class="st st-sg">&#39;</span>)
- <span class="name">syntax_parser</span> <span class="op">=</span> <span class="name">syntax_parser</span>.<span class="name">lower</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">MarkupFormat</span>):
- <span class="kw">if</span> <span class="name">comp</span>.<span class="name">name</span> <span class="op">==</span> <span class="name">syntax_parser</span>:
- <span class="name">node</span> <span class="op">=</span> <span class="name">comp</span>.<span class="name">parse</span>(<span class="name">text</span>, <span class="name">signature</span>)
- <span class="kw">if</span> <span class="bn">isinstance</span>(<span class="name">node</span>, <span class="bn">basestring</span>):
- <span class="name">node</span> <span class="op">=</span> <span class="name">Node</span>(<span class="name">node</span>)
- <span class="kw">return</span> <span class="name">generate_cache</span>(<span class="name">node</span>, <span class="name">syntax_parser</span>)
- <span class="kw">else</span>:
- <span class="kw">raise</span> <span class="exc">ValueError</span>(<span class="st st-sg">&#39;</span><span class="st">Parser &quot;</span><span class="st st-int">%s</span><span class="st">&quot; not found</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">syntax_parser</span>)
-
-
-
-<span class="kw">def </span><span class="fun">render</span>(<span class="name">req</span>, <span class="name">data</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Renders a parsed data
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">node</span>, <span class="name">syntax_parser</span> <span class="op">=</span> <span class="name">load_cache</span>(<span class="name">data</span>)
- <span class="kw">for</span> <span class="name">comp</span> <span class="op op-word">in</span> <span class="name">req</span>.<span class="name">ctx</span>.<span class="name">get_components</span>(<span class="name">MarkupFormat</span>):
- <span class="kw">if</span> <span class="name">comp</span>.<span class="name">name</span> <span class="op">==</span> <span class="name">syntax_parser</span>:
- <span class="kw">break</span>
-
- <span class="kw">else</span>:
- <span class="kw">raise</span> <span class="exc">ValueError</span>(<span class="st st-sg">&#39;</span><span class="st">syntax parser </span><span class="st st-int">%r</span><span class="st"> not found</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">syntax_parser</span>)
- <span class="kw">return</span> <span class="name">node</span>.<span class="name">render</span>(<span class="name">req</span>, <span class="name">comp</span>)
-
-
-
-<span class="kw">def </span><span class="fun">parse_and_render</span>(<span class="name">req</span>, <span class="name">text</span>, <span class="name">signature</span><span class="op">=</span><span class="bn bn-pseudo">False</span>, <span class="name">syntax_parser</span><span class="op">=</span><span class="bn bn-pseudo">None</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Parses and renders a text.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="bn">isinstance</span>(<span class="name">text</span>, <span class="bn">unicode</span>):
- <span class="name">text</span> <span class="op">=</span> <span class="bn">unicode</span>(<span class="name">text</span>)
- <span class="kw">if</span> <span class="name">syntax_parser</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">syntax_parser</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">syntax_parser</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">plain</span><span class="st st-sg">&#39;</span>)
- <span class="name">syntax_parser</span> <span class="op">=</span> <span class="name">syntax_parser</span>.<span class="name">lower</span>()
- <span class="kw">for</span> <span class="name">comp</span> <span class="op op-word">in</span> <span class="name">req</span>.<span class="name">ctx</span>.<span class="name">get_components</span>(<span class="name">MarkupFormat</span>):
- <span class="kw">if</span> <span class="name">comp</span>.<span class="name">name</span> <span class="op">==</span> <span class="name">syntax_parser</span>:
- <span class="name">node</span> <span class="op">=</span> <span class="name">comp</span>.<span class="name">parse</span>(<span class="name">text</span>, <span class="name">signature</span>)
- <span class="kw">if</span> <span class="bn">isinstance</span>(<span class="name">node</span>, <span class="bn">basestring</span>):
- <span class="name">node</span> <span class="op">=</span> <span class="name">Node</span>(<span class="name">node</span>)
- <span class="kw">return</span> <span class="name">node</span>.<span class="name">render</span>(<span class="name">req</span>, <span class="name">comp</span>)
- <span class="kw">else</span>:
- <span class="kw">raise</span> <span class="exc">ValueError</span>(<span class="st st-sg">&#39;</span><span class="st">Parser &quot;</span><span class="st st-int">%s</span><span class="st">&quot; not found</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">syntax_parser</span>)
-
-
-
-<span class="kw">def </span><span class="fun">get_editor</span>(<span class="name">req</span>, <span class="name">signature</span><span class="op">=</span><span class="bn bn-pseudo">False</span>, <span class="name">syntax_parser</span><span class="op">=</span><span class="bn bn-pseudo">None</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Return a tuple in the form (javascript_file, options)
- for the template. Both of them are strings which can be
- used directly in the template::
-
- &lt;script type=&quot;text/javascript&quot; src=&quot;{{ editorjs }}&quot;&gt;&lt;/script&gt;
-
- &lt;script type=&quot;text/javascript&quot;&gt;
- initEditor(&#39;id_of_textarea&#39;, &#39;id_of_toolbar&#39;, {{ options }});
- &lt;/script&gt;
-
- If you set `signature` to ``True`` it will just display the
- buttons which are relevant for the signature editor.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">if</span> <span class="name">syntax_parser</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">syntax_parser</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">syntax_parser</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">plain</span><span class="st st-sg">&#39;</span>).<span class="name">lower</span>()
- <span class="kw">for</span> <span class="name">comp</span> <span class="op op-word">in</span> <span class="name">req</span>.<span class="name">ctx</span>.<span class="name">get_components</span>(<span class="name">MarkupFormat</span>):
- <span class="kw">if</span> <span class="name">comp</span>.<span class="name">name</span> <span class="op">==</span> <span class="name">syntax_parser</span>:
- <span class="name">js</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">ctx</span>.<span class="name">make_url</span>(<span class="name">comp</span>.<span class="name">editor_javascript</span>)
- <span class="name">options</span> <span class="op">=</span> <span class="name">json</span>.<span class="name">dumps</span>(<span class="name">comp</span>.<span class="name">get_editor_options</span>(<span class="name">req</span>, <span class="name">signature</span>))
- <span class="kw">return</span> <span class="name">js</span>, <span class="name">options</span>
-
- <span class="kw">raise</span> <span class="exc">ValueError</span>(<span class="st st-sg">&#39;</span><span class="st">Parser &quot;</span><span class="st st-int">%s</span><span class="st">&quot; not found</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">syntax_parser</span>)
-
-
-<span class="kw">def </span><span class="fun">quote_text</span>(<span class="name">req</span>, <span class="name">text</span>, <span class="name">username</span><span class="op">=</span><span class="bn bn-pseudo">None</span>, <span class="name">syntax_parser</span><span class="op">=</span><span class="bn bn-pseudo">None</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Quote ``text`` with the style defined in the markup parser.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">if</span> <span class="name">syntax_parser</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">syntax_parser</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">syntax_parser</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">plain</span><span class="st st-sg">&#39;</span>).<span class="name">lower</span>()
- <span class="kw">for</span> <span class="name">comp</span> <span class="op op-word">in</span> <span class="name">req</span>.<span class="name">ctx</span>.<span class="name">get_components</span>(<span class="name">MarkupFormat</span>):
- <span class="kw">if</span> <span class="name">comp</span>.<span class="name">name</span> <span class="op">==</span> <span class="name">syntax_parser</span>:
- <span class="kw">return</span> <span class="name">comp</span>.<span class="name">quote_text</span>(<span class="name">req</span>, <span class="name">text</span>, <span class="name">username</span>)
- <span class="kw">raise</span> <span class="exc">ValueError</span>(<span class="st st-sg">&#39;</span><span class="st">Parser &quot;</span><span class="st st-int">%s</span><span class="st">&quot; not found</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">syntax_parser</span>)
-
-
-
-<span class="kw">def </span><span class="fun">get_markup_formatters</span>(<span class="name">req</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Return a list of known formatters
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">result</span> <span class="op">=</span> []
- <span class="kw">for</span> <span class="name">comp</span> <span class="op op-word">in</span> <span class="name">req</span>.<span class="name">ctx</span>.<span class="name">get_components</span>(<span class="name">MarkupFormat</span>):
- <span class="name">result</span>.<span class="name">append</span>((<span class="name">comp</span>.<span class="name">name</span>, <span class="name">comp</span>.<span class="name">get_title</span>(<span class="name">req</span>)))
- <span class="name">result</span>.<span class="name">sort</span>(<span class="name">key</span><span class="op">=</span><span class="kw">lambda</span> <span class="name">x</span>: <span class="name">x</span>[<span class="nb nb-int">1</span>].<span class="name">lower</span>())
- <span class="kw">return</span> <span class="name">result</span>
-
-<span class="cm"># -*- coding: utf-8 -*-</span>
-<span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- pocoo.pkg.core.user
- ~~~~~~~~~~~~~~~~~~~
-
- User model and utilities.
-
- :copyright: 2006 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">os</span><span class="kw"> import</span> <span class="name">path</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">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.http</span><span class="kw"> import</span> <span class="name">DirectResponse</span>, <span class="name">AccessDeniedResponse</span>
-
-<span class="kw">from </span><span class="cls">pocoo.application</span><span class="kw"> import</span> <span class="name">LinkableMixin</span>
-<span class="kw">from </span><span class="cls">pocoo.utils.text</span><span class="kw"> import</span> <span class="name">gen_password</span>, <span class="name">gen_activation_key</span>, <span class="name">gen_pwhash</span>, \
- <span class="name">check_pwhash</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.pkg.core.db</span><span class="kw"> import</span> <span class="name">users</span>, <span class="name">groups</span>, <span class="name">posts</span>, <span class="name">group_members</span>
-
-
-<span class="kw">def </span><span class="fun">get_all_usernames</span>(<span class="name">ctx</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Return a list of all usernames.</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">users</span>.<span class="name">c</span>.<span class="name">username</span>]))
- <span class="kw">return</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="kw">def </span><span class="fun">get_id_username_mapping</span>(<span class="name">ctx</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Return a ``user_id`` -&gt; ``username`` mapping.</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">users</span>.<span class="name">c</span>.<span class="name">user_id</span>, <span class="name">users</span>.<span class="name">c</span>.<span class="name">username</span>]))
- <span class="kw">return</span> <span class="bn">dict</span>(<span class="bn">tuple</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">def </span><span class="fun">get_user_list</span>(<span class="name">ctx</span>, <span class="name">order_by</span><span class="op">=</span><span class="name">users</span>.<span class="name">c</span>.<span class="name">username</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="name">letter</span><span class="op">=</span><span class="bn bn-pseudo">None</span>,
- <span class="name">hide_internal</span><span class="op">=</span><span class="bn bn-pseudo">False</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Return a list of all users with public details.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="cm">#XXX: sorting with databases sucks :-/ if sorted by username, resort</span>
- <span class="cm"># with python, and btw, this is ugly</span>
- <span class="name">u</span> <span class="op">=</span> <span class="name">users</span>.<span class="name">c</span>
- <span class="name">q</span> <span class="op">=</span> []
- <span class="kw">if</span> <span class="name">letter</span>:
- <span class="name">q</span>.<span class="name">append</span>(<span class="name">u</span>.<span class="name">username</span>.<span class="name">startswith</span>(<span class="name">letter</span>))
- <span class="kw">if</span> <span class="name">hide_internal</span>:
- <span class="name">q</span>.<span class="name">append</span>((<span class="name">u</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="op">&amp;</span> (<span class="name">u</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="kw">try</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="name">meta</span>.<span class="name">desc</span>,
- <span class="st st-sg">&#39;</span><span class="st">asc</span><span class="st st-sg">&#39;</span>: <span class="name">meta</span>.<span class="name">asc</span>
-
- }[<span class="name">order</span>]
- <span class="kw">except</span> <span class="exc">KeyError</span>:
- <span class="kw">raise</span> <span class="exc">ValueError</span>(<span class="st st-sg">&#39;</span><span class="st">order must be either </span><span class="st st-esc">\&#39;</span><span class="st">asc</span><span class="st st-esc">\&#39;</span><span class="st"> or </span><span class="st st-esc">\&#39;</span><span class="st">desc</span><span class="st st-esc">\&#39;</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">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">email</span>,
- <span class="name">u</span>.<span class="name">profile</span>, <span class="name">u</span>.<span class="name">last_login</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">meta</span>.<span class="name">and_</span>(<span class="op">*</span><span class="name">q</span>),
- <span class="name">order_by</span><span class="op">=</span>[<span class="name">order</span>(<span class="name">order_by</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">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">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="kw">return</span> <span class="name">d</span>
-
- <span class="kw">return</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">def </span><span class="fun">get_all_groupnames</span>(<span class="name">ctx</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Return a list of groupnames.</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">groups</span>.<span class="name">c</span>.<span class="name">name</span>]))
- <span class="kw">return</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="kw">def </span><span class="fun">get_id_groupname_mapping</span>(<span class="name">ctx</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Return a group_id -&gt; groupname mapping.</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">groups</span>.<span class="name">c</span>.<span class="name">group_id</span>, <span class="name">groups</span>.<span class="name">c</span>.<span class="name">name</span>]))
- <span class="kw">return</span> <span class="bn">dict</span>(<span class="bn">tuple</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">def </span><span class="fun">get_group_list</span>(<span class="name">ctx</span>, <span class="name">order_by</span><span class="op">=</span><span class="name">groups</span>.<span class="name">c</span>.<span class="name">name</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="name">letter</span><span class="op">=</span><span class="bn bn-pseudo">None</span>,
- <span class="name">show_hidden</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 list of all groups with public details.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="name">g</span> <span class="op">=</span> <span class="name">groups</span>.<span class="name">c</span>
- <span class="name">q</span> <span class="op">=</span> []
- <span class="kw">if</span> <span class="name">letter</span>:
- <span class="name">q</span>.<span class="name">append</span>(<span class="name">g</span>.<span class="name">name</span>.<span class="name">startswith</span>(<span class="name">letter</span>))
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">show_hidden</span>:
- <span class="name">q</span>.<span class="name">append</span>(<span class="name">g</span>.<span class="name">hidden</span> <span class="op">==</span> <span class="bn bn-pseudo">True</span>)
- <span class="kw">try</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="name">meta</span>.<span class="name">desc</span>,
- <span class="st st-sg">&#39;</span><span class="st">asc</span><span class="st st-sg">&#39;</span>: <span class="name">meta</span>.<span class="name">asc</span>
-
- }[<span class="name">order</span>]
- <span class="kw">except</span> <span class="exc">KeyError</span>:
- <span class="kw">raise</span> <span class="exc">ValueError</span>(<span class="st st-sg">&#39;</span><span class="st">order must be either </span><span class="st st-esc">\&#39;</span><span class="st">asc</span><span class="st st-esc">\&#39;</span><span class="st"> or </span><span class="st st-esc">\&#39;</span><span class="st">desc</span><span class="st st-esc">\&#39;</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">g</span>.<span class="name">group_id</span>, <span class="name">g</span>.<span class="name">name</span>, <span class="name">g</span>.<span class="name">public</span>,
- <span class="name">g</span>.<span class="name">hidden</span>], <span class="name">meta</span>.<span class="name">and_</span>(<span class="op">*</span><span class="name">q</span>),
- <span class="name">order_by</span><span class="op">=</span>[<span class="name">order</span>(<span class="name">order_by</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">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">groups</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">name</span><span class="st st-sg">&#39;</span>]))
- <span class="kw">return</span> <span class="name">d</span>
-
- <span class="kw">return</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">def </span><span class="fun">get_user</span>(<span class="name">req</span>, <span class="name">user_id_or_name</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- Return a dict of user information for the template.
- </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">u</span> <span class="op">=</span> <span class="name">users</span>.<span class="name">c</span>
-
- <span class="kw">if</span> <span class="bn">isinstance</span>(<span class="name">user_id_or_name</span>, (<span class="bn">int</span>, <span class="bn">long</span>)):
- <span class="name">q</span> <span class="op">=</span> (<span class="name">u</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">user_id_or_name</span>)
- <span class="kw">else</span>:
- <span class="name">q</span> <span class="op">=</span> (<span class="name">u</span>.<span class="name">username</span> <span class="op">==</span> <span class="name">user_id_or_name</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">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">email</span>,
- <span class="name">u</span>.<span class="name">profile</span>, <span class="name">u</span>.<span class="name">settings</span>, <span class="name">u</span>.<span class="name">last_login</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">q</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: error return needed</span>
-
- <span class="kw">return</span>
- <span class="name">user</span> <span class="op">=</span> <span class="bn">dict</span>(<span class="name">row</span>)
- <span class="name">user</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">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="kw">return</span> <span class="name">user</span>
-
-
-<span class="kw">def </span><span class="fun">get_user_avatar</span>(<span class="name">req</span>, <span class="name">user_id_or_name</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Return the user avatar.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">if</span> <span class="bn">isinstance</span>(<span class="name">user_id_or_name</span>, (<span class="bn">int</span>, <span class="bn">long</span>)):
- <span class="name">q</span> <span class="op">=</span> (<span class="name">users</span>.<span class="name">c</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">user_id_or_name</span>)
- <span class="kw">else</span>:
- <span class="name">q</span> <span class="op">=</span> (<span class="name">users</span>.<span class="name">c</span>.<span class="name">username</span> <span class="op">==</span> <span class="name">user_id_or_name</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">users</span>.<span class="name">c</span>.<span class="name">user_id</span>], <span class="name">q</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="op op-word">not</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">fn</span> <span class="op">=</span> <span class="name">path</span>.<span class="name">join</span>(<span class="name">req</span>.<span class="name">ctx</span>.<span class="name">cfg</span>.<span class="name">root</span>, <span class="st st-sg">&#39;</span><span class="st">avatars</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st st-int">%d</span><span class="st">.png</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">row</span>[<span class="nb nb-int">0</span>])
- <span class="kw">if</span> <span class="name">path</span>.<span class="name">exists</span>(<span class="name">fn</span>):
- <span class="name">f</span> <span class="op">=</span> <span class="bn">file</span>(<span class="name">fn</span>, <span class="st st-sg">&#39;</span><span class="st">rb</span><span class="st st-sg">&#39;</span>)
- <span class="name">result</span> <span class="op">=</span> <span class="name">f</span>.<span class="name">read</span>()
- <span class="name">f</span>.<span class="name">close</span>()
- <span class="kw">return</span> <span class="name">result</span>
-
-
-<span class="kw">def </span><span class="fun">get_id_by_name</span>(<span class="name">ctx</span>, <span class="name">name</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">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">u</span>.<span class="name">user_id</span>],
- <span class="name">u</span>.<span class="name">username</span> <span class="op">==</span> <span class="name">name</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="op op-word">not</span> <span class="name">row</span>:
- <span class="kw">raise</span> <span class="name">UserNotFound</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">check_login_data</span>(<span class="name">ctx</span>, <span class="name">username</span>, <span class="name">password</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- Check if a username and password was found in the
- database. Returns None if the user does not exist
- or the password is incorrect, otherwise it returns
- the user id.
- </span><span class="st st-db">&quot;&quot;&quot;</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">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">u</span>.<span class="name">user_id</span>, <span class="name">u</span>.<span class="name">pwhash</span>, <span class="name">u</span>.<span class="name">act_key</span>],
- <span class="name">users</span>.<span class="name">c</span>.<span class="name">username</span> <span class="op">==</span> <span class="name">username</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="op op-word">not</span> <span class="bn bn-pseudo">None</span> <span class="op op-word">and</span> <span class="op op-word">not</span> <span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">act_key</span><span class="st st-sg">&#39;</span>] <span class="op op-word">and</span> \
- <span class="name">check_pwhash</span>(<span class="name">row</span>[<span class="st st-sg">&#39;</span><span class="st">pwhash</span><span class="st st-sg">&#39;</span>], <span class="name">password</span>):
- <span class="kw">return</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="kw">def </span><span class="fun">sync_post_count</span>(<span class="name">ctx</span>, <span class="name">user_id</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Sync the user post count with the post tables.</span><span class="st st-db">&quot;&quot;&quot;</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">meta</span>.<span class="name">func</span>.<span class="name">count</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">author_id</span> <span class="op">==</span> <span class="name">user_id</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">user_id</span>),
- <span class="name">post_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="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">reset_password</span>(<span class="name">ctx</span>, <span class="name">username</span>, <span class="name">email</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- Reset the password and returns the new password
- if the email matched the username.
- If not it will return None.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">password</span> <span class="op">=</span> <span class="name">gen_password</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">users</span>.<span class="name">update</span>((<span class="name">users</span>.<span class="name">c</span>.<span class="name">username</span> <span class="op">==</span> <span class="name">username</span>) <span class="op">&amp;</span>
-
- (<span class="name">users</span>.<span class="name">c</span>.<span class="name">email</span> <span class="op">==</span> <span class="name">email</span>)),
- <span class="name">pwhash</span> <span class="op">=</span> <span class="name">gen_pwhash</span>(<span class="name">password</span>)
- )
- <span class="kw">if</span> <span class="name">result</span>.<span class="name">rowcount</span>:
- <span class="kw">return</span> <span class="name">password</span>
-
-
-<span class="kw">class </span><span class="cls">UserNotFound</span>(<span class="exc">Exception</span>):
- <span class="kw">pass</span>
-
-
-<span class="kw">class </span><span class="cls">User</span>(<span class="name">DatabaseModel</span>, <span class="name">LinkableMixin</span>):
- <span class="name">NotFound</span> <span class="op">=</span> <span class="name">UserNotFound</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">user_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">user_id</span> <span class="op">=</span> <span class="name">user_id</span>
- <span class="bn">super</span>(<span class="name">User</span>, <span class="bn bn-pseudo">self</span>).<span class="name">__init__</span>(<span class="name">ctx</span>, <span class="name">users</span>, <span class="st st-sg">&#39;</span><span class="st">user_id</span><span class="st st-sg">&#39;</span>)
-
- <span class="kw">from </span><span class="cls">pocoo.pkg.core.acl</span><span class="kw"> import</span> <span class="name">AclManager</span>
-
- <span class="bn bn-pseudo">self</span>.<span class="name">acl</span> <span class="op">=</span> <span class="name">AclManager</span>(<span class="name">ctx</span>, <span class="bn bn-pseudo">self</span>)
-
- <span class="name">subject_id</span> <span class="op">=</span> <span class="name">lazy_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">username</span> <span class="op">=</span> <span class="name">lazy_column</span>(<span class="st st-sg">&#39;</span><span class="st">username</span><span class="st st-sg">&#39;</span>)
- <span class="name">email</span> <span class="op">=</span> <span class="name">lazy_column</span>(<span class="st st-sg">&#39;</span><span class="st">email</span><span class="st st-sg">&#39;</span>)
- <span class="name">pwhash</span> <span class="op">=</span> <span class="name">lazy_column</span>(<span class="st st-sg">&#39;</span><span class="st">pwhash</span><span class="st st-sg">&#39;</span>)
- <span class="name">act_key</span> <span class="op">=</span> <span class="name">lazy_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">language</span> <span class="op">=</span> <span class="name">lazy_column</span>(<span class="st st-sg">&#39;</span><span class="st">language</span><span class="st st-sg">&#39;</span>)
- <span class="name">profile</span> <span class="op">=</span> <span class="name">lazy_column</span>(<span class="st st-sg">&#39;</span><span class="st">profile</span><span class="st st-sg">&#39;</span>)
- <span class="name">settings</span> <span class="op">=</span> <span class="name">lazy_column</span>(<span class="st st-sg">&#39;</span><span class="st">settings</span><span class="st st-sg">&#39;</span>)
- <span class="name">last_login</span> <span class="op">=</span> <span class="name">lazy_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">register_date</span> <span class="op">=</span> <span class="name">lazy_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">post_count</span> <span class="op">=</span> <span class="name">lazy_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">read_threads</span> <span class="op">=</span> <span class="name">lazy_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">read_posts</span> <span class="op">=</span> <span class="name">lazy_column</span>(<span class="st st-sg">&#39;</span><span class="st">read_posts</span><span class="st st-sg">&#39;</span>)
-
- <span class="deco">@property</span>
-
- <span class="kw">def </span><span class="fun">relative_url</span>(<span class="bn bn-pseudo">self</span>):
- <span class="kw">return</span> <span class="st st-sg">&#39;</span><span class="st">users/</span><span class="st st-int">%s</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="bn bn-pseudo">self</span>.<span class="name">username</span>
-
- <span class="deco">@staticmethod</span>
- <span class="kw">def </span><span class="fun">create</span>(<span class="name">ctx</span>, <span class="name">username</span>, <span class="name">password</span>, <span class="name">email</span>, <span class="name">activate</span><span class="op">=</span><span class="bn bn-pseudo">False</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Creates a new user.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">if</span> <span class="name">activate</span>:
- <span class="name">act_key</span> <span class="op">=</span> <span class="name">gen_activation_key</span>()
- <span class="kw">else</span>:
- <span class="name">act_key</span> <span class="op">=</span> <span class="bn bn-pseudo">None</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">users</span>.<span class="name">insert</span>(),
- <span class="name">username</span><span class="op">=</span><span class="name">username</span>,
- <span class="name">email</span><span class="op">=</span><span class="name">email</span>,
- <span class="name">act_key</span><span class="op">=</span><span class="name">act_key</span>,
- <span class="name">pwhash</span><span class="op">=</span><span class="name">gen_pwhash</span>(<span class="name">password</span>),
- <span class="name">register_date</span><span class="op">=</span><span class="name">datetime</span>.<span class="name">utcnow</span>(),
- <span class="name">post_count</span><span class="op">=</span><span class="nb nb-int">0</span>
-
- )
- <span class="kw">return</span> <span class="name">User</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">check_password</span>(<span class="bn bn-pseudo">self</span>, <span class="name">password</span>):
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="bn bn-pseudo">self</span>.<span class="name">exists</span>:
- <span class="kw">return</span> <span class="bn bn-pseudo">False</span>
-
- <span class="kw">return</span> <span class="name">check_pwhash</span>(<span class="bn bn-pseudo">self</span>.<span class="name">pwhash</span>, <span class="name">password</span>)
-
- <span class="kw">def </span><span class="fun">set_password</span>(<span class="bn bn-pseudo">self</span>, <span class="name">password</span>):
- <span class="bn bn-pseudo">self</span>.<span class="name">pwhash</span> <span class="op">=</span> <span class="name">gen_pwhash</span>(<span class="name">password</span>)
-
- <span class="kw">def </span><span class="fun">assert_logged_in</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- Check if the user is logged in and raise a DirectResponse
- exception with an AccessDeniedResponse to display the user a
- login or &quot;missing permission&quot; page.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="bn bn-pseudo">self</span>.<span class="name">identified</span>:
- <span class="kw">raise</span> <span class="name">DirectResponse</span>(<span class="name">AccessDeniedResponse</span>())
-
- <span class="kw">def </span><span class="fun">iter_groups</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
-
- Return a generator for all groups this user has joined.
- </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">groups</span>.<span class="name">c</span>.<span class="name">group_id</span>],
- (<span class="name">users</span>.<span class="name">c</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="bn bn-pseudo">self</span>.<span class="name">user_id</span>) <span class="op">&amp;</span>
-
- (<span class="name">group_members</span>.<span class="name">c</span>.<span class="name">group_id</span> <span class="op">==</span> <span class="name">groups</span>.<span class="name">c</span>.<span class="name">group_id</span>) <span class="op">&amp;</span>
-
- (<span class="name">group_members</span>.<span class="name">c</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">users</span>.<span class="name">c</span>.<span class="name">user_id</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">yield</span> <span class="name">Group</span>(<span class="bn bn-pseudo">self</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">activate</span>(<span class="bn bn-pseudo">self</span>):
- <span class="bn bn-pseudo">self</span>.<span class="name">act_key</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
-
- <span class="kw">def </span><span class="fun">deactivate</span>(<span class="bn bn-pseudo">self</span>):
- <span class="bn bn-pseudo">self</span>.<span class="name">act_key</span> <span class="op">=</span> <span class="name">gen_activation_key</span>()
-
- <span class="deco">@property</span>
-
- <span class="kw">def </span><span class="fun">identified</span>(<span class="bn bn-pseudo">self</span>):
- <span class="kw">return</span> <span class="bn bn-pseudo">self</span>.<span class="name">user_id</span> <span class="op">&gt;</span> <span class="nb nb-int">0</span>
-
- <span class="deco">@property</span>
-
- <span class="kw">def </span><span class="fun">active</span>(<span class="bn bn-pseudo">self</span>):
- <span class="kw">return</span> <span class="op op-word">not</span> <span class="bn bn-pseudo">self</span>.<span class="name">act_key</span>
-
- <span class="deco">@property</span>
-
- <span class="kw">def </span><span class="fun">groups</span>(<span class="bn bn-pseudo">self</span>):
- <span class="kw">return</span> <span class="bn">list</span>(<span class="bn bn-pseudo">self</span>.<span class="name">iter_groups</span>())
-
- <span class="deco">@property</span>
- <span class="kw">def </span><span class="fun">admin</span>(<span class="bn bn-pseudo">self</span>):
- <span class="cm">#TODO: from ACL</span>
-
- <span class="kw">return</span> <span class="bn bn-pseudo">True</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">user_id</span> <span class="op">==</span> <span class="name">other</span>.<span class="name">user_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">user_id</span>,
- <span class="bn bn-pseudo">self</span>.<span class="name">username</span>
-
- )
-
-
-<span class="kw">class </span><span class="cls">GroupNotFound</span>(<span class="exc">Exception</span>):
- <span class="kw">pass</span>
-
-
-<span class="kw">class </span><span class="cls">Group</span>(<span class="name">DatabaseModel</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">group_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">group_id</span> <span class="op">=</span> <span class="name">group_id</span>
- <span class="bn">super</span>(<span class="name">Group</span>, <span class="bn bn-pseudo">self</span>).<span class="name">__init__</span>(<span class="name">ctx</span>, <span class="name">groups</span>, <span class="st st-sg">&#39;</span><span class="st">group_id</span><span class="st st-sg">&#39;</span>)
-
- <span class="kw">from </span><span class="cls">pocoo.pkg.core.acl</span><span class="kw"> import</span> <span class="name">AclManager</span>
-
- <span class="bn bn-pseudo">self</span>.<span class="name">acl</span> <span class="op">=</span> <span class="name">AclManager</span>(<span class="name">ctx</span>, <span class="bn bn-pseudo">self</span>)
-
- <span class="name">subject_id</span> <span class="op">=</span> <span class="name">lazy_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">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">public</span> <span class="op">=</span> <span class="name">lazy_column</span>(<span class="st st-sg">&#39;</span><span class="st">public</span><span class="st st-sg">&#39;</span>)
- <span class="name">hidden</span> <span class="op">=</span> <span class="name">lazy_column</span>(<span class="st st-sg">&#39;</span><span class="st">hidden</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">public</span><span class="op">=</span><span class="bn bn-pseudo">True</span>, <span class="name">hidden</span><span class="op">=</span><span class="bn bn-pseudo">False</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Create a new usergroup.</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">groups</span>.<span class="name">insert</span>(),
- <span class="name">name</span><span class="op">=</span><span class="name">name</span>,
- <span class="name">public</span><span class="op">=</span><span class="name">public</span>,
- <span class="name">hidden</span><span class="op">=</span><span class="name">hidden</span>
-
- )
- <span class="kw">return</span> <span class="name">Group</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="deco">@property</span>
- <span class="kw">def </span><span class="fun">members</span>(<span class="bn bn-pseudo">self</span>):
- <span class="kw">return</span> <span class="bn">list</span>(<span class="bn bn-pseudo">self</span>.<span class="name">iter_members</span>())
-
- <span class="kw">def </span><span class="fun">iter_members</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Return a generator for all group members.</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">users</span>.<span class="name">c</span>.<span class="name">user_id</span>],
- (<span class="name">groups</span>.<span class="name">c</span>.<span class="name">group_id</span> <span class="op">==</span> <span class="bn bn-pseudo">self</span>.<span class="name">group_id</span>) <span class="op">&amp;</span>
-
- (<span class="name">group_members</span>.<span class="name">c</span>.<span class="name">group_id</span> <span class="op">==</span> <span class="name">groups</span>.<span class="name">c</span>.<span class="name">group_id</span>) <span class="op">&amp;</span>
-
- (<span class="name">group_members</span>.<span class="name">c</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">users</span>.<span class="name">c</span>.<span class="name">user_id</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">yield</span> <span class="name">User</span>(<span class="bn bn-pseudo">self</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">add_member</span>(<span class="bn bn-pseudo">self</span>, <span class="name">user</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Add a new member to the group.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">if</span> <span class="bn">isinstance</span>(<span class="name">user</span>, <span class="name">User</span>):
- <span class="name">user_id</span> <span class="op">=</span> <span class="name">user</span>.<span class="name">user_id</span>
-
- <span class="kw">else</span>:
- <span class="name">user_id</span> <span class="op">=</span> <span class="name">User</span>(<span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>, <span class="name">user</span>).<span class="name">user_id</span>
-
- <span class="cm"># check if the user is already a member of the group</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">group_members</span>.<span class="name">c</span>.<span class="name">user_id</span>],
- (<span class="name">group_members</span>.<span class="name">c</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">user_id</span>) <span class="op">&amp;</span>
-
- (<span class="name">group_members</span>.<span class="name">c</span>.<span class="name">group_id</span> <span class="op">==</span> <span class="bn bn-pseudo">self</span>.<span class="name">group_id</span>)
- ))
- <span class="kw">if</span> <span class="name">result</span>.<span class="name">fetchone</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">raise</span> <span class="exc">ValueError</span>(<span class="st st-sg">&#39;</span><span class="st">The user </span><span class="st st-int">%d</span><span class="st"> is alreay a member of this group</span><span class="st st-sg">&#39;</span> <span class="op">%</span>
-
- <span class="name">user_id</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">group_members</span>.<span class="name">insert</span>(),
- <span class="name">user_id</span> <span class="op">=</span> <span class="name">user_id</span>,
- <span class="name">group_id</span> <span class="op">=</span> <span class="bn bn-pseudo">self</span>.<span class="name">group_id</span>
-
- )
-
- <span class="kw">def </span><span class="fun">remove_member</span>(<span class="bn bn-pseudo">self</span>, <span class="name">user</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Remove a member from the group.</span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">if</span> <span class="bn">isinstance</span>(<span class="name">user</span>, <span class="name">User</span>):
- <span class="name">user_id</span> <span class="op">=</span> <span class="name">user</span>.<span class="name">user_id</span>
-
- <span class="kw">else</span>:
- <span class="name">user_id</span> <span class="op">=</span> <span class="name">User</span>(<span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>, <span class="name">user</span>).<span class="name">user_id</span>
-
- <span class="cm"># check if the user is not in the group</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">group_members</span>.<span class="name">c</span>.<span class="name">user_id</span>],
- (<span class="name">group_members</span>.<span class="name">c</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">user_id</span>) <span class="op">&amp;</span>
-
- (<span class="name">group_members</span>.<span class="name">c</span>.<span class="name">group_id</span> <span class="op">==</span> <span class="bn bn-pseudo">self</span>.<span class="name">group_id</span>)
- ))
- <span class="kw">if</span> <span class="name">result</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="exc">ValueError</span>(<span class="st st-sg">&#39;</span><span class="st">The user </span><span class="st st-int">%d</span><span class="st"> is not a member of this group</span><span class="st st-sg">&#39;</span> <span class="op">%</span>
-
- <span class="name">user_id</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">group_members</span>.<span class="name">delete</span>(
- (<span class="name">group_members</span>.<span class="name">c</span>.<span class="name">group_id</span> <span class="op">==</span> <span class="bn bn-pseudo">self</span>.<span class="name">group_id</span>) <span class="op">&amp;</span>
-
- (<span class="name">group_members</span>.<span class="name">c</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">user_id</span>)
- ))
-
- <span class="kw">def </span><span class="fun">is_member</span>(<span class="bn bn-pseudo">self</span>, <span class="name">user</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Check if a user is a member of this group.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">if</span> <span class="bn">isinstance</span>(<span class="name">user</span>, <span class="name">User</span>):
- <span class="name">user_id</span> <span class="op">=</span> <span class="name">user</span>.<span class="name">user_id</span>
-
- <span class="kw">else</span>:
- <span class="name">user_id</span> <span class="op">=</span> <span class="name">User</span>(<span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>, <span class="name">user</span>).<span class="name">user_id</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">group_members</span>.<span class="name">c</span>.<span class="name">user_id</span>],
- (<span class="name">group_members</span>.<span class="name">c</span>.<span class="name">user_id</span> <span class="op">==</span> <span class="name">user_id</span>) <span class="op">&amp;</span>
-
- (<span class="name">group_members</span>.<span class="name">c</span>.<span class="name">group_id</span> <span class="op">==</span> <span class="bn bn-pseudo">self</span>.<span class="name">group_id</span>)
- ))
- <span class="kw">return</span> <span class="name">result</span>.<span class="name">fetchone</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">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">group_id</span> <span class="op">==</span> <span class="name">other</span>.<span class="name">group_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">group_id</span>,
- <span class="bn bn-pseudo">self</span>.<span class="name">name</span>
-
- )
-<span class="cm"># -*- coding: utf-8 -*-</span>
-<span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- pocoo.pkg.core.usersettings
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- User Settings support.
-
- :copyright: 2006 by Armin Ronacher, Lukas Meuser.
- :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">from </span><span class="cls">os</span><span class="kw"> import</span> <span class="name">path</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="kw">from </span><span class="cls">pocoo.application</span><span class="kw"> import</span> <span class="name">LinkableMixin</span>
-
-<span class="kw">from </span><span class="cls">pocoo.utils.image</span><span class="kw"> import</span> <span class="name">resize_image</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.form</span><span class="kw"> import</span> <span class="name">Form</span>, <span class="name">TextField</span>, <span class="name">FileField</span>, <span class="name">TextArea</span>, <span class="name">CheckBox</span>, \
- <span class="name">SelectBox</span>
-
-<span class="kw">from </span><span class="cls">pocoo.utils.validators</span><span class="kw"> import</span> <span class="name">isSameValue</span>, <span class="name">isEmail</span>, <span class="name">isExistingUrl</span>, \
- <span class="name">checkTextLength</span>, <span class="name">mayEmpty</span>, <span class="name">checkIfOtherNotBlank</span>, <span class="name">isSupportedImage</span>, \
- <span class="name">doMultiCheck</span>, <span class="name">isInRange</span>, <span class="name">isInteger</span>
-
-<span class="kw">from </span><span class="cls">pocoo.pkg.core.validators</span><span class="kw"> import</span> <span class="name">isStrongPassword</span>, <span class="name">isIcqMessengerId</span>, \
- <span class="name">isMsnMessengerId</span>, <span class="name">isJabberMessengerId</span>
-<span class="kw">from </span><span class="cls">pocoo.pkg.core.textfmt</span><span class="kw"> import</span> <span class="name">get_editor</span>
-
-
-<span class="kw">class </span><span class="cls">UserSettingsPage</span>(<span class="name">Component</span>, <span class="name">LinkableMixin</span>):
-
- <span class="deco">@property</span>
- <span class="kw">def </span><span class="fun">settings_page_identifier</span>(<span class="bn bn-pseudo">self</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">The name of the page which is also the url
- under which the page will be visible::
-
- /settings/$SETTINGS_PAGE_IDENTIFIER$</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">return</span> <span class="bn bn-pseudo">self</span>.<span class="name">__class__</span>.<span class="name">__name__</span>
-
- <span class="deco">@property</span>
- <span class="kw">def </span><span class="fun">relative_url</span>(<span class="bn bn-pseudo">self</span>):
- <span class="kw">return</span> <span class="st st-sg">&#39;</span><span class="st">settings/</span><span class="st st-int">%s</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="bn bn-pseudo">self</span>.<span class="name">settings_page_identifier</span>
-
- <span class="kw">def </span><span class="fun">get_settings_link_title</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Has to return a text for the link title in the
- settings sidebar (this musn&#39;t be a sidebar, in fact
- it depends on the template.
-
- If the method returns ``None`` the template wont
- render this link.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">def </span><span class="fun">get_settings_page</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">This method automatically gets called when a
- user requests this settings page. It must either
- return a valid Response object or a tuple in the
- form (template, context) where template is a string
- with the template filename and context is a dict
- which automatically gets updated with the generated
- sidebar so that templates can access it.</span><span class="st st-db">&quot;&quot;&quot;</span>
-
-
-
-<span class="kw">class </span><span class="cls">UserSignatureSettings</span>(<span class="name">UserSettingsPage</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- This page allows the user to create / edit his signature
- using an editor.
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">settings_page_identifier</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">signature</span><span class="st st-sg">&#39;</span>
-
- <span class="kw">def </span><span class="fun">get_settings_link_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">Signature</span><span class="st st-sg">&#39;</span>)
-
- <span class="kw">def </span><span class="fun">get_settings_page</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="name">get_setting</span> <span class="op">=</span> <span class="kw">lambda</span> <span class="name">x</span>: <span class="name">req</span>.<span class="name">user</span>.<span class="name">profile</span>.<span class="name">get</span>(<span class="name">x</span>, <span class="name">u</span><span class="st st-sg">&#39;&#39;</span>)
- <span class="name">msg</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
-
- <span class="name">form</span> <span class="op">=</span> <span class="name">Form</span>(<span class="name">req</span>, <span class="bn bn-pseudo">self</span>, <span class="st st-sg">&#39;</span><span class="st">POST</span><span class="st st-sg">&#39;</span>,
- <span class="name">TextArea</span>(<span class="st st-sg">&#39;</span><span class="st">signature</span><span class="st st-sg">&#39;</span>,
- <span class="name">default</span><span class="op">=</span><span class="name">get_setting</span>(<span class="st st-sg">&#39;</span><span class="st">signature</span><span class="st st-sg">&#39;</span>),
- <span class="name">validator</span><span class="op">=</span><span class="name">checkTextLength</span>(<span class="nb nb-int">0</span>, <span class="nb nb-int">255</span>) <span class="cm"># from config!</span>
-
- )
- )
- <span class="kw">if</span> <span class="name">req</span>.<span class="name">method</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">POST</span><span class="st st-sg">&#39;</span>:
- <span class="name">form</span>.<span class="name">update</span>(<span class="name">req</span>.<span class="name">form</span>, <span class="name">prefix</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">f_</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">form</span>.<span class="name">has_errors</span>:
- <span class="name">d</span> <span class="op">=</span> <span class="name">form</span>.<span class="name">to_dict</span>()
- <span class="name">req</span>.<span class="name">user</span>.<span class="name">profile</span>.<span class="name">update</span>(<span class="name">d</span>)
- <span class="name">req</span>.<span class="name">user</span>.<span class="name">save</span>()
- <span class="name">msg</span> <span class="op">=</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Signature saved</span><span class="st st-sg">&#39;</span>)
-
- <span class="name">js</span>, <span class="name">options</span> <span class="op">=</span> <span class="name">get_editor</span>(<span class="name">req</span>, <span class="name">signature</span><span class="op">=</span><span class="bn bn-pseudo">True</span>)
- <span class="kw">return</span> <span class="st st-sg">&#39;</span><span class="st">settings/signature.html</span><span class="st st-sg">&#39;</span>, {
- <span class="st st-sg">&#39;</span><span class="st">form</span><span class="st st-sg">&#39;</span>: <span class="name">form</span>.<span class="name">generate</span>(<span class="name">prefix</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">f_</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">msg</span><span class="st st-sg">&#39;</span>: <span class="name">msg</span>,
- <span class="st st-sg">&#39;</span><span class="st">editor_options</span><span class="st st-sg">&#39;</span>: <span class="name">options</span>,
- <span class="st st-sg">&#39;</span><span class="st">editor_javascript</span><span class="st st-sg">&#39;</span>:<span class="name">js</span>
-
- }
-
-
-<span class="kw">class </span><span class="cls">UserProfileSettings</span>(<span class="name">UserSettingsPage</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- This page allows the user to edit his public information.
-
- XXX: make this more flexible -- later (LATER!!!!)
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">settings_page_identifier</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">profile</span><span class="st st-sg">&#39;</span>
-
- <span class="kw">def </span><span class="fun">get_settings_link_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">Profile</span><span class="st st-sg">&#39;</span>)
-
- <span class="kw">def </span><span class="fun">get_settings_page</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="name">get_setting</span> <span class="op">=</span> <span class="kw">lambda</span> <span class="name">x</span>: <span class="name">req</span>.<span class="name">user</span>.<span class="name">profile</span>.<span class="name">get</span>(<span class="name">x</span>, <span class="name">u</span><span class="st st-sg">&#39;&#39;</span>)
- <span class="name">msg</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
-
- <span class="name">form</span> <span class="op">=</span> <span class="name">Form</span>(<span class="name">req</span>, <span class="bn bn-pseudo">self</span>, <span class="st st-sg">&#39;</span><span class="st">POST</span><span class="st st-sg">&#39;</span>,
- <span class="cm"># general information</span>
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">new_password</span><span class="st st-sg">&#39;</span>,
- <span class="name">validator</span><span class="op">=</span><span class="name">mayEmpty</span>(<span class="name">isStrongPassword</span>())
- ),
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">new_password2</span><span class="st st-sg">&#39;</span>,
- <span class="name">validator</span><span class="op">=</span><span class="name">checkIfOtherNotBlank</span>(<span class="st st-sg">&#39;</span><span class="st">new_password</span><span class="st st-sg">&#39;</span>,
- <span class="name">isSameValue</span>(<span class="st st-sg">&#39;</span><span class="st">new_password</span><span class="st st-sg">&#39;</span>,
- <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">The two passwords must match</span><span class="st st-sg">&#39;</span>))
- )
- ),
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">email</span><span class="st st-sg">&#39;</span>,
- <span class="name">default</span><span class="op">=</span><span class="name">req</span>.<span class="name">user</span>.<span class="name">email</span>,
- <span class="name">validator</span><span class="op">=</span><span class="name">isEmail</span>()
- ),
- <span class="name">CheckBox</span>(<span class="st st-sg">&#39;</span><span class="st">show_email</span><span class="st st-sg">&#39;</span>,
- <span class="name">default</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">show_email</span><span class="st st-sg">&#39;</span>) <span class="op op-word">or</span> <span class="bn bn-pseudo">False</span>
-
- ),
- <span class="cm"># instant messengers</span>
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">aol</span><span class="st st-sg">&#39;</span>,
- <span class="name">default</span><span class="op">=</span><span class="name">get_setting</span>(<span class="st st-sg">&#39;</span><span class="st">aol</span><span class="st st-sg">&#39;</span>),
- <span class="name">validator</span><span class="op">=</span><span class="name">mayEmpty</span>()
- ), <span class="cm"># need a validator</span>
-
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">icq</span><span class="st st-sg">&#39;</span>,
- <span class="name">default</span><span class="op">=</span><span class="name">get_setting</span>(<span class="st st-sg">&#39;</span><span class="st">icq</span><span class="st st-sg">&#39;</span>),
- <span class="name">validator</span><span class="op">=</span><span class="name">mayEmpty</span>(<span class="name">isIcqMessengerId</span>())
- ), <span class="cm"># need a validator</span>
-
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">jabber</span><span class="st st-sg">&#39;</span>,
- <span class="name">default</span><span class="op">=</span><span class="name">get_setting</span>(<span class="st st-sg">&#39;</span><span class="st">jabber</span><span class="st st-sg">&#39;</span>),
- <span class="name">validator</span><span class="op">=</span><span class="name">mayEmpty</span>(<span class="name">isJabberMessengerId</span>())
- ), <span class="cm"># need a validator</span>
-
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">msn</span><span class="st st-sg">&#39;</span>,
- <span class="name">default</span><span class="op">=</span><span class="name">get_setting</span>(<span class="st st-sg">&#39;</span><span class="st">msn</span><span class="st st-sg">&#39;</span>),
- <span class="name">validator</span><span class="op">=</span><span class="name">mayEmpty</span>(<span class="name">isMsnMessengerId</span>())
- ), <span class="cm"># need a validator</span>
-
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">yahoo</span><span class="st st-sg">&#39;</span>,
- <span class="name">default</span><span class="op">=</span><span class="name">get_setting</span>(<span class="st st-sg">&#39;</span><span class="st">yahoo</span><span class="st st-sg">&#39;</span>),
- <span class="name">validator</span><span class="op">=</span><span class="name">mayEmpty</span>()
- ), <span class="cm"># need a validator</span>
-
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">website</span><span class="st st-sg">&#39;</span>,
- <span class="name">default</span><span class="op">=</span><span class="name">get_setting</span>(<span class="st st-sg">&#39;</span><span class="st">website</span><span class="st st-sg">&#39;</span>),
- <span class="name">validator</span><span class="op">=</span><span class="name">mayEmpty</span>(<span class="name">isExistingUrl</span>())
- ),
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">location</span><span class="st st-sg">&#39;</span>,
- <span class="name">default</span><span class="op">=</span><span class="name">get_setting</span>(<span class="st st-sg">&#39;</span><span class="st">location</span><span class="st st-sg">&#39;</span>),
- <span class="name">validator</span><span class="op">=</span><span class="name">checkTextLength</span>(<span class="nb nb-int">0</span>, <span class="nb nb-int">255</span>),
- ),
- <span class="name">TextArea</span>(<span class="st st-sg">&#39;</span><span class="st">interests</span><span class="st st-sg">&#39;</span>,
- <span class="name">default</span><span class="op">=</span><span class="name">get_setting</span>(<span class="st st-sg">&#39;</span><span class="st">interests</span><span class="st st-sg">&#39;</span>),
- <span class="name">validator</span><span class="op">=</span><span class="name">checkTextLength</span>(<span class="nb nb-int">0</span>, <span class="nb nb-int">512</span>)
- )
- )
- <span class="kw">if</span> <span class="name">req</span>.<span class="name">method</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">POST</span><span class="st st-sg">&#39;</span>:
- <span class="name">form</span>.<span class="name">update</span>(<span class="name">req</span>.<span class="name">form</span>, <span class="name">prefix</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">f_</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">form</span>.<span class="name">has_errors</span>:
- <span class="name">d</span> <span class="op">=</span> <span class="name">form</span>.<span class="name">to_dict</span>()
- <span class="cm"># set special setting values</span>
-
- <span class="kw">if</span> <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">new_password</span><span class="st st-sg">&#39;</span>]:
- <span class="name">req</span>.<span class="name">user</span>.<span class="name">set_password</span>(<span class="name">d</span>.<span class="name">pop</span>(<span class="st st-sg">&#39;</span><span class="st">new_password</span><span class="st st-sg">&#39;</span>))
- <span class="kw">else</span>:
- <span class="kw">del</span> <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">new_password</span><span class="st st-sg">&#39;</span>]
- <span class="kw">del</span> <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">new_password2</span><span class="st st-sg">&#39;</span>]
- <span class="name">req</span>.<span class="name">user</span>.<span class="name">email</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">email</span><span class="st st-sg">&#39;</span>)
- <span class="name">req</span>.<span class="name">user</span>.<span class="name">settings</span>.<span class="name">update</span>({<span class="st st-sg">&#39;</span><span class="st">show_email</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">show_email</span><span class="st st-sg">&#39;</span>)})
- <span class="cm"># update other profile fields</span>
-
- <span class="name">req</span>.<span class="name">user</span>.<span class="name">profile</span>.<span class="name">update</span>(<span class="name">d</span>)
- <span class="name">req</span>.<span class="name">user</span>.<span class="name">save</span>()
- <span class="name">msg</span> <span class="op">=</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Settings saved</span><span class="st st-sg">&#39;</span>)
- <span class="kw">return</span> <span class="st st-sg">&#39;</span><span class="st">settings/profile.html</span><span class="st st-sg">&#39;</span>, {
- <span class="st st-sg">&#39;</span><span class="st">form</span><span class="st st-sg">&#39;</span>: <span class="name">form</span>.<span class="name">generate</span>(<span class="name">prefix</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">f_</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">msg</span><span class="st st-sg">&#39;</span>: <span class="name">msg</span>
-
- }
-
-
-<span class="kw">class </span><span class="cls">AvatarSettings</span>(<span class="name">UserSettingsPage</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- This page allows the user to update his avatar
- </span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="name">settings_page_identifier</span> <span class="op">=</span> <span class="st st-sg">&#39;</span><span class="st">avatar</span><span class="st st-sg">&#39;</span>
-
- <span class="kw">def </span><span class="fun">get_settings_link_title</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>):
- <span class="kw">if</span> <span class="name">req</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">board</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">allow_avatars</span><span class="st st-sg">&#39;</span>, <span class="bn bn-pseudo">True</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">Avatar</span><span class="st st-sg">&#39;</span>)
-
- <span class="kw">def </span><span class="fun">get_settings_page</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>):
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">req</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">board</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">allow_avatars</span><span class="st st-sg">&#39;</span>, <span class="bn bn-pseudo">True</span>):
- <span class="kw">return</span> <span class="name">PageNotFound</span>()
- <span class="name">_</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">gettext</span>
-
- <span class="name">msg</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
-
- <span class="kw">def </span><span class="fun">make_small_thumbnail</span>(<span class="name">value</span>):
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">value</span>:
- <span class="kw">return</span>
-
- <span class="name">dim</span> <span class="op">=</span> <span class="bn bn-pseudo">self</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">avatar_dimension</span><span class="st st-sg">&#39;</span>, <span class="nb nb-int">80</span>)
- <span class="kw">return</span> <span class="name">resize_image</span>(<span class="name">value</span>, <span class="name">dim</span>, <span class="name">dim</span>, <span class="st st-sg">&#39;</span><span class="st">image/png</span><span class="st st-sg">&#39;</span>)
-
- <span class="name">form</span> <span class="op">=</span> <span class="name">Form</span>(<span class="name">req</span>, <span class="bn bn-pseudo">self</span>, <span class="st st-sg">&#39;</span><span class="st">POST</span><span class="st st-sg">&#39;</span>,
- <span class="name">FileField</span>(<span class="st st-sg">&#39;</span><span class="st">avatar</span><span class="st st-sg">&#39;</span>,
- <span class="name">validator</span><span class="op">=</span><span class="name">mayEmpty</span>(<span class="name">isSupportedImage</span>()),
- <span class="name">manipulator</span><span class="op">=</span><span class="name">make_small_thumbnail</span>
-
- ),
- <span class="name">CheckBox</span>(<span class="st st-sg">&#39;</span><span class="st">delete_avatar</span><span class="st st-sg">&#39;</span>)
- )
- <span class="name">avatar</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
- <span class="kw">if</span> <span class="name">req</span>.<span class="name">method</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">POST</span><span class="st st-sg">&#39;</span>:
- <span class="name">form</span>.<span class="name">update</span>(<span class="name">req</span>.<span class="name">files</span>, <span class="name">prefix</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">f_</span><span class="st st-sg">&#39;</span>)
- <span class="name">form</span>.<span class="name">update</span>(<span class="name">req</span>.<span class="name">form</span>, <span class="name">prefix</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">f_</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">form</span>.<span class="name">has_errors</span>:
- <span class="name">d</span> <span class="op">=</span> <span class="name">form</span>.<span class="name">to_dict</span>()
- <span class="name">uid</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">user</span>.<span class="name">user_id</span>
-
- <span class="name">fn</span> <span class="op">=</span> <span class="name">path</span>.<span class="name">join</span>(<span class="bn bn-pseudo">self</span>.<span class="name">ctx</span>.<span class="name">cfg</span>.<span class="name">root</span>, <span class="st st-sg">&#39;</span><span class="st">avatars</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st st-int">%d</span><span class="st">.png</span><span class="st st-sg">&#39;</span> <span class="op">%</span> <span class="name">uid</span>)
- <span class="kw">if</span> <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">delete_avatar</span><span class="st st-sg">&#39;</span>]:
- <span class="name">req</span>.<span class="name">user</span>.<span class="name">profile</span>[<span class="st st-sg">&#39;</span><span class="st">avatar</span><span class="st st-sg">&#39;</span>] <span class="op">=</span> <span class="bn bn-pseudo">None</span>
-
- <span class="kw">if</span> <span class="name">path</span>.<span class="name">exists</span>(<span class="name">fn</span>):
- <span class="name">os</span>.<span class="name">unlink</span>(<span class="name">fn</span>)
- <span class="kw">elif</span> <span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">avatar</span><span class="st st-sg">&#39;</span>]:
- <span class="name">uid</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">user</span>.<span class="name">user_id</span>
-
- <span class="name">f</span> <span class="op">=</span> <span class="bn">file</span>(<span class="name">fn</span>, <span class="st st-sg">&#39;</span><span class="st">wb</span><span class="st st-sg">&#39;</span>)
- <span class="name">f</span>.<span class="name">write</span>(<span class="name">d</span>[<span class="st st-sg">&#39;</span><span class="st">avatar</span><span class="st st-sg">&#39;</span>])
- <span class="name">f</span>.<span class="name">close</span>()
- <span class="name">req</span>.<span class="name">user</span>.<span class="name">profile</span>[<span class="st st-sg">&#39;</span><span class="st">avatar</span><span class="st st-sg">&#39;</span>] <span class="op">=</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">users</span><span class="st st-sg">&#39;</span>, <span class="name">urlencode</span>(<span class="name">req</span>.<span class="name">user</span>.<span class="name">username</span>), <span class="name">show</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">avatar</span><span class="st st-sg">&#39;</span>)
- <span class="name">req</span>.<span class="name">user</span>.<span class="name">save</span>()
- <span class="name">msg</span> <span class="op">=</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Settings saved</span><span class="st st-sg">&#39;</span>)
- <span class="cm"># TODO: support for linked avatars and gravatars</span>
-
- <span class="kw">elif</span> <span class="name">req</span>.<span class="name">user</span>.<span class="name">profile</span>.<span class="name">get</span>(<span class="st st-sg">&#39;</span><span class="st">avatar</span><span class="st st-sg">&#39;</span>):
- <span class="name">avatar</span> <span class="op">=</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">users</span><span class="st st-sg">&#39;</span>, <span class="name">urlencode</span>(<span class="name">req</span>.<span class="name">user</span>.<span class="name">username</span>),
- <span class="name">show</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">avatar</span><span class="st st-sg">&#39;</span>)
- <span class="kw">return</span> <span class="st st-sg">&#39;</span><span class="st">settings/avatar.html</span><span class="st st-sg">&#39;</span>, {
- <span class="st st-sg">&#39;</span><span class="st">form</span><span class="st st-sg">&#39;</span>: <span class="name">form</span>.<span class="name">generate</span>(<span class="name">prefix</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">f_</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">avatar</span><span class="st st-sg">&#39;</span>: <span class="name">avatar</span>,
- <span class="st st-sg">&#39;</span><span class="st">msg</span><span class="st st-sg">&#39;</span>: <span class="name">msg</span>
-
- }
-
-
-<span class="kw">class </span><span class="cls">UserForumSettings</span>(<span class="name">UserSettingsPage</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- This page allows the user to update his forum view settings
- (ie. view mode and posts and threads per page)
- </span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="name">settings_page_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_settings_link_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">Forum Settings</span><span class="st st-sg">&#39;</span>)
-
- <span class="kw">def </span><span class="fun">get_settings_page</span>(<span class="bn bn-pseudo">self</span>, <span class="name">req</span>):
- <span class="kw">def </span><span class="fun">int_or_none</span>(<span class="name">x</span>):
- <span class="st st-db">&quot;</span><span class="st">manipulator which returns an int or None</span><span class="st st-db">&quot;</span>
-
- <span class="kw">try</span>:
- <span class="kw">return</span> <span class="bn">int</span>(<span class="name">x</span>)
- <span class="kw">except</span> <span class="exc">ValueError</span>:
- <span class="kw">return</span> <span class="bn bn-pseudo">None</span>
-
- <span class="name">_</span> <span class="op">=</span> <span class="name">req</span>.<span class="name">gettext</span>
- <span class="name">msg</span> <span class="op">=</span> <span class="bn bn-pseudo">None</span>
-
- <span class="name">form</span> <span class="op">=</span> <span class="name">Form</span>(<span class="name">req</span>, <span class="bn bn-pseudo">self</span>, <span class="st st-sg">&#39;</span><span class="st">POST</span><span class="st st-sg">&#39;</span>,
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">posts_per_page</span><span class="st st-sg">&#39;</span>,
- <span class="name">default</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">posts_per_page</span><span class="st st-sg">&#39;</span>) <span class="op op-word">or</span> <span class="name">u</span><span class="st st-sg">&#39;&#39;</span>,
- <span class="name">validator</span><span class="op">=</span><span class="name">mayEmpty</span>(<span class="name">doMultiCheck</span>(<span class="name">isInteger</span>(), <span class="name">isInRange</span>(<span class="nb nb-int">5</span>, <span class="nb nb-int">50</span>))),
- <span class="name">manipulator</span><span class="op">=</span><span class="name">int_or_none</span>
-
- ),
- <span class="name">TextField</span>(<span class="st st-sg">&#39;</span><span class="st">threads_per_page</span><span class="st st-sg">&#39;</span>,
- <span class="name">default</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">threads_per_page</span><span class="st st-sg">&#39;</span>) <span class="op op-word">or</span> <span class="name">u</span><span class="st st-sg">&#39;&#39;</span>,
- <span class="name">validator</span><span class="op">=</span><span class="name">mayEmpty</span>(<span class="name">doMultiCheck</span>(<span class="name">isInteger</span>(), <span class="name">isInRange</span>(<span class="nb nb-int">10</span>, <span class="nb nb-int">80</span>))),
- <span class="name">manipulator</span><span class="op">=</span><span class="name">int_or_none</span>
-
- ),
- <span class="name">SelectBox</span>(<span class="st st-sg">&#39;</span><span class="st">view_mode</span><span class="st st-sg">&#39;</span>, [
- (<span class="st st-sg">&#39;&#39;</span>, <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">default</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="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">threaded</span><span class="st st-sg">&#39;</span>)),
- (<span class="st st-sg">&#39;</span><span class="st">flat</span><span class="st st-sg">&#39;</span>, <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">flat</span><span class="st st-sg">&#39;</span>))
- ], <span class="name">default</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="op op-word">or</span> <span class="name">u</span><span class="st st-sg">&#39;&#39;</span>
-
- )
- )
-
- <span class="kw">if</span> <span class="name">req</span>.<span class="name">method</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">POST</span><span class="st st-sg">&#39;</span>:
- <span class="name">form</span>.<span class="name">update</span>(<span class="name">req</span>.<span class="name">form</span>, <span class="name">prefix</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">f_</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">form</span>.<span class="name">has_errors</span>:
- <span class="name">d</span> <span class="op">=</span> <span class="name">form</span>.<span class="name">to_dict</span>()
- <span class="name">req</span>.<span class="name">user</span>.<span class="name">settings</span>.<span class="name">update</span>(<span class="name">d</span>)
- <span class="name">req</span>.<span class="name">user</span>.<span class="name">save</span>()
- <span class="name">msg</span> <span class="op">=</span> <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Forum settings saved</span><span class="st st-sg">&#39;</span>)
-
- <span class="kw">return</span> <span class="st st-sg">&#39;</span><span class="st">settings/forumsettings.html</span><span class="st st-sg">&#39;</span>, {
- <span class="st st-sg">&#39;</span><span class="st">form</span><span class="st st-sg">&#39;</span>: <span class="name">form</span>.<span class="name">generate</span>(<span class="name">prefix</span><span class="op">=</span><span class="st st-sg">&#39;</span><span class="st">f_</span><span class="st st-sg">&#39;</span>),
- <span class="st st-sg">&#39;</span><span class="st">msg</span><span class="st st-sg">&#39;</span>: <span class="name">msg</span>
-
- }
-<span class="cm"># -*- coding: utf-8 -*-</span>
-<span class="st st-db">&quot;&quot;&quot;</span><span class="st">
- pocoo.pkg.core.validators
- ~~~~~~~~~~~~~~~~~~~~~~~~~
-
- Special validation, in addition to `pocoo.utils.validators`.
-
- For a general explanation of the validators system, please
- see `pocoo.utils.form`.
-
-
- :copyright: 2006 by Armin Ronacher.
- :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">re</span>
-<span class="kw">import </span><span class="cls">unicodedata</span>
-<span class="kw">from </span><span class="cls">pocoo.utils.validators</span><span class="kw"> import</span> <span class="name">ValidationError</span>, <span class="name">_mail_re</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="name">get_id_by_name</span>
-
-<span class="name">_icq_re</span> <span class="op">=</span> <span class="name">re</span>.<span class="name">compile</span>(<span class="st st-sg">r&#39;</span><span class="st">^\d{6,9}$</span><span class="st st-sg">&#39;</span>)
-
-
-
-<span class="cm"># pylint: disable-msg=C0103</span>
-
-<span class="kw">def </span><span class="fun">isValidUsername</span>():
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Checks if the given string looks like a valid username.</span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">def </span><span class="fun">is_valid_username</span>(<span class="name">field</span>, <span class="name">form</span>):
- <span class="name">errors</span> <span class="op">=</span> []
- <span class="name">_</span> <span class="op">=</span> <span class="kw">lambda</span> <span class="name">s</span>: <span class="name">errors</span>.<span class="name">append</span>(<span class="name">form</span>.<span class="name">req</span>.<span class="name">gettext</span>(<span class="name">s</span>))
- <span class="name">value</span> <span class="op">=</span> <span class="name">field</span>.<span class="name">value</span>.<span class="name">strip</span>()
- <span class="kw">if</span> <span class="bn">len</span>(<span class="name">value</span>) <span class="op">&lt;</span> <span class="nb nb-int">2</span>:
- <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Please enter a username that is at least 2 characters long.</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="bn">len</span>(<span class="name">value</span>) <span class="op">&gt;</span> <span class="nb nb-int">30</span>:
- <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Please enter a username that is no longer than 30 characters.</span><span class="st st-sg">&#39;</span>)
- <span class="kw">for</span> <span class="name">char</span> <span class="op op-word">in</span> <span class="name">value</span>:
- <span class="kw">if</span> <span class="name">char</span> <span class="op op-word">in</span> <span class="st st-sg">&#39;</span><span class="st">_-. </span><span class="st st-sg">&#39;</span>:
- <span class="kw">continue</span>
-
- <span class="kw">if</span> <span class="name">unicodedata</span>.<span class="name">category</span>(<span class="name">char</span>)[<span class="nb nb-int">0</span>] <span class="op op-word">not</span> <span class="op op-word">in</span> <span class="st st-sg">&#39;</span><span class="st">LN</span><span class="st st-sg">&#39;</span>:
- <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Please enter a username without special characters </span><span class="st st-sg">&#39;</span>
-
- <span class="st st-sg">&#39;</span><span class="st">except &quot;_&quot;, &quot;-&quot;, &quot;.&quot;.</span><span class="st st-sg">&#39;</span>)
- <span class="kw">break</span>
- <span class="kw">if</span> <span class="name">errors</span>:
- <span class="kw">raise</span> <span class="name">ValidationError</span>(<span class="op">*</span><span class="name">errors</span>)
- <span class="kw">return</span> <span class="name">is_valid_username</span>
-
-
-<span class="kw">def </span><span class="fun">isAvailableUsername</span>():
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Checks if the username is valid and available.</span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">def </span><span class="fun">is_available_username</span>(<span class="name">field</span>, <span class="name">form</span>):
- <span class="name">isValidUsername</span>()(<span class="name">field</span>, <span class="name">form</span>)
- <span class="kw">try</span>:
- <span class="name">get_id_by_name</span>(<span class="name">form</span>.<span class="name">req</span>.<span class="name">ctx</span>, <span class="name">field</span>.<span class="name">value</span>)
- <span class="kw">except</span> <span class="name">User</span>.<span class="name">NotFound</span>:
- <span class="kw">return</span>
-
- <span class="name">_</span> <span class="op">=</span> <span class="name">form</span>.<span class="name">req</span>.<span class="name">gettext</span>
- <span class="kw">raise</span> <span class="name">ValidationError</span>(<span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">The username is already in use.</span><span class="st st-sg">&#39;</span>))
- <span class="kw">return</span> <span class="name">is_available_username</span>
-
-
-<span class="kw">def </span><span class="fun">isAnonymousUsername</span>():
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Checks if this is a valid username for anonymous usage.</span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">def </span><span class="fun">is_anonymous_username</span>(<span class="name">field</span>, <span class="name">form</span>):
- <span class="kw">if</span> <span class="name">field</span>.<span class="name">value</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">isAvailableUsername</span>()(<span class="name">field</span>, <span class="name">form</span>)
- <span class="kw">return</span> <span class="name">is_anonymous_username</span>
-
-
-<span class="kw">def </span><span class="fun">isExistingUsername</span>():
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Checks if the username does exist.</span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">def </span><span class="fun">is_existing_username</span>(<span class="name">field</span>, <span class="name">form</span>):
- <span class="kw">try</span>:
- <span class="name">get_id_by_name</span>(<span class="name">form</span>.<span class="name">req</span>.<span class="name">ctx</span>, <span class="name">field</span>.<span class="name">value</span>)
- <span class="kw">return</span>
-
- <span class="kw">except</span> <span class="name">User</span>.<span class="name">NotFound</span>:
- <span class="name">_</span> <span class="op">=</span> <span class="name">form</span>.<span class="name">req</span>.<span class="name">gettext</span>
-
- <span class="kw">raise</span> <span class="name">ValidationError</span>(<span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">The user </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">field</span>.<span class="name">value</span>)
- <span class="kw">return</span> <span class="name">is_existing_username</span>
-
-
-<span class="kw">def </span><span class="fun">isStrongPassword</span>(<span class="name">strength</span><span class="op">=</span><span class="bn bn-pseudo">None</span>):
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Checks if the password is strong enough</span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">def </span><span class="fun">is_strong_password</span>(<span class="name">field</span>, <span class="name">form</span>):
- <span class="name">errors</span> <span class="op">=</span> []
- <span class="name">_</span> <span class="op">=</span> <span class="kw">lambda</span> <span class="name">s</span>: <span class="name">errors</span>.<span class="name">append</span>(<span class="name">form</span>.<span class="name">req</span>.<span class="name">gettext</span>(<span class="name">s</span>))
- <span class="kw">if</span> <span class="name">strength</span> <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">s</span> <span class="op">=</span> <span class="name">form</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">security</span><span class="st st-sg">&#39;</span>, <span class="st st-sg">&#39;</span><span class="st">password_strength</span><span class="st st-sg">&#39;</span>, <span class="nb nb-int">3</span>)
- <span class="kw">else</span>:
- <span class="name">s</span> <span class="op">=</span> <span class="name">strength</span>
-
- <span class="name">s</span> <span class="op">=</span> <span class="bn">max</span>(<span class="nb nb-int">0</span>, <span class="bn">min</span>(<span class="nb nb-int">4</span>, <span class="name">s</span>))
- <span class="kw">if</span> <span class="op op-word">not</span> <span class="name">s</span> <span class="op op-word">and</span> <span class="op op-word">not</span> <span class="name">field</span>.<span class="name">value</span>:
- <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Please fill out the password field.</span><span class="st st-sg">&#39;</span>)
- <span class="kw">elif</span> <span class="name">s</span> <span class="op">==</span> <span class="nb nb-int">1</span>:
- <span class="kw">if</span> <span class="bn">len</span>(<span class="name">field</span>.<span class="name">value</span>) <span class="op">&lt;</span> <span class="nb nb-int">4</span>:
- <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Please enter a password with at least 4 characters.</span><span class="st st-sg">&#39;</span>)
- <span class="kw">elif</span> <span class="name">s</span> <span class="op">==</span> <span class="nb nb-int">2</span>:
- <span class="kw">if</span> <span class="bn">len</span>(<span class="name">field</span>.<span class="name">value</span>) <span class="op">&lt;</span> <span class="nb nb-int">6</span>:
- <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Please enter a password with at least 6 characters.</span><span class="st st-sg">&#39;</span>)
- <span class="kw">elif</span> <span class="name">s</span> <span class="op">==</span> <span class="nb nb-int">3</span>:
- <span class="kw">def </span><span class="fun">test</span>():
- <span class="name">have_letter</span> <span class="op">=</span> <span class="name">have_number</span> <span class="op">=</span> <span class="bn bn-pseudo">False</span>
-
- <span class="kw">for</span> <span class="name">char</span> <span class="op op-word">in</span> <span class="name">field</span>.<span class="name">value</span>:
- <span class="name">c</span> <span class="op">=</span> <span class="name">unicodedata</span>.<span class="name">category</span>(<span class="name">char</span>)[<span class="nb nb-int">0</span>]
- <span class="kw">if</span> <span class="name">c</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">L</span><span class="st st-sg">&#39;</span>:
- <span class="name">have_letter</span> <span class="op">=</span> <span class="bn bn-pseudo">True</span>
-
- <span class="kw">elif</span> <span class="name">c</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">N</span><span class="st st-sg">&#39;</span>:
- <span class="name">have_number</span> <span class="op">=</span> <span class="bn bn-pseudo">True</span>
- <span class="kw">if</span> <span class="name">have_letter</span> <span class="op op-word">and</span> <span class="name">have_number</span>:
- <span class="kw">return</span> <span class="bn bn-pseudo">True</span>
-
- <span class="kw">return</span> <span class="bn bn-pseudo">False</span>
- <span class="kw">if</span> <span class="bn">len</span>(<span class="name">field</span>.<span class="name">value</span>) <span class="op">&lt;</span> <span class="nb nb-int">6</span> <span class="op op-word">or</span> <span class="op op-word">not</span> <span class="name">test</span>():
- <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Please enter a password with at least 6 characters which </span><span class="st st-sg">&#39;</span>
-
- <span class="st st-sg">&#39;</span><span class="st">contains both letters and numbers.</span><span class="st st-sg">&#39;</span>)
- <span class="kw">elif</span> <span class="name">s</span> <span class="op">==</span> <span class="nb nb-int">4</span>:
- <span class="kw">def </span><span class="fun">test</span>():
- <span class="name">have_letter</span> <span class="op">=</span> <span class="name">have_number</span>, <span class="name">have_special</span> <span class="op">=</span> <span class="bn bn-pseudo">False</span>
-
- <span class="kw">for</span> <span class="name">char</span> <span class="op op-word">in</span> <span class="name">field</span>.<span class="name">value</span>:
- <span class="name">c</span> <span class="op">=</span> <span class="name">unicodedata</span>.<span class="name">category</span>(<span class="name">char</span>)[<span class="nb nb-int">0</span>]
- <span class="kw">if</span> <span class="name">c</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">L</span><span class="st st-sg">&#39;</span>:
- <span class="name">have_letter</span> <span class="op">=</span> <span class="bn bn-pseudo">True</span>
-
- <span class="kw">elif</span> <span class="name">c</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">N</span><span class="st st-sg">&#39;</span>:
- <span class="name">have_number</span> <span class="op">=</span> <span class="bn bn-pseudo">True</span>
- <span class="kw">elif</span> <span class="name">c</span> <span class="op">==</span> <span class="st st-sg">&#39;</span><span class="st">S</span><span class="st st-sg">&#39;</span>:
- <span class="name">have_special</span> <span class="op">=</span> <span class="bn bn-pseudo">True</span>
-
- <span class="kw">if</span> <span class="name">have_letter</span> <span class="op op-word">and</span> <span class="name">have_number</span> <span class="op op-word">and</span> <span class="name">have_special</span>:
- <span class="kw">return</span> <span class="bn bn-pseudo">True</span>
-
- <span class="kw">return</span> <span class="bn bn-pseudo">False</span>
- <span class="kw">if</span> <span class="bn">len</span>(<span class="name">field</span>.<span class="name">value</span>) <span class="op">&lt;</span> <span class="nb nb-int">6</span> <span class="op op-word">or</span> <span class="op op-word">not</span> <span class="name">test</span>():
- <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Please enter a password with at least 6 characters with </span><span class="st st-sg">&#39;</span>
-
- <span class="st st-sg">&#39;</span><span class="st">contains of letters, numbers and at least one special </span><span class="st st-sg">&#39;</span>
- <span class="st st-sg">&#39;</span><span class="st">character.</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="name">errors</span>:
- <span class="kw">raise</span> <span class="name">ValidationError</span>(<span class="op">*</span><span class="name">errors</span>)
- <span class="kw">return</span> <span class="name">is_strong_password</span>
-
-
-
-<span class="kw">def </span><span class="fun">isValidSignature</span>():
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Checks if the signature is valid.</span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">def </span><span class="fun">is_valid_signature</span>(<span class="name">field</span>, <span class="name">form</span>):
- <span class="name">errors</span> <span class="op">=</span> []
- <span class="name">_</span> <span class="op">=</span> <span class="kw">lambda</span> <span class="name">s</span>: <span class="name">errors</span>.<span class="name">append</span>(<span class="name">form</span>.<span class="name">req</span>.<span class="name">gettext</span>(<span class="name">s</span>))
- <span class="name">val</span> <span class="op">=</span> <span class="name">field</span>.<span class="name">value</span>.<span class="name">strip</span>()
- <span class="name">max_len</span> <span class="op">=</span> <span class="name">form</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">signature_length</span><span class="st st-sg">&#39;</span>)
- <span class="name">max_lines</span> <span class="op">=</span> <span class="name">form</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">signature_lines</span><span class="st st-sg">&#39;</span>)
- <span class="kw">if</span> <span class="bn">len</span>(<span class="name">val</span>) <span class="op">&gt;</span> <span class="name">max_len</span>:
- <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Your signature must not be longer than </span><span class="st st-int">%d</span><span class="st"> characters.</span><span class="st st-sg">&#39;</span>) <span class="op">%</span> <span class="name">max_len</span>
-
- <span class="kw">if</span> <span class="bn">len</span>(<span class="name">val</span>.<span class="name">splitlines</span>()) <span class="op">&gt;</span> <span class="name">max_lines</span>:
- <span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Your signature must not be longer than </span><span class="st st-int">%d</span><span class="st"> lines.</span><span class="st st-sg">&#39;</span>) <span class="op">%</span> <span class="name">max_lines</span>
-
- <span class="kw">if</span> <span class="name">errors</span>:
- <span class="kw">raise</span> <span class="name">ValidationError</span>(<span class="op">*</span><span class="name">errors</span>)
- <span class="kw">return</span> <span class="name">is_valid_signature</span>
-
-<span class="kw">def </span><span class="fun">isIcqMessengerId</span>():
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Checks if the value is a valid ICQ ID</span><span class="st st-db">&quot;&quot;&quot;</span>
- <span class="kw">def </span><span class="fun">is_icq_messenger_id</span>(<span class="name">field</span>, <span class="name">form</span>):
- <span class="kw">if</span> <span class="name">_icq_re</span>.<span class="name">search</span>(<span class="name">field</span>.<span class="name">value</span>) <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">_</span> <span class="op">=</span> <span class="name">form</span>.<span class="name">req</span>.<span class="name">gettext</span>
-
- <span class="kw">raise</span> <span class="name">ValidationError</span>(<span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Please enter a valid ICQ ID</span><span class="st st-sg">&#39;</span>))
- <span class="kw">return</span> <span class="name">is_icq_messenger_id</span>
-
-
-<span class="kw">def </span><span class="fun">isJabberMessengerId</span>():
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Checks if the value is a valid jabber ID</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">def </span><span class="fun">is_jabber_messenger_id</span>(<span class="name">field</span>, <span class="name">form</span>):
- <span class="kw">if</span> <span class="name">_mail_re</span>.<span class="name">search</span>(<span class="name">field</span>.<span class="name">value</span>) <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">_</span> <span class="op">=</span> <span class="name">form</span>.<span class="name">req</span>.<span class="name">gettext</span>
-
- <span class="kw">raise</span> <span class="name">ValidationError</span>(<span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Please enter a valid jabber ID</span><span class="st st-sg">&#39;</span>))
- <span class="kw">return</span> <span class="name">is_jabber_messenger_id</span>
-
-
-<span class="kw">def </span><span class="fun">isMsnMessengerId</span>():
- <span class="st st-db">&quot;&quot;&quot;</span><span class="st">Checks if the value is a valid MSN ID</span><span class="st st-db">&quot;&quot;&quot;</span>
-
- <span class="kw">def </span><span class="fun">is_msn_messenger_id</span>(<span class="name">field</span>, <span class="name">form</span>):
- <span class="kw">if</span> <span class="name">_mail_re</span>.<span class="name">search</span>(<span class="name">field</span>.<span class="name">value</span>) <span class="op op-word">is</span> <span class="bn bn-pseudo">None</span>:
- <span class="name">_</span> <span class="op">=</span> <span class="name">form</span>.<span class="name">req</span>.<span class="name">gettext</span>
-
- <span class="kw">raise</span> <span class="name">ValidationError</span>(<span class="name">_</span>(<span class="st st-sg">&#39;</span><span class="st">Please enter a valid MSN ID.</span><span class="st st-sg">&#39;</span>))
- <span class="kw">return</span> <span class="name">is_msn_messenger_id</span>
-
-
-<span class="cm"># TODO: I don&#39;t know how valid AIM and Y!M IDs look, so I can&#39;t write validators</span>
-
-<span class="cm"># for them. It looks like they are simple strings, but I&#39;m not sure...</span>
</pre>
<script type="text/javascript">initCodeBlock('code-block')</script>
</body>