evoid-base 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- evoid_base/__init__.py +12 -0
- evoid_base/contracts.py +47 -0
- evoid_base/utils.py +37 -0
- evoid_base-0.1.0.dist-info/METADATA +7 -0
- evoid_base-0.1.0.dist-info/RECORD +6 -0
- evoid_base-0.1.0.dist-info/WHEEL +4 -0
evoid_base/__init__.py
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""EVOID Plugin Base — shared contracts and utilities for all plugins."""
|
|
2
|
+
|
|
3
|
+
from .contracts import StorageEngine, CacheEngine, LoggerEngine
|
|
4
|
+
from .utils import resolve_engine, inject_deps
|
|
5
|
+
|
|
6
|
+
__all__ = [
|
|
7
|
+
"StorageEngine",
|
|
8
|
+
"CacheEngine",
|
|
9
|
+
"LoggerEngine",
|
|
10
|
+
"resolve_engine",
|
|
11
|
+
"inject_deps",
|
|
12
|
+
]
|
evoid_base/contracts.py
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"""Shared contracts for EVOID plugins.
|
|
2
|
+
|
|
3
|
+
All storage/cache/logger plugins implement these protocols.
|
|
4
|
+
This ensures SmartStorage and other routing engines can work with any backend.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from typing import Any, Protocol
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class StorageEngine(Protocol):
|
|
13
|
+
"""Contract for storage backends (SQLite, PostgreSQL, ScyllaDB, etc.)."""
|
|
14
|
+
|
|
15
|
+
async def write(self, key: str, data: dict[str, Any], **kwargs) -> bool: ...
|
|
16
|
+
|
|
17
|
+
async def read(self, key: str, **kwargs) -> Any | None: ...
|
|
18
|
+
|
|
19
|
+
async def delete(self, key: str, **kwargs) -> bool: ...
|
|
20
|
+
|
|
21
|
+
async def health(self) -> bool: ...
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class CacheEngine(Protocol):
|
|
25
|
+
"""Contract for cache backends (Redis, Memory, etc.)."""
|
|
26
|
+
|
|
27
|
+
async def get(self, key: str) -> Any | None: ...
|
|
28
|
+
|
|
29
|
+
async def set(self, key: str, value: Any, ttl: int | None = None) -> bool: ...
|
|
30
|
+
|
|
31
|
+
async def delete(self, key: str) -> bool: ...
|
|
32
|
+
|
|
33
|
+
async def exists(self, key: str) -> bool: ...
|
|
34
|
+
|
|
35
|
+
async def health(self) -> bool: ...
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class LoggerEngine(Protocol):
|
|
39
|
+
"""Contract for logging backends (Loguru, stdlib, etc.)."""
|
|
40
|
+
|
|
41
|
+
def info(self, msg: str, **kwargs) -> None: ...
|
|
42
|
+
|
|
43
|
+
def warning(self, msg: str, **kwargs) -> None: ...
|
|
44
|
+
|
|
45
|
+
def error(self, msg: str, **kwargs) -> None: ...
|
|
46
|
+
|
|
47
|
+
def debug(self, msg: str, **kwargs) -> None: ...
|
evoid_base/utils.py
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"""Shared utilities for EVOID plugins."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
from evoid.engines.plugin import resolve as _resolve
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def resolve_engine(name: str, engine_type: str = "engine") -> Any:
|
|
11
|
+
"""Resolve an engine from the plugin registry.
|
|
12
|
+
|
|
13
|
+
Args:
|
|
14
|
+
name: Engine name (e.g., "sqlite", "redis", "postgresql")
|
|
15
|
+
engine_type: Plugin type (e.g., "engine", "storage", "cache")
|
|
16
|
+
|
|
17
|
+
Returns:
|
|
18
|
+
The engine factory or instance
|
|
19
|
+
"""
|
|
20
|
+
return _resolve(name, engine_type)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
async def inject_deps(ctx, engines: dict[str, str]) -> None:
|
|
24
|
+
"""Inject multiple engines into ctx.deps.
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
ctx: The Context object
|
|
28
|
+
engines: Mapping of dep_name -> engine_name (e.g., {"storage": "sqlite", "cache": "redis"})
|
|
29
|
+
|
|
30
|
+
Example:
|
|
31
|
+
await inject_deps(ctx, {"storage": "sqlite", "cache": "redis"})
|
|
32
|
+
# ctx.deps["storage"] = sqlite engine
|
|
33
|
+
# ctx.deps["cache"] = redis engine
|
|
34
|
+
"""
|
|
35
|
+
for dep_name, engine_name in engines.items():
|
|
36
|
+
if dep_name not in ctx.deps:
|
|
37
|
+
ctx.deps[dep_name] = resolve_engine(engine_name)
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
evoid_base/__init__.py,sha256=yWw00D7BRAXcUfVgCRQZ-4kaV5vcn1wzHiyI-cYq4u8,304
|
|
2
|
+
evoid_base/contracts.py,sha256=gyOyKF8d7IuY9EvC_F3-hhm4v6bzSZlEVkplKuqs2Bs,1299
|
|
3
|
+
evoid_base/utils.py,sha256=FOrlBd2riBurY9s8bp4vUp4G2I8MXSVRZvQePegsQtQ,1106
|
|
4
|
+
evoid_base-0.1.0.dist-info/METADATA,sha256=-RfQieQJoxhrV03onRxefVF32kBZWHw7JYW817T6kgk,186
|
|
5
|
+
evoid_base-0.1.0.dist-info/WHEEL,sha256=lCkmxWfQsSc9CfIClYeavTdQeEX2toPqufh9gI35EQA,87
|
|
6
|
+
evoid_base-0.1.0.dist-info/RECORD,,
|