mirror of
https://github.com/frappe/erpnext.git
synced 2026-02-16 16:15:02 +00:00
perf: Fix incorrect cache implementation
`if not {}` results to `True` so if someone doesn't have inventory dimensions, this gets called again and again.
This commit is contained in:
@@ -5,6 +5,7 @@ import frappe
|
||||
from frappe import _, bold, scrub
|
||||
from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
|
||||
from frappe.model.document import Document
|
||||
from frappe.utils.caching import request_cache
|
||||
|
||||
|
||||
class DoNotChangeError(frappe.ValidationError):
|
||||
@@ -388,27 +389,20 @@ def get_document_wise_inventory_dimensions(doctype) -> dict:
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
@request_cache
|
||||
def get_inventory_dimensions():
|
||||
if not hasattr(frappe.local, "inventory_dimensions"):
|
||||
frappe.local.inventory_dimensions = {}
|
||||
|
||||
if not frappe.local.inventory_dimensions:
|
||||
dimensions = frappe.get_all(
|
||||
"Inventory Dimension",
|
||||
fields=[
|
||||
"distinct target_fieldname as fieldname",
|
||||
"source_fieldname",
|
||||
"reference_document as doctype",
|
||||
"validate_negative_stock",
|
||||
"name as dimension_name",
|
||||
],
|
||||
filters={"disabled": 0},
|
||||
order_by="creation",
|
||||
)
|
||||
|
||||
frappe.local.inventory_dimensions = dimensions
|
||||
|
||||
return frappe.local.inventory_dimensions
|
||||
return frappe.get_all(
|
||||
"Inventory Dimension",
|
||||
fields=[
|
||||
"distinct target_fieldname as fieldname",
|
||||
"source_fieldname",
|
||||
"reference_document as doctype",
|
||||
"validate_negative_stock",
|
||||
"name as dimension_name",
|
||||
],
|
||||
filters={"disabled": 0},
|
||||
order_by="creation",
|
||||
)
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
|
||||
@@ -12,6 +12,7 @@ from erpnext.stock.doctype.inventory_dimension.inventory_dimension import (
|
||||
CanNotBeDefaultDimension,
|
||||
DoNotChangeError,
|
||||
delete_dimension,
|
||||
get_inventory_dimensions,
|
||||
)
|
||||
from erpnext.stock.doctype.item.test_item import create_item
|
||||
from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt
|
||||
@@ -447,7 +448,7 @@ class TestInventoryDimension(IntegrationTestCase):
|
||||
self.assertEqual(d.store, "Inter Transfer Store 2")
|
||||
|
||||
def test_validate_negative_stock_for_inventory_dimension(self):
|
||||
frappe.local.inventory_dimensions = {}
|
||||
get_inventory_dimensions.clear_cache()
|
||||
item_code = "Test Negative Inventory Dimension Item"
|
||||
frappe.db.set_single_value("Stock Settings", "allow_negative_stock", 1)
|
||||
create_item(item_code)
|
||||
@@ -496,7 +497,7 @@ class TestInventoryDimension(IntegrationTestCase):
|
||||
# disable validate_negative_stock for inventory dimension
|
||||
inv_dimension.reload()
|
||||
inv_dimension.db_set("validate_negative_stock", 0)
|
||||
frappe.local.inventory_dimensions = {}
|
||||
get_inventory_dimensions.clear_cache()
|
||||
|
||||
# Try issuing 100 qty, more than available stock against inventory dimension
|
||||
doc = make_stock_entry(item_code=item_code, source=warehouse, qty=100, do_not_submit=True)
|
||||
|
||||
Reference in New Issue
Block a user