mirror of
https://github.com/inventree/InvenTree.git
synced 2025-07-08 06:30:55 +00:00
.github
InvenTree
ci
check_api_endpoint.py
check_js_templates.py
check_locale_files.py
check_migration_files.py
version_check.py
deploy
docker
images
.env
.eslintrc.yml
.gitattributes
.gitignore
.gitpod.yml
.pre-commit-config.yaml
CONTRIBUTING.md
Dockerfile
LICENSE
README.md
RELEASE.md
SECURITY.md
crowdin.yml
docker-compose.yml
package-lock.json
package.json
requirements-dev.in
requirements-dev.txt
requirements.in
requirements.txt
setup.cfg
tasks.py
* Add bandit to pre-commit checks * fix catchall exceptions * remove unused definitons * remove unuseed ariables * Add docstring * fix B006, B008 errors * fix B007 error * ignore B009 * Add checks for formatting and naming
118 lines
2.7 KiB
Python
118 lines
2.7 KiB
Python
"""Test that the "translated" javascript files to not contain template tags which need to be determined at "run time".
|
|
|
|
This is because the "translated" javascript files are compiled into the "static" directory.
|
|
They should only contain template tags that render static information.
|
|
"""
|
|
|
|
import os
|
|
import pathlib
|
|
import re
|
|
import sys
|
|
|
|
here = os.path.abspath(os.path.dirname(__file__))
|
|
template_dir = os.path.abspath(os.path.join(here, '..', 'InvenTree', 'templates'))
|
|
|
|
# We only care about the 'translated' files
|
|
js_i18n_dir = os.path.join(template_dir, 'js', 'translated')
|
|
js_dynamic_dir = os.path.join(template_dir, 'js', 'dynamic')
|
|
|
|
errors = 0
|
|
|
|
print("=================================")
|
|
print("Checking static javascript files:")
|
|
print("=================================")
|
|
|
|
|
|
def check_invalid_tag(data):
|
|
"""Check for invalid tags."""
|
|
pattern = r"{%(\w+)"
|
|
|
|
err_count = 0
|
|
|
|
for idx, line in enumerate(data):
|
|
|
|
results = re.findall(pattern, line)
|
|
|
|
for result in results:
|
|
err_count += 1
|
|
|
|
print(f" - Error on line {idx+1}: %{{{result[0]}")
|
|
|
|
return err_count
|
|
|
|
|
|
def check_prohibited_tags(data):
|
|
"""Check for prohibited tags."""
|
|
allowed_tags = [
|
|
'if',
|
|
'elif',
|
|
'else',
|
|
'endif',
|
|
'for',
|
|
'endfor',
|
|
'trans',
|
|
'load',
|
|
'include',
|
|
'url',
|
|
]
|
|
|
|
pattern = r"{% (\w+)\s"
|
|
|
|
err_count = 0
|
|
|
|
has_trans = False
|
|
|
|
for idx, line in enumerate(data):
|
|
|
|
for tag in re.findall(pattern, line):
|
|
|
|
if tag not in allowed_tags:
|
|
print(f" > Line {idx+1} contains prohibited template tag '{tag}'")
|
|
err_count += 1
|
|
|
|
if tag == 'trans':
|
|
has_trans = True
|
|
|
|
if not has_trans:
|
|
print(" > file is missing 'trans' tags")
|
|
err_count += 1
|
|
|
|
return err_count
|
|
|
|
|
|
for filename in pathlib.Path(js_i18n_dir).rglob('*.js'):
|
|
|
|
print(f"Checking file 'translated/{os.path.basename(filename)}':")
|
|
|
|
with open(filename, 'r') as js_file:
|
|
data = js_file.readlines()
|
|
|
|
errors += check_invalid_tag(data)
|
|
errors += check_prohibited_tags(data)
|
|
|
|
for filename in pathlib.Path(js_dynamic_dir).rglob('*.js'):
|
|
|
|
print(f"Checking file 'dynamic/{os.path.basename(filename)}':")
|
|
|
|
# Check that the 'dynamic' files do not contains any translated strings
|
|
with open(filename, 'r') as js_file:
|
|
data = js_file.readlines()
|
|
|
|
pattern = r'{% trans '
|
|
|
|
err_count = 0
|
|
|
|
for idx, line in enumerate(data):
|
|
|
|
results = re.findall(pattern, line)
|
|
|
|
if len(results) > 0:
|
|
errors += 1
|
|
|
|
print(f" > prohibited {{% trans %}} tag found at line {idx + 1}")
|
|
|
|
if errors > 0:
|
|
print(f"Found {errors} incorrect template tags")
|
|
|
|
sys.exit(errors)
|