From feff2cb03ee10cbab24d31efdd65060a81dc3eb3 Mon Sep 17 00:00:00 2001 From: chenjunjie Date: Wed, 30 Aug 2023 16:07:42 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E2=9C=A8=20feat:=20refactor=20and=20add=20?= =?UTF-8?q?config?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- opendigger_pycli/cli/__init__.py | 11 +-- opendigger_pycli/cli/base.py | 35 ++++++-- .../__init__.py => cli/commands/___init__.py} | 0 .../cli/{ => commands}/config_cmd.py | 0 .../cli/{ => commands}/display_cmd.py | 2 +- .../cli/{ => commands}/export_cmd.py | 6 +- .../cli/{ => commands}/monitor_cmd.py | 0 .../cli/{ => commands}/report_cmd.py | 0 opendigger_pycli/cli/config.py | 89 +++++++++++++++++++ opendigger_pycli/cli/default_config.ini | 7 ++ opendigger_pycli/cli/env.py | 16 ++-- opendigger_pycli/config/cli_config.py | 11 --- opendigger_pycli/datatypes/__init__.py | 1 + opendigger_pycli/datatypes/config.py | 24 +++++ .../datatypes/tests/test_config_data.py | 7 ++ 15 files changed, 171 insertions(+), 38 deletions(-) rename opendigger_pycli/{config/__init__.py => cli/commands/___init__.py} (100%) rename opendigger_pycli/cli/{ => commands}/config_cmd.py (100%) rename opendigger_pycli/cli/{ => commands}/display_cmd.py (97%) rename opendigger_pycli/cli/{ => commands}/export_cmd.py (78%) rename opendigger_pycli/cli/{ => commands}/monitor_cmd.py (100%) rename opendigger_pycli/cli/{ => commands}/report_cmd.py (100%) create mode 100644 opendigger_pycli/cli/config.py create mode 100644 opendigger_pycli/cli/default_config.ini delete mode 100644 opendigger_pycli/config/cli_config.py create mode 100644 opendigger_pycli/datatypes/config.py create mode 100644 opendigger_pycli/datatypes/tests/test_config_data.py diff --git a/opendigger_pycli/cli/__init__.py b/opendigger_pycli/cli/__init__.py index 3340440..4f63c95 100644 --- a/opendigger_pycli/cli/__init__.py +++ b/opendigger_pycli/cli/__init__.py @@ -1,10 +1,11 @@ from .base import opendigger_cmd as opendigger from .base import query_cmd as query -from .config_cmd import config -from .display_cmd import display -from .export_cmd import export -from .monitor_cmd import monitor -from .report_cmd import report + +from .commands.config_cmd import config +from .commands.display_cmd import display +from .commands.export_cmd import export +from .commands.monitor_cmd import monitor +from .commands.report_cmd import report opendigger.add_command(config) diff --git a/opendigger_pycli/cli/base.py b/opendigger_pycli/cli/base.py index 867dd35..04ada83 100644 --- a/opendigger_pycli/cli/base.py +++ b/opendigger_pycli/cli/base.py @@ -1,6 +1,8 @@ import typing as t +from pkg_resources import iter_entry_points import click +from click_plugins import with_plugins from opendigger_pycli.console import CONSOLE from opendigger_pycli.console.print_base_info import ( @@ -47,13 +49,17 @@ "--log-level", "-L", "log_level", - type=click.Choice(["NOTSET", "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]), + type=click.Choice( + ["NOTSET", "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"] + ), help="Enables verbose mode.", ) @pass_environment def opendigger( env: Environment, - log_level: t.Literal["NOTSET", "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"], + log_level: t.Literal[ + "NOTSET", "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL" + ], ): """Open Digger CLI""" env.set_log_level(log_level) @@ -84,7 +90,9 @@ def user(env: Environment, usernames: t.List[str]): if click.get_current_context().invoked_subcommand is None: env.vlog("[bold green]requesting users info...") with CONSOLE.status("[bold green]requesting users info..."): - env.dlog(print_user_info(usernames, env.cli_config.github_pat)) + env.dlog( + print_user_info(usernames, env.cli_config.app_keys.github_pat) + ) env.vlog("[bold green]end requesting users info...") return @@ -122,7 +130,9 @@ def repo(env: Environment, repos: t.List[t.Tuple[str, str]]): if click.get_current_context().invoked_subcommand is None: env.vlog("[bold green]fetching repos info...") with CONSOLE.status("[bold green]fetching repos info..."): - env.dlog(print_repo_info(repos, env.cli_config.github_pat)) + env.dlog( + print_repo_info(repos, env.cli_config.app_keys.github_pat) + ) env.vlog("[bold green]end fetching repos info...") return @@ -135,6 +145,7 @@ def repo(env: Environment, repos: t.List[t.Tuple[str, str]]): env.vlog("Set params to env") +@with_plugins(iter_entry_points("opendigger-pycli.plugins")) @click.group( # type: ignore chain=True, help="Query indicators", @@ -233,7 +244,9 @@ def repo(env: Environment, repos: t.List[t.Tuple[str, str]]): def query( indicator_types: t.Set[t.Literal["index", "metric", "network"]], introducers: t.Set[t.Literal["X-lab", "CHAOSS"]], - selected_indicator_queries: t.List[t.Tuple[str, t.Optional["IndicatorQuery"]]], + selected_indicator_queries: t.List[ + t.Tuple[str, t.Optional["IndicatorQuery"]] + ], is_only_select: bool, ignore_indicator_names: t.List[str], uniform_query: t.Optional["IndicatorQuery"], @@ -260,13 +273,17 @@ def process_query_results( processors: t.List[t.Callable], indicator_types: t.Set[t.Literal["index", "metric", "network"]], introducers: t.Set[t.Literal["X-lab", "CHAOSS"]], - selected_indicator_queries: t.List[t.Tuple[str, t.Optional["IndicatorQuery"]]], + selected_indicator_queries: t.List[ + t.Tuple[str, t.Optional["IndicatorQuery"]] + ], is_only_select: bool, ignore_indicator_names: t.List[str], uniform_query: t.Optional["IndicatorQuery"], ): # Processing parameters: deduplication and default value processing - selected_indicator_queries = distinct_indicator_queries(selected_indicator_queries) + selected_indicator_queries = distinct_indicator_queries( + selected_indicator_queries + ) ignore_indicator_names = distinct_indicator_names(ignore_indicator_names) if not indicator_types and not introducers: indicator_types = {"index", "metric", "network"} @@ -308,7 +325,9 @@ def process_query_results( if is_only_select: if not selected_indicator_queries: env.elog("You must specify the indicators you want to query.") - raise click.UsageError("You must specify the indicators you want to query.") + raise click.UsageError( + "You must specify the indicators you want to query." + ) env.vlog("Query only selected indicators") dataloaders = [ filtered_dataloaders[indicator_name] diff --git a/opendigger_pycli/config/__init__.py b/opendigger_pycli/cli/commands/___init__.py similarity index 100% rename from opendigger_pycli/config/__init__.py rename to opendigger_pycli/cli/commands/___init__.py diff --git a/opendigger_pycli/cli/config_cmd.py b/opendigger_pycli/cli/commands/config_cmd.py similarity index 100% rename from opendigger_pycli/cli/config_cmd.py rename to opendigger_pycli/cli/commands/config_cmd.py diff --git a/opendigger_pycli/cli/display_cmd.py b/opendigger_pycli/cli/commands/display_cmd.py similarity index 97% rename from opendigger_pycli/cli/display_cmd.py rename to opendigger_pycli/cli/commands/display_cmd.py index 05fa76b..ad83813 100644 --- a/opendigger_pycli/cli/display_cmd.py +++ b/opendigger_pycli/cli/commands/display_cmd.py @@ -7,7 +7,7 @@ from opendigger_pycli.results.display import DisplyCMDResult from opendigger_pycli.utils.decorators import processor -from .base import pass_environment +from ..base import pass_environment if t.TYPE_CHECKING: from opendigger_pycli.console.print_indicator import SURPPORTED_DISPLAY_FORMAT_TYPE diff --git a/opendigger_pycli/cli/export_cmd.py b/opendigger_pycli/cli/commands/export_cmd.py similarity index 78% rename from opendigger_pycli/cli/export_cmd.py rename to opendigger_pycli/cli/commands/export_cmd.py index 2f746dd..5033f85 100644 --- a/opendigger_pycli/cli/export_cmd.py +++ b/opendigger_pycli/cli/commands/export_cmd.py @@ -2,11 +2,11 @@ import click -from ..utils.decorators import processor -from .base import pass_environment +from opendigger_pycli.utils.decorators import processor +from ..base import pass_environment if t.TYPE_CHECKING: - from .base import Environment + from ..base import Environment @click.command("export", help="Export metrics") diff --git a/opendigger_pycli/cli/monitor_cmd.py b/opendigger_pycli/cli/commands/monitor_cmd.py similarity index 100% rename from opendigger_pycli/cli/monitor_cmd.py rename to opendigger_pycli/cli/commands/monitor_cmd.py diff --git a/opendigger_pycli/cli/report_cmd.py b/opendigger_pycli/cli/commands/report_cmd.py similarity index 100% rename from opendigger_pycli/cli/report_cmd.py rename to opendigger_pycli/cli/commands/report_cmd.py diff --git a/opendigger_pycli/cli/config.py b/opendigger_pycli/cli/config.py new file mode 100644 index 0000000..0b4c7e4 --- /dev/null +++ b/opendigger_pycli/cli/config.py @@ -0,0 +1,89 @@ +import typing as t +from pathlib import Path +from dataclasses import dataclass, fields, is_dataclass +import configparser + +import click +from rich.table import Table +from rich import box + +from opendigger_pycli.datatypes import ALL_CONFIGS, AppKeyConfig, UserInfoConfig + +if t.TYPE_CHECKING: + from rich.console import Console, ConsoleOptions, RenderResult + + +class OpenDiggerCliConfig: + app_keys: AppKeyConfig + user_info: UserInfoConfig + + def __init__(self): + self.__load_config() + + @property + def user_config_file_path(self) -> str: + config_dir_str = click.get_app_dir("opendigger-pycli") + config_dir = Path(config_dir_str) + user_config = config_dir / "config.ini" + return str(user_config) + + @property + def default_config_file_path(self) -> str: + default_config = Path(__file__).parent / "default_config.ini" + return str(default_config) + + @property + def config_file_paths(self) -> t.List[str]: + return [str(self.default_config_file_path), str(self.user_config_file_path)] + + def __load_config(self): + parser = configparser.RawConfigParser() + parser.read(self.config_file_paths) + + for config_dataclass in ALL_CONFIGS: + if not is_dataclass(config_dataclass): + raise TypeError(f"{config_dataclass} is not a dataclass") + + setattr(self, config_dataclass.config_name, config_dataclass()) + config_fields = fields(config_dataclass) + for field in config_fields: + data = parser.get( + config_dataclass.config_name, field.name, fallback=field.default + ) + setattr(getattr(self, config_dataclass.config_name), field.name, data) + + def update_config(self): + parser = configparser.RawConfigParser() + + for config_dataclass in ALL_CONFIGS: + if not is_dataclass(config_dataclass): + raise TypeError(f"{config_dataclass} is not a dataclass") + + config = getattr(self, config_dataclass.config_name, config_dataclass()) + config_fields = fields(config_dataclass) + for field in config_fields: + parser.set( + config_dataclass.config_name, + field.name, + getattr(config, field.name), + ) + + with open(self.user_config_file_path, "w") as file: + parser.write(file) + + def __rich_console__( + self, console: "Console", options: "ConsoleOptions" + ) -> "RenderResult": + yield f"[b]OpenDigger Python CLI Configs:[/b]" + for config_dataclass in ALL_CONFIGS: + if not is_dataclass(config_dataclass): + raise TypeError(f"{config_dataclass} is not a dataclass") + + table = Table( + "Key", "Value", title=config_dataclass.config_name, box=box.HORIZONTALS + ) + config = getattr(self, config_dataclass.config_name, config_dataclass()) + config_fields = fields(config_dataclass) + for field in config_fields: + table.add_row(field.name, getattr(config, field.name)) + yield table diff --git a/opendigger_pycli/cli/default_config.ini b/opendigger_pycli/cli/default_config.ini new file mode 100644 index 0000000..356f889 --- /dev/null +++ b/opendigger_pycli/cli/default_config.ini @@ -0,0 +1,7 @@ +[app_keys] +github_pat = "" +openai_key = "" + +[user_info] +name = "" +email = "" diff --git a/opendigger_pycli/cli/env.py b/opendigger_pycli/cli/env.py index ce7e893..d0a8b4f 100644 --- a/opendigger_pycli/cli/env.py +++ b/opendigger_pycli/cli/env.py @@ -6,7 +6,7 @@ import click from rich.logging import RichHandler -from opendigger_pycli.config.cli_config import OpenDiggerCliConfig +from opendigger_pycli.cli.config import OpenDiggerCliConfig from opendigger_pycli.console import CONSOLE FORMAT = "%(message)s" @@ -29,8 +29,7 @@ def __init__(self): self.verbose = False self.home = os.getcwd() self.params = [] - - self.load_configs() + self.logger = logging.getLogger("opendigger-pycli") def log( self, @@ -77,12 +76,8 @@ def dlog(self, *msg): def load_configs(self) -> bool: try: - if self.verbose: - with CONSOLE.status("[bold green]loading configs..."): - self.cli_config = OpenDiggerCliConfig() - self.cli_config.print() - else: - self.cli_config = OpenDiggerCliConfig() + self.vlog("[bold green]loading configs...") + self.cli_config = OpenDiggerCliConfig() return True except Exception as e: self.log(f"[bold red]load configs failed: {e}") @@ -106,8 +101,9 @@ def set_log_level( self.verbose = False else: self.verbose = True - self.logger = logging.getLogger("opendigger-pycli") self.logger.setLevel(log_level) RICH_LOGGER_HANDLER.setLevel(log_level) CONSOLE.quiet = True self.log("[bold green]verbose mode enabled") + + self.load_configs() diff --git a/opendigger_pycli/config/cli_config.py b/opendigger_pycli/config/cli_config.py deleted file mode 100644 index b7d455b..0000000 --- a/opendigger_pycli/config/cli_config.py +++ /dev/null @@ -1,11 +0,0 @@ -class OpenDiggerCliConfig: - def __init__(self): - self.github_pat = "" - - self.__load_config() - - def __load_config(self): - pass - - def print(self): - pass diff --git a/opendigger_pycli/datatypes/__init__.py b/opendigger_pycli/datatypes/__init__.py index d6c3a65..7bdf7a6 100644 --- a/opendigger_pycli/datatypes/__init__.py +++ b/opendigger_pycli/datatypes/__init__.py @@ -47,3 +47,4 @@ ) from .networks import DeveloperNetworkData, ProjectOpenRankNetworkData, RepoNetworkData from .query import IndicatorQuery +from .config import AppKeyConfig, UserInfoConfig, ALL_CONFIGS diff --git a/opendigger_pycli/datatypes/config.py b/opendigger_pycli/datatypes/config.py new file mode 100644 index 0000000..e5ec31a --- /dev/null +++ b/opendigger_pycli/datatypes/config.py @@ -0,0 +1,24 @@ +import typing as t +from dataclasses import dataclass + + +@dataclass +class BaseConfig: + config_name: t.ClassVar[str] + + +@dataclass +class AppKeyConfig(BaseConfig): + config_name: t.ClassVar[str] = "app_keys" + openai_key: str = "" + github_pat: str = "" + + +@dataclass +class UserInfoConfig(BaseConfig): + config_name: t.ClassVar[str] = "user_info" + name: str = "" + email: str = "" + + +ALL_CONFIGS: t.List[t.Type[BaseConfig]] = [AppKeyConfig, UserInfoConfig] diff --git a/opendigger_pycli/datatypes/tests/test_config_data.py b/opendigger_pycli/datatypes/tests/test_config_data.py new file mode 100644 index 0000000..e814d11 --- /dev/null +++ b/opendigger_pycli/datatypes/tests/test_config_data.py @@ -0,0 +1,7 @@ +from dataclasses import fields +from opendigger_pycli.datatypes import AppKeyConfig, UserInfoConfig + + +def test_config_data(): + print(fields(AppKeyConfig)) + print(fields(UserInfoConfig)) From 9f9904c9210f5cd77d48b970117048e37dec4c64 Mon Sep 17 00:00:00 2001 From: chenjunjie Date: Wed, 30 Aug 2023 16:10:37 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=F0=9F=8C=88=20style:=20format=20codes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- opendigger_pycli/cli/__init__.py | 1 - opendigger_pycli/cli/base.py | 34 +++++-------------- opendigger_pycli/cli/commands/export_cmd.py | 1 + opendigger_pycli/cli/config.py | 6 ++-- opendigger_pycli/datatypes/__init__.py | 2 +- .../datatypes/tests/test_config_data.py | 1 + 6 files changed, 15 insertions(+), 30 deletions(-) diff --git a/opendigger_pycli/cli/__init__.py b/opendigger_pycli/cli/__init__.py index 4f63c95..45a2d24 100644 --- a/opendigger_pycli/cli/__init__.py +++ b/opendigger_pycli/cli/__init__.py @@ -1,6 +1,5 @@ from .base import opendigger_cmd as opendigger from .base import query_cmd as query - from .commands.config_cmd import config from .commands.display_cmd import display from .commands.export_cmd import export diff --git a/opendigger_pycli/cli/base.py b/opendigger_pycli/cli/base.py index 04ada83..ae28185 100644 --- a/opendigger_pycli/cli/base.py +++ b/opendigger_pycli/cli/base.py @@ -1,8 +1,8 @@ import typing as t -from pkg_resources import iter_entry_points import click from click_plugins import with_plugins +from pkg_resources import iter_entry_points from opendigger_pycli.console import CONSOLE from opendigger_pycli.console.print_base_info import ( @@ -49,17 +49,13 @@ "--log-level", "-L", "log_level", - type=click.Choice( - ["NOTSET", "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"] - ), + type=click.Choice(["NOTSET", "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]), help="Enables verbose mode.", ) @pass_environment def opendigger( env: Environment, - log_level: t.Literal[ - "NOTSET", "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL" - ], + log_level: t.Literal["NOTSET", "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"], ): """Open Digger CLI""" env.set_log_level(log_level) @@ -90,9 +86,7 @@ def user(env: Environment, usernames: t.List[str]): if click.get_current_context().invoked_subcommand is None: env.vlog("[bold green]requesting users info...") with CONSOLE.status("[bold green]requesting users info..."): - env.dlog( - print_user_info(usernames, env.cli_config.app_keys.github_pat) - ) + env.dlog(print_user_info(usernames, env.cli_config.app_keys.github_pat)) env.vlog("[bold green]end requesting users info...") return @@ -130,9 +124,7 @@ def repo(env: Environment, repos: t.List[t.Tuple[str, str]]): if click.get_current_context().invoked_subcommand is None: env.vlog("[bold green]fetching repos info...") with CONSOLE.status("[bold green]fetching repos info..."): - env.dlog( - print_repo_info(repos, env.cli_config.app_keys.github_pat) - ) + env.dlog(print_repo_info(repos, env.cli_config.app_keys.github_pat)) env.vlog("[bold green]end fetching repos info...") return @@ -244,9 +236,7 @@ def repo(env: Environment, repos: t.List[t.Tuple[str, str]]): def query( indicator_types: t.Set[t.Literal["index", "metric", "network"]], introducers: t.Set[t.Literal["X-lab", "CHAOSS"]], - selected_indicator_queries: t.List[ - t.Tuple[str, t.Optional["IndicatorQuery"]] - ], + selected_indicator_queries: t.List[t.Tuple[str, t.Optional["IndicatorQuery"]]], is_only_select: bool, ignore_indicator_names: t.List[str], uniform_query: t.Optional["IndicatorQuery"], @@ -273,17 +263,13 @@ def process_query_results( processors: t.List[t.Callable], indicator_types: t.Set[t.Literal["index", "metric", "network"]], introducers: t.Set[t.Literal["X-lab", "CHAOSS"]], - selected_indicator_queries: t.List[ - t.Tuple[str, t.Optional["IndicatorQuery"]] - ], + selected_indicator_queries: t.List[t.Tuple[str, t.Optional["IndicatorQuery"]]], is_only_select: bool, ignore_indicator_names: t.List[str], uniform_query: t.Optional["IndicatorQuery"], ): # Processing parameters: deduplication and default value processing - selected_indicator_queries = distinct_indicator_queries( - selected_indicator_queries - ) + selected_indicator_queries = distinct_indicator_queries(selected_indicator_queries) ignore_indicator_names = distinct_indicator_names(ignore_indicator_names) if not indicator_types and not introducers: indicator_types = {"index", "metric", "network"} @@ -325,9 +311,7 @@ def process_query_results( if is_only_select: if not selected_indicator_queries: env.elog("You must specify the indicators you want to query.") - raise click.UsageError( - "You must specify the indicators you want to query." - ) + raise click.UsageError("You must specify the indicators you want to query.") env.vlog("Query only selected indicators") dataloaders = [ filtered_dataloaders[indicator_name] diff --git a/opendigger_pycli/cli/commands/export_cmd.py b/opendigger_pycli/cli/commands/export_cmd.py index 5033f85..12b07ed 100644 --- a/opendigger_pycli/cli/commands/export_cmd.py +++ b/opendigger_pycli/cli/commands/export_cmd.py @@ -3,6 +3,7 @@ import click from opendigger_pycli.utils.decorators import processor + from ..base import pass_environment if t.TYPE_CHECKING: diff --git a/opendigger_pycli/cli/config.py b/opendigger_pycli/cli/config.py index 0b4c7e4..d1495ed 100644 --- a/opendigger_pycli/cli/config.py +++ b/opendigger_pycli/cli/config.py @@ -1,11 +1,11 @@ +import configparser import typing as t -from pathlib import Path from dataclasses import dataclass, fields, is_dataclass -import configparser +from pathlib import Path import click -from rich.table import Table from rich import box +from rich.table import Table from opendigger_pycli.datatypes import ALL_CONFIGS, AppKeyConfig, UserInfoConfig diff --git a/opendigger_pycli/datatypes/__init__.py b/opendigger_pycli/datatypes/__init__.py index 7bdf7a6..cb84a61 100644 --- a/opendigger_pycli/datatypes/__init__.py +++ b/opendigger_pycli/datatypes/__init__.py @@ -19,6 +19,7 @@ TrivialIndicatorData, TrivialNetworkIndicatorData, ) +from .config import ALL_CONFIGS, AppKeyConfig, UserInfoConfig from .dataloader import DataloaderProto, DataloaderResult from .indices import ActivityData, AttentionData, OpenRankData from .metrics import ( @@ -47,4 +48,3 @@ ) from .networks import DeveloperNetworkData, ProjectOpenRankNetworkData, RepoNetworkData from .query import IndicatorQuery -from .config import AppKeyConfig, UserInfoConfig, ALL_CONFIGS diff --git a/opendigger_pycli/datatypes/tests/test_config_data.py b/opendigger_pycli/datatypes/tests/test_config_data.py index e814d11..e3712b7 100644 --- a/opendigger_pycli/datatypes/tests/test_config_data.py +++ b/opendigger_pycli/datatypes/tests/test_config_data.py @@ -1,4 +1,5 @@ from dataclasses import fields + from opendigger_pycli.datatypes import AppKeyConfig, UserInfoConfig From 8b9278511367920693da1312f69f62c545fb1fe7 Mon Sep 17 00:00:00 2001 From: chenjunjie Date: Wed, 30 Aug 2023 16:14:11 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=F0=9F=90=9E=20fix:=20pass=20ci?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- opendigger_pycli/cli/base.py | 4 ++-- opendigger_pycli/cli/config.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/opendigger_pycli/cli/base.py b/opendigger_pycli/cli/base.py index ae28185..3502cf6 100644 --- a/opendigger_pycli/cli/base.py +++ b/opendigger_pycli/cli/base.py @@ -2,7 +2,7 @@ import click from click_plugins import with_plugins -from pkg_resources import iter_entry_points +from pkg_resources import iter_entry_points # type: ignore from opendigger_pycli.console import CONSOLE from opendigger_pycli.console.print_base_info import ( @@ -137,7 +137,7 @@ def repo(env: Environment, repos: t.List[t.Tuple[str, str]]): env.vlog("Set params to env") -@with_plugins(iter_entry_points("opendigger-pycli.plugins")) +@with_plugins(iter_entry_points("opendigger-pycli.plugins")) # type: ignore @click.group( # type: ignore chain=True, help="Query indicators", diff --git a/opendigger_pycli/cli/config.py b/opendigger_pycli/cli/config.py index d1495ed..18717e7 100644 --- a/opendigger_pycli/cli/config.py +++ b/opendigger_pycli/cli/config.py @@ -74,15 +74,15 @@ def update_config(self): def __rich_console__( self, console: "Console", options: "ConsoleOptions" ) -> "RenderResult": - yield f"[b]OpenDigger Python CLI Configs:[/b]" + yield "[b]OpenDigger Python CLI Configs:[/b]" for config_dataclass in ALL_CONFIGS: if not is_dataclass(config_dataclass): raise TypeError(f"{config_dataclass} is not a dataclass") table = Table( - "Key", "Value", title=config_dataclass.config_name, box=box.HORIZONTALS + "Key", "Value", title=config_dataclass.config_name, box=box.HORIZONTALS # type: ignore ) - config = getattr(self, config_dataclass.config_name, config_dataclass()) + config = getattr(self, config_dataclass.config_name, config_dataclass()) # type: ignore config_fields = fields(config_dataclass) for field in config_fields: table.add_row(field.name, getattr(config, field.name)) From 7e68d1b9ca077d747ba1bc6481298cfae1edda85 Mon Sep 17 00:00:00 2001 From: chenjunjie Date: Wed, 30 Aug 2023 17:11:25 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=F0=9F=90=9E=20fix:=20add=20dependencies?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 7575dbc..acf2198 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,7 +20,7 @@ classifiers = [ "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", ] -dependencies = ["click", "rich", "requests", "types-requests"] +dependencies = ["click", "rich", "requests", "types-requests", "click-plugins"] dynamic = ["version", "description"] [project.urls]