from __future__ import annotations class JiraSourceAdapter: def __init__( self, *, build_components_jql, build_time_jql, build_absolute_time_jql, build_owner_jql, build_status_jql, search_issue_keys, get_issue_raw, get_issue_view_plain, ): self._build_components_jql = build_components_jql self._build_time_jql = build_time_jql self._build_absolute_time_jql = build_absolute_time_jql self._build_owner_jql = build_owner_jql self._build_status_jql = build_status_jql self._search_issue_keys = search_issue_keys self._get_issue_raw = get_issue_raw self._get_issue_view_plain = get_issue_view_plain def build_tikv_slow_discovery_jql(self, *, time_range: str, assignee: str, status: str) -> str: clauses = [ 'project = GTOC', '(component = TiKV)', self._build_time_jql(time_range), self._build_owner_jql(assignee), ] status_clause = self._build_status_jql(status) if status_clause: clauses.append(status_clause) return ' AND '.join(f'({c})' for c in clauses if c) + ' ORDER BY created DESC' def build_list_jql(self, *, components: str, time_range: str, assignee: str, status: str) -> str: clauses = [ 'project in (TCOC, GTOC)', self._build_components_jql(components), self._build_time_jql(time_range), self._build_owner_jql(assignee), ] status_clause = self._build_status_jql(status) if status_clause: clauses.append(status_clause) return ' AND '.join(f'({c})' for c in clauses if c) + ' ORDER BY created DESC' def build_report_jql(self, *, components: str, time_range: str, assignee: str) -> str: clauses = [ '(project in (TCOC, GTOC))', f'({self._build_components_jql(components)})', f'({self._build_time_jql(time_range)})', ] owner_clause = self._build_owner_jql(assignee) if owner_clause: clauses.append(f'({owner_clause})') return ' AND '.join(clauses) + ' ORDER BY created DESC' def build_storage_weekly_jql(self, *, component: str, start_time, end_time) -> str: return ' AND '.join( [ '(project in (TCOC, GTOC))', f'({self._build_components_jql(component)})', f'({self._build_absolute_time_jql(start_time, end_time)})', ] ) + ' ORDER BY created DESC' def search_issue_keys(self, jql: str, *, mode: str): return self._search_issue_keys(jql, mode=mode) def get_issue_raw(self, key: str): return self._get_issue_raw(key) def get_issue_view_plain(self, key: str): return self._get_issue_view_plain(key)