From 2b9d5ea20fa4a0136ea3a5641b9870dafe870a75 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Thu, 11 Jul 2024 22:31:13 +0200 Subject: [PATCH 01/15] fix possible access to None value --- src/backend/InvenTree/InvenTree/unit_test.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/backend/InvenTree/InvenTree/unit_test.py b/src/backend/InvenTree/InvenTree/unit_test.py index 94af1325c41d..3f64fe1d9ced 100644 --- a/src/backend/InvenTree/InvenTree/unit_test.py +++ b/src/backend/InvenTree/InvenTree/unit_test.py @@ -84,6 +84,9 @@ def getNewestMigrationFile(app, exclude_extension=True): newest_num = num newest_file = f + if not newest_file: # pragma: no cover + return newest_file + if exclude_extension: newest_file = newest_file.replace('.py', '') From 74c54cc1f43fa7e4860c83b1bb91b820026c07a7 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Thu, 11 Jul 2024 22:32:00 +0200 Subject: [PATCH 02/15] fix possible access to empty valie --- src/backend/InvenTree/common/forms.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/backend/InvenTree/common/forms.py b/src/backend/InvenTree/common/forms.py index b991eec06b54..e748babb9516 100644 --- a/src/backend/InvenTree/common/forms.py +++ b/src/backend/InvenTree/common/forms.py @@ -51,6 +51,9 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + if not file_manager: # pragma: no cover + return + # Setup FileManager file_manager.setup() # Get columns From 66c4ecdfc998dbf63e9545369bb18598de4be198 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Thu, 11 Jul 2024 22:33:36 +0200 Subject: [PATCH 03/15] fix possible access to empty value --- src/backend/InvenTree/common/forms.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/backend/InvenTree/common/forms.py b/src/backend/InvenTree/common/forms.py index e748babb9516..48001490136a 100644 --- a/src/backend/InvenTree/common/forms.py +++ b/src/backend/InvenTree/common/forms.py @@ -90,6 +90,9 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + if not file_manager: # pragma: no cover + return + # Setup FileManager file_manager.setup() From bdb900a49e1e057c0c4a3af2a22c4684470d6e33 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Thu, 11 Jul 2024 22:45:06 +0200 Subject: [PATCH 04/15] define exception --- src/backend/InvenTree/stock/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/InvenTree/stock/models.py b/src/backend/InvenTree/stock/models.py index 6008f8cf59ca..ab715592b969 100644 --- a/src/backend/InvenTree/stock/models.py +++ b/src/backend/InvenTree/stock/models.py @@ -1773,7 +1773,7 @@ def merge_stock_items(self, other_items, raise_error=False, **kwargs): price = convert_money(price, base_currency) total_price += price * qty quantity += qty - except: + except Exception: # Skip this entry, cannot convert to base currency continue From 62c57e94479fe19856e7137fe5e9a567078fee21 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Thu, 11 Jul 2024 22:47:51 +0200 Subject: [PATCH 05/15] remove old todo --- src/backend/InvenTree/stock/models.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/backend/InvenTree/stock/models.py b/src/backend/InvenTree/stock/models.py index ab715592b969..ee58ba62e0fe 100644 --- a/src/backend/InvenTree/stock/models.py +++ b/src/backend/InvenTree/stock/models.py @@ -714,8 +714,6 @@ def clean(self): self.delete_on_deplete = False except PartModels.Part.DoesNotExist: - # This gets thrown if self.supplier_part is null - # TODO - Find a test than can be performed... pass # Ensure that the item cannot be assigned to itself From dfd53d296aa02b3f00c602a29075f78e64b97c27 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Thu, 11 Jul 2024 22:49:15 +0200 Subject: [PATCH 06/15] fix trigger on none --- src/backend/InvenTree/stock/models.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/backend/InvenTree/stock/models.py b/src/backend/InvenTree/stock/models.py index ee58ba62e0fe..3a65f2c2f6e2 100644 --- a/src/backend/InvenTree/stock/models.py +++ b/src/backend/InvenTree/stock/models.py @@ -1107,7 +1107,11 @@ def allocateToCustomer( item.add_tracking_entry(code, user, deltas, notes=notes) - trigger_event('stockitem.assignedtocustomer', id=self.id, customer=customer.id) + trigger_event( + 'stockitem.assignedtocustomer', + id=self.id, + customer=customer.id if customer else None, + ) # Return the reference to the stock item return item From 8933a217622f5d81a0d2a895b520a60edef46dd7 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Thu, 11 Jul 2024 22:53:12 +0200 Subject: [PATCH 07/15] merge condition --- src/frontend/src/components/buttons/CopyButton.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/frontend/src/components/buttons/CopyButton.tsx b/src/frontend/src/components/buttons/CopyButton.tsx index bf51eebd0be3..3ac02e5da27f 100644 --- a/src/frontend/src/components/buttons/CopyButton.tsx +++ b/src/frontend/src/components/buttons/CopyButton.tsx @@ -20,8 +20,12 @@ export function CopyButton({ size="compact-md" > - {label &&
 
} - {label && label} + {label && ( + <> +
 
+ {label} + + )} )} From 4701cc97ec30dac38bc63806142859a67a9ba8d7 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Thu, 11 Jul 2024 22:55:44 +0200 Subject: [PATCH 08/15] remove empty object pattern --- src/frontend/src/forms/PartForms.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/src/forms/PartForms.tsx b/src/frontend/src/forms/PartForms.tsx index 729b158c981e..70f483ec5c1c 100644 --- a/src/frontend/src/forms/PartForms.tsx +++ b/src/frontend/src/forms/PartForms.tsx @@ -97,7 +97,7 @@ export function usePartFields({ /** * Construct a set of fields for creating / editing a PartCategory instance */ -export function partCategoryFields({}: {}): ApiFormFieldSet { +export function partCategoryFields(): ApiFormFieldSet { let fields: ApiFormFieldSet = { parent: { description: t`Parent part category`, From a8340d02929c85fe19e8a221fcb174fc5c7a108c Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Thu, 11 Jul 2024 22:58:26 +0200 Subject: [PATCH 09/15] fix typo --- src/frontend/src/tables/settings/GroupTable.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/frontend/src/tables/settings/GroupTable.tsx b/src/frontend/src/tables/settings/GroupTable.tsx index 7ffa79441531..bbbd05a3c345 100644 --- a/src/frontend/src/tables/settings/GroupTable.tsx +++ b/src/frontend/src/tables/settings/GroupTable.tsx @@ -112,7 +112,8 @@ export function GroupTable() { }), RowDeleteAction({ onClick: () => { - setSelectedGroup(record.pk), deleteGroup.open(); + setSelectedGroup(record.pk); + deleteGroup.open(); } }) ]; From 05570ada3e938f8057364123f5274eaba5358cba Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Thu, 11 Jul 2024 23:12:33 +0200 Subject: [PATCH 10/15] fix usage of var --- .../InvenTree/templates/js/dynamic/nav.js | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/backend/InvenTree/templates/js/dynamic/nav.js b/src/backend/InvenTree/templates/js/dynamic/nav.js index f207bf110d2e..61a17e247774 100644 --- a/src/backend/InvenTree/templates/js/dynamic/nav.js +++ b/src/backend/InvenTree/templates/js/dynamic/nav.js @@ -25,8 +25,8 @@ function activatePanel(label, panel_name, options={}) { panel_name = panel_name.replace('/', ''); // Find the target panel - var panel = `#panel-${panel_name}`; - var select = `#select-${panel_name}`; + let panel = `#panel-${panel_name}`; + let select = `#select-${panel_name}`; // Check that the selected panel (and select) exist if ($(panel).exists() && $(panel).length && $(select).length) { @@ -37,7 +37,7 @@ function activatePanel(label, panel_name, options={}) { panel_name = null; $('.sidebar-selector').each(function() { - var name = $(this).attr('id').replace('select-', ''); + const name = $(this).attr('id').replace('select-', ''); if ($(`#panel-${name}`).length && (panel_name == null)) { panel_name = name; @@ -64,7 +64,7 @@ function activatePanel(label, panel_name, options={}) { $('.list-group-item').removeClass('active'); // Find the associated selector - var selector = `#select-${panel_name}`; + const selector = `#select-${panel_name}`; $(selector).addClass('active'); } @@ -75,7 +75,7 @@ function onPanelLoad(panel, callback) { // Used to implement lazy-loading, rather than firing // multiple AJAX queries when the page is first loaded. - var panelId = `#panel-${panel}`; + const panelId = `#panel-${panel}`; $(panelId).on('fadeInStarted', function() { @@ -96,10 +96,10 @@ function enableSidebar(label, options={}) { // Enable callbacks for sidebar buttons $('.sidebar-selector').click(function() { - var el = $(this); + const el = $(this); // Find the matching panel element to display - var panel_name = el.attr('id').replace('select-', ''); + const panel_name = el.attr('id').replace('select-', ''); activatePanel(label, panel_name, options); }); @@ -111,16 +111,16 @@ function enableSidebar(label, options={}) { * - Third preference = default */ - var selected_panel = $.urlParam('display') || localStorage.getItem(`inventree-selected-panel-${label}`) || options.default; + const selected_panel = $.urlParam('display') || localStorage.getItem(`inventree-selected-panel-${label}`) || options.default; if (selected_panel) { activatePanel(label, selected_panel); } else { // Find the "first" available panel (according to the sidebar) - var selector = $('.sidebar-selector').first(); + const selector = $('.sidebar-selector').first(); if (selector.exists()) { - var panel_name = selector.attr('id').replace('select-', ''); + const panel_name = selector.attr('id').replace('select-', ''); activatePanel(label, panel_name); } } @@ -133,7 +133,7 @@ function enableSidebar(label, options={}) { // Add callback to "collapse" and "expand" the sidebar // By default, the menu is "expanded" - var state = localStorage.getItem(`inventree-menu-state-${label}`) || 'expanded'; + const state = localStorage.getItem(`inventree-menu-state-${label}`) || 'expanded'; // We wish to "toggle" the state! setSidebarState(label, state == 'expanded' ? 'collapsed' : 'expanded'); @@ -141,7 +141,7 @@ function enableSidebar(label, options={}) { } // Set the initial state (default = expanded) - var state = localStorage.getItem(`inventree-menu-state-${label}`) || 'expanded'; + const state = localStorage.getItem(`inventree-menu-state-${label}`) || 'expanded'; setSidebarState(label, state); @@ -208,14 +208,14 @@ function generateTreeStructure(data, options) { */ function enableBreadcrumbTree(options) { - var label = options.label; + const label = options.label; if (!label) { console.error('enableBreadcrumbTree called without supplying label'); return; } - var filters = options.filters || {}; + const filters = options.filters || {}; inventreeGet( options.url, @@ -283,7 +283,7 @@ function setSidebarState(label, state) { */ function addSidebarItem(options={}) { - var html = ` + const html = ` ${options.content_before || ''} @@ -302,7 +302,7 @@ function addSidebarItem(options={}) { */ function addSidebarHeader(options={}) { - var html = ` + const html = `
From 529dab7b096cf43a641ee1450eb712dbcf721dd1 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Thu, 11 Jul 2024 23:52:32 +0200 Subject: [PATCH 11/15] add missing import --- src/backend/InvenTree/templates/js/dynamic/nav.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/backend/InvenTree/templates/js/dynamic/nav.js b/src/backend/InvenTree/templates/js/dynamic/nav.js index 61a17e247774..5cc8560fb9fd 100644 --- a/src/backend/InvenTree/templates/js/dynamic/nav.js +++ b/src/backend/InvenTree/templates/js/dynamic/nav.js @@ -1,4 +1,5 @@ /* globals + inventreeGet, */ /* exported From d571763f14b8e7112cb5f931e0c92f68d8b1e48d Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Thu, 11 Jul 2024 23:57:04 +0200 Subject: [PATCH 12/15] use for of itterator instead --- src/backend/InvenTree/templates/js/dynamic/nav.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/backend/InvenTree/templates/js/dynamic/nav.js b/src/backend/InvenTree/templates/js/dynamic/nav.js index 5cc8560fb9fd..188e7be98b3c 100644 --- a/src/backend/InvenTree/templates/js/dynamic/nav.js +++ b/src/backend/InvenTree/templates/js/dynamic/nav.js @@ -162,10 +162,8 @@ function enableSidebar(label, options={}) { function generateTreeStructure(data, options) { const nodes = {}; const roots = []; - let node = null; - for (var i = 0; i < data.length; i++) { - node = data[i]; + for (let node of data) { nodes[node.pk] = node; node.selectable = false; @@ -179,9 +177,7 @@ function generateTreeStructure(data, options) { } } - for (var i = 0; i < data.length; i++) { - node = data[i]; - + for (let node of data) { if (node.parent != null) { if (nodes[node.parent].nodes) { nodes[node.parent].nodes.push(node); From 8da0749d4289f5451d090606860dde349ba4cda2 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Thu, 11 Jul 2024 23:58:43 +0200 Subject: [PATCH 13/15] use let instead of var --- src/backend/InvenTree/templates/js/dynamic/permissions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/InvenTree/templates/js/dynamic/permissions.js b/src/backend/InvenTree/templates/js/dynamic/permissions.js index 34881a8dcf8c..309ebe529ba1 100644 --- a/src/backend/InvenTree/templates/js/dynamic/permissions.js +++ b/src/backend/InvenTree/templates/js/dynamic/permissions.js @@ -7,7 +7,7 @@ */ // Keep track of the current user permissions -var user_roles = null; +let user_roles = null; /* From bd8ef087b46b7490e664b3fc8ed3ada3e3508316 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Fri, 12 Jul 2024 00:01:11 +0200 Subject: [PATCH 14/15] move declaration to ensure logger is accessible --- src/backend/InvenTree/InvenTree/tracing.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/backend/InvenTree/InvenTree/tracing.py b/src/backend/InvenTree/InvenTree/tracing.py index 3d3eda28a3f7..dd90a330dd6b 100644 --- a/src/backend/InvenTree/InvenTree/tracing.py +++ b/src/backend/InvenTree/InvenTree/tracing.py @@ -22,9 +22,6 @@ import InvenTree.ready from InvenTree.version import inventreeVersion -# Logger configuration -logger = logging.getLogger('inventree') - def setup_tracing( endpoint: str, @@ -46,6 +43,9 @@ def setup_tracing( if InvenTree.ready.isImportingData() or InvenTree.ready.isRunningMigrations(): return + # Logger configuration + logger = logging.getLogger('inventree') + if resources_input is None: resources_input = {} if auth is None: From 5c94999787f17c84403efdb4278b1723300e0d23 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Fri, 12 Jul 2024 00:05:28 +0200 Subject: [PATCH 15/15] Revert "remove empty object pattern" This reverts commit 4701cc97ec30dac38bc63806142859a67a9ba8d7. --- src/frontend/src/forms/PartForms.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/src/forms/PartForms.tsx b/src/frontend/src/forms/PartForms.tsx index 70f483ec5c1c..729b158c981e 100644 --- a/src/frontend/src/forms/PartForms.tsx +++ b/src/frontend/src/forms/PartForms.tsx @@ -97,7 +97,7 @@ export function usePartFields({ /** * Construct a set of fields for creating / editing a PartCategory instance */ -export function partCategoryFields(): ApiFormFieldSet { +export function partCategoryFields({}: {}): ApiFormFieldSet { let fields: ApiFormFieldSet = { parent: { description: t`Parent part category`,