Merge pull request 'Quality Check Command' (#286) from command_quality_check into master
Reviewed-on: SGD-Nord/konova#286
This commit is contained in:
		
						commit
						6d0ccda792
					
				
							
								
								
									
										69
									
								
								konova/management/commands/quality_check.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								konova/management/commands/quality_check.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,69 @@
 | 
			
		||||
"""
 | 
			
		||||
Author: Michel Peltriaux
 | 
			
		||||
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
 | 
			
		||||
Contact: ksp-servicestelle@sgdnord.rlp.de
 | 
			
		||||
Created on: 01.02.23
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
from compensation.models import Compensation, EcoAccount
 | 
			
		||||
from compensation.utils.quality import CompensationQualityChecker, EcoAccountQualityChecker
 | 
			
		||||
from ema.models import Ema
 | 
			
		||||
from ema.utils.quality import EmaQualityChecker
 | 
			
		||||
from intervention.models import Intervention
 | 
			
		||||
from intervention.utils.quality import InterventionQualityChecker
 | 
			
		||||
from konova.management.commands.setup import BaseKonovaCommand
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Command(BaseKonovaCommand):
 | 
			
		||||
    help = "Runs quality check on certain entries"
 | 
			
		||||
 | 
			
		||||
    __interventions = []
 | 
			
		||||
    __compensations = []
 | 
			
		||||
    __ecoaccount = []
 | 
			
		||||
    __ema = []
 | 
			
		||||
    identifier_like = None
 | 
			
		||||
    title_like = None
 | 
			
		||||
 | 
			
		||||
    def add_arguments(self, parser):
 | 
			
		||||
        try:
 | 
			
		||||
            parser.add_argument("--identifier-like", type=str)
 | 
			
		||||
            parser.add_argument("--title-like", type=str)
 | 
			
		||||
        except ValueError as e:
 | 
			
		||||
            self._write_error(f"Argument error: {e}")
 | 
			
		||||
            exit(-1)
 | 
			
		||||
 | 
			
		||||
    def handle(self, *args, **options):
 | 
			
		||||
        self.__handle_arguments(options)
 | 
			
		||||
        self.__get_objects()
 | 
			
		||||
        self.perform_quality_check()
 | 
			
		||||
 | 
			
		||||
    def __handle_arguments(self, options):
 | 
			
		||||
        self.identifier_like = options["identifier_like"] or ""
 | 
			
		||||
        self.title_like = options["title_like"] or ""
 | 
			
		||||
 | 
			
		||||
    def __get_objects(self):
 | 
			
		||||
        _filter = {
 | 
			
		||||
            "identifier__icontains": self.identifier_like,
 | 
			
		||||
            "title__icontains": self.title_like,
 | 
			
		||||
        }
 | 
			
		||||
        self.__interventions = Intervention.objects.filter(**_filter)
 | 
			
		||||
        self.__compensations = Compensation.objects.filter(**_filter)
 | 
			
		||||
        self.__ecoaccount = EcoAccount.objects.filter(**_filter)
 | 
			
		||||
        self.__ema = Ema.objects.filter(**_filter)
 | 
			
		||||
 | 
			
		||||
    def perform_quality_check(self):
 | 
			
		||||
        # Interventions
 | 
			
		||||
        _runs = [
 | 
			
		||||
            (self.__interventions, InterventionQualityChecker),
 | 
			
		||||
            (self.__compensations, CompensationQualityChecker),
 | 
			
		||||
            (self.__ecoaccount, EcoAccountQualityChecker),
 | 
			
		||||
            (self.__ema, EmaQualityChecker),
 | 
			
		||||
        ]
 | 
			
		||||
        for run in _runs:
 | 
			
		||||
            entries = run[0]
 | 
			
		||||
            CheckerClass = run[1]
 | 
			
		||||
            for entry in entries:
 | 
			
		||||
                checker = CheckerClass(entry)
 | 
			
		||||
                checker.run_check()
 | 
			
		||||
                if not checker.valid:
 | 
			
		||||
                    self._write_error(f"{entry.identifier};{';'.join(checker.messages)}")
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user