Source code for pyiron_atomistics.sphinx.util
__author__ = "Christoph Freysoldt"
__copyright__ = (
"Copyright 2022, Max-Planck-Institut für Eisenforschung GmbH - "
"Computational Materials Design (CM) Department"
)
__version__ = "1.0"
__maintainer__ = "Christoph Freysoldt"
__email__ = "freysoldt@mpie.de"
__status__ = "development"
__date__ = "Oct 15, 2022"
import json
import os.path
import subprocess
import warnings
from sys import executable as python_interpreter
from threading import Lock
from pyiron_base import Settings
_sxversion_lock = Lock()
_sxversions = None
[docs]
def sxversions(refresh=False):
"""Get available SPHInX versions
returns: a dict
"""
global _sxversions
if not refresh and _sxversions is dict:
return _sxversions
def do_update(warn_what, newfile):
if isinstance(sxv, dict):
for v in sxv.keys():
if v in version_origin.keys() and _sxversions[v] != sxv[v]:
warnings.warn(
"Overriding sxversion '{}' from {} with the one from {}".format(
v, version_origin[v], newfile
)
)
version_origin[v] = newfile
_sxversions.update(sxv)
else:
warnings.warn("Failed to parse " + warn_what + newfile)
_sxversion_lock.acquire()
try:
if refresh:
_sxversions = None
if _sxversions is None:
_sxversions = dict()
version_origin = dict()
for p in Settings().resource_paths:
jsonfile = os.path.join(p, "sphinx", "sxversions.json")
if os.path.exists(jsonfile):
with open(jsonfile) as f:
sxv = json.load(f)
do_update("", jsonfile)
jsonscript = os.path.join(p, "sphinx", "sxversions.py")
if os.path.exists(jsonscript):
proc = subprocess.run(
[python_interpreter, jsonscript],
text=True,
stdout=subprocess.PIPE,
cwd=os.path.join(p, "sphinx"),
)
if proc.returncode != 0:
warnings.warn(
jsonscript
+ " failed with exitcode "
+ str(proc.returncode)
+ ": \n"
+ proc.stdout
+ proc.stderr
)
else:
try:
sxv = json.loads(proc.stdout)
do_update("output from ", jsonscript)
except json.decoder.JSONDecodeError as ex:
raise RuntimeError(
"json decoder error from "
+ jsonscript
+ " output:\n"
+ proc.stdout
) from ex
finally:
_sxversion_lock.release()
return _sxversions