[Twisted-Python] Question on deferreds

Frank Millman frank at chagford.com
Sun Dec 4 06:33:23 EST 2005


Hi all,

I am trying to convert my app to use Twisted. The original version handles a
gui, some business logic, and a database connection, all in one program. I
have split it into a 'client' program, that handles the gui; and a server
program, that handles the business logic and the database connection, and
communicates with the client using pb.

The original program has some logic to validate user input. The data to be
validated is passed up through 3 or 4 classes. Here is some very simplified
pseudo code -

    class1():
        def check1(data):
            perform test
            if test failed:
                return False
            if not class2.check2(data):
                return False
            return True

    class2():
        def check2(data):
            perform test
            if test failed:
                return False
            if not class3.check3(data):
                return False
            return True

    class3():
        def check3(data):
            perform test
            if test failed:
                return False
            if not class4.check4(data):
                return False
            return True

    class4():
        def check4(data):
            perform test
            if test failed:
                return False
            return True

In my new program, classes 1-3 run on the client, class4 runs on the server.
Therefore I tried to change class3 as follows -

    class3():
        def check3(data):
            avatar.callRemote(check4,data).addCallback(afterCheck)

        def afterCheck(result):
            return result

This does not work, as check1 and check2 never receive the result.

I would like to avoid going through my entire program and changing each
occurrence of check1 and check2 into a deferred and a callback. I do not
particularly mind if the client program blocks, as I do not want the user to
proceed until the result is known.

Is there any way to accomplish this?

Thanks for any advice

Frank Millman





More information about the Twisted-Python mailing list