diff options
| author | Devtools Arcadia <[email protected]> | 2022-02-07 18:08:42 +0300 |
|---|---|---|
| committer | Devtools Arcadia <[email protected]> | 2022-02-07 18:08:42 +0300 |
| commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
| tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /contrib/python/Jinja2/py3/patches | |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'contrib/python/Jinja2/py3/patches')
3 files changed, 174 insertions, 0 deletions
diff --git a/contrib/python/Jinja2/py3/patches/01-arcadia.patch b/contrib/python/Jinja2/py3/patches/01-arcadia.patch new file mode 100644 index 00000000000..b78b648b373 --- /dev/null +++ b/contrib/python/Jinja2/py3/patches/01-arcadia.patch @@ -0,0 +1,30 @@ +--- contrib/python/Jinja2/py3/jinja2/__init__.py (index) ++++ contrib/python/Jinja2/py3/jinja2/__init__.py (working tree) +@@ -25,6 +25,7 @@ from .loaders import FunctionLoader + from .loaders import ModuleLoader as ModuleLoader + from .loaders import PackageLoader as PackageLoader + from .loaders import PrefixLoader as PrefixLoader ++from .loaders import ResourceLoader as ResourceLoader + from .runtime import ChainableUndefined as ChainableUndefined + from .runtime import DebugUndefined as DebugUndefined + from .runtime import make_logging_undefined as make_logging_undefined +--- contrib/python/Jinja2/py3/jinja2/loaders.py (index) ++++ contrib/python/Jinja2/py3/jinja2/loaders.py (working tree) +@@ -650,3 +650,17 @@ class ModuleLoader(BaseLoader): + return environment.template_class.from_module_dict( + environment, mod.__dict__, globals + ) ++ ++ ++class ResourceLoader(BaseLoader): ++ def __init__(self, prefix, module_loader): ++ self.prefix = prefix ++ self.module_loader = module_loader ++ ++ def get_source(self, environment, template): ++ if self.module_loader is None: ++ raise TemplateNotFound(template) ++ try: ++ return self.module_loader.get_data(os.path.join(self.prefix, template)).decode('utf-8'), None, None ++ except IOError: ++ raise TemplateNotFound(template) diff --git a/contrib/python/Jinja2/py3/patches/02-fix-tests.patch b/contrib/python/Jinja2/py3/patches/02-fix-tests.patch new file mode 100644 index 00000000000..d23c1d80963 --- /dev/null +++ b/contrib/python/Jinja2/py3/patches/02-fix-tests.patch @@ -0,0 +1,69 @@ +--- contrib/python/Jinja2/py3/tests/conftest.py (index) ++++ contrib/python/Jinja2/py3/tests/conftest.py (working tree) +@@ -27,7 +27,8 @@ def package_loader(): + @pytest.fixture + def filesystem_loader(): + """returns FileSystemLoader initialized to res/templates directory""" +- here = Path(__file__).parent.resolve() ++ import yatest.common ++ here = Path(yatest.common.test_source_path()) + return loaders.FileSystemLoader(here / "res" / "templates") + + +--- contrib/python/Jinja2/py3/tests/test_loader.py (index) ++++ contrib/python/Jinja2/py3/tests/test_loader.py (working tree) +@@ -18,6 +18,8 @@ from jinja2._compat import PYPY + from jinja2.exceptions import TemplateNotFound + from jinja2.loaders import split_template_path + ++import yatest.common as yc ++ + + class TestLoaders: + def test_dict_loader(self, dict_loader): +@@ -118,7 +120,7 @@ class TestLoaders(object): + + + class TestFileSystemLoader: +- searchpath = (Path(__file__) / ".." / "res" / "templates").resolve() ++ searchpath = (Path(yc.test_source_path()) / "res" / "templates").resolve() + + @staticmethod + def _test_common(env): +@@ -146,6 +148,7 @@ class TestFileSystemLoader(object): + env = Environment(loader=filesystem_loader) + self._test_common(env) + ++ @pytest.mark.skip("Arcadia read only") + def test_caches_template_based_on_mtime(self): + filesystem_loader = loaders.FileSystemLoader(self.searchpath) + +@@ -316,7 +319,7 @@ def test_package_dir_list(package_dir_loader): + @pytest.fixture() + def package_file_loader(monkeypatch): + monkeypatch.syspath_prepend(Path(__file__).parent / "res") +- return PackageLoader("__init__") ++ return PackageLoader("res") + + + @pytest.mark.parametrize( +@@ -337,7 +340,7 @@ def test_package_dir_list(package_dir_loader): + + @pytest.fixture() + def package_zip_loader(monkeypatch): +- package_zip = (Path(__file__) / ".." / "res" / "package.zip").resolve() ++ package_zip = (Path(yc.test_source_path()) / "res" / "package.zip").resolve() + monkeypatch.syspath_prepend(package_zip) + return PackageLoader("t_pack") + +--- contrib/python/Jinja2/py3/tests/test_utils.py (index) ++++ contrib/python/Jinja2/py3/tests/test_utils.py (working tree) +@@ -110,7 +110,7 @@ class TestHelpers(object): + + assert object_type_repr(42) == "int object" + assert object_type_repr([]) == "list object" +- assert object_type_repr(X()) == "test_utils.X object" ++ assert object_type_repr(X()) == "__tests__.test_utils.X object" + assert object_type_repr(None) == "None" + assert object_type_repr(Ellipsis) == "Ellipsis" + diff --git a/contrib/python/Jinja2/py3/patches/03-fix-PackageLoader.patch b/contrib/python/Jinja2/py3/patches/03-fix-PackageLoader.patch new file mode 100644 index 00000000000..898e0c11893 --- /dev/null +++ b/contrib/python/Jinja2/py3/patches/03-fix-PackageLoader.patch @@ -0,0 +1,75 @@ +--- contrib/python/Jinja2/py3/jinja2/loaders.py (index) ++++ contrib/python/Jinja2/py3/jinja2/loaders.py (working tree) +@@ -4,6 +4,7 @@ sources. + import importlib.util + import os + import sys ++import pkgutil + import typing as t + import weakref + import zipimport +@@ -20,6 +21,8 @@ if t.TYPE_CHECKING: + from .environment import Environment + from .environment import Template + ++import __res as arcadia_res ++ + + def split_template_path(template: str) -> t.List[str]: + """Split a path into segments and perform a sanity check. If it detects +@@ -284,19 +287,22 @@ class PackageLoader(BaseLoader): + + # Make sure the package exists. This also makes namespace + # packages work, otherwise get_loader returns None. +- import_module(package_name) ++ package = import_module(package_name) + spec = importlib.util.find_spec(package_name) + assert spec is not None, "An import spec was not found for the package." + loader = spec.loader + assert loader is not None, "A loader was not found for the package." + self._loader = loader + self._archive = None ++ self._package = package + template_root = None + + if isinstance(loader, zipimport.zipimporter): + self._archive = loader.archive + pkgdir = next(iter(spec.submodule_search_locations)) # type: ignore + template_root = os.path.join(pkgdir, package_path) ++ elif hasattr(loader, "arcadia_source_finder"): ++ template_root = os.path.dirname(package.__file__) + else: + roots: t.List[str] = [] + +@@ -329,7 +335,16 @@ class PackageLoader(BaseLoader): + p = os.path.join(self._template_root, *split_template_path(template)) + up_to_date: t.Optional[t.Callable[[], bool]] + +- if self._archive is None: ++ if self._archive is None and hasattr(self, "_package"): ++ try: ++ source = pkgutil.get_data(self.package_name, os.path.join(self.package_path, *split_template_path(template))) ++ except OSError: ++ raise TemplateNotFound(template) ++ ++ def up_to_date() -> bool: ++ return True ++ ++ elif self._archive is None: + # Package is a directory. + if not os.path.isfile(p): + raise TemplateNotFound(template) +@@ -359,7 +374,12 @@ class PackageLoader(BaseLoader): + def list_templates(self) -> t.List[str]: + results: t.List[str] = [] + +- if self._archive is None: ++ if self._archive is None and hasattr(self, "_package"): ++ prefix = os.path.join(self._template_root, self.package_path).encode() + b"/" ++ for name in arcadia_res.resfs_files(prefix): ++ results.append(name.removeprefix(prefix).decode()) ++ ++ elif self._archive is None: + # Package is a directory. + offset = len(self._template_root) + |
