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

Move the semver package to common and alter references. #9166

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
6 changes: 6 additions & 0 deletions .changes/unreleased/Under the Hood-20231128-170732.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
kind: Under the Hood
body: Move dbt.semver to dbt.common.semver and update references.
time: 2023-11-28T17:07:32.172421-08:00
custom:
Author: versusfacit
Issue: "9039"
2 changes: 1 addition & 1 deletion core/dbt/adapters/factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from dbt.common.exceptions import DbtInternalError, DbtRuntimeError
from dbt.adapters.include.global_project import PACKAGE_PATH as GLOBAL_PROJECT_PATH
from dbt.adapters.include.global_project import PROJECT_NAME as GLOBAL_PROJECT_NAME
from dbt.semver import VersionSpecifier
from dbt.common.semver import VersionSpecifier
from dbt.mp_context import get_mp_context

Adapter = AdapterProtocol
Expand Down
4 changes: 1 addition & 3 deletions core/dbt/clients/registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
)
from dbt.utils import memoized, _connection_exception_retry as connection_exception_retry
from dbt import deprecations
from dbt import semver
from dbt.common import semver
import os

if os.getenv("DBT_PACKAGE_HUB_URL"):
Expand Down Expand Up @@ -104,7 +104,6 @@ def package(package_name, registry_base_url=None) -> Dict[str, Any]:
# redirectname redirects based on package name
# Both can be present at the same time, or neither. Fails gracefully to old name
if ("redirectnamespace" in response) or ("redirectname" in response):

if ("redirectnamespace" in response) and response["redirectnamespace"] is not None:
use_namespace = response["redirectnamespace"]
else:
Expand Down Expand Up @@ -160,7 +159,6 @@ def get_compatible_versions(package_name, dbt_version, should_version_check) ->


def _get_index(registry_base_url=None):

url = _get_url("index", registry_base_url)
fire_event(RegistryIndexProgressGETRequest(url=url))
# all exceptions from requests get caught in the retry logic so no need to wrap this here
Expand Down
File renamed without changes.
5 changes: 1 addition & 4 deletions core/dbt/config/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
from dbt.common.exceptions import SemverError
from dbt.graph import SelectionSpec
from dbt.common.helper_types import NoValue
from dbt.semver import VersionSpecifier, versions_compatible
from dbt.common.semver import VersionSpecifier, versions_compatible
from dbt.version import get_installed_version
from dbt.utils import MultiDict, md5
from dbt.node_types import NodeType
Expand Down Expand Up @@ -106,7 +106,6 @@ def load_yml_dict(file_path):


def package_and_project_data_from_root(project_root):

packages_yml_dict = load_yml_dict(f"{project_root}/{PACKAGES_FILE_NAME}")
dependencies_yml_dict = load_yml_dict(f"{project_root}/{DEPENDENCIES_FILE_NAME}")

Expand Down Expand Up @@ -197,7 +196,6 @@ def value_or(value: Optional[T], default: T) -> T:


def load_raw_project(project_root: str) -> Dict[str, Any]:

project_root = os.path.normpath(project_root)
project_yaml_filepath = os.path.join(project_root, "dbt_project.yml")

Expand Down Expand Up @@ -310,7 +308,6 @@ def get_rendered(
self,
renderer: DbtProjectYamlRenderer,
) -> RenderComponents:

rendered_project = renderer.render_project(self.project_dict, self.project_root)
rendered_packages = renderer.render_packages(
self.packages_dict, self.packages_specified_path
Expand Down
2 changes: 1 addition & 1 deletion core/dbt/deps/registry.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import List, Dict

from dbt import semver
from dbt.common import semver
from dbt.flags import get_flags
from dbt.version import get_installed_version
from dbt.clients import registry
Expand Down
27 changes: 12 additions & 15 deletions core/dbt/version.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import glob
import importlib
import importlib.util
import os
import glob
import json
from typing import Iterator, List, Optional, Tuple

import os
import requests

import dbt.exceptions
import dbt.semver
from typing import Iterator, List, Optional, Tuple

import dbt.common.semver as semver

from dbt.common.ui import green, red, yellow

Expand All @@ -34,21 +33,21 @@ def get_version_information() -> str:
return "\n\n".join(msg_lines)


def get_installed_version() -> dbt.semver.VersionSpecifier:
return dbt.semver.VersionSpecifier.from_version_string(__version__)
def get_installed_version() -> semver.VersionSpecifier:
return semver.VersionSpecifier.from_version_string(__version__)


def get_latest_version(
version_url: str = PYPI_VERSION_URL,
) -> Optional[dbt.semver.VersionSpecifier]:
) -> Optional[semver.VersionSpecifier]:
try:
resp = requests.get(version_url, timeout=1)
data = resp.json()
version_string = data["info"]["version"]
except (json.JSONDecodeError, KeyError, requests.RequestException):
return None

return dbt.semver.VersionSpecifier.from_version_string(version_string)
return semver.VersionSpecifier.from_version_string(version_string)


def _get_core_msg_lines(installed, latest) -> Tuple[List[List[str]], str]:
Expand Down Expand Up @@ -96,7 +95,7 @@ def _format_core_msg(lines: List[List[str]]) -> str:
return msg + "\n".join(msg_lines)


def _get_plugins_msg(installed: dbt.semver.VersionSpecifier) -> str:
def _get_plugins_msg(installed: semver.VersionSpecifier) -> str:
msg_lines = ["Plugins:"]

plugins = []
Expand All @@ -122,9 +121,9 @@ def _get_plugins_msg(installed: dbt.semver.VersionSpecifier) -> str:


def _get_plugin_msg_info(
name: str, version_s: str, core: dbt.semver.VersionSpecifier
name: str, version_s: str, core: semver.VersionSpecifier
) -> Tuple[str, bool]:
plugin = dbt.semver.VersionSpecifier.from_version_string(version_s)
plugin = semver.VersionSpecifier.from_version_string(version_s)
latest_plugin = get_latest_version(version_url=get_package_pypi_url(name))

needs_update = False
Expand Down Expand Up @@ -169,14 +168,12 @@ def _pad_lines(lines: List[List[str]], seperator: str = "") -> List[List[str]]:

result: List[List[str]] = []
for i, line in enumerate(lines):

# add another list to hold padded strings
if len(result) == i:
result.append([""] * len(line))

# iterate over columns in the line
for j, item in enumerate(line):

# the last column does not need padding
if j == len(line) - 1:
result[i][j] = item
Expand Down
8 changes: 4 additions & 4 deletions tests/functional/dependencies/test_local_dependency.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from pathlib import Path
from unittest import mock

import dbt.semver
import dbt.common.semver as semver
import dbt.config
import dbt.exceptions

Expand Down Expand Up @@ -219,7 +219,7 @@ def project_config(self):

@mock.patch("dbt.config.project.get_installed_version")
def test_local_dependency_out_of_date(self, mock_get, project):
mock_get.return_value = dbt.semver.VersionSpecifier.from_version_string("0.0.1")
mock_get.return_value = semver.VersionSpecifier.from_version_string("0.0.1")
run_dbt(["deps"] + self.dbt_vargs(project.test_schema))
# check seed
with pytest.raises(dbt.exceptions.DbtProjectError) as exc:
Expand All @@ -232,7 +232,7 @@ def test_local_dependency_out_of_date(self, mock_get, project):

@mock.patch("dbt.config.project.get_installed_version")
def test_local_dependency_out_of_date_no_check(self, mock_get):
mock_get.return_value = dbt.semver.VersionSpecifier.from_version_string("0.0.1")
mock_get.return_value = semver.VersionSpecifier.from_version_string("0.0.1")
run_dbt(["deps"])
run_dbt(["seed", "--no-version-check"])
results = run_dbt(["run", "--no-version-check"])
Expand Down Expand Up @@ -274,7 +274,7 @@ def test_local_dependency_out_of_date_no_check(self, mock_get, project):
}
)

mock_get.return_value = dbt.semver.VersionSpecifier.from_version_string("0.0.1")
mock_get.return_value = semver.VersionSpecifier.from_version_string("0.0.1")
run_dbt(["deps", "--vars", vars_arg])
run_dbt(["seed", "--vars", vars_arg])
results = run_dbt(["run", "--vars", vars_arg])
Expand Down
2 changes: 1 addition & 1 deletion tests/unit/test_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
from dbt.adapters.contracts.connection import QueryComment, DEFAULT_QUERY_COMMENT
from dbt.contracts.project import PackageConfig, LocalPackage, GitPackage
from dbt.node_types import NodeType
from dbt.semver import VersionSpecifier
from dbt.common.semver import VersionSpecifier
from dbt.task.base import ConfiguredTask

from dbt.flags import set_from_args
Expand Down
4 changes: 1 addition & 3 deletions tests/unit/test_deps.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
)
from dbt.config.project import PartialProject
from dbt.contracts.project import PackageConfig
from dbt.semver import VersionSpecifier
from dbt.common.semver import VersionSpecifier
from dbt.version import get_installed_version
from dbt.common.dataclass_schema import ValidationError
from dbt.flags import set_from_args
Expand Down Expand Up @@ -812,7 +812,6 @@ def test_dependency_resolution_allow_prerelease(self):
self.assertEqual(resolved[0].version, "0.1.4a1")

def test_validation_error_when_version_is_missing_from_package_config(self):

packages_data = {"packages": [{"package": "dbt-labs-test/b", "version": None}]}

with self.assertRaises(ValidationError) as exc:
Expand All @@ -822,7 +821,6 @@ def test_validation_error_when_version_is_missing_from_package_config(self):
assert msg in str(exc.exception)

def test_validation_error_when_namespace_is_missing_from_package_config(self):

packages_data = {"packages": [{"package": "dbt-labs", "version": "1.0.0"}]}

with self.assertRaises(ValidationError) as exc:
Expand Down
2 changes: 1 addition & 1 deletion tests/unit/test_semver.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

from typing import List
from dbt.common.exceptions import VersionsNotCompatibleError
from dbt.semver import (
from dbt.common.semver import (
VersionSpecifier,
UnboundedVersionSpecifier,
VersionRange,
Expand Down