def _call(self, name, *args):
        # In the future (once we don't pass any weird arg, such as SessionId and so on), use JSON

        # First, serialize the data provided in the client side
        try:
            request_data = pickle.dumps(args)
        except:
            _, exc_instance, _ = sys.exc_info()
            raise InternalClientCommunicationError("Unknown client error contacting %s: %r" % (self.url, exc_instance))
        
        # Then, perform the request and deserialize the results
        t0 = time.time()
        try:
            kwargs = {}
            if name == 'test_me':
                kwargs['timeout'] = (10, 60)
            else:
                kwargs['timeout'] = (60, 600)
            content = requests.post(self.url + '/' + name, data = request_data, **kwargs).content
            result = pickle.loads(content)
        except:
            tf = time.time()
            _, exc_instance, _ = sys.exc_info()
            raise InternalServerCommunicationError("Unknown server error contacting %s with HTTP after %s seconds: %r" % (self.url, tf - t0, exc_instance))

        # result must be a dictionary which contains either 'result' 
        # with the resulting object or 'is_error' and some data about 
        # the exception

        if result.get('is_error'):
            error_type = result['error_type']
            error_args = result['error_args']
            if not isinstance(error_args, list) and not isinstance(error_args, tuple):
                error_args = [error_args]

            # If it's acceptable, raise the exception (e.g., don't raise a KeyboardInterrupt, a MemoryError, or a library error)
            if error_type.startswith(ACCEPTABLE_EXC_TYPES):
                exc_type = _load_type(error_type)
                try:
                    exc_instance = exc_type(*error_args)
                except __HOLE__:
                    # If we can't create it
                    log.error(__name__, 'Error on instantiating an exception %s(%r)' % (exc_type, error_args))
                    log.error_exc(__name__)
                    raise InternalCapturedServerCommunicationError(error_type, error_args)
                else:
                    raise exc_instance
            else:
                # Otherwise wrap it
                raise InternalCapturedServerCommunicationError(error_type, error_args)
        # No error? return the result
        return result['result']
dataset/ETHPy150Open weblabdeusto/weblabdeusto/server/src/voodoo/gen/clients.py/HttpClient._call