ci(semgrep): false +ve translation on templatesversion-14
@@ -0,0 +1,9 @@ | |||||
// ok: frappe-missing-translate-function-js | |||||
frappe.msgprint('{{ _("Both login and password required") }}'); | |||||
// ruleid: frappe-missing-translate-function-js | |||||
frappe.msgprint('What'); | |||||
// ok: frappe-missing-translate-function-js | |||||
frappe.throw(' {{ _("Both login and password required") }}. '); |
@@ -2,30 +2,30 @@ import frappe | |||||
from frappe import msgprint, throw, _ | from frappe import msgprint, throw, _ | ||||
# ruleid: frappe-missing-translate-function | |||||
# ruleid: frappe-missing-translate-function-python | |||||
throw("Error Occured") | throw("Error Occured") | ||||
# ruleid: frappe-missing-translate-function | |||||
# ruleid: frappe-missing-translate-function-python | |||||
frappe.throw("Error Occured") | frappe.throw("Error Occured") | ||||
# ruleid: frappe-missing-translate-function | |||||
# ruleid: frappe-missing-translate-function-python | |||||
frappe.msgprint("Useful message") | frappe.msgprint("Useful message") | ||||
# ruleid: frappe-missing-translate-function | |||||
# ruleid: frappe-missing-translate-function-python | |||||
msgprint("Useful message") | msgprint("Useful message") | ||||
# ok: frappe-missing-translate-function | |||||
# ok: frappe-missing-translate-function-python | |||||
translatedmessage = _("Hello") | translatedmessage = _("Hello") | ||||
# ok: frappe-missing-translate-function | |||||
# ok: frappe-missing-translate-function-python | |||||
throw(translatedmessage) | throw(translatedmessage) | ||||
# ok: frappe-missing-translate-function | |||||
# ok: frappe-missing-translate-function-python | |||||
msgprint(translatedmessage) | msgprint(translatedmessage) | ||||
# ok: frappe-missing-translate-function | |||||
# ok: frappe-missing-translate-function-python | |||||
msgprint(_("Helpful message")) | msgprint(_("Helpful message")) | ||||
# ok: frappe-missing-translate-function | |||||
# ok: frappe-missing-translate-function-python | |||||
frappe.throw(_("Error occured")) | frappe.throw(_("Error occured")) |
@@ -1,15 +1,30 @@ | |||||
rules: | rules: | ||||
- id: frappe-missing-translate-function | |||||
- id: frappe-missing-translate-function-python | |||||
pattern-either: | pattern-either: | ||||
- patterns: | - patterns: | ||||
- pattern: frappe.msgprint("...", ...) | - pattern: frappe.msgprint("...", ...) | ||||
- pattern-not: frappe.msgprint(_("..."), ...) | - pattern-not: frappe.msgprint(_("..."), ...) | ||||
- pattern-not: frappe.msgprint(__("..."), ...) | |||||
- patterns: | - patterns: | ||||
- pattern: frappe.throw("...", ...) | - pattern: frappe.throw("...", ...) | ||||
- pattern-not: frappe.throw(_("..."), ...) | - pattern-not: frappe.throw(_("..."), ...) | ||||
message: | | |||||
All user facing text must be wrapped in translate function. Please refer to translation documentation. https://frappeframework.com/docs/user/en/guides/basics/translations | |||||
languages: [python] | |||||
severity: ERROR | |||||
- id: frappe-missing-translate-function-js | |||||
pattern-either: | |||||
- patterns: | |||||
- pattern: frappe.msgprint("...", ...) | |||||
- pattern-not: frappe.msgprint(__("..."), ...) | |||||
# ignore microtemplating e.g. msgprint("{{ _("server side translation") }}") | |||||
- pattern-not: frappe.msgprint("=~/\{\{.*\_.*\}\}/i", ...) | |||||
- patterns: | |||||
- pattern: frappe.throw("...", ...) | |||||
- pattern-not: frappe.throw(__("..."), ...) | - pattern-not: frappe.throw(__("..."), ...) | ||||
# ignore microtemplating | |||||
- pattern-not: frappe.throw("=~/\{\{.*\_.*\}\}/i", ...) | |||||
message: | | message: | | ||||
All user facing text must be wrapped in translate function. Please refer to translation documentation. https://frappeframework.com/docs/user/en/guides/basics/translations | All user facing text must be wrapped in translate function. Please refer to translation documentation. https://frappeframework.com/docs/user/en/guides/basics/translations | ||||
languages: [python, javascript, json] | |||||
languages: [javascript] | |||||
severity: ERROR | severity: ERROR |
@@ -12,14 +12,12 @@ frappe.ready(function() { | |||||
var message = $('[name="message"]').val(); | var message = $('[name="message"]').val(); | ||||
if(!(email && message)) { | if(!(email && message)) { | ||||
frappe.msgprint("{{ _("Please enter both your email and message so that we \ | |||||
can get back to you. Thanks!") }}"); | |||||
frappe.msgprint('{{ _("Please enter both your email and message so that we can get back to you. Thanks!") }}'); | |||||
return false; | return false; | ||||
} | } | ||||
if(!validate_email(email)) { | if(!validate_email(email)) { | ||||
frappe.msgprint("{{ _("You seem to have written your name instead of your email. \ | |||||
Please enter a valid email address so that we can get back.") }}"); | |||||
frappe.msgprint('{{ _("You seem to have written your name instead of your email. Please enter a valid email address so that we can get back.") }}'); | |||||
$('[name="email"]').focus(); | $('[name="email"]').focus(); | ||||
return false; | return false; | ||||
} | } | ||||
@@ -31,9 +29,9 @@ frappe.ready(function() { | |||||
message: message, | message: message, | ||||
callback: function(r) { | callback: function(r) { | ||||
if(r.message==="okay") { | if(r.message==="okay") { | ||||
frappe.msgprint("{{ _("Thank you for your message") }}"); | |||||
frappe.msgprint('{{ _("Thank you for your message") }}'); | |||||
} else { | } else { | ||||
frappe.msgprint("{{ _("There were errors") }}"); | |||||
frappe.msgprint('{{ _("There were errors") }}'); | |||||
console.log(r.exc); | console.log(r.exc); | ||||
} | } | ||||
$(':input').val(''); | $(':input').val(''); | ||||
@@ -1,4 +1,5 @@ | |||||
import frappe | import frappe | ||||
from frappe import _ | |||||
from frappe.utils import add_to_date, now | from frappe.utils import add_to_date, now | ||||
@frappe.whitelist() | @frappe.whitelist() | ||||
@@ -10,7 +11,7 @@ def create_if_not_exists(doc): | |||||
''' | ''' | ||||
if not frappe.local.dev_server: | if not frappe.local.dev_server: | ||||
frappe.throw('This method can only be accessed in development', frappe.PermissionError) | |||||
frappe.throw(_('This method can only be accessed in development'), frappe.PermissionError) | |||||
doc = frappe.parse_json(doc) | doc = frappe.parse_json(doc) | ||||
@@ -5,6 +5,7 @@ from html2text import html2text | |||||
from RestrictedPython import compile_restricted, safe_globals | from RestrictedPython import compile_restricted, safe_globals | ||||
import RestrictedPython.Guards | import RestrictedPython.Guards | ||||
import frappe | import frappe | ||||
from frappe import _ | |||||
import frappe.utils | import frappe.utils | ||||
import frappe.utils.data | import frappe.utils.data | ||||
from frappe.website.utils import (get_shade, get_toc, get_next_link) | from frappe.website.utils import (get_shade, get_toc, get_next_link) | ||||
@@ -31,7 +32,7 @@ class NamespaceDict(frappe._dict): | |||||
def safe_exec(script, _globals=None, _locals=None): | def safe_exec(script, _globals=None, _locals=None): | ||||
# script reports must be enabled via site_config.json | # script reports must be enabled via site_config.json | ||||
if not frappe.conf.server_script_enabled: | if not frappe.conf.server_script_enabled: | ||||
frappe.throw('Please Enable Server Scripts', ServerScriptNotEnabled) | |||||
frappe.throw(_('Please Enable Server Scripts'), ServerScriptNotEnabled) | |||||
# build globals | # build globals | ||||
exec_globals = get_safe_globals() | exec_globals = get_safe_globals() | ||||