[Twisted-web] A question with storm orm and Nevow

Daniel Yang daniel.yang.zhenyu at gmail.com
Wed Jul 8 21:30:31 EDT 2009


Thanks, Colin.

In my case, I have to take 2 steps to get data from database.
1. execute sql, get a DeferredResult instance.
2. use DeferredResult.get_all/one() to get the real data.

it is a more complicated process than just one deferred.

Code:
def test_execute(self):
    def cb_execute(result):
        #this result is a DeferredResult, not the actual data.
        return result.get_one().addCallback(cb_result)

    def cb_result(result):
        #the data returns
         print result

    self.store.execute("SELECT title FROM foo WHERE
id=10").addCallback(cb_execute)

    return ?

What should I return?

I execute sql statements directly using store. Possibly it is not a good
choice.
If I use the ORM way:

    def test_get(self):
        """
        Try to get an object from the store and check its attributes.
        """
        def cb(result):
            self.assertEquals(result.title, u'Title 30')
            self.assertEquals(result.id, 10)
        return self.store.get(Foo, 10).addCallback(cb)

That'd be much easier.


On Wed, Jul 8, 2009 at 11:22 PM, Colin Alston <karnaugh at karnaugh.za.net>wrote:

>
>
> On Wed, Jul 8, 2009 at 5:21 PM, Colin Alston <karnaugh at karnaugh.za.net>wrote:
>
>> On Wed, Jul 8, 2009 at 4:59 PM, Daniel Yang <daniel.yang.zhenyu at gmail.com
>> > wrote:
>>
>>> Hi people,
>>>
>>> I am using storm orm(twisted-integration) with Nevow.
>>> There is a question that confuses me a lot:
>>> (since storm orm(twisted-integration) does db io in a asynchronous way).
>>> In a render function, before my data returns, what should I return for
>>> the render function?
>>>
>>> does Nevow has something like server.NOT_DONE_YET?
>>> or there is a "deferred" way to do this?
>>>
>>
>> Hi,
>>
>> You can simply use a deferred in any render function as you would expect.
>> Nevow deals with this for you.
>>
>> def render_foo(self, ctx, data):
>>
>
> Wow.. Google mail fails and I'm too used to using TAB when writing code...
>
>
> def render_foo(self, ctx, data):
>    def continueRendering(results):
>        # do something with results
>        return ctx.tag[whatever]
>
>    return myDeferredDatabaseQuery(some args).addBoth(continueRendering)
>
>
>
> _______________________________________________
> Twisted-web mailing list
> Twisted-web at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web
>
>


-- 
-----------------------------------------------
Yours
Faithfully

Daniel Yang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://twistedmatrix.com/pipermail/twisted-web/attachments/20090709/fe61ae9e/attachment.htm 


More information about the Twisted-web mailing list