Skip to content

Commit

Permalink
fix: ensure either ref or version specified in GithubDependency (#1805
Browse files Browse the repository at this point in the history
)
  • Loading branch information
antazoey authored Jan 2, 2024
1 parent 1801129 commit 3da5581
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 2 deletions.
5 changes: 5 additions & 0 deletions src/ape/managers/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,11 @@ def check_config_for_extra_fields(cls, values: Dict[str, Any]) -> Dict[str, Any]

return values

@model_validator(mode="after")
@classmethod
def load_configs(cls, cm):
return cm.load()

@property
def packages_folder(self) -> Path:
self.dependency_manager.packages_folder.mkdir(parents=True, exist_ok=True)
Expand Down
8 changes: 8 additions & 0 deletions src/ape/managers/project/dependency.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,14 @@ class GithubDependency(DependencyAPI):
**NOTE**: Will be ignored if given a version.
"""

@model_validator(mode="after")
@classmethod
def ensure_ref_or_version(cls, dep):
if dep.ref is None and dep.version is None:
raise ValueError("GitHub dependency must have either ref or version specified.")

return dep

@cached_property
def version_id(self) -> str:
if self.ref:
Expand Down
1 change: 1 addition & 0 deletions src/ape_pm/_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ def install(cli_ctx, package, name, version, ref, force):
try:
cli_ctx.project_manager.load_dependencies(use_cache=not force)
except Exception as err:
cli_ctx.logger.log_debug_stack_trace()
cli_ctx.abort(f"Failed loading dependencies: {err}")

elif name:
Expand Down
24 changes: 23 additions & 1 deletion tests/functional/test_config.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
import tempfile
from pathlib import Path
from typing import Dict, Union

import pytest
from pydantic_settings import SettingsConfigDict

from ape.api import ConfigEnum, PluginConfig
from ape.api.networks import LOCAL_NETWORK_NAME
from ape.managers.config import CONFIG_FILE_NAME, DeploymentConfigCollection, merge_configs
from ape.managers.config import (
CONFIG_FILE_NAME,
ConfigManager,
DeploymentConfigCollection,
merge_configs,
)
from ape.types import GasLimit
from ape_ethereum.ecosystem import NetworkConfig
from tests.functional.conftest import PROJECT_WITH_LONG_CONTRACTS_FOLDER
Expand Down Expand Up @@ -246,3 +253,18 @@ class MyConfig(PluginConfig):

actual = MyConfig(my_enum="FOO")
assert actual.my_enum == MyEnum.FOO


def test_config_manager_loads_on_init(config):
"""
This is needed or else tools may interact with the config manager
before it has processed the config file.
"""
name = "nametestvalidate"

with tempfile.TemporaryDirectory() as temp_dir:
config = f"name: {name}"
path = Path(temp_dir)
(path / "ape-config.yaml").write_text(config)
manager = ConfigManager(REQUEST_HEADER={}, DATA_FOLDER=Path.cwd(), PROJECT_FOLDER=path)
assert manager.name == name
9 changes: 8 additions & 1 deletion tests/functional/test_dependencies.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@
from typing import Dict

import pytest
from pydantic import ValidationError

from ape.managers.project.dependency import NpmDependency
from ape.managers.project.dependency import GithubDependency, NpmDependency


@pytest.fixture
Expand Down Expand Up @@ -141,3 +142,9 @@ def test_compile_with_extra_settings(dependency_manager, project):
data = {"name": "FooBar", "local": path, "config_override": settings}
dependency = dependency_manager.decode_dependency(data)
assert dependency.config_override == settings


def test_github_dependency_ref_or_version_is_required():
expected = r"GitHub dependency must have either ref or version specified"
with pytest.raises(ValidationError, match=expected):
_ = GithubDependency(name="foo", github="asdf")

0 comments on commit 3da5581

Please sign in to comment.