Skip to content

Commit 478c655

Browse files
author
LittleCoinCoin
committed
fix: correct report display logic to exclude unset fields
- Only include non-None fields in Omni model creation - Fix handle_mcp_configure to conditionally add fields - Fix handle_package_add to conditionally add fields - Fix handle_package_sync to conditionally add fields (dry-run and actual) - Reports now correctly show only set fields, not 'UPDATED None --> None' This fixes the bug where fields with None values were showing as 'UPDATED None --> None' instead of being excluded from the report. The fix ensures model_dump(exclude_unset=True) works correctly by only including fields that have actual values when creating Omni models. All tests passing (248/248, 100% success rate)
1 parent f244c61 commit 478c655

File tree

1 file changed

+56
-33
lines changed

1 file changed

+56
-33
lines changed

hatch/cli_hatch.py

Lines changed: 56 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -609,15 +609,17 @@ def handle_mcp_configure(host: str, server_name: str, command: str, args: list,
609609
headers_dict = parse_headers(headers)
610610

611611
# Create Omni configuration (universal model)
612-
omni_config_data = {
613-
'name': server_name,
614-
'command': command,
615-
'args': args, # Fixed: Don't convert None to [] - let Pydantic handle it
616-
'env': env_dict,
617-
'url': url
618-
}
619-
620-
# Only add headers if URL is provided
612+
# Only include fields that have actual values to ensure model_dump(exclude_unset=True) works correctly
613+
omni_config_data = {'name': server_name}
614+
615+
if command is not None:
616+
omni_config_data['command'] = command
617+
if args is not None:
618+
omni_config_data['args'] = args
619+
if env_dict:
620+
omni_config_data['env'] = env_dict
621+
if url is not None:
622+
omni_config_data['url'] = url
621623
if url and headers_dict:
622624
omni_config_data['headers'] = headers_dict
623625

@@ -1582,14 +1584,21 @@ def main():
15821584
pkg_name = package_names[i]
15831585
try:
15841586
# Convert MCPServerConfig to Omni model
1585-
omni_config = MCPServerConfigOmni(
1586-
name=server_config.name,
1587-
command=server_config.command,
1588-
args=server_config.args,
1589-
env=server_config.env,
1590-
url=server_config.url,
1591-
headers=getattr(server_config, 'headers', None)
1592-
)
1587+
# Only include fields that have actual values
1588+
omni_config_data = {'name': server_config.name}
1589+
if server_config.command is not None:
1590+
omni_config_data['command'] = server_config.command
1591+
if server_config.args is not None:
1592+
omni_config_data['args'] = server_config.args
1593+
if server_config.env:
1594+
omni_config_data['env'] = server_config.env
1595+
if server_config.url is not None:
1596+
omni_config_data['url'] = server_config.url
1597+
headers = getattr(server_config, 'headers', None)
1598+
if headers is not None:
1599+
omni_config_data['headers'] = headers
1600+
1601+
omni_config = MCPServerConfigOmni(**omni_config_data)
15931602

15941603
# Convert to host-specific model
15951604
host_config = host_model_class.from_omni(omni_config)
@@ -1749,14 +1758,21 @@ def main():
17491758
continue
17501759

17511760
# Convert to Omni model
1752-
omni_config = MCPServerConfigOmni(
1753-
name=config.name,
1754-
command=config.command,
1755-
args=config.args,
1756-
env=config.env,
1757-
url=config.url,
1758-
headers=getattr(config, 'headers', None)
1759-
)
1761+
# Only include fields that have actual values
1762+
omni_config_data = {'name': config.name}
1763+
if config.command is not None:
1764+
omni_config_data['command'] = config.command
1765+
if config.args is not None:
1766+
omni_config_data['args'] = config.args
1767+
if config.env:
1768+
omni_config_data['env'] = config.env
1769+
if config.url is not None:
1770+
omni_config_data['url'] = config.url
1771+
headers = getattr(config, 'headers', None)
1772+
if headers is not None:
1773+
omni_config_data['headers'] = headers
1774+
1775+
omni_config = MCPServerConfigOmni(**omni_config_data)
17601776

17611777
# Generate report
17621778
report = generate_conversion_report(
@@ -1797,14 +1813,21 @@ def main():
17971813
for pkg_name, server_config in server_configs:
17981814
try:
17991815
# Convert MCPServerConfig to Omni model
1800-
omni_config = MCPServerConfigOmni(
1801-
name=server_config.name,
1802-
command=server_config.command,
1803-
args=server_config.args,
1804-
env=server_config.env,
1805-
url=server_config.url,
1806-
headers=getattr(server_config, 'headers', None)
1807-
)
1816+
# Only include fields that have actual values
1817+
omni_config_data = {'name': server_config.name}
1818+
if server_config.command is not None:
1819+
omni_config_data['command'] = server_config.command
1820+
if server_config.args is not None:
1821+
omni_config_data['args'] = server_config.args
1822+
if server_config.env:
1823+
omni_config_data['env'] = server_config.env
1824+
if server_config.url is not None:
1825+
omni_config_data['url'] = server_config.url
1826+
headers = getattr(server_config, 'headers', None)
1827+
if headers is not None:
1828+
omni_config_data['headers'] = headers
1829+
1830+
omni_config = MCPServerConfigOmni(**omni_config_data)
18081831

18091832
# Convert to host-specific model
18101833
host_config = host_model_class.from_omni(omni_config)

0 commit comments

Comments
 (0)