Exemple #1
0
    def process_message(self, message):
        if isinstance(message, messages.ErrorResponse):
            raise errors.ConnectionError(message.error_message())
        elif isinstance(message, messages.NoticeResponse):
            if getattr(self, 'notice_handler', None) is not None:
                self.notice_handler(message)
        elif isinstance(message, messages.BackendKeyData):
            self.backend_pid = message.pid
            self.backend_key = message.key
        elif isinstance(message, messages.ParameterStatus):
            self.parameters[message.name] = message.value
        elif isinstance(message, messages.ReadyForQuery):
            self.transaction_status = message.transaction_status
        elif isinstance(message, messages.CommandComplete):
            # TODO: im not ever seeing this actually returned by vertica...
            # if vertica returns a row count, set the rowcount attribute in cursor
            #if hasattr(message, 'rows'):
            #    self.cursor.rowcount = message.rows
            pass
        elif isinstance(message, messages.EmptyQueryResponse):
            pass
        elif isinstance(message, messages.CopyInResponse):
            pass
        else:
            raise errors.MessageError("Unhandled message: {0}".format(message))

        # set last message
        self._cursor._message = message
Exemple #2
0
    def read_message(self):
        try:
            type_ = self.read_bytes(1)
            size = unpack('!I', self.read_bytes(4))[0]

            if size < 4:
                raise errors.MessageError("Bad message size: {0}".format(size))
            message = BackendMessage.factory(type_, self.read_bytes(size - 4))
            logger.debug('<= %s', message)
            return message
        except (SystemError, IOError) as e:
            self.close_socket()
            raise errors.ConnectionError(str(e))
Exemple #3
0
 def process_message(self, message):
     if isinstance(message, messages.ErrorResponse):
         raise errors.ConnectionError(message.error_message())
     elif isinstance(message, messages.NoticeResponse):
         if getattr(self, 'notice_handler', None) is not None:
             self.notice_handler(message)
     elif isinstance(message, messages.BackendKeyData):
         self.backend_pid = message.pid
         self.backend_key = message.key
     elif isinstance(message, messages.ParameterStatus):
         self.parameters[message.name] = message.value
     elif isinstance(message, messages.ReadyForQuery):
         self.transaction_status = message.transaction_status
     else:
         raise errors.MessageError("Unhandled message: {0}".format(message))
Exemple #4
0
    def read_message(self):
        try:
            ready = select.select([self._socket()], [], [],
                                  self.options['read_timeout'])
            if len(ready[0]) > 0:
                type = self.read_bytes(1)
                size = unpack('!I', self.read_bytes(4))[0]

                if size < 4:
                    raise errors.MessageError(
                        "Bad message size: {0}".format(size))
                message = BackendMessage.factory(type,
                                                 self.read_bytes(size - 4))
                if getattr(self, 'debug', False):
                    print "<= {0}".format(message)
                return message
            else:
                self.close()
                raise errors.TimedOutError("Connection timed out")
        except Exception as e:
            self.close_socket()
            raise errors.ConnectionError(e.message)