69 lines
2.3 KiB
Python
69 lines
2.3 KiB
Python
|
"""
|
||
|
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)
|