From 75a750a4e8e9f0aa48e72970ce520a053b6aa639 Mon Sep 17 00:00:00 2001 From: Etienne Trimaille Date: Fri, 22 Nov 2024 12:03:53 +0100 Subject: [PATCH] Minor checks in the Processing about QgsProject dirty, and disable the unique key field check --- dynamic_layers/dynamic_layers_dialog.py | 2 +- .../processing_provider/generate_projects.py | 39 ++++++++++++++++--- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/dynamic_layers/dynamic_layers_dialog.py b/dynamic_layers/dynamic_layers_dialog.py index 5981863..0637692 100644 --- a/dynamic_layers/dynamic_layers_dialog.py +++ b/dynamic_layers/dynamic_layers_dialog.py @@ -167,7 +167,7 @@ def __init__(self, parent: QDialog = None): self.expression_widgets = [] temporary_list_expressions = [ - # Project + # Project server properties self.inProjectTitle_exp, self.inProjectShortName_exp, self.inProjectAbstract_exp, diff --git a/dynamic_layers/processing_provider/generate_projects.py b/dynamic_layers/processing_provider/generate_projects.py index da47a2e..e597c60 100644 --- a/dynamic_layers/processing_provider/generate_projects.py +++ b/dynamic_layers/processing_provider/generate_projects.py @@ -10,6 +10,7 @@ QgsProcessing, QgsProcessingAlgorithm, QgsProcessingException, + # QgsFeatureRequest, QgsProcessingParameterBoolean, QgsProcessingParameterExpression, QgsProcessingParameterFeatureSource, @@ -106,13 +107,41 @@ def checkParameterValues(self, parameters, context) -> Tuple[bool, str]: msg = tr("You must have at least one layer with the configuration.") return False, msg - source = self.parameterAsSource(parameters, self.INPUT, context) - field = self.parameterAsString(parameters, self.FIELD, context) - unique_values = source.uniqueValues(source.fields().indexFromName(field)) - if len(unique_values) != source.featureCount(): - msg = tr("You field '{}' does not have unique values within the given layer.") + if context.project().isDirty(): + msg = tr("You must save your project first.") return False, msg + # source = self.parameterAsSource(parameters, self.INPUT, context) + # field = self.parameterAsString(parameters, self.FIELD, context) + # index = source.fields().indexFromName(field) + # unique_values = source.uniqueValues(index) + # if len(unique_values) != source.featureCount(): + # + # request = QgsFeatureRequest() + # request.setSubsetOfAttributes([field], source.fields()) + # request.addOrderBy(field) + # request.setFlags(QgsFeatureRequest.NoGeometry) + # count = {} + # for f in source.getFeatures(request): + # if f[field] not in count.keys(): + # count[f[field]] = 0 + # count[f[field]] += 1 + # debug = '' + # for k, v in count.items(): + # debug += f'{k} → {v}, ' + # + # # count = {k: v for k, v in count.items() if v >= 2} + # msg = tr( + # "You field '{}' does not have unique values within the given layer : " + # "{} uniques values versus {} features : {}" + # ).format( + # field, + # len(unique_values), + # source.featureCount(), + # debug + # ) + # return False, msg + return super().checkParameterValues(parameters, context) def processAlgorithm(self, parameters, context, feedback):