Hi Mike,

thank you so much for this insight into your way of tracing this, and for 
the provided work-around (which I could really have come up with myself…).

3. next I want to whack the monkeypatched thing, because that's a lot of 
> code that I don't want to be involved in the issue.  Fortunately, just 
> taking it out, behavior still reproduces.   This means it's not part of 
> the issue. 
>

Yeah, it was unnecessary in the example. Sorry.
 

>
> 8. Where do we get a Tag() from?  Weird, there is no call to Tag() 
> anywhere at all.  Is this relying on some behavior of association proxy? 
>    The only assocs that could do this are the tag_key and 
> tag_value...but....which one sets up Tag()?   I have no idea how the 
> association proxy handles this. 
>
> 9. after testing a few things (is it creating two Tag() objects for each 
> one?  it's not.  changing order of attributes affects it? not really) 
> it looks like I still don't know why value is set or not. 
>
>
> 10. Well let's at least confirm this is where the issue originates: 
>
>      tags = association_proxy("elements_tags", "tag_value", 
>                               creator=lambda k, v: 
> ElementsTags(tag=Tag(key=k, value=v))) 
>
> that is, don't try to challenge the association proxy to work in 
> multiple levels of nesting, just keep it simple.  bug is gone.  OK, so 
> association proxy definitely tripping up on setting up via two 
> association proxies inside the constructor of another (not too 
> surprising).    We know it isn't creating two Tag objects.  So, assoc 
> proxy just doesn't want to set "value" sometimes. 
>

Hmm. OK. Let me point out once more that this scheme is copied verbatim 
from the official SQLAlchemy documentation: 
http://docs.sqlalchemy.org/en/latest/orm/extensions/associationproxy.html#composite-association-proxies
 
. The difference is that the key attribute (special_key in the example from 
the documentaiton) is also proxied. So I guess it is something with 
aligning a list of the keys with the list of values, or something (mind 
you: setting the *value* breaks when the *key* is another proxy!)… No idea, 
but the way the proxy is set up comes from the docs.

 For now, I just changed the code to your proposed work-around. I will see 
what I can do for debugging the cause of the issue.

Cheers,
Nik

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to