|
@@ -1,294 +0,0 @@
|
|
-From ad5cbbfdfacdcd3b4663e91a638de022d6e20477 Mon Sep 17 00:00:00 2001
|
|
|
|
-From: eevelweezel <eevel.weezel@gmail.com>
|
|
|
|
-Date: Mon, 6 Nov 2023 00:17:20 -0600
|
|
|
|
-Subject: [PATCH] fix regexen and classname
|
|
|
|
-
|
|
|
|
-Upstream: https://github.com/web2py/web2py/commit/ad5cbbfdfacdcd3b4663e91a638de022d6e20477
|
|
|
|
-[yann.morin.1998@free.fr: backport from upstream]
|
|
|
|
-Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
|
|
|
|
-
|
|
|
|
----
|
|
|
|
- applications/admin/controllers/default.py | 64 +++++++++++------------
|
|
|
|
- gluon/compileapp.py | 4 +-
|
|
|
|
- gluon/contrib/appconfig.py | 2 +-
|
|
|
|
- 3 files changed, 35 insertions(+), 35 deletions(-)
|
|
|
|
-
|
|
|
|
-diff --git a/applications/admin/controllers/default.py b/applications/admin/controllers/default.py
|
|
|
|
-index 88697267..c53a3a76 100644
|
|
|
|
---- a/applications/admin/controllers/default.py
|
|
|
|
-+++ b/applications/admin/controllers/default.py
|
|
|
|
-@@ -85,7 +85,7 @@ def safe_open(a, b):
|
|
|
|
- return tmp()
|
|
|
|
-
|
|
|
|
- a_for_check = os.path.abspath(os.path.normpath(a))
|
|
|
|
--
|
|
|
|
-+
|
|
|
|
- web2py_apps_root = os.path.abspath(up(request.folder))
|
|
|
|
- web2py_deposit_root = os.path.join(up(web2py_apps_root), 'deposit')
|
|
|
|
-
|
|
|
|
-@@ -230,7 +230,7 @@ def site():
|
|
|
|
- class IS_VALID_APPNAME(object):
|
|
|
|
-
|
|
|
|
- def __call__(self, value):
|
|
|
|
-- if not re.compile('^\w+$').match(value):
|
|
|
|
-+ if not re.compile(r'^\w+$').match(value):
|
|
|
|
- return (value, T('Invalid application name'))
|
|
|
|
- if not request.vars.overwrite and \
|
|
|
|
- os.path.exists(os.path.join(apath(r=request), value)):
|
|
|
|
-@@ -321,7 +321,7 @@ def site():
|
|
|
|
- session.flash = T(msg, dict(appname=form_update.vars.name))
|
|
|
|
- redirect(URL(r=request))
|
|
|
|
-
|
|
|
|
-- regex = re.compile('^\w+$')
|
|
|
|
-+ regex = re.compile(r'^\w+$')
|
|
|
|
-
|
|
|
|
- if is_manager():
|
|
|
|
- apps = [a for a in os.listdir(apath(r=request)) if regex.match(a) and
|
|
|
|
-@@ -341,7 +341,7 @@ def site():
|
|
|
|
- def report_progress(app):
|
|
|
|
- import datetime
|
|
|
|
- progress_file = os.path.join(apath(app, r=request), 'progress.log')
|
|
|
|
-- regex = re.compile('\[(.*?)\][^\:]+\:\s+(\-?\d+)')
|
|
|
|
-+ regex = re.compile(r'\[(.*?)\][^\:]+\:\s+(\-?\d+)')
|
|
|
|
- if not os.path.exists(progress_file):
|
|
|
|
- return []
|
|
|
|
- matches = regex.findall(open(progress_file, 'r').read())
|
|
|
|
-@@ -609,7 +609,7 @@ def test():
|
|
|
|
- if len(request.args) > 1:
|
|
|
|
- file = request.args[1]
|
|
|
|
- else:
|
|
|
|
-- file = '.*\.py'
|
|
|
|
-+ file = r'.*\.py'
|
|
|
|
-
|
|
|
|
- controllers = listdir(
|
|
|
|
- apath('%s/controllers/' % app, r=request), file + '$')
|
|
|
|
-@@ -869,12 +869,12 @@ def todolist():
|
|
|
|
- app_path = apath('%(app)s' % {'app': app}, r=request)
|
|
|
|
- dirs = ['models', 'controllers', 'modules', 'private']
|
|
|
|
-
|
|
|
|
-- def listfiles(app, dir, regexp='.*\.py$'):
|
|
|
|
-+ def listfiles(app, dir, regexp=r'.*\.py$'):
|
|
|
|
- files = sorted(listdir(apath('%(app)s/%(dir)s/' % {'app': app, 'dir': dir}, r=request), regexp))
|
|
|
|
- files = [x.replace(os.path.sep, '/') for x in files if not x.endswith('.bak')]
|
|
|
|
- return files
|
|
|
|
-
|
|
|
|
-- pattern = '#\s*(todo)+\s+(.*)'
|
|
|
|
-+ pattern = r'#\s*(todo)+\s+(.*)'
|
|
|
|
- regex = re.compile(pattern, re.IGNORECASE)
|
|
|
|
-
|
|
|
|
- output = []
|
|
|
|
-@@ -1126,7 +1126,7 @@ def design():
|
|
|
|
- redirect(URL('site'))
|
|
|
|
-
|
|
|
|
- # Get all models
|
|
|
|
-- models = listdir(apath('%s/models/' % app, r=request), '.*\.py$')
|
|
|
|
-+ models = listdir(apath('%s/models/' % app, r=request), r'.*\.py$')
|
|
|
|
- models = [x.replace('\\', '/') for x in models]
|
|
|
|
- defines = {}
|
|
|
|
- for m in models:
|
|
|
|
-@@ -1136,7 +1136,7 @@ def design():
|
|
|
|
-
|
|
|
|
- # Get all controllers
|
|
|
|
- controllers = sorted(
|
|
|
|
-- listdir(apath('%s/controllers/' % app, r=request), '.*\.py$'))
|
|
|
|
-+ listdir(apath('%s/controllers/' % app, r=request), r'.*\.py$'))
|
|
|
|
- controllers = [x.replace('\\', '/') for x in controllers]
|
|
|
|
- functions = {}
|
|
|
|
- for c in controllers:
|
|
|
|
-@@ -1149,7 +1149,7 @@ def design():
|
|
|
|
-
|
|
|
|
- # Get all views
|
|
|
|
- views = sorted(
|
|
|
|
-- listdir(apath('%s/views/' % app, r=request), '[\w/\-]+(\.\w+)+$'))
|
|
|
|
-+ listdir(apath('%s/views/' % app, r=request), r'[\w/\-]+(\.\w+)+$'))
|
|
|
|
- views = [x.replace('\\', '/') for x in views if not x.endswith('.bak')]
|
|
|
|
- extend = {}
|
|
|
|
- include = {}
|
|
|
|
-@@ -1164,17 +1164,17 @@ def design():
|
|
|
|
- include[c] = [i[1] for i in items]
|
|
|
|
-
|
|
|
|
- # Get all modules
|
|
|
|
-- modules = listdir(apath('%s/modules/' % app, r=request), '.*\.py$')
|
|
|
|
-+ modules = listdir(apath('%s/modules/' % app, r=request), r'.*\.py$')
|
|
|
|
- modules = modules = [x.replace('\\', '/') for x in modules]
|
|
|
|
- modules.sort()
|
|
|
|
-
|
|
|
|
- # Get all private files
|
|
|
|
-- privates = listdir(apath('%s/private/' % app, r=request), '[^\.#].*')
|
|
|
|
-+ privates = listdir(apath('%s/private/' % app, r=request), r'[^\.#].*')
|
|
|
|
- privates = [x.replace('\\', '/') for x in privates]
|
|
|
|
- privates.sort()
|
|
|
|
-
|
|
|
|
- # Get all static files
|
|
|
|
-- statics = listdir(apath('%s/static/' % app, r=request), '[^\.#].*',
|
|
|
|
-+ statics = listdir(apath('%s/static/' % app, r=request), r'[^\.#].*',
|
|
|
|
- maxnum=MAXNFILES)
|
|
|
|
- statics = [x.replace(os.path.sep, '/') for x in statics]
|
|
|
|
- statics.sort()
|
|
|
|
-@@ -1267,7 +1267,7 @@ def plugin():
|
|
|
|
- redirect(URL('site'))
|
|
|
|
-
|
|
|
|
- # Get all models
|
|
|
|
-- models = listdir(apath('%s/models/' % app, r=request), '.*\.py$')
|
|
|
|
-+ models = listdir(apath('%s/models/' % app, r=request), r'.*\.py$')
|
|
|
|
- models = [x.replace('\\', '/') for x in models]
|
|
|
|
- defines = {}
|
|
|
|
- for m in models:
|
|
|
|
-@@ -1277,7 +1277,7 @@ def plugin():
|
|
|
|
-
|
|
|
|
- # Get all controllers
|
|
|
|
- controllers = sorted(
|
|
|
|
-- listdir(apath('%s/controllers/' % app, r=request), '.*\.py$'))
|
|
|
|
-+ listdir(apath('%s/controllers/' % app, r=request), r'.*\.py$'))
|
|
|
|
- controllers = [x.replace('\\', '/') for x in controllers]
|
|
|
|
- functions = {}
|
|
|
|
- for c in controllers:
|
|
|
|
-@@ -1290,7 +1290,7 @@ def plugin():
|
|
|
|
-
|
|
|
|
- # Get all views
|
|
|
|
- views = sorted(
|
|
|
|
-- listdir(apath('%s/views/' % app, r=request), '[\w/\-]+\.\w+$'))
|
|
|
|
-+ listdir(apath('%s/views/' % app, r=request), r'[\w/\-]+\.\w+$'))
|
|
|
|
- views = [x.replace('\\', '/') for x in views]
|
|
|
|
- extend = {}
|
|
|
|
- include = {}
|
|
|
|
-@@ -1304,17 +1304,17 @@ def plugin():
|
|
|
|
- include[c] = [i[1] for i in items]
|
|
|
|
-
|
|
|
|
- # Get all modules
|
|
|
|
-- modules = listdir(apath('%s/modules/' % app, r=request), '.*\.py$')
|
|
|
|
-+ modules = listdir(apath('%s/modules/' % app, r=request), r'.*\.py$')
|
|
|
|
- modules = modules = [x.replace('\\', '/') for x in modules]
|
|
|
|
- modules.sort()
|
|
|
|
-
|
|
|
|
- # Get all private files
|
|
|
|
-- privates = listdir(apath('%s/private/' % app, r=request), '[^\.#].*')
|
|
|
|
-+ privates = listdir(apath('%s/private/' % app, r=request), r'[^\.#].*')
|
|
|
|
- privates = [x.replace('\\', '/') for x in privates]
|
|
|
|
- privates.sort()
|
|
|
|
-
|
|
|
|
- # Get all static files
|
|
|
|
-- statics = listdir(apath('%s/static/' % app, r=request), '[^\.#].*',
|
|
|
|
-+ statics = listdir(apath('%s/static/' % app, r=request), r'[^\.#].*',
|
|
|
|
- maxnum=MAXNFILES)
|
|
|
|
- statics = [x.replace(os.path.sep, '/') for x in statics]
|
|
|
|
- statics.sort()
|
|
|
|
-@@ -1331,7 +1331,7 @@ def plugin():
|
|
|
|
- safe_write(crontab, '#crontab')
|
|
|
|
-
|
|
|
|
- def filter_plugins(items):
|
|
|
|
-- regex = re.compile('^plugin_' + plugin + '(/.*|\..*)?$')
|
|
|
|
-+ regex = re.compile(r'^plugin_' + plugin + r'(/.*|\..*)?$')
|
|
|
|
- return [item for item in items if item and regex.match(item)]
|
|
|
|
-
|
|
|
|
- return dict(app=app,
|
|
|
|
-@@ -1363,14 +1363,14 @@ def create_file():
|
|
|
|
- request.vars.location += request.vars.dir + '/'
|
|
|
|
- app = get_app(name=request.vars.location.split('/')[0])
|
|
|
|
- path = apath(request.vars.location, r=request)
|
|
|
|
-- filename = re.sub('[^\w./-]+', '_', request.vars.filename)
|
|
|
|
-+ filename = re.sub(r'[^\w./-]+', '_', request.vars.filename)
|
|
|
|
- if path[-7:] == '/rules/':
|
|
|
|
- # Handle plural rules files
|
|
|
|
- if len(filename) == 0:
|
|
|
|
- raise SyntaxError
|
|
|
|
- if not filename[-3:] == '.py':
|
|
|
|
- filename += '.py'
|
|
|
|
-- lang = re.match('^plural_rules-(.*)\.py$', filename).group(1)
|
|
|
|
-+ lang = re.match(r'^plural_rules-(.*)\.py$', filename).group(1)
|
|
|
|
- langinfo = read_possible_languages(apath(app, r=request))[lang]
|
|
|
|
- text = dedent("""
|
|
|
|
- #!/usr/bin/env python
|
|
|
|
-@@ -1518,7 +1518,7 @@ def create_file():
|
|
|
|
- redirect(request.vars.sender + anchor)
|
|
|
|
-
|
|
|
|
-
|
|
|
|
--def listfiles(app, dir, regexp='.*\.py$'):
|
|
|
|
-+def listfiles(app, dir, regexp=r'.*\.py$'):
|
|
|
|
- files = sorted(
|
|
|
|
- listdir(apath('%(app)s/%(dir)s/' % {'app': app, 'dir': dir}, r=request), regexp))
|
|
|
|
- files = [x.replace('\\', '/') for x in files if not x.endswith('.bak')]
|
|
|
|
-@@ -1533,12 +1533,12 @@ def editfile(path, file, vars={}, app=None):
|
|
|
|
-
|
|
|
|
- def files_menu():
|
|
|
|
- app = request.vars.app or 'welcome'
|
|
|
|
-- dirs = [{'name': 'models', 'reg': '.*\.py$'},
|
|
|
|
-- {'name': 'controllers', 'reg': '.*\.py$'},
|
|
|
|
-- {'name': 'views', 'reg': '[\w/\-]+(\.\w+)+$'},
|
|
|
|
-- {'name': 'modules', 'reg': '.*\.py$'},
|
|
|
|
-- {'name': 'static', 'reg': '[^\.#].*'},
|
|
|
|
-- {'name': 'private', 'reg': '.*\.py$'}]
|
|
|
|
-+ dirs = [{'name': 'models', 'reg': r'.*\.py$'},
|
|
|
|
-+ {'name': 'controllers', 'reg': r'.*\.py$'},
|
|
|
|
-+ {'name': 'views', 'reg': r'[\w/\-]+(\.\w+)+$'},
|
|
|
|
-+ {'name': 'modules', 'reg': r'.*\.py$'},
|
|
|
|
-+ {'name': 'static', 'reg': r'[^\.#].*'},
|
|
|
|
-+ {'name': 'private', 'reg': r'.*\.py$'}]
|
|
|
|
- result_files = []
|
|
|
|
- for dir in dirs:
|
|
|
|
- result_files.append(TAG[''](LI(dir['name'], _class="nav-header component", _onclick="collapse('" + dir['name'] + "_files');"),
|
|
|
|
-@@ -1559,7 +1559,7 @@ def upload_file():
|
|
|
|
- path = apath(request.vars.location, r=request)
|
|
|
|
-
|
|
|
|
- if request.vars.filename:
|
|
|
|
-- filename = re.sub('[^\w\./]+', '_', request.vars.filename)
|
|
|
|
-+ filename = re.sub(r'[^\w\./]+', '_', request.vars.filename)
|
|
|
|
- else:
|
|
|
|
- filename = os.path.split(request.vars.file.filename)[-1]
|
|
|
|
-
|
|
|
|
-@@ -1628,7 +1628,7 @@ def errors():
|
|
|
|
-
|
|
|
|
- hash2error = dict()
|
|
|
|
-
|
|
|
|
-- for fn in listdir(errors_path, '^[a-fA-F0-9.\-]+$'):
|
|
|
|
-+ for fn in listdir(errors_path, r'^[a-fA-F0-9.\-]+$'):
|
|
|
|
- fullpath = os.path.join(errors_path, fn)
|
|
|
|
- if not os.path.isfile(fullpath):
|
|
|
|
- continue
|
|
|
|
-@@ -1727,7 +1727,7 @@ def errors():
|
|
|
|
- func = lambda p: os.stat(apath('%s/errors/%s' %
|
|
|
|
- (app, p), r=request)).st_mtime
|
|
|
|
- tickets = sorted(
|
|
|
|
-- listdir(apath('%s/errors/' % app, r=request), '^\w.*'),
|
|
|
|
-+ listdir(apath('%s/errors/' % app, r=request), r'^\w.*'),
|
|
|
|
- key=func,
|
|
|
|
- reverse=True)
|
|
|
|
-
|
|
|
|
-diff --git a/gluon/compileapp.py b/gluon/compileapp.py
|
|
|
|
-index 45fa8a0e..be0446e1 100644
|
|
|
|
---- a/gluon/compileapp.py
|
|
|
|
-+++ b/gluon/compileapp.py
|
|
|
|
-@@ -14,7 +14,7 @@ Note:
|
|
|
|
-
|
|
|
|
- import copy
|
|
|
|
- import fnmatch
|
|
|
|
--import imp
|
|
|
|
-+from importlib import import_module
|
|
|
|
- import marshal
|
|
|
|
- import os
|
|
|
|
- import py_compile
|
|
|
|
-@@ -345,7 +345,7 @@ def local_import_aux(name, reload_force=False, app="welcome"):
|
|
|
|
- """
|
|
|
|
- items = name.replace("/", ".")
|
|
|
|
- name = "applications.%s.modules.%s" % (app, items)
|
|
|
|
-- module = __import__(name)
|
|
|
|
-+ module = import_module(name)
|
|
|
|
- for item in name.split(".")[1:]:
|
|
|
|
- module = getattr(module, item)
|
|
|
|
- if reload_force:
|
|
|
|
-diff --git a/gluon/contrib/appconfig.py b/gluon/contrib/appconfig.py
|
|
|
|
-index 1160e08a..2bf81841 100644
|
|
|
|
---- a/gluon/contrib/appconfig.py
|
|
|
|
-+++ b/gluon/contrib/appconfig.py
|
|
|
|
-@@ -120,7 +120,7 @@ class AppConfigLoader(object):
|
|
|
|
- self.read_config()
|
|
|
|
-
|
|
|
|
- def read_config_ini(self):
|
|
|
|
-- config = configparser.SafeConfigParser()
|
|
|
|
-+ config = configparser.RawConfigParser()
|
|
|
|
- config.read(self.file)
|
|
|
|
- settings = {}
|
|
|
|
- for section in config.sections():
|
|
|
|
---
|
|
|
|
-2.45.1
|
|
|
|
-
|
|
|