#579: ProductizedHref fails for dicts as first argument
---------------------------+-----------------------
Reporter: olemis | Owner: gjm
Type: defect | Status: review
Priority: major | Milestone: Release 7
Component: multiproduct | Version:
Resolution: | Keywords: web href
---------------------------+-----------------------
Changes (by olemis):
* owner: olemis => gjm
Old description:
> Productized Href breaks Href contract when dict objects are passed as
> first argument. See sample code below
>
> {{{#!py
>
> >>> from trac.web.href import Href
> >>> h = Href('/x/y')
> >>> p = dict(a=1,b=2,c=3)
> >>> h(p)
> '/x/y?a=1&c=3&b=2'
> >>> from multiproduct.hooks import ProductizedHref
> >>> help(ProductizedHref)
>
> >>> help(ProductizedHref)
>
> >>> phref = ProductizedHref(h, 'z')
> >>> phref(p)
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> File "multiproduct/hooks.py", line 106, in __call__
> filter(lambda x: args[0].startswith(x), self.STATIC_PREFIXES):
> File "multiproduct/hooks.py", line 106, in <lambda>
> filter(lambda x: args[0].startswith(x), self.STATIC_PREFIXES):
> AttributeError: 'dict' object has no attribute 'startswith'
> }}}
New description:
Productized Href breaks Href contract when dict objects are passed as
first argument. See sample code below
{{{#!py
>>> from trac.web.href import Href
>>> h = Href('/x/y')
>>> p = dict(a=1,b=2,c=3)
>>> h(p)
'/x/y?a=1&c=3&b=2'
>>> from multiproduct.hooks import ProductizedHref
>>> phref = ProductizedHref(h, 'z')
>>> phref(p)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "multiproduct/hooks.py", line 106, in __call__
filter(lambda x: args[0].startswith(x), self.STATIC_PREFIXES):
File "multiproduct/hooks.py", line 106, in <lambda>
filter(lambda x: args[0].startswith(x), self.STATIC_PREFIXES):
AttributeError: 'dict' object has no attribute 'startswith'
}}}
--
Comment:
This is what I get now
{{{#!py
>>> from trac.web.href import Href
>>> h = Href('/x/y')
>>> p = dict(a=1,b=2,c=3)
>>> h(p)
'/x/y?a=1&c=3&b=2'
>>> from multiproduct.hooks import ProductizedHref
>>> phref = ProductizedHref(h, 'z')
>>> phref(p)
'z?a=1&c=3&b=2'
}}}
Looks much better, but now that I take a look I'm not sure either of
whether that's the expected behavior. I just tried to fix the error and
stay a bit out of the way wrt semantics. I really only use
`ProductizedHref` in my local testing environment; never in production
(that I recall), so I guess **now** I'm not the right person to comment on
this subject, beyond my comments above. I'm forwarding this review request
to gjm . He might have a few ideas.
--
Ticket URL: <https://issues.apache.org/bloodhound/ticket/579#comment:7>
Apache Bloodhound <https://issues.apache.org/bloodhound/>
The Apache Bloodhound issue tracker