tornadio2 icon indicating copy to clipboard operation
tornadio2 copied to clipboard

example gen.py not working

Open antipooh opened this issue 12 years ago • 5 comments

On run example gen.py on tornado 2.3 raised exception

ERROR:root:Failed to handle message: Traceback (most recent call last):
  File "/home/pooh/works/testtornado/lib/python2.6/site-packages/tornadio2/persistent.py", line 142, in on_message
    self.session.raw_message(message)
  File "/home/pooh/works/testtornado/lib/python2.6/site-packages/tornadio2/session.py", line 410, in raw_message
    ack_response = conn.on_event(event['name'], args=args)
  File "/home/pooh/works/testtornado/lib/python2.6/site-packages/tornadio2/gen.py", line 113, in wrapper
    run(args, kwargs)
  File "/home/pooh/works/testtornado/lib/python2.6/site-packages/tornadio2/gen.py", line 84, in run
    data.runner = SyncRunner(gen, finished)
  File "/home/pooh/works/testtornado/lib/python2.6/site-packages/tornadio2/gen.py", line 45, in __init__
    super(SyncRunner, self).__init__(gen)
TypeError: __init__() takes exactly 3 arguments (2 given)

I replace in file tornadio2/gen.py line 84 from

data.runner = SyncRunner(gen, finished)

on

data.runner = Runner(gen, finished)

I think class SyncRunner no more need

antipooh avatar Jun 27 '12 06:06 antipooh

Why issue closed? I have the same problem ...

faxioman avatar Mar 02 '13 17:03 faxioman

Because I can not reproduce it. Works without any problems on Tornado 2.4.1.

mrjoes avatar Mar 03 '13 08:03 mrjoes

I see the Runner class of tornado 2.4.1 and has a new parameter in init:

def __init__(self, gen, deactivate_stack_context):

SyncRunner calls the super init in this way:

super(SyncRunner, self).__init__(gen)

I think this is the problem.

faxioman avatar Mar 03 '13 09:03 faxioman

Ah, this is interoperability issue between engine and sync_engine. gen.py example works because it is using sync_engine.

Edit: If you don't care about executing actions in order, feel free to use standard tornado.gen.engine

mrjoes avatar Mar 03 '13 09:03 mrjoes

I think i'm using sync_engine too. In my class:

class MeteoDataSetAPI(SocketConnection):
    ...
    @gen.sync_engine
    def on_event(self, name, *args, **kwargs):
        return super(MeteoDataSetAPI, self).on_event(name, *args, **kwargs)

Is it right?

faxioman avatar Mar 03 '13 09:03 faxioman