]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
more relative imports
authorDavid Lord <davidism@gmail.com>
Fri, 10 Jan 2020 19:10:19 +0000 (11:10 -0800)
committerDavid Lord <davidism@gmail.com>
Fri, 10 Jan 2020 20:39:19 +0000 (12:39 -0800)
_identifier exports a compiled regex instead of a string to avoid some
tricky cleanup

scripts/generate_identifier_pattern.py
src/jinja2/_identifier.py
src/jinja2/asyncsupport.py
src/jinja2/compiler.py
src/jinja2/environment.py
src/jinja2/exceptions.py
src/jinja2/lexer.py
src/jinja2/utils.py

index 845a441cad9656771bc98021efe1c0733a15524c..5813199813c8af957167a7b12baf275b5f87b9b9 100755 (executable)
@@ -58,17 +58,20 @@ def build_pattern(ranges):
 
 
 def main():
-    """Build the regex pattern and write it to the file
-    :file:`jinja2/_identifier.py`."""
+    """Build the regex pattern and write it to
+    ``jinja2/_identifier.py``.
+    """
     pattern = build_pattern(collapse_ranges(get_characters()))
     filename = os.path.abspath(
         os.path.join(os.path.dirname(__file__), "..", "src", "jinja2", "_identifier.py")
     )
 
     with open(filename, "w", encoding="utf8") as f:
-        f.write("")
+        f.write("import re\n\n")
         f.write("# generated by scripts/generate_identifier_pattern.py\n")
-        f.write('pattern = "{}"  # noqa: B950\n'.format(pattern))
+        f.write("pattern = re.compile(\n")
+        f.write('    r"[\\w{}]+"  # noqa: B950\n'.format(pattern))
+        f.write(")\n")
 
 
 if __name__ == "__main__":
index 2490963d48d2bd9fc06fb2082e3af358d57c45c9..224d5449d138e75f4f3c25d70cb8f1ea54ccd047 100644 (file)
@@ -1,2 +1,6 @@
+import re
+
 # generated by scripts/generate_identifier_pattern.py
-pattern = "·̀-ͯ·҃-֑҇-ׇֽֿׁׂׅׄؐ-ًؚ-ٰٟۖ-ۜ۟-۪ۤۧۨ-ܑۭܰ-݊ަ-ް߫-߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛ࣔ-ࣣ࣡-ःऺ-़ा-ॏ॑-ॗॢॣঁ-ঃ়া-ৄেৈো-্ৗৢৣਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑੰੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣଁ-ଃ଼ା-ୄେୈୋ-୍ୖୗୢୣஂா-ூெ-ைொ-்ௗఀ-ఃా-ౄె-ైొ-్ౕౖౢౣಁ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢೣഁ-ഃാ-ൄെ-ൈൊ-്ൗൢൣංඃ්ා-ුූෘ-ෟෲෳัิ-ฺ็-๎ັິ-ູົຼ່-ໍ༹༘༙༵༷༾༿ཱ-྄྆྇ྍ-ྗྙ-ྼ࿆ါ-ှၖ-ၙၞ-ၠၢ-ၤၧ-ၭၱ-ၴႂ-ႍႏႚ-ႝ፝-፟ᜒ-᜔ᜲ-᜴ᝒᝓᝲᝳ឴-៓៝᠋-᠍ᢅᢆᢩᤠ-ᤫᤰ-᤻ᨗ-ᨛᩕ-ᩞ᩠-᩿᩼᪰-᪽ᬀ-ᬄ᬴-᭄᭫-᭳ᮀ-ᮂᮡ-ᮭ᯦-᯳ᰤ-᰷᳐-᳔᳒-᳨᳭ᳲ-᳴᳸᳹᷀-᷵᷻-᷿‿⁀⁔⃐-⃥⃜⃡-⃰℘℮⳯-⵿⳱ⷠ-〪ⷿ-゙゚〯꙯ꙴ-꙽ꚞꚟ꛰꛱ꠂ꠆ꠋꠣ-ꠧꢀꢁꢴ-ꣅ꣠-꣱ꤦ-꤭ꥇ-꥓ꦀ-ꦃ꦳-꧀ꧥꨩ-ꨶꩃꩌꩍꩻ-ꩽꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭ﬞ︀-️︠-︯︳︴﹍-﹏_𐇽𐋠𐍶-𐍺𐨁-𐨃𐨅𐨆𐨌-𐨏𐨸-𐨿𐨺𐫦𐫥𑀀-𑀂𑀸-𑁆𑁿-𑂂𑂰-𑂺𑄀-𑄂𑄧-𑅳𑄴𑆀-𑆂𑆳-𑇊𑇀-𑇌𑈬-𑈷𑈾𑋟-𑋪𑌀-𑌃𑌼𑌾-𑍄𑍇𑍈𑍋-𑍍𑍗𑍢𑍣𑍦-𑍬𑍰-𑍴𑐵-𑑆𑒰-𑓃𑖯-𑖵𑖸-𑗀𑗜𑗝𑘰-𑙀𑚫-𑚷𑜝-𑜫𑰯-𑰶𑰸-𑰿𑲒-𑲧𑲩-𑲶𖫰-𖫴𖬰-𖬶𖽑-𖽾𖾏-𖾒𛲝𛲞𝅥-𝅩𝅭-𝅲𝅻-𝆂𝆅-𝆋𝆪-𝆭𝉂-𝉄𝨀-𝨶𝨻-𝩬𝩵𝪄𝪛-𝪟𝪡-𝪯𞀀-𞀆𞀈-𞀘𞀛-𞀡𞀣𞀤𞀦-𞣐𞀪-𞣖𞥄-𞥊󠄀-󠇯"  # noqa: B950
+pattern = re.compile(
+    r"[\w·̀-ͯ·҃-֑҇-ׇֽֿׁׂׅׄؐ-ًؚ-ٰٟۖ-ۜ۟-۪ۤۧۨ-ܑۭܰ-݊ަ-ް߫-߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛ࣔ-ࣣ࣡-ःऺ-़ा-ॏ॑-ॗॢॣঁ-ঃ়া-ৄেৈো-্ৗৢৣਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑੰੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣଁ-ଃ଼ା-ୄେୈୋ-୍ୖୗୢୣஂா-ூெ-ைொ-்ௗఀ-ఃా-ౄె-ైొ-్ౕౖౢౣಁ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢೣഁ-ഃാ-ൄെ-ൈൊ-്ൗൢൣංඃ්ා-ුූෘ-ෟෲෳัิ-ฺ็-๎ັິ-ູົຼ່-ໍ༹༘༙༵༷༾༿ཱ-྄྆྇ྍ-ྗྙ-ྼ࿆ါ-ှၖ-ၙၞ-ၠၢ-ၤၧ-ၭၱ-ၴႂ-ႍႏႚ-ႝ፝-፟ᜒ-᜔ᜲ-᜴ᝒᝓᝲᝳ឴-៓៝᠋-᠍ᢅᢆᢩᤠ-ᤫᤰ-᤻ᨗ-ᨛᩕ-ᩞ᩠-᩿᩼᪰-᪽ᬀ-ᬄ᬴-᭄᭫-᭳ᮀ-ᮂᮡ-ᮭ᯦-᯳ᰤ-᰷᳐-᳔᳒-᳨᳭ᳲ-᳴᳸᳹᷀-᷵᷻-᷿‿⁀⁔⃐-⃥⃜⃡-⃰℘℮⳯-⵿⳱ⷠ-〪ⷿ-゙゚〯꙯ꙴ-꙽ꚞꚟ꛰꛱ꠂ꠆ꠋꠣ-ꠧꢀꢁꢴ-ꣅ꣠-꣱ꤦ-꤭ꥇ-꥓ꦀ-ꦃ꦳-꧀ꧥꨩ-ꨶꩃꩌꩍꩻ-ꩽꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭ﬞ︀-️︠-︯︳︴﹍-﹏_𐇽𐋠𐍶-𐍺𐨁-𐨃𐨅𐨆𐨌-𐨏𐨸-𐨿𐨺𐫦𐫥𑀀-𑀂𑀸-𑁆𑁿-𑂂𑂰-𑂺𑄀-𑄂𑄧-𑅳𑄴𑆀-𑆂𑆳-𑇊𑇀-𑇌𑈬-𑈷𑈾𑋟-𑋪𑌀-𑌃𑌼𑌾-𑍄𑍇𑍈𑍋-𑍍𑍗𑍢𑍣𑍦-𑍬𑍰-𑍴𑐵-𑑆𑒰-𑓃𑖯-𑖵𑖸-𑗀𑗜𑗝𑘰-𑙀𑚫-𑚷𑜝-𑜫𑰯-𑰶𑰸-𑰿𑲒-𑲧𑲩-𑲶𖫰-𖫴𖬰-𖬶𖽑-𖽾𖾏-𖾒𛲝𛲞𝅥-𝅩𝅭-𝅲𝅻-𝆂𝆅-𝆋𝆪-𝆭𝉂-𝉄𝨀-𝨶𝨻-𝩬𝩵𝪄𝪛-𝪟𝪡-𝪯𞀀-𞀆𞀈-𞀘𞀛-𞀡𞀣𞀤𞀦-𞣐𞀪-𞣖𞥄-𞥊󠄀-󠇯]+"  # noqa: B950
+)
index b2fd6e47a4097cdcf5dfc1063d5d3259212a5a45..7a0c2ea7c017bfc6107f5ce6660a3bb1555a9ed2 100644 (file)
@@ -142,7 +142,7 @@ async def make_module_async(self, vars=None, shared=False, locals=None):
 
 
 def patch_template():
-    from jinja2 import Template
+    from . import Template
 
     Template.generate = wrap_generate_func(Template.generate)
     Template.generate_async = update_wrapper(generate_async, Template.generate_async)
@@ -156,15 +156,15 @@ def patch_template():
 
 
 def patch_runtime():
-    from jinja2.runtime import BlockReference, Macro
+    from .runtime import BlockReference, Macro
 
     BlockReference.__call__ = wrap_block_reference_call(BlockReference.__call__)
     Macro._invoke = wrap_macro_invoke(Macro._invoke)
 
 
 def patch_filters():
-    from jinja2.filters import FILTERS
-    from jinja2.asyncfilters import ASYNC_FILTERS
+    from .filters import FILTERS
+    from .asyncfilters import ASYNC_FILTERS
 
     FILTERS.update(ASYNC_FILTERS)
 
index 068ad569a1027d8381cb7d93217dcf1a5f1da622..169687aa705b43130cb894dae7394d37e4bfc624 100644 (file)
@@ -720,7 +720,7 @@ class CodeGenerator(NodeVisitor):
         assert frame is None, "no root frame allowed"
         eval_ctx = EvalContext(self.environment, self.name)
 
-        from jinja2.runtime import __all__ as exported
+        from .runtime import __all__ as exported
 
         self.writeline("from __future__ import %s" % ", ".join(code_features))
         self.writeline("from jinja2.runtime import " + ", ".join(exported))
index 33a7b23a14d4cd1e7273e5c8a1f0f7f0dd30bf1e..a50a6a8e7a4055bc85ae52db3c251e5055f85ae9 100644 (file)
@@ -367,7 +367,7 @@ class Environment(object):
         self.is_async = self.enable_async and have_async_gen
         if self.is_async:
             # runs patch_all() to enable async support
-            import jinja2.asyncsupport  # noqa: F401
+            from . import asyncsupport  # noqa: F401
 
         _environment_sanity_check(self)
 
@@ -718,7 +718,7 @@ class Environment(object):
 
         .. versionadded:: 2.4
         """
-        from jinja2.loaders import ModuleLoader
+        from .loaders import ModuleLoader
 
         if log_function is None:
 
@@ -832,7 +832,7 @@ class Environment(object):
         """Exception handling helper.  This is used internally to either raise
         rewritten exceptions or return a rendered traceback for the template.
         """
-        from jinja2.debug import rewrite_traceback_stack
+        from .debug import rewrite_traceback_stack
 
         reraise(*rewrite_traceback_stack(source=source))
 
index 103837034ebca1b7d09a3c9113f02f6337ecb88e..8fa45c425bdd2d279b7db80efcc9cc2fd28098ae 100644 (file)
@@ -64,7 +64,7 @@ class TemplateNotFound(IOError, LookupError, TemplateError):
         IOError.__init__(self, name)
 
         if message is None:
-            from jinja2.runtime import Undefined
+            from .runtime import Undefined
 
             if isinstance(name, Undefined):
                 name._fail_with_undefined_error()
@@ -93,7 +93,7 @@ class TemplatesNotFound(TemplateNotFound):
 
     def __init__(self, names=(), message=None):
         if message is None:
-            from jinja2.runtime import Undefined
+            from .runtime import Undefined
 
             parts = []
 
index a9585ef8f71cc6cc098db23af7e46f8e8c59e124..7c53d5d41af56c041aca8dc51da403ac8fa5869f 100644 (file)
@@ -55,24 +55,15 @@ try:
     # check if this Python supports Unicode identifiers
     compile("föö", "<unknown>", "eval")
 except SyntaxError:
-    # no Unicode support, use ASCII identifiers
+    # Python 2, no Unicode support, use ASCII identifiers
     name_re = re.compile(r"[a-zA-Z_][a-zA-Z0-9_]*")
     check_ident = False
 else:
-    # Unicode support, build a pattern to match valid characters, and set flag
-    # to use str.isidentifier to validate during lexing
-    from jinja2 import _identifier
+    # Unicode support, import generated re pattern and set flag to use
+    # str.isidentifier to validate during lexing.
+    from ._identifier import pattern as name_re
 
-    name_re = re.compile(r"[\w{0}]+".format(_identifier.pattern))
     check_ident = True
-    # remove the pattern from memory after building the regex
-    import sys
-
-    del sys.modules["jinja2._identifier"]
-    import jinja2
-
-    del jinja2._identifier
-    del _identifier
 
 # internal the tokens and keep references to them
 TOKEN_ADD = intern("add")
index e42942833a201f415aa5c78be1d8277122705dd3..3d0051bebea489938a12a636b2df4be8f706efbd 100644 (file)
@@ -13,6 +13,8 @@ import os
 import re
 import warnings
 from collections import deque
+from random import choice
+from random import randrange
 from threading import Lock
 
 from markupsafe import escape
@@ -105,7 +107,7 @@ def is_undefined(obj):
                 return default
             return var
     """
-    from jinja2.runtime import Undefined
+    from .runtime import Undefined
 
     return isinstance(obj, Undefined)
 
@@ -122,8 +124,8 @@ def clear_caches():
     the time.  Normally you don't have to care about that but if you are
     measuring memory consumption you may want to clean the caches.
     """
-    from jinja2.environment import _spontaneous_environments
-    from jinja2.lexer import _lexer_cache
+    from .environment import _spontaneous_environments
+    from .lexer import _lexer_cache
 
     _spontaneous_environments.clear()
     _lexer_cache.clear()
@@ -260,8 +262,7 @@ def urlize(text, trim_url_limit=None, rel=None, target=None):
 
 def generate_lorem_ipsum(n=5, html=True, min=20, max=100):
     """Generate some lorem ipsum for the template."""
-    from jinja2.constants import LOREM_IPSUM_WORDS
-    from random import choice, randrange
+    from .constants import LOREM_IPSUM_WORDS
 
     words = LOREM_IPSUM_WORDS.split()
     result = []