add toml interface
This commit is contained in:
parent
5407de0aff
commit
5f09278180
1 changed files with 72 additions and 0 deletions
72
backlogger/toml.py
Normal file
72
backlogger/toml.py
Normal file
|
@ -0,0 +1,72 @@
|
|||
"""
|
||||
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
|
Loading…
Add table
Add a link
Reference in a new issue