Skip to content

Commit b538308

Browse files
committed
Refactored VersionComponentConfig to VersionComponentSpec.
More consistent with VersionSpec
1 parent 6388eb9 commit b538308

11 files changed

+94
-82
lines changed

bumpversion/config/models.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from pydantic_settings import BaseSettings, SettingsConfigDict
1111

1212
from bumpversion.ui import get_indented_logger
13-
from bumpversion.versioning.models import VersionComponentConfig # NOQA: TCH001
13+
from bumpversion.versioning.models import VersionComponentSpec # NOQA: TCH001
1414

1515
if TYPE_CHECKING:
1616
from bumpversion.scm import SCMInfo
@@ -92,7 +92,7 @@ class Config(BaseSettings):
9292
message: str
9393
commit_args: Optional[str]
9494
scm_info: Optional["SCMInfo"]
95-
parts: Dict[str, VersionComponentConfig]
95+
parts: Dict[str, VersionComponentSpec]
9696
files: List[FileChange] = Field(default_factory=list)
9797
included_paths: List[str] = Field(default_factory=list)
9898
excluded_paths: List[str] = Field(default_factory=list)

bumpversion/config/utils.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from bumpversion.config.models import FileChange
88
from bumpversion.exceptions import BumpVersionError
9-
from bumpversion.versioning.models import VersionComponentConfig
9+
from bumpversion.versioning.models import VersionComponentSpec
1010

1111

1212
def get_all_file_configs(config_dict: dict) -> List[FileChange]:
@@ -25,7 +25,7 @@ def get_all_file_configs(config_dict: dict) -> List[FileChange]:
2525
return [FileChange(**f) for f in files]
2626

2727

28-
def get_all_part_configs(config_dict: dict) -> Dict[str, VersionComponentConfig]:
28+
def get_all_part_configs(config_dict: dict) -> Dict[str, VersionComponentSpec]:
2929
"""Make sure all version parts are included."""
3030
import re
3131

@@ -39,9 +39,9 @@ def get_all_part_configs(config_dict: dict) -> Dict[str, VersionComponentConfig]
3939
for label in parsing_groups:
4040
is_independent = label.startswith("$")
4141
part_configs[label] = (
42-
VersionComponentConfig(**parts[label])
42+
VersionComponentSpec(**parts[label])
4343
if label in parts
44-
else VersionComponentConfig(independent=is_independent)
44+
else VersionComponentSpec(independent=is_independent)
4545
)
4646
return part_configs
4747

bumpversion/files.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from bumpversion.ui import get_indented_logger
1212
from bumpversion.utils import get_nested_value, set_nested_value
1313
from bumpversion.version_part import VersionConfig
14-
from bumpversion.versioning.models import Version, VersionComponentConfig
14+
from bumpversion.versioning.models import Version, VersionComponentSpec
1515

1616
logger = get_indented_logger(__name__)
1717

@@ -300,7 +300,7 @@ class DataFileUpdater:
300300
def __init__(
301301
self,
302302
file_change: FileChange,
303-
version_part_configs: Dict[str, VersionComponentConfig],
303+
version_part_configs: Dict[str, VersionComponentSpec],
304304
) -> None:
305305
self.file_change = file_change
306306
self.version_config = VersionConfig(

bumpversion/version_part.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from bumpversion.ui import get_indented_logger
88
from bumpversion.utils import labels_for_format
9-
from bumpversion.versioning.models import Version, VersionComponentConfig, VersionSpec
9+
from bumpversion.versioning.models import Version, VersionComponentSpec, VersionSpec
1010
from bumpversion.versioning.serialization import parse_version, serialize
1111

1212
logger = get_indented_logger(__name__)
@@ -23,7 +23,7 @@ def __init__(
2323
serialize: Tuple[str],
2424
search: str,
2525
replace: str,
26-
part_configs: Optional[Dict[str, VersionComponentConfig]] = None,
26+
part_configs: Optional[Dict[str, VersionComponentSpec]] = None,
2727
):
2828
try:
2929
self.parse_regex = re.compile(parse, re.VERBOSE)

bumpversion/versioning/conventions.py

+15-15
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
"""Standard version conventions."""
2-
from bumpversion.versioning.models import VersionComponentConfig, VersionSpec
2+
from bumpversion.versioning.models import VersionComponentSpec, VersionSpec
33

44
# Adapted from https://packaging.python.org/en/latest/specifications/version-specifiers/
55
PEP440_PATTERN = r"""
@@ -54,14 +54,14 @@
5454
"{major}.{minor}.{patch}",
5555
]
5656
PEP440_COMPONENT_CONFIGS = {
57-
"major": VersionComponentConfig(),
58-
"minor": VersionComponentConfig(),
59-
"patch": VersionComponentConfig(),
60-
"pre_l": VersionComponentConfig(values=["", "a", "b", "rc"]),
61-
"pre_n": VersionComponentConfig(),
62-
"post": VersionComponentConfig(depends_on="patch"),
63-
"dev": VersionComponentConfig(depends_on="patch"),
64-
"local": VersionComponentConfig(depends_on="patch", optional_value=""),
57+
"major": VersionComponentSpec(),
58+
"minor": VersionComponentSpec(),
59+
"patch": VersionComponentSpec(),
60+
"pre_l": VersionComponentSpec(values=["", "a", "b", "rc"]),
61+
"pre_n": VersionComponentSpec(),
62+
"post": VersionComponentSpec(depends_on="patch"),
63+
"dev": VersionComponentSpec(depends_on="patch"),
64+
"local": VersionComponentSpec(depends_on="patch", optional_value=""),
6565
}
6666

6767

@@ -95,12 +95,12 @@ def pep440_version_spec() -> VersionSpec:
9595
"{major}.{minor}.{patch}",
9696
]
9797
SEMVER_COMPONENT_CONFIGS = {
98-
"major": VersionComponentConfig(),
99-
"minor": VersionComponentConfig(),
100-
"patch": VersionComponentConfig(),
101-
"pre_l": VersionComponentConfig(values=["", "a", "b", "rc"]),
102-
"pre_n": VersionComponentConfig(),
103-
"buildmetadata": VersionComponentConfig(independent=True),
98+
"major": VersionComponentSpec(),
99+
"minor": VersionComponentSpec(),
100+
"patch": VersionComponentSpec(),
101+
"pre_l": VersionComponentSpec(values=["", "a", "b", "rc"]),
102+
"pre_n": VersionComponentSpec(),
103+
"buildmetadata": VersionComponentSpec(independent=True),
104104
}
105105

106106

bumpversion/versioning/models.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ def __eq__(self, other: Any) -> bool:
9393
return self.value == other.value if isinstance(other, VersionComponent) else False
9494

9595

96-
class VersionComponentConfig(BaseModel):
96+
class VersionComponentSpec(BaseModel):
9797
"""
9898
Configuration of a version component.
9999
@@ -123,7 +123,7 @@ def create_component(self, value: Union[str, int, None] = None) -> VersionCompon
123123
class VersionSpec:
124124
"""The specification of a version's components and their relationships."""
125125

126-
def __init__(self, components: Dict[str, VersionComponentConfig], order: Optional[List[str]] = None):
126+
def __init__(self, components: Dict[str, VersionComponentSpec], order: Optional[List[str]] = None):
127127
if not components:
128128
raise ValueError("A VersionSpec must have at least one component.")
129129
if not order:

tests/test_configuredfile.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""Tests for the ConfiguredFile class."""
22
from bumpversion.files import ConfiguredFile, FileChange
33
from bumpversion.version_part import VersionConfig
4-
from bumpversion.versioning.models import VersionComponentConfig
4+
from bumpversion.versioning.models import VersionComponentSpec
55

66

77
class TestConfiguredFile:
@@ -27,9 +27,9 @@ def test_file_change_is_identical_to_input(self):
2727
search="{current_version}",
2828
replace="{new_version}",
2929
part_configs={
30-
"major": VersionComponentConfig(),
31-
"minor": VersionComponentConfig(),
32-
"patch": VersionComponentConfig(),
30+
"major": VersionComponentSpec(),
31+
"minor": VersionComponentSpec(),
32+
"patch": VersionComponentSpec(),
3333
},
3434
)
3535
cfg_file = ConfiguredFile(change, version_config)
@@ -53,9 +53,9 @@ def test_version_config_uses_file_change_attrs(self):
5353
search="{current_version}",
5454
replace="{new_version}",
5555
part_configs={
56-
"major": VersionComponentConfig(),
57-
"minor": VersionComponentConfig(),
58-
"patch": VersionComponentConfig(),
56+
"major": VersionComponentSpec(),
57+
"minor": VersionComponentSpec(),
58+
"patch": VersionComponentSpec(),
5959
},
6060
)
6161
expected = VersionConfig(

tests/test_versioning/test_models_version.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Tests for the Version class."""
22

3-
from bumpversion.versioning.models import VersionComponentConfig
3+
from bumpversion.versioning.models import VersionComponentSpec
44
from bumpversion.versioning.models import VersionSpec
55
import pytest
66
from pytest import param
@@ -10,10 +10,10 @@
1010
def version_spec():
1111
"""Return a version spec."""
1212
config = {
13-
"major": VersionComponentConfig(),
14-
"minor": VersionComponentConfig(),
15-
"patch": VersionComponentConfig(),
16-
"build": VersionComponentConfig(optional_value="0", independent=True),
13+
"major": VersionComponentSpec(),
14+
"minor": VersionComponentSpec(),
15+
"patch": VersionComponentSpec(),
16+
"build": VersionComponentSpec(optional_value="0", independent=True),
1717
}
1818

1919
return VersionSpec(config)

tests/test_versioning/test_models_versioncomponent.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Tests of the VersionPart model."""
22

3-
from bumpversion.versioning.models import VersionComponentConfig
3+
from bumpversion.versioning.models import VersionComponentSpec
44
from bumpversion.versioning.functions import ValuesFunction, NumericFunction
55
import pytest
66

@@ -15,7 +15,7 @@
1515
)
1616
def version_component_config(request):
1717
"""Return a three-part and a two-part version part configuration."""
18-
return VersionComponentConfig(**request.param)
18+
return VersionComponentSpec(**request.param)
1919

2020

2121
class TestVersionComponent:
@@ -27,11 +27,11 @@ def test_none_value_uses_optional_value(self, version_component_config):
2727

2828
def test_config_with_values_selects_values_function(self):
2929
values = ["0", "1", "2"]
30-
vp = VersionComponentConfig(values=values).create_component()
30+
vp = VersionComponentSpec(values=values).create_component()
3131
assert isinstance(vp.func, ValuesFunction)
3232

3333
def test_config_without_values_selects_numeric_function(self):
34-
vp = VersionComponentConfig().create_component()
34+
vp = VersionComponentSpec().create_component()
3535
assert isinstance(vp.func, NumericFunction)
3636

3737
def test_copy_returns_new_version_part(self, version_component_config):

tests/test_versioning/test_models_versionspec.py

+33-33
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import pytest
44
from bumpversion.versioning.models import VersionSpec
5-
from bumpversion.versioning.models import VersionComponentConfig
5+
from bumpversion.versioning.models import VersionComponentSpec
66

77

88
class TestVersionSpec:
@@ -21,9 +21,9 @@ def test_empty_order_uses_order_of_components(self):
2121
"""If the order is empty, it uses the component order."""
2222
# Arrange
2323
config = {
24-
"major": VersionComponentConfig(),
25-
"minor": VersionComponentConfig(),
26-
"patch": VersionComponentConfig(),
24+
"major": VersionComponentSpec(),
25+
"minor": VersionComponentSpec(),
26+
"patch": VersionComponentSpec(),
2727
}
2828

2929
# Act
@@ -36,9 +36,9 @@ def test_extra_items_raises_error(self):
3636
"""If the order contains component names that do not exist, it raises and error."""
3737
# Arrange
3838
config = {
39-
"major": VersionComponentConfig(),
40-
"minor": VersionComponentConfig(),
41-
"patch": VersionComponentConfig(),
39+
"major": VersionComponentSpec(),
40+
"minor": VersionComponentSpec(),
41+
"patch": VersionComponentSpec(),
4242
}
4343

4444
# Act
@@ -49,9 +49,9 @@ def test_subset_of_items_works_fine(self):
4949
"""An order containing a subset of component names works fine."""
5050
# Arrange
5151
config = {
52-
"major": VersionComponentConfig(),
53-
"minor": VersionComponentConfig(),
54-
"patch": VersionComponentConfig(),
52+
"major": VersionComponentSpec(),
53+
"minor": VersionComponentSpec(),
54+
"patch": VersionComponentSpec(),
5555
}
5656

5757
# Act
@@ -64,9 +64,9 @@ def test_dependency_map_follows_order(self):
6464
"""The order of components correctly creates the dependency map."""
6565
# Arrange
6666
config = {
67-
"major": VersionComponentConfig(),
68-
"minor": VersionComponentConfig(),
69-
"patch": VersionComponentConfig(),
67+
"major": VersionComponentSpec(),
68+
"minor": VersionComponentSpec(),
69+
"patch": VersionComponentSpec(),
7070
}
7171

7272
# Act
@@ -81,9 +81,9 @@ def test_dependency_map_skips_independent_components(self):
8181
"""Independent components are not in the dependency map."""
8282
# Arrange
8383
config = {
84-
"major": VersionComponentConfig(),
85-
"minor": VersionComponentConfig(independent=True),
86-
"patch": VersionComponentConfig(),
84+
"major": VersionComponentSpec(),
85+
"minor": VersionComponentSpec(independent=True),
86+
"patch": VersionComponentSpec(),
8787
}
8888

8989
# Act
@@ -99,10 +99,10 @@ def test_empty_values_creates_default_version(self):
9999
"""An empty values dict raises an error."""
100100
# Arrange
101101
config = {
102-
"major": VersionComponentConfig(),
103-
"minor": VersionComponentConfig(),
104-
"patch": VersionComponentConfig(),
105-
"build": VersionComponentConfig(independent=True),
102+
"major": VersionComponentSpec(),
103+
"minor": VersionComponentSpec(),
104+
"patch": VersionComponentSpec(),
105+
"build": VersionComponentSpec(independent=True),
106106
}
107107
version_spec = VersionSpec(config)
108108

@@ -119,10 +119,10 @@ def test_missing_values_uses_component_first_value(self):
119119
"""A missing value raises an error."""
120120
# Arrange
121121
config = {
122-
"major": VersionComponentConfig(),
123-
"minor": VersionComponentConfig(),
124-
"patch": VersionComponentConfig(),
125-
"build": VersionComponentConfig(independent=True),
122+
"major": VersionComponentSpec(),
123+
"minor": VersionComponentSpec(),
124+
"patch": VersionComponentSpec(),
125+
"build": VersionComponentSpec(independent=True),
126126
}
127127
version_spec = VersionSpec(config)
128128

@@ -139,9 +139,9 @@ def test_extra_values_ignored(self):
139139
"""Extra values are ignored."""
140140
# Arrange
141141
config = {
142-
"major": VersionComponentConfig(),
143-
"minor": VersionComponentConfig(),
144-
"patch": VersionComponentConfig(),
142+
"major": VersionComponentSpec(),
143+
"minor": VersionComponentSpec(),
144+
"patch": VersionComponentSpec(),
145145
}
146146
version_spec = VersionSpec(config)
147147

@@ -161,9 +161,9 @@ def test_bad_component_name_returns_empty_list(self):
161161
"""Getting the dependents of a non-existing component returns an empty list."""
162162
# Arrange
163163
config = {
164-
"major": VersionComponentConfig(),
165-
"minor": VersionComponentConfig(),
166-
"patch": VersionComponentConfig(),
164+
"major": VersionComponentSpec(),
165+
"minor": VersionComponentSpec(),
166+
"patch": VersionComponentSpec(),
167167
}
168168
version_spec = VersionSpec(config)
169169

@@ -177,9 +177,9 @@ def test_extra_values_ignored(self):
177177
"""Extra values are ignored."""
178178
# Arrange
179179
config = {
180-
"major": VersionComponentConfig(),
181-
"minor": VersionComponentConfig(),
182-
"patch": VersionComponentConfig(),
180+
"major": VersionComponentSpec(),
181+
"minor": VersionComponentSpec(),
182+
"patch": VersionComponentSpec(),
183183
}
184184
version_spec = VersionSpec(config)
185185

0 commit comments

Comments
 (0)