mirror of
https://gitlab.com/wgp/dougal/software.git
synced 2025-12-06 09:47:08 +00:00
Script meant to be run by runner.sh, either directly or via an intermediate script that consolidates all the user outputs in one place.
90 lines
2.3 KiB
Python
Executable File
90 lines
2.3 KiB
Python
Executable File
#!/usr/bin/python3
|
|
|
|
"""
|
|
Export data that is entered directly into Dougal
|
|
as opposed to being read from external sources.
|
|
|
|
This data will be read back in when the database
|
|
is recreated for an existing survey.
|
|
"""
|
|
|
|
import os
|
|
from glob import glob
|
|
import pathlib
|
|
import string
|
|
import configuration
|
|
import preplots
|
|
from datastore import Datastore
|
|
|
|
def sane_name(filename):
|
|
allowed_chars = string.ascii_letters + string.digits + " _-#+&^%$!();:.,"
|
|
return ''.join([c for c in filename if c in allowed_chars])
|
|
|
|
def write_file (filename, items):
|
|
filename.parent.mkdir(parents=True, exist_ok=True)
|
|
with open(filename, "w") as fd:
|
|
for item in items:
|
|
sequence = point = line = ""
|
|
if type(item["_id"]) == list:
|
|
if len(item["_id"]) == 2:
|
|
sequence, point = item["_id"]
|
|
elif len(item["_id"]) == 3:
|
|
sequence, point, line = item["_id"]
|
|
else:
|
|
sequence = item["_id"]
|
|
|
|
line = f"{sequence}\t{point}\t{line}\t{item['results']}\n"
|
|
fd.write(line)
|
|
|
|
def qc_item(item, prefixes = [], index = None):
|
|
leader = "{:0>2d}".format(index) if index is not None else ""
|
|
name = sane_name(leader+" "+item["name"])
|
|
if "check" in item:
|
|
filename = pathlib.Path(*prefixes, name+".txt")
|
|
print("MKFILE", filename)
|
|
print("Export", len(item["check"]), "results")
|
|
write_file(filename, item["check"])
|
|
|
|
if "children" in item:
|
|
print("MKDIR", pathlib.Path(*prefixes, name))
|
|
subindex = 0
|
|
for child in item["children"]:
|
|
subindex += 1
|
|
qc_item(child, [*prefixes, name], subindex)
|
|
|
|
def qc_data (cursor, prefix):
|
|
qc = db.get_info('qc', cursor)[0]
|
|
#print("QC", qc)
|
|
index = 0
|
|
for item in qc["results"]:
|
|
index += 1
|
|
qc_item(item, [prefix, "QC"], index)
|
|
|
|
if __name__ == '__main__':
|
|
|
|
print("Reading configuration")
|
|
surveys = configuration.surveys()
|
|
|
|
print("Connecting to database")
|
|
db = Datastore()
|
|
|
|
print("Reading surveys")
|
|
for survey in surveys:
|
|
print(f'Survey: {survey["id"]} ({survey["schema"]})')
|
|
db.set_survey(survey["schema"])
|
|
with db.conn.cursor() as cursor:
|
|
|
|
try:
|
|
pathPrefix = survey["exports"]["human"]["path"]
|
|
except KeyError:
|
|
print("Survey does not define an export path for human data")
|
|
continue
|
|
|
|
if not pathlib.Path(pathPrefix).exists():
|
|
print(pathPrefix)
|
|
raise ValueError("Export path does not exist")
|
|
|
|
qc_data(cursor, pathPrefix)
|
|
|
|
print("Done")
|