Spaces:
Runtime error
Runtime error
from typing import Dict, Optional | |
import pytest | |
from langchain_cli.constants import ( | |
DEFAULT_GIT_REF, | |
DEFAULT_GIT_REPO, | |
DEFAULT_GIT_SUBDIRECTORY, | |
) | |
from langchain_cli.utils.git import DependencySource, parse_dependency_string | |
def _assert_dependency_equals( | |
dep: DependencySource, | |
*, | |
git: Optional[str] = None, | |
ref: Optional[str] = None, | |
subdirectory: Optional[str] = None, | |
event_metadata: Optional[Dict] = None, | |
) -> None: | |
assert dep["git"] == git | |
assert dep["ref"] == ref | |
assert dep["subdirectory"] == subdirectory | |
if event_metadata is not None: | |
assert dep["event_metadata"] == event_metadata | |
def test_dependency_string() -> None: | |
_assert_dependency_equals( | |
parse_dependency_string( | |
"git+ssh://[email protected]/efriis/myrepo.git", None, None, None | |
), | |
git="ssh://[email protected]/efriis/myrepo.git", | |
ref=None, | |
subdirectory=None, | |
) | |
_assert_dependency_equals( | |
parse_dependency_string( | |
"git+https://github.com/efriis/myrepo.git#subdirectory=src", | |
None, | |
None, | |
None, | |
), | |
git="https://github.com/efriis/myrepo.git", | |
subdirectory="src", | |
ref=None, | |
) | |
_assert_dependency_equals( | |
parse_dependency_string( | |
"git+ssh://[email protected]:efriis/myrepo.git#develop", None, None, None | |
), | |
git="ssh://[email protected]:efriis/myrepo.git", | |
ref="develop", | |
subdirectory=None, | |
) | |
# also support a slash in ssh | |
_assert_dependency_equals( | |
parse_dependency_string( | |
"git+ssh://[email protected]/efriis/myrepo.git#develop", None, None, None | |
), | |
git="ssh://[email protected]/efriis/myrepo.git", | |
ref="develop", | |
subdirectory=None, | |
) | |
# looks like poetry supports both an @ and a # | |
_assert_dependency_equals( | |
parse_dependency_string( | |
"git+ssh://[email protected]:efriis/myrepo.git@develop", None, None, None | |
), | |
git="ssh://[email protected]:efriis/myrepo.git", | |
ref="develop", | |
subdirectory=None, | |
) | |
_assert_dependency_equals( | |
parse_dependency_string("simple-pirate", None, None, None), | |
git=DEFAULT_GIT_REPO, | |
subdirectory=f"{DEFAULT_GIT_SUBDIRECTORY}/simple-pirate", | |
ref=DEFAULT_GIT_REF, | |
) | |
def test_dependency_string_both() -> None: | |
_assert_dependency_equals( | |
parse_dependency_string( | |
"git+https://github.com/efriis/myrepo.git@branch#subdirectory=src", | |
None, | |
None, | |
None, | |
), | |
git="https://github.com/efriis/myrepo.git", | |
subdirectory="src", | |
ref="branch", | |
) | |
def test_dependency_string_invalids() -> None: | |
# expect error for wrong order | |
with pytest.raises(ValueError): | |
parse_dependency_string( | |
"git+https://github.com/efriis/myrepo.git#subdirectory=src@branch", | |
None, | |
None, | |
None, | |
) | |
# expect error for @subdirectory | |
def test_dependency_string_edge_case() -> None: | |
# weird unsolvable edge case of | |
# git+ssh://a@b | |
# this could be a ssh dep with user=a, and default ref | |
# or a ssh dep at a with ref=b. | |
# in this case, assume the first case (be greedy with the '@') | |
_assert_dependency_equals( | |
parse_dependency_string("git+ssh://a@b", None, None, None), | |
git="ssh://a@b", | |
subdirectory=None, | |
ref=None, | |
) | |
# weird one that is actually valid | |
_assert_dependency_equals( | |
parse_dependency_string( | |
"git+https://github.com/efriis/myrepo.git@subdirectory=src", | |
None, | |
None, | |
None, | |
), | |
git="https://github.com/efriis/myrepo.git", | |
subdirectory=None, | |
ref="subdirectory=src", | |
) | |