diff --git a/src/codeplag/codeplagcli.py b/src/codeplag/codeplagcli.py index 3b0d7a5..1ed2a11 100644 --- a/src/codeplag/codeplagcli.py +++ b/src/codeplag/codeplagcli.py @@ -124,10 +124,10 @@ def __add_settings_path(self: Self, subparsers: argparse._SubParsersAction) -> N help=_( "If defined, then saves reports about suspect works into provided file or " "directory. If directory by provided path doesn't exists than saves reports " - "as a file." + "as a file. Pass empty string to disable saving reports." ), metavar="PATH", - type=Path, + type=str, ) settings_modify.add_argument( "-re", @@ -462,4 +462,4 @@ def validate_args(self: Self, parsed_args: argparse.Namespace) -> None: def parse_args(self: Self, args: Sequence[str] | None = None) -> argparse.Namespace: # pyright: ignore[reportIncompatibleMethodOverride] parsed_args = super(CodeplagCLI, self).parse_args(args) self.validate_args(parsed_args) - return parsed_args + return parsed_args \ No newline at end of file diff --git a/src/codeplag/config.py b/src/codeplag/config.py index a8b5011..8fb1a87 100644 --- a/src/codeplag/config.py +++ b/src/codeplag/config.py @@ -67,16 +67,17 @@ def read_settings_conf() -> Settings: loaded_settings_config[key] = DefaultSettingsConfig[key] continue - if key in ["environment", "reports"]: + if key in ["environment", "reports"] and loaded_settings_config.get(key) is not None: loaded_settings_config[key] = Path(loaded_settings_config[key]) - return Settings( - **{ - key: loaded_settings_config[key] - for key in Settings.__annotations__ - if key in loaded_settings_config - } - ) + settings_dict = {} + for key in Settings.__annotations__: + if key in loaded_settings_config and loaded_settings_config[key] is not None: + settings_dict[key] = loaded_settings_config[key] + elif key in DefaultSettingsConfig: + settings_dict[key] = DefaultSettingsConfig[key] + + return Settings(**settings_dict) def write_settings_conf(settings: Settings) -> None: @@ -96,4 +97,4 @@ def write_settings_conf(settings: Settings) -> None: mongo_host=DEFAULT_MONGO_HOST, mongo_port=DEFAULT_MONGO_PORT, mongo_user=DEFAULT_MONGO_USER, -) +) \ No newline at end of file diff --git a/src/codeplag/handlers/settings.py b/src/codeplag/handlers/settings.py index fa38c8e..9b16739 100644 --- a/src/codeplag/handlers/settings.py +++ b/src/codeplag/handlers/settings.py @@ -26,9 +26,18 @@ def settings_modify(parsed_args: dict[str, Any]) -> None: new_value = parsed_args.get(key) if new_value is None: continue - if isinstance(new_value, Path): + + if key == "reports": + str_value = str(new_value) if new_value is not None else "" + if str_value in ["", "."]: + if "reports" in settings_config: + del settings_config["reports"] + continue + else: + settings_config[key] = Path(new_value).resolve() + elif isinstance(new_value, Path): settings_config[key] = new_value.resolve() else: settings_config[key] = new_value - write_settings_conf(settings_config) + write_settings_conf(settings_config) \ No newline at end of file diff --git a/src/codeplag/types.py b/src/codeplag/types.py index 1357605..79ab2a6 100644 --- a/src/codeplag/types.py +++ b/src/codeplag/types.py @@ -201,7 +201,7 @@ class Settings(TypedDict): environment: NotRequired[Path] language: Language log_level: LogLevel - reports: NotRequired[Path] + reports: NotRequired[Path | None] reports_extension: ReportsExtension show_progress: Flag short_output: ShortOutput @@ -242,4 +242,4 @@ class ProcessingWorks(NamedTuple): NodeStructurePlace.__module__ = __name__ FastCompareInfo.__module__ = __name__ StructureCompareInfo.__module__ = __name__ -FullCompareInfo.__module__ = __name__ +FullCompareInfo.__module__ = __name__ \ No newline at end of file