19_Tests #40
68
codelist/management/commands/export_codelist.py
Normal file
68
codelist/management/commands/export_codelist.py
Normal file
@ -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)
|
@ -23,7 +23,7 @@ bool_map = {
|
|||||||
|
|
||||||
|
|
||||||
class Command(BaseKonovaCommand):
|
class Command(BaseKonovaCommand):
|
||||||
help = "Performs test on collisions using the identifier generation"
|
help = "Updates internal codelist by external API"
|
||||||
|
|
||||||
def handle(self, *args, **options):
|
def handle(self, *args, **options):
|
||||||
try:
|
try:
|
||||||
|
Loading…
Reference in New Issue
Block a user