예제 #1
0
 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)
예제 #2
0
파일: bolt.py 프로젝트: moomoohk/py2neo
 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)
예제 #3
0
 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)
예제 #4
0
 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
예제 #5
0
 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
예제 #6
0
 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
예제 #7
0
 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
예제 #8
0
파일: bolt.py 프로젝트: pkla/py2neo
 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)
예제 #9
0
파일: bolt.py 프로젝트: moomoohk/py2neo
 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
예제 #10
0
파일: bolt.py 프로젝트: moomoohk/py2neo
 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)