def check_jira_all_project_issue_types_exist()

in jbi/jira/service.py [0:0]


    def check_jira_all_project_issue_types_exist(self, actions):
        # Do not bother executing the rest of checks if connection fails.

        if messages := self.check_jira_connection():
            return messages

        try:
            paginated_project_response = self.client.paginated_projects(
                expand="issueTypes", keys=sorted(actions.configured_jira_projects_keys)
            )
        except requests.RequestException:
            return [
                checks.Error(
                    "Couldn't fetch projects",
                    id="jira.projects.error",
                )
            ]

        projects = paginated_project_response["values"]
        issue_types_by_project = {
            project["key"]: {issue_type["name"] for issue_type in project["issueTypes"]}
            for project in projects
        }
        missing_issue_types_by_project = {}
        for action in actions:
            action_issue_types = set(action.parameters.issue_type_map.values())
            project_issue_types = issue_types_by_project.get(
                action.jira_project_key, set()
            )
            if missing_issue_types := action_issue_types - project_issue_types:
                missing_issue_types_by_project[action.jira_project_key] = (
                    missing_issue_types
                )
        if missing_issue_types_by_project:
            return [
                checks.Warning(
                    f"Jira projects {set(missing_issue_types_by_project.keys())} with missing issue types",
                    obj=missing_issue_types_by_project,
                    id="jira.types.missing",
                )
            ]
        return []