Commit b144f02d by Bart Kamphorst Committed by Bjorn Neergaard

refactor: introduce PrioritizedRepository

parent df90acb6
...@@ -3,6 +3,7 @@ from __future__ import annotations ...@@ -3,6 +3,7 @@ from __future__ import annotations
import enum import enum
from collections import OrderedDict from collections import OrderedDict
from dataclasses import dataclass
from enum import IntEnum from enum import IntEnum
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
...@@ -26,6 +27,12 @@ class Priority(IntEnum): ...@@ -26,6 +27,12 @@ class Priority(IntEnum):
SECONDARY = enum.auto() SECONDARY = enum.auto()
@dataclass(frozen=True)
class PrioritizedRepository:
repository: Repository
priority: Priority
class Pool(AbstractRepository): class Pool(AbstractRepository):
def __init__( def __init__(
self, self,
...@@ -33,9 +40,7 @@ class Pool(AbstractRepository): ...@@ -33,9 +40,7 @@ class Pool(AbstractRepository):
ignore_repository_names: bool = False, ignore_repository_names: bool = False,
) -> None: ) -> None:
super().__init__("poetry-pool") super().__init__("poetry-pool")
self._repositories: OrderedDict[ self._repositories: OrderedDict[str, PrioritizedRepository] = OrderedDict()
str, tuple[Repository, RepositoryPriority]
] = OrderedDict()
self._ignore_repository_names = ignore_repository_names self._ignore_repository_names = ignore_repository_names
if repositories is None: if repositories is None:
...@@ -46,8 +51,10 @@ class Pool(AbstractRepository): ...@@ -46,8 +51,10 @@ class Pool(AbstractRepository):
@property @property
def repositories(self) -> list[Repository]: def repositories(self) -> list[Repository]:
unsorted_repositories = self._repositories.values() unsorted_repositories = self._repositories.values()
sorted_repositories = sorted(unsorted_repositories, key=lambda p: p[1].value) sorted_repositories = sorted(
return [repo for (repo, _) in sorted_repositories] unsorted_repositories, key=lambda prio_repo: prio_repo.priority
)
return [prio_repo.repository for prio_repo in sorted_repositories]
def has_default(self) -> bool: def has_default(self) -> bool:
return self._contains_priority(Priority.DEFAULT) return self._contains_priority(Priority.DEFAULT)
...@@ -57,7 +64,7 @@ class Pool(AbstractRepository): ...@@ -57,7 +64,7 @@ class Pool(AbstractRepository):
def _contains_priority(self, priority: Priority) -> bool: def _contains_priority(self, priority: Priority) -> bool:
return any( return any(
repo_prio is priority for _, repo_prio in self._repositories.values() prio_repo.priority is priority for prio_repo in self._repositories.values()
) )
def has_repository(self, name: str) -> bool: def has_repository(self, name: str) -> bool:
...@@ -66,7 +73,7 @@ class Pool(AbstractRepository): ...@@ -66,7 +73,7 @@ class Pool(AbstractRepository):
def repository(self, name: str) -> Repository: def repository(self, name: str) -> Repository:
name = name.lower() name = name.lower()
if self.has_repository(name): if self.has_repository(name):
return self._repositories[name][0] return self._repositories[name].repository
raise IndexError(f'Repository "{name}" does not exist.') raise IndexError(f'Repository "{name}" does not exist.')
def add_repository( def add_repository(
...@@ -89,7 +96,9 @@ class Pool(AbstractRepository): ...@@ -89,7 +96,9 @@ class Pool(AbstractRepository):
priority = Priority.DEFAULT priority = Priority.DEFAULT
elif secondary: elif secondary:
priority = Priority.SECONDARY priority = Priority.SECONDARY
self._repositories[repository_name] = (repository, priority) self._repositories[repository_name] = PrioritizedRepository(
repository, priority
)
return self return self
def remove_repository(self, name: str) -> Pool: def remove_repository(self, name: str) -> Pool:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment