This is the exact code that is running now:

log.info("Creating proxies for file %s" % job.file)

job = session.merge(job)

if agent.transcoder.run(job.local_filename):
    log.info("Transcoding finished for file %s" % job.local_filename)
else:
    log.error("Occurred a problem while transcoding the file. Please, verify 
the logs.")
    job.error_status = "Occurred a problem while transcoding the file. Please, 
verify the logs."

(The problem is occurring on the log.info line)
As you can see, i *am* merging the job on the current session - so, the 
exception shouldn't be happening.

Also, i use the local_filename variable before, so it's not expired (afaik).

On Nov 17, 2009, at 1:35 PM, Michael Bayer wrote:

> 
> Fernando Takai wrote:
>> 
>> I have changed my code to be like this:
>> 
>> job = session.merge(job)
>> # Merge docs says that object does not get into the session
>> session.add(job)
>> 
>> log.info("Job finished! %s" % job.file)
>> 
>> When using latest SQLAlchemy trunk and 0.5.6 sometimes i get
>> UnboundExecutionError.
>> 
>> Also, i can assure that all my attributes are loaded - i use all of them
>> before and no error occurs.
> 
> but they may be expired at some point.  If their host session is rolled
> back or committed, for example.   The stack trace will illustrate exactly
> what action is initiating the load operation. For example, in the stack
> trace you posted, the "job.local_filename" attribute is unloaded or
> expired.  You can test for this by seeing that "local_filename" is not
> present in job.__dict__.
> 
> 
>> 
>> Maybe there's something wrong with the way i'm getting the session:
>> 
>> session = Session.object_session(job)
>> if not session:
>>    session = Session()
> 
> there's nothing "wrong" with it per se except it appears to be guessing as
> to what session should be used - "well lets see if this object has a
> session from somewhere, or otherwise we'll just make one, maybe not".
> 
> Sessions can be created as much as you like but they work best when they
> are in charge of their scope, i.e.:
> 
> def do_something():
>    # build the one session we care about for this thread/operation
>    sess = session()
> 
>    # ensure everyone from outside is merged into our one session
>    o1 = sess.merge(o1)
>    o2 = sess.merge(o2)
>    o3 = sess.merge(o3)
> 
>    # commit with authority
>    sess.commit()
> 
> 
> as opposed to:
> 
> def do_something():
>    s1 = object_session(o1) or Session()
>    s2 = object_session(o2) or Session()
>    s3 = object_session(o3) or Session()
> 
>    s3.commit()
>    s2.commit() ?  or no ?  where did this session come from ?
> 
> 
> 
> 
> 
> 
> --~--~---------~--~----~------------~-------~--~----~
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to 
> [email protected]
> For more options, visit this group at 
> http://groups.google.com/group/sqlalchemy?hl=en
> -~----------~----~----~----~------~----~------~--~---
> 

--
Fernando Takai
http://twitter.com/fernando_takai





--

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


Reply via email to