Skip to content

Commit

Permalink
refactor: Clean up mutable defaults and add CI check
Browse files Browse the repository at this point in the history
  • Loading branch information
ChillarAnand committed Oct 6, 2021
1 parent 35e30bd commit 3f294ad
Show file tree
Hide file tree
Showing 13 changed files with 47 additions and 17 deletions.
5 changes: 5 additions & 0 deletions .github/helper/.flake8_strict
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,11 @@ ignore =
E713,
E712,

enable-extensions =
M90

select =
M511

max-line-length = 200
exclude=.github/helper/semgrep_rules,test_*.py
5 changes: 4 additions & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,10 @@ repos:
rev: 3.9.2
hooks:
- id: flake8
args: ['--config', '.github/helper/.flake8_strict']
additional_dependencies: [
'flake8-mutable',
]
args: ['--select=M511', '--config', '.github/helper/.flake8_strict']
exclude: ".*setup.py$"

- repo: https://github.com/timothycrosley/isort
Expand Down
4 changes: 3 additions & 1 deletion erpnext/accounts/doctype/pos_profile/test_pos_profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ def test_pos_profile(self):

frappe.db.sql("delete from `tabPOS Profile`")

def get_customers_list(pos_profile={}):
def get_customers_list(pos_profile=None):
if not pos_profile:
pos_profile = {}
cond = "1=1"
customer_groups = []
if pos_profile.get('customer_groups'):
Expand Down
4 changes: 3 additions & 1 deletion erpnext/accounts/doctype/pricing_rule/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -398,7 +398,9 @@ def get_qty_and_rate_for_other_item(doc, pr_doc, pricing_rules):
pricing_rules[0].apply_rule_on_other_items = items
return pricing_rules

def get_qty_amount_data_for_cumulative(pr_doc, doc, items=[]):
def get_qty_amount_data_for_cumulative(pr_doc, doc, items=None):
if not items:
items = []
sum_qty, sum_amt = [0, 0]
doctype = doc.get('parenttype') or doc.doctype

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,9 @@ def on_trash(self):
{'promotional_scheme': self.name}):
frappe.delete_doc('Pricing Rule', rule.name)

def get_pricing_rules(doc, rules = {}):
def get_pricing_rules(doc, rules=None):
if not rules:
rules = {}
new_doc = []
for child_doc, fields in {'price_discount_slabs': price_discount_fields,
'product_discount_slabs': product_discount_fields}.items():
Expand All @@ -78,7 +80,7 @@ def get_pricing_rules(doc, rules = {}):

return new_doc

def _get_pricing_rules(doc, child_doc, discount_fields, rules = {}):
def _get_pricing_rules(doc, child_doc, discount_fields, rules):
new_doc = []
args = get_args_for_pricing_rule(doc)
applicable_for = frappe.scrub(doc.get('applicable_for'))
Expand Down
4 changes: 2 additions & 2 deletions erpnext/accounts/report/cash_flow/cash_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,9 +139,9 @@ def get_account_type_based_data(company, account_type, period_list, accumulated_
data["total"] = total
return data

def get_account_type_based_gl_data(company, start_date, end_date, account_type, filters={}):
def get_account_type_based_gl_data(company, start_date, end_date, account_type, filters=None):
cond = ""
filters = frappe._dict(filters)
filters = frappe._dict(filters or {})

if filters.include_default_book_entries:
company_fb = frappe.db.get_value("Company", company, 'default_finance_book')
Expand Down
4 changes: 3 additions & 1 deletion erpnext/education/doctype/student/student.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,9 @@ def enroll_in_program(self, program_name):
enrollment.submit()
return enrollment

def enroll_in_course(self, course_name, program_enrollment, enrollment_date=frappe.utils.datetime.datetime.now()):
def enroll_in_course(self, course_name, program_enrollment, enrollment_date=None):
if not enrollment_date:
enrollment_date = frappe.utils.datetime.datetime.now()
try:
enrollment = frappe.get_doc({
"doctype": "Course Enrollment",
Expand Down
4 changes: 3 additions & 1 deletion erpnext/hr/doctype/holiday_list/holiday_list.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,11 @@ def get_events(start, end, filters=None):
update={"allDay": 1})


def is_holiday(holiday_list, date=today()):
def is_holiday(holiday_list, date=None):
"""Returns true if the given date is a holiday in the given holiday list
"""
if not date:
date = today()
if holiday_list:
return bool(frappe.get_all('Holiday List',
dict(name=holiday_list, holiday_date=date)))
Expand Down
12 changes: 9 additions & 3 deletions erpnext/hr/doctype/shift_assignment/shift_assignment.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,14 +139,16 @@ def get_shift_type_timing(shift_types):
return shift_timing_map


def get_employee_shift(employee, for_date=nowdate(), consider_default_shift=False, next_shift_direction=None):
def get_employee_shift(employee, for_date=None, consider_default_shift=False, next_shift_direction=None):
"""Returns a Shift Type for the given employee on the given date. (excluding the holidays)
:param employee: Employee for which shift is required.
:param for_date: Date on which shift are required
:param consider_default_shift: If set to true, default shift is taken when no shift assignment is found.
:param next_shift_direction: One of: None, 'forward', 'reverse'. Direction to look for next shift if shift not found on given date.
"""
if not for_date:
for_date = nowdate()
default_shift = frappe.db.get_value('Employee', employee, 'default_shift')
shift_type_name = None
shift_assignment_details = frappe.db.get_value('Shift Assignment', {'employee':employee, 'start_date':('<=', for_date), 'docstatus': '1', 'status': "Active"}, ['shift_type', 'end_date'])
Expand Down Expand Up @@ -200,9 +202,11 @@ def get_employee_shift(employee, for_date=nowdate(), consider_default_shift=Fals
return get_shift_details(shift_type_name, for_date)


def get_employee_shift_timings(employee, for_timestamp=now_datetime(), consider_default_shift=False):
def get_employee_shift_timings(employee, for_timestamp=None, consider_default_shift=False):
"""Returns previous shift, current/upcoming shift, next_shift for the given timestamp and employee
"""
if not for_timestamp:
for_timestamp = now_datetime()
# write and verify a test case for midnight shift.
prev_shift = curr_shift = next_shift = None
curr_shift = get_employee_shift(employee, for_timestamp.date(), consider_default_shift, 'forward')
Expand All @@ -220,7 +224,7 @@ def get_employee_shift_timings(employee, for_timestamp=now_datetime(), consider_
return prev_shift, curr_shift, next_shift


def get_shift_details(shift_type_name, for_date=nowdate()):
def get_shift_details(shift_type_name, for_date=None):
"""Returns Shift Details which contain some additional information as described below.
'shift_details' contains the following keys:
'shift_type' - Object of DocType Shift Type,
Expand All @@ -234,6 +238,8 @@ def get_shift_details(shift_type_name, for_date=nowdate()):
"""
if not shift_type_name:
return None
if not for_date:
for_date = nowdate()
shift_type = frappe.get_doc('Shift Type', shift_type_name)
start_datetime = datetime.combine(for_date, datetime.min.time()) + shift_type.start_time
for_date = for_date + timedelta(days=1) if shift_type.start_time > shift_type.end_time else for_date
Expand Down
6 changes: 5 additions & 1 deletion erpnext/hr/doctype/staffing_plan/staffing_plan.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,11 @@ def get_designation_counts(designation, company):
return employee_counts

@frappe.whitelist()
def get_active_staffing_plan_details(company, designation, from_date=getdate(nowdate()), to_date=getdate(nowdate())):
def get_active_staffing_plan_details(company, designation, from_date=None, to_date=None):
if not from_date:
from_date = getdate(nowdate())
if not to_date:
to_date = getdate(nowdate())
if not company or not designation:
frappe.throw(_("Please select Company and Designation"))

Expand Down
4 changes: 2 additions & 2 deletions erpnext/stock/doctype/material_request/material_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,7 @@ def select_item(d):

return d.ordered_qty < d.stock_qty and child_filter

doclist = get_mapped_doc("Material Request", source_name, {
doclist = get_mapped_doc("Material Request", source_name, {
"Material Request": {
"doctype": "Purchase Order",
"validation": {
Expand All @@ -323,7 +323,7 @@ def select_item(d):

@frappe.whitelist()
def make_request_for_quotation(source_name, target_doc=None):
doclist = get_mapped_doc("Material Request", source_name, {
doclist = get_mapped_doc("Material Request", source_name, {
"Material Request": {
"doctype": "Request for Quotation",
"validation": {
Expand Down
4 changes: 3 additions & 1 deletion erpnext/stock/doctype/serial_no/serial_no.py
Original file line number Diff line number Diff line change
Expand Up @@ -611,7 +611,9 @@ def get_pos_reserved_serial_nos(filters):

return reserved_sr_nos

def fetch_serial_numbers(filters, qty, do_not_include=[]):
def fetch_serial_numbers(filters, qty, do_not_include=None):
if not do_not_include:
do_not_include = []
batch_join_selection = ""
batch_no_condition = ""
batch_nos = filters.get("batch_no")
Expand Down
2 changes: 1 addition & 1 deletion erpnext/stock/get_item_details.py
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,7 @@ def get_basic_details(args, item, overwrite_warehouse=True):

return out

def get_item_warehouse(item, args, overwrite_warehouse, defaults={}):
def get_item_warehouse(item, args, overwrite_warehouse, defaults=None):
if not defaults:
defaults = frappe._dict({
'item_defaults' : get_item_defaults(item.name, args.company),
Expand Down

0 comments on commit 3f294ad

Please sign in to comment.