Skip to content

Commit 48f8199

Browse files
committed
SNOW-2306184: config refactor - connection level overwrite for config merging
1 parent 2de73b5 commit 48f8199

File tree

10 files changed

+1253
-517
lines changed

10 files changed

+1253
-517
lines changed

src/snowflake/cli/api/config_ng/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
Enhanced Configuration System - Next Generation (NG)
1717
1818
This package implements a simple, extensible configuration system with:
19+
- Two-phase resolution: file sources use connection-level replacement,
20+
overlay sources (env/CLI) use field-level merging
1921
- List-order precedence (explicit ordering in source list)
2022
- Migration support (SnowCLI and SnowSQL compatibility)
2123
- Complete resolution history tracking
@@ -26,8 +28,10 @@
2628
ConfigValue,
2729
ResolutionEntry,
2830
ResolutionHistory,
31+
SourceType,
2932
ValueSource,
3033
)
34+
from snowflake.cli.api.config_ng.presentation import ResolutionPresenter
3135
from snowflake.cli.api.config_ng.resolution_logger import (
3236
check_value_source,
3337
explain_configuration,
@@ -71,9 +75,11 @@
7175
"ResolutionEntry",
7276
"ResolutionHistory",
7377
"ResolutionHistoryTracker",
78+
"ResolutionPresenter",
7479
"show_all_resolution_chains",
7580
"show_resolution_chain",
7681
"SnowSQLConfigFile",
7782
"SnowSQLEnvironment",
83+
"SourceType",
7884
"ValueSource",
7985
]

src/snowflake/cli/api/config_ng/core.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,22 @@
2626
from abc import ABC, abstractmethod
2727
from dataclasses import dataclass, field
2828
from datetime import datetime
29+
from enum import Enum
2930
from typing import Any, Callable, Dict, List, Literal, Optional
3031

3132

33+
class SourceType(Enum):
34+
"""
35+
Classification of configuration sources by merging behavior.
36+
37+
FILE sources use connection-level replacement (later file replaces entire connection).
38+
OVERLAY sources use field-level overlay (add/override individual fields).
39+
"""
40+
41+
FILE = "file"
42+
OVERLAY = "overlay"
43+
44+
3245
@dataclass(frozen=True)
3346
class ConfigValue:
3447
"""
@@ -104,6 +117,15 @@ def source_name(self) -> SourceName:
104117
"""
105118
...
106119

120+
@property
121+
@abstractmethod
122+
def source_type(self) -> SourceType:
123+
"""
124+
Classification of this source for merging behavior.
125+
FILE sources replace entire connections, OVERLAY sources merge per-field.
126+
"""
127+
...
128+
107129
@abstractmethod
108130
def discover(self, key: Optional[str] = None) -> Dict[str, ConfigValue]:
109131
"""

0 commit comments

Comments
 (0)