The problem is that you haven't assigned a "creator" for tag_value, so when
the "value" kwarg is handled first, it creates the Tag, assigns the value
to "key", leaves "value" at None, and then "key" is overwritten by tag_key.
  When "key" is handled first, everything works fine.

On Saturday, September 10, 2016, Dominik George <[email protected]> wrote:

> 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 [email protected]
> <javascript:_e(%7B%7D,'cvml','sqlalchemy%[email protected]');>
> .
> To post to this group, send email to [email protected]
> <javascript:_e(%7B%7D,'cvml','[email protected]');>.
> Visit this group at https://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to