Merge pull request #27288 from ankush/strict_linting

chore: cleanup linting errors and introduce strict linting checks
This commit is contained in:
Ankush Menat 2021-09-01 19:32:49 +05:30 committed by GitHub
commit 81eb6fde07
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
96 changed files with 269 additions and 176 deletions

View File

@ -16,3 +16,4 @@
# Whitespace fix throughout codebase # Whitespace fix throughout codebase
4551d7d6029b6f587f6c99d4f8df5519241c6a86 4551d7d6029b6f587f6c99d4f8df5519241c6a86
b147b85e6ac19a9220cd1e2958a6ebd99373283a

72
.github/helper/.flake8_strict vendored Normal file
View File

@ -0,0 +1,72 @@
[flake8]
ignore =
B007,
B950,
E101,
E111,
E114,
E116,
E117,
E121,
E122,
E123,
E124,
E125,
E126,
E127,
E128,
E131,
E201,
E202,
E203,
E211,
E221,
E222,
E223,
E224,
E225,
E226,
E228,
E231,
E241,
E242,
E251,
E261,
E262,
E265,
E266,
E271,
E272,
E273,
E274,
E301,
E302,
E303,
E305,
E306,
E401,
E402,
E501,
E502,
E701,
E702,
E703,
E741,
F401,
F403,
W191,
W291,
W292,
W293,
W391,
W503,
W504,
E711,
E129,
F841,
E713,
E712,
max-line-length = 200
exclude=.github/helper/semgrep_rules,test_*.py

View File

@ -1,11 +1,12 @@
name: Semgrep name: Linters
on: on:
pull_request: { } pull_request: { }
jobs: jobs:
semgrep:
name: Frappe Linter linters:
name: linters
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
@ -16,3 +17,11 @@ jobs:
config: >- config: >-
r/python.lang.correctness r/python.lang.correctness
.github/helper/semgrep_rules .github/helper/semgrep_rules
- name: Set up Python 3.8
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install and Run Pre-commit
uses: pre-commit/action@v2.0.0

29
.pre-commit-config.yaml Normal file
View File

@ -0,0 +1,29 @@
exclude: 'node_modules|.git'
default_stages: [commit]
fail_fast: false
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.0.1
hooks:
- id: trailing-whitespace
files: "erpnext.*"
exclude: ".*json$|.*txt$|.*csv|.*md"
- id: check-yaml
- id: no-commit-to-branch
args: ['--branch', 'develop']
- id: check-merge-conflict
- id: check-ast
- repo: https://gitlab.com/pycqa/flake8
rev: 3.9.2
hooks:
- id: flake8
args: ['--config', '.github/helper/.flake8_strict']
exclude: ".*setup.py$"
ci:
autoupdate_schedule: weekly
skip: []
submodules: false

View File

@ -359,7 +359,7 @@ def make_gl_entries(doc, credit_account, debit_account, against,
try: try:
make_gl_entries(gl_entries, cancel=(doc.docstatus == 2), merge_entries=True) make_gl_entries(gl_entries, cancel=(doc.docstatus == 2), merge_entries=True)
frappe.db.commit() frappe.db.commit()
except: except Exception:
frappe.db.rollback() frappe.db.rollback()
traceback = frappe.get_traceback() traceback = frappe.get_traceback()
frappe.log_error(message=traceback) frappe.log_error(message=traceback)
@ -430,7 +430,7 @@ def book_revenue_via_journal_entry(doc, credit_account, debit_account, against,
if submit: if submit:
journal_entry.submit() journal_entry.submit()
except: except Exception:
frappe.db.rollback() frappe.db.rollback()
traceback = frappe.get_traceback() traceback = frappe.get_traceback()
frappe.log_error(message=traceback) frappe.log_error(message=traceback)

View File

@ -315,9 +315,8 @@ def update_args_for_pricing_rule(args):
if not (args.item_group and args.brand): if not (args.item_group and args.brand):
try: try:
args.item_group, args.brand = frappe.get_cached_value("Item", args.item_code, ["item_group", "brand"]) args.item_group, args.brand = frappe.get_cached_value("Item", args.item_code, ["item_group", "brand"])
except TypeError: except frappe.DoesNotExistError:
# invalid item_code return
return item_details
if not args.item_group: if not args.item_group:
frappe.throw(_("Item Group not mentioned in item master for item {0}").format(args.item_code)) frappe.throw(_("Item Group not mentioned in item master for item {0}").format(args.item_code))

View File

@ -81,7 +81,7 @@ def filter_pricing_rule_based_on_condition(pricing_rules, doc=None):
try: try:
if frappe.safe_eval(pricing_rule.condition, None, doc.as_dict()): if frappe.safe_eval(pricing_rule.condition, None, doc.as_dict()):
filtered_pricing_rules.append(pricing_rule) filtered_pricing_rules.append(pricing_rule)
except: except Exception:
pass pass
else: else:
filtered_pricing_rules.append(pricing_rule) filtered_pricing_rules.append(pricing_rule)

View File

@ -158,7 +158,7 @@ def get_recipients_and_cc(customer, doc):
if doc.cc_to != '': if doc.cc_to != '':
try: try:
cc=[frappe.get_value('User', doc.cc_to, 'email')] cc=[frappe.get_value('User', doc.cc_to, 'email')]
except: except Exception:
pass pass
return recipients, cc return recipients, cc

View File

@ -24,7 +24,6 @@ from erpnext.accounts.deferred_revenue import validate_service_stop_date
from erpnext.accounts.doctype.tax_withholding_category.tax_withholding_category import get_party_tax_withholding_details from erpnext.accounts.doctype.tax_withholding_category.tax_withholding_category import get_party_tax_withholding_details
from frappe.model.utils import get_fetch_values from frappe.model.utils import get_fetch_values
from frappe.contacts.doctype.address.address import get_address_display from frappe.contacts.doctype.address.address import get_address_display
from erpnext.accounts.doctype.tax_withholding_category.tax_withholding_category import get_party_tax_withholding_details
from erpnext.healthcare.utils import manage_invoice_submit_cancel from erpnext.healthcare.utils import manage_invoice_submit_cancel

View File

@ -4,4 +4,3 @@
cur_frm.cscript.tax_table = "Sales Taxes and Charges"; cur_frm.cscript.tax_table = "Sales Taxes and Charges";
{% include "erpnext/public/js/controllers/accounts.js" %} {% include "erpnext/public/js/controllers/accounts.js" %}

View File

@ -648,7 +648,7 @@ def get_default_contact(doctype, name):
if out: if out:
try: try:
return out[0][0] return out[0][0]
except: except Exception:
return None return None
else: else:
return None return None

View File

@ -339,7 +339,7 @@ def sort_accounts(accounts, is_root=False, key="name"):
"""Sort root types as Asset, Liability, Equity, Income, Expense""" """Sort root types as Asset, Liability, Equity, Income, Expense"""
def compare_accounts(a, b): def compare_accounts(a, b):
if re.split('\W+', a[key])[0].isdigit(): if re.split(r'\W+', a[key])[0].isdigit():
# if chart of accounts is numbered, then sort by number # if chart of accounts is numbered, then sort by number
return cmp(a[key], b[key]) return cmp(a[key], b[key])
elif is_root: elif is_root:

View File

@ -6,7 +6,6 @@ from __future__ import unicode_literals
import frappe import frappe
from frappe import _ from frappe import _
from frappe.model.document import Document from frappe.model.document import Document
from frappe import _
class Disease(Document): class Disease(Document):
def validate(self): def validate(self):

View File

@ -7,7 +7,6 @@ import frappe
from frappe import _ from frappe import _
from frappe.model.document import Document from frappe.model.document import Document
from frappe.utils import flt, cint from frappe.utils import flt, cint
from frappe import _
class SoilTexture(Document): class SoilTexture(Document):
soil_edit_order = [2, 1, 0] soil_edit_order = [2, 1, 0]

View File

@ -6,7 +6,6 @@ from __future__ import unicode_literals
import frappe import frappe
from frappe import _ from frappe import _
from frappe.model.document import Document from frappe.model.document import Document
from frappe import _
class WaterAnalysis(Document): class WaterAnalysis(Document):
@frappe.whitelist() @frappe.whitelist()

View File

@ -11,7 +11,7 @@ from frappe.model.document import Document
from erpnext.assets.doctype.asset_category.asset_category import get_asset_category_account from erpnext.assets.doctype.asset_category.asset_category import get_asset_category_account
from erpnext.assets.doctype.asset.depreciation \ from erpnext.assets.doctype.asset.depreciation \
import get_disposal_account_and_cost_center, get_depreciation_accounts import get_disposal_account_and_cost_center, get_depreciation_accounts
from erpnext.accounts.general_ledger import make_gl_entries, make_reverse_gl_entries from erpnext.accounts.general_ledger import make_reverse_gl_entries
from erpnext.accounts.utils import get_account_currency from erpnext.accounts.utils import get_account_currency
from erpnext.controllers.accounts_controller import AccountsController from erpnext.controllers.accounts_controller import AccountsController
@ -546,7 +546,7 @@ class Asset(AccountsController):
cwip_account = None cwip_account = None
try: try:
cwip_account = get_asset_account("capital_work_in_progress_account", self.name, self.asset_category, self.company) cwip_account = get_asset_account("capital_work_in_progress_account", self.name, self.asset_category, self.company)
except: except Exception:
# if no cwip account found in category or company and "cwip is enabled" then raise else silently pass # if no cwip account found in category or company and "cwip is enabled" then raise else silently pass
if cwip_enabled: if cwip_enabled:
raise raise

View File

@ -63,7 +63,7 @@ def validate_returned_items(doc):
if doc.doctype in ("Delivery Note", "Sales Invoice"): if doc.doctype in ("Delivery Note", "Sales Invoice"):
for d in frappe.db.sql("""select item_code, qty, serial_no, batch_no from `tabPacked Item` for d in frappe.db.sql("""select item_code, qty, serial_no, batch_no from `tabPacked Item`
where parent = %s""".format(doc.doctype), doc.return_against, as_dict=1): where parent = %s""", doc.return_against, as_dict=1):
valid_items = get_ref_item_dict(valid_items, d) valid_items = get_ref_item_dict(valid_items, d)
already_returned_items = get_already_returned_items(doc) already_returned_items = get_already_returned_items(doc)

View File

@ -28,10 +28,10 @@ class AppointmentBookingSettings(Document):
to_time = datetime.datetime.strptime( to_time = datetime.datetime.strptime(
self.min_date+record.to_time, self.format_string) self.min_date+record.to_time, self.format_string)
timedelta = to_time-from_time timedelta = to_time-from_time
self.validate_from_and_to_time(from_time, to_time) self.validate_from_and_to_time(from_time, to_time, record)
self.duration_is_divisible(from_time, to_time) self.duration_is_divisible(from_time, to_time)
def validate_from_and_to_time(self, from_time, to_time): def validate_from_and_to_time(self, from_time, to_time, record):
if from_time > to_time: if from_time > to_time:
err_msg = _('<b>From Time</b> cannot be later than <b>To Time</b> for {0}').format(record.day_of_week) err_msg = _('<b>From Time</b> cannot be later than <b>To Time</b> for {0}').format(record.day_of_week)
frappe.throw(_(err_msg)) frappe.throw(_(err_msg))

View File

@ -371,4 +371,3 @@ def add_lead_to_prospect(lead, prospect):
prospect.save(ignore_permissions=True) prospect.save(ignore_permissions=True)
frappe.msgprint(_('Lead {0} has been added to prospect {1}.').format(frappe.bold(lead), frappe.bold(prospect.name)), frappe.msgprint(_('Lead {0} has been added to prospect {1}.').format(frappe.bold(lead), frappe.bold(prospect.name)),
title=_('Lead Added'), indicator='green') title=_('Lead Added'), indicator='green')

View File

@ -67,7 +67,7 @@ class SocialMediaPost(Document):
self.db_set("linkedin_post_id", linkedin_post.headers['X-RestLi-Id']) self.db_set("linkedin_post_id", linkedin_post.headers['X-RestLi-Id'])
self.db_set("post_status", "Posted") self.db_set("post_status", "Posted")
except: except Exception:
self.db_set("post_status", "Error") self.db_set("post_status", "Error")
title = _("Error while POSTING {0}").format(self.name) title = _("Error while POSTING {0}").format(self.name)
frappe.log_error(message=frappe.get_traceback(), title=title) frappe.log_error(message=frappe.get_traceback(), title=title)

View File

@ -88,7 +88,7 @@ def simulate(domain='Manufacturing', days=100):
elif domain=='Education': elif domain=='Education':
edu.work() edu.work()
except: except Exception:
frappe.db.set_global('demo_last_date', current_date) frappe.db.set_global('demo_last_date', current_date)
raise raise
finally: finally:

View File

@ -95,7 +95,7 @@ class CourseSchedulingTool(Document):
if self.day == calendar.day_name[getdate(d.schedule_date).weekday()]: if self.day == calendar.day_name[getdate(d.schedule_date).weekday()]:
frappe.delete_doc("Course Schedule", d.name) frappe.delete_doc("Course Schedule", d.name)
rescheduled.append(d.name) rescheduled.append(d.name)
except: except Exception:
reschedule_errors.append(d.name) reschedule_errors.append(d.name)
return rescheduled, reschedule_errors return rescheduled, reschedule_errors

View File

@ -219,7 +219,7 @@ def get_quiz(quiz_name, course):
try: try:
quiz = frappe.get_doc("Quiz", quiz_name) quiz = frappe.get_doc("Quiz", quiz_name)
questions = quiz.get_questions() questions = quiz.get_questions()
except: except Exception:
frappe.throw(_("Quiz {0} does not exist").format(quiz_name), frappe.DoesNotExistError) frappe.throw(_("Quiz {0} does not exist").format(quiz_name), frappe.DoesNotExistError)
return None return None

View File

@ -88,7 +88,7 @@ class xml2dict(object):
ns = http://cs.sfsu.edu/csc867/myscheduler ns = http://cs.sfsu.edu/csc867/myscheduler
name = patients name = patients
""" """
result = re.compile("\{(.*)\}(.*)").search(tag) result = re.compile(r"\{(.*)\}(.*)").search(tag)
if result: if result:
value.namespace, tag = result.groups() value.namespace, tag = result.groups()

View File

@ -266,7 +266,7 @@ class TallyMigration(Document):
self.is_master_data_processed = 1 self.is_master_data_processed = 1
except: except Exception:
self.publish("Process Master Data", _("Process Failed"), -1, 5) self.publish("Process Master Data", _("Process Failed"), -1, 5)
self.log() self.log()
@ -302,14 +302,14 @@ class TallyMigration(Document):
try: try:
party_doc = frappe.get_doc(party) party_doc = frappe.get_doc(party)
party_doc.insert() party_doc.insert()
except: except Exception:
self.log(party_doc) self.log(party_doc)
addresses_file = frappe.get_doc("File", {"file_url": addresses_file_url}) addresses_file = frappe.get_doc("File", {"file_url": addresses_file_url})
for address in json.loads(addresses_file.get_content()): for address in json.loads(addresses_file.get_content()):
try: try:
address_doc = frappe.get_doc(address) address_doc = frappe.get_doc(address)
address_doc.insert(ignore_mandatory=True) address_doc.insert(ignore_mandatory=True)
except: except Exception:
self.log(address_doc) self.log(address_doc)
def create_items_uoms(items_file_url, uoms_file_url): def create_items_uoms(items_file_url, uoms_file_url):
@ -319,7 +319,7 @@ class TallyMigration(Document):
try: try:
uom_doc = frappe.get_doc(uom) uom_doc = frappe.get_doc(uom)
uom_doc.insert() uom_doc.insert()
except: except Exception:
self.log(uom_doc) self.log(uom_doc)
items_file = frappe.get_doc("File", {"file_url": items_file_url}) items_file = frappe.get_doc("File", {"file_url": items_file_url})
@ -327,7 +327,7 @@ class TallyMigration(Document):
try: try:
item_doc = frappe.get_doc(item) item_doc = frappe.get_doc(item)
item_doc.insert() item_doc.insert()
except: except Exception:
self.log(item_doc) self.log(item_doc)
try: try:
@ -346,7 +346,7 @@ class TallyMigration(Document):
self.is_master_data_imported = 1 self.is_master_data_imported = 1
frappe.db.commit() frappe.db.commit()
except: except Exception:
self.publish("Import Master Data", _("Process Failed"), -1, 5) self.publish("Import Master Data", _("Process Failed"), -1, 5)
frappe.db.rollback() frappe.db.rollback()
self.log() self.log()
@ -370,7 +370,7 @@ class TallyMigration(Document):
if processed_voucher: if processed_voucher:
vouchers.append(processed_voucher) vouchers.append(processed_voucher)
frappe.db.commit() frappe.db.commit()
except: except Exception:
frappe.db.rollback() frappe.db.rollback()
self.log(voucher) self.log(voucher)
return vouchers return vouchers
@ -494,7 +494,7 @@ class TallyMigration(Document):
self.is_day_book_data_processed = 1 self.is_day_book_data_processed = 1
except: except Exception:
self.publish("Process Day Book Data", _("Process Failed"), -1, 5) self.publish("Process Day Book Data", _("Process Failed"), -1, 5)
self.log() self.log()
@ -564,7 +564,7 @@ class TallyMigration(Document):
is_last = True is_last = True
frappe.enqueue_doc(self.doctype, self.name, "_import_vouchers", queue="long", timeout=3600, start=index+1, total=total, is_last=is_last) frappe.enqueue_doc(self.doctype, self.name, "_import_vouchers", queue="long", timeout=3600, start=index+1, total=total, is_last=is_last)
except: except Exception:
self.log() self.log()
finally: finally:
@ -583,7 +583,7 @@ class TallyMigration(Document):
voucher_doc.submit() voucher_doc.submit()
self.publish("Importing Vouchers", _("{} of {}").format(index, total), index, total) self.publish("Importing Vouchers", _("{} of {}").format(index, total), index, total)
frappe.db.commit() frappe.db.commit()
except: except Exception:
frappe.db.rollback() frappe.db.rollback()
self.log(voucher_doc) self.log(voucher_doc)

View File

@ -48,7 +48,7 @@ class LabTest(Document):
if item.result_value and item.secondary_uom and item.conversion_factor: if item.result_value and item.secondary_uom and item.conversion_factor:
try: try:
item.secondary_uom_result = float(item.result_value) * float(item.conversion_factor) item.secondary_uom_result = float(item.result_value) * float(item.conversion_factor)
except: except Exception:
item.secondary_uom_result = '' item.secondary_uom_result = ''
frappe.msgprint(_('Row #{0}: Result for Secondary UOM not calculated').format(item.idx), title = _('Warning')) frappe.msgprint(_('Row #{0}: Result for Secondary UOM not calculated').format(item.idx), title = _('Warning'))

View File

@ -7,7 +7,6 @@ import frappe
from frappe import _ from frappe import _
from frappe.model.document import Document from frappe.model.document import Document
from frappe.utils import cstr, getdate, add_days from frappe.utils import cstr, getdate, add_days
from frappe import _
from frappe.model.mapper import get_mapped_doc from frappe.model.mapper import get_mapped_doc

View File

@ -18,4 +18,3 @@
<div class="patient-details"> <div class="patient-details">
</div> </div>
</div> </div>

View File

@ -82,7 +82,7 @@ class DailyWorkSummary(Document):
crop=True crop=True
) )
d.image = thumbnail_image d.image = thumbnail_image
except: except Exception:
d.image = original_image d.image = original_image
if d.sender in did_not_reply: if d.sender in did_not_reply:

View File

@ -235,4 +235,3 @@ def make_payment_entry(expense_claim, payable_account, amt):
pe.references[0].allocated_amount = amt pe.references[0].allocated_amount = amt
pe.insert() pe.insert()
pe.submit() pe.submit()

View File

@ -51,7 +51,7 @@ class LeaveControlPanel(Document):
la.docstatus = 1 la.docstatus = 1
la.save() la.save()
leave_allocated_for.append(d[0]) leave_allocated_for.append(d[0])
except: except Exception:
pass pass
if leave_allocated_for: if leave_allocated_for:
msgprint(_("Leaves Allocated Successfully for {0}").format(comma_and(leave_allocated_for))) msgprint(_("Leaves Allocated Successfully for {0}").format(comma_and(leave_allocated_for)))

View File

@ -5,7 +5,7 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import frappe import frappe
from frappe import _ from frappe import _
from frappe.utils import getdate, cstr, add_days, date_diff, getdate, ceil from frappe.utils import getdate, cstr, add_days, date_diff, ceil
from frappe.model.document import Document from frappe.model.document import Document
from erpnext.hr.utils import validate_overlap from erpnext.hr.utils import validate_overlap
from frappe.utils.background_jobs import enqueue from frappe.utils.background_jobs import enqueue

View File

@ -96,8 +96,6 @@ def get_columns():
} }
] ]
return columns
def get_vehicle_log_data(filters): def get_vehicle_log_data(filters):
start_date, end_date = get_period_dates(filters) start_date, end_date = get_period_dates(filters)

View File

@ -7,7 +7,7 @@ import frappe, erpnext
from frappe import _ from frappe import _
from frappe.model.document import Document from frappe.model.document import Document
from frappe.utils import (nowdate, getdate, now_datetime, get_datetime, flt, date_diff, get_last_day, cint, from frappe.utils import (nowdate, getdate, now_datetime, get_datetime, flt, date_diff, get_last_day, cint,
get_first_day, get_datetime, add_days) get_first_day, add_days)
from erpnext.controllers.accounts_controller import AccountsController from erpnext.controllers.accounts_controller import AccountsController
from erpnext.accounts.general_ledger import make_gl_entries from erpnext.accounts.general_ledger import make_gl_entries

View File

@ -6,10 +6,9 @@ from __future__ import unicode_literals
import frappe, erpnext import frappe, erpnext
import json import json
from frappe import _ from frappe import _
from frappe.utils import flt, getdate, cint
from six import iteritems from six import iteritems
from frappe.model.document import Document from frappe.model.document import Document
from frappe.utils import date_diff, add_days, getdate, add_months, get_first_day, get_datetime from frappe.utils import flt, cint, date_diff, add_days, getdate, add_months, get_first_day, get_datetime
from erpnext.controllers.accounts_controller import AccountsController from erpnext.controllers.accounts_controller import AccountsController
from erpnext.accounts.general_ledger import make_gl_entries from erpnext.accounts.general_ledger import make_gl_entries
from erpnext.loan_management.doctype.loan_security_shortfall.loan_security_shortfall import update_shortfall_status from erpnext.loan_management.doctype.loan_security_shortfall.loan_security_shortfall import update_shortfall_status

View File

@ -4,6 +4,7 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import frappe import frappe
from frappe import _
from frappe.model.document import Document from frappe.model.document import Document
class SanctionedLoanAmount(Document): class SanctionedLoanAmount(Document):

View File

@ -82,4 +82,3 @@ frappe.tour['Routing'] = [
description: __("Enter the Operation, the table will fetch the Operation details like Hourly Rate, Workstation automatically.\n\n After that, set the Operation Time in minutes and the table will calculate the Operation Costs based on the Hourly Rate and Operation Time.") description: __("Enter the Operation, the table will fetch the Operation details like Hourly Rate, Workstation automatically.\n\n After that, set the Operation Time in minutes and the table will calculate the Operation Costs based on the Hourly Rate and Operation Time.")
} }
]; ];

View File

@ -7,7 +7,7 @@ from frappe import _
from frappe.utils.data import comma_and from frappe.utils.data import comma_and
def execute(filters=None): def execute(filters=None):
# if not filters: filters = {} # if not filters: filters = {}
columns = get_columns() columns = get_columns()
summ_data = [] summ_data = []

View File

@ -207,7 +207,7 @@ def get_member_based_on_subscription(subscription_id, email=None, customer_id=No
try: try:
return frappe.get_doc("Member", members[0]["name"]) return frappe.get_doc("Member", members[0]["name"])
except: except Exception:
return None return None
@ -393,7 +393,7 @@ def notify_failure(log):
""".format(get_link_to_form("Error Log", log.name)) """.format(get_link_to_form("Error Log", log.name))
sendmail_to_system_managers("[Important] [ERPNext] Razorpay membership webhook failed , please check.", content) sendmail_to_system_managers("[Important] [ERPNext] Razorpay membership webhook failed , please check.", content)
except: except Exception:
pass pass
@ -402,7 +402,7 @@ def get_plan_from_razorpay_id(plan_id):
try: try:
return plan[0]["name"] return plan[0]["name"]
except: except Exception:
return None return None

View File

@ -30,7 +30,7 @@ def execute():
buying_cost_center, selling_cost_center, expense_account, income_account, default_supplier buying_cost_center, selling_cost_center, expense_account, income_account, default_supplier
FROM `tabItem`; FROM `tabItem`;
''', companies[0].name) ''', companies[0].name)
except: except Exception:
pass pass
else: else:
item_details = frappe.db.sql(""" SELECT name, default_warehouse, item_details = frappe.db.sql(""" SELECT name, default_warehouse,

View File

@ -11,5 +11,5 @@ def execute():
frappe.reload_doc("stock", "doctype", "stock_ledger_entry") frappe.reload_doc("stock", "doctype", "stock_ledger_entry")
frappe.reload_doc("stock", "doctype", "serial_no") frappe.reload_doc("stock", "doctype", "serial_no")
except: except Exception:
pass pass

View File

@ -86,7 +86,7 @@ def execute():
try: try:
employee_other_income.submit() employee_other_income.submit()
migrated.append([proof.employee, proof.payroll_period]) migrated.append([proof.employee, proof.payroll_period])
except: except Exception:
pass pass
if not frappe.db.table_exists("Employee Tax Exemption Declaration"): if not frappe.db.table_exists("Employee Tax Exemption Declaration"):
@ -108,5 +108,5 @@ def execute():
try: try:
employee_other_income.submit() employee_other_income.submit()
except: except Exception:
pass pass

View File

@ -20,5 +20,5 @@ def execute():
}) })
if count % 200 == 0: if count % 200 == 0:
frappe.db.commit() frappe.db.commit()
except: except Exception:
frappe.db.rollback() frappe.db.rollback()

View File

@ -887,4 +887,3 @@ def delete_gst_settings_for_company(doc, method):
gst_settings.remove(d) gst_settings.remove(d)
gst_settings.save() gst_settings.save()

View File

@ -41,7 +41,7 @@ def get_data(filters):
} }
# Regular expression set to remove all the special characters # Regular expression set to remove all the special characters
special_characters = "[$%^*()+\\[\]{};':\"\\|<>.?]" special_characters = r"[$%^*()+\\[\]{};':\"\\|<>.?]"
for row in data: for row in data:
set_defaults(row) set_defaults(row)

View File

@ -116,7 +116,7 @@ def get_result_as_list(data, filters):
if d.get("voucher_no").startswith("{0}-".format(JournalCode)) or d.get("voucher_no").startswith("{0}/".format(JournalCode)): if d.get("voucher_no").startswith("{0}-".format(JournalCode)) or d.get("voucher_no").startswith("{0}/".format(JournalCode)):
EcritureNum = re.split("-|/", d.get("voucher_no"))[1] EcritureNum = re.split("-|/", d.get("voucher_no"))[1]
else: else:
EcritureNum = re.search("{0}(\d+)".format(JournalCode), d.get("voucher_no"), re.IGNORECASE).group(1) EcritureNum = re.search(r"{0}(\d+)".format(JournalCode), d.get("voucher_no"), re.IGNORECASE).group(1)
EcritureDate = format_datetime(d.get("GlPostDate"), "yyyyMMdd") EcritureDate = format_datetime(d.get("GlPostDate"), "yyyyMMdd")

View File

@ -2,7 +2,8 @@
# License: GNU General Public License v3. See license.txt # License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals from __future__ import unicode_literals
import frappe, json import json
import frappe
from frappe.utils.nestedset import get_root_of from frappe.utils.nestedset import get_root_of
from frappe.utils import cint from frappe.utils import cint
from erpnext.accounts.doctype.pos_profile.pos_profile import get_item_groups from erpnext.accounts.doctype.pos_profile.pos_profile import get_item_groups
@ -209,7 +210,6 @@ def check_opening_entry(user):
@frappe.whitelist() @frappe.whitelist()
def create_opening_voucher(pos_profile, company, balance_details): def create_opening_voucher(pos_profile, company, balance_details):
import json
balance_details = json.loads(balance_details) balance_details = json.loads(balance_details)
new_pos_opening = frappe.get_doc({ new_pos_opening = frappe.get_doc({

View File

@ -79,7 +79,8 @@ class NamingSeries(Document):
options = self.scrub_options_list(ol) options = self.scrub_options_list(ol)
# validate names # validate names
for i in options: self.validate_series_name(i) for i in options:
self.validate_series_name(i)
if options and self.user_must_always_select: if options and self.user_must_always_select:
options = [''] + options options = [''] + options
@ -138,7 +139,7 @@ class NamingSeries(Document):
def validate_series_name(self, n): def validate_series_name(self, n):
import re import re
if not re.match("^[\w\- /.#{}]*$", n, re.UNICODE): if not re.match(r"^[\w\- \/.#{}]+$", n, re.UNICODE):
throw(_('Special Characters except "-", "#", ".", "/", "{" and "}" not allowed in naming series')) throw(_('Special Characters except "-", "#", ".", "/", "{" and "}" not allowed in naming series'))
@frappe.whitelist() @frappe.whitelist()

View File

@ -106,7 +106,7 @@ def fin(args):
def make_sample_data(domains): def make_sample_data(domains):
try: try:
sample_data.make_sample_data(domains) sample_data.make_sample_data(domains)
except: except Exception:
# clear message # clear message
if frappe.message_log: if frappe.message_log:
frappe.message_log.pop() frappe.message_log.pop()

View File

@ -109,7 +109,7 @@ def get_exchange_rate(from_currency, to_currency, transaction_date=None, args=No
value = response.json()["result"] value = response.json()["result"]
cache.setex(name=key, time=21600, value=flt(value)) cache.setex(name=key, time=21600, value=flt(value))
return flt(value) return flt(value)
except: except Exception:
frappe.log_error(title="Get Exchange Rate") frappe.log_error(title="Get Exchange Rate")
frappe.msgprint(_("Unable to find exchange rate for {0} to {1} for key date {2}. Please create a Currency Exchange record manually").format(from_currency, to_currency, transaction_date)) frappe.msgprint(_("Unable to find exchange rate for {0} to {1} for key date {2}. Please create a Currency Exchange record manually").format(from_currency, to_currency, transaction_date))
return 0.0 return 0.0

View File

@ -331,7 +331,7 @@ class DeliveryNote(SellingController):
credit_note_link = frappe.utils.get_link_to_form('Sales Invoice', return_invoice.name) credit_note_link = frappe.utils.get_link_to_form('Sales Invoice', return_invoice.name)
frappe.msgprint(_("Credit Note {0} has been created automatically").format(credit_note_link)) frappe.msgprint(_("Credit Note {0} has been created automatically").format(credit_note_link))
except: except Exception:
frappe.throw(_("Could not create Credit Note automatically, please uncheck 'Issue Credit Note' and submit again")) frappe.throw(_("Could not create Credit Note automatically, please uncheck 'Issue Credit Note' and submit again"))
def update_billed_amount_based_on_so(so_detail, update_modified=True): def update_billed_amount_based_on_so(so_detail, update_modified=True):

View File

@ -573,7 +573,7 @@ def auto_fetch_serial_number(qty, item_code, warehouse, posting_date=None, batch
if batch_nos: if batch_nos:
try: try:
filters["batch_no"] = json.loads(batch_nos) if (type(json.loads(batch_nos)) == list) else [json.loads(batch_nos)] filters["batch_no"] = json.loads(batch_nos) if (type(json.loads(batch_nos)) == list) else [json.loads(batch_nos)]
except: except Exception:
filters["batch_no"] = [batch_nos] filters["batch_no"] = [batch_nos]
if posting_date: if posting_date:

View File

@ -1101,4 +1101,3 @@ function check_should_not_attach_bom_items(bom_no) {
} }
$.extend(cur_frm.cscript, new erpnext.stock.StockEntry({frm: cur_frm})); $.extend(cur_frm.cscript, new erpnext.stock.StockEntry({frm: cur_frm}));

View File

@ -24,4 +24,3 @@ QUnit.test("test manufacture from bom", function(assert) {
() => done() () => done()
]); ]);
}); });

View File

@ -302,4 +302,3 @@ erpnext.stock.StockReconciliation = class StockReconciliation extends erpnext.st
}; };
cur_frm.cscript = new erpnext.stock.StockReconciliation({frm: cur_frm}); cur_frm.cscript = new erpnext.stock.StockReconciliation({frm: cur_frm});

View File

@ -15,4 +15,3 @@ frappe.ui.form.on('Stock Settings', {
frm.set_query("sample_retention_warehouse", filters); frm.set_query("sample_retention_warehouse", filters);
} }
}); });

View File

@ -86,4 +86,3 @@ function convert_to_group_or_ledger(frm){
}) })
} }

View File

@ -166,7 +166,7 @@ def create_material_request(material_requests):
mr.submit() mr.submit()
mr_list.append(mr) mr_list.append(mr)
except: except Exception:
_log_exception() _log_exception()
if mr_list: if mr_list:

View File

@ -130,4 +130,3 @@ def get_filter_conditions(filters: Filters) -> QueryArgs:
{"work_order_filter": f"AND wo.name='{work_order_name}'"} {"work_order_filter": f"AND wo.name='{work_order_name}'"}
) )
return filter_conditions return filter_conditions

View File

@ -4,6 +4,7 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import frappe import frappe
from frappe import _ from frappe import _
from operator import itemgetter
from frappe.utils import date_diff, flt, cint from frappe.utils import date_diff, flt, cint
from six import iteritems from six import iteritems
from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
@ -12,7 +13,7 @@ def execute(filters=None):
columns = get_columns(filters) columns = get_columns(filters)
item_details = get_fifo_queue(filters) item_details = get_fifo_queue(filters)
to_date = filters["to_date"] to_date = filters["to_date"]
_func = lambda x: x[1] _func = itemgetter(1)
data = [] data = []
for item, item_dict in iteritems(item_details): for item, item_dict in iteritems(item_details):

View File

@ -2,6 +2,7 @@
# License: GNU General Public License v3. See license.txt # License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals from __future__ import unicode_literals
from operator import itemgetter
import frappe, erpnext import frappe, erpnext
from frappe import _ from frappe import _
from frappe.utils import flt, cint, getdate, now, date_diff from frappe.utils import flt, cint, getdate, now, date_diff
@ -44,7 +45,7 @@ def execute(filters=None):
data = [] data = []
conversion_factors = {} conversion_factors = {}
_func = lambda x: x[1] _func = itemgetter(1)
for (company, item, warehouse) in sorted(iwb_map): for (company, item, warehouse) in sorted(iwb_map):
if item_map.get(item): if item_map.get(item):

View File

@ -29,7 +29,7 @@ def repost(only_actual=False, allow_negative_stock=False, allow_zero_rate=False,
try: try:
repost_stock(d[0], d[1], allow_zero_rate, only_actual, only_bin, allow_negative_stock) repost_stock(d[0], d[1], allow_zero_rate, only_actual, only_bin, allow_negative_stock)
frappe.db.commit() frappe.db.commit()
except: except Exception:
frappe.db.rollback() frappe.db.rollback()
if allow_negative_stock: if allow_negative_stock:
@ -247,5 +247,5 @@ def reset_serial_no_status_and_warehouse(serial_nos=None):
sr.via_stock_ledger = True sr.via_stock_ledger = True
sr.save() sr.save()
except: except Exception:
pass pass

View File

@ -13,7 +13,6 @@ from frappe.utils import time_diff_in_seconds, getdate, get_weekdays, add_to_dat
from datetime import datetime from datetime import datetime
from frappe.utils.safe_exec import get_safe_globals from frappe.utils.safe_exec import get_safe_globals
from erpnext.support.doctype.issue.issue import get_holidays from erpnext.support.doctype.issue.issue import get_holidays
from frappe.utils.safe_exec import get_safe_globals
class ServiceLevelAgreement(Document): class ServiceLevelAgreement(Document):
def validate(self): def validate(self):

View File

@ -127,7 +127,7 @@ def get_price(item_code, price_list, customer_group, company, qty=1):
return price_obj return price_obj
def get_non_stock_item_status(item_code, item_warehouse_field): def get_non_stock_item_status(item_code, item_warehouse_field):
#if item belongs to product bundle, check if bundle items are in stock #if item belongs to product bundle, check if bundle items are in stock
if frappe.db.exists("Product Bundle", item_code): if frappe.db.exists("Product Bundle", item_code):
items = frappe.get_doc("Product Bundle", item_code).get_all_children() items = frappe.get_doc("Product Bundle", item_code).get_all_children()
bundle_warehouse = frappe.db.get_value('Item', item_code, item_warehouse_field) bundle_warehouse = frappe.db.get_value('Item', item_code, item_warehouse_field)