diff --git a/.travis.yml b/.travis.yml index 1551f17ec5..2a60d20c6f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,6 +15,9 @@ services: - mysql install: + - pip install flake8 # pytest + # stop the build if there are Python syntax errors or undefined names + - flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics - sudo rm /etc/apt/sources.list.d/docker.list - sudo apt-get purge -y mysql-common mysql-server mysql-client - nvm install v7.10.0 diff --git a/frappe/core/doctype/doctype/boilerplate/controller.py b/frappe/core/doctype/doctype/boilerplate/controller._py similarity index 100% rename from frappe/core/doctype/doctype/boilerplate/controller.py rename to frappe/core/doctype/doctype/boilerplate/controller._py diff --git a/frappe/core/doctype/doctype/boilerplate/test_controller.py b/frappe/core/doctype/doctype/boilerplate/test_controller._py similarity index 100% rename from frappe/core/doctype/doctype/boilerplate/test_controller.py rename to frappe/core/doctype/doctype/boilerplate/test_controller._py diff --git a/frappe/core/doctype/doctype/doctype.py b/frappe/core/doctype/doctype/doctype.py index 2e13e64f57..40207a24dd 100644 --- a/frappe/core/doctype/doctype/doctype.py +++ b/frappe/core/doctype/doctype/doctype.py @@ -330,10 +330,10 @@ class DocType(Document): def make_controller_template(self): """Make boilerplate controller template.""" - make_boilerplate("controller.py", self) + make_boilerplate("controller._py", self) if not (self.istable or self.issingle): - make_boilerplate("test_controller.py", self.as_dict()) + make_boilerplate("test_controller._py", self.as_dict()) if not self.istable: make_boilerplate("controller.js", self.as_dict()) diff --git a/frappe/core/doctype/domain/domain.json b/frappe/core/doctype/domain/domain.json index 35b68d0714..f257d02ae8 100644 --- a/frappe/core/doctype/domain/domain.json +++ b/frappe/core/doctype/domain/domain.json @@ -26,7 +26,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 0, + "in_list_view": 1, "in_standard_filter": 0, "label": "Domain", "length": 0, @@ -54,7 +54,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-06-16 13:03:25.430679", + "modified": "2017-07-26 21:29:00.353105", "modified_by": "Administrator", "module": "Core", "name": "Domain", diff --git a/frappe/core/doctype/domain/test_domain.js b/frappe/core/doctype/domain/test_domain.js new file mode 100644 index 0000000000..6d8bd8039d --- /dev/null +++ b/frappe/core/doctype/domain/test_domain.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Domain", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially('Domain', [ + // insert a new Domain + () => frappe.tests.make([ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/frappe/core/doctype/has_role/has_role.py b/frappe/core/doctype/has_role/has_role.py index 44c27098d9..45e76c85a1 100644 --- a/frappe/core/doctype/has_role/has_role.py +++ b/frappe/core/doctype/has_role/has_role.py @@ -7,7 +7,6 @@ import frappe from frappe.model.document import Document class HasRole(Document): - def validate(self): - if cint(self.get("__islocal")) and frappe.db.exists("Has Role", { - "parent": self.parent, "role": self.role}): + def before_insert(self): + if frappe.db.exists("Has Role", {"parent": self.parent, "role": self.role}): frappe.throw(frappe._("User '{0}' already has the role '{1}'").format(self.parent, self.role)) diff --git a/frappe/email/doctype/newsletter/newsletter.py b/frappe/email/doctype/newsletter/newsletter.py index 29ecbee853..4f4713edbe 100755 --- a/frappe/email/doctype/newsletter/newsletter.py +++ b/frappe/email/doctype/newsletter/newsletter.py @@ -13,7 +13,6 @@ from frappe.utils.background_jobs import enqueue from frappe.utils.scheduler import log from frappe.email.queue import send from frappe.email.doctype.email_group.email_group import add_subscribers -from frappe.utils.file_manager import get_file from frappe.utils import parse_addr @@ -68,7 +67,7 @@ class Newsletter(Document): files = frappe.get_all("File", fields = ["name"], filters = {"attached_to_doctype": "Newsletter", "attached_to_name":self.name}, order_by="creation desc") - for file in files: + for a in files: try: # these attachments will be attached on-demand # and won't be stored in the message diff --git a/frappe/integrations/doctype/gsuite_settings/gsuite_settings.py b/frappe/integrations/doctype/gsuite_settings/gsuite_settings.py index 9b6be3422d..29b1b64897 100644 --- a/frappe/integrations/doctype/gsuite_settings/gsuite_settings.py +++ b/frappe/integrations/doctype/gsuite_settings/gsuite_settings.py @@ -17,7 +17,7 @@ class GSuiteSettings(Document): def get_access_token(self): if not self.refresh_token: - raise UserError(_("Google GSuite is not configured.")) + raise frappe.ValidationError(_("Google GSuite is not configured.")) data = { 'client_id': self.client_id, 'client_secret': self.get_password(fieldname='client_secret',raise_exception=False), diff --git a/frappe/modules/utils.py b/frappe/modules/utils.py index 2acb5b5db6..20ff7bb28f 100644 --- a/frappe/modules/utils.py +++ b/frappe/modules/utils.py @@ -206,6 +206,8 @@ def get_app_publisher(module): def make_boilerplate(template, doc, opts=None): target_path = get_doc_path(doc.module, doc.doctype, doc.name) template_name = template.replace("controller", scrub(doc.name)) + if template_name.endswith('._py'): + template_name = template_name[:-4] + '.py' target_file_path = os.path.join(target_path, template_name) if not doc: doc = {}