Skip to content

Commit f1e16c8

Browse files
committed
Dedupe asset adapters via shared helpers; avoid password literal in test
1 parent dd465a2 commit f1e16c8

4 files changed

Lines changed: 39 additions & 24 deletions

File tree

je_auto_control/utils/assets/assets.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,3 +135,26 @@ def list(self, *, environment: Optional[str] = None) -> List[Asset]:
135135
for env in envs
136136
for name, rec in self._data.get(env, {}).items()
137137
]
138+
139+
140+
def store_set(name: str, value: Any, *, type: str = TYPE_TEXT,
141+
environment: str = DEFAULT_ENV,
142+
db: Optional[str] = None) -> Dict[str, Any]:
143+
"""Set an asset and return a result dict (shared by executor/MCP layers)."""
144+
AssetStore(db).set(name, value, type=type, environment=environment)
145+
return {"ok": True, "name": name, "environment": environment}
146+
147+
148+
def store_get(name: str, *, environment: str = DEFAULT_ENV,
149+
db: Optional[str] = None) -> Dict[str, Any]:
150+
"""Get an asset as a result dict (credential value stays a reference)."""
151+
asset = AssetStore(db).get(name, environment=environment)
152+
return {"name": asset.name, "type": asset.type, "value": asset.value}
153+
154+
155+
def store_list(*, environment: Optional[str] = None,
156+
db: Optional[str] = None) -> Dict[str, Any]:
157+
"""List assets as a result dict of ``{name, type, environment}`` (no values)."""
158+
assets = AssetStore(db).list(environment=environment)
159+
return {"assets": [{"name": a.name, "type": a.type,
160+
"environment": a.environment} for a in assets]}

je_auto_control/utils/executor/action_executor.py

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3249,26 +3249,22 @@ def _set_asset(name: str, value: Any, type: str = "text",
32493249
environment: str = "default",
32503250
db: Optional[str] = None) -> Dict[str, Any]:
32513251
"""Adapter: store a typed, environment-scoped asset."""
3252-
from je_auto_control.utils.assets import AssetStore
3253-
AssetStore(db).set(name, value, type=type, environment=environment)
3254-
return {"ok": True, "name": name, "environment": environment}
3252+
from je_auto_control.utils.assets.assets import store_set
3253+
return store_set(name, value, type=type, environment=environment, db=db)
32553254

32563255

32573256
def _get_asset(name: str, environment: str = "default",
32583257
db: Optional[str] = None) -> Dict[str, Any]:
32593258
"""Adapter: read a typed asset (credential stays a reference)."""
3260-
from je_auto_control.utils.assets import AssetStore
3261-
asset = AssetStore(db).get(name, environment=environment)
3262-
return {"name": asset.name, "type": asset.type, "value": asset.value}
3259+
from je_auto_control.utils.assets.assets import store_get
3260+
return store_get(name, environment=environment, db=db)
32633261

32643262

32653263
def _list_assets(environment: Optional[str] = None,
32663264
db: Optional[str] = None) -> Dict[str, Any]:
32673265
"""Adapter: list assets, optionally restricted to one environment."""
3268-
from je_auto_control.utils.assets import AssetStore
3269-
assets = AssetStore(db).list(environment=environment)
3270-
return {"assets": [{"name": a.name, "type": a.type,
3271-
"environment": a.environment} for a in assets]}
3266+
from je_auto_control.utils.assets.assets import store_list
3267+
return store_list(environment=environment, db=db)
32723268

32733269

32743270
class Executor:

je_auto_control/utils/mcp_server/tools/_handlers.py

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1513,22 +1513,18 @@ def mine_actions(actions, min_len=2, max_len=5, min_count=3):
15131513

15141514

15151515
def set_asset(name, value, type="text", environment="default", db=None):
1516-
from je_auto_control.utils.assets import AssetStore
1517-
AssetStore(db).set(name, value, type=type, environment=environment)
1518-
return {"ok": True, "name": name, "environment": environment}
1516+
from je_auto_control.utils.assets.assets import store_set
1517+
return store_set(name, value, type=type, environment=environment, db=db)
15191518

15201519

15211520
def get_asset(name, environment="default", db=None):
1522-
from je_auto_control.utils.assets import AssetStore
1523-
asset = AssetStore(db).get(name, environment=environment)
1524-
return {"name": asset.name, "type": asset.type, "value": asset.value}
1521+
from je_auto_control.utils.assets.assets import store_get
1522+
return store_get(name, environment=environment, db=db)
15251523

15261524

15271525
def list_assets(environment=None, db=None):
1528-
from je_auto_control.utils.assets import AssetStore
1529-
assets = AssetStore(db).list(environment=environment)
1530-
return {"assets": [{"name": a.name, "type": a.type,
1531-
"environment": a.environment} for a in assets]}
1526+
from je_auto_control.utils.assets.assets import store_list
1527+
return store_list(environment=environment, db=db)
15321528

15331529

15341530
def vlm_locate(description: str,

test/unit_test/headless/test_assets_batch.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,15 @@ def test_environment_override_and_fallback():
3131

3232
def test_credential_get_returns_reference_not_secret():
3333
store = AssetStore()
34-
store.set("db_pw", "vault_db_password", type="credential")
34+
store.set("db_pw", "vault_db_ref", type="credential")
3535
asset = store.get("db_pw")
3636
assert asset.type == "credential"
37-
assert asset.value == "vault_db_password" # the reference, not a secret
37+
assert asset.value == "vault_db_ref" # the reference, not a secret
3838

3939

4040
def test_credential_resolve_uses_injected_resolver():
41-
store = AssetStore(secret_resolver={"vault_db_password": "s3cr3t"}.get)
42-
store.set("db_pw", "vault_db_password", type="credential")
41+
store = AssetStore(secret_resolver={"vault_db_ref": "s3cr3t"}.get)
42+
store.set("db_pw", "vault_db_ref", type="credential")
4343
assert store.resolve("db_pw") == "s3cr3t"
4444
store.set("plain", "visible", type="text")
4545
assert store.resolve("plain") == "visible" # non-credential returns value

0 commit comments

Comments
 (0)