From 6c5f9a6ca009a6c86a5639f4cc142503c1a1b880 Mon Sep 17 00:00:00 2001 From: Thomas Fuhrmann Date: Tue, 17 Dec 2024 09:34:02 +0100 Subject: [PATCH] Add check for duplicate fields for labels and headings --- FeatureRenderer.pyt | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/FeatureRenderer.pyt b/FeatureRenderer.pyt index 58636aa..598c4f1 100644 --- a/FeatureRenderer.pyt +++ b/FeatureRenderer.pyt @@ -2,6 +2,7 @@ import arcpy # type: ignore +# Define constants DEFAULT_LINE_WIDTH = 0.7 DEFAULT_COLOR = [ 0, @@ -264,7 +265,7 @@ class FeatureRenderer: layers_to_render = [] for input_layer in input_layers_list: present = False - + # Test if layer is a group layer and extract layer name from path if "\\" in input_layer: input_layer = input_layer.split("\\")[-1] @@ -310,32 +311,42 @@ class FeatureRenderer: # Retrieve label texts for custom labels add_labels = False + custom_labels = {} if label_field_1 or label_field_2: add_labels = True - custom_labels = {} - labels = [primary_key_field] - if label_field_1: - labels.append(label_field_1) - if label_field_2: - labels.append(label_field_2) + fields = [primary_key_field] + if label_field_1 and label_field_1 not in fields: + fields.append(label_field_1) + if label_field_2 and label_field_2 not in fields: + fields.append(label_field_2) with arcpy.da.SearchCursor( table, - labels, + fields, ) as search_cursor: for row in search_cursor: - custom_labels[row[0]] = f"{row[1]}{label_delimieter}{row[2]}" + if len(fields) == 3: + custom_labels[row[0]] = f"{row[1]}{label_delimieter}{row[2]}" + elif len(fields) == 2: + custom_labels[row[0]] = f"{row[1]}" + elif len(fields) == 1: + custom_labels[row[0]] = f"{row[0]}" # Retrieve headings headings = {} if heading_field: - labels = [primary_key_field, heading_field] + fields = [primary_key_field] + if heading_field not in fields: + fields.append(heading_field) with arcpy.da.SearchCursor( table, - labels, + fields, ) as search_cursor: for row in search_cursor: - headings[str(row[0])] = row[1] + if len(fields) == 2: + headings[str(row[0])] = row[1] + elif len(fields) == 1: + headings[str(row[0])] = row[0] # Retrieve outline color codes outline_codes = {}