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
This commit is contained in:
Debanjum Singh Solanky 2023-07-18 15:27:55 -07:00
parent 71e8ddd9a2
commit 83e1088d42
2 changed files with 14 additions and 2 deletions

View file

@ -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)

View file

@ -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):