summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2026-04-07 20:42:37 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2026-04-15 17:05:17 +0200
commitc99101889c140c1cb60e6a416a8d238379fa5245 (patch)
tree4bc1929b50307d3351206b1647167a5a1f520b96
parent06605ee2d7066b4ae73402d336b2e4e54a4d7802 (diff)
downloadIshtar-c99101889c140c1cb60e6a416a8d238379fa5245.tar.bz2
Ishtar-c99101889c140c1cb60e6a416a8d238379fa5245.zip
⚡ hierarchical type: improve full label
-rw-r--r--ishtar_common/models_common.py31
-rw-r--r--ishtar_common/views_item.py3
2 files changed, 26 insertions, 8 deletions
diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py
index 0161aadad..4b0f1b160 100644
--- a/ishtar_common/models_common.py
+++ b/ishtar_common/models_common.py
@@ -803,14 +803,29 @@ class HierarchicalType(GeneralType):
has_full_label = True
def full_label(self):
- lbls = [self.label]
- item = self
- parents = [self.pk] # prevent loop
- while item.parent and item.parent_id not in parents:
- parents.append(item.parent_id)
- item = item.parent
- lbls.append(item.label)
- return " > ".join(reversed(lbls))
+ return " > ".join(reversed(self.get_label_hierarchy()))
+
+ def _get_label_hierarchy(self, labels, pk, parents):
+ if not pk or pk in parents:
+ return labels
+ parents.add(pk)
+ q = self.__class__.objects.filter(pk=pk)
+ label, parent_id = q.values_list("label", "parent_id").all()[0]
+ labels.append(label)
+ self._get_label_hierarchy(labels, parent_id, parents)
+ return labels
+
+ def get_label_hierarchy(self, lower=False):
+ """
+ Get every upward labels of the hierarchy for full label or
+ cached hierarchical search.
+ Returned in reversed order.
+ """
+ parents = set((self.pk,)) # prevent loop
+ result = self._get_label_hierarchy([self.label], self.parent_id, parents)
+ if lower:
+ result = list(map(str.lower, result))
+ return result
@property
def first_parent(self):
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py
index 94f8489ed..405920dd9 100644
--- a/ishtar_common/views_item.py
+++ b/ishtar_common/views_item.py
@@ -2542,6 +2542,8 @@ def get_item(
copy(relation_types_prefix) if relation_types_prefix else {}
)
+ # n_start = datetime.datetime.now()
+
geo_import_key = dct.get("geo_import_key", None)
geo_type = dct.get("geo_type", None)
@@ -3282,6 +3284,7 @@ def get_item(
else:
new_rows[idx] = row
rows = [row for __, row in new_rows.items()]
+ # print("full", datetime.datetime.now() - n_start)
if full == "shortcut":
data = json.dumps(rows)
else: