Skip to content

Commit 33a9093

Browse files
committed
centralize logic
1 parent 859a5af commit 33a9093

File tree

12 files changed

+60
-99
lines changed

12 files changed

+60
-99
lines changed

src/strands/_identifier.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
"""Strands identifier utilities."""
2+
3+
import enum
4+
import os
5+
6+
7+
class Identifier(enum.Enum):
8+
"""Strands identifier types."""
9+
10+
AGENT = "agent"
11+
SESSION = "session"
12+
13+
14+
def validate(id_: str, type_: Identifier) -> str:
15+
"""Validate strands id.
16+
17+
Args:
18+
id_: Id to validate.
19+
type_: Type of the identifier (e.g., session id, agent id, etc.)
20+
21+
Returns:
22+
Validated id.
23+
24+
Raises:
25+
ValueError: If id contains path separators.
26+
"""
27+
if os.path.basename(id_) != id_:
28+
raise ValueError(f"{type_.value}_id={id_} | id cannot contain path separators")
29+
30+
return id_

src/strands/agent/agent.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from opentelemetry import trace as trace_api
2020
from pydantic import BaseModel
2121

22+
from .. import _identifier
2223
from ..event_loop.event_loop import event_loop_cycle, run_tool
2324
from ..handlers.callback_handler import PrintingCallbackHandler, null_callback_handler
2425
from ..hooks import (
@@ -40,7 +41,6 @@
4041
from ..types.exceptions import ContextWindowOverflowException
4142
from ..types.tools import ToolResult, ToolUse
4243
from ..types.traces import AttributeValue
43-
from . import identifier
4444
from .agent_result import AgentResult
4545
from .conversation_manager import (
4646
ConversationManager,
@@ -258,7 +258,7 @@ def __init__(
258258
self.messages = messages if messages is not None else []
259259

260260
self.system_prompt = system_prompt
261-
self.agent_id = identifier.validate(agent_id or _DEFAULT_AGENT_ID)
261+
self.agent_id = _identifier.validate(agent_id or _DEFAULT_AGENT_ID, _identifier.Identifier.AGENT)
262262
self.name = name or _DEFAULT_AGENT_NAME
263263
self.description = description
264264

src/strands/agent/identifier.py

Lines changed: 0 additions & 21 deletions
This file was deleted.

src/strands/session/file_session_manager.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,9 @@
77
import tempfile
88
from typing import Any, Optional, cast
99

10-
from ..agent.identifier import validate as validate_agent_id
10+
from .. import _identifier
1111
from ..types.exceptions import SessionException
1212
from ..types.session import Session, SessionAgent, SessionMessage
13-
from .identifier import validate as validate_session_id
1413
from .repository_session_manager import RepositorySessionManager
1514
from .session_repository import SessionRepository
1615

@@ -61,7 +60,7 @@ def _get_session_path(self, session_id: str) -> str:
6160
Raises:
6261
ValueError: If session id contains a path separator.
6362
"""
64-
session_id = validate_session_id(session_id)
63+
session_id = _identifier.validate(session_id, _identifier.Identifier.SESSION)
6564
return os.path.join(self.storage_dir, f"{SESSION_PREFIX}{session_id}")
6665

6766
def _get_agent_path(self, session_id: str, agent_id: str) -> str:
@@ -75,7 +74,7 @@ def _get_agent_path(self, session_id: str, agent_id: str) -> str:
7574
ValueError: If session id or agent id contains a path separator.
7675
"""
7776
session_path = self._get_session_path(session_id)
78-
agent_id = validate_agent_id(agent_id)
77+
agent_id = _identifier.validate(agent_id, _identifier.Identifier.AGENT)
7978
return os.path.join(session_path, "agents", f"{AGENT_PREFIX}{agent_id}")
8079

8180
def _get_message_path(self, session_id: str, agent_id: str, message_id: int) -> str:

src/strands/session/identifier.py

Lines changed: 0 additions & 21 deletions
This file was deleted.

src/strands/session/s3_session_manager.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,9 @@
88
from botocore.config import Config as BotocoreConfig
99
from botocore.exceptions import ClientError
1010

11-
from ..agent.identifier import validate as validate_agent_id
11+
from .. import _identifier
1212
from ..types.exceptions import SessionException
1313
from ..types.session import Session, SessionAgent, SessionMessage
14-
from .identifier import validate as validate_session_id
1514
from .repository_session_manager import RepositorySessionManager
1615
from .session_repository import SessionRepository
1716

@@ -90,7 +89,7 @@ def _get_session_path(self, session_id: str) -> str:
9089
Raises:
9190
ValueError: If session id contains a path separator.
9291
"""
93-
session_id = validate_session_id(session_id)
92+
session_id = _identifier.validate(session_id, _identifier.Identifier.SESSION)
9493
return f"{self.prefix}/{SESSION_PREFIX}{session_id}/"
9594

9695
def _get_agent_path(self, session_id: str, agent_id: str) -> str:
@@ -104,7 +103,7 @@ def _get_agent_path(self, session_id: str, agent_id: str) -> str:
104103
ValueError: If session id or agent id contains a path separator.
105104
"""
106105
session_path = self._get_session_path(session_id)
107-
agent_id = validate_agent_id(agent_id)
106+
agent_id = _identifier.validate(agent_id, _identifier.Identifier.AGENT)
108107
return f"{session_path}agents/{AGENT_PREFIX}{agent_id}/"
109108

110109
def _get_message_path(self, session_id: str, agent_id: str, message_id: int) -> str:

tests/strands/agent/test_agent.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ def test_agent__init__deeply_nested_tools(tool_decorated, tool_module, tool_impo
258258
],
259259
)
260260
def test_agent__init__invalid_id(agent_id):
261-
with pytest.raises(ValueError):
261+
with pytest.raises(ValueError, match=f"agent_id={agent_id} | id cannot contain path separators"):
262262
Agent(agent_id=agent_id)
263263

264264

tests/strands/agent/test_identifier.py

Lines changed: 0 additions & 21 deletions
This file was deleted.

tests/strands/session/test_file_session_manager.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ def test_permission_error_handling(file_manager):
376376
],
377377
)
378378
def test__get_session_path_invalid_session_id(session_id, file_manager):
379-
with pytest.raises(ValueError, match="session id cannot contain path separators"):
379+
with pytest.raises(ValueError, match=f"session_id={session_id} | id cannot contain path separators"):
380380
file_manager._get_session_path(session_id)
381381

382382

@@ -388,5 +388,5 @@ def test__get_session_path_invalid_session_id(session_id, file_manager):
388388
],
389389
)
390390
def test__get_agent_path_invalid_agent_id(agent_id, file_manager):
391-
with pytest.raises(ValueError, match="agent id cannot contain path separators"):
391+
with pytest.raises(ValueError, match=f"agent_id={agent_id} | id cannot contain path separators"):
392392
file_manager._get_agent_path("session1", agent_id)

tests/strands/session/test_identifier.py

Lines changed: 0 additions & 21 deletions
This file was deleted.

0 commit comments

Comments
 (0)