[Twisted-web] url.URL.fromRequest gives unexpected behaviour

Donovan Preston dp at ulaluma.com
Tue Sep 14 08:03:22 MDT 2004


On Sep 8, 2004, at 7:35 AM, Matt Goodall wrote:

> Hi,
>
> URL.fromRequest() currently creates a URL for the path segments that
> have been resolved so far. That means that creating a URL in 
> locateChild
> and a rend_* method gives you a different URL. That's unexpected.

Hi, sorry for not responding for so long.

This is actually intentional behavior and is expected -- but so much of 
the url module seems surprising to other people that I think we have to 
stop and seriously revisit it.

> I think we need more explicit ways of creating a URL to allow for
> different usecases:
>
>
> URL.fromString(aStr)
>     create a URL from the string. this is already implemented
>
> URL.fromRequestURI(aRequest)
>     create a URL that matches the request exactly

This would always return a URL object which could reproduce the URL 
used to make the current request. This would be a good thing. But what 
exactly does the URI at the end of the method name indicate?

> URL.fromContext(aContext)
>     create a URL for handled path segments. kind of like the
>     url.here overlay but not so lazy.

Recently, I changed the way keeping track of the current segments works 
by remembering ICurrentSegments and IRemainingSegments in the context. 
Since each Page gets it's own Context object, URL.fromContext could be 
explicitly given a Context object which is at the level for which you 
want the url generated. For example, if you are requesting the url 
/foo/bar/baz but you want a URL object for just /foo, you could find 
the Context object representing this and do URL.fromContext with it. 
(You could find it in the appropriate locateChild, or you could find it 
by climbing the Context .parent chain). This would be a nice way to 
build breadcrumb trails.

> A better name for fromContext might be fromLocation, fromSegment, etc.
>
>
> We can deprecate URL.fromRequest but, until it's removed, make it call
> fromContext.

I don't think we should deprecate fromRequest, just change what it does 
semantically. I don't think anyone was relying on the old behavior, 
anyway.

dp




More information about the Twisted-web mailing list