<?xml version="1.0" encoding="ascii"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>web2py.gluon.rewrite</title>
<link rel="stylesheet" href="epydoc.css" type="text/css" />
<script type="text/javascript" src="epydoc.js"></script>
</head>
<body bgcolor="white" text="black" link="blue" vlink="#204080"
alink="#204080">
<!-- ==================== NAVIGATION BAR ==================== -->
<table class="navbar" border="0" width="100%" cellpadding="0"
bgcolor="#a0c0ff" cellspacing="0">
<tr valign="middle">
<!-- Home link -->
<th> <a
href="web2py.gluon-module.html">Home</a> </th>
<!-- Tree link -->
<th> <a
href="module-tree.html">Trees</a> </th>
<!-- Index link -->
<th> <a
href="identifier-index.html">Indices</a> </th>
<!-- Help link -->
<th> <a
href="help.html">Help</a> </th>
<!-- Project homepage -->
<th class="navbar" align="right" width="100%">
<table border="0" cellpadding="0" cellspacing="0">
<tr><th class="navbar" align="center"
><a class="navbar" target="_top" href="http://www.web2py.com">web2py Web Framework</a></th>
</tr></table></th>
</tr>
</table>
<table width="100%" cellpadding="0" cellspacing="0">
<tr valign="top">
<td width="100%">
<span class="breadcrumbs">
Package web2py ::
<a href="web2py.gluon-module.html">Package gluon</a> ::
Module rewrite
</span>
</td>
<td>
<table cellpadding="0" cellspacing="0">
<!-- hide/show private -->
<tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
onclick="toggle_private();">hide private</a>]</span></td></tr>
<tr><td align="right"><span class="options"
>[<a href="frames.html" target="_top">frames</a
>] | <a href="web2py.gluon.rewrite-module.html"
target="_top">no frames</a>]</span></td></tr>
</table>
</td>
</tr>
</table>
<!-- ==================== MODULE DESCRIPTION ==================== -->
<h1 class="epydoc">Module rewrite</h1><span class="codelink"><a href="web2py.gluon.rewrite-pysrc.html">source code</a></span><br /><br />
<p>This file is part of the web2py Web Framework Copyrighted by Massimo
Di Pierro <mdipierro@cs.depaul.edu> License: LGPLv3
(http://www.gnu.org/licenses/lgpl.html)</p>
<p>gluon.rewrite parses incoming URLs and formats outgoing URLs for
gluon.html.URL.</p>
<p>In addition, it rewrites both incoming and outgoing URLs based on the
(optional) user-supplied routes.py, which also allows for rewriting of
certain error messages.</p>
routes.py supports two styles of URL rewriting, depending on whether
'routers' is defined. Refer to router.example.py and routes.example.py
for additional documentation.<br /><br />
<!-- ==================== CLASSES ==================== -->
<a name="section-Classes"></a>
<table class="summary" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr bgcolor="#70b0f0" class="table-header">
<td colspan="2" class="table-header">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr valign="top">
<td align="left"><span class="table-header">Classes</span></td>
<td align="right" valign="top"
><span class="options">[<a href="#section-Classes"
class="privatelink" onclick="toggle_private();"
>hide private</a>]</span></td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<a href="web2py.gluon.rewrite.MapUrlIn-class.html" class="summary-name">MapUrlIn</a><br />
logic for mapping incoming URLs
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<a href="web2py.gluon.rewrite.MapUrlOut-class.html" class="summary-name">MapUrlOut</a><br />
logic for mapping outgoing URLs
</td>
</tr>
</table>
<!-- ==================== FUNCTIONS ==================== -->
<a name="section-Functions"></a>
<table class="summary" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr bgcolor="#70b0f0" class="table-header">
<td colspan="2" class="table-header">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr valign="top">
<td align="left"><span class="table-header">Functions</span></td>
<td align="right" valign="top"
><span class="options">[<a href="#section-Functions"
class="privatelink" onclick="toggle_private();"
>hide private</a>]</span></td>
</tr>
</table>
</td>
</tr>
<tr class="private">
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="_router_default"></a><span class="summary-sig-name">_router_default</span>()</span><br />
return new copy of default base router</td>
<td align="right" valign="top">
<span class="codelink"><a href="web2py.gluon.rewrite-pysrc.html#_router_default">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr class="private">
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="_params_default"></a><span class="summary-sig-name">_params_default</span>(<span class="summary-sig-arg">app</span>=<span class="summary-sig-default">1</span>)</span><br />
return new copy of default parameters</td>
<td align="right" valign="top">
<span class="codelink"><a href="web2py.gluon.rewrite-pysrc.html#_params_default">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="url_in"></a><span class="summary-sig-name">url_in</span>(<span class="summary-sig-arg">request</span>,
<span class="summary-sig-arg">environ</span>)</span><br />
parse and rewrite incoming URL</td>
<td align="right" valign="top">
<span class="codelink"><a href="web2py.gluon.rewrite-pysrc.html#url_in">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="url_out"></a><span class="summary-sig-name">url_out</span>(<span class="summary-sig-arg">request</span>,
<span class="summary-sig-arg">env</span>,
<span class="summary-sig-arg">application</span>,
<span class="summary-sig-arg">controller</span>,
<span class="summary-sig-arg">function</span>,
<span class="summary-sig-arg">args</span>,
<span class="summary-sig-arg">other</span>,
<span class="summary-sig-arg">scheme</span>,
<span class="summary-sig-arg">host</span>,
<span class="summary-sig-arg">port</span>)</span><br />
assemble and rewrite outgoing URL</td>
<td align="right" valign="top">
<span class="codelink"><a href="web2py.gluon.rewrite-pysrc.html#url_out">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="try_rewrite_on_error"></a><span class="summary-sig-name">try_rewrite_on_error</span>(<span class="summary-sig-arg">http_response</span>,
<span class="summary-sig-arg">request</span>,
<span class="summary-sig-arg">environ</span>,
<span class="summary-sig-arg">ticket</span>=<span class="summary-sig-default">1</span>)</span><br />
called from main.wsgibase to rewrite the http response.</td>
<td align="right" valign="top">
<span class="codelink"><a href="web2py.gluon.rewrite-pysrc.html#try_rewrite_on_error">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="try_redirect_on_error"></a><span class="summary-sig-name">try_redirect_on_error</span>(<span class="summary-sig-arg">http_object</span>,
<span class="summary-sig-arg">request</span>,
<span class="summary-sig-arg">ticket</span>=<span class="summary-sig-default">1</span>)</span><br />
called from main.wsgibase to rewrite the http response</td>
<td align="right" valign="top">
<span class="codelink"><a href="web2py.gluon.rewrite-pysrc.html#try_redirect_on_error">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a href="web2py.gluon.rewrite-module.html#load" class="summary-sig-name">load</a>(<span class="summary-sig-arg">routes</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">routes.py</code><code class="variable-quote">'</code></span>,
<span class="summary-sig-arg">app</span>=<span class="summary-sig-default">1</span>,
<span class="summary-sig-arg">data</span>=<span class="summary-sig-default">1</span>,
<span class="summary-sig-arg">rdict</span>=<span class="summary-sig-default">1</span>)</span><br />
load: read (if file) and parse routes store results in params
(called from main.py at web2py initialization time) If data is
present, it's used instead of the routes.py contents.</td>
<td align="right" valign="top">
<span class="codelink"><a href="web2py.gluon.rewrite-pysrc.html#load">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="compile_regex"></a><span class="summary-sig-name">compile_regex</span>(<span class="summary-sig-arg">k</span>,
<span class="summary-sig-arg">v</span>)</span><br />
Preprocess and compile the regular expressions in routes_app/in/out
The resulting regex will match a pattern of the form:
[remote address]:[protocol]://[host]:[method] [path]
We allow abbreviated regexes on input; here we try to complete them.</td>
<td align="right" valign="top">
<span class="codelink"><a href="web2py.gluon.rewrite-pysrc.html#compile_regex">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="load_routers"></a><span class="summary-sig-name">load_routers</span>(<span class="summary-sig-arg">all_apps</span>)</span><br />
load-time post-processing of routers</td>
<td align="right" valign="top">
<span class="codelink"><a href="web2py.gluon.rewrite-pysrc.html#load_routers">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="regex_uri"></a><span class="summary-sig-name">regex_uri</span>(<span class="summary-sig-arg">e</span>,
<span class="summary-sig-arg">regexes</span>,
<span class="summary-sig-arg">tag</span>,
<span class="summary-sig-arg">default</span>=<span class="summary-sig-default">1</span>)</span><br />
filter incoming URI against a list of regexes</td>
<td align="right" valign="top">
<span class="codelink"><a href="web2py.gluon.rewrite-pysrc.html#regex_uri">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="regex_select"></a><span class="summary-sig-name">regex_select</span>(<span class="summary-sig-arg">env</span>=<span class="summary-sig-default">1</span>,
<span class="summary-sig-arg">app</span>=<span class="summary-sig-default">1</span>,
<span class="summary-sig-arg">request</span>=<span class="summary-sig-default">1</span>)</span><br />
select a set of regex rewrite params for the current request</td>
<td align="right" valign="top">
<span class="codelink"><a href="web2py.gluon.rewrite-pysrc.html#regex_select">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="regex_filter_in"></a><span class="summary-sig-name">regex_filter_in</span>(<span class="summary-sig-arg">e</span>)</span><br />
regex rewrite incoming URL</td>
<td align="right" valign="top">
<span class="codelink"><a href="web2py.gluon.rewrite-pysrc.html#regex_filter_in">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="regex_url_in"></a><span class="summary-sig-name">regex_url_in</span>(<span class="summary-sig-arg">request</span>,
<span class="summary-sig-arg">environ</span>)</span><br />
rewrite and parse incoming URL</td>
<td align="right" valign="top">
<span class="codelink"><a href="web2py.gluon.rewrite-pysrc.html#regex_url_in">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="regex_filter_out"></a><span class="summary-sig-name">regex_filter_out</span>(<span class="summary-sig-arg">url</span>,
<span class="summary-sig-arg">e</span>=<span class="summary-sig-default">1</span>)</span><br />
regex rewrite outgoing URL</td>
<td align="right" valign="top">
<span class="codelink"><a href="web2py.gluon.rewrite-pysrc.html#regex_filter_out">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="filter_url"></a><span class="summary-sig-name">filter_url</span>(<span class="summary-sig-arg">url</span>,
<span class="summary-sig-arg">method</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">get</code><code class="variable-quote">'</code></span>,
<span class="summary-sig-arg">remote</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">0.0.0.0</code><code class="variable-quote">'</code></span>,
<span class="summary-sig-arg">out</span>=<span class="summary-sig-default">True</span>,
<span class="summary-sig-arg">app</span>=<span class="summary-sig-default">True</span>,
<span class="summary-sig-arg">lang</span>=<span class="summary-sig-default">1</span>,
<span class="summary-sig-arg">domain</span>=<span class="summary-sig-default"><code class="variable-group">(</code>None<code class="variable-op">, </code>None<code class="variable-group">)</code></span>,
<span class="summary-sig-arg">env</span>=<span class="summary-sig-default">True</span>,
<span class="summary-sig-arg">scheme</span>=<span class="summary-sig-default">1</span>,
<span class="summary-sig-arg">host</span>=<span class="summary-sig-default">1</span>,
<span class="summary-sig-arg">port</span>=<span class="summary-sig-default">1</span>)</span><br />
doctest/unittest interface to regex_filter_in() and
regex_filter_out()</td>
<td align="right" valign="top">
<span class="codelink"><a href="web2py.gluon.rewrite-pysrc.html#filter_url">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="filter_err"></a><span class="summary-sig-name">filter_err</span>(<span class="summary-sig-arg">status</span>,
<span class="summary-sig-arg">application</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">app</code><code class="variable-quote">'</code></span>,
<span class="summary-sig-arg">ticket</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">tkt</code><code class="variable-quote">'</code></span>)</span><br />
doctest/unittest interface to routes_onerror</td>
<td align="right" valign="top">
<span class="codelink"><a href="web2py.gluon.rewrite-pysrc.html#filter_err">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="map_url_in"></a><span class="summary-sig-name">map_url_in</span>(<span class="summary-sig-arg">request</span>,
<span class="summary-sig-arg">env</span>,
<span class="summary-sig-arg">app</span>=<span class="summary-sig-default">True</span>)</span><br />
route incoming URL</td>
<td align="right" valign="top">
<span class="codelink"><a href="web2py.gluon.rewrite-pysrc.html#map_url_in">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a href="web2py.gluon.rewrite-module.html#map_url_out" class="summary-sig-name">map_url_out</a>(<span class="summary-sig-arg">request</span>,
<span class="summary-sig-arg">env</span>,
<span class="summary-sig-arg">application</span>,
<span class="summary-sig-arg">controller</span>,
<span class="summary-sig-arg">function</span>,
<span class="summary-sig-arg">args</span>,
<span class="summary-sig-arg">other</span>,
<span class="summary-sig-arg">scheme</span>,
<span class="summary-sig-arg">host</span>,
<span class="summary-sig-arg">port</span>)</span><br />
supply /a/c/f (or /a/lang/c/f) portion of outgoing url
The basic rule is that we can only make transformations
that map_url_in can reverse.</td>
<td align="right" valign="top">
<span class="codelink"><a href="web2py.gluon.rewrite-pysrc.html#map_url_out">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="get_effective_router"></a><span class="summary-sig-name">get_effective_router</span>(<span class="summary-sig-arg">appname</span>)</span><br />
return a private copy of the effective router for the specified
application</td>
<td align="right" valign="top">
<span class="codelink"><a href="web2py.gluon.rewrite-pysrc.html#get_effective_router">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- ==================== VARIABLES ==================== -->
<a name="section-Variables"></a>
<table class="summary" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr bgcolor="#70b0f0" class="table-header">
<td colspan="2" class="table-header">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr valign="top">
<td align="left"><span class="table-header">Variables</span></td>
<td align="right" valign="top"
><span class="options">[<a href="#section-Variables"
class="privatelink" onclick="toggle_private();"
>hide private</a>]</span></td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<a name="logger"></a><span class="summary-name">logger</span> = <code title="logging.getLogger('web2py.rewrite')">logging.getLogger('web2py.rewrite')</code>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<a name="thread"></a><span class="summary-name">thread</span> = <code title="threading.local()">threading.local()</code>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<a name="params_apps"></a><span class="summary-name">params_apps</span> = <code title="{}"><code class="variable-group">{</code><code class="variable-group">}</code></code>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<a href="web2py.gluon.rewrite-module.html#params" class="summary-name">params</a> = <code title="<Storage {'routes_out': [], 'name': 'BASE', 'routes_apps_raw': [], 'er\
ror_message': '<html><body><h1>%s</h1></body></html>', 'default_functi\
on': 'index', 'default_controller': 'default', 'routes_app': [], 'rout\
es_in': [], 'default_application': 'init', 'error_message_ticket': '<h\
tml><body><h1>Internal error</h1>Ticket issued: <a href="/admin/defaul\
t/ticket/%(ticket)s" target="_blank">%(ticket)s</a></body><!-- this is\
junk text else IE does not display the page: xxxxxxxxxxxxxxxxxxxxxxxx\
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
..."><Storage {'routes_out': [], 'name': 'BASE', 'routes_a<code class="variable-ellipsis">...</code></code>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<a name="routers"></a><span class="summary-name">routers</span> = <code title="1">1</code><br />
PyMySQL: A pure-Python drop-in replacement for MySQLdb.
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<a href="web2py.gluon.rewrite-module.html#ROUTER_KEYS" class="summary-name">ROUTER_KEYS</a> = <code title="set(['acfe_match',
'applications',
'args_match',
'controllers',
'default_application',
'default_controller',
'default_function',
'default_language',
..."><code class="variable-group">set([</code><code class="variable-quote">'</code><code class="variable-string">acfe_match</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">applications</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">args_match</code><code class="variable-quote">'</code><code class="variable-op">,</code><code class="variable-ellipsis">...</code></code>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<a href="web2py.gluon.rewrite-module.html#ROUTER_BASE_KEYS" class="summary-name">ROUTER_BASE_KEYS</a> = <code title="set(['applications', 'default_application', 'domains', 'path_prefix'])"><code class="variable-group">set([</code><code class="variable-quote">'</code><code class="variable-string">applications</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">default_application</code><code class="variable-quote">'</code><code class="variable-op">,</code><code class="variable-ellipsis">...</code></code>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<a name="regex_at"></a><span class="summary-name">regex_at</span> = <code title="re.compile(r'(?<!\\)\$[a-zA-Z]\w*')">re.compile(r'<code class="re-group">(?<!</code>\\<code class="re-group">)</code>\$<code class="re-group">[</code>a<code class="re-op">-</code>zA<code class="re-op">-</code>Z<code class="re-group">]</code>\w<code class="re-op">*</code>')</code>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<a name="regex_anything"></a><span class="summary-name">regex_anything</span> = <code title="re.compile(r'(?<!\\)\$anything')">re.compile(r'<code class="re-group">(?<!</code>\\<code class="re-group">)</code>\$anything')</code>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<a name="regex_space"></a><span class="summary-name">regex_space</span> = <code title="re.compile(r'(\+|\s|%20)+')">re.compile(r'<code class="re-group">(</code>\+<code class="re-op">|</code>\s<code class="re-op">|</code>%20<code class="re-group">)</code><code class="re-op">+</code>')</code>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<a href="web2py.gluon.rewrite-module.html#regex_static" class="summary-name">regex_static</a> = <code title="re.compile(r'(?x)(^/(?P<b>\w+)/static/(?P<x>(\w[-=\./]?)*)$)')">re.compile(r'<code class="re-flags">(?x)</code><code class="re-group">(</code>^/<code class="re-group">(?P<</code><code class="re-ref">b</code><code class="re-group">></code>\w<code class="re-op">+</code><code class="re-group">)</code>/static/<code class="re-group">(?P<</code><code class="re-ref">x</code><code class="re-group">></code><code class="re-group">(</code>\w<code class="variable-ellipsis">...</code></code>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<a href="web2py.gluon.rewrite-module.html#regex_url" class="summary-name">regex_url</a> = <code title="re.compile(r'(?x)(^(/(?P<a>[\w\s\+]+)(/(?P<c>[\w\s\+]+)(/(?P<f>[\w\s\+\
]+)(\.(?P<e>[\w\s\+]+))?(/(?P<r>.*))?)?)?)?/?$)')">re.compile(r'<code class="re-flags">(?x)</code><code class="re-group">(</code>^<code class="re-group">(</code>/<code class="re-group">(?P<</code><code class="re-ref">a</code><code class="re-group">></code><code class="re-group">[</code>\w\s\+<code class="re-group">]</code><code class="re-op">+</code><code class="re-group">)</code><code class="re-group">(</code>/<code class="re-group">(?P<</code><code class="re-ref">c</code><code class="re-group">></code><code class="re-group">[</code>\w\s<code class="variable-ellipsis">...</code></code>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<a name="regex_args"></a><span class="summary-name">regex_args</span> = <code title="re.compile(r'(?x)(^(?P<s>([\w@/-][=\.]?)*)?/?$)')">re.compile(r'<code class="re-flags">(?x)</code><code class="re-group">(</code>^<code class="re-group">(?P<</code><code class="re-ref">s</code><code class="re-group">></code><code class="re-group">(</code><code class="re-group">[</code>\w@/-<code class="re-group">]</code><code class="re-group">[</code>=\.<code class="re-group">]</code><code class="re-op">?</code><code class="re-group">)</code><code class="re-op">*</code><code class="re-group">)</code><code class="re-op">?</code>/<code class="re-op">?</code>$<code class="re-group">)</code>')</code>
</td>
</tr>
</table>
<!-- ==================== FUNCTION DETAILS ==================== -->
<a name="section-FunctionDetails"></a>
<table class="details" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr bgcolor="#70b0f0" class="table-header">
<td colspan="2" class="table-header">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr valign="top">
<td align="left"><span class="table-header">Function Details</span></td>
<td align="right" valign="top"
><span class="options">[<a href="#section-FunctionDetails"
class="privatelink" onclick="toggle_private();"
>hide private</a>]</span></td>
</tr>
</table>
</td>
</tr>
</table>
<a name="load"></a>
<div>
<table class="details" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr><td>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr valign="top"><td>
<h3 class="epydoc"><span class="sig"><span class="sig-name">load</span>(<span class="sig-arg">routes</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string">routes.py</code><code class="variable-quote">'</code></span>,
<span class="sig-arg">app</span>=<span class="sig-default">1</span>,
<span class="sig-arg">data</span>=<span class="sig-default">1</span>,
<span class="sig-arg">rdict</span>=<span class="sig-default">1</span>)</span>
</h3>
</td><td align="right" valign="top"
><span class="codelink"><a href="web2py.gluon.rewrite-pysrc.html#load">source code</a></span>
</td>
</table>
load: read (if file) and parse routes store results in params (called
from main.py at web2py initialization time) If data is present, it's used
instead of the routes.py contents. If rdict is present, it must be a dict
to be used for routers (unit test)
<dl class="fields">
</dl>
</td></tr></table>
</div>
<a name="map_url_out"></a>
<div>
<table class="details" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr><td>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr valign="top"><td>
<h3 class="epydoc"><span class="sig"><span class="sig-name">map_url_out</span>(<span class="sig-arg">request</span>,
<span class="sig-arg">env</span>,
<span class="sig-arg">application</span>,
<span class="sig-arg">controller</span>,
<span class="sig-arg">function</span>,
<span class="sig-arg">args</span>,
<span class="sig-arg">other</span>,
<span class="sig-arg">scheme</span>,
<span class="sig-arg">host</span>,
<span class="sig-arg">port</span>)</span>
</h3>
</td><td align="right" valign="top"
><span class="codelink"><a href="web2py.gluon.rewrite-pysrc.html#map_url_out">source code</a></span>
</td>
</table>
<pre class="literalblock">
supply /a/c/f (or /a/lang/c/f) portion of outgoing url
The basic rule is that we can only make transformations
that map_url_in can reverse.
Suppose that the incoming arguments are a,c,f,args,lang
and that the router defaults are da, dc, df, dl.
We can perform these transformations trivially if args=[] and lang=None or dl:
/da/dc/df => /
/a/dc/df => /a
/a/c/df => /a/c
We would also like to be able to strip the default application or application/controller
from URLs with function/args present, thus:
/da/c/f/args => /c/f/args
/da/dc/f/args => /f/args
We use [applications] and [controllers] and [functions] to suppress ambiguous omissions.
We assume that language names do not collide with a/c/f names.
</pre>
<dl class="fields">
</dl>
</td></tr></table>
</div>
<br />
<!-- ==================== VARIABLES DETAILS ==================== -->
<a name="section-VariablesDetails"></a>
<table class="details" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr bgcolor="#70b0f0" class="table-header">
<td colspan="2" class="table-header">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr valign="top">
<td align="left"><span class="table-header">Variables Details</span></td>
<td align="right" valign="top"
><span class="options">[<a href="#section-VariablesDetails"
class="privatelink" onclick="toggle_private();"
>hide private</a>]</span></td>
</tr>
</table>
</td>
</tr>
</table>
<a name="params"></a>
<div>
<table class="details" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr><td>
<h3 class="epydoc">params</h3>
<dl class="fields">
</dl>
<dl class="fields">
<dt>Value:</dt>
<dd><table><tr><td><pre class="variable">
<Storage {'routes_out': [], 'name': 'BASE', 'routes_apps_raw': [], 'er<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
ror_message': '<html><body><h1>%s</h1></body></html>', 'default_functi<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
on': 'index', 'default_controller': 'default', 'routes_app': [], 'rout<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
es_in': [], 'default_application': 'init', 'error_message_ticket': '<h<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
tml><body><h1>Internal error</h1>Ticket issued: <a href="/admin/defaul<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
t/ticket/%(ticket)s" target="_blank">%(ticket)s</a></body><!-- this is<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
junk text else IE does not display the page: xxxxxxxxxxxxxxxxxxxxxxxx<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
<code class="variable-ellipsis">...</code>
</pre></td></tr></table>
</dd>
</dl>
</td></tr></table>
</div>
<a name="ROUTER_KEYS"></a>
<div>
<table class="details" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr><td>
<h3 class="epydoc">ROUTER_KEYS</h3>
<dl class="fields">
</dl>
<dl class="fields">
<dt>Value:</dt>
<dd><table><tr><td><pre class="variable">
<code class="variable-group">set([</code><code class="variable-quote">'</code><code class="variable-string">acfe_match</code><code class="variable-quote">'</code><code class="variable-op">,</code>
<code class="variable-quote">'</code><code class="variable-string">applications</code><code class="variable-quote">'</code><code class="variable-op">,</code>
<code class="variable-quote">'</code><code class="variable-string">args_match</code><code class="variable-quote">'</code><code class="variable-op">,</code>
<code class="variable-quote">'</code><code class="variable-string">controllers</code><code class="variable-quote">'</code><code class="variable-op">,</code>
<code class="variable-quote">'</code><code class="variable-string">default_application</code><code class="variable-quote">'</code><code class="variable-op">,</code>
<code class="variable-quote">'</code><code class="variable-string">default_controller</code><code class="variable-quote">'</code><code class="variable-op">,</code>
<code class="variable-quote">'</code><code class="variable-string">default_function</code><code class="variable-quote">'</code><code class="variable-op">,</code>
<code class="variable-quote">'</code><code class="variable-string">default_language</code><code class="variable-quote">'</code><code class="variable-op">,</code>
<code class="variable-ellipsis">...</code>
</pre></td></tr></table>
</dd>
</dl>
</td></tr></table>
</div>
<a name="ROUTER_BASE_KEYS"></a>
<div>
<table class="details" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr><td>
<h3 class="epydoc">ROUTER_BASE_KEYS</h3>
<dl class="fields">
</dl>
<dl class="fields">
<dt>Value:</dt>
<dd><table><tr><td><pre class="variable">
<code class="variable-group">set([</code><code class="variable-quote">'</code><code class="variable-string">applications</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">default_application</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">domains</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">path_prefix</code><code class="variable-quote">'</code><code class="variable-group">])</code>
</pre></td></tr></table>
</dd>
</dl>
</td></tr></table>
</div>
<a name="regex_static"></a>
<div>
<table class="details" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr><td>
<h3 class="epydoc">regex_static</h3>
<dl class="fields">
</dl>
<dl class="fields">
<dt>Value:</dt>
<dd><table><tr><td><pre class="variable">
re.compile(r'<code class="re-flags">(?x)</code><code class="re-group">(</code>^/<code class="re-group">(?P<</code><code class="re-ref">b</code><code class="re-group">></code>\w<code class="re-op">+</code><code class="re-group">)</code>/static/<code class="re-group">(?P<</code><code class="re-ref">x</code><code class="re-group">></code><code class="re-group">(</code>\w<code class="re-group">[</code>-=\./<code class="re-group">]</code><code class="re-op">?</code><code class="re-group">)</code><code class="re-op">*</code><code class="re-group">)</code>$<code class="re-group">)</code>')
</pre></td></tr></table>
</dd>
</dl>
</td></tr></table>
</div>
<a name="regex_url"></a>
<div>
<table class="details" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr><td>
<h3 class="epydoc">regex_url</h3>
<dl class="fields">
</dl>
<dl class="fields">
<dt>Value:</dt>
<dd><table><tr><td><pre class="variable">
re.compile(r'<code class="re-flags">(?x)</code><code class="re-group">(</code>^<code class="re-group">(</code>/<code class="re-group">(?P<</code><code class="re-ref">a</code><code class="re-group">></code><code class="re-group">[</code>\w\s\+<code class="re-group">]</code><code class="re-op">+</code><code class="re-group">)</code><code class="re-group">(</code>/<code class="re-group">(?P<</code><code class="re-ref">c</code><code class="re-group">></code><code class="re-group">[</code>\w\s\+<code class="re-group">]</code><code class="re-op">+</code><code class="re-group">)</code><code class="re-group">(</code>/<code class="re-group">(?P<</code><code class="re-ref">f</code><code class="re-group">></code><code class="re-group">[</code>\w\s\+<code class="re-group"></code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
<code class="re-group">]</code><code class="re-op">+</code><code class="re-group">)</code><code class="re-group">(</code>\.<code class="re-group">(?P<</code><code class="re-ref">e</code><code class="re-group">></code><code class="re-group">[</code>\w\s\+<code class="re-group">]</code><code class="re-op">+</code><code class="re-group">)</code><code class="re-group">)</code><code class="re-op">?</code><code class="re-group">(</code>/<code class="re-group">(?P<</code><code class="re-ref">r</code><code class="re-group">></code>.<code class="re-op">*</code><code class="re-group">)</code><code class="re-group">)</code><code class="re-op">?</code><code class="re-group">)</code><code class="re-op">?</code><code class="re-group">)</code><code class="re-op">?</code><code class="re-group">)</code><code class="re-op">?</code>/<code class="re-op">?</code>$<code class="re-group">)</code>')
</pre></td></tr></table>
</dd>
</dl>
</td></tr></table>
</div>
<br />
<!-- ==================== NAVIGATION BAR ==================== -->
<table class="navbar" border="0" width="100%" cellpadding="0"
bgcolor="#a0c0ff" cellspacing="0">
<tr valign="middle">
<!-- Home link -->
<th> <a
href="web2py.gluon-module.html">Home</a> </th>
<!-- Tree link -->
<th> <a
href="module-tree.html">Trees</a> </th>
<!-- Index link -->
<th> <a
href="identifier-index.html">Indices</a> </th>
<!-- Help link -->
<th> <a
href="help.html">Help</a> </th>
<!-- Project homepage -->
<th class="navbar" align="right" width="100%">
<table border="0" cellpadding="0" cellspacing="0">
<tr><th class="navbar" align="center"
><a class="navbar" target="_top" href="http://www.web2py.com">web2py Web Framework</a></th>
</tr></table></th>
</tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%%">
<tr>
<td align="left" class="footer">
Generated by Epydoc 3.0beta1 on Thu Aug 4 00:46:59 2011
</td>
<td align="right" class="footer">
<a href="http://epydoc.sourceforge.net">http://epydoc.sourceforge.net</a>
</td>
</tr>
</table>
<script type="text/javascript">
<!--
// Private objects are initially displayed (because if
// javascript is turned off then we want them to be
// visible); but by default, we want to hide them. So hide
// them unless we have a cookie that says to show them.
checkCookie()
// -->
</script>
</body>
</html>