diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 200f12818..3dc08ee47 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,18 @@ # See https://pre-commit.com for more information # See https://pre-commit.com/hooks.html for more hooks repos: + + - repo: local + # Keep json schema in sync with the config schema + # This will write the files - and fail pre-commit if a file has been changed. + hooks: + - id: Extract config json schema + name: extract-config-json-schema + entry: "python build_helpers/extract_config_json_schema.py" + language: python + pass_filenames: false + additional_dependencies: ["python-rapidjson", "jsonschema"] + - repo: https://github.com/pycqa/flake8 rev: "7.2.0" hooks: diff --git a/build_helpers/extract_config_json_schema.py b/build_helpers/extract_config_json_schema.py index 44ecc0f91..15bfd7720 100644 --- a/build_helpers/extract_config_json_schema.py +++ b/build_helpers/extract_config_json_schema.py @@ -4,10 +4,23 @@ from pathlib import Path import rapidjson -from freqtrade.configuration.config_schema import CONF_SCHEMA - def extract_config_json_schema(): + try: + # Try to import from the installed package + from freqtrade.config_schema import CONF_SCHEMA + except ImportError: + # If freqtrade is not installed, add the parent directory to sys.path + # to import directly from the source + import sys + + script_dir = Path(__file__).parent + freqtrade_dir = script_dir.parent + sys.path.insert(0, str(freqtrade_dir)) + + # Now try to import from the source + from freqtrade.config_schema import CONF_SCHEMA + schema_filename = Path(__file__).parent / "schema.json" with schema_filename.open("w") as f: rapidjson.dump(CONF_SCHEMA, f, indent=2) diff --git a/freqtrade/config_schema/__init__.py b/freqtrade/config_schema/__init__.py new file mode 100644 index 000000000..0a5c19c1f --- /dev/null +++ b/freqtrade/config_schema/__init__.py @@ -0,0 +1,4 @@ +from freqtrade.config_schema.config_schema import CONF_SCHEMA + + +__all__ = ["CONF_SCHEMA"] diff --git a/freqtrade/configuration/config_schema.py b/freqtrade/config_schema/config_schema.py similarity index 100% rename from freqtrade/configuration/config_schema.py rename to freqtrade/config_schema/config_schema.py diff --git a/freqtrade/configuration/config_validation.py b/freqtrade/configuration/config_validation.py index 8640542a1..e481f663e 100644 --- a/freqtrade/configuration/config_validation.py +++ b/freqtrade/configuration/config_validation.py @@ -6,7 +6,7 @@ from typing import Any from jsonschema import Draft4Validator, validators from jsonschema.exceptions import ValidationError, best_match -from freqtrade.configuration.config_schema import ( +from freqtrade.config_schema.config_schema import ( CONF_SCHEMA, SCHEMA_BACKTEST_REQUIRED, SCHEMA_BACKTEST_REQUIRED_FINAL,