Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: Clean up mutable defaults and add CI check #27828

Merged
merged 3 commits into from
Oct 6, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 pos_profile is None:
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 items is None:
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 rules is None:
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,9 @@ 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=None):
if rules is None:
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 enrollment_date is None:
enrollment_date = frappe.utils.datetime.datetime.now()
try:
enrollment = frappe.get_doc({
"doctype": "Course Enrollment",
Expand Down
5 changes: 3 additions & 2 deletions erpnext/hr/doctype/holiday_list/holiday_list.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt

Expand Down Expand Up @@ -94,9 +93,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 date is None:
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 for_date is None:
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 for_timestamp is None:
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 from_date is None:
from_date = getdate(nowdate())
if to_date is None:
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 do_not_include is None:
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