On Mon, Jul 12, 2010 at 9:09 AM, BrianTheLion <[email protected]> wrote:
> I have created a function, myurl, that I use as a replacement for
> pylons.url with the goal of giving fully-qualified URLs by default. I
> implement this functionality by applying the keyword argument
> "qualified=True" to everything. E.g.,
>
> def myurl(*args,**dargs) :
>    dargs['qualified']=True
>    return url(*args,**dargs)
>
> Now, per the documentation, I have a static route to an external
> website declared as follows:
>
> map.connect('create_facebook_page', 'http://www.facebook.com/pages/
> create.php', _static=True)
>
> When I call myurl('create_facebook_page') - hence,
> url( 'create_facebook_page',qualified=True) - I get the nonsensical
> result "http://myhost//www.facebook.com/pages/create.php";.
>
> To me, this does not seem like the most desirable behavior. Ideally,
> pylons.url would be "smart" enough to know that routes to external
> sites do not need further qualification, and would simply ignore the
> qualified=True option. As a second-best, it would throw an error.
>
> Does anyone want to chime in before I file a ticket? I am on v0.9.7.
> Perhaps this is corrected in v1.0?

No, it's still doing it in Routes 1.12.1 .

I tend to agree that 'qualified' should be assumed to be true for
external routes, and maybe all the generation options should be
disallowed? I also don't think _static should be necessary because
it's obvious from the route path that it's external. In the routes-exp
branch I automatically make the route external if it contains ":"
before "/".

"""
>>> import pkg_resources
>>> d = pkg_resources.get_distribution("Routes")
>>> d.version
'1.12.1'
>>> import routes
>>> m = routes.Mapper()
>>> m.connect("create_facebook_page", 
>>> "http://www.facebook.com/pages/create.php";, _static=True)
>>> m.generate("create_facebook_page")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File 
"/home/mso/.virtualenvs/cameo2/lib/python2.6/site-packages/routes/mapper.py",
line 809, in generate
    for key in route.hardcoded:
AttributeError: 'str' object has no attribute 'hardcoded'
>>> # Not sure why I can't call .generate directly.
>>> url = routes.URLGenerator(m)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __init__() takes exactly 3 arguments (2 given)
>>> url = routes.URLGenerator(m, {"HTTP_HOST": "localhost"})
>>> url("create_facebook_page")
'http://www.facebook.com/pages/create.php'
>>> url("create_facebook_page", qualified=True)
'http://localhost/http://www.facebook.com/pages/create.php'
>>> m = routes.Mapper()
>>> m.connect("create_facebook_page", 
>>> "http://www.facebook.com/pages/create.php";)
>>> url = routes.URLGenerator(m, {"HTTP_HOST": "localhost"})
>>> url("create_facebook_page")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File 
"/home/mso/.virtualenvs/cameo2/lib/python2.6/site-packages/routes/util.py",
line 419, in __call__
    (args, kargs))
routes.util.GenerationException: Could not generate URL. Called with
args: ('create_facebook_page',) {}
>>> # So it doesn't like external routes created without the _static arg.
>>> url("create_facebook_page", qualified=True)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File 
"/home/mso/.virtualenvs/cameo2/lib/python2.6/site-packages/routes/util.py",
line 419, in __call__
    (args, kargs))
routes.util.GenerationException: Could not generate URL. Called with
args: ('create_facebook_page',) {}
>>>
"""

-- 
Mike Orr <[email protected]>

-- 
You received this message because you are subscribed to the Google Groups 
"pylons-discuss" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/pylons-discuss?hl=en.

Reply via email to