@@ -40,6 +40,7 @@ class FileConfig(BaseModel):
40
40
serialize : Optional [List [str ]] # If different from outer scope
41
41
search : Optional [str ] # If different from outer scope
42
42
replace : Optional [str ] # If different from outer scope
43
+ ignore_missing_version : Optional [bool ]
43
44
44
45
45
46
class Config (BaseSettings ):
@@ -50,6 +51,7 @@ class Config(BaseSettings):
50
51
serialize : List [str ] = Field (min_items = 1 )
51
52
search : str
52
53
replace : str
54
+ ignore_missing_version : bool
53
55
tag : bool
54
56
sign_tags : bool
55
57
tag_name : str
@@ -84,6 +86,7 @@ def version_config(self) -> "VersionConfig":
84
86
"serialize" : ["{major}.{minor}.{patch}" ],
85
87
"search" : "{current_version}" ,
86
88
"replace" : "{new_version}" ,
89
+ "ignore_missing_version" : False ,
87
90
"tag" : False ,
88
91
"sign_tags" : False ,
89
92
"tag_name" : "v{new_version}" ,
@@ -105,6 +108,21 @@ def version_config(self) -> "VersionConfig":
105
108
)
106
109
107
110
111
+ def get_all_file_configs (config_dict : dict ) -> List [FileConfig ]:
112
+ """Make sure all version parts are included."""
113
+ defaults = {
114
+ "parse" : config_dict ["parse" ],
115
+ "serialize" : config_dict ["serialize" ],
116
+ "search" : config_dict ["search" ],
117
+ "replace" : config_dict ["replace" ],
118
+ "ignore_missing_version" : config_dict ["ignore_missing_version" ],
119
+ }
120
+ files = [{k : v for k , v in filecfg .items () if v } for filecfg in config_dict ["files" ]]
121
+ for f in files :
122
+ f .update ({k : v for k , v in defaults .items () if k not in f })
123
+ return [FileConfig (** f ) for f in files ]
124
+
125
+
108
126
def get_configuration (config_file : Union [str , Path , None ] = None , ** overrides ) -> Config :
109
127
"""
110
128
Return the configuration based on any configuration files and overrides.
@@ -129,6 +147,11 @@ def get_configuration(config_file: Union[str, Path, None] = None, **overrides) -
129
147
130
148
# Set any missing version parts
131
149
config_dict ["parts" ] = get_all_part_configs (config_dict )
150
+
151
+ # Set any missing file configuration
152
+ config_dict ["files" ] = get_all_file_configs (config_dict )
153
+
154
+ # Resolve the SCMInfo class for Pydantic's BaseSettings
132
155
Config .update_forward_refs (SCMInfo = SCMInfo )
133
156
config = Config (** config_dict ) # type: ignore[arg-type]
134
157
0 commit comments