Ejemplo n.º 1
0
    def DeleteSubject(self, subject, token=None):
        request = rdfvalue.DataStoreRequest(subject=[subject])
        if token:
            request.token = token

        typ = rdfvalue.DataStoreCommand.Command.DELETE_SUBJECT
        self._MakeAsyncRequest(request, typ)
Ejemplo n.º 2
0
    def DeleteAttributes(self,
                         subject,
                         attributes,
                         start=None,
                         end=None,
                         token=None,
                         sync=None):
        request = rdfvalue.DataStoreRequest(subject=[subject])

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

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

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

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

        typ = rdfvalue.DataStoreCommand.Command.DELETE_ATTRIBUTES
        self._MakeRequestSyncOrAsync(request, typ, sync)
Ejemplo n.º 3
0
    def MultiSet(self,
                 subject,
                 values,
                 timestamp=None,
                 token=None,
                 replace=True,
                 to_delete=None,
                 sync=True):
        """MultiSet."""
        request = rdfvalue.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 predicate in to_delete:
            if predicate not in values:
                values[predicate] = [(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 = rdfvalue.DataStoreValue.Option.DEFAULT
                if replace or k in to_delete:
                    option = rdfvalue.DataStoreValue.Option.REPLACE

                new_value = request.values.Append(
                    predicate=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 = rdfvalue.DataStoreCommand.Command.MULTI_SET
        self._MakeRequestSyncOrAsync(request, typ, sync)
Ejemplo n.º 4
0
    def DeleteAttributesRegex(self, subject, regexes, token=None):
        """Implement the DeleteAttributesRegex interface."""
        request = rdfvalue.DataStoreRequest(subject=[subject])
        if token:
            request.token = token

        if isinstance(regexes, basestring):
            regexes = [regexes]
        for regex in regexes:
            request.values.Append(predicate=regex)

        typ = rdfvalue.DataStoreCommand.Command.DELETE_ATTRIBUTES_REGEX
        self._MakeSyncRequest(request, typ)
Ejemplo n.º 5
0
    def UnlockSubject(self, subject, transid, token):
        """Unlocks subject using transaction id."""
        request = rdfvalue.DataStoreRequest(subject=[subject])
        if token:
            request.token = token
        blob = rdfvalue.DataBlob(string=transid)
        value = rdfvalue.DataStoreValue(value=blob)
        request.values.Append(value)

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

        return transid
Ejemplo n.º 6
0
  def LockSubject(self, subject, lease_time, token):
    """Locks a specific subject."""
    request = rdfvalue.DataStoreRequest(subject=[subject])
    specific = rdfvalue.TimestampSpec.Type.SPECIFIC_TIME
    request.timestamp = rdfvalue.TimestampSpec(start=lease_time, type=specific)

    if token:
      request.token = token

    typ = rdfvalue.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
Ejemplo n.º 7
0
  def _MakeRequest(self, subjects, predicates, timestamp=None, token=None,
                   limit=None):
    if isinstance(predicates, basestring):
      predicates = [predicates]

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

    token = token or data_store.default_token
    if token:
      request.token = token

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

    for predicate in predicates:
      request.values.Append(predicate=predicate)

    return request
Ejemplo n.º 8
0
  def ExtendSubjectLock(self, subject, transid, lease_time, token):
    """Extends lock of subject."""
    request = rdfvalue.DataStoreRequest(subject=[subject])
    specific = rdfvalue.TimestampSpec.Type.SPECIFIC_TIME
    request.timestamp = rdfvalue.TimestampSpec(start=lease_time, type=specific)
    if token:
      request.token = token
    blob = rdfvalue.DataBlob(string=transid)
    value = rdfvalue.DataStoreValue(value=blob)
    request.values.Append(value)

    typ = rdfvalue.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
Ejemplo n.º 9
0
    def ResolveMulti(self, subject, attributes, token=None, timestamp=None):
        """ResolveMulti."""
        request = rdfvalue.DataStoreRequest()
        if timestamp is not None:
            request.timestamp = self.TimestampSpecFromTimestamp(timestamp)

        token = token or data_store.default_token
        if token:
            request.token = token

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

        typ = rdfvalue.DataStoreCommand.Command.RESOLVE_MULTI
        response = self._MakeSyncRequest(request, typ)

        results = []
        for result in response.results:
            for (predicate, value, timestamp) in result.payload:
                results.append((predicate, self._Decode(value), timestamp))
        return results