mirror of
				https://github.com/hwchase17/langchain.git
				synced 2025-10-30 23:29:54 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			138 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			138 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 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://git@github.com/efriis/myrepo.git", None, None, None
 | |
|         ),
 | |
|         git="ssh://git@github.com/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://git@github.com:efriis/myrepo.git#develop", None, None, None
 | |
|         ),
 | |
|         git="ssh://git@github.com:efriis/myrepo.git",
 | |
|         ref="develop",
 | |
|         subdirectory=None,
 | |
|     )
 | |
| 
 | |
|     # also support a slash in ssh
 | |
|     _assert_dependency_equals(
 | |
|         parse_dependency_string(
 | |
|             "git+ssh://git@github.com/efriis/myrepo.git#develop", None, None, None
 | |
|         ),
 | |
|         git="ssh://git@github.com/efriis/myrepo.git",
 | |
|         ref="develop",
 | |
|         subdirectory=None,
 | |
|     )
 | |
| 
 | |
|     # looks like poetry supports both an @ and a #
 | |
|     _assert_dependency_equals(
 | |
|         parse_dependency_string(
 | |
|             "git+ssh://git@github.com:efriis/myrepo.git@develop", None, None, None
 | |
|         ),
 | |
|         git="ssh://git@github.com: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",
 | |
|     )
 |