40 lines
958 B
Python
40 lines
958 B
Python
|
|
# retoor <retoor@molodetz.nl>
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import inspect
|
||
|
|
from typing import Any
|
||
|
|
|
||
|
|
import devplacepy.database as db_module
|
||
|
|
|
||
|
|
from devplacepy_services.base.db_codec import decode_arg, encode_result, is_write
|
||
|
|
|
||
|
|
|
||
|
|
def build_registry() -> dict[str, Any]:
|
||
|
|
registry: dict[str, Any] = {}
|
||
|
|
for name in db_module.__all__:
|
||
|
|
target = getattr(db_module, name, None)
|
||
|
|
if target is None or not callable(target):
|
||
|
|
continue
|
||
|
|
if inspect.isclass(target):
|
||
|
|
continue
|
||
|
|
registry[name] = target
|
||
|
|
return registry
|
||
|
|
|
||
|
|
|
||
|
|
REGISTRY = build_registry()
|
||
|
|
|
||
|
|
|
||
|
|
_encode_result = encode_result
|
||
|
|
|
||
|
|
|
||
|
|
def run_with_db(db_conn, fn, args, kwargs):
|
||
|
|
from devplacepy_services.database.db_patch import use_db, reset_db
|
||
|
|
|
||
|
|
token = use_db(db_conn)
|
||
|
|
try:
|
||
|
|
decoded_args = decode_arg(args)
|
||
|
|
decoded_kwargs = decode_arg(kwargs)
|
||
|
|
return fn(*decoded_args, **decoded_kwargs)
|
||
|
|
finally:
|
||
|
|
reset_db(token)
|