Пример #1
0
  def DeleteAttributes(self,
                       subject,
                       attributes,
                       start=None,
                       end=None,
                       sync=True,
                       token=None):
    self.security_manager.CheckDataStoreAccess(token, [subject], "w")

    request = rdf_data_store.DataStoreRequest(subject=[subject])

    if isinstance(attributes, basestring):
      raise ValueError(
          "String passed to DeleteAttributes (non string iterable expected).")

    # Set timestamp.
    start = start or 0
    if end is None:
      end = (2**63) - 1  # sys.maxint

    request.timestamp = rdf_data_store.TimestampSpec(
        start=start,
        end=end,
        type=rdf_data_store.TimestampSpec.Type.RANGED_TIME)

    if token:
      request.token = token
    if sync:
      request.sync = sync

    for attr in attributes:
      request.values.Append(attribute=attr)

    typ = rdf_data_server.DataStoreCommand.Command.DELETE_ATTRIBUTES
    self._MakeRequestSyncOrAsync(request, typ, sync)
Пример #2
0
    def DeleteAttributes(self,
                         subject,
                         attributes,
                         start=None,
                         end=None,
                         sync=True,
                         token=None):
        request = rdf_data_store.DataStoreRequest(subject=[subject])

        # Set timestamp.
        start = start or 0
        if end is None:
            end = (2**63) - 1  # sys.maxint

        request.timestamp = rdf_data_store.TimestampSpec(
            start=start,
            end=end,
            type=rdf_data_store.TimestampSpec.Type.RANGED_TIME)

        if token:
            request.token = token
        if sync:
            request.sync = sync

        for attr in attributes:
            request.values.Append(attribute=attr)

        typ = rdf_data_server.DataStoreCommand.Command.DELETE_ATTRIBUTES
        self._MakeRequestSyncOrAsync(request, typ, sync)
Пример #3
0
  def DeleteSubject(self, subject, sync=False, token=None):
    request = rdf_data_store.DataStoreRequest(subject=[subject])
    if token:
      request.token = token

    typ = rdf_data_server.DataStoreCommand.Command.DELETE_SUBJECT
    self._MakeRequestSyncOrAsync(request, typ, sync)
Пример #4
0
  def DeleteSubject(self, subject, sync=False, token=None):
    self.security_manager.CheckDataStoreAccess(token, [subject], "w")

    request = rdf_data_store.DataStoreRequest(subject=[subject])
    if token:
      request.token = token

    typ = rdf_data_server.DataStoreCommand.Command.DELETE_SUBJECT
    self._MakeRequestSyncOrAsync(request, typ, sync)
Пример #5
0
    def MultiSet(self,
                 subject,
                 values,
                 timestamp=None,
                 replace=True,
                 sync=True,
                 to_delete=None,
                 token=None):
        """MultiSet."""
        self.security_manager.CheckDataStoreAccess(token, [subject], "w")

        request = rdf_data_store.DataStoreRequest(sync=sync)
        token = token or data_store.default_token
        if token:
            request.token = token

        request.subject.Append(subject)
        now = time.time() * 1000000

        if timestamp is None or timestamp == self.NEWEST_TIMESTAMP:
            timestamp = now

        to_delete = set(to_delete or [])
        for attribute in to_delete:
            if attribute not in values:
                values[attribute] = [(None, 0)]

        for k, seq in values.items():
            for v in seq:
                if isinstance(v, basestring):
                    element_timestamp = timestamp
                else:
                    try:
                        v, element_timestamp = v
                    except (TypeError, ValueError):
                        element_timestamp = timestamp

                option = rdf_data_store.DataStoreValue.Option.DEFAULT
                if replace or k in to_delete:
                    option = rdf_data_store.DataStoreValue.Option.REPLACE

                new_value = request.values.Append(
                    attribute=utils.SmartUnicode(k), option=option)

                if element_timestamp is None:
                    element_timestamp = now

                new_value.timestamp = self.TimestampSpecFromTimestamp(
                    element_timestamp)

                if v is not None:
                    new_value.value.SetValue(v)

        typ = rdf_data_server.DataStoreCommand.Command.MULTI_SET
        self._MakeRequestSyncOrAsync(request, typ, sync)
Пример #6
0
    def UnlockSubject(self, subject, transid):
        """Unlocks subject using lock id."""
        request = rdf_data_store.DataStoreRequest(subject=[subject])
        blob = rdf_protodict.DataBlob(string=transid)
        value = rdf_data_store.DataStoreValue(value=blob)
        request.values.Append(value)

        # We do not care about the server response.
        typ = rdf_data_server.DataStoreCommand.Command.UNLOCK_SUBJECT
        self._MakeSyncRequest(request, typ)

        return transid
Пример #7
0
    def _MakeRequest(self, subjects, attributes, timestamp=None, limit=None):
        if isinstance(attributes, basestring):
            attributes = [attributes]

        request = rdf_data_store.DataStoreRequest(subject=subjects)
        if limit:
            request.limit = limit

        if timestamp is not None:
            request.timestamp = self.TimestampSpecFromTimestamp(timestamp)

        for attribute in attributes:
            request.values.Append(attribute=attribute)

        return request
Пример #8
0
  def UnlockSubject(self, subject, transid, token):
    """Unlocks subject using transaction id."""
    self.security_manager.CheckDataStoreAccess(token, [subject], "w")

    request = rdf_data_store.DataStoreRequest(subject=[subject])
    if token:
      request.token = token
    blob = rdf_protodict.DataBlob(string=transid)
    value = rdf_data_store.DataStoreValue(value=blob)
    request.values.Append(value)

    # We do not care about the server response.
    typ = rdf_data_server.DataStoreCommand.Command.UNLOCK_SUBJECT
    self._MakeSyncRequest(request, typ)

    return transid
Пример #9
0
    def LockSubject(self, subject, lease_time):
        """Locks a specific subject."""
        request = rdf_data_store.DataStoreRequest(subject=[subject])
        specific = rdf_data_store.TimestampSpec.Type.SPECIFIC_TIME
        request.timestamp = rdf_data_store.TimestampSpec(start=lease_time,
                                                         type=specific)

        typ = rdf_data_server.DataStoreCommand.Command.LOCK_SUBJECT
        response = self._MakeSyncRequest(request, typ)

        if not response.results:
            return None
        result = response.results[0]
        if not result.values:
            return None
        return result.values[0].value.string
Пример #10
0
    def ExtendSubjectLock(self, subject, transid, lease_time):
        """Extends lock of subject."""
        request = rdf_data_store.DataStoreRequest(subject=[subject])
        specific = rdf_data_store.TimestampSpec.Type.SPECIFIC_TIME
        request.timestamp = rdf_data_store.TimestampSpec(start=lease_time,
                                                         type=specific)
        blob = rdf_protodict.DataBlob(string=transid)
        value = rdf_data_store.DataStoreValue(value=blob)
        request.values.Append(value)

        typ = rdf_data_server.DataStoreCommand.Command.EXTEND_SUBJECT
        response = self._MakeSyncRequest(request, typ)

        if not response.results:
            return None
        result = response.results[0]
        if not result.values:
            return None
        value = result.values[0].value.string
        return transid if transid == value else None
Пример #11
0
  def LockSubject(self, subject, lease_time, token):
    """Locks a specific subject."""
    self.security_manager.CheckDataStoreAccess(token, [subject], "w")

    request = rdf_data_store.DataStoreRequest(subject=[subject])
    specific = rdf_data_store.TimestampSpec.Type.SPECIFIC_TIME
    request.timestamp = rdf_data_store.TimestampSpec(start=lease_time,
                                                     type=specific)

    if token:
      request.token = token

    typ = rdf_data_server.DataStoreCommand.Command.LOCK_SUBJECT
    response = self._MakeSyncRequest(request, typ)

    if not response.results:
      return None
    result = response.results[0]
    if not result.values:
      return None
    return result.values[0].value.string