On Sep 7, 2010, at 10:12 AM, Kent Bower wrote:

> Mike, in your proof of concept, when __getstate__ detected transient, why did 
> you need to make a copy of self.__dict__? "self.__dict__.copy()"

i was modifying the __dict__ from what would be expected in a non-serialized 
object, so that was to leave the original object being serialized unchanged.

> 
> 
> 
> On 9/6/2010 2:35 PM, Michael Bayer wrote:
>> 
>> On Sep 6, 2010, at 2:11 PM, Kent Bower wrote:
>> 
>>> Also, I was hoping you would tell me whether this would be a candidate for 
>>> subclassing InstrumentedAttribute?  Would that make more sense or providing 
>>> custom __getstate__ & __setstate__ ?
>> __getstate__ / __setstate__ are pretty much what I like to use for pickle 
>> stuff, unless some exotic situation makes me have to use __reduce__.   One 
>> problem with the recipe is that theres no 'deferred' loading of attributes.  
>>  So in that sense playing with InstrumentedAttribute would give you a chance 
>> to put a callable in there that does what you want.
>> 
>> There is also the possibility that __setstate__ can load up callables into 
>> the instance_state using state.set_callable().   This is a callable that 
>> triggers when you access the attribute that is otherwise None.   There's a 
>> little bit of fanfare required to get that callable to assign to the 
>> attribute in the right way.   Attached is an example of that.   This is all 
>> a little more shaky since the state/callable API isn't really public.  
>> Hasn't changed for awhile but there's no guarantee.
>> 
>> 
>> 
>> 
>> 
>> 
>>> Thanks for your help, hopefully I'll be able to contribute such a recipe. 
>>> 
>>> Kent
>>> 
>>> 
>>> 
>>>>> Since sqla won't load that for me in the case of transient, I need to 
>>>>> load the relation manually (unless you feel like enhancing that as well). 
>>>> its not an enhancement - it was a broken behavior that was specifically 
>>>> removed.   The transient object has no session, so therefore no SQL can be 
>>>> emitted - there's no context established.  
>>>> 
>>>> 
>>>> 
>>>>> Now I can manually emulate the obj being persistent with your changes for 
>>>>> 
>>>>> On Sep 6, 2010, at 10:58 AM, Michael Bayer <mike...@zzzcomputing.com> 
>>>>> wrote:
>>>>> 
>>>>>> On Sep 6, 2010, at 9:06 AM, Kent wrote:
>>>>>> 
>>>>>>> with_parent seems to add a join condition.  
>>>>>> OK, so I guess you read the docs which is why you thought it joined and 
>>>>>> why you didn't realize it doesn't work for transient.  r20b6ce05f194 
>>>>>> changes all that so that with_parent() accepts transient objects and 
>>>>>> will do the "look at the attributes" thing.   The docs are updated as 
>>>>>> this method does use the lazy loader SQL mechanism, not a join.
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>>> Is there a way to get at
>>>>>>> the query object that would be rendered from a lazy load (or what
>>>>>>> "subqueryload" would render on the subsequent load), but on a
>>>>>>> transient object, if i supply the session?
>>>>>>> 
>>>>>>> even though not "recommended", can it make sqla believe my transient
>>>>>>> object is detached by setting its state key?
>>>>>>> 
>>>>>>> There are reasons i do not want to add this to the session and
>>>>>>> disabling autoflush would also cause problems.
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> On Sep 3, 9:58 am, Michael Bayer <mike...@zzzcomputing.com> wrote:
>>>>>>>> On Sep 3, 2010, at 9:36 AM, Kent wrote:
>>>>>>>> 
>>>>>>>>> For the case of customerid = '7', that is a simple problem, but when
>>>>>>>>> it is a more complex join condition, we only wanted to define this
>>>>>>>>> condition in one single place in our application (namely, the orm).
>>>>>>>>> That way, if or when that changes, developers don't need to search for
>>>>>>>>> other places in the app that needed to manually duplicate the logic of
>>>>>>>>> the orm join condition.
>>>>>>>>> If I supplied the DBSession to sqla, it would know how to create the
>>>>>>>>> proper Query object for this lazyload.  Can you point me in the right
>>>>>>>>> direction (even if where you point me is not currently part of the
>>>>>>>>> public API)?
>>>>>>>> Query has the with_parent() method for this use case.  
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>>> Thanks again,
>>>>>>>>> Kent
>>>>>>>>> --
>>>>>>>>> You received this message because you are subscribed to the Google 
>>>>>>>>> Groups "sqlalchemy" group.
>>>>>>>>> To post to this group, send email to sqlalch...@googlegroups.com.
>>>>>>>>> To unsubscribe from this group, send email to 
>>>>>>>>> sqlalchemy+unsubscr...@googlegroups.com.
>>>>>>>>> For more options, visit this group 
>>>>>>>>> athttp://groups.google.com/group/sqlalchemy?hl=en.
>>>>>>> -- 
>>>>>>> You received this message because you are subscribed to the Google 
>>>>>>> Groups "sqlalchemy" group.
>>>>>>> To post to this group, send email to sqlalch...@googlegroups.com.
>>>>>>> To unsubscribe from this group, send email to 
>>>>>>> sqlalchemy+unsubscr...@googlegroups.com.
>>>>>>> For more options, visit this group at 
>>>>>>> http://groups.google.com/group/sqlalchemy?hl=en.
>>>>>>> 
>>>>>> -- 
>>>>>> You received this message because you are subscribed to the Google 
>>>>>> Groups "sqlalchemy" group.
>>>>>> To post to this group, send email to sqlalch...@googlegroups.com.
>>>>>> To unsubscribe from this group, send email to 
>>>>>> sqlalchemy+unsubscr...@googlegroups.com.
>>>>>> For more options, visit this group at 
>>>>>> http://groups.google.com/group/sqlalchemy?hl=en.
>>>>>> 
>>>>> -- 
>>>>> You received this message because you are subscribed to the Google Groups 
>>>>> "sqlalchemy" group.
>>>>> To post to this group, send email to sqlalch...@googlegroups.com.
>>>>> To unsubscribe from this group, send email to 
>>>>> sqlalchemy+unsubscr...@googlegroups.com.
>>>>> For more options, visit this group at 
>>>>> http://groups.google.com/group/sqlalchemy?hl=en.
>>>>> 
>>>> -- 
>>>> You received this message because you are subscribed to the Google Groups 
>>>> "sqlalchemy" group.
>>>> To post to this group, send email to sqlalch...@googlegroups.com.
>>>> To unsubscribe from this group, send email to 
>>>> sqlalchemy+unsubscr...@googlegroups.com.
>>>> For more options, visit this group at 
>>>> http://groups.google.com/group/sqlalchemy?hl=en.
>>>> 
>>> -- 
>>> You received this message because you are subscribed to the Google Groups 
>>> "sqlalchemy" group.
>>> To post to this group, send email to sqlalch...@googlegroups.com.
>>> To unsubscribe from this group, send email to 
>>> sqlalchemy+unsubscr...@googlegroups.com.
>>> For more options, visit this group at 
>>> http://groups.google.com/group/sqlalchemy?hl=en.
>>> 
>> 
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To post to this group, send email to sqlalch...@googlegroups.com.
> To unsubscribe from this group, send email to 
> sqlalchemy+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/sqlalchemy?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalch...@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to