structure saas with tools
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
# Copyright 2025 Google LLC
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from typing import Any
|
||||
|
||||
|
||||
class State:
|
||||
"""A state dict that maintain the current value and the pending-commit delta."""
|
||||
|
||||
APP_PREFIX = "app:"
|
||||
USER_PREFIX = "user:"
|
||||
TEMP_PREFIX = "temp:"
|
||||
|
||||
def __init__(self, value: dict[str, Any], delta: dict[str, Any]):
|
||||
"""
|
||||
Args:
|
||||
value: The current value of the state dict.
|
||||
delta: The delta change to the current value that hasn't been committed.
|
||||
"""
|
||||
self._value = value
|
||||
self._delta = delta
|
||||
|
||||
def __getitem__(self, key: str) -> Any:
|
||||
"""Returns the value of the state dict for the given key."""
|
||||
if key in self._delta:
|
||||
return self._delta[key]
|
||||
return self._value[key]
|
||||
|
||||
def __setitem__(self, key: str, value: Any):
|
||||
"""Sets the value of the state dict for the given key."""
|
||||
# TODO: make new change only store in delta, so that self._value is only
|
||||
# updated at the storage commit time.
|
||||
self._value[key] = value
|
||||
self._delta[key] = value
|
||||
|
||||
def __contains__(self, key: str) -> bool:
|
||||
"""Whether the state dict contains the given key."""
|
||||
return key in self._value or key in self._delta
|
||||
|
||||
def has_delta(self) -> bool:
|
||||
"""Whether the state has pending delta."""
|
||||
return bool(self._delta)
|
||||
|
||||
def get(self, key: str, default: Any = None) -> Any:
|
||||
"""Returns the value of the state dict for the given key."""
|
||||
if key not in self:
|
||||
return default
|
||||
return self[key]
|
||||
|
||||
def update(self, delta: dict[str, Any]):
|
||||
"""Updates the state dict with the given delta."""
|
||||
self._value.update(delta)
|
||||
self._delta.update(delta)
|
||||
|
||||
def to_dict(self) -> dict[str, Any]:
|
||||
"""Returns the state dict."""
|
||||
result = {}
|
||||
result.update(self._value)
|
||||
result.update(self._delta)
|
||||
return result
|
||||
Reference in New Issue
Block a user