diff --git a/src/py/esse/functionals.py b/functionals.py similarity index 61% rename from src/py/esse/functionals.py rename to functionals.py index eefa6d6d2..34e7a4747 100644 --- a/src/py/esse/functionals.py +++ b/functionals.py @@ -1,10 +1,11 @@ +import os +import sys import json from string import Template -import os -from esse.utils import read_json_file, dump_json_file -DIR = os.path.dirname(__file__) -UNIT_FUNCTIONALS_PATH = os.path.join(DIR, "data/schema/models_directory/pb/qm/dft") +BASE_DIR = os.path.abspath(os.path.dirname(__file__)) +REL_DIR = "schema/models_directory/pb/qm/dft" +UNIT_FUNCTIONALS_PATH = os.path.join(BASE_DIR, REL_DIR) PROTOTYPE_FILENAME = os.path.join(UNIT_FUNCTIONALS_PATH, "dft_unit_functionals_proto.json") UNIT_FILENAME = os.path.join(UNIT_FUNCTIONALS_PATH, "dft_unit_functionals.json") @@ -28,6 +29,18 @@ } }""") + +def remove(fpath): + try: + os.unlink(fpath) + except FileNotFoundError: + pass + try: + os.remove(fpath) + except FileNotFoundError: + pass + + def generate_dft_unit_functionals(): """ Generate list of functionals suitable for validation by 'oneOf'. @@ -36,7 +49,9 @@ def generate_dft_unit_functionals(): to read and prone to errors. Thus, it is generated automatically from a prototype file that is easier to maintain. """ - proto = read_json_file(PROTOTYPE_FILENAME) + with open(PROTOTYPE_FILENAME, "r") as f: + proto = json.loads(f.read()) + del proto["description"] output = {} for rung, configs in proto.items(): @@ -45,4 +60,12 @@ def generate_dft_unit_functionals(): o["oneOf"].append(json.loads(SCHEMA_WITH_PROPERTIES_TEMPLATE.substitute(config))) output[rung] = o - dump_json_file(UNIT_FILENAME, output) + remove(UNIT_FILENAME) + + with open(UNIT_FILENAME, "w") as f: + f.write("".join((json.dumps(output, separators=(',', ': '), indent=4, sort_keys=True), "\n"))) + + +if __name__ == "__main__": + # add comment + generate_dft_unit_functionals() diff --git a/package.json b/package.json index aa5d12639..67931c6d0 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "2022.1.9-2", "description": "Exabyte Source of Schemas and Examples", "scripts": { + "preinstall": "python functionals.py", "prepublishOnly": "rm -rf lib; npm run transpile", "transpile": "mkdir -p lib; babel src/js --out-dir lib/js", "test": "nyc --reporter=text mocha --bail --require @babel/register src/js/esse/tests", diff --git a/schema/models_directory/pb/qm/dft/dft_unit_functionals.json b/schema/models_directory/pb/qm/dft/dft_unit_functionals.json deleted file mode 100644 index 96075dc16..000000000 --- a/schema/models_directory/pb/qm/dft/dft_unit_functionals.json +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ed8140445f721de8dfd72be1c89beb4cb76bedaf21a37dd3ccd552adc513941c -size 36592 diff --git a/setup.py b/setup.py index 091841899..1abad590a 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,10 @@ import os from setuptools import find_packages, setup +import subprocess as sp + + +BASE_DIR = os.path.abspath(os.path.dirname(__file__)) +sp.check_call(['python', os.path.join(BASE_DIR, 'functionals.py')]) def get_files_by_path(path):