Skip to content

Commit 16512cb

Browse files
committed
fix(tests): Fixed multiple tests and test setup issues, settings iniitialization
1 parent 5bb3b05 commit 16512cb

File tree

33 files changed

+461
-190
lines changed

33 files changed

+461
-190
lines changed

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ name = "code-weaver"
1010
description = "Extensible MCP server for semantic code search with plugin architecture supporting multiple embedding providers, vector databases, and data sources."
1111
readme = { file = "README.md", content-type = "text/markdown" }
1212
requires-python = ">=3.12"
13+
license = "MIT OR Apache-2.0"
1314
license-files = [
1415
"./LICENSE-Apache-2.0",
1516
"./LICENSE-MIT",

src/codeweaver/cli/commands/config.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from codeweaver.core.config.types import CodeWeaverSettingsDict
2323
from codeweaver.core.dependencies import ResolvedProjectPathDep, SettingsDep
2424
from codeweaver.core.di import INJECTED
25+
from codeweaver.core.types import UNSET
2526
from codeweaver.core.utils import detect_root_package, is_codeweaver_config_path
2627
from codeweaver.engine import ConfigChangeAnalyzerDep
2728
from codeweaver.providers import ProviderSettings, ProviderSettingsDep
@@ -125,11 +126,9 @@ def _normalize_provider_configs(
125126
field: Literal["vector_store", "reranking", "embedding", "sparse_embedding", "agent", "data"],
126127
) -> tuple[ProviderSettings, ...]:
127128
"""Normalize provider configs to a tuple of valid config dicts."""
128-
from codeweaver.core.types import Unset
129-
130129
if isinstance(configs, tuple):
131130
return configs
132-
if configs is None or isinstance(configs, Unset):
131+
if configs is None or configs is UNSET:
133132
if detect_root_package() == "core":
134133
return ()
135134
from codeweaver.providers.config.profiles import ProviderProfile
@@ -160,11 +159,9 @@ def _build_provider_details(config) -> str:
160159

161160
def _show_provider_config(provider_settings: ProviderSettingsDep = INJECTED) -> None:
162161
"""Display provider configuration details."""
163-
from codeweaver.core import Unset
164-
165162
display.print_section("Provider Configuration")
166163

167-
if not provider_settings or isinstance(provider_settings, Unset):
164+
if not provider_settings or provider_settings is UNSET:
168165
display.print_warning("No providers configured")
169166
return
170167

@@ -178,7 +175,7 @@ def _show_provider_config(provider_settings: ProviderSettingsDep = INJECTED) ->
178175
)
179176

180177
for category, configs in provider_settings.items():
181-
if category not in valid_categories or not configs or isinstance(configs, Unset):
178+
if category not in valid_categories or not configs or configs is UNSET:
182179
continue
183180

184181
config_list = _normalize_provider_configs(configs, field=category) # ty:ignore[invalid-argument-type]
@@ -192,7 +189,7 @@ def _show_provider_config(provider_settings: ProviderSettingsDep = INJECTED) ->
192189
table.add_column("Details", style="white")
193190

194191
for config in config_list:
195-
if config is None or isinstance(config, Unset):
192+
if config is None or config is UNSET:
196193
continue
197194

198195
provider = config.get("provider")

src/codeweaver/cli/commands/doctor.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,14 @@
2929
from codeweaver.core import (
3030
ProviderCategory,
3131
SettingsMapDep,
32-
Unset,
3332
get_codeweaver_config_paths,
3433
get_project_path,
3534
is_git_dir,
3635
)
3736
from codeweaver.core.config.settings_type import CodeWeaverSettingsType
3837
from codeweaver.core.config.types import CodeWeaverSettingsDict
3938
from codeweaver.core.di import INJECTED
40-
from codeweaver.core.types.dictview import DictView
39+
from codeweaver.core.types import UNSET, DictView
4140
from codeweaver.core.utils import has_package
4241
from codeweaver.engine import ConfigChangeAnalyzerDep
4342

@@ -291,8 +290,8 @@ def check_configuration_file(settings: CodeWeaverSettingsType) -> DoctorCheck:
291290
check.message = f"Valid config at {found_config}"
292291
elif (
293292
settings.config_file
294-
and not isinstance(settings.config_file, Unset)
295-
and settings.config_file.exists()
293+
and settings.config_file is not UNSET
294+
and cast(Path, settings.config_file).exists()
296295
):
297296
# Fallback to settings.config_file if set
298297
check.status = "✅"
@@ -373,7 +372,7 @@ async def check_vector_store_config(settings: ProviderSettings) -> DoctorCheck:
373372
check = DoctorCheck("Vector Store Configuration")
374373

375374
# Check if vector store is configured in provider settings
376-
if isinstance(settings.vector_store, Unset):
375+
if settings.vector_store is UNSET:
377376
return DoctorCheck.set_check(
378377
check.name,
379378
"warn",
@@ -902,13 +901,13 @@ async def process_checks(
902901
["Check logs for details", "Report issue if this persists"],
903902
)
904903
)
905-
if config_failed or settings is None or isinstance(settings, Unset):
904+
if config_failed or settings is None or settings is UNSET:
906905
return checks
907906
checks.extend((check_project_path(settings), check_indexer_config(settings)))
908907
if (
909908
not hasattr(settings, "provider")
910909
or not (provider_settings := settings.provider)
911-
or isinstance(provider_settings, Unset)
910+
or provider_settings is UNSET
912911
):
913912
checks.append(
914913
DoctorCheck.set_check(
@@ -941,7 +940,7 @@ async def process_checks(
941940
if (
942941
not hasattr(settings, "provider")
943942
or not (provider_settings := settings.provider)
944-
or isinstance(provider_settings, Unset)
943+
or provider_settings is UNSET
945944
):
946945
return checks
947946
if remote_providers := {

src/codeweaver/cli/commands/index.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@
1919

2020
from codeweaver.cli.dependencies import setup_cli_di
2121
from codeweaver.cli.ui import CLIErrorHandler, IndexingProgress, StatusDisplay, get_display
22-
from codeweaver.core import CodeWeaverError, SettingsMapDep, Unset
22+
from codeweaver.core import CodeWeaverError, SettingsMapDep
2323
from codeweaver.core.config.types import CodeWeaverSettingsDict
2424
from codeweaver.core.constants import ONE_MINUTE
2525
from codeweaver.core.di.depends import INJECTED
26-
from codeweaver.core.types.dictview import DictView
26+
from codeweaver.core.types import UNSET, DictView
2727
from codeweaver.engine import CheckpointManager, FileManifestManager
2828
from codeweaver.engine.services.indexing_service import IndexingService
2929
from codeweaver.providers import VectorStoreProvider
@@ -87,7 +87,7 @@ async def _derive_collection_name(
8787
(provider_settings := settings.provider)
8888
and isinstance(provider_settings, ProviderSettings)
8989
and (vector_settings := provider_settings.vector_store)
90-
and vector_settings is not Unset
90+
and vector_settings is not UNSET
9191
):
9292
return (
9393
vector_settings[0].collection.collection_name

src/codeweaver/cli/commands/init.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -135,17 +135,18 @@ def _create_codeweaver_config(
135135
config_path.parent.mkdir(parents=True, exist_ok=True)
136136

137137
# Create settings from profile (don't use DI since container isn't initialized yet)
138-
from codeweaver.providers.config.providers import ProviderSettings
139138
from codeweaver.server.config.settings import CodeWeaverSettings
140139

141-
settings = CodeWeaverSettings(
142-
project_path=project_path,
143-
project_name=project_path.name,
144-
config_file=config_path,
145-
provider=ProviderSettings.model_construct(**(profile.as_provider_settings())),
146-
)
140+
# Use model_validate to ensure all fields are correctly marked as "set"
141+
# and not just passed through the constructor which might ignore them.
142+
settings = CodeWeaverSettings.model_validate({
143+
"project_path": project_path,
144+
"project_name": project_path.name,
145+
"config_file": config_path,
146+
"provider": profile.as_provider_settings(),
147+
})
147148

148-
# Save to TOML file
149+
# Save to TOML file using the robust settings method
149150
settings.save_to_file(config_path)
150151

151152
display.print_success(f"Created configuration file: {config_path}")

src/codeweaver/cli/commands/start.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
from codeweaver.cli.ui import CLIErrorHandler, StatusDisplay, get_display
2828
from codeweaver.core import (
29+
UNSET,
2930
CodeWeaverSettingsType,
3031
ProgressReporter,
3132
ProgressReporterDep,
@@ -264,19 +265,17 @@ async def wait_for_shutdown() -> None:
264265

265266
def get_network_settings() -> NetworkConfig:
266267
"""Get network configuration from settings."""
267-
from codeweaver.core import Unset
268-
269268
settings_map = _get_settings_map()
270269

271270
management_host = (
272271
settings_map["management_host"]
273-
if settings_map["management_host"] is not Unset
272+
if settings_map["management_host"] is not UNSET
274273
else "127.0.0.1"
275274
)
276275
management_port = (
277-
settings_map["management_port"] if settings_map["management_port"] is not Unset else 9329
276+
settings_map["management_port"] if settings_map["management_port"] is not UNSET else 9329
278277
)
279-
if (mcp_http_server := settings_map["mcp_server"]) is not Unset:
278+
if (mcp_http_server := settings_map["mcp_server"]) is not UNSET:
280279
mcp_host = mcp_http_server.get("host", "127.0.0.1")
281280
mcp_port = mcp_http_server.get("port", 9328)
282281
else:
@@ -392,11 +391,10 @@ async def start(
392391
display.print_error("Invalid host or port provided. Please check your inputs.")
393392
return
394393
get_project_path = lateimport("codeweaver.core", "get_project_path")
395-
from codeweaver.core import Unset
396394

397395
project = (
398396
project or project_path
399-
if (project_path := settings_map.get("project_path")) is not Unset
397+
if (project_path := settings_map.get("project_path")) is not UNSET
400398
else get_project_path._resolve()()
401399
)
402400
if not project and isinstance(project, Path) and project.exists():

src/codeweaver/cli/commands/status.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from rich.table import Table
2020

2121
from codeweaver.cli.ui import CLIErrorHandler, StatusDisplay, get_display
22-
from codeweaver.core import SettingsMapDep, Unset
22+
from codeweaver.core import UNSET, SettingsMapDep
2323
from codeweaver.core.config.types import CodeWeaverSettingsDict
2424
from codeweaver.core.di.depends import INJECTED
2525
from codeweaver.core.types.dictview import DictView
@@ -41,7 +41,7 @@ def get_url() -> str:
4141
mcp_server_settings = settings_map["mcp_server"]
4242
run_args = (
4343
DefaultFastMcpHttpRunArgs
44-
if mcp_server_settings["run_args"] is Unset
44+
if mcp_server_settings["run_args"] is UNSET
4545
else mcp_server_settings["run_args"]
4646
)
4747
host = run_args["host"] or "127.0.0.1"
@@ -54,11 +54,11 @@ def get_management_url() -> str:
5454
settings_map = _settings_map()
5555
mgmt_host = (
5656
settings_map["management_host"]
57-
if settings_map["management_host"] is not Unset
57+
if settings_map["management_host"] is not UNSET
5858
else "127.0.0.1"
5959
)
6060
mgmt_port = (
61-
settings_map["management_port"] if settings_map["management_port"] is not Unset else 9329
61+
settings_map["management_port"] if settings_map["management_port"] is not UNSET else 9329
6262
)
6363
return f"http://{mgmt_host}:{mgmt_port}"
6464

src/codeweaver/cli/commands/stop.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@
1616
from pydantic import PositiveInt
1717

1818
from codeweaver.cli.ui import CLIErrorHandler, StatusDisplay, get_display
19-
from codeweaver.core import SettingsMapDep, Unset
19+
from codeweaver.core import SettingsMapDep
2020
from codeweaver.core.config.types import CodeWeaverSettingsDict
2121
from codeweaver.core.di import INJECTED
22-
from codeweaver.core.types.dictview import DictView
22+
from codeweaver.core.types import UNSET, DictView
2323

2424

2525
def _settings_map(settings: SettingsMapDep = INJECTED) -> DictView[CodeWeaverSettingsDict]:
@@ -36,11 +36,11 @@ def _get_default_host_port() -> tuple[str, int]:
3636
settings_map = _settings_map()
3737
mgmt_host = (
3838
settings_map["management_host"]
39-
if settings_map["management_host"] is not Unset
39+
if settings_map["management_host"] is not UNSET
4040
else "127.0.0.1"
4141
)
4242
mgmt_port = (
43-
settings_map["management_port"] if settings_map["management_port"] is not Unset else 9329
43+
settings_map["management_port"] if settings_map["management_port"] is not UNSET else 9329
4444
)
4545
return mgmt_host, mgmt_port
4646

0 commit comments

Comments
 (0)