diff --git a/codelist/management/commands/export_codelist.py b/codelist/management/commands/export_codelist.py new file mode 100644 index 00000000..a80098e2 --- /dev/null +++ b/codelist/management/commands/export_codelist.py @@ -0,0 +1,68 @@ +""" +Author: Michel Peltriaux +Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany +Contact: michel.peltriaux@sgdnord.rlp.de +Created on: 10.11.21 + +""" +import csv + +from codelist.models import KonovaCodeList +from konova.management.commands.setup import BaseKonovaCommand + + +class Command(BaseKonovaCommand): + help = "Exports a single list of internal codes. Codelist identifier must be provided as argument" + list_id = 'list_id' + save_to = 'save_to' + + def add_arguments(self, parser): + try: + parser.add_argument(self.list_id, type=int) + except ValueError: + self._write_error("No list id provided") + exit(-1) + try: + parser.add_argument(self.save_to, type=str) + except ValueError: + self._write_error("No save to path given") + exit(-1) + + def handle(self, *args, **options): + try: + list_id = options[self.list_id] + self.save_to = options[self.save_to] + self._write_warning("Fetching codes...") + code_list = KonovaCodeList.objects.get( + id=list_id, + ) + codes = code_list.codes.filter( + is_selectable=True, + ).order_by( + "parent" + ) + header_row = [ + "Parent long name", + "Parent short name", + "Code long name", + "Code short name", + "Code ID", + ] + with open(self.save_to, 'w', newline='') as csvfile: + writer = csv.writer( + csvfile, + delimiter=' ', + quoting=csv.QUOTE_MINIMAL, + ) + writer.writerow(header_row) + for code in codes: + if code.parent is not None: + row = [code.parent.long_name, code.parent.short_name, code.long_name, code.short_name, code.id] + else: + row = ["", "", code.long_name, code.short_name, code.id] + #row = f"{code.parent.long_name};{code.parent.short_name};{code.long_name};{code.short_name};{code.id}" + writer.writerow(row) + + except KeyboardInterrupt: + self._break_line() + exit(-1) diff --git a/codelist/management/commands/update_codelist.py b/codelist/management/commands/update_codelist.py index 74bfd557..3807b29d 100644 --- a/codelist/management/commands/update_codelist.py +++ b/codelist/management/commands/update_codelist.py @@ -23,7 +23,7 @@ bool_map = { class Command(BaseKonovaCommand): - help = "Performs test on collisions using the identifier generation" + help = "Updates internal codelist by external API" def handle(self, *args, **options): try: