python-liquid 2.3.5__tar.gz → 2.3.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. {python_liquid-2.3.5 → python_liquid-2.3.6}/PKG-INFO +1 -1
  2. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/__init__.py +1 -1
  3. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/loaders/file_system_loader.py +16 -15
  4. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/loaders/mixins.py +2 -2
  5. {python_liquid-2.3.5 → python_liquid-2.3.6}/.gitignore +0 -0
  6. {python_liquid-2.3.5 → python_liquid-2.3.6}/LICENSE +0 -0
  7. {python_liquid-2.3.5 → python_liquid-2.3.6}/README.md +0 -0
  8. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/analyze_tags.py +0 -0
  9. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/ast.py +0 -0
  10. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/__init__.py +0 -0
  11. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/content.py +0 -0
  12. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/drops/__init__.py +0 -0
  13. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/drops/drops.py +0 -0
  14. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/expressions/__init__.py +0 -0
  15. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/expressions/_tokenize.py +0 -0
  16. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/expressions/arguments.py +0 -0
  17. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/expressions/filtered.py +0 -0
  18. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/expressions/logical.py +0 -0
  19. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/expressions/loop.py +0 -0
  20. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/expressions/path.py +0 -0
  21. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/expressions/primitive.py +0 -0
  22. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/filters/__init__.py +0 -0
  23. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/filters/array.py +0 -0
  24. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/filters/extra.py +0 -0
  25. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/filters/math.py +0 -0
  26. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/filters/misc.py +0 -0
  27. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/filters/string.py +0 -0
  28. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/illegal.py +0 -0
  29. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/loaders/__init__.py +0 -0
  30. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/loaders/caching_file_system_loader.py +0 -0
  31. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/loaders/choice_loader.py +0 -0
  32. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/loaders/dict_loader.py +0 -0
  33. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/loaders/package_loader.py +0 -0
  34. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/output.py +0 -0
  35. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/tags/__init__.py +0 -0
  36. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/tags/assign_tag.py +0 -0
  37. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/tags/capture_tag.py +0 -0
  38. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/tags/case_tag.py +0 -0
  39. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/tags/comment_tag.py +0 -0
  40. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/tags/cycle_tag.py +0 -0
  41. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/tags/decrement_tag.py +0 -0
  42. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/tags/doc_tag.py +0 -0
  43. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/tags/echo_tag.py +0 -0
  44. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/tags/for_tag.py +0 -0
  45. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/tags/if_tag.py +0 -0
  46. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/tags/ifchanged_tag.py +0 -0
  47. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/tags/include_tag.py +0 -0
  48. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/tags/increment_tag.py +0 -0
  49. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/tags/inline_comment_tag.py +0 -0
  50. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/tags/liquid_tag.py +0 -0
  51. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/tags/render_tag.py +0 -0
  52. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/tags/tablerow_tag.py +0 -0
  53. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/builtin/tags/unless_tag.py +0 -0
  54. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/context.py +0 -0
  55. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/environment.py +0 -0
  56. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/exceptions.py +0 -0
  57. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/expression.py +0 -0
  58. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/extra/__init__.py +0 -0
  59. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/extra/filters/__init__.py +0 -0
  60. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/extra/filters/_json.py +0 -0
  61. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/extra/filters/array.py +0 -0
  62. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/extra/filters/babel.py +0 -0
  63. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/extra/filters/html.py +0 -0
  64. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/extra/filters/translate.py +0 -0
  65. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/extra/tags/__init__.py +0 -0
  66. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/extra/tags/_with.py +0 -0
  67. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/extra/tags/extends_tag.py +0 -0
  68. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/extra/tags/macro_tag.py +0 -0
  69. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/extra/tags/snippet_tag.py +0 -0
  70. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/extra/tags/translate_tag.py +0 -0
  71. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/filter.py +0 -0
  72. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/future/__init__.py +0 -0
  73. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/future/environment.py +0 -0
  74. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/future/filters/__init__.py +0 -0
  75. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/future/tags/__init__.py +0 -0
  76. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/lex.py +0 -0
  77. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/limits.py +0 -0
  78. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/loader.py +0 -0
  79. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/messages.py +0 -0
  80. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/mode.py +0 -0
  81. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/output.py +0 -0
  82. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/parser.py +0 -0
  83. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/py.typed +0 -0
  84. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/span.py +0 -0
  85. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/static_analysis.py +0 -0
  86. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/stream.py +0 -0
  87. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/stringify.py +0 -0
  88. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/tag.py +0 -0
  89. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/template.py +0 -0
  90. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/token.py +0 -0
  91. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/undefined.py +0 -0
  92. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/utils/__init__.py +0 -0
  93. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/utils/chain_map.py +0 -0
  94. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/utils/html.py +0 -0
  95. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/utils/lru_cache.py +0 -0
  96. {python_liquid-2.3.5 → python_liquid-2.3.6}/liquid/utils/text.py +0 -0
  97. {python_liquid-2.3.5 → python_liquid-2.3.6}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: python-liquid
3
- Version: 2.3.5
3
+ Version: 2.3.6
4
4
  Summary: A Python engine for the Liquid template language.
5
5
  Project-URL: Change Log, https://github.com/jg-rp/liquid/blob/main/CHANGES.md
6
6
  Project-URL: Documentation, https://jg-rp.github.io/liquid/
@@ -56,7 +56,7 @@ from .tag import Tag
56
56
 
57
57
  from . import future
58
58
 
59
- __version__ = "2.3.5"
59
+ __version__ = "2.3.6"
60
60
 
61
61
  __all__ = (
62
62
  "AwareBoundTemplate",
@@ -6,6 +6,7 @@ import asyncio
6
6
  import os
7
7
  from functools import partial
8
8
  from pathlib import Path
9
+ from pathlib import PurePath
9
10
  from typing import TYPE_CHECKING
10
11
  from typing import Iterable
11
12
  from typing import Optional
@@ -62,7 +63,9 @@ class FileSystemLoader(BaseLoader):
62
63
  _template_name_ exists. If none of the search paths contain _template_name_, a
63
64
  _TemplateNotFound_ exception is raised.
64
65
  """
65
- template_path = Path(template_name)
66
+ template_path = PurePath(template_name)
67
+ if template_path.anchor:
68
+ template_path = PurePath(*template_path.parts[1:])
66
69
 
67
70
  if not template_path.name:
68
71
  raise TemplateNotFoundError(template_name)
@@ -74,26 +77,24 @@ class FileSystemLoader(BaseLoader):
74
77
  raise TemplateNotFoundError(template_name)
75
78
 
76
79
  for base in self.search_path:
77
- source_path = base.joinpath(template_path)
80
+ base_resolved = base.resolve()
81
+ source_path = (base_resolved / template_path).resolve()
78
82
 
79
- try:
80
- if not source_path.exists() or not source_path.is_file():
81
- continue
82
- except OSError:
83
- # "File name too long", for example
83
+ if not source_path.is_relative_to(base_resolved):
84
84
  continue
85
85
 
86
86
  if self.reject_symlinks:
87
- try:
88
- resolved = source_path.resolve(strict=False)
89
- base_resolved = base.resolve(strict=False)
90
- except OSError:
91
- continue
87
+ current = base_resolved
88
+ for part in template_path.parts:
89
+ current /= part
90
+ if current.is_symlink():
91
+ continue
92
92
 
93
- if not resolved.is_relative_to(base_resolved):
94
- continue
93
+ if not source_path.is_file() or source_path.is_dir():
94
+ continue
95
95
 
96
- return source_path
96
+ # We don't want to expose a fully qualified path in error messages.
97
+ return base / template_path
97
98
 
98
99
  raise TemplateNotFoundError(template_name)
99
100
 
@@ -150,12 +150,12 @@ class CachingLoaderMixin(ABC, _CachingLoaderProtocol):
150
150
  cache_key = self.cache_key(name, context, kwargs)
151
151
  return await self._check_cache_async(
152
152
  env,
153
- name,
153
+ cache_key,
154
154
  globals,
155
155
  partial(
156
156
  super().load_async, # type: ignore
157
157
  env,
158
- cache_key,
158
+ name,
159
159
  globals=globals,
160
160
  context=context,
161
161
  **kwargs,
File without changes
File without changes
File without changes