Fantastic - thanks Massimo.  That is extremely useful - my regex skills are
pretty poor but this really helps with getting to grips with routes.py.

Love the 'tips of the day' - keep 'em coming!

On 18 October 2010 03:07, mdipierro <mdipie...@cs.depaul.edu> wrote:

> I put the script in trunk under scripts/autoroutes.py
> to use it
>
> cp scripts/autoroutes.py routes.py
>
> then edit routes.conf
>
> as explained below:
>
> On Oct 17, 9:03 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
> > Replace your web2py/routes.py with this:
> >
> > ------------- begin routes.py-----------
> > try: config=open('routes.conf','r').read()
> > except: config=''
> > def auto_in(apps):
> >     routes=[
> >         ('/robots.txt','/welcome/static/robots.txt'),
> >         ('/favicon.ico','/welcome/static/favicon.ico'),
> >         ('/admin$a','/admin$a'),
> >         ]
> >     for a,b in [x.strip().split() for x in apps.split('\n') \
> >         if x.strip() and not x.strip().startswith('#')]:
> >         if not b.startswith('/'): b='/'+b
> >         if b.endswith('/'): b=b[:-1]
> >         app = b.split('/')[1]
> >         routes+=[
> >             ('.*:https?://(.*\.)?%s:$method /' % a,'%s' % b),
> >             ('.*:https?://(.*\.)?%s:$method /static/$a' % a,'%s/static/
> > $a' % app),
> >             ('.*:https?://(.*\.)?%s:$method /appadmin/$a' % a,'%s/
> > appadmin/$a' % app),
> >             ('.*:https?://(.*\.)?%s:$method /$a' % a,'%s/$a' % b),
> >             ]
> >     return routes
> >
> > def auto_out(apps):
> >     routes=[]
> >     for a,b in [x.strip().split() for x in apps.split('\n') \
> >         if x.strip() and not x.strip().startswith('#')]:
> >         if not b.startswith('/'): b='/'+b
> >         if b.endswith('/'): b=b[:-1]
> >         app = b.split('/')[1]
> >         routes+=[
> >             ('%s/static/$a' % app,'static/$a'),
> >             ('%s/appadmin/$a' % app, '/appadmin/$a'),
> >             ('%s/$a' % b, '/$a'),
> >             ]
> >     return routes
> >
> > routes_in=auto_in(config)
> > routes_out=auto_out(config)
> > ------------------- END ---------------
> >
> > what does it do? It writes routes for you based on a simpler routing
> > configuration file called routes.conf. here is an example:
> >
> > ----- BEGIN routes.conf-------
> > 127.0.0.1       /examples/default
> > domain1.com /app1/default
> > domain2.com /app2/default
> > domain3.com /app3/default
> > ----- END ----------
> >
> > It maps a domain (the left had side) into an app and it shortens the
> > URLs for the app, by removing the listed path prefix. That means
> >
> > http://domain1.com/indexwill be mapped into  /app1/default/indexhttp://
> domain2.com/indexwill be mapped into  /app2/default/index
> >
> > It is safe in that it preserves admin, appadmin, static files,
> > favicon.ico and robots.txt.
> >
> >
> http://domain1.com/favicon.icohttp://domain1.com/robots.txthttp://domain1.com/admin/...
>   /admin/...http://domain1.com/appadmin/...  /app1/appadmin/...
> http://domain1.com/static/...  /app1/static/...
> >
> > and vice-versa.
> >
> > It does assume one app per domain.
> >
> > I think something like this should be default since lots of people
> > find routes.py hard to work with.
> > Comments? Suggestions?
> >
> > Massimo
>

Reply via email to