Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
    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