diff --git a/services/__init__.py b/services/__init__.py index 3815c16..57643aa 100644 --- a/services/__init__.py +++ b/services/__init__.py @@ -121,7 +121,7 @@ def get_urltag(string: str) -> dict[str, str | bool] | None: # URL string = string if string.startswith("https://") else f"https://{string}" url = urlparse(string) - hostname = url.hostname.removeprefix("www.") if url.hostname is not None else "" + hostname = url.hostname if url.hostname is not None else "" path = url.path.strip("/") repo: str = "" is_pr: bool = False diff --git a/services/guess.py b/services/guess.py index 53cc396..319a1ef 100644 --- a/services/guess.py +++ b/services/guess.py @@ -30,6 +30,7 @@ def guess_service(server: str) -> Any: "progress.opensuse.org": MyRedmine, "src.opensuse.org": MyGitea, "src.suse.de": MyGitea, + "illumos.org": MyRedmine, "www.illumos.org": MyRedmine, } for hostname, cls in servers.items(): diff --git a/services/redmine.py b/services/redmine.py index 88c4dd5..c4c916f 100644 --- a/services/redmine.py +++ b/services/redmine.py @@ -69,6 +69,32 @@ def get_issue(self, issue_id: str = "", **kwargs) -> Issue | None: return None return self._to_issue(info) + def get_issues(self, issues: list[dict]) -> list[Issue | None]: + try: + found = [ + self._to_issue(info) + for info in self.client.issue.filter( + issue_id=",".join([issue["issue_id"] for issue in issues]) + ) + ] + except (BaseRedmineError, RequestException) as exc: + logging.error("Redmine: %s: get_issues(): %s", self.url, exc) + return [] + found_ids = {str(issue.raw["id"]) for issue in found} + not_found = [ + self._not_found( + tag=f"{self.tag}#{issue['issue_id']}", + url=f"{self.url}/issues/{issue['issue_id']}", + ) + for issue in issues + if issue["issue_id"] not in found_ids + ] + # Old Redmine instances don't support fetching multiple issues at once + # so fetch them one by one in the base class calling get_issue() above + if len(found) == 1 and len(not_found) >= len(found): + return super().get_issues(issues) + return found + not_found # type: ignore + def _to_issue(self, info: Any) -> Issue: return Issue( tag=f"{self.tag}#{info.id}",