Spaces:
Sleeping
Sleeping
| """Admin config value state and API response assembly.""" | |
| import os | |
| from typing import Any | |
| from free_claude_code.config.paths import managed_env_path | |
| from .manifest import ( | |
| FIELD_BY_KEY, | |
| FIELDS, | |
| SECTIONS, | |
| ConfigFieldSpec, | |
| ConfigOptionSpec, | |
| ) | |
| from .sources import ( | |
| configured_env_files, | |
| dotenv_values_from_file, | |
| explicit_env_path, | |
| is_locked_source, | |
| repo_env_path, | |
| template_values, | |
| ) | |
| from .status import provider_config_status | |
| MASKED_SECRET = "********" | |
| ValueState = dict[str, dict[str, Any]] | |
| def normalize_for_env(value: Any) -> str: | |
| """Normalize a submitted admin value for dotenv persistence.""" | |
| if value is None: | |
| return "" | |
| if isinstance(value, bool): | |
| return "true" if value else "false" | |
| return str(value) | |
| def display_value(field: ConfigFieldSpec, value: str) -> str: | |
| """Return the Admin UI display value for a raw config value.""" | |
| if field.secret and value: | |
| return MASKED_SECRET | |
| return value | |
| def load_value_state() -> ValueState: | |
| """Load effective admin field values and their sources.""" | |
| values = template_values() | |
| sources = {key: "template" if key in values else "default" for key in FIELD_BY_KEY} | |
| for source, path in configured_env_files(): | |
| file_values = dotenv_values_from_file(path) | |
| for key, value in file_values.items(): | |
| if key in FIELD_BY_KEY: | |
| values[key] = value | |
| sources[key] = source | |
| for key in FIELD_BY_KEY: | |
| if key in os.environ: | |
| values[key] = os.environ[key] | |
| sources[key] = "process" | |
| return { | |
| key: { | |
| "value": values.get(key, ""), | |
| "source": sources.get(key, "default"), | |
| } | |
| for key in FIELD_BY_KEY | |
| } | |
| def load_config_response() -> dict[str, Any]: | |
| """Return manifest and current config values for the admin UI.""" | |
| state = load_value_state() | |
| fields: list[dict[str, Any]] = [] | |
| for field in FIELDS: | |
| entry = state[field.key] | |
| source = entry["source"] | |
| raw_value = entry["value"] | |
| fields.append( | |
| { | |
| "key": field.key, | |
| "label": field.label, | |
| "section": field.section_id, | |
| "type": field.field_type, | |
| "value": display_value(field, raw_value), | |
| "configured": bool(str(raw_value).strip()), | |
| "source": source, | |
| "locked": is_locked_source(source), | |
| "secret": field.secret, | |
| "advanced": field.advanced, | |
| "restart_required": field.restart_required, | |
| "session_sensitive": field.session_sensitive, | |
| "options": [ | |
| ( | |
| {"value": option.value, "label": option.label} | |
| if isinstance(option, ConfigOptionSpec) | |
| else {"value": option, "label": option} | |
| ) | |
| for option in field.options | |
| ], | |
| "description": field.description, | |
| } | |
| ) | |
| return { | |
| "sections": [ | |
| { | |
| "id": section.section_id, | |
| "label": section.label, | |
| "description": section.description, | |
| "advanced": section.advanced, | |
| } | |
| for section in SECTIONS | |
| ], | |
| "fields": fields, | |
| "paths": { | |
| "managed": str(managed_env_path()), | |
| "repo": str(repo_env_path()), | |
| "explicit": str(explicit_env_path()) if explicit_env_path() else None, | |
| }, | |
| "provider_status": provider_config_status(state), | |
| } | |