From 83e1088d42c82f64d258f9b52c0611ef4e829460 Mon Sep 17 00:00:00 2001 From: Debanjum Singh Solanky Date: Tue, 18 Jul 2023 15:27:55 -0700 Subject: [PATCH] Manage khoj.yml config migrations on app start. Version the schema - Add version to khoj.yml schema Versioning the khoj.yml config schema will simplify future migrations --- src/khoj/utils/cli.py | 15 +++++++++++++-- src/khoj/utils/rawconfig.py | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/khoj/utils/cli.py b/src/khoj/utils/cli.py index 0f3c5555..f5c93bb1 100644 --- a/src/khoj/utils/cli.py +++ b/src/khoj/utils/cli.py @@ -5,7 +5,7 @@ from importlib.metadata import version # Internal Packages from khoj.utils.helpers import resolve_absolute_path -from khoj.utils.yaml import parse_config_from_file +from khoj.utils.yaml import load_config_from_file, parse_config_from_file, save_config_to_file def cli(args=None): @@ -34,9 +34,10 @@ def cli(args=None): args = parser.parse_args(args) + args.version_no = version("khoj-assistant") if args.version: # Show version of khoj installed and exit - print(version("khoj-assistant")) + print(args.version_no) exit(0) # Normalize config_file path to absolute path @@ -45,6 +46,16 @@ def cli(args=None): if not args.config_file.exists(): args.config = None else: + migrate_config(args) args.config = parse_config_from_file(args.config_file) return args + + +def migrate_config(args): + raw_config = load_config_from_file(args.config_file) + + # Add version to khoj config schema + if "version" not in raw_config: + raw_config["version"] = args.version_no + save_config_to_file(raw_config, args.config_file) diff --git a/src/khoj/utils/rawconfig.py b/src/khoj/utils/rawconfig.py index 043576f5..d3c9a4ea 100644 --- a/src/khoj/utils/rawconfig.py +++ b/src/khoj/utils/rawconfig.py @@ -123,6 +123,7 @@ class FullConfig(ConfigBase): search_type: Optional[SearchConfig] = None processor: Optional[ProcessorConfig] = None app: Optional[AppConfig] = AppConfig(should_log_telemetry=True) + version: Optional[str] = None class SearchResponse(ConfigBase):