Преглед на файлове

Merge pull request #13329 from ankush/sgrep_microtemplate

ci(semgrep): false +ve translation on templates
version-14
mergify[bot] преди 4 години
committed by GitHub
родител
ревизия
56b3eb52bf
No known key found for this signature in database GPG ключ ID: 4AEE18F83AFDEB23
променени са 6 файла, в които са добавени 44 реда и са изтрити 20 реда
  1. +9
    -0
      .github/helper/semgrep_rules/ux.js
  2. +9
    -9
      .github/helper/semgrep_rules/ux.py
  3. +18
    -3
      .github/helper/semgrep_rules/ux.yml
  4. +4
    -6
      frappe/templates/includes/contact.js
  5. +2
    -1
      frappe/tests/ui_test_helpers.py
  6. +2
    -1
      frappe/utils/safe_exec.py

+ 9
- 0
.github/helper/semgrep_rules/ux.js Целия файл

@@ -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") }}. ');

+ 9
- 9
.github/helper/semgrep_rules/ux.py Целия файл

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

+ 18
- 3
.github/helper/semgrep_rules/ux.yml Целия файл

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

+ 4
- 6
frappe/templates/includes/contact.js Целия файл

@@ -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('');


+ 2
- 1
frappe/tests/ui_test_helpers.py Целия файл

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




+ 2
- 1
frappe/utils/safe_exec.py Целия файл

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


Зареждане…
Отказ
Запис