72 lines
2.6 KiB
Python
72 lines
2.6 KiB
Python
"""
|
|
TOML interface
|
|
--------------
|
|
|
|
Remember, that keys with dots have to be quoted.
|
|
Apart from improting projects yourdelf with python scripts, this package also allows for
|
|
the import of projects via TOML.
|
|
"""
|
|
|
|
|
|
import tomllib as toml
|
|
import shutil
|
|
from .input import sfcf
|
|
from .main import import_project
|
|
from .meas_io import write_measurement
|
|
import datalad.api as dl
|
|
import os
|
|
|
|
|
|
def check_project_data(d):
|
|
print(d.keys())
|
|
if 'project' not in d.keys() or 'measurements' not in d.keys() or len(list(d.keys())) > 2:
|
|
raise ValueError('There should only be two key on the top level, "project" and "measurements"!')
|
|
project_data = d['project']
|
|
if 'url' not in project_data.keys():
|
|
raise ValueError('project.url is missing!')
|
|
if 'code' not in project_data.keys():
|
|
raise ValueError('project.code is missing!')
|
|
if 'measurements' not in d.keys():
|
|
raise ValueError('No measurements to import!')
|
|
return
|
|
|
|
|
|
def import_toml(path, file):
|
|
"""
|
|
Import a project decribed by a .toml file.
|
|
|
|
Parameters
|
|
----------
|
|
path: str
|
|
Path to the backlog directory.
|
|
file: str
|
|
Path to the description file.
|
|
"""
|
|
print("Import project as decribed in " + file)
|
|
with open(file, 'rb') as fp:
|
|
toml_dict = toml.load(fp)
|
|
check_project_data(toml_dict)
|
|
project = toml_dict['project']
|
|
measurements = toml_dict['measurements']
|
|
uuid = import_project(path, project['url'])
|
|
print(measurements.items())
|
|
for mname, md in measurements.items():
|
|
print("Import measurement: " + mname)
|
|
ensemble = md['ensemble']
|
|
param = sfcf.read_param(path, uuid, md['param_file'])
|
|
if 'names' in md.keys():
|
|
measurement = sfcf.read_data(path, uuid, md['path'], md['prefix'], param,
|
|
version=md['version'], cfg_seperator=md['cfg_seperator'], sep='/', names=md['names'])
|
|
else:
|
|
measurement = sfcf.read_data(path, uuid, md['path'], md['prefix'], param,
|
|
version=md['version'], cfg_seperator=md['cfg_seperator'], sep='/')
|
|
write_measurement(path, ensemble, measurement, uuid,
|
|
project['code'], md['param_file'])
|
|
print(mname + " imported.")
|
|
if not os.path.exists(path + "/toml_imports/" + uuid):
|
|
os.makedirs(path + "/toml_imports/" + uuid)
|
|
import_file = "toml_imports/" + uuid + "/import.toml"
|
|
shutil.copy(file, )
|
|
dl.save(path + import_file, message="Import using " + import_file, dataset=path)
|
|
print("Imported project, file copied to " + import_file)
|
|
return
|