def _request(self, msg):
logger.debug('<STR_LIT>' % self.__class__.__name__)<EOL>logger.info('<STR_LIT>')<EOL>logger.info(msg)<EOL>time1 = time.time()<EOL>self._session.send(msg)<EOL>if not self._async:<EOL><INDENT>logger.debug('<STR_LIT>' %<EOL>self._timeout)<EOL>self._event.wait(self._timeout)<EOL>if self._event.isSet():<EOL><INDENT>time2 = time.time()<EOL>reply_time = "<STR_LIT>".format(time2 - time1)<EOL>logger.info('<STR_LIT>'.<EOL>format(reply_time))<EOL>logger.info(self._reply)<EOL>return self._reply<EOL><DEDENT>else:<EOL><INDENT>logger.info('<STR_LIT>')<EOL>raise TimeoutExpiredError('<STR_LIT>'<EOL>'<STR_LIT>')<EOL><DEDENT><DEDENT>
_request

        Override method _request in class ncclient.operations.RPC, so it can
        handle raw rpc requests in string format without validating your rpc
        request syntax. When your rpc-reply is received, in most cases, it
        simply returns rpc-reply again in string format, except one scenario:
        If message-id is missing or message-id received does not match that in
        rpc request, ncclient will raise an OperationError.