Merge pull request #27299 from ankush/strict_linting_v13

chore: cleanup linting errors and introduce strict linting checks
This commit is contained in:
Ankush Menat
2021-09-01 21:16:47 +05:30
committed by GitHub
76 changed files with 268 additions and 166 deletions

View File

@@ -13,3 +13,4 @@
# Whitespace trimming throughout codebase # Whitespace trimming throughout codebase
9bb69e711a5da43aaf8c8ecb5601aeffd89dbe5a 9bb69e711a5da43aaf8c8ecb5601aeffd89dbe5a
f0bcb753fb7ebbb64bb0d6906d431d002f0f7d8f

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

@@ -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

@@ -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

@@ -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

@@ -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

@@ -65,7 +65,7 @@ def get_data(filters, leave_types):
for leave_type in leave_types: for leave_type in leave_types:
remaining = 0 remaining = 0
if leave_type in available_leave["leave_allocation"]: if leave_type in available_leave["leave_allocation"]:
# opening balance # opening balance
remaining = available_leave["leave_allocation"][leave_type]['remaining_leaves'] remaining = available_leave["leave_allocation"][leave_type]['remaining_leaves']
row += [remaining] row += [remaining]

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

@@ -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

@@ -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

@@ -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

@@ -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

@@ -291,10 +291,6 @@ class Issue(Document):
self.agreement_status = "Ongoing" self.agreement_status = "Ongoing"
self.save() self.save()
def reset_issue_metrics(self):
self.db_set("resolution_time", None)
self.db_set("user_resolution_time", None)
def get_priority(issue): def get_priority(issue):
service_level_agreement = frappe.get_doc("Service Level Agreement", issue.service_level_agreement) service_level_agreement = frappe.get_doc("Service Level Agreement", issue.service_level_agreement)

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)