From c9486d7024f32d53c233c18ac5e4e2fa26594018 Mon Sep 17 00:00:00 2001 From: Jesse Vickery Date: Wed, 18 Mar 2026 19:15:49 +0000 Subject: [PATCH 1/2] feat(dev): ds dupe columns; - Better error for duplicate column names. --- ckanext/datastore/backend/postgres.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/ckanext/datastore/backend/postgres.py b/ckanext/datastore/backend/postgres.py index 01bf245087d..fc8b504dbd5 100644 --- a/ckanext/datastore/backend/postgres.py +++ b/ckanext/datastore/backend/postgres.py @@ -26,7 +26,9 @@ import hashlib import json import decimal -from collections import OrderedDict +# (canada fork only): show duplicate keys +# TODO: upstrea contrib?? +from collections import OrderedDict, Counter from urllib.parse import ( urlencode, urlunparse, parse_qsl, urlparse @@ -1251,8 +1253,14 @@ def create_table( # Check for duplicate fields unique_fields = {f['id'] for f in supplied_fields} if not len(unique_fields) == len(supplied_fields): + # (canada fork only): show duplicate keys + # TODO: upstrea contrib?? + field_id_counts = Counter([f['id'] for f in supplied_fields]) + duplicate_field_ids = [fid for fid, count in + field_id_counts.items() if count > 1] raise ValidationError({ - 'field': ['Duplicate column names are not supported'] + 'field': ['Duplicate column names are not supported: {}'.format( + ', '.join(duplicate_field_ids))] }) if records: From 34ad42ec05a5efb66953e42ed2e9730597c8c242 Mon Sep 17 00:00:00 2001 From: Jesse Vickery Date: Wed, 18 Mar 2026 19:24:26 +0000 Subject: [PATCH 2/2] feat(misc): changelog; - Added change log file. --- changes/224.canada.changes | 1 + 1 file changed, 1 insertion(+) create mode 100644 changes/224.canada.changes diff --git a/changes/224.canada.changes b/changes/224.canada.changes new file mode 100644 index 00000000000..e2e95f54fbc --- /dev/null +++ b/changes/224.canada.changes @@ -0,0 +1 @@ +The error message for duplicate DataStore column names will now display which supplied column names are the duplicated ones.