def query(self, query, variables=None, timeout=None, metadata=None, credentials=None): """Adds a query operation to the transaction.""" new_metadata = self._dg.add_login_metadata(metadata) req = self._common_query(query, variables=variables) try: res = self._dc.query(req, timeout=timeout, metadata=new_metadata, credentials=credentials) except Exception as error: if util.is_jwt_expired(error): self._dg.retry_login() new_metadata = self._dg.add_login_metadata(metadata) res = self._dc.query(req, timeout=timeout, metadata=new_metadata, credentials=credentials) else: raise error self.merge_context(res.txn) return res
def mutate(self, mutation=None, set_obj=None, del_obj=None, set_nquads=None, del_nquads=None, commit_now=None, ignore_index_conflict=None, timeout=None, metadata=None, credentials=None): """Adds a mutate operation to the transaction.""" mutation = self._common_mutate( mutation=mutation, set_obj=set_obj, del_obj=del_obj, set_nquads=set_nquads, del_nquads=del_nquads, commit_now=commit_now, ignore_index_conflict=ignore_index_conflict) new_metadata = self._dg.add_login_metadata(metadata) mutate_error = None try: assigned = self._dc.mutate(mutation, timeout=timeout, metadata=new_metadata, credentials=credentials) except Exception as error: if util.is_jwt_expired(error): self._dg.retry_login() new_metadata = self._dg.add_login_metadata(metadata) try: assigned = self._dc.mutate(mutation, timeout=timeout, metadata=new_metadata, credentials=credentials) except Exception as error: mutate_error = error else: mutate_error = error if mutate_error is not None: try: self.discard(timeout=timeout, metadata=metadata, credentials=credentials) except: # Ignore error - user should see the original error. pass self._common_except_mutate(mutate_error) if mutation.commit_now: self._finished = True self.merge_context(assigned.context) return assigned
def do_request(self, request, timeout=None, metadata=None, credentials=None): """Executes a query/mutate operation on the server.""" if self._finished: raise errors.TransactionError( 'Transaction has already been committed or discarded') if len(request.mutations) > 0: if self._read_only: raise errors.TransactionError( 'Readonly transaction cannot run mutations') self._mutated = True request.hash = self._ctx.hash new_metadata = self._dg.add_login_metadata(metadata) query_error = None try: response = self._dc.query(request, timeout=timeout, metadata=new_metadata, credentials=credentials) except Exception as error: if util.is_jwt_expired(error): self._dg.retry_login() new_metadata = self._dg.add_login_metadata(metadata) try: response = self._dc.query(request, timeout=timeout, metadata=new_metadata, credentials=credentials) except Exception as error: query_error = error else: query_error = error if query_error is not None: try: self.discard(timeout=timeout, metadata=metadata, credentials=credentials) except: # Ignore error - user should see the original error. pass self._common_except_mutate(query_error) if request.commit_now: self._finished = True self.merge_context(response.txn) return response
def alter(self, operation, timeout=None, metadata=None, credentials=None): """Runs a modification via this client.""" new_metadata = self.add_login_metadata(metadata) try: return self.any_client().alter(operation, timeout=timeout, metadata=new_metadata, credentials=credentials) except Exception as error: if util.is_jwt_expired(error): self.retry_login() new_metadata = self.add_login_metadata(metadata) return self.any_client().alter(operation, timeout=timeout, metadata=new_metadata, credentials=credentials) else: raise error
def discard(self, timeout=None, metadata=None, credentials=None): """Discards the transaction.""" if not self._common_discard(): return new_metadata = self._dg.add_login_metadata(metadata) try: self._dc.commit_or_abort(self._ctx, timeout=timeout, metadata=new_metadata, credentials=credentials) except Exception as error: if util.is_jwt_expired(error): self._dg.retry_login() new_metadata = self._dg.add_login_metadata(metadata) self._dc.commit_or_abort(self._ctx, timeout=timeout, metadata=new_metadata, credentials=credentials) else: raise error
def alter(self, operation, timeout=None, metadata=None, credentials=None): """Runs a modification via this client.""" new_metadata = self.add_login_metadata(metadata) try: return self.any_client().alter(operation, timeout=timeout, metadata=new_metadata, credentials=credentials) except Exception as error: if util.is_jwt_expired(error): self.retry_login() new_metadata = self.add_login_metadata(metadata) return self.any_client().alter(operation, timeout=timeout, metadata=new_metadata, credentials=credentials) else: raise error
def check_version(self, timeout=None, metadata=None, credentials=None): """Returns the version of Dgraph if the server is ready to accept requests.""" new_metadata = self.add_login_metadata(metadata) check_req = api.Check() try: response = self.any_client().check_version(check_req, timeout=timeout, metadata=new_metadata, credentials=credentials) return response.tag except Exception as error: if util.is_jwt_expired(error): self.retry_login() new_metadata = self.add_login_metadata(metadata) response = self.any_client().check_version( check_req, timeout=timeout, metadata=new_metadata, credentials=credentials) return response.tag else: raise error