コード例 #1
0
 def wait_for_started(self, _timeout=10):
     _begin_time = time.time()
     while time.time() - _begin_time <= _timeout:
         print_msg('wait_for_started...')
         if self.is_working:
             return True
         time.sleep(0.2)
     #return False
     raise Exception('Server failed to start.')
コード例 #2
0
 def _dispatch(self, method, params):
     _result = None
     print_msg('--- --- --- --- --- ---')
     print_msg('%s <<< %s' % (method, params))
     try:
         _result = SimpleXMLRPCServer.SimpleXMLRPCServer._dispatch(
             self, method, params)
     except Exception, e:
         print_err('%s - Error: %s' % (method, e))
         print_err('%s - Traceback:\n%s' % (method, traceback.format_exc()))
         raise
コード例 #3
0
 def __init__(self, addr):
     SimpleXMLRPCServer.SimpleXMLRPCServer.__init__(self,
                                                    addr=addr,
                                                    logRequests=False,
                                                    allow_none=True,
                                                    encoding='UTF-8')
     self.address, self.port = addr
     self._start_work_time = datetime.datetime.fromtimestamp(time.time())
     self._last_interactive_time = None
     self.register_introspection_functions()
     self.register_function(self.get_start_work_time, 'get_start_work_time')
     self.register_function(self.get_last_interactive_time,
                            'get_last_interactive_time')
     self.register_function(self.get_pid, 'get_pid')
     self.register_function(self.get_log, 'get_log')
     self.register_function(self.get_binary_data, 'get_binary_data')
     self.register_function(self.send_binary_data, 'send_binary_data')
     self.register_function(self.is_working, 'is_working')
     self.register_function(self.shutdown_driver, 'shutdown_driver')
     self.register_package()
     print_msg('Server(%s:%s) - Started' % (self.address, self.port))
コード例 #4
0
def main(**args):
    daemonize()
    Logger(LogPath)
    global DRIVER_DEFAULT_ADDRESS
    global DRIVER_DEFAULT_PORT
    Process().kill_process_by_port(args.get('port', DRIVER_DEFAULT_PORT))
    os.system('killall -9 "ScriptAgent" "instruments" "Instruments"')
    args.update({'address': args.get('address', DRIVER_DEFAULT_ADDRESS)})
    args.update({'port': args.get('port', DRIVER_DEFAULT_PORT)})
    print_msg('Server(%(address)s:%(port)s) - StartWorking' % args)
    print_msg('--- --- --- --- --- ---')
    ThreadXMLRPCServer(**args).join()
    print_msg('--- --- --- --- --- ---')
    print_msg('Server(%(address)s:%(port)s) - StopWorking' % args)
コード例 #5
0
class XMLRPCServer(SocketServer.ThreadingMixIn,
                   SimpleXMLRPCServer.SimpleXMLRPCServer):

    LOG_FILTERED_METHODS = [
        'get_log', 'get_binary_data', 'ins.get_log',
        'uia.target.get_element_tree', 'uia.element.get_element_tree'
    ]

    def __init__(self, addr):
        SimpleXMLRPCServer.SimpleXMLRPCServer.__init__(self,
                                                       addr=addr,
                                                       logRequests=False,
                                                       allow_none=True,
                                                       encoding='UTF-8')
        self.address, self.port = addr
        self._start_work_time = datetime.datetime.fromtimestamp(time.time())
        self._last_interactive_time = None
        self.register_introspection_functions()
        self.register_function(self.get_start_work_time, 'get_start_work_time')
        self.register_function(self.get_last_interactive_time,
                               'get_last_interactive_time')
        self.register_function(self.get_pid, 'get_pid')
        self.register_function(self.get_log, 'get_log')
        self.register_function(self.get_binary_data, 'get_binary_data')
        self.register_function(self.send_binary_data, 'send_binary_data')
        self.register_function(self.is_working, 'is_working')
        self.register_function(self.shutdown_driver, 'shutdown_driver')
        self.register_package()
        print_msg('Server(%s:%s) - Started' % (self.address, self.port))

    def get_start_work_time(self):
        return '%s' % self._start_work_time

    def get_last_interactive_time(self):
        return '%s' % self._last_interactive_time

    def get_pid(self):
        return os.getpid()

    def get_log(self):
        try:
            return urllib.quote(file(LogPath, "r").read())
        except:
            return urllib.quote('获取Log失败')

    def get_binary_data(self, filename):
        '''拷贝Server端的文件到client端
        '''
        if os.path.exists(filename):
            data = None
            with open(filename, "rb") as fd:
                data = fd.read()
                return xmlrpclib.Binary(base64.encodestring(data))
        else:
            raise Exception('[%s] does not exist' % filename)

    def send_binary_data(self, binary, filename):
        '''拷贝client端的文件到Server端
        '''
        if os.path.exists(filename):
            os.remove(filename)
        with open(filename, "wb") as fd:
            fd.write(binary.data)
        return os.path.isfile(filename)

    def is_working(self):
        return True

    def _shutdown(self):
        self.shutdown()

    def shutdown_driver(self):
        thread.start_new_thread(self._shutdown, ())

    def register_package(self):
        ios_driver_api.register_package(self)

    def _dispatch(self, method, params):
        _result = None
        print_msg('--- --- --- --- --- ---')
        print_msg('%s <<< %s' % (method, params))
        try:
            _result = SimpleXMLRPCServer.SimpleXMLRPCServer._dispatch(
                self, method, params)
        except Exception, e:
            print_err('%s - Error: %s' % (method, e))
            print_err('%s - Traceback:\n%s' % (method, traceback.format_exc()))
            raise
        if method in XMLRPCServer.LOG_FILTERED_METHODS:
            print_msg('%s >>> Binary Data' % method)
        else:
            print_msg('%s >>> %s' % (method, _result))
        self._last_interactive_time = datetime.datetime.fromtimestamp(
            time.time())
        return _result