Export codelist command
* adds a useful custom command which exports a specific selectable codelist into a csv file
This commit is contained in:
		
							parent
							
								
									eb2e19cbe0
								
							
						
					
					
						commit
						7c76caddfb
					
				
							
								
								
									
										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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user