Skip to content
Snippets Groups Projects
Commit c9caf230 authored by Henrik tom Wörden's avatar Henrik tom Wörden
Browse files

ENH: allow to export xml

parent 07e8a403
No related branches found
No related tags found
1 merge request!22Release 0.3
Pipeline #12708 failed
......@@ -26,14 +26,19 @@ import argparse
import os
import caosdb as db
from caosdb.apiutils import retrieve_entities_with_ids
from export_related import export
def get_dm():
rts = set([r.name for r in db.execute_query("SELECT name FROM RECORDTYPE")])
rts = set([(r.id, r.name) for r
in db.execute_query("SELECT name FROM RECORDTYPE")])
if None in rts:
rts.remove(None)
ps = set([r.name for r in db.execute_query("SELECT name FROM PROPERTY")])
ps = set([(r.id, r.name) for r
in db.execute_query("SELECT name FROM PROPERTY")])
if None in ps:
ps.remove(None)
......@@ -47,18 +52,26 @@ def get_parser():
"be stored")
p.add_argument("-c", "--compare", help="directory where the datamodel that"
" shall be compared is stored")
p.add_argument("-x", "--xml", action="store_true",
help="store xml as well")
return p
def store(directory):
def store(directory, xml=False):
rts, ps = get_dm()
os.makedirs(directory, exist_ok=True)
with open(os.path.join(directory, "recordtypes.txt"), "w") as fi:
fi.write(",".join(rts))
fi.write(",".join([el[1] for el in rts]))
with open(os.path.join(directory, "properties.txt"), "w") as fi:
fi.write(",".join(ps))
fi.write(",".join([el[1] for el in ps]))
if xml:
cont = retrieve_entities_with_ids(
[el[0] for el in rts]+[el[0] for el in ps])
export(cont, directory)
def load_dm(directory):
......@@ -104,7 +117,7 @@ if __name__ == "__main__":
args = p.parse_args()
if args.store:
store(args.store)
store(args.store, xml=args.xml)
if args.compare:
compare(args.compare)
......@@ -96,12 +96,15 @@ def invert_ids(entities):
apply_to_ids(entities, lambda x: x*-1)
def export(rec_id, directory="."):
def export_related_to(rec_id, directory="."):
if not isinstance(rec_id, int):
raise ValueError("rec_id needs to be an integer")
ent = db.execute_query("FIND {}".format(rec_id), unique=True)
cont = recursively_collect_related(ent)
export(cont, directory=directory)
def export(cont, directory="."):
directory = os.path.abspath(directory)
dl_dir = os.path.join(directory, "downloads")
......@@ -119,6 +122,9 @@ def export(rec_id, directory="."):
print("Failed download of:", target)
invert_ids(cont)
for el in cont:
el.version = None
xml = etree.tounicode(cont.to_xml(
local_serialization=True), pretty_print=True)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment