0001-fix-regexen-and-classname.patch 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. From ad5cbbfdfacdcd3b4663e91a638de022d6e20477 Mon Sep 17 00:00:00 2001
  2. From: eevelweezel <eevel.weezel@gmail.com>
  3. Date: Mon, 6 Nov 2023 00:17:20 -0600
  4. Subject: [PATCH] fix regexen and classname
  5. Upstream: https://github.com/web2py/web2py/commit/ad5cbbfdfacdcd3b4663e91a638de022d6e20477
  6. [yann.morin.1998@free.fr: backport from upstream]
  7. Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
  8. ---
  9. applications/admin/controllers/default.py | 64 +++++++++++------------
  10. gluon/compileapp.py | 4 +-
  11. gluon/contrib/appconfig.py | 2 +-
  12. 3 files changed, 35 insertions(+), 35 deletions(-)
  13. diff --git a/applications/admin/controllers/default.py b/applications/admin/controllers/default.py
  14. index 88697267..c53a3a76 100644
  15. --- a/applications/admin/controllers/default.py
  16. +++ b/applications/admin/controllers/default.py
  17. @@ -85,7 +85,7 @@ def safe_open(a, b):
  18. return tmp()
  19. a_for_check = os.path.abspath(os.path.normpath(a))
  20. -
  21. +
  22. web2py_apps_root = os.path.abspath(up(request.folder))
  23. web2py_deposit_root = os.path.join(up(web2py_apps_root), 'deposit')
  24. @@ -230,7 +230,7 @@ def site():
  25. class IS_VALID_APPNAME(object):
  26. def __call__(self, value):
  27. - if not re.compile('^\w+$').match(value):
  28. + if not re.compile(r'^\w+$').match(value):
  29. return (value, T('Invalid application name'))
  30. if not request.vars.overwrite and \
  31. os.path.exists(os.path.join(apath(r=request), value)):
  32. @@ -321,7 +321,7 @@ def site():
  33. session.flash = T(msg, dict(appname=form_update.vars.name))
  34. redirect(URL(r=request))
  35. - regex = re.compile('^\w+$')
  36. + regex = re.compile(r'^\w+$')
  37. if is_manager():
  38. apps = [a for a in os.listdir(apath(r=request)) if regex.match(a) and
  39. @@ -341,7 +341,7 @@ def site():
  40. def report_progress(app):
  41. import datetime
  42. progress_file = os.path.join(apath(app, r=request), 'progress.log')
  43. - regex = re.compile('\[(.*?)\][^\:]+\:\s+(\-?\d+)')
  44. + regex = re.compile(r'\[(.*?)\][^\:]+\:\s+(\-?\d+)')
  45. if not os.path.exists(progress_file):
  46. return []
  47. matches = regex.findall(open(progress_file, 'r').read())
  48. @@ -609,7 +609,7 @@ def test():
  49. if len(request.args) > 1:
  50. file = request.args[1]
  51. else:
  52. - file = '.*\.py'
  53. + file = r'.*\.py'
  54. controllers = listdir(
  55. apath('%s/controllers/' % app, r=request), file + '$')
  56. @@ -869,12 +869,12 @@ def todolist():
  57. app_path = apath('%(app)s' % {'app': app}, r=request)
  58. dirs = ['models', 'controllers', 'modules', 'private']
  59. - def listfiles(app, dir, regexp='.*\.py$'):
  60. + def listfiles(app, dir, regexp=r'.*\.py$'):
  61. files = sorted(listdir(apath('%(app)s/%(dir)s/' % {'app': app, 'dir': dir}, r=request), regexp))
  62. files = [x.replace(os.path.sep, '/') for x in files if not x.endswith('.bak')]
  63. return files
  64. - pattern = '#\s*(todo)+\s+(.*)'
  65. + pattern = r'#\s*(todo)+\s+(.*)'
  66. regex = re.compile(pattern, re.IGNORECASE)
  67. output = []
  68. @@ -1126,7 +1126,7 @@ def design():
  69. redirect(URL('site'))
  70. # Get all models
  71. - models = listdir(apath('%s/models/' % app, r=request), '.*\.py$')
  72. + models = listdir(apath('%s/models/' % app, r=request), r'.*\.py$')
  73. models = [x.replace('\\', '/') for x in models]
  74. defines = {}
  75. for m in models:
  76. @@ -1136,7 +1136,7 @@ def design():
  77. # Get all controllers
  78. controllers = sorted(
  79. - listdir(apath('%s/controllers/' % app, r=request), '.*\.py$'))
  80. + listdir(apath('%s/controllers/' % app, r=request), r'.*\.py$'))
  81. controllers = [x.replace('\\', '/') for x in controllers]
  82. functions = {}
  83. for c in controllers:
  84. @@ -1149,7 +1149,7 @@ def design():
  85. # Get all views
  86. views = sorted(
  87. - listdir(apath('%s/views/' % app, r=request), '[\w/\-]+(\.\w+)+$'))
  88. + listdir(apath('%s/views/' % app, r=request), r'[\w/\-]+(\.\w+)+$'))
  89. views = [x.replace('\\', '/') for x in views if not x.endswith('.bak')]
  90. extend = {}
  91. include = {}
  92. @@ -1164,17 +1164,17 @@ def design():
  93. include[c] = [i[1] for i in items]
  94. # Get all modules
  95. - modules = listdir(apath('%s/modules/' % app, r=request), '.*\.py$')
  96. + modules = listdir(apath('%s/modules/' % app, r=request), r'.*\.py$')
  97. modules = modules = [x.replace('\\', '/') for x in modules]
  98. modules.sort()
  99. # Get all private files
  100. - privates = listdir(apath('%s/private/' % app, r=request), '[^\.#].*')
  101. + privates = listdir(apath('%s/private/' % app, r=request), r'[^\.#].*')
  102. privates = [x.replace('\\', '/') for x in privates]
  103. privates.sort()
  104. # Get all static files
  105. - statics = listdir(apath('%s/static/' % app, r=request), '[^\.#].*',
  106. + statics = listdir(apath('%s/static/' % app, r=request), r'[^\.#].*',
  107. maxnum=MAXNFILES)
  108. statics = [x.replace(os.path.sep, '/') for x in statics]
  109. statics.sort()
  110. @@ -1267,7 +1267,7 @@ def plugin():
  111. redirect(URL('site'))
  112. # Get all models
  113. - models = listdir(apath('%s/models/' % app, r=request), '.*\.py$')
  114. + models = listdir(apath('%s/models/' % app, r=request), r'.*\.py$')
  115. models = [x.replace('\\', '/') for x in models]
  116. defines = {}
  117. for m in models:
  118. @@ -1277,7 +1277,7 @@ def plugin():
  119. # Get all controllers
  120. controllers = sorted(
  121. - listdir(apath('%s/controllers/' % app, r=request), '.*\.py$'))
  122. + listdir(apath('%s/controllers/' % app, r=request), r'.*\.py$'))
  123. controllers = [x.replace('\\', '/') for x in controllers]
  124. functions = {}
  125. for c in controllers:
  126. @@ -1290,7 +1290,7 @@ def plugin():
  127. # Get all views
  128. views = sorted(
  129. - listdir(apath('%s/views/' % app, r=request), '[\w/\-]+\.\w+$'))
  130. + listdir(apath('%s/views/' % app, r=request), r'[\w/\-]+\.\w+$'))
  131. views = [x.replace('\\', '/') for x in views]
  132. extend = {}
  133. include = {}
  134. @@ -1304,17 +1304,17 @@ def plugin():
  135. include[c] = [i[1] for i in items]
  136. # Get all modules
  137. - modules = listdir(apath('%s/modules/' % app, r=request), '.*\.py$')
  138. + modules = listdir(apath('%s/modules/' % app, r=request), r'.*\.py$')
  139. modules = modules = [x.replace('\\', '/') for x in modules]
  140. modules.sort()
  141. # Get all private files
  142. - privates = listdir(apath('%s/private/' % app, r=request), '[^\.#].*')
  143. + privates = listdir(apath('%s/private/' % app, r=request), r'[^\.#].*')
  144. privates = [x.replace('\\', '/') for x in privates]
  145. privates.sort()
  146. # Get all static files
  147. - statics = listdir(apath('%s/static/' % app, r=request), '[^\.#].*',
  148. + statics = listdir(apath('%s/static/' % app, r=request), r'[^\.#].*',
  149. maxnum=MAXNFILES)
  150. statics = [x.replace(os.path.sep, '/') for x in statics]
  151. statics.sort()
  152. @@ -1331,7 +1331,7 @@ def plugin():
  153. safe_write(crontab, '#crontab')
  154. def filter_plugins(items):
  155. - regex = re.compile('^plugin_' + plugin + '(/.*|\..*)?$')
  156. + regex = re.compile(r'^plugin_' + plugin + r'(/.*|\..*)?$')
  157. return [item for item in items if item and regex.match(item)]
  158. return dict(app=app,
  159. @@ -1363,14 +1363,14 @@ def create_file():
  160. request.vars.location += request.vars.dir + '/'
  161. app = get_app(name=request.vars.location.split('/')[0])
  162. path = apath(request.vars.location, r=request)
  163. - filename = re.sub('[^\w./-]+', '_', request.vars.filename)
  164. + filename = re.sub(r'[^\w./-]+', '_', request.vars.filename)
  165. if path[-7:] == '/rules/':
  166. # Handle plural rules files
  167. if len(filename) == 0:
  168. raise SyntaxError
  169. if not filename[-3:] == '.py':
  170. filename += '.py'
  171. - lang = re.match('^plural_rules-(.*)\.py$', filename).group(1)
  172. + lang = re.match(r'^plural_rules-(.*)\.py$', filename).group(1)
  173. langinfo = read_possible_languages(apath(app, r=request))[lang]
  174. text = dedent("""
  175. #!/usr/bin/env python
  176. @@ -1518,7 +1518,7 @@ def create_file():
  177. redirect(request.vars.sender + anchor)
  178. -def listfiles(app, dir, regexp='.*\.py$'):
  179. +def listfiles(app, dir, regexp=r'.*\.py$'):
  180. files = sorted(
  181. listdir(apath('%(app)s/%(dir)s/' % {'app': app, 'dir': dir}, r=request), regexp))
  182. files = [x.replace('\\', '/') for x in files if not x.endswith('.bak')]
  183. @@ -1533,12 +1533,12 @@ def editfile(path, file, vars={}, app=None):
  184. def files_menu():
  185. app = request.vars.app or 'welcome'
  186. - dirs = [{'name': 'models', 'reg': '.*\.py$'},
  187. - {'name': 'controllers', 'reg': '.*\.py$'},
  188. - {'name': 'views', 'reg': '[\w/\-]+(\.\w+)+$'},
  189. - {'name': 'modules', 'reg': '.*\.py$'},
  190. - {'name': 'static', 'reg': '[^\.#].*'},
  191. - {'name': 'private', 'reg': '.*\.py$'}]
  192. + dirs = [{'name': 'models', 'reg': r'.*\.py$'},
  193. + {'name': 'controllers', 'reg': r'.*\.py$'},
  194. + {'name': 'views', 'reg': r'[\w/\-]+(\.\w+)+$'},
  195. + {'name': 'modules', 'reg': r'.*\.py$'},
  196. + {'name': 'static', 'reg': r'[^\.#].*'},
  197. + {'name': 'private', 'reg': r'.*\.py$'}]
  198. result_files = []
  199. for dir in dirs:
  200. result_files.append(TAG[''](LI(dir['name'], _class="nav-header component", _onclick="collapse('" + dir['name'] + "_files');"),
  201. @@ -1559,7 +1559,7 @@ def upload_file():
  202. path = apath(request.vars.location, r=request)
  203. if request.vars.filename:
  204. - filename = re.sub('[^\w\./]+', '_', request.vars.filename)
  205. + filename = re.sub(r'[^\w\./]+', '_', request.vars.filename)
  206. else:
  207. filename = os.path.split(request.vars.file.filename)[-1]
  208. @@ -1628,7 +1628,7 @@ def errors():
  209. hash2error = dict()
  210. - for fn in listdir(errors_path, '^[a-fA-F0-9.\-]+$'):
  211. + for fn in listdir(errors_path, r'^[a-fA-F0-9.\-]+$'):
  212. fullpath = os.path.join(errors_path, fn)
  213. if not os.path.isfile(fullpath):
  214. continue
  215. @@ -1727,7 +1727,7 @@ def errors():
  216. func = lambda p: os.stat(apath('%s/errors/%s' %
  217. (app, p), r=request)).st_mtime
  218. tickets = sorted(
  219. - listdir(apath('%s/errors/' % app, r=request), '^\w.*'),
  220. + listdir(apath('%s/errors/' % app, r=request), r'^\w.*'),
  221. key=func,
  222. reverse=True)
  223. diff --git a/gluon/compileapp.py b/gluon/compileapp.py
  224. index 45fa8a0e..be0446e1 100644
  225. --- a/gluon/compileapp.py
  226. +++ b/gluon/compileapp.py
  227. @@ -14,7 +14,7 @@ Note:
  228. import copy
  229. import fnmatch
  230. -import imp
  231. +from importlib import import_module
  232. import marshal
  233. import os
  234. import py_compile
  235. @@ -345,7 +345,7 @@ def local_import_aux(name, reload_force=False, app="welcome"):
  236. """
  237. items = name.replace("/", ".")
  238. name = "applications.%s.modules.%s" % (app, items)
  239. - module = __import__(name)
  240. + module = import_module(name)
  241. for item in name.split(".")[1:]:
  242. module = getattr(module, item)
  243. if reload_force:
  244. diff --git a/gluon/contrib/appconfig.py b/gluon/contrib/appconfig.py
  245. index 1160e08a..2bf81841 100644
  246. --- a/gluon/contrib/appconfig.py
  247. +++ b/gluon/contrib/appconfig.py
  248. @@ -120,7 +120,7 @@ class AppConfigLoader(object):
  249. self.read_config()
  250. def read_config_ini(self):
  251. - config = configparser.SafeConfigParser()
  252. + config = configparser.RawConfigParser()
  253. config.read(self.file)
  254. settings = {}
  255. for section in config.sections():
  256. --
  257. 2.45.1