Source code for q2_sdk.extensions.ChangeLog.extension

"""
Shows aggregated CHANGELOG.md files for INSTALLED_EXTENSIONS
"""

import os
import re
from importlib import import_module

import mistune

from q2_sdk.core.http_handlers.base_handler import Q2BaseRequestHandler
from q2_sdk.tools import utils


[docs] class ChangeLogHandler(Q2BaseRequestHandler): async def get(self, extension_name=None): if extension_name: self.get_single_extension(extension_name) return extension_list = [] try: with open("CHANGELOG.md") as changelog: repo_changelog = changelog.read().split("\n") repo_changelog = "\n".join(repo_changelog[1:]) except FileNotFoundError: repo_changelog = None for extension in utils.get_installed_extensions_as_modules(): if "q2_sdk.extensions" in extension: continue url_module = import_module("{}.urls".format(extension)) changelog_filepath = os.path.join( os.path.dirname(url_module.__file__), "CHANGELOG.md" ) if not os.path.exists(changelog_filepath): version = "No extension changelog" else: with open(changelog_filepath) as handle: body = handle.read() version = re.search(r"Current Version: \[([^]]+)", body).group(1) extension_list.append({"name": extension, "version": version}) template = self.get_template( "changelog_summary.md.jinja2", {"extension_list": extension_list, "repo_changelog": repo_changelog}, ) self.write(mistune.markdown(template)) def get_single_extension(self, extension_name): try: url_module = import_module("{}.urls".format(extension_name)) except ModuleNotFoundError: self.write(f"No extension named {extension_name}") self.set_status(404) return changelog_filepath = os.path.join( os.path.dirname(url_module.__file__), "CHANGELOG.md" ) if not os.path.exists(changelog_filepath): self.write(f"Invalid changelog for {extension_name}") self.set_status(404) return with open(changelog_filepath) as handle: body = handle.read() self.write(mistune.markdown(body))