From c4f1d8b3454f9d2183064d52353f41be181d349a Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 20 Sep 2022 19:39:39 +1000 Subject: [PATCH] Bug fix for path string generation (#3696) --- InvenTree/InvenTree/helpers.py | 22 ++-------------------- InvenTree/InvenTree/models.py | 12 +++++++++++- InvenTree/part/test_category.py | 2 +- 3 files changed, 14 insertions(+), 22 deletions(-) diff --git a/InvenTree/InvenTree/helpers.py b/InvenTree/InvenTree/helpers.py index 25906866fd..0534ab18b2 100644 --- a/InvenTree/InvenTree/helpers.py +++ b/InvenTree/InvenTree/helpers.py @@ -65,28 +65,10 @@ def constructPathString(path, max_chars=250): pathstring = '/'.join(path) - idx = 0 - # Replace middle elements to limit the pathstring if len(pathstring) > max_chars: - mid = len(path) // 2 - path_l = path[0:mid] - path_r = path[mid:] - - # Ensure the pathstring length is limited - while len(pathstring) > max_chars: - - # Remove an element from the list - if idx % 2 == 0: - path_l = path_l[:-1] - else: - path_r = path_r[1:] - - subpath = path_l + ['...'] + path_r - - pathstring = '/'.join(subpath) - - idx += 1 + n = int(max_chars / 2 - 2) + pathstring = pathstring[:n] + "..." + pathstring[-n:] return pathstring diff --git a/InvenTree/InvenTree/models.py b/InvenTree/InvenTree/models.py index 90741d51dd..aea8775b71 100644 --- a/InvenTree/InvenTree/models.py +++ b/InvenTree/InvenTree/models.py @@ -516,8 +516,18 @@ class InvenTreeTree(MPTTModel): ) if pathstring != self.pathstring: + + if 'force_insert' in kwargs: + del kwargs['force_insert'] + + kwargs['force_update'] = True + self.pathstring = pathstring - super().save(force_update=True) + super().save(*args, **kwargs) + + # Ensure that the pathstring changes are propagated down the tree also + for child in self.get_children(): + child.save(*args, **kwargs) class Meta: """Metaclass defines extra model properties.""" diff --git a/InvenTree/part/test_category.py b/InvenTree/part/test_category.py index edd85b4f95..c02aa1b6bd 100644 --- a/InvenTree/part/test_category.py +++ b/InvenTree/part/test_category.py @@ -118,7 +118,7 @@ class CategoryTest(TestCase): self.assertTrue(len(child.path), 26) self.assertEqual( child.pathstring, - "Cat/AAAAAAAAAA/BBBBBBBBBB/CCCCCCCCCC/DDDDDDDDDD/EEEEEEEEEE/FFFFFFFFFF/GGGGGGGGGG/HHHHHHHHHH/IIIIIIIIII/JJJJJJJJJJ/.../OOOOOOOOOO/PPPPPPPPPP/QQQQQQQQQQ/RRRRRRRRRR/SSSSSSSSSS/TTTTTTTTTT/UUUUUUUUUU/VVVVVVVVVV/WWWWWWWWWW/XXXXXXXXXX/YYYYYYYYYY/ZZZZZZZZZZ" + "Cat/AAAAAAAAAA/BBBBBBBBBB/CCCCCCCCCC/DDDDDDDDDD/EEEEEEEEEE/FFFFFFFFFF/GGGGGGGGGG/HHHHHHHHHH/IIIIIIIIII/JJJJJJJJJJ/KKKKKKKKK...OO/PPPPPPPPPP/QQQQQQQQQQ/RRRRRRRRRR/SSSSSSSSSS/TTTTTTTTTT/UUUUUUUUUU/VVVVVVVVVV/WWWWWWWWWW/XXXXXXXXXX/YYYYYYYYYY/ZZZZZZZZZZ" ) self.assertTrue(len(child.pathstring) <= 250)