|
14 | 14 | ROOT = Path(__file__).resolve().parents[2] |
15 | 15 | DEFAULT_MATRIX_PATH = ROOT / "internal_dependency_matrix.json" |
16 | 16 | DEFAULT_PROJECTS_ROOT = ROOT.parent |
17 | | -DEPENDENCY_PATTERN = re.compile( |
| 17 | +PYPROJECT_DEPENDENCY_PATTERN = re.compile( |
18 | 18 | r"(?P<package>[A-Za-z0-9_.-]+)\s*@\s*" |
19 | 19 | r"git\+https://github\.com/QuantStrategyLab/" |
20 | 20 | r"(?P<source_repo>[A-Za-z0-9_.-]+)\.git@(?P<ref>[A-Za-z0-9_.-]+)" |
21 | 21 | ) |
22 | | -TRACKED_DEPENDENCY_PATHS = ("requirements.txt", "requirements-lock.txt", "pyproject.toml") |
| 22 | +UV_DEPENDENCY_PATTERN = re.compile( |
| 23 | + r"name\s*=\s*\"(?P<package>[A-Za-z0-9_.-]+)\"[^\n]*" |
| 24 | + r"git\s*=\s*\"https://github\.com/QuantStrategyLab/" |
| 25 | + r"(?P<source_repo>[A-Za-z0-9_.-]+)\.git\?rev=(?P<ref>[A-Za-z0-9_.-]+)" |
| 26 | +) |
| 27 | +DEPENDENCY_PATTERNS = (PYPROJECT_DEPENDENCY_PATTERN, UV_DEPENDENCY_PATTERN) |
| 28 | +TRACKED_DEPENDENCY_PATHS = ("requirements.txt", "requirements-lock.txt", "pyproject.toml", "uv.lock") |
23 | 29 | LEGACY_DEPENDENCY_PATHS = ("requirements.txt", "requirements-lock.txt") |
24 | 30 | PYPROJECT_FALLBACK_PATH = "pyproject.toml" |
25 | 31 |
|
@@ -116,16 +122,19 @@ def _required_string(item: dict[str, Any], key: str, index: int) -> str: |
116 | 122 |
|
117 | 123 |
|
118 | 124 | def parse_dependency_pins(consumer_repo: str, path: str, text: str) -> list[DependencyPin]: |
119 | | - return [ |
120 | | - DependencyPin( |
121 | | - consumer_repo=consumer_repo, |
122 | | - path=path, |
123 | | - package=match.group("package"), |
124 | | - source_repo=match.group("source_repo"), |
125 | | - ref=match.group("ref"), |
| 125 | + pins: list[DependencyPin] = [] |
| 126 | + for pattern in DEPENDENCY_PATTERNS: |
| 127 | + pins.extend( |
| 128 | + DependencyPin( |
| 129 | + consumer_repo=consumer_repo, |
| 130 | + path=path, |
| 131 | + package=match.group("package"), |
| 132 | + source_repo=match.group("source_repo"), |
| 133 | + ref=match.group("ref"), |
| 134 | + ) |
| 135 | + for match in pattern.finditer(text) |
126 | 136 | ) |
127 | | - for match in DEPENDENCY_PATTERN.finditer(text) |
128 | | - ] |
| 137 | + return _sort_dependency_pins(pins) |
129 | 138 |
|
130 | 139 |
|
131 | 140 | def _parse_repo_pins(projects_root: Path, consumer_repo: str, relative_path: str) -> list[DependencyPin]: |
|
0 commit comments