mirror of
https://gitlab.com/wgp/dougal/software.git
synced 2025-12-06 08:37:07 +00:00
Commands used: find . -type f -name '*.js'| while read FILE; do if echo $FILE |grep -qv node_modules; then sed -ri 's/^\s+$//' "$FILE"; fi; done find . -type f -name '*.vue'| while read FILE; do if echo $FILE |grep -qv node_modules; then sed -ri 's/^\s+$//' "$FILE"; fi; done find . -type f -name '*.py'| while read FILE; do if echo $FILE |grep -qv node_modules; then sed -ri 's/^\s+$//' "$FILE"; fi; done
75 lines
2.1 KiB
Python
Executable File
75 lines
2.1 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 requests
|
||
import json
|
||
#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, payload):
|
||
print("Writing to", filename)
|
||
tmpname = filename.parent / (filename.name + ".tmp")
|
||
filename.parent.mkdir(parents=True, exist_ok=True)
|
||
with open(tmpname, "w", encoding="utf8") as fd:
|
||
json.dump(payload, fd, indent=4, ensure_ascii=False)
|
||
os.rename(tmpname, filename)
|
||
|
||
def seis_data (survey):
|
||
try:
|
||
pathPrefix = survey["sse"]["path"]
|
||
except KeyError:
|
||
print("Survey does not define an export path for human data")
|
||
return
|
||
|
||
if not pathlib.Path(pathPrefix).exists():
|
||
print(pathPrefix)
|
||
raise ValueError("Export path does not exist")
|
||
|
||
print(f"Requesting sequences for {survey['id']}")
|
||
url = f"http://localhost:3000/api/project/{survey['id']}/sequence"
|
||
r = requests.get(url)
|
||
print(r.status_code, url)
|
||
for sequence in r.json():
|
||
if sequence['status'] not in ["final", "ntbp"]:
|
||
continue
|
||
|
||
filename = pathlib.Path(pathPrefix, "sequence{:0>3d}.json".format(sequence['sequence']))
|
||
if filename.exists():
|
||
print(f"Skipping export for sequence {sequence['sequence']} – file already exists")
|
||
continue
|
||
|
||
print(f"Processing sequence {sequence['sequence']}")
|
||
url = f"http://localhost:3000/api/project/{survey['id']}/event?sequence={sequence['sequence']}&missing=t"
|
||
headers = { "Accept": "application/vnd.seis+json" }
|
||
r = requests.get(url, headers=headers)
|
||
if r.status_code == requests.codes.ok:
|
||
write_file(filename, r.json())
|
||
|
||
|
||
if __name__ == '__main__':
|
||
|
||
print("Reading configuration")
|
||
surveys = configuration.surveys()
|
||
|
||
print("Reading surveys")
|
||
for survey in surveys:
|
||
print(f'Survey: {survey["id"]} ({survey["schema"]})')
|
||
seis_data(survey)
|
||
|
||
print("Done")
|