From 39b965be7b5797332470813f2e62aa7fdcaa5b37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leonel=20C=C3=A2mara?= Date: Mon, 1 Apr 2019 15:24:46 +0100 Subject: [PATCH] Revert "don't use a regex to find exposed functions" --- gluon/compileapp.py | 6 +++--- gluon/myregex.py | 8 +++++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/gluon/compileapp.py b/gluon/compileapp.py index 6a4f2f72..e7c2b7e8 100644 --- a/gluon/compileapp.py +++ b/gluon/compileapp.py @@ -23,6 +23,7 @@ from gluon.storage import Storage, List from gluon.template import parse_template from gluon.restricted import restricted, compile2 from gluon.fileutils import mktree, listdir, read_file, write_file +from gluon.myregex import regex_expose, regex_longcomments from gluon.languages import TranslatorFactory from gluon.dal import DAL, Field from gluon.validators import Validator @@ -44,7 +45,6 @@ from functools import reduce from gluon import rewrite from gluon.custom_import import custom_import_install import py_compile -import ast logger = logging.getLogger("web2py") @@ -517,8 +517,8 @@ def compile_models(folder): def find_exposed_functions(data): - parsed = ast.parse(data) - return [n.name for n in ast.walk(parsed) if type(n) == ast.FunctionDef and len(n.args.args) == 0 and n.args.kwarg is None] + data = regex_longcomments.sub('', data) + return regex_expose.findall(data) def compile_controllers(folder): diff --git a/gluon/myregex.py b/gluon/myregex.py index 0a015a39..5c3a7c99 100644 --- a/gluon/myregex.py +++ b/gluon/myregex.py @@ -18,7 +18,13 @@ regex_tables = re.compile( """^[\w]+\.define_table\(\s*[\'\"](?P\w+)[\'\"]""", flags=re.M) -# patterns to find includes and extends in views +# pattern to find exposed functions in controller + +regex_expose = re.compile( + '^def\s+(?P_?[a-zA-Z0-9]\w*)\( *\)\s*:', + flags=re.M) + +regex_longcomments = re.compile('(""".*?"""|'+"'''.*?''')", re.DOTALL) regex_include = re.compile( '(?P\{\{\s*include\s+[\'"](?P[^\'"]*)[\'"]\s*\}\})')