On Jan 6, 2011, at 11:52 AM, VP wrote:
> 
> While this is intended to simplify the current specifications of
> routes.py (I think), what I have seen is more confusing to me.  Does
> this replace the old routes.py?

Only if you define a routers dict.

> 
> Maybe, can you provide examples of typical use cases?  For example,
> one VPS account, each domain mapping to each app.  Anything else?

routers = dict(
    BASE = dict( 
        domains = {
            "domain1.com" : "app1",
            "domain2.com" : "app2",
            "domain3.com" : "app3",
        },
   )
)

If you need to override any app-specific defaults (see router.example.py for 
the defaults), you'd do it this way:

routers = dict(
    BASE = dict( 
        domains = {
            "domain1.com" : "app1",
            "domain2.com" : "app2",
            "domain3.com" : "app3",
        },
    )
    app1 = dict(default_controller = "ctlr1")
)

There's an alternative syntax for domain mapping, exactly equivalent to the 
above:

routers = dict(
    app1 = dict(domain="domain1.com", default_controller="ctlr1")
    app2 = dict(domain="domain2.com"),
    app3 = dict(domain="domain3.com"),
)

These will give you full URL shortening. For example:

        http://domain2.com/app2/default/fcn/abc/def

will (by default) become:

        http://domain2.com/fcn/abc/def

...though the full URL will continue to work.

Root-static files (by default robots.txt and favicon.ico) will be mapped to the 
static folder of the appropriate application (which is default_application if 
domain mapping is not involved).

A URL like this:

        http://domain2.com/admin/fcn/abc/def

...will be mapped correctly to:

        http://domain2.com/admin/default/fcn/abc/def

(assuming that applications/admin is installed)

> 
> Thank you.
> 
> 
> 
> On Jan 6, 10:29 am, Jonathan Lundell <jlund...@pobox.com> wrote:
>> The new router logic in the trunk is looking fairly stable now, and needs 
>> feedback.
>> 
>> See the comments in router.example.py for summary documentation (reproduced 
>> below), and ask here if you have questions.
>> 
>> The simplest possible router is:
>> 
>> routers = dict()
>> 
>> This sets all the defaults (including default_application=init). The next 
>> most simple router:
>> 
>> routers = dict(
>>     BASE = dict(default_application = 'myapp')
>> )
>> 
>> Either of those will perform component removal from outgoing URLs.
>> 
>> If 'myapp' needs to override specific routing parameters, you'll do 
>> something like this:
>> 
>> routers = dict(
>>     BASE = dict(default_application = 'myapp'),
>>     myapp = dict(default_controller = 'defcon')
>> )
>> 
>> To use the new language facility (URLs like /a/pt-br/c/f/...), you'll need 
>> to do something like this early in your model:
>> 
>> if request.uri_language: T.force(request.uri_language)
>> 
>> This is not tested, and it'd be great if someone could give it a shot. 
>> Notice that with language translation, static files are served 
>> preferentially from language-specific subdirectories.
>> 
>> applications/appname/static/pt-br/...
>> 
>> If the incoming URL for a static file is tagged pt-br, we look first in 
>> static/pt-br/ and then in static/, so it's not necessary to duplicate files 
>> that don't need translation.
>> 
>> If you're already using routes.py, just add a routers=dict(... entry, and it 
>> will be used preferentially; you shouldn't have to remove your regex-based 
>> rewrites.
>> 
>> Feedback, please.
>> 
>> #  routers are dictionaries of URL routing parameters.
>> #
>> #  For each request, the effective router is:
>> #    the built-in default base router (shown below),
>> #    updated by the BASE router in routes.py routers,
>> #    updated by the app-specific router in routes.py routers,
>> #    updated by the app-specific router from applcations/app/routes.py 
>> routers (if any)
>> #
>> #
>> #  Router members:
>> #
>> #  default_application: default application name
>> #  applications: list of all recognized applications, or 'ALL' to use all 
>> currently installed applications
>> #      Names in applications are always treated as an application names when 
>> they appear first in an incoming URL.
>> #      Set applications to [] to disable the removal of application names 
>> from outgoing URLs.
>> #  domains: dict used to map domain names to application names
>> #  default_controller: name of default controller
>> #  default_function: name of default function (all controllers)
>> #  root_static: list of static files accessed from root
>> #       (mapped to the selected application's static/ directory)
>> #  domain: the domain that maps to this application (alternative to using 
>> domains in the base router)
>> #  languages: list of all supported languages
>> #      Names in controllers are always treated as language names when they 
>> appear in an incoming URL after
>> #      the (optional) application name.
>> #  controllers: list of valid controllers in selected app
>> #       or "DEFAULT" to use all controllers in the selected app plus 'static'
>> #       or [] to disable controller-name removal.
>> #      Names in controllers are always treated as controller names when they 
>> appear in an incoming URL after
>> #      the (optional) application and language names.
>> #  default_language
>> #       The language code (for example: en, it-it) optionally appears in the 
>> URL following
>> #       the application (which may be omitted). For incoming URLs, the code 
>> is copied to
>> #       request.language; for outgoing URLs it is taken from 
>> request.language.
>> #       If languages=[], language support is disabled.
>> #       The default_language, if any, is omitted from the URL.
>> #  check_args: set to False to suppress arg checking
>> #       request.raw_args always contains a list of raw args from the URL, 
>> not unquoted
>> #       request.args are the same values, unquoted
>> #       By default (check_args=True), args are required to match args_match.
>> #  acfe_match: regex for valid application, controller, function, extension 
>> /a/c/f.e
>> #  file_match: regex for valid file (used for static file names)
>> #  args_match: regex for valid args (see also check_args flag)
>> #
>> #
>> #  The built-in default router supplies default values (undefined members 
>> are None):
>> #
>> #     default_router = dict(
>> #         default_application = 'init',
>> #             applications = 'ALL',
>> #         default_controller = 'default',
>> #             controllers = 'DEFAULT',
>> #         default_function = 'index',
>> #         default_language = None,
>> #             languages = [],
>> #         root_static = ['favicon.ico', 'robots.txt'],
>> #         domains = dict(),
>> #         check_args = True,
>> #         map_hyphen = True,
>> #         acfe_match = r'\w+$',              # legal app/ctlr/fcn/ext
>> #         file_match = r'(\w+[-=./]?)+$',    # legal file (path) name
>> #         args_match = r'([\w@ -]+[=.]?)+$', # legal arg in args
>> #     )
>> #
>> #  See rewrite.map_url_in() and rewrite.map_url_out() for implementation 
>> details.


Reply via email to