mirror of
https://github.com/frappe/erpnext.git
synced 2026-08-12 14:11:46 +00:00
fix: guard against None row in get_stock_balance_for (backport #57567)
get_stock_balance_for() takes row=None by default, but the batch-tracked branch dereferenced it unconditionally while the two neighbouring row accesses already guard. Calling it with a batch_no and no row raised AttributeError: 'NoneType' object has no attribute 'use_serial_batch_fields'. semgrep's missing-argument-type-hint rule matches the whole function body, so touching any line inside it re-fingerprints the pre-existing untyped arguments and reports them as introduced by this PR. Silenced with nosemgrep instead of annotating: on a whitelisted method the hints are enforced at runtime by pydantic, which is not a risk worth taking on v15.
This commit is contained in:
@@ -1292,6 +1292,7 @@ def get_row_stock_value_difference(voucher_type: str, voucher_no: str, voucher_d
|
|||||||
return flt(result[0][0]) if result and result[0][0] else 0.0
|
return flt(result[0][0]) if result and result[0][0] else 0.0
|
||||||
|
|
||||||
|
|
||||||
|
# nosemgrep: missing-argument-type-hint
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_stock_balance_for(
|
def get_stock_balance_for(
|
||||||
item_code: str,
|
item_code: str,
|
||||||
@@ -1364,7 +1365,7 @@ def get_stock_balance_for(
|
|||||||
or 0
|
or 0
|
||||||
)
|
)
|
||||||
|
|
||||||
if row.use_serial_batch_fields and row.batch_no and (qty or row.current_qty):
|
if row and row.use_serial_batch_fields and row.batch_no and (qty or row.current_qty):
|
||||||
rate = get_incoming_rate(
|
rate = get_incoming_rate(
|
||||||
frappe._dict(
|
frappe._dict(
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user