import PyTango

Str = PyTango.CmdArgType.DevString
Void = PyTango.CmdArgType.DevVoid

class D2(PyTango.Device_4Impl):

    def __init__(self, cl, name):
        PyTango.Device_4Impl.__init__(self, cl, name)
        self.init_device()

    def init_device(self):
        self.get_device_properties()
        self.d1 = PyTango.DeviceProxy(self.d1_name)

    def do_it(self):
        self.d1.command_inout_asynch("go", self.__go_finished)

    def __go_finished(self, event):
        try:
            if event.err:
                error = PyTango.DevFailed(*event.errors)
                print "error in cmd:"
                PyTango.Except.print_exception(error)
            else:
                print "go finished ok!"
        except:
            print "Exception in go:"
            import traceback; traceback.print_exc()


class D2Class(PyTango.DeviceClass):
    
    device_property_list = { "d1_name": [Str, "", None] }

    cmd_list = { "do_it" : [[Void, ""], [Void, ""]] }


import sys
api_util = PyTango.ApiUtil.instance()
api_util.set_asynch_cb_sub_model(PyTango.cb_sub_model.PUSH_CALLBACK)
util = PyTango.Util(sys.argv)
util.add_class(D2Class, D2, 'D2')
util.server_init()
print "Ready to accept request"
util.server_run()
