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 >