def rollback(self, tx): self._assert_open() self._assert_transaction_open(tx) self._transaction.set_complete() log.debug("[#%04X] C: ROLLBACK", self.local_port) response = self._write_request(0x13) try: self._sync(response) except BrokenWireError as error: tx.mark_broken() raise_from( ConnectionBroken("Transaction broken by disconnection " "during rollback"), error) else: try: self._audit(self._transaction) except Failure as failure: tx.mark_broken() raise_from(ConnectionBroken("Failed to rollback transaction"), failure) else: return Bookmark(response.metadata.get("bookmark")) finally: if callable(self._on_unbind): self._on_unbind(self._transaction)
def commit(self, tx): self._assert_open() self._assert_transaction_open(tx) self._transaction.set_complete() log.debug("[#%04X] C: RUN 'COMMIT' {}", self.local_port) log.debug("[#%04X] C: DISCARD_ALL", self.local_port) try: self._sync(self._write_request(0x10, "COMMIT", {}), self._write_request(0x2F)) except BrokenWireError as error: tx.mark_broken() raise_from( ConnectionBroken("Transaction broken by disconnection " "during commit"), error) else: try: self._audit(self._transaction) except Neo4jError as error: tx.mark_broken() raise_from(ConnectionBroken("Failed to commit transaction"), error) else: return Bookmark() finally: if callable(self._on_unbind): self._on_unbind(self._transaction)
def rollback(self, tx): self._assert_open() self._assert_transaction_open(tx) self._transaction.set_complete() log.debug("[#%04X] C: RUN 'ROLLBACK' {}", self.local_port) log.debug("[#%04X] C: DISCARD_ALL", self.local_port) try: self._sync(self._write_request(0x10, "ROLLBACK", {}), self._write_request(0x2F)) except BrokenWireError as error: tx.mark_broken() raise_from( ConnectionBroken("Transaction broken by disconnection " "during rollback"), error) else: try: self._audit(self._transaction) except Failure as failure: tx.mark_broken() raise_from(ConnectionBroken("Failed to rollback transaction"), failure) else: return Bookmark() finally: if callable(self._on_unbind): self._on_unbind(self._transaction)
def begin( self, graph_name, readonly=False, # after=None, metadata=None, timeout=None ): self._assert_open() self._assert_no_transaction() self._transaction = BoltTransactionRef( graph_name, self.protocol_version, readonly, # after, metadata, timeout ) log.debug("[#%04X] C: BEGIN %r", self.local_port, self._transaction.extra) response = self._write_request(0x11, self._transaction.extra) try: self._sync(response) except BrokenWireError as error: raise_from( ConnectionBroken("Transaction could not begin " "due to disconnection"), error) else: self._audit(self._transaction) if callable(self._on_bind): self._on_bind(self._transaction, self) return self._transaction
def run_prog( self, graph_name, cypher, parameters=None, readonly=False, # after=None, metadata=None, timeout=None ): self._assert_open() self._assert_no_transaction() self._transaction = BoltTransactionRef( graph_name, self.protocol_version, readonly, # after, metadata, timeout ) result = self._run(graph_name, cypher, parameters or {}, self._transaction.extra, final=True) try: result.buffer() except BrokenWireError as error: raise_from( ConnectionBroken("Transaction could not run " "due to disconnection"), error) else: self._audit(self._transaction) return result
def begin( self, graph_name, readonly=False, # after=None, metadata=None, timeout=None ): self._set_transaction( graph_name, readonly=readonly, # after, metadata, timeout ) log.debug("[#%04X] C: RUN 'BEGIN' %r", self.local_port, self._transaction.extra) log.debug("[#%04X] C: DISCARD_ALL", self.local_port) responses = (self._write_request(0x10, "BEGIN", self._transaction.extra), self._write_request(0x2F)) try: self._sync(*responses) except BrokenWireError as error: raise_from( ConnectionBroken("Transaction could not begin " "due to disconnection"), error) else: self._audit(self._transaction) if callable(self._on_bind): self._on_bind(self._transaction, self) return self._transaction
def run_prog( self, graph_name, cypher, parameters=None, readonly=False, # after=None, metadata=None, timeout=None ): self._set_transaction( graph_name, readonly=readonly, # after, metadata, timeout ) result = self._run(graph_name, cypher, parameters or {}, final=True) try: # TODO: can we avoid this buffering before the first # PULL/DISCARD is sent? result.buffer() except BrokenWireError as error: raise_from( ConnectionBroken("Transaction could not run " "due to disconnection"), error) else: self._audit(self._transaction) return result
def buffer(self): if self.done(): return try: self.__cx.sync(self) except BrokenWireError as error: self.__cx.transaction.mark_broken() raise_from(ConnectionBroken("Transaction broken by disconnection " "while buffering"), error)
def read_message_py2(self): chunks = [] while True: try: hi, lo = self.wire.read(2) except WireError as error: raise_from(ConnectionBroken("Failed to read message"), error) else: if hi == lo == 0: break size = hi << 8 | lo chunks.append(self.wire.read(size)) message = bytearray(b"".join(map(bytes, chunks))) _, n = divmod(message[0], 0x10) try: unpacker = UnpackStream(message, offset=2) fields = [unpacker.unpack() for _ in range(n)] except ValueError as error: raise_from(ProtocolError("Bad message content"), error) else: return message[1], fields
def send(self, final=False): try: return self.wire.send(final=final) except WireError as error: raise_from(ConnectionBroken("Failed to send Bolt messages"), error)