Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor SCMInfo and Config imports. #305

Merged
merged 2 commits into from
Feb 22, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions bumpversion/config/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@
from pydantic import BaseModel, Field
from pydantic_settings import BaseSettings, SettingsConfigDict

from bumpversion.scm.models import SCMInfo # NOQA: TC001
from bumpversion.ui import get_indented_logger
from bumpversion.versioning.models import VersionComponentSpec # NOQA: TC001

if TYPE_CHECKING: # pragma: no-coverage
from bumpversion.scm.models import SCMInfo
from bumpversion.versioning.models import VersionSpec
from bumpversion.versioning.version_config import VersionConfig

Expand Down Expand Up @@ -97,7 +97,7 @@ class Config(BaseSettings):
commit: bool
message: str
commit_args: Optional[str]
scm_info: Optional["SCMInfo"]
scm_info: Optional[SCMInfo]
parts: Dict[str, VersionComponentSpec]
moveable_tags: list[str] = Field(default_factory=list)
files: List[FileChange] = Field(default_factory=list)
Expand Down
8 changes: 5 additions & 3 deletions bumpversion/scm/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,16 @@
import re
from dataclasses import asdict, dataclass, field
from pathlib import Path
from typing import Any, MutableMapping, Optional, Protocol
from typing import TYPE_CHECKING, Any, MutableMapping, Optional, Protocol

from bumpversion.config import Config
from bumpversion.ui import get_indented_logger
from bumpversion.utils import Pathlike, extract_regex_flags

logger = get_indented_logger(__name__)

if TYPE_CHECKING: # pragma: no-coverage
from bumpversion.config import Config


@dataclass
class SCMConfig:
Expand Down Expand Up @@ -39,7 +41,7 @@ def get_version_from_tag(self, tag: str) -> Optional[str]:
return match["current_version"] if (match := tag_regex.search(tag)) else None

@classmethod
def from_config(cls, config: Config) -> "SCMConfig":
def from_config(cls, config: "Config") -> "SCMConfig":
"""Return a SCMConfig from a Config object."""
return cls(
tag=config.tag,
Expand Down
5 changes: 3 additions & 2 deletions tests/test_bump.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from bumpversion.exceptions import ConfigurationError, VersionNotFoundError
from bumpversion.files import ConfiguredFile
from bumpversion.scm.git import Git
from bumpversion.scm.models import SCMConfig, SCMInfo
from bumpversion.scm.models import SCMConfig, SCMInfo, DefaultSCMTool
from bumpversion.utils import run_command
from tests.conftest import get_config_data, inside_dir

Expand Down Expand Up @@ -256,7 +256,7 @@ def test_excludes_files_with_exclude_bumps(
class TestCommitAndTag:
"""Tests for the commit_and_tag function."""

def does_nothing_if_no_scm_tool(self, scm_config: SCMConfig):
def test_does_nothing_if_no_scm_tool(self, scm_config: SCMConfig):
"""If there is no SCM tool, nothing should happen."""
# Arrange
config, _, _ = get_config_data(
Expand All @@ -265,6 +265,7 @@ def does_nothing_if_no_scm_tool(self, scm_config: SCMConfig):
}
)
config.scm_info = SCMInfo(scm_config)
config.scm_info.tool = None
mock_commit_and_tag = MagicMock()
config.scm_info.commit_and_tag = mock_commit_and_tag
mock_context = MagicMock()
Expand Down
Loading