from pr_agent.config_loader import get_settings from pr_agent.git_providers import get_git_provider from pr_agent.log import get_logger class PRConfig: """ The PRConfig class is responsible for listing all configuration options available for the user. """ def __init__(self, pr_url: str, args=None): """ Initialize the PRConfig object with the necessary attributes and objects to comment on a pull request. Args: pr_url (str): The URL of the pull request to be reviewed. args (list, optional): List of arguments passed to the PRReviewer class. Defaults to None. """ self.git_provider = get_git_provider()(pr_url) async def run(self): get_logger().info('Getting configuration settings...') get_logger().info('Preparing configs...') pr_comment = self._prepare_pr_configs() if get_settings().config.publish_output: get_logger().info('Pushing configs...') self.git_provider.publish_comment(pr_comment) self.git_provider.remove_initial_comment() return "" def _prepare_pr_configs(self) -> str: import tomli with open(get_settings().find_file("configuration.toml"), "rb") as conf_file: configuration_headers = [header.lower() for header in tomli.load(conf_file).keys()] relevant_configs = { header: configs for header, configs in get_settings().to_dict().items() if header.lower().startswith("pr_") and header.lower() in configuration_headers } comment_str = "Possible Configurations:" for header, configs in relevant_configs.items(): if configs: comment_str += "\n" for key, value in configs.items(): comment_str += f"\n{header.lower()}.{key.lower()} = {repr(value) if isinstance(value, str) else value}" comment_str += " " if get_settings().config.verbosity_level >= 2: get_logger().info(f"comment_str:\n{comment_str}") return comment_str