Re: [web2py] Re: new URL router use cases

2011-03-24 Thread pbreit
I think I'm in agreement. App-specific routing should be controlled at the 
app level. I was just saying that it might be tricky to figure out how to 
set up the default file structure and routes to both work and handle future 
updates.

Re: [web2py] Re: new URL router use cases

2011-03-24 Thread Martín Mulone
Sorry perhaps I don't express myself correctly, I'm not saying this is a bug
or I can't do with the current way. I'm only saying that I think better if
there are something like that in app level. It's an idea. Main routes.py to
control things up to the application, and the rest by the application.

Main: routes.py:

Domain Application
---
www.domain1.com domain1
www.domain2.com domain2

Aplication:  applications/domain1/routes/routes.py:

InOut
--
/favicon.ico /static/favicon.ico


Final result: routes.py + application/routes.

/domain1/static/favicon.icowww.domain1.com/favicon.ico


In my experience in production I never share things between application or
statics. I Think in the 97% or more of the application developed, to be in
production are completely independant from the others app.




2011/3/24 pbreit 

> +1 for a move towards routes default "on" and primarily controlled at the
> app level. But I do recognize there is an issue about what file should come
> in the main distribution and how to avoid it being overwritten with updates.
>
> The default files could duplicate the current default functionality for
> explicitness.
>



-- 
Pablo Martín Mulone (mar...@tecnodoc.com.ar)
http://www.tecnodoc.com.ar/

My blog: http://martin.tecnodoc.com.ar
Expert4Solution Profile:
http://www.experts4solutions.com/e4s/default/expert/6


Re: [web2py] Re: new URL router use cases

2011-03-24 Thread pbreit
+1 for a move towards routes default "on" and primarily controlled at the 
app level. But I do recognize there is an issue about what file should come 
in the main distribution and how to avoid it being overwritten with updates.

The default files could duplicate the current default functionality for 
explicitness.


Re: [web2py] Re: new URL router use cases

2011-03-24 Thread Tom Atkins
Thanks Anthony - you're right and I do know this - just wrote the wrong
thing in my previous post - I meant to say 'change to pattern-based'... make
me wonder what other stupid mistakes I'm making... but double checked and I
think I have everything correct and as suggested by Massimo.

On 24 March 2011 18:02, Anthony  wrote:

> Tom, you cannot mix usage of the parameter-based and pattern-based routing
> systems, even if one is in the global routes.py and one is in an
> app-specific routes.py. You have to pick one system or the other, for now
> anyway.
>
> Anthony
>
>


Re: [web2py] Re: new URL router use cases

2011-03-24 Thread Anthony
Tom, you cannot mix usage of the parameter-based and pattern-based routing 
systems, even if one is in the global routes.py and one is in an 
app-specific routes.py. You have to pick one system or the other, for now 
anyway.
 
Anthony

On Thursday, March 24, 2011 1:59:33 PM UTC-4, Tom A wrote:

> Thanks for this suggestion Massimo - it's the closest to what I'm looking 
> for.  I've tried to get it to work but no joy. 
>
> I've changed my global routes.py to use parameter based routing sand put 
> the first part of your code in the application specific routes.py.
>
> I've then put the 2nd part of your code into the default controller.  But 
> if you go to:
>
> myapp.com/Supersite/users
>
> I get:
>
> invalid controller (Supersite/users)
>
> I've tried but can't figure out a solution...
>
>
>
> On 23 March 2011 13:46, Massimo Di Pierro  wrote:
>
>> yes. For example: 
>>
>> routes_in = [
>>   ('/$yoursitename/users','/init/default/users/$yoursitename'),
>> ]
>>
>> the optionally
>>
>> @request.restful()
>> def users():
>>   def GET(yoursitename):
>>  return dict(message='your site name is: '+yoursitename)
>>   return locals() 
>>  
>>
>>
>>
>>
>>  On Mar 23, 2011, at 8:31 AM, Anthony wrote:
>>
>>  Massimo, I think Tom was referring to Flask's ability to include an arg 
>> at an arbitrary place in the URL path (e.g., '//users'), not 
>> the ability to specify the routes via decorators. I think the former *can* 
>> be achieved in web2py using the pattern-based rewrite system, right?
>>  
>> Anthony
>>
>> On Wednesday, March 23, 2011 9:17:31 AM UTC-4, Massimo Di Pierro wrote:
>>
>>> This is not an option in web2py because the controller is executed 
>>> after the requests arrives not imported before (as in Flask). Anyway, 
>>> that works better for simple apps but becomes a mess if you have many 
>>> functions because the routing info is scattered all over the place. 
>>> Moreover - when it comes to rest - it requires that you use the same 
>>> function for multiple methods (GET/POST/etc) by using multiple 
>>> decorators or that you use different functions with different names to 
>>> handle different names (I do not like that). 
>>>
>>> On Mar 22, 3:13 am, Tom Atkins  wrote: 
>>> > I might be being naive here but in Flask I can do: 
>>> > 
>>> > @app.route('//users') 
>>> > ... def editusers(yoursitename): pass 
>>> > 
>>> > print url_for('editprofile', yoursitename='Supersite') 
>>> > 
>>> > gives: 
>>> > 
>>> > /Supersite/users 
>>> > 
>>> > On 22 March 2011 05:23, Jonathan Lundell  wrote: 
>>> > 
>>> > 
>>> > 
>>> > 
>>> > 
>>> > 
>>> > 
>>> > > On Mar 21, 2011, at 7:44 PM, Indra Gunawan wrote: 
>>> > 
>>> > > Agree, Flask way looks more elegant (see Variable Rules). It could be 
>>> nice 
>>> > > if this way also exists on Web2Py. 
>>> > 
>>> > > On 22 March 2011 06:05, Tom Atkins  wrote: 
>>> > 
>>> > >> I was playing with Flask and I have to say its solution to routing 
>>> is very 
>>> > >> nice: 
>>> > 
>>> > >>http://flask.pocoo.org/docs/quickstart/#routing 
>>> > 
>>> > >> The use of variable names anywhere within the URL structure is very 
>>> handy. 
>>> > >> Anything like this possible in web2py? 
>>> > 
>>> > > Flask doesn't really allow variable names anywhere; near as I can 
>>> tell 
>>> > > they're a considerably restricted version of web2py's args list.
>>
>>
>>
>

Re: [web2py] Re: new URL router use cases

2011-03-24 Thread Tom Atkins
Thanks for this suggestion Massimo - it's the closest to what I'm looking
for.  I've tried to get it to work but no joy.

I've changed my global routes.py to use parameter based routing sand put the
first part of your code in the application specific routes.py.

I've then put the 2nd part of your code into the default controller.  But if
you go to:

myapp.com/Supersite/users

I get:

invalid controller (Supersite/users)

I've tried but can't figure out a solution...



On 23 March 2011 13:46, Massimo Di Pierro wrote:

> yes. For example:
>
> routes_in = [
>   ('/$yoursitename/users','/init/default/users/$yoursitename'),
> ]
>
> the optionally
>
> @request.restful()
> def users():
>   def GET(yoursitename):
>  return dict(message='your site name is: '+yoursitename)
>   return locals()
>
>
>
>
>
> On Mar 23, 2011, at 8:31 AM, Anthony wrote:
>
> Massimo, I think Tom was referring to Flask's ability to include an arg at
> an arbitrary place in the URL path (e.g., '//users'), not the
> ability to specify the routes via decorators. I think the former *can* be
> achieved in web2py using the pattern-based rewrite system, right?
>
> Anthony
>
> On Wednesday, March 23, 2011 9:17:31 AM UTC-4, Massimo Di Pierro wrote:
>
>> This is not an option in web2py because the controller is executed
>> after the requests arrives not imported before (as in Flask). Anyway,
>> that works better for simple apps but becomes a mess if you have many
>> functions because the routing info is scattered all over the place.
>> Moreover - when it comes to rest - it requires that you use the same
>> function for multiple methods (GET/POST/etc) by using multiple
>> decorators or that you use different functions with different names to
>> handle different names (I do not like that).
>>
>> On Mar 22, 3:13 am, Tom Atkins  wrote:
>> > I might be being naive here but in Flask I can do:
>> >
>> > @app.route('//users')
>> > ... def editusers(yoursitename): pass
>> >
>> > print url_for('editprofile', yoursitename='Supersite')
>> >
>> > gives:
>> >
>> > /Supersite/users
>> >
>> > On 22 March 2011 05:23, Jonathan Lundell  wrote:
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> > > On Mar 21, 2011, at 7:44 PM, Indra Gunawan wrote:
>> >
>> > > Agree, Flask way looks more elegant (see Variable Rules). It could be
>> nice
>> > > if this way also exists on Web2Py.
>> >
>> > > On 22 March 2011 06:05, Tom Atkins  wrote:
>> >
>> > >> I was playing with Flask and I have to say its solution to routing is
>> very
>> > >> nice:
>> >
>> > >>http://flask.pocoo.org/docs/quickstart/#routing
>> >
>> > >> The use of variable names anywhere within the URL structure is very
>> handy.
>> > >> Anything like this possible in web2py?
>> >
>> > > Flask doesn't really allow variable names anywhere; near as I can tell
>>
>> > > they're a considerably restricted version of web2py's args list.
>
>
>


Re: [web2py] Re: new URL router use cases

2011-03-24 Thread Jonathan Lundell
On Mar 24, 2011, at 10:35 AM, Anthony wrote:
> On Thursday, March 24, 2011 12:51:56 PM UTC-4, Martin.Mulone wrote:
> Yes but not in the application folder. The importance is to be distributed 
> with the application.

I think you two might be talking at cross purposes here. It goes in 
applications/myapp/

>  
> With both systesms, you can put a routes.py file in the application folder, 
> but at least with the older system, for that to work, you also need a 
> routes_app entry in the main routes.py file -- is that what you're saying you 
> don't want? In other words, you want no dependency on any central routes.py 
> file? Perhaps Jonathan can verify, but I think that may be possible with the 
> new system (i.e., having a routes.py file in your app folder without having a 
> routes.py file in the web2py root folder).
> 

Both versions of routing work the same way, in principle. You need a base 
(root) routes.py so that the router can figure out the application (otherwise 
it wouldn't know which app-specific routes.py to use). The rest of the routing 
information can be in each applications root folder.

The new router's syntax makes it pretty easy to have all the routing in the 
base routes.py, though, since each app can simply have its own routing dict.

Re: [web2py] Re: new URL router use cases

2011-03-24 Thread Anthony
On Thursday, March 24, 2011 12:51:56 PM UTC-4, Martin.Mulone wrote: 
>
> Yes but not in the application folder. The importance is to be distributed 
> with the application.

 
With both systesms, you can put a routes.py file in the application folder, 
but at least with the older system, for that to work, you also need a 
routes_app entry in the main routes.py file -- is that what you're saying 
you don't want? In other words, you want no dependency on any central 
routes.py file? Perhaps Jonathan can verify, but I think that may be 
possible with the new system (i.e., having a routes.py file in your app 
folder without having a routes.py file in the web2py root folder).
 
Anthony


Re: [web2py] Re: new URL router use cases

2011-03-24 Thread Jonathan Lundell
On Mar 24, 2011, at 9:57 AM, Martín Mulone wrote:
> For example I have a blog application with this url
> 
> http://www.mysite.com/blog/default/post/2010/10/10/my-article
> 
> I can short to this:
> 
> http://www.mysite.com/blog/2010/10/10/my-article
> 
> with this one route:
> 
> (r'.*:/blog/(?P(19|20)\d\d[- /.](0[1-9]|1[012])[- 
> /.](0[1-9]|[12][0-9]|3[01]).*)$',r'/blog/default/post/\g')
> 
> Not easy to read :) if I can make it transparent to the user that the user 
> not have to worried about routes. 

You can do this with the new router if you make post the default function of 
the blog app, and create a list of functions in blog/default. Something like 
this:

routers = dict(

blog = dict(
default_function='post',
functions=['index', 'user', 'post', 'whatever'],
),
)

You'll need to parse and validate the args in default/post.

By specifying a list of functions in the default controller, you're telling the 
router that it can unambiguously omit the 'post' name if there's no conflict. 
So with the router above, a URL like /blog/default/post/index would *not* be 
shortened to /blog/index, because that would conflict with the function named 
'index'.

> 
> 2011/3/24 Martín Mulone 
> Yes but not in the application folder. The importance is to be distributed 
> with the application.
> 
> 2011/3/24 Anthony 
> I believe this is already possible, no?
>  
> The book describes app-specific routing for the old system: 
> http://web2py.com/book/default/chapter/04#Pattern-Based-System
>  
> And  for the new system, the router.example.py file 
> (http://code.google.com/p/web2py/source/browse/router.example.py) mentions 
> you can have an app-specific router in applications/app/routes.py.
>  
> Anthony
> 
> On Thursday, March 24, 2011 11:49:58 AM UTC-4, Martin.Mulone wrote:
> I really want to see routes in the application folder. Routes in the past was 
> hard to follow, now I think the work of Johnatan make it more easy. But when 
> you have many applications, the routes for all is a bit messy. I don't know 
> if this can be done:
> 
> For example a simple case:
> 
> Main routes.py:
> ---
> 
> Domain Application
> -
> www.domain1.com domain1
> www.domain2.com domain2
> 
> 
> 
> Aplication:  applications/domain1/routes.py:
> ---
> 
> 
> [routes In]
> In Out
> --
> /favicon.ico /static/favicon.ico
> 
> 
> [routes Out]
> In Out
> --
> default/index /
> plugin_i2p/view/333 /view/333
> 
> 
> 2011/3/24 VP 
> 
> Noticing the version of web2py keeps interestingly increasing to 2.0,
> I think this is something Massimo might want to spend sometime
> thinking about.
> 
> As I understand it, because of "exec", controllers are called *after*
> the request arrives.  This allows web2py to do a few interesting
> things that other frameworks can't.
> 
> On the other hands, this is an example that shows an advantage of
> being able to manipulate controllers (concisely) *before* the request
> arrives.
> 
> I found myself constantly type checking controller arguments (e.g.
> making sure an "id" is a number).  This is another example where being
> able to specify a certain syntax to the URL is very helpful.
> 



Re: [web2py] Re: new URL router use cases

2011-03-24 Thread Martín Mulone
For example I have a blog application with this url

http://www.mysite.com/blog/default/post/2010/10/10/my-article

I can short to this:

http://www.mysite.com/blog/2010/10/10/my-article

with this one route:

(r'.*:/blog/(?P(19|20)\d\d[- /.](0[1-9]|1[012])[-
/.](0[1-9]|[12][0-9]|3[01]).*)$',r'/blog/default/post/\g')

Not easy to read :) if I can make it transparent to the user that the user
not have to worried about routes.

2011/3/24 Martín Mulone 

> Yes but not in the application folder. The importance is to be distributed
> with the application.
>
> 2011/3/24 Anthony 
>
>> I believe this is already possible, no?
>>
>> The book describes app-specific routing for the old system:
>> http://web2py.com/book/default/chapter/04#Pattern-Based-System
>>
>> And  for the new system, the router.example.py file (
>> http://code.google.com/p/web2py/source/browse/router.example.py) mentions
>> you can have an app-specific router in applications/app/routes.py.
>>
>> Anthony
>>
>> On Thursday, March 24, 2011 11:49:58 AM UTC-4, Martin.Mulone wrote:
>>
>>> I really want to see routes in the application folder. Routes in the past
>>> was hard to follow, now I think the work of Johnatan make it more easy. But
>>> when you have many applications, the routes for all is a bit messy. I don't
>>> know if this can be done:
>>>
>>> For example a simple case:
>>>
>>> Main routes.py:
>>> ---
>>>
>>> Domain Application
>>> -
>>> www.domain1.com domain1
>>> www.domain2.com domain2
>>>
>>>
>>>
>>> Aplication:  applications/domain1/routes.py:
>>> ---
>>>
>>>
>>> [routes In]
>>> In Out
>>> --
>>> /favicon.ico /static/favicon.ico
>>>
>>>
>>> [routes Out]
>>> In Out
>>> --
>>> default/index /
>>> plugin_i2p/view/333 /view/333
>>>
>>>
>>> 2011/3/24 VP 
>>>
>>> Noticing the version of web2py keeps interestingly increasing to 2.0,
 I think this is something Massimo might want to spend sometime
 thinking about.

 As I understand it, because of "exec", controllers are called *after*
 the request arrives.  This allows web2py to do a few interesting
 things that other frameworks can't.

 On the other hands, this is an example that shows an advantage of
 being able to manipulate controllers (concisely) *before* the request
 arrives.

 I found myself constantly type checking controller arguments (e.g.
 making sure an "id" is a number).  This is another example where being
 able to specify a certain syntax to the URL is very helpful.


>>>
>>>
>>> --
>>>  Pablo Martín Mulone (mar...@tecnodoc.com.ar)
>>> http://www.tecnodoc.com.ar/
>>>
>>> My blog: http://martin.tecnodoc.com.ar
>>> Expert4Solution Profile:
>>> http://www.experts4solutions.com/e4s/default/expert/6
>>>
>>>
>>>
>
>
> --
> Pablo Martín Mulone (mar...@tecnodoc.com.ar)
> http://www.tecnodoc.com.ar/
>
> My blog: http://martin.tecnodoc.com.ar
> Expert4Solution Profile:
> http://www.experts4solutions.com/e4s/default/expert/6
>
>
>


-- 
Pablo Martín Mulone (mar...@tecnodoc.com.ar)
http://www.tecnodoc.com.ar/

My blog: http://martin.tecnodoc.com.ar
Expert4Solution Profile:
http://www.experts4solutions.com/e4s/default/expert/6


Re: [web2py] Re: new URL router use cases

2011-03-24 Thread Tom Atkins
The problem for me is not being able to mix the new parameter-based routing
with the pattern-based system (my regex skills are not good enough to make
the patten system do what I want) .

Is it possible to have parameter system in the global routes.py and then
pattern system in the app-specific routes.py?  That would solve my issues!

On 24 March 2011 16:06, Anthony  wrote:

> I believe this is already possible, no?
>
> The book describes app-specific routing for the old system:
> http://web2py.com/book/default/chapter/04#Pattern-Based-System
>
> And  for the new system, the router.example.py file (
> http://code.google.com/p/web2py/source/browse/router.example.py) mentions
> you can have an app-specific router in applications/app/routes.py.
>
> Anthony
>
> On Thursday, March 24, 2011 11:49:58 AM UTC-4, Martin.Mulone wrote:
>
>> I really want to see routes in the application folder. Routes in the past
>> was hard to follow, now I think the work of Johnatan make it more easy. But
>> when you have many applications, the routes for all is a bit messy. I don't
>> know if this can be done:
>>
>> For example a simple case:
>>
>> Main routes.py:
>> ---
>>
>> Domain Application
>> -
>> www.domain1.com domain1
>> www.domain2.com domain2
>>
>>
>>
>> Aplication:  applications/domain1/routes.py:
>> ---
>>
>>
>> [routes In]
>> In Out
>> --
>> /favicon.ico /static/favicon.ico
>>
>>
>> [routes Out]
>> In Out
>> --
>> default/index /
>> plugin_i2p/view/333 /view/333
>>
>>
>> 2011/3/24 VP 
>>
>> Noticing the version of web2py keeps interestingly increasing to 2.0,
>>> I think this is something Massimo might want to spend sometime
>>> thinking about.
>>>
>>> As I understand it, because of "exec", controllers are called *after*
>>> the request arrives.  This allows web2py to do a few interesting
>>> things that other frameworks can't.
>>>
>>> On the other hands, this is an example that shows an advantage of
>>> being able to manipulate controllers (concisely) *before* the request
>>> arrives.
>>>
>>> I found myself constantly type checking controller arguments (e.g.
>>> making sure an "id" is a number).  This is another example where being
>>> able to specify a certain syntax to the URL is very helpful.
>>>
>>>
>>
>>
>> --
>>  Pablo Martín Mulone (mar...@tecnodoc.com.ar)
>> http://www.tecnodoc.com.ar/
>>
>> My blog: http://martin.tecnodoc.com.ar
>> Expert4Solution Profile:
>> http://www.experts4solutions.com/e4s/default/expert/6
>>
>>
>>


Re: [web2py] Re: new URL router use cases

2011-03-24 Thread Martín Mulone
Yes but not in the application folder. The importance is to be distributed
with the application.

2011/3/24 Anthony 

> I believe this is already possible, no?
>
> The book describes app-specific routing for the old system:
> http://web2py.com/book/default/chapter/04#Pattern-Based-System
>
> And  for the new system, the router.example.py file (
> http://code.google.com/p/web2py/source/browse/router.example.py) mentions
> you can have an app-specific router in applications/app/routes.py.
>
> Anthony
>
> On Thursday, March 24, 2011 11:49:58 AM UTC-4, Martin.Mulone wrote:
>
>> I really want to see routes in the application folder. Routes in the past
>> was hard to follow, now I think the work of Johnatan make it more easy. But
>> when you have many applications, the routes for all is a bit messy. I don't
>> know if this can be done:
>>
>> For example a simple case:
>>
>> Main routes.py:
>> ---
>>
>> Domain Application
>> -
>> www.domain1.com domain1
>> www.domain2.com domain2
>>
>>
>>
>> Aplication:  applications/domain1/routes.py:
>> ---
>>
>>
>> [routes In]
>> In Out
>> --
>> /favicon.ico /static/favicon.ico
>>
>>
>> [routes Out]
>> In Out
>> --
>> default/index /
>> plugin_i2p/view/333 /view/333
>>
>>
>> 2011/3/24 VP 
>>
>> Noticing the version of web2py keeps interestingly increasing to 2.0,
>>> I think this is something Massimo might want to spend sometime
>>> thinking about.
>>>
>>> As I understand it, because of "exec", controllers are called *after*
>>> the request arrives.  This allows web2py to do a few interesting
>>> things that other frameworks can't.
>>>
>>> On the other hands, this is an example that shows an advantage of
>>> being able to manipulate controllers (concisely) *before* the request
>>> arrives.
>>>
>>> I found myself constantly type checking controller arguments (e.g.
>>> making sure an "id" is a number).  This is another example where being
>>> able to specify a certain syntax to the URL is very helpful.
>>>
>>>
>>
>>
>> --
>>  Pablo Martín Mulone (mar...@tecnodoc.com.ar)
>> http://www.tecnodoc.com.ar/
>>
>> My blog: http://martin.tecnodoc.com.ar
>> Expert4Solution Profile:
>> http://www.experts4solutions.com/e4s/default/expert/6
>>
>>
>>


-- 
Pablo Martín Mulone (mar...@tecnodoc.com.ar)
http://www.tecnodoc.com.ar/

My blog: http://martin.tecnodoc.com.ar
Expert4Solution Profile:
http://www.experts4solutions.com/e4s/default/expert/6


Re: [web2py] Re: new URL router use cases

2011-03-24 Thread Jonathan Lundell
On Mar 24, 2011, at 8:04 AM, VP wrote:
> 
> Noticing the version of web2py keeps interestingly increasing to 2.0,
> I think this is something Massimo might want to spend sometime
> thinking about.
> 
> As I understand it, because of "exec", controllers are called *after*
> the request arrives.  This allows web2py to do a few interesting
> things that other frameworks can't.
> 
> On the other hands, this is an example that shows an advantage of
> being able to manipulate controllers (concisely) *before* the request
> arrives.
> 
> I found myself constantly type checking controller arguments (e.g.
> making sure an "id" is a number).  This is another example where being
> able to specify a certain syntax to the URL is very helpful.
> 

Notice that the routing mechanism you're talking about doesn't depend on the 
routing information being distributed as controller decoration; they can be 
presented in a table instead. In fact, putting them in a table has advantages 
over the decorator approach, in that a) you can see the whole routing policy in 
one place, and b) you can explicitly specify the order of evaluation.

Checking controller arguments is important, since they are, after all, user 
input and not trustworthy. And there's something to be said for checking them 
at the controller/function, since you're in a position to give more informative 
error messages if something is wrong. 

If you're using web2py forms, then the validators serve this purpose. If you're 
not, you can use the validators on their own.

Re: [web2py] Re: new URL router use cases

2011-03-24 Thread Anthony
I believe this is already possible, no?
 
The book describes app-specific routing for the old system: 
http://web2py.com/book/default/chapter/04#Pattern-Based-System
 
And  for the new system, the router.example.py file (
http://code.google.com/p/web2py/source/browse/router.example.py) mentions 
you can have an app-specific router in applications/app/routes.py.
 
Anthony

On Thursday, March 24, 2011 11:49:58 AM UTC-4, Martin.Mulone wrote:

> I really want to see routes in the application folder. Routes in the past 
> was hard to follow, now I think the work of Johnatan make it more easy. But 
> when you have many applications, the routes for all is a bit messy. I don't 
> know if this can be done:
>
> For example a simple case:
>
> Main routes.py:
> ---
>
> Domain Application
> -
> www.domain1.com domain1
> www.domain2.com domain2
>
>
>
> Aplication:  applications/domain1/routes.py:
> ---
>
>
> [routes In]
> In Out
> --
> /favicon.ico /static/favicon.ico
>
>
> [routes Out]
> In Out
> --
> default/index /
> plugin_i2p/view/333 /view/333
>
>
> 2011/3/24 VP 
>
>> Noticing the version of web2py keeps interestingly increasing to 2.0,
>> I think this is something Massimo might want to spend sometime
>> thinking about.
>>
>> As I understand it, because of "exec", controllers are called *after*
>> the request arrives.  This allows web2py to do a few interesting
>> things that other frameworks can't.
>>
>> On the other hands, this is an example that shows an advantage of
>> being able to manipulate controllers (concisely) *before* the request
>> arrives.
>>
>> I found myself constantly type checking controller arguments (e.g.
>> making sure an "id" is a number).  This is another example where being
>> able to specify a certain syntax to the URL is very helpful.
>>
>>
>
>
> -- 
>  Pablo Martín Mulone (mar...@tecnodoc.com.ar)
> http://www.tecnodoc.com.ar/
>
> My blog: http://martin.tecnodoc.com.ar
> Expert4Solution Profile: 
> http://www.experts4solutions.com/e4s/default/expert/6
>
>
>

[web2py] Re: new URL router use cases

2011-03-24 Thread Anthony
On Thursday, March 24, 2011 11:04:39 AM UTC-4, VP wrote: 
>
> Noticing the version of web2py keeps interestingly increasing to 2.0, 
> I think this is something Massimo might want to spend sometime 
> thinking about.

 
 I don't think the xx part of 1.xx.y is to be interpreted as a decimal with 
a maximum of 99 -- I think it's just the number of releases within the 1.0 
series (so, can go over 99).


Re: [web2py] Re: new URL router use cases

2011-03-24 Thread Martín Mulone
I really want to see routes in the application folder. Routes in the past
was hard to follow, now I think the work of Johnatan make it more easy. But
when you have many applications, the routes for all is a bit messy. I don't
know if this can be done:

For example a simple case:

Main routes.py:
---

Domain Application
-
www.domain1.com domain1
www.domain2.com domain2



Aplication:  applications/domain1/routes.py:
---


[routes In]
In Out
--
/favicon.ico /static/favicon.ico


[routes Out]
In Out
--
default/index /
plugin_i2p/view/333 /view/333


2011/3/24 VP 

> Noticing the version of web2py keeps interestingly increasing to 2.0,
> I think this is something Massimo might want to spend sometime
> thinking about.
>
> As I understand it, because of "exec", controllers are called *after*
> the request arrives.  This allows web2py to do a few interesting
> things that other frameworks can't.
>
> On the other hands, this is an example that shows an advantage of
> being able to manipulate controllers (concisely) *before* the request
> arrives.
>
> I found myself constantly type checking controller arguments (e.g.
> making sure an "id" is a number).  This is another example where being
> able to specify a certain syntax to the URL is very helpful.
>
>


-- 
Pablo Martín Mulone (mar...@tecnodoc.com.ar)
http://www.tecnodoc.com.ar/

My blog: http://martin.tecnodoc.com.ar
Expert4Solution Profile:
http://www.experts4solutions.com/e4s/default/expert/6


[web2py] Re: new URL router use cases

2011-03-24 Thread VP
Noticing the version of web2py keeps interestingly increasing to 2.0,
I think this is something Massimo might want to spend sometime
thinking about.

As I understand it, because of "exec", controllers are called *after*
the request arrives.  This allows web2py to do a few interesting
things that other frameworks can't.

On the other hands, this is an example that shows an advantage of
being able to manipulate controllers (concisely) *before* the request
arrives.

I found myself constantly type checking controller arguments (e.g.
making sure an "id" is a number).  This is another example where being
able to specify a certain syntax to the URL is very helpful.



[web2py] Re: new URL router use cases

2011-03-24 Thread VP
Can't this be done in web2py with something like this?

assert(request.args(1) == 'users')
yoursitename = request.args(0)


On Mar 23, 8:31 am, Anthony  wrote:
> Massimo, I think Tom was referring to Flask's ability to include an arg at
> an arbitrary place in the URL path (e.g., '//users'), not the
> ability to specify the routes via decorators. I think the former *can* be
> achieved in web2py using the pattern-based rewrite system, right?
>
> Anthony
>
>
>
>
>
>
>
> On Wednesday, March 23, 2011 9:17:31 AM UTC-4, Massimo Di Pierro wrote:
> > This is not an option in web2py because the controller is executed
> > after the requests arrives not imported before (as in Flask). Anyway,
> > that works better for simple apps but becomes a mess if you have many
> > functions because the routing info is scattered all over the place.
> > Moreover - when it comes to rest - it requires that you use the same
> > function for multiple methods (GET/POST/etc) by using multiple
> > decorators or that you use different functions with different names to
> > handle different names (I do not like that).
>
> > On Mar 22, 3:13 am, Tom Atkins  wrote:
> > > I might be being naive here but in Flask I can do:
>
> > > @app.route('//users')
> > > ... def editusers(yoursitename): pass
>
> > > print url_for('editprofile', yoursitename='Supersite')
>
> > > gives:
>
> > > /Supersite/users
>
> > > On 22 March 2011 05:23, Jonathan Lundell  wrote:
>
> > > > On Mar 21, 2011, at 7:44 PM, Indra Gunawan wrote:
>
> > > > Agree, Flask way looks more elegant (see Variable Rules). It could be
> > nice
> > > > if this way also exists on Web2Py.
>
> > > > On 22 March 2011 06:05, Tom Atkins  wrote:
>
> > > >> I was playing with Flask and I have to say its solution to routing is
> > very
> > > >> nice:
>
> > > >>http://flask.pocoo.org/docs/quickstart/#routing
>
> > > >> The use of variable names anywhere within the URL structure is very
> > handy.
> > > >> Anything like this possible in web2py?
>
> > > > Flask doesn't really allow variable names anywhere; near as I can tell
> > > > they're a considerably restricted version of web2py's args list.


[web2py] Re: new URL router use cases

2011-03-23 Thread Massimo Di Pierro
yes. For example:

routes_in = [
  ('/$yoursitename/users','/init/default/users/$yoursitename'),
]

the optionally

@request.restful()
def users():
  def GET(yoursitename):
 return dict(message='your site name is: '+yoursitename)
  return locals()




On Mar 23, 2011, at 8:31 AM, Anthony wrote:

> Massimo, I think Tom was referring to Flask's ability to include an arg at an 
> arbitrary place in the URL path (e.g., '//users'), not the 
> ability to specify the routes via decorators. I think the former *can* be 
> achieved in web2py using the pattern-based rewrite system, right?
>  
> Anthony
> 
> On Wednesday, March 23, 2011 9:17:31 AM UTC-4, Massimo Di Pierro wrote:
> This is not an option in web2py because the controller is executed 
> after the requests arrives not imported before (as in Flask). Anyway, 
> that works better for simple apps but becomes a mess if you have many 
> functions because the routing info is scattered all over the place. 
> Moreover - when it comes to rest - it requires that you use the same 
> function for multiple methods (GET/POST/etc) by using multiple 
> decorators or that you use different functions with different names to 
> handle different names (I do not like that). 
> 
> On Mar 22, 3:13 am, Tom Atkins  wrote: 
> > I might be being naive here but in Flask I can do: 
> > 
> > @app.route('//users') 
> > ... def editusers(yoursitename): pass 
> > 
> > print url_for('editprofile', yoursitename='Supersite') 
> > 
> > gives: 
> > 
> > /Supersite/users 
> > 
> > On 22 March 2011 05:23, Jonathan Lundell  wrote: 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > > On Mar 21, 2011, at 7:44 PM, Indra Gunawan wrote: 
> > 
> > > Agree, Flask way looks more elegant (see Variable Rules). It could be 
> > > nice 
> > > if this way also exists on Web2Py. 
> > 
> > > On 22 March 2011 06:05, Tom Atkins  wrote: 
> > 
> > >> I was playing with Flask and I have to say its solution to routing is 
> > >> very 
> > >> nice: 
> > 
> > >>http://flask.pocoo.org/docs/quickstart/#routing 
> > 
> > >> The use of variable names anywhere within the URL structure is very 
> > >> handy. 
> > >> Anything like this possible in web2py? 
> > 
> > > Flask doesn't really allow variable names anywhere; near as I can tell 
> > > they're a considerably restricted version of web2py's args list.



[web2py] Re: new URL router use cases

2011-03-23 Thread Anthony
Massimo, I think Tom was referring to Flask's ability to include an arg at 
an arbitrary place in the URL path (e.g., '//users'), not the 
ability to specify the routes via decorators. I think the former *can* be 
achieved in web2py using the pattern-based rewrite system, right?
 
Anthony

On Wednesday, March 23, 2011 9:17:31 AM UTC-4, Massimo Di Pierro wrote:

> This is not an option in web2py because the controller is executed 
> after the requests arrives not imported before (as in Flask). Anyway, 
> that works better for simple apps but becomes a mess if you have many 
> functions because the routing info is scattered all over the place. 
> Moreover - when it comes to rest - it requires that you use the same 
> function for multiple methods (GET/POST/etc) by using multiple 
> decorators or that you use different functions with different names to 
> handle different names (I do not like that). 
>
> On Mar 22, 3:13 am, Tom Atkins  wrote: 
> > I might be being naive here but in Flask I can do: 
> > 
> > @app.route('//users') 
> > ... def editusers(yoursitename): pass 
> > 
> > print url_for('editprofile', yoursitename='Supersite') 
> > 
> > gives: 
> > 
> > /Supersite/users 
> > 
> > On 22 March 2011 05:23, Jonathan Lundell  wrote: 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > > On Mar 21, 2011, at 7:44 PM, Indra Gunawan wrote: 
> > 
> > > Agree, Flask way looks more elegant (see Variable Rules). It could be 
> nice 
> > > if this way also exists on Web2Py. 
> > 
> > > On 22 March 2011 06:05, Tom Atkins  wrote: 
> > 
> > >> I was playing with Flask and I have to say its solution to routing is 
> very 
> > >> nice: 
> > 
> > >>http://flask.pocoo.org/docs/quickstart/#routing 
> > 
> > >> The use of variable names anywhere within the URL structure is very 
> handy. 
> > >> Anything like this possible in web2py? 
> > 
> > > Flask doesn't really allow variable names anywhere; near as I can tell 
> > > they're a considerably restricted version of web2py's args list.



[web2py] Re: new URL router use cases

2011-03-23 Thread Massimo Di Pierro
This is not an option in web2py because the controller is executed
after the requests arrives not imported before (as in Flask). Anyway,
that works better for simple apps but becomes a mess if you have many
functions because the routing info is scattered all over the place.
Moreover - when it comes to rest - it requires that you use the same
function for multiple methods (GET/POST/etc) by using multiple
decorators or that you use different functions with different names to
handle different names (I do not like that).

On Mar 22, 3:13 am, Tom Atkins  wrote:
> I might be being naive here but in Flask I can do:
>
> @app.route('//users')
> ... def editusers(yoursitename): pass
>
> print url_for('editprofile', yoursitename='Supersite')
>
> gives:
>
> /Supersite/users
>
> On 22 March 2011 05:23, Jonathan Lundell  wrote:
>
>
>
>
>
>
>
> > On Mar 21, 2011, at 7:44 PM, Indra Gunawan wrote:
>
> > Agree, Flask way looks more elegant (see Variable Rules). It could be nice
> > if this way also exists on Web2Py.
>
> > On 22 March 2011 06:05, Tom Atkins  wrote:
>
> >> I was playing with Flask and I have to say its solution to routing is very
> >> nice:
>
> >>http://flask.pocoo.org/docs/quickstart/#routing
>
> >> The use of variable names anywhere within the URL structure is very handy.
> >> Anything like this possible in web2py?
>
> > Flask doesn't really allow variable names anywhere; near as I can tell
> > they're a considerably restricted version of web2py's args list.


Re: [web2py] Re: new URL router use cases

2011-03-22 Thread Indra Gunawan
Warning, TMIIW; Those technique require to load all exposed functions,
it won't act as lazy load (load on demand).

Thats I've read on Flask book :)

On 22 March 2011 23:06, Tom Atkins  wrote:

> It uses Werkzeug - full details here:
>
> http://werkzeug.pocoo.org/docs/routing/
>
>
> On 22 March 2011 14:49, Jonathan Lundell  wrote:
>
>>
>> Maybe so. Is there a formal definition of how Flask's routing works? All I
>> could find was a rather brief overview at the quickstart link.
>>
>>
-- 
coderbuzz


Re: [web2py] Re: new URL router use cases

2011-03-22 Thread Tom Atkins
It uses Werkzeug - full details here:

http://werkzeug.pocoo.org/docs/routing/

On 22 March 2011 14:49, Jonathan Lundell  wrote:

>
> Maybe so. Is there a formal definition of how Flask's routing works? All I
> could find was a rather brief overview at the quickstart link.
>
>


Re: [web2py] Re: new URL router use cases

2011-03-22 Thread Jonathan Lundell

On Mar 22, 2011, at 1:14 AM, Tom Atkins wrote:

> sorry - should have been:
> 
> @app.route('//users')
> ... def editusers(yoursitename): pass
> 
> print url_for('editusers', yoursitename='Supersite')
> 
> gives:
> 
> /Supersite/users

Maybe so. Is there a formal definition of how Flask's routing works? All I 
could find was a rather brief overview at the quickstart link.

> 
> On 22 March 2011 08:13, Tom Atkins  wrote:
> I might be being naive here but in Flask I can do:
> 
> @app.route('//users')
> ... def editusers(yoursitename): pass
> 
> print url_for('editprofile', yoursitename='Supersite')
> 
> gives:
> 
> /Supersite/users
> 
> 
> 
> On 22 March 2011 05:23, Jonathan Lundell  wrote:
> On Mar 21, 2011, at 7:44 PM, Indra Gunawan wrote:
>> Agree, Flask way looks more elegant (see Variable Rules). It could be nice 
>> if this way also exists on Web2Py.  
>> 
>> On 22 March 2011 06:05, Tom Atkins  wrote:
>> I was playing with Flask and I have to say its solution to routing is very 
>> nice:
>> 
>> http://flask.pocoo.org/docs/quickstart/#routing
>> 
>> The use of variable names anywhere within the URL structure is very handy. 
>> Anything like this possible in web2py?
> 
> Flask doesn't really allow variable names anywhere; near as I can tell 
> they're a considerably restricted version of web2py's args list.
> 
> 
> 



Re: [web2py] Re: new URL router use cases

2011-03-22 Thread Tom Atkins
sorry - should have been:

@app.route('//users')
... def editusers(yoursitename): pass

print url_for('editusers', yoursitename='Supersite')

gives:

/Supersite/users

On 22 March 2011 08:13, Tom Atkins  wrote:

> I might be being naive here but in Flask I can do:
>
> @app.route('//users')
> ... def editusers(yoursitename): pass
>
> print url_for('editprofile', yoursitename='Supersite')
>
> gives:
>
> /Supersite/users
>
>
>
> On 22 March 2011 05:23, Jonathan Lundell  wrote:
>
>> On Mar 21, 2011, at 7:44 PM, Indra Gunawan wrote:
>>
>> Agree, Flask way looks more elegant (see Variable Rules). It could be nice
>> if this way also exists on Web2Py.
>>
>> On 22 March 2011 06:05, Tom Atkins  wrote:
>>
>>> I was playing with Flask and I have to say its solution to routing is
>>> very nice:
>>>
>>> http://flask.pocoo.org/docs/quickstart/#routing
>>>
>>> The use of variable names anywhere within the URL structure is very
>>> handy. Anything like this possible in web2py?
>>>
>>
>> Flask doesn't really allow variable names anywhere; near as I can tell
>> they're a considerably restricted version of web2py's args list.
>>
>>
>


Re: [web2py] Re: new URL router use cases

2011-03-22 Thread Tom Atkins
I might be being naive here but in Flask I can do:

@app.route('//users')
... def editusers(yoursitename): pass

print url_for('editprofile', yoursitename='Supersite')

gives:

/Supersite/users



On 22 March 2011 05:23, Jonathan Lundell  wrote:

> On Mar 21, 2011, at 7:44 PM, Indra Gunawan wrote:
>
> Agree, Flask way looks more elegant (see Variable Rules). It could be nice
> if this way also exists on Web2Py.
>
> On 22 March 2011 06:05, Tom Atkins  wrote:
>
>> I was playing with Flask and I have to say its solution to routing is very
>> nice:
>>
>> http://flask.pocoo.org/docs/quickstart/#routing
>>
>> The use of variable names anywhere within the URL structure is very handy.
>> Anything like this possible in web2py?
>>
>
> Flask doesn't really allow variable names anywhere; near as I can tell
> they're a considerably restricted version of web2py's args list.
>
>


Re: [web2py] Re: new URL router use cases

2011-03-21 Thread Jonathan Lundell
On Mar 21, 2011, at 7:44 PM, Indra Gunawan wrote:
> Agree, Flask way looks more elegant (see Variable Rules). It could be nice if 
> this way also exists on Web2Py.  
> 
> On 22 March 2011 06:05, Tom Atkins  wrote:
> I was playing with Flask and I have to say its solution to routing is very 
> nice:
> 
> http://flask.pocoo.org/docs/quickstart/#routing
> 
> The use of variable names anywhere within the URL structure is very handy. 
> Anything like this possible in web2py?

Flask doesn't really allow variable names anywhere; near as I can tell they're 
a considerably restricted version of web2py's args list.



Re: [web2py] Re: new URL router use cases

2011-03-21 Thread Indra Gunawan
Agree, Flask way looks more elegant (see Variable Rules). It could be nice
if this way also exists on Web2Py.

On 22 March 2011 06:05, Tom Atkins  wrote:

> I was playing with Flask and I have to say its solution to routing is very
> nice:
>
> http://flask.pocoo.org/docs/quickstart/#routing
>
> The use of variable names anywhere within the URL structure is very handy.
> Anything like this possible in web2py?
>

-- 
coderbuzz


Re: [web2py] Re: new URL router use cases

2011-03-21 Thread pbreit
Yeah, I suspect it can be done with routing. This might be a common use case 
(ex: Github, Bitbucket, Twitter) so wondering if it's worth making sure it's 
well-supported?

Re: [web2py] Re: new URL router use cases

2011-03-21 Thread Tom Atkins
Thanks Jonathan!

What would be the mapping of, say, myapp.com/yoursitename/xyz?


yoursitename would be the first arg
I guess xyz would be the second arg - although it'd be handy if it could be
a controller or function!

Your suggestion solves my problem - I've just added:

functions=['admin', 'about', 'faq', 'accounts', 'etc']

to the dict for the app in routes.py and everything works (so far)!

As you suggest my index function in the default controller now handles the
args for /yoursitename etc just fine.

So all I need to do now is add all black-listed functions to that list of
values as I go along functional but not very elegant.

I was playing with Flask and I have to say its solution to routing is very
nice:

http://flask.pocoo.org/docs/quickstart/#routing

The use of variable names anywhere within the URL structure is very handy.
Anything like this possible in web2py?

On 21 March 2011 22:30, Jonathan Lundell  wrote:

> On Mar 21, 2011, at 2:37 PM, Tom Atkins wrote:
> > I am designing an app with a URL structure like this:
> >
> > myapp.com/yoursitename
> >
> > 'yoursitename' is effectively an argument as there could be many sites
> and users are allowed to create their own sites. But I'd like it to be 'top
> level'.
> >
> > Then within yoursitename there will be URLs like this:
> >
> > myapp.com/yoursitename/dashboard
> > myapp.com/yoursitename/users
> > myapp.com/yoursitename/settings
> >
> > I have a black-list of reserved top level words (e.g. /admin /about /faq
> /account etc) that are not allowed to be chosen.  So the site will have
> controllers to expose pages like:
> >
> > myapp.com/faq
> > myapp.com/about
> >
> > My question is what's the best / most efficient way to serve
> /yoursitename and the associated controllers?
> >
> > (I hope that makes sense!)
>
> What would be the mapping of, say, myapp.com/yoursitename/xyz? As a
> fully-expanded web2py URL? What are the app/controller/functions?
>
> If I understand your requirement correctly, the new router logic will do
> what you want. You'll need to specify a functions list in order to enable
> removal of the default function from the URL. So the expanded URL would be:
>
> myapp.com/yoursitename/users ->
> myapp.com/app/default/index/yoursitename/users, so you'd have
> request.args=['yoursitename', 'users'], and your default function would
> decide what to do with it.
>
> /admin and the like could be functions (like /app/default/admin), in which
> case you'd want to say: functions=['admin', 'about', 'faq', 'accounts',
> 'etc'] in the router control dict, or they can be controllers.


Re: [web2py] Re: new URL router use cases

2011-03-21 Thread Jonathan Lundell
On Mar 21, 2011, at 2:37 PM, Tom Atkins wrote:
> I am designing an app with a URL structure like this:
> 
> myapp.com/yoursitename
> 
> 'yoursitename' is effectively an argument as there could be many sites and 
> users are allowed to create their own sites. But I'd like it to be 'top 
> level'.
> 
> Then within yoursitename there will be URLs like this:
> 
> myapp.com/yoursitename/dashboard
> myapp.com/yoursitename/users
> myapp.com/yoursitename/settings
> 
> I have a black-list of reserved top level words (e.g. /admin /about /faq 
> /account etc) that are not allowed to be chosen.  So the site will have 
> controllers to expose pages like:
> 
> myapp.com/faq
> myapp.com/about
> 
> My question is what's the best / most efficient way to serve /yoursitename 
> and the associated controllers?
> 
> (I hope that makes sense!)

What would be the mapping of, say, myapp.com/yoursitename/xyz? As a 
fully-expanded web2py URL? What are the app/controller/functions?

If I understand your requirement correctly, the new router logic will do what 
you want. You'll need to specify a functions list in order to enable removal of 
the default function from the URL. So the expanded URL would be:

myapp.com/yoursitename/users -> myapp.com/app/default/index/yoursitename/users, 
so you'd have request.args=['yoursitename', 'users'], and your default function 
would decide what to do with it.

/admin and the like could be functions (like /app/default/admin), in which case 
you'd want to say: functions=['admin', 'about', 'faq', 'accounts', 'etc'] in 
the router control dict, or they can be controllers.

Re: [web2py] Re: new URL router use cases

2011-03-21 Thread Tom Atkins
Thanks for the reply - I've considered the subdomain option but don't want
to use it in this case.  This article:

http://warpspire.com/posts/url-design/

was previously linked on the forum
and summarises very well the reasons I'm keen to go for a URL structure as
proposed.

On 21 March 2011 22:08, David Warnock  wrote:

> Tom,
>
>
>>
> An alternative might be to use subdomains eg
>
> yoursitename.myapp.com
> yoursitename.myapp.com/dashboard
> yoursitename.myapp.com/users
>
> I am looking at this for deployment on google app engine (and have not yet
> looked at web2py support for it). My understanding is that google app engine
> can automatically use the subdomain to restrict the view of the data so that
> if I am logged into a.myapp,com I won't be able to access the data for
> b.myapp.com
>
> Sub domains give you nice scaling options in the future such as separate
> servers for each domain.
>
> What I can't help you with (because I am a web2py newbie) is how to make
> this work within web2py.
>
> Hope this helps
>
> Dave
>
> --
> Dave Warnock: http://42.blogs.warnock.me.uk
> Cycling Blog: http://42bikes.warnock.me.uk
>
>


Re: [web2py] Re: new URL router use cases

2011-03-21 Thread David Warnock
Tom,

I am designing an app with a URL structure like this:
>
> myapp.com/yoursitename
>
> 'yoursitename' is effectively an argument as there could be many sites and
> users are allowed to create their own sites. But I'd like it to be 'top
> level'.
>

An alternative might be to use subdomains eg

yoursitename.myapp.com
yoursitename.myapp.com/dashboard
yoursitename.myapp.com/users

I am looking at this for deployment on google app engine (and have not yet
looked at web2py support for it). My understanding is that google app engine
can automatically use the subdomain to restrict the view of the data so that
if I am logged into a.myapp,com I won't be able to access the data for
b.myapp.com

Sub domains give you nice scaling options in the future such as separate
servers for each domain.

What I can't help you with (because I am a web2py newbie) is how to make
this work within web2py.

Hope this helps

Dave

-- 
Dave Warnock: http://42.blogs.warnock.me.uk
Cycling Blog: http://42bikes.warnock.me.uk


Re: [web2py] Re: new URL router use cases

2011-03-21 Thread Tom Atkins
Just to  clarify - each 'yoursitename' is part of the same app - it could be
'youusername' or 'yourorganisation' depending on the app.  e.g. see github's
url structure:

https://github.com/isotoma/ 

isotoma is the 'username' or
'yoursitename' - it's top level but user chosen.  They also have reserved
URLs like:

https://github.com/plans

On 21 March 2011 21:51, VP  wrote:

> I think each "yoursitename" should be a different app.  I think it's
> most efficient that way.
>
>
> On Mar 21, 4:37 pm, Tom Atkins  wrote:
> > I am designing an app with a URL structure like this:
> >
> > myapp.com/yoursitename
> >
> > 'yoursitename' is effectively an argument as there could be many sites
> and
> > users are allowed to create their own sites. But I'd like it to be 'top
> > level'.
> >
> > Then within yoursitename there will be URLs like this:
> >
> > myapp.com/yoursitename/dashboard
> > myapp.com/yoursitename/users
> > myapp.com/yoursitename/settings
> >
> > I have a black-list of reserved top level words (e.g. /admin /about /faq
> > /account etc) that are not allowed to be chosen.  So the site will have
> > controllers to expose pages like:
> >
> > myapp.com/faq
> > myapp.com/about
> >
> > My question is what's the best / most efficient way to serve
> /yoursitename
> > and the associated controllers?
> >
> > (I hope that makes sense!)
>


[web2py] Re: new URL router use cases

2011-03-21 Thread VP
I think each "yoursitename" should be a different app.  I think it's
most efficient that way.


On Mar 21, 4:37 pm, Tom Atkins  wrote:
> I am designing an app with a URL structure like this:
>
> myapp.com/yoursitename
>
> 'yoursitename' is effectively an argument as there could be many sites and
> users are allowed to create their own sites. But I'd like it to be 'top
> level'.
>
> Then within yoursitename there will be URLs like this:
>
> myapp.com/yoursitename/dashboard
> myapp.com/yoursitename/users
> myapp.com/yoursitename/settings
>
> I have a black-list of reserved top level words (e.g. /admin /about /faq
> /account etc) that are not allowed to be chosen.  So the site will have
> controllers to expose pages like:
>
> myapp.com/faq
> myapp.com/about
>
> My question is what's the best / most efficient way to serve /yoursitename
> and the associated controllers?
>
> (I hope that makes sense!)


Re: [web2py] Re: new URL router use cases

2011-03-21 Thread Tom Atkins
I am designing an app with a URL structure like this:

myapp.com/yoursitename

'yoursitename' is effectively an argument as there could be many sites and
users are allowed to create their own sites. But I'd like it to be 'top
level'.

Then within yoursitename there will be URLs like this:

myapp.com/yoursitename/dashboard
myapp.com/yoursitename/users
myapp.com/yoursitename/settings

I have a black-list of reserved top level words (e.g. /admin /about /faq
/account etc) that are not allowed to be chosen.  So the site will have
controllers to expose pages like:

myapp.com/faq
myapp.com/about

My question is what's the best / most efficient way to serve /yoursitename
and the associated controllers?

(I hope that makes sense!)


[web2py] Re: new URL router use cases

2011-03-02 Thread Massimo Di Pierro
or simply

URL('static','images/filename')

the f= and c= are no longer necessary.

On Mar 2, 1:41 am, Jonathan Lundell  wrote:
> On Feb 22, 2011, at 11:47 PM, Johann Spies wrote:
>
> > Without the routes.py file I can work with the image in static/images but 
> > not when routes.py is active.
>
> Is it possible that you were using URL calls like this:
>
>         URL(... c='static/images', f='filename') ?
>
> If so, try changing them to this:
>
>         URL(... c='static', f='images/filename')


Re: [web2py] Re: new URL router use cases

2011-03-01 Thread Jonathan Lundell
On Feb 22, 2011, at 11:47 PM, Johann Spies wrote:
> Without the routes.py file I can work with the image in static/images but not 
> when routes.py is active.

Is it possible that you were using URL calls like this:

URL(... c='static/images', f='filename') ?

If so, try changing them to this:

URL(... c='static', f='images/filename')



Re: [web2py] Re: new URL router use cases

2011-02-23 Thread Jonathan Lundell
On Feb 22, 2011, at 11:47 PM, Johann Spies wrote:
> On 17 February 2011 21:33, Jonathan Lundell  wrote:
> On Feb 17, 2011, at 10:37 AM, Johann Spies wrote:
> > What are the actual URLs for the images in question? As they appear in the 
> > page source at the browser, I mean.
> >
> >
> > src="/kb/static/DSC_1403.png" (I moved the image from /kb/static/images to 
> > /kb/static - now it works.
> >
> >  I would still like to know how to get imgages in static/images to work 
> > with this routing system.
> >
> >
> > src="/sadec/static/sadc.png"
> 
> It should "just work". Can you double-check your names?
> 
> Also, please try it (with files in static/images) with routing turned off 
> (rename routes.py and restart web2py).
> 
> If that doesn't resolve things, I'll try a more extended test at my end.
> 
> Without the routes.py file I can work with the image in static/images but not 
> when routes.py is active.

With routes.py in place, can you access something in static/images with their 
full (unshortened) URL?

And is this still the routers dict you're using? Anything besides BASE?

   # base router
 
BASE = dict(
  
default_application = 'kb', 
  
domains = { 
  
 'kbase.sun.ac.za' : 'kb',  
  
'kbase' : 'kb', 
  
'sadcpublications.sun.ac.za' : 'sadec'  
  
},  
  
applications = ['kb', 'sadec'],
controllers = 'DEFAULT' 
  
),   


Re: [web2py] Re: new URL router use cases

2011-02-22 Thread Johann Spies
On 17 February 2011 21:33, Jonathan Lundell  wrote:

> On Feb 17, 2011, at 10:37 AM, Johann Spies wrote:
> > What are the actual URLs for the images in question? As they appear in
> the page source at the browser, I mean.
> >
> >
> > src="/kb/static/DSC_1403.png" (I moved the image from /kb/static/images
> to /kb/static - now it works.
> >
> >  I would still like to know how to get imgages in static/images to work
> with this routing system.
> >
> >
> > src="/sadec/static/sadc.png"
>
> It should "just work". Can you double-check your names?
>
> Also, please try it (with files in static/images) with routing turned off
> (rename routes.py and restart web2py).
>
> If that doesn't resolve things, I'll try a more extended test at my end.
>

Without the routes.py file I can work with the image in static/images but
not when routes.py is active.

Regards
Johann

-- 
 May grace and peace be yours in abundance through the full knowledge of God
and of Jesus our Lord!  His divine power has given us everything we need for
life and godliness through the full knowledge of the one who called us by
his own glory and excellence.
2 Pet. 1:2b,3a


Re: [web2py] Re: new URL router use cases

2011-02-18 Thread pbreit
Ah, ok. Yeah it's working correctly.

Re: [web2py] Re: new URL router use cases

2011-02-18 Thread Jonathan Lundell
On Feb 18, 2011, at 12:57 PM, pbreit wrote:
> How do I hide "/myapp/default" ?

Just set default_application (in BASE) to "myapp". default_controller is set to 
"default" by default, and the rest happens automatically.


I made a change just before the 1.92.1 release. By default, static URLs are not 
shortened. In this case, URLs like /myapp/static/something don't have "myapp" 
hidden.

There are two reasons for this. One is that static URLs are typically invisible 
to users, so it doesn't matter. The more important reason is to make life 
easier for external routing of static URLs (by Apache or GAE, for example).

You can override this behavior, and get app-hiding back for static URLs, by 
setting map_static=True.



[web2py] Re: new URL router use cases

2011-02-18 Thread pbreit
How do I hide "/myapp/default" ?

[web2py] Re: new URL router use cases

2011-02-18 Thread Anthony
This is great. To avoid confusion, though, would it make more sense to move 
this material into the "URL Rewrite" section of Chapter 4: 
http://web2py.com/book/default/chapter/04#URL-Rewrite
 
Maybe keep the first paragraph of that section and then mention that there 
are now two distinct URL rewriting systems -- for most use cases, a fairly 
simple router-based system (involving dictionaries of routing parameters), 
and for more complex cases, a powerful regular expression based system. Then 
create two subsections to explain the two systems (e.g., "Router System" and 
"Pattern Matching System", or something along those lines). For app-specific 
routing, we could either keep the "Application-Specific URL Rewrite" 
subsection (
http://web2py.com/book/default/chapter/04#Application-Specific-URL-Rewrite) 
and simply expand it to include the new router system, or instead include 
separate app-specific rewrite subsections within the Router and Pattern 
Matching sections.
 
It's also probably worth mentioning the following somewhere:

   - Although the router example file is called router.example.py, the 
   routers still need to go in routes.py (i.e., not router.py). 
   - You cannot mix router dictionaries with the old regex routes_in and 
   routes_out (yet). 
   - routes_onerror still works the same regardless of which routing system 
   you're using (i.e., still regex based).

Anthony

On Friday, February 18, 2011 1:16:35 PM UTC-5, cjrh wrote:

> On Feb 17, 8:02 am, Jonathan Lundell  wrote: 
> > Please do. Take a look at router.example.py as well; there's at least 
> one new feature there (path_prefix). I can review the material any time 
> you're ready. 
>
> Ok, here is a first draft. 
>
> http://web2py.com/book/default/chapter/11#Modify-the-URL-with-the-Router 
>
> I followed your guide pretty faithfully, mosly adding the markmin 
> markup where application.   Now at least you (and others) can refer 
> people to the formal documentation. 
>
> If you want me to add or change stuff, please email me directly. 
> Google groups makes it too difficult to keep track of older threads.



[web2py] Re: new URL router use cases

2011-02-18 Thread cjrh
On Feb 18, 8:16 pm, cjrh  wrote:
> Ok, here is a first draft.
>
> http://web2py.com/book/default/chapter/11#Modify-the-URL-with-the-Router

http://web2py.com/book/default/chapter/11#Modifying-the-URL

(refactored the section heading)


[web2py] Re: new URL router use cases

2011-02-18 Thread cjrh
On Feb 17, 8:02 am, Jonathan Lundell  wrote:
> Please do. Take a look at router.example.py as well; there's at least one new 
> feature there (path_prefix). I can review the material any time you're ready.

Ok, here is a first draft.

http://web2py.com/book/default/chapter/11#Modify-the-URL-with-the-Router

I followed your guide pretty faithfully, mosly adding the markmin
markup where application.   Now at least you (and others) can refer
people to the formal documentation.

If you want me to add or change stuff, please email me directly.
Google groups makes it too difficult to keep track of older threads.


Re: [web2py] Re: new URL router use cases

2011-02-18 Thread Jonathan Lundell
On Feb 17, 2011, at 10:37 AM, Johann Spies wrote:
> src="/kb/static/DSC_1403.png" (I moved the image from /kb/static/images to 
> /kb/static - now it works. 
> 
>  I would still like to know how to get imgages in static/images to work with 
> this routing system.

I tested this with one of my apps that uses several subdirectories in static, 
and it seems to work fine. (This is with 1.92.1.)

Can you tell where the problem is? When you add the images directory, do the 
URLs in the browser look OK?

Re: [web2py] Re: new URL router use cases

2011-02-17 Thread Jonathan Lundell
On Feb 17, 2011, at 11:54 AM, pbreit wrote:
> I'm still confused by routing.
> 
> 1) I see routers.example.py and routes.example.py. Which do I use? Should it 
> be named routers.py or routes.py? Do they work together? Which can be used at 
> the app level?

You choose one or the other, as routes.py.

Either can be used at the app level, though if you do so, you need a root 
routes.py as well.

With router.example.py, it's probably just as easy to put the app-specfic 
routing configuration(s) in the root router, though.

> 2) What would a routing file look like that matches the current default 
> routing behavior? I would much prefer to have explicit routing. I don't like 
> that routing is "off" be default.

"Routing" is perhaps a slightly misleading name. The default is to treat the 
first three elements of a URL as application/controller/function, to split the 
remaining path elements into request.args (a list), and to put the query string 
in request.vars (a dictionary).

If there are fewer than three elements in the URL, the URL is (effectively) 
filled out as required with /init/default/index.

The function of routes.py is to map the incoming URL to the above format, and 
vice versa for outgoing URLs.

> 3) I would think one of the most important and simplest use cases would be: 
> hide the default application name, hide "default" and hide "index". This 
> would be so that someone could role out one application on a server and have 
> clean, user-friendly URLs.

Yes.

> 4) Does the new routing functionality support mixed regex and non-regex?

No, though it's on the list for future enhancement.

Re: [web2py] Re: new URL router use cases

2011-02-17 Thread pbreit
I'm still confused by routing.

1) I see routers.example.py and routes.example.py. Which do I use? Should it 
be named routers.py or routes.py? Do they work together? Which can be used 
at the app level?

2) What would a routing file look like that matches the current default 
routing behavior? I would much prefer to have explicit routing. I don't like 
that routing is "off" be default.

3) I would think one of the most important and simplest use cases would be: 
hide the default application name, hide "default" and hide "index". This 
would be so that someone could role out one application on a server and have 
clean, user-friendly URLs.

4) Does the new routing functionality support mixed regex and non-regex?


Re: [web2py] Re: new URL router use cases

2011-02-17 Thread Jonathan Lundell
On Feb 17, 2011, at 10:37 AM, Johann Spies wrote:
> What are the actual URLs for the images in question? As they appear in the 
> page source at the browser, I mean.
> 
> 
> src="/kb/static/DSC_1403.png" (I moved the image from /kb/static/images to 
> /kb/static - now it works. 
> 
>  I would still like to know how to get imgages in static/images to work with 
> this routing system.
> 
> 
> src="/sadec/static/sadc.png" 

It should "just work". Can you double-check your names?

Also, please try it (with files in static/images) with routing turned off 
(rename routes.py and restart web2py).

If that doesn't resolve things, I'll try a more extended test at my end.

I wrote a unit test, below, that seems to work OK. The extra kb & sadec router 
entries are there because the apps aren't in my file system; you don't need 
them.

def test_johann_spies(self):
'''
test Johann Spies router
'''
router_js = dict(
BASE = dict(
default_application = 'kb',
domains = {
'kbase.sun.ac.za' : 'kb',
'kbase' : 'kb',
'sadcpublications.sun.ac.za' : 'sadec'
},
applications = ['kb', 'sadec'],
),
kb = dict(),
sadec = dict(),
)
load(rdict=router_js)
self.assertEqual(filter_url('http://kbase.sun.ac.za/'), 
'/kb/default/index')
self.assertEqual(filter_url('http://kbase/'), 
'/kb/default/index')
self.assertEqual(filter_url('http://sadcpublications.sun.ac.za/'), 
'/sadec/default/index')
self.assertEqual(filter_url('http://kbase.sun.ac.za/static/file.css'), 
'%s/applications/kb/static/file.css' % root)
self.assertEqual(filter_url('http://kbase.sun.ac.za/static/file.css'), 
'%s/applications/kb/static/file.css' % root)

self.assertEqual(filter_url('http://kbase.sun.ac.za/static/DSC_1403.png'), 
'%s/applications/kb/static/DSC_1403.png' % root)

self.assertEqual(filter_url('http://kbase.sun.ac.za/static/images/DSC_1403.png'),
 
'%s/applications/kb/static/images/DSC_1403.png' % root)
self.assertEqual(filter_url('http://kbase/static/images/DSC_1403.png'), 
'%s/applications/kb/static/images/DSC_1403.png' % root)



Re: [web2py] Re: new URL router use cases

2011-02-17 Thread Johann Spies
> No, this is a special case for favicon.ico and robots.txt
>
> By "root_static" (which I agree is a little confusing), we mean static
> files like favicon.ico that are always accessed in the server root. This is
> simply a list of those files (and the default list should normally be all
> you need) that tells web2py which application's static directory to fetch
> the files from.
>
>
> I have two applications and at the moment have the following:
>
># base
> router
>
> BASE =
> dict(
>
> default_application =
> 'kb',
>
> domains =
> {
>
>  'kbase.sun.ac.za' :
> 'kb',
>
> 'kbase' :
> 'kb',
>
> 'sadcpublications.sun.ac.za' :
> 'sadec'
>
>
> },
>
> applications = ['kb', 'sadec'],
> controllers =
> 'DEFAULT'
>
> ),
>
> Both sadec and  kb makes use of a front page image:
> in sadec/static for sadec
> and in
> kb/static/images for kb
>
> While sadec shows the image kb can't find it.
>
> I have used autoroutes before but that breaks jqgrid.  Now with this jqgrid
> seems to work.
>
> If I can just solve the problem of /static/images it will help - that
> is until I discover something else routes.py has broken...
>
>
> What are the actual URLs for the images in question? As they appear in the
> page source at the browser, I mean.
>
>
src="/kb/static/DSC_1403.png
http://kbase.sun.ac.za/kb/static/DSC_1403.png>" (I moved
the image from /kb/static/images to /kb/static - now it works.
 I would still like to know how to get imgages in static/images to
work with this routing system.


src="/sadec/static/sadc.png
http://sadcpublications.sun.ac.za/sadec/static/sadc.png>"

Regards
Johann


-- 
 May grace and peace be yours in abundance through the full knowledge of God
and of Jesus our Lord!  His divine power has given us everything we need for
life and godliness through the full knowledge of the one who called us by
his own glory and excellence.
2 Pet. 1:2b,3a


Re: [web2py] Re: new URL router use cases

2011-02-17 Thread Jonathan Lundell
On Feb 17, 2011, at 4:58 AM, Johann Spies wrote:
> On 17 February 2011 08:02, Jonathan Lundell  wrote:
> On Feb 16, 2011, at 9:49 PM, cjrh wrote:
> >
> > On Feb 16, 11:38 pm, Jonathan Lundell  wrote:
> >> [I'm reposting this message from a while back, because the new release 
> >> 1.92.1 contains it for the first time. It describes some simple use cases 
> >> for the new URL router. Note that there are still some things that you'll 
> >> need the existing regex-based router for, but for most cases the new one 
> >> should work and be easier to configure.]
> >
> > May I add this text to the book, now that the router is in the latest
> > stable release version?I don't want to step on your toes, if you
> > were planning to do this yourself soon anyway, then that's fine too.
> 
> Please do. Take a look at router.example.py as well; there's at least one new 
> feature there (path_prefix). I can review the material any time you're ready.
> 
> 
> I am afraid router.example.py did not help me a lot.
> 
> What is unclear to me is how to use root_static.  The documetation says:
> 
> #  root_static: list of static files accessed from root
> #   (mapped to the current application's static/ directory)
> #   Each application has its own root-static files.
> 
> The example did not show any reference to an application.
> 
> So do I have to list all the  files all the applications will user from 
> 'static' in the same list?

No, this is a special case for favicon.ico and robots.txt

By "root_static" (which I agree is a little confusing), we mean static files 
like favicon.ico that are always accessed in the server root. This is simply a 
list of those files (and the default list should normally be all you need) that 
tells web2py which application's static directory to fetch the files from.

> 
> I have two applications and at the moment have the following:
> 
># base router  
>
> BASE = dict(  
> 
> default_application = 'kb',   
> 
> domains = {   
> 
>  'kbase.sun.ac.za' : 'kb',
> 
> 'kbase' : 'kb',   
> 
> 'sadcpublications.sun.ac.za' : 'sadec'
> 
> },
> 
> applications = ['kb', 'sadec'],
> controllers = 'DEFAULT'   
> 
> ),   
> 
> Both sadec and  kb makes use of a front page image:
> in sadec/static for sadec
> and in
> kb/static/images for kb
> 
> While sadec shows the image kb can't find it.
> 
> I have used autoroutes before but that breaks jqgrid.  Now with this jqgrid 
> seems to work. 
> 
> If I can just solve the problem of /static/images it will help - that is 
> until I discover something else routes.py has broken... 


What are the actual URLs for the images in question? As they appear in the page 
source at the browser, I mean.



Re: [web2py] Re: new URL router use cases

2011-02-17 Thread Johann Spies
On 17 February 2011 08:02, Jonathan Lundell  wrote:

> On Feb 16, 2011, at 9:49 PM, cjrh wrote:
> >
> > On Feb 16, 11:38 pm, Jonathan Lundell  wrote:
> >> [I'm reposting this message from a while back, because the new release
> 1.92.1 contains it for the first time. It describes some simple use cases
> for the new URL router. Note that there are still some things that you'll
> need the existing regex-based router for, but for most cases the new one
> should work and be easier to configure.]
> >
> > May I add this text to the book, now that the router is in the latest
> > stable release version?I don't want to step on your toes, if you
> > were planning to do this yourself soon anyway, then that's fine too.
>
> Please do. Take a look at router.example.py as well; there's at least one
> new feature there (path_prefix). I can review the material any time you're
> ready.
>
>
I am afraid router.example.py did not help me a lot.

What is unclear to me is how to use root_static.  The documetation says:

#  root_static: list of static files accessed from root
#   (mapped to the current application's static/ directory)
#   Each application has its own root-static files.

The example did not show any reference to an application.

So do I have to list all the  files all the applications will user from
'static' in the same list?

I have two applications and at the moment have the following:

   # base
router

BASE =
dict(

default_application =
'kb',

domains =
{

 'kbase.sun.ac.za' :
'kb',

'kbase' :
'kb',

'sadcpublications.sun.ac.za' :
'sadec'


},

applications = ['kb', 'sadec'],
controllers =
'DEFAULT'

),

Both sadec and  kb makes use of a front page image:
in sadec/static for sadec
and in
kb/static/images for kb

While sadec shows the image kb can't find it.

I have used autoroutes before but that breaks jqgrid.  Now with this jqgrid
seems to work.

If I can just solve the problem of /static/images it will help - that
is until I discover something else routes.py has broken...

Regards
Johann

-- 
 May grace and peace be yours in abundance through the full knowledge of God
and of Jesus our Lord!  His divine power has given us everything we need for
life and godliness through the full knowledge of the one who called us by
his own glory and excellence.
2 Pet. 1:2b,3a


[web2py] Re: new URL router use cases

2011-02-16 Thread cjrh
On Feb 17, 8:02 am, Jonathan Lundell  wrote:
> On Feb 16, 2011, at 9:49 PM, cjrh wrote:
>
> > On Feb 16, 11:38 pm, Jonathan Lundell  wrote:
> >> [I'm reposting this message from a while back, because the new release 
> >> 1.92.1 contains it for the first time. It describes some simple use cases 
> >> for the new URL router. Note that there are still some things that you'll 
> >> need the existing regex-based router for, but for most cases the new one 
> >> should work and be easier to configure.]
>
> > May I add this text to the book, now that the router is in the latest
> > stable release version?    I don't want to step on your toes, if you
> > were planning to do this yourself soon anyway, then that's fine too.
>
> Please do. Take a look at router.example.py as well; there's at least one new 
> feature there (path_prefix). I can review the material any time you're ready.

Ok, I'll give it a shot.  I read through (skimmed, tbh)
router.example.py last night, it's quite comprehensive.  For the book,
I would prefer to put a whole bunch of examples of typical use cases
in addition to the formal feature spec since many people, me included,
grok examples much faster than specs.


Re: [web2py] Re: new URL router use cases

2011-02-16 Thread Jonathan Lundell
On Feb 16, 2011, at 9:49 PM, cjrh wrote:
> 
> On Feb 16, 11:38 pm, Jonathan Lundell  wrote:
>> [I'm reposting this message from a while back, because the new release 
>> 1.92.1 contains it for the first time. It describes some simple use cases 
>> for the new URL router. Note that there are still some things that you'll 
>> need the existing regex-based router for, but for most cases the new one 
>> should work and be easier to configure.]
> 
> May I add this text to the book, now that the router is in the latest
> stable release version?I don't want to step on your toes, if you
> were planning to do this yourself soon anyway, then that's fine too.

Please do. Take a look at router.example.py as well; there's at least one new 
feature there (path_prefix). I can review the material any time you're ready.




[web2py] Re: new URL router use cases

2011-02-16 Thread cjrh
On Feb 16, 11:38 pm, Jonathan Lundell  wrote:
> [I'm reposting this message from a while back, because the new release 1.92.1 
> contains it for the first time. It describes some simple use cases for the 
> new URL router. Note that there are still some things that you'll need the 
> existing regex-based router for, but for most cases the new one should work 
> and be easier to configure.]

May I add this text to the book, now that the router is in the latest
stable release version?I don't want to step on your toes, if you
were planning to do this yourself soon anyway, then that's fine too.

regards
cjrh