Skip to content

Commit 9e77980

Browse files
authored
Extract DEFAULT_EXECUTOR constant to eliminate hardcoded strings (#94)
The default executor value was duplicated as a string literal in 11 places across 7 files. A single constant in executor_utils.py makes future changes a one-line edit and also changes the default to separate_executor.
1 parent 41585c7 commit 9e77980

7 files changed

Lines changed: 24 additions & 18 deletions

File tree

src/databao_cli/features/mcp/tools/databao_ask/agent_factory.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@
77
from databao.agent.core import Cache
88

99
from databao_cli.features.ui.project_utils import DatabaoProjectStatus, databao_project_status, has_build_output
10+
from databao_cli.shared.executor_utils import DEFAULT_EXECUTOR
1011
from databao_cli.shared.project.layout import ProjectLayout
1112

1213

1314
def create_agent_for_tool(
1415
project: ProjectLayout,
1516
model: str | None = None,
1617
temperature: float = 0.0,
17-
executor: str = "claude_code",
18+
executor: str = DEFAULT_EXECUTOR,
1819
cache: Cache | None = None,
1920
) -> Agent:
2021
"""Create a Databao agent from a DCE project, configured for MCP tool use.

src/databao_cli/features/ui/app.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
has_build_output,
2525
)
2626
from databao_cli.features.ui.services.storage import get_cache_dir
27+
from databao_cli.shared.executor_utils import DEFAULT_EXECUTOR
2728
from databao_cli.shared.project.layout import ProjectLayout, find_project
2829

2930
logger = logging.getLogger(__name__)
@@ -60,7 +61,7 @@ def _save_settings_if_changed() -> None:
6061

6162
changed = False
6263

63-
current_executor = st.session_state.get("executor_type", "claude_code")
64+
current_executor = st.session_state.get("executor_type", DEFAULT_EXECUTOR)
6465
if settings.agent.executor_type != current_executor:
6566
settings.agent.executor_type = current_executor
6667
changed = True
@@ -105,7 +106,7 @@ def _initialize_agent(project: ProjectLayout) -> Agent | None:
105106
return None
106107

107108
try:
108-
executor_type = st.session_state.get("executor_type", "claude_code")
109+
executor_type = st.session_state.get("executor_type", DEFAULT_EXECUTOR)
109110

110111
cache = _get_or_create_disk_cache()
111112

@@ -254,7 +255,7 @@ def mark_welcome_completed() -> None:
254255

255256
settings = get_or_create_settings()
256257
settings.welcome_completed = True
257-
settings.agent.executor_type = st.session_state.get("executor_type", "claude_code")
258+
settings.agent.executor_type = st.session_state.get("executor_type", DEFAULT_EXECUTOR)
258259
llm: LLMSettings = st.session_state.get("llm_settings", LLMSettings())
259260
settings.agent.llm = llm
260261
save_settings(settings)
@@ -304,7 +305,7 @@ def init_session_state() -> None:
304305
if "status_message" not in st.session_state:
305306
st.session_state.status_message = None
306307
if "executor_type" not in st.session_state:
307-
st.session_state.executor_type = "claude_code"
308+
st.session_state.executor_type = DEFAULT_EXECUTOR
308309
if "llm_provider" not in st.session_state:
309310
st.session_state.llm_provider = LLMSettings()
310311

src/databao_cli/features/ui/components/sidebar.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from databao_cli.features.ui.components.status import AppStatus, render_status_fragment, set_status
88
from databao_cli.features.ui.project_utils import DatabaoProjectStatus, databao_project_status
99
from databao_cli.features.ui.suggestions import reset_suggestions_state
10-
from databao_cli.shared.executor_utils import EXECUTOR_TYPES
10+
from databao_cli.shared.executor_utils import DEFAULT_EXECUTOR, EXECUTOR_TYPES
1111
from databao_cli.shared.project.layout import ProjectLayout
1212

1313

@@ -105,7 +105,7 @@ def render_executor_selector() -> None:
105105
"""Render executor type selector."""
106106
st.markdown("### ⚙️ Executor")
107107

108-
current = st.session_state.get("executor_type", "claude_code")
108+
current = st.session_state.get("executor_type", DEFAULT_EXECUTOR)
109109

110110
selected = st.selectbox(
111111
"Executor type",

src/databao_cli/features/ui/models/settings.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
import yaml
88

9+
from databao_cli.shared.executor_utils import DEFAULT_EXECUTOR
10+
911
_ENV_VAR_MAP: dict[str, str] = {
1012
"openai": "OPENAI_API_KEY",
1113
"anthropic": "ANTHROPIC_API_KEY",
@@ -53,7 +55,7 @@ def is_configured(self) -> bool:
5355
class AgentSettings:
5456
"""Agent-related settings."""
5557

56-
executor_type: str = "claude_code"
58+
executor_type: str = DEFAULT_EXECUTOR
5759
llm: LLMSettings = field(default_factory=LLMSettings)
5860

5961

@@ -105,7 +107,7 @@ def from_dict(cls, data: dict[str, Any]) -> "Settings":
105107

106108
return cls(
107109
agent=AgentSettings(
108-
executor_type=agent_data.get("executor_type", "claude_code"),
110+
executor_type=agent_data.get("executor_type", DEFAULT_EXECUTOR),
109111
llm=LLMSettings(
110112
active_provider=llm_data.get("active_provider", "openai"),
111113
providers=providers,

src/databao_cli/features/ui/pages/agent_settings.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from databao_cli.features.ui.app import _clear_all_chat_threads
1010
from databao_cli.features.ui.components.status import AppStatus, set_status
1111
from databao_cli.features.ui.models.settings import _ENV_VAR_MAP, LLMProviderConfig, LLMSettings
12-
from databao_cli.shared.executor_utils import EXECUTOR_TYPES, LLM_PROVIDER_MODELS, LLM_PROVIDERS
12+
from databao_cli.shared.executor_utils import DEFAULT_EXECUTOR, EXECUTOR_TYPES, LLM_PROVIDER_MODELS, LLM_PROVIDERS
1313

1414

1515
def render_agent_settings_page(*, auto_apply: bool = False) -> None:
@@ -27,7 +27,7 @@ def render_agent_settings_page(*, auto_apply: bool = False) -> None:
2727
"""
2828
)
2929

30-
current = st.session_state.get("executor_type", "claude_code")
30+
current = st.session_state.get("executor_type", DEFAULT_EXECUTOR)
3131

3232
selected = st.selectbox(
3333
"Executor type",
@@ -66,8 +66,7 @@ def render_agent_settings_page(*, auto_apply: bool = False) -> None:
6666
elif selected == "claude_code":
6767
st.info(
6868
"""
69-
**ClaudeCodeExecutor** is the default and recommended executor.
70-
It uses Claude Code as the execution backend for queries.
69+
**ClaudeCodeExecutor** uses Claude Code as the execution backend for queries.
7170
Requires a valid Anthropic API key configured in the LLM settings.
7271
""",
7372
icon="💡",
@@ -96,7 +95,7 @@ def render_agent_settings_page(*, auto_apply: bool = False) -> None:
9695
provider_keys = list(LLM_PROVIDERS.keys())
9796
current_provider = llm.active_provider if llm.active_provider in provider_keys else "openai"
9897

99-
is_claude_code = st.session_state.get("executor_type", "claude_code") == "claude_code"
98+
is_claude_code = st.session_state.get("executor_type", DEFAULT_EXECUTOR) == "claude_code"
10099

101100
if is_claude_code:
102101
chosen_provider = "anthropic"
@@ -194,7 +193,7 @@ def _persist_current_settings() -> None:
194193
from databao_cli.features.ui.services.settings_persistence import get_or_create_settings, save_settings
195194

196195
settings = get_or_create_settings()
197-
settings.agent.executor_type = st.session_state.get("executor_type", "claude_code")
196+
settings.agent.executor_type = st.session_state.get("executor_type", DEFAULT_EXECUTOR)
198197
llm: LLMSettings = st.session_state.get("llm_settings", LLMSettings())
199198
settings.agent.llm = llm
200199
save_settings(settings)

src/databao_cli/features/ui/pages/general_settings.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from databao_cli.features.ui.services.chat_persistence import delete_all_chats
99
from databao_cli.features.ui.services.settings_persistence import delete_settings
1010
from databao_cli.features.ui.services.storage import get_cache_dir, get_chats_dir, get_storage_base_path
11+
from databao_cli.shared.executor_utils import DEFAULT_EXECUTOR
1112

1213
logger = logging.getLogger(__name__)
1314

@@ -47,7 +48,7 @@ def _confirm_reset_settings() -> None:
4748
with col2:
4849
if st.button("🔄 Reset", type="primary", use_container_width=True):
4950
delete_settings()
50-
st.session_state.executor_type = "claude_code"
51+
st.session_state.executor_type = DEFAULT_EXECUTOR
5152
st.session_state.databao_project = None
5253
st.session_state.agent = None
5354
_clear_all_chat_threads()

src/databao_cli/shared/executor_utils.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
from databao.agent.configs.llm import LLMConfig
44

5+
DEFAULT_EXECUTOR = "separate_executor"
6+
57
EXECUTOR_TYPES = {
6-
"separate_executor": "SeparateExecutor",
7-
"claude_code": "ClaudeCodeExecutor (recommended)",
8+
"separate_executor": "SeparateExecutor (recommended)",
9+
"claude_code": "ClaudeCodeExecutor",
810
"lighthouse": "LighthouseExecutor",
911
"react_duckdb": "ReactDuckDBExecutor (experimental)",
1012
"dbt": "DbtProjectExecutor (experimental)",

0 commit comments

Comments
 (0)