From 91b70813f95c1a2a90ed9abd0d0766d07299d33c Mon Sep 17 00:00:00 2001 From: saikumarswimlane Date: Mon, 11 May 2026 12:29:16 +0530 Subject: [PATCH 1/2] fix: importlib metadata no module issue fixed --- requirements.txt | 2 ++ setup.py | 2 +- test-requirements.txt | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 738f85e..db2e999 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,7 @@ cachetools>=4.2.4 certifi==2026.2.25 +importlib-metadata>=4.0; python_version < '3.8' +importlib-metadata>=4.0; python_version > '3.8' pendulum==2.1.2; python_version<='3.7' pendulum==3.2.0; python_version>='3.8' pyjwt>=2.4.0 diff --git a/setup.py b/setup.py index 79e6413..d28d3fa 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ def parse_requirements(requirement_file): setup( - version="10.19.3", + version="10.19.4", name="swimlane", author="Swimlane", author_email="info@swimlane.com", diff --git a/test-requirements.txt b/test-requirements.txt index 0f9b72b..43da96a 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1,5 +1,6 @@ faker mock +importlib-metadata pytest>=6.2.5 pytest-pythonpath tox From 0027ee198dec9ebd19ecb9a7566f51355e1ab998 Mon Sep 17 00:00:00 2001 From: saikumarswimlane Date: Fri, 21 Aug 2026 17:07:09 +0530 Subject: [PATCH 2/2] fix(SPT-67798): support Turbine 26.2.3 reference field metadata tuples --- setup.py | 2 +- swimlane/core/fields/reference.py | 8 ++++++-- tests/fields/test_reference.py | 13 +++++++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index 4516c83..d52a2e3 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ def parse_requirements(requirement_file): setup( - version="10.19.5", + version="10.19.6", name="swimlane", author="Swimlane", author_email="info@swimlane.com", diff --git a/swimlane/core/fields/reference.py b/swimlane/core/fields/reference.py index 3c841ef..5cd65f3 100644 --- a/swimlane/core/fields/reference.py +++ b/swimlane/core/fields/reference.py @@ -98,14 +98,18 @@ def _set(self, value): def set_swimlane(self, value): """Store record ids in separate location for later use, but ignore initial value""" - # Values come in as a list of record ids or None + # Values come in as a list of record ids, record metadata tuples, or None value = value or [] if isinstance(value, dict): value = value["_v"] if "_v" in value else [] records = SortedDict() - for record_id in value: + for record in value: + if isinstance(record, (list, tuple)): + record_id = record[0] + else: + record_id = record records[record_id] = self._unset return super(ReferenceField, self).set_swimlane(records) diff --git a/tests/fields/test_reference.py b/tests/fields/test_reference.py index d5f052b..5606f83 100644 --- a/tests/fields/test_reference.py +++ b/tests/fields/test_reference.py @@ -121,3 +121,16 @@ def test_orphaned_record_cleanup(self, mock_swimlane, mock_record, mock_app): def test_get_report(self, mock_record): """All for total coverage""" assert mock_record.get_field(self.single_field_name).get_report(mock_record) == mock_record.id + + def test_set_swimlane_with_record_metadata(self, mock_record): + """Test reference values returned as list of record metadata tuples (Turbine 26.2.3+)""" + field = mock_record.get_field(self.multi_field_name) + record_ids = ['aZ586fyJZcSkzyFyt', 'aRA4S8FNol6yI5EXO'] + value = [ + [record_ids[0], 'aU31z06zTqVz_dkb5', 'CIM-41919'], + [record_ids[1], 'aU31z06zTqVz_dkb5', 'CIM-41920'] + ] + + field.set_swimlane(value) + + assert set(field._value.keys()) == set(record_ids)