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)
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)
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)
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)
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)
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
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
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
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
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
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