A lightweight volatile context management store for Python
Project description
EphemeralDB
軽量で揮発性のコンテキスト管理ストアです。メモリ上でスコープ付きキー・バリューストレージを提供します。
概要
EphemeralDBは階層的なスコープ機能を持つ一時的なデータ管理のために設計されています。以下の用途に最適です:
- DSLインタープリター
- 複雑な設定パーサー
- ネストしたトランザクション処理
- 深い再帰処理中の一時状態管理
主な機能
- スコープ付きストレージ: スタックのようにスコープをpush/pop
- 階層アクセス: 子スコープから親スコープのデータにアクセス可能
- ドット記法:
user.profile.nameのようなネストしたキーをサポート - コンテキストマネージャー:
with文で使用可能 - スレッドセーフ: マルチスレッド環境で使用可能
- メモリのみ: ファイルシステムや外部依存関係不要
- 軽量: 純Python実装
インストール
pip install ephemeraldb
クイックスタート
from ephemeraldb import EphemeralDB
# 新しいデータベースインスタンスを作成
db = EphemeralDB()
# 基本的な使用方法
db.set('名前', 'アリス')
db.set('ユーザー.年齢', 30)
print(db.get('名前')) # アリス
print(db.get('ユーザー.年齢')) # 30
# スコープ付き使用方法
db.set('グローバル変数', 'グローバルです')
db.push_scope('スコープ1')
db.set('ローカル変数', 'ローカルです')
print(db.get('グローバル変数')) # グローバルです(親からアクセス可能)
print(db.get('ローカル変数')) # ローカルです
db.pop_scope()
print(db.get('ローカル変数')) # None(スコープが削除されました)
# コンテキストマネージャー使用方法
with db.scope('一時スコープ'):
db.set('一時データ', '一時的')
print(db.get('一時データ')) # 一時的
# 一時データは自動的にクリーンアップされます
APIリファレンス
コアメソッド
set(key: str, value: Any)- 値を保存get(key: str, default: Any = None)- 値を取得delete(key: str)- キーを削除exists(key: str)- キーの存在確認clear()- 現在のスコープをクリア
スコープ管理
push_scope(name: str = None)- 新しいスコープを作成pop_scope()- 現在のスコープを削除current_scope()- 現在のスコープ名を取得scope_count()- アクティブなスコープ数を取得scope(name: str)- スコープ用コンテキストマネージャー
高度な機能
keys()- 現在のスコープの全キーを取得items()- 全キー・バリューペアを取得to_dict()- 現在のスコープを辞書としてエクスポートfrom_dict(data: dict)- 辞書を現在のスコープにインポート
使用例
DSLインタープリター
from ephemeraldb import EphemeralDB
def execute_block(db, variables, statements):
"""変数スコープを持つブロックの実行をシミュレート"""
with db.scope('ブロックスコープ'):
# ブロック変数をインポート
for var, value in variables.items():
db.set(var, value)
results = []
for statement in statements:
if statement.startswith('SET '):
_, var, value = statement.split(' ', 2)
db.set(var, value)
elif statement.startswith('GET '):
_, var = statement.split(' ', 1)
results.append(db.get(var))
return results
db = EphemeralDB()
db.set('グローバル定数', 42)
results = execute_block(
db,
{'ローカル変数': 'ブロック1'},
['SET 一時変数 こんにちは', 'GET ローカル変数', 'GET 一時変数', 'GET グローバル定数']
)
print(results) # ['ブロック1', 'こんにちは', 42]
設定パーサー
def parse_config_section(db, section_name, config_data):
"""継承を持つ設定セクションの解析"""
with db.scope(f'設定_{section_name}'):
for key, value in config_data.items():
db.set(f'{section_name}.{key}', value)
return db.to_dict(include_hierarchy=True)
db = EphemeralDB()
db.set('デフォルト.タイムアウト', 30)
db.set('デフォルト.リトライ回数', 3)
dev_config = parse_config_section(db, '開発', {
'ホスト': 'localhost',
'ポート': 8000,
'デバッグ': True
})
print(dev_config)
トランザクション処理
class Transaction:
def __init__(self, db, name):
self.db = db
self.name = name
def __enter__(self):
self.db.push_scope(f'トランザクション_{self.name}')
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.db.pop_scope()
db = EphemeralDB()
db.set('アカウント.残高', 1000)
try:
with Transaction(db, '送金') as tx:
current_balance = db.get('アカウント.残高')
if current_balance >= 200:
db.set('アカウント.残高', current_balance - 200)
else:
raise ValueError("残高不足")
except ValueError:
print("トランザクションがロールバックされました")
エラーハンドリング
EphemeralDBは詳細なエラー情報を提供します:
from ephemeraldb import EphemeralDB, ValidationError, CapacityError
try:
db = EphemeralDB(max_scopes=5)
# ... 何らかの操作
except CapacityError as e:
print(f"容量エラー: {e}")
print(f"エラーコード: {e.error_code}")
print(f"詳細: {e.details}")
パフォーマンス特性
- メモリ使用量: 格納されたデータのサイズに比例
- 時間計算量:
- 設定/取得: O(キーの深度)
- スコープ操作: O(1)
- スレッドセーフ: RLockによる保護
- 容量制限: 設定可能な上限値
ライセンス
MIT License
貢献
バグ報告や機能リクエストは、GitHubのIssueでお願いします。プルリクエストも歓迎です。
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
ephemeraldb-1.0.0.tar.gz
(48.4 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ephemeraldb-1.0.0.tar.gz.
File metadata
- Download URL: ephemeraldb-1.0.0.tar.gz
- Upload date:
- Size: 48.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ebcbbc85660aadf341e697a19c82ff0dd996e2734f93c0202b7dead59535e4f2
|
|
| MD5 |
c79b6cbfa4b7d316689bc70c08d9ec33
|
|
| BLAKE2b-256 |
da5c3131732d0a377642f83493a91582c730e79d54f95ee792972223b0b84b3a
|
File details
Details for the file ephemeraldb-1.0.0-py3-none-any.whl.
File metadata
- Download URL: ephemeraldb-1.0.0-py3-none-any.whl
- Upload date:
- Size: 56.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dc29ac1a460905aa13e069427398c1df5db848a81bfa0564b77278a0e452e271
|
|
| MD5 |
19ecced94eb242276020b98b8342157c
|
|
| BLAKE2b-256 |
e4711406d6cb92a21b1a3575564d7b3278c7cd339b29abe8394ec2d1a5faad6d
|