From 1bbb983d4f2ea7eb8b93bf56754c97af21602c8f Mon Sep 17 00:00:00 2001 From: adewyer Date: Wed, 9 Feb 2022 09:55:19 -0800 Subject: [PATCH 1/4] generate JSON schema for dft_unit_functionals instead of tracking is github --- package.json | 1 + setup.py | 5 +++++ src/py/esse/functionals.py | 38 ++++++++++++++++++++++++++++++++------ 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 55b6f6f2d..d367c9155 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-compile -p es2015 src/js:lib/js", "test": "mocha $NODE_DEBUG_OPTION --bail --require babel-register src/js/esse/tests/*.js" 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): diff --git a/src/py/esse/functionals.py b/src/py/esse/functionals.py index eefa6d6d2..06bb23a38 100644 --- a/src/py/esse/functionals.py +++ b/src/py/esse/functionals.py @@ -1,12 +1,15 @@ +import os +import sys import json +import errno 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") +DATA_FILENAME = os.path.join(BASE_DIR, "src/py/esse/data", REL_DIR, "dft_unit_functionals.json") SCHEMA_WITH_PROPERTIES_TEMPLATE = Template("""{ "properties": { @@ -28,6 +31,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 +51,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 +62,13 @@ 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) + remove(DATA_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() From e27edd4cfbeac3858ef76e7c93390f5ae748858c Mon Sep 17 00:00:00 2001 From: adewyer Date: Wed, 9 Feb 2022 09:57:54 -0800 Subject: [PATCH 2/4] moved functionals.py from esse/src/py/esse to esse --- src/py/esse/functionals.py => functionals.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/py/esse/functionals.py => functionals.py (100%) diff --git a/src/py/esse/functionals.py b/functionals.py similarity index 100% rename from src/py/esse/functionals.py rename to functionals.py From 7120bea971a0c20153114543c2904f33ca5b0bec Mon Sep 17 00:00:00 2001 From: adewyer Date: Wed, 9 Feb 2022 10:04:06 -0800 Subject: [PATCH 3/4] removed dft_unit_functionals.json because we will be generating it on the fly --- schema/models_directory/pb/qm/dft/dft_unit_functionals.json | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 schema/models_directory/pb/qm/dft/dft_unit_functionals.json 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 From f77b72e83064217bfa73094854f87044f2c1f18b Mon Sep 17 00:00:00 2001 From: adewyer Date: Thu, 10 Feb 2022 10:58:53 -0800 Subject: [PATCH 4/4] removed uneccessary lines --- functionals.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/functionals.py b/functionals.py index 06bb23a38..34e7a4747 100644 --- a/functionals.py +++ b/functionals.py @@ -1,7 +1,6 @@ import os import sys import json -import errno from string import Template BASE_DIR = os.path.abspath(os.path.dirname(__file__)) @@ -9,7 +8,6 @@ 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") -DATA_FILENAME = os.path.join(BASE_DIR, "src/py/esse/data", REL_DIR, "dft_unit_functionals.json") SCHEMA_WITH_PROPERTIES_TEMPLATE = Template("""{ "properties": { @@ -63,7 +61,6 @@ def generate_dft_unit_functionals(): output[rung] = o remove(UNIT_FILENAME) - remove(DATA_FILENAME) with open(UNIT_FILENAME, "w") as f: f.write("".join((json.dumps(output, separators=(',', ': '), indent=4, sort_keys=True), "\n")))