python-liquid 2.3.6__py3-none-any.whl → 3.0.0__py3-none-any.whl
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.
- liquid/__about__.py +1 -0
- liquid/__init__.py +161 -187
- liquid/_base_tag.py +66 -0
- liquid/{utils/chain_map.py → _chain_map.py} +18 -19
- liquid/_context.py +465 -0
- liquid/_drop.py +108 -0
- liquid/_filter.py +174 -0
- liquid/_io.py +18 -0
- liquid/_lax_parser_mixin.py +100 -0
- liquid/_lexer.py +93 -0
- liquid/_lexer_extended.py +623 -0
- liquid/_lexer_legacy.py +536 -0
- liquid/_loader.py +84 -0
- liquid/{utils/lru_cache.py → _lru_cache.py} +28 -36
- liquid/_markup.py +253 -0
- liquid/_messages.py +292 -0
- liquid/_missing.py +3 -0
- liquid/_nothing.py +28 -0
- liquid/_parser.py +460 -0
- liquid/_parser_extended.py +293 -0
- liquid/_parser_legacy.py +819 -0
- liquid/_resource_limits.py +50 -0
- liquid/_slice.py +41 -0
- liquid/_static_analysis.py +503 -0
- liquid/_strftime.py +186 -0
- liquid/_template.py +536 -0
- liquid/drops/__init__.py +20 -0
- liquid/drops/forloop.py +78 -0
- liquid/drops/iterable.py +25 -0
- liquid/drops/range.py +76 -0
- liquid/drops/self_.py +45 -0
- liquid/drops/tablerowloop.py +142 -0
- liquid/drops/undefined.py +228 -0
- liquid/environment.py +717 -551
- liquid/exceptions.py +67 -214
- liquid/expressions.py +1184 -0
- liquid/filters/__init__.py +134 -0
- liquid/filters/abs.py +7 -0
- liquid/filters/append.py +5 -0
- liquid/filters/at_least.py +9 -0
- liquid/filters/at_most.py +9 -0
- liquid/filters/babel.py +560 -0
- liquid/filters/base64.py +26 -0
- liquid/filters/capitalize.py +5 -0
- liquid/filters/ceil.py +8 -0
- liquid/filters/compact.py +25 -0
- liquid/filters/concat.py +11 -0
- liquid/filters/date.py +27 -0
- liquid/filters/default.py +25 -0
- liquid/filters/divided_by.py +21 -0
- liquid/filters/downcase.py +5 -0
- liquid/filters/escape.py +56 -0
- liquid/filters/find.py +56 -0
- liquid/filters/first.py +19 -0
- liquid/filters/floor.py +8 -0
- liquid/filters/html.py +23 -0
- liquid/filters/index.py +12 -0
- liquid/filters/join.py +13 -0
- liquid/filters/json_.py +30 -0
- liquid/filters/last.py +17 -0
- liquid/filters/map.py +5 -0
- liquid/filters/minus.py +13 -0
- liquid/filters/modulo.py +18 -0
- liquid/filters/newline_to_br.py +16 -0
- liquid/filters/plus.py +13 -0
- liquid/filters/prepend.py +5 -0
- liquid/filters/reject.py +19 -0
- liquid/filters/remove.py +36 -0
- liquid/filters/replace.py +32 -0
- liquid/filters/reverse.py +5 -0
- liquid/filters/round.py +35 -0
- liquid/filters/size.py +25 -0
- liquid/filters/slice.py +39 -0
- liquid/filters/sort.py +148 -0
- liquid/filters/split.py +34 -0
- liquid/filters/squish.py +9 -0
- liquid/filters/strip.py +13 -0
- liquid/filters/strip_html.py +19 -0
- liquid/filters/strip_newlines.py +17 -0
- liquid/filters/sum.py +21 -0
- liquid/filters/times.py +13 -0
- liquid/filters/translate.py +380 -0
- liquid/filters/truncate.py +39 -0
- liquid/filters/uniq.py +11 -0
- liquid/filters/upcase.py +5 -0
- liquid/filters/url.py +18 -0
- liquid/filters/where.py +18 -0
- liquid/loaders/__init__.py +17 -0
- liquid/loaders/caching_file_system_loader.py +64 -0
- liquid/loaders/choice_loader.py +93 -0
- liquid/loaders/dict_loader.py +56 -0
- liquid/{builtin/loaders → loaders}/file_system_loader.py +51 -55
- liquid/{builtin/loaders → loaders}/mixins.py +39 -51
- liquid/loaders/package_loader.py +110 -0
- liquid/tags/__init__.py +61 -0
- liquid/tags/assign.py +68 -0
- liquid/tags/capture.py +83 -0
- liquid/tags/case.py +199 -0
- liquid/tags/comment.py +56 -0
- liquid/tags/cycle.py +131 -0
- liquid/tags/decrement.py +55 -0
- liquid/tags/doc.py +56 -0
- liquid/tags/echo.py +65 -0
- liquid/tags/else_.py +53 -0
- liquid/tags/error.py +51 -0
- liquid/tags/extends.py +448 -0
- liquid/tags/for_.py +421 -0
- liquid/tags/if_.py +156 -0
- liquid/tags/ifchanged.py +69 -0
- liquid/tags/include.py +223 -0
- liquid/tags/increment.py +55 -0
- liquid/tags/inline_comment.py +70 -0
- liquid/tags/liquid.py +56 -0
- liquid/tags/macro.py +281 -0
- liquid/tags/output.py +58 -0
- liquid/tags/raw.py +60 -0
- liquid/tags/render.py +245 -0
- liquid/tags/tablerow.py +254 -0
- liquid/tags/template_comment.py +56 -0
- liquid/tags/translate.py +316 -0
- liquid/tags/unless.py +121 -0
- liquid/tags/with_.py +83 -0
- liquid/tokens.py +370 -0
- {python_liquid-2.3.6.dist-info → python_liquid-3.0.0.dist-info}/METADATA +32 -39
- python_liquid-3.0.0.dist-info/RECORD +128 -0
- {python_liquid-2.3.6.dist-info → python_liquid-3.0.0.dist-info}/WHEEL +1 -1
- {python_liquid-2.3.6.dist-info → python_liquid-3.0.0.dist-info}/licenses/LICENSE +1 -1
- liquid/analyze_tags.py +0 -214
- liquid/ast.py +0 -252
- liquid/builtin/__init__.py +0 -203
- liquid/builtin/content.py +0 -41
- liquid/builtin/drops/__init__.py +0 -3
- liquid/builtin/drops/drops.py +0 -13
- liquid/builtin/expressions/__init__.py +0 -47
- liquid/builtin/expressions/_tokenize.py +0 -186
- liquid/builtin/expressions/arguments.py +0 -207
- liquid/builtin/expressions/filtered.py +0 -387
- liquid/builtin/expressions/logical.py +0 -672
- liquid/builtin/expressions/loop.py +0 -275
- liquid/builtin/expressions/path.py +0 -163
- liquid/builtin/expressions/primitive.py +0 -417
- liquid/builtin/filters/__init__.py +0 -0
- liquid/builtin/filters/array.py +0 -329
- liquid/builtin/filters/extra.py +0 -83
- liquid/builtin/filters/math.py +0 -129
- liquid/builtin/filters/misc.py +0 -137
- liquid/builtin/filters/string.py +0 -416
- liquid/builtin/illegal.py +0 -28
- liquid/builtin/loaders/__init__.py +0 -0
- liquid/builtin/loaders/caching_file_system_loader.py +0 -61
- liquid/builtin/loaders/choice_loader.py +0 -94
- liquid/builtin/loaders/dict_loader.py +0 -64
- liquid/builtin/loaders/package_loader.py +0 -132
- liquid/builtin/output.py +0 -74
- liquid/builtin/tags/__init__.py +0 -0
- liquid/builtin/tags/assign_tag.py +0 -75
- liquid/builtin/tags/capture_tag.py +0 -98
- liquid/builtin/tags/case_tag.py +0 -287
- liquid/builtin/tags/comment_tag.py +0 -77
- liquid/builtin/tags/cycle_tag.py +0 -132
- liquid/builtin/tags/decrement_tag.py +0 -59
- liquid/builtin/tags/doc_tag.py +0 -68
- liquid/builtin/tags/echo_tag.py +0 -45
- liquid/builtin/tags/for_tag.py +0 -337
- liquid/builtin/tags/if_tag.py +0 -209
- liquid/builtin/tags/ifchanged_tag.py +0 -94
- liquid/builtin/tags/include_tag.py +0 -251
- liquid/builtin/tags/increment_tag.py +0 -60
- liquid/builtin/tags/inline_comment_tag.py +0 -47
- liquid/builtin/tags/liquid_tag.py +0 -183
- liquid/builtin/tags/render_tag.py +0 -371
- liquid/builtin/tags/tablerow_tag.py +0 -320
- liquid/builtin/tags/unless_tag.py +0 -218
- liquid/context.py +0 -615
- liquid/expression.py +0 -41
- liquid/extra/__init__.py +0 -98
- liquid/extra/filters/__init__.py +0 -33
- liquid/extra/filters/_json.py +0 -33
- liquid/extra/filters/array.py +0 -60
- liquid/extra/filters/babel.py +0 -552
- liquid/extra/filters/html.py +0 -32
- liquid/extra/filters/translate.py +0 -448
- liquid/extra/tags/__init__.py +0 -17
- liquid/extra/tags/_with.py +0 -80
- liquid/extra/tags/extends_tag.py +0 -576
- liquid/extra/tags/macro_tag.py +0 -270
- liquid/extra/tags/snippet_tag.py +0 -107
- liquid/extra/tags/translate_tag.py +0 -388
- liquid/filter.py +0 -230
- liquid/future/__init__.py +0 -3
- liquid/future/environment.py +0 -30
- liquid/future/filters/__init__.py +0 -1
- liquid/future/tags/__init__.py +0 -1
- liquid/lex.py +0 -260
- liquid/limits.py +0 -66
- liquid/loader.py +0 -141
- liquid/messages.py +0 -357
- liquid/mode.py +0 -12
- liquid/output.py +0 -35
- liquid/parser.py +0 -119
- liquid/span.py +0 -35
- liquid/static_analysis.py +0 -443
- liquid/stream.py +0 -148
- liquid/stringify.py +0 -31
- liquid/tag.py +0 -47
- liquid/template.py +0 -658
- liquid/token.py +0 -145
- liquid/undefined.py +0 -218
- liquid/utils/__init__.py +0 -15
- liquid/utils/html.py +0 -57
- liquid/utils/text.py +0 -28
- python_liquid-2.3.6.dist-info/RECORD +0 -96
liquid/extra/__init__.py
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations # noqa: D104
|
|
2
|
-
|
|
3
|
-
from typing import TYPE_CHECKING
|
|
4
|
-
|
|
5
|
-
from .filters import JSON
|
|
6
|
-
from .filters import BaseTranslateFilter
|
|
7
|
-
from .filters import Currency
|
|
8
|
-
from .filters import DateTime
|
|
9
|
-
from .filters import GetText
|
|
10
|
-
from .filters import NGetText
|
|
11
|
-
from .filters import NPGetText
|
|
12
|
-
from .filters import Number
|
|
13
|
-
from .filters import PGetText
|
|
14
|
-
from .filters import Translate
|
|
15
|
-
from .filters import Unit
|
|
16
|
-
from .filters import index
|
|
17
|
-
from .filters import script_tag
|
|
18
|
-
from .filters import sort_numeric
|
|
19
|
-
from .filters import stylesheet_tag
|
|
20
|
-
from .tags import BlockTag
|
|
21
|
-
from .tags import CallTag
|
|
22
|
-
from .tags import ExtendsTag
|
|
23
|
-
from .tags import MacroTag
|
|
24
|
-
from .tags import SnippetTag
|
|
25
|
-
from .tags import TranslateTag
|
|
26
|
-
from .tags import WithTag
|
|
27
|
-
|
|
28
|
-
if TYPE_CHECKING:
|
|
29
|
-
from liquid import Environment
|
|
30
|
-
|
|
31
|
-
__all__ = (
|
|
32
|
-
"add_filters",
|
|
33
|
-
"add_tags_and_filters",
|
|
34
|
-
"add_tags",
|
|
35
|
-
"BaseTranslateFilter",
|
|
36
|
-
"BlockTag",
|
|
37
|
-
"CallTag",
|
|
38
|
-
"Currency",
|
|
39
|
-
"DateTime",
|
|
40
|
-
"ExtendsTag",
|
|
41
|
-
"GetText",
|
|
42
|
-
"index",
|
|
43
|
-
"JSON",
|
|
44
|
-
"MacroTag",
|
|
45
|
-
"NGetText",
|
|
46
|
-
"NPGetText",
|
|
47
|
-
"Number",
|
|
48
|
-
"PGetText",
|
|
49
|
-
"script_tag",
|
|
50
|
-
"sort_numeric",
|
|
51
|
-
"stylesheet_tag",
|
|
52
|
-
"SnippetTag",
|
|
53
|
-
"Translate",
|
|
54
|
-
"Unit",
|
|
55
|
-
"WithTag",
|
|
56
|
-
)
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
def add_tags(env: Environment) -> None:
|
|
60
|
-
"""Register all extra tags with the given environment."""
|
|
61
|
-
env.add_tag(ExtendsTag)
|
|
62
|
-
env.add_tag(BlockTag)
|
|
63
|
-
env.add_tag(MacroTag)
|
|
64
|
-
env.add_tag(CallTag)
|
|
65
|
-
env.add_tag(WithTag)
|
|
66
|
-
env.add_tag(TranslateTag)
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
def add_filters(env: Environment) -> None:
|
|
70
|
-
"""Register all extra filters with an environment with their default options."""
|
|
71
|
-
env.add_filter("index", index)
|
|
72
|
-
env.add_filter("json", JSON())
|
|
73
|
-
env.add_filter("script_tag", script_tag)
|
|
74
|
-
env.add_filter("sort_numeric", sort_numeric)
|
|
75
|
-
env.add_filter("stylesheet_tag", stylesheet_tag)
|
|
76
|
-
|
|
77
|
-
env.filters[GetText.name] = GetText(autoescape_message=env.autoescape)
|
|
78
|
-
env.filters[NGetText.name] = NGetText(autoescape_message=env.autoescape)
|
|
79
|
-
env.filters[NPGetText.name] = NPGetText(autoescape_message=env.autoescape)
|
|
80
|
-
env.filters[PGetText.name] = PGetText(autoescape_message=env.autoescape)
|
|
81
|
-
env.filters[Translate.name] = Translate(autoescape_message=env.autoescape)
|
|
82
|
-
env.filters["currency"] = Currency()
|
|
83
|
-
env.filters["money"] = Currency()
|
|
84
|
-
env.filters["money_with_currency"] = Currency(default_format="¤#,##0.00 ¤¤")
|
|
85
|
-
env.filters["money_without_currency"] = Currency(default_format="#,##0.00")
|
|
86
|
-
env.filters["money_without_trailing_zeros"] = Currency(
|
|
87
|
-
default_format="¤#,###",
|
|
88
|
-
currency_digits=False,
|
|
89
|
-
)
|
|
90
|
-
env.filters["datetime"] = DateTime()
|
|
91
|
-
env.filters["decimal"] = Number()
|
|
92
|
-
env.filters["unit"] = Unit()
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
def add_tags_and_filters(env: Environment) -> None: # pragma: no cover
|
|
96
|
-
"""Register all extra tags and filters with an environment."""
|
|
97
|
-
add_tags(env)
|
|
98
|
-
add_filters(env)
|
liquid/extra/filters/__init__.py
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
from ._json import JSON # noqa: D104
|
|
2
|
-
from .array import index
|
|
3
|
-
from .array import sort_numeric
|
|
4
|
-
from .babel import Currency
|
|
5
|
-
from .babel import DateTime
|
|
6
|
-
from .babel import Number
|
|
7
|
-
from .babel import Unit
|
|
8
|
-
from .html import script_tag
|
|
9
|
-
from .html import stylesheet_tag
|
|
10
|
-
from .translate import BaseTranslateFilter
|
|
11
|
-
from .translate import GetText
|
|
12
|
-
from .translate import NGetText
|
|
13
|
-
from .translate import NPGetText
|
|
14
|
-
from .translate import PGetText
|
|
15
|
-
from .translate import Translate
|
|
16
|
-
|
|
17
|
-
__all__ = (
|
|
18
|
-
"index",
|
|
19
|
-
"JSON",
|
|
20
|
-
"script_tag",
|
|
21
|
-
"sort_numeric",
|
|
22
|
-
"stylesheet_tag",
|
|
23
|
-
"Currency",
|
|
24
|
-
"DateTime",
|
|
25
|
-
"Number",
|
|
26
|
-
"Unit",
|
|
27
|
-
"BaseTranslateFilter",
|
|
28
|
-
"GetText",
|
|
29
|
-
"NGetText",
|
|
30
|
-
"NPGetText",
|
|
31
|
-
"PGetText",
|
|
32
|
-
"Translate",
|
|
33
|
-
)
|
liquid/extra/filters/_json.py
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"""A JSON filter."""
|
|
2
|
-
|
|
3
|
-
import json
|
|
4
|
-
from typing import Any
|
|
5
|
-
from typing import Callable
|
|
6
|
-
from typing import Optional
|
|
7
|
-
|
|
8
|
-
from liquid.filter import int_arg
|
|
9
|
-
from liquid.filter import liquid_filter
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class JSON:
|
|
13
|
-
"""Serialize an object to a JSON formatted string.
|
|
14
|
-
|
|
15
|
-
Args:
|
|
16
|
-
default: A function passed to `json.dumps`. This function is called
|
|
17
|
-
in the event that the JSONEncoder does not know how to serialize an
|
|
18
|
-
object. Defaults to `None`.
|
|
19
|
-
"""
|
|
20
|
-
|
|
21
|
-
name = "json"
|
|
22
|
-
|
|
23
|
-
def __init__(self, default: Optional[Callable[[Any], Any]] = None):
|
|
24
|
-
self.default = default
|
|
25
|
-
|
|
26
|
-
@liquid_filter
|
|
27
|
-
def __call__(
|
|
28
|
-
self,
|
|
29
|
-
obj: object,
|
|
30
|
-
indent: Optional[object] = None,
|
|
31
|
-
) -> str:
|
|
32
|
-
indent = int_arg(indent) if indent else None
|
|
33
|
-
return json.dumps(obj, default=self.default, indent=indent)
|
liquid/extra/filters/array.py
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
"""Extra array filters."""
|
|
2
|
-
|
|
3
|
-
import math
|
|
4
|
-
import re
|
|
5
|
-
from decimal import Decimal
|
|
6
|
-
from operator import getitem
|
|
7
|
-
from typing import Any
|
|
8
|
-
from typing import Sequence
|
|
9
|
-
from typing import Union
|
|
10
|
-
|
|
11
|
-
from liquid.filter import array_filter
|
|
12
|
-
from liquid.filter import sequence_filter
|
|
13
|
-
from liquid.limits import to_int
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
@array_filter
|
|
17
|
-
def index(left: Sequence[object], obj: object) -> object:
|
|
18
|
-
"""Return the zero-based index of an array item.
|
|
19
|
-
|
|
20
|
-
`None` is returned if `obj` is not in `left`.
|
|
21
|
-
"""
|
|
22
|
-
try:
|
|
23
|
-
return left.index(obj)
|
|
24
|
-
except ValueError:
|
|
25
|
-
return None
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
RE_NUMERIC = re.compile(r"-?\d+")
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
@sequence_filter
|
|
32
|
-
def sort_numeric(left: Sequence[object], key: object = None) -> list[object]:
|
|
33
|
-
"""Return a copy of `left` sorted by numeric values found in `left`'s items."""
|
|
34
|
-
if key:
|
|
35
|
-
_key = str(key)
|
|
36
|
-
return sorted(left, key=lambda item: _ints(_getitem(item, _key)))
|
|
37
|
-
return sorted(left, key=_ints)
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
def _getitem(sequence: Any, key: object, default: object = None) -> Any:
|
|
41
|
-
"""Item getter for the `sort_numeric` filter."""
|
|
42
|
-
try:
|
|
43
|
-
return getitem(sequence, key)
|
|
44
|
-
except (KeyError, IndexError, TypeError):
|
|
45
|
-
return default
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
def _ints(obj: object) -> tuple[Union[int, float, Decimal], ...]:
|
|
49
|
-
"""Key function for the `sort_numeric` filter."""
|
|
50
|
-
if isinstance(obj, bool):
|
|
51
|
-
# isinstance(False, int) == True
|
|
52
|
-
return (math.inf,)
|
|
53
|
-
if isinstance(obj, (int, float, Decimal)):
|
|
54
|
-
return (obj,)
|
|
55
|
-
|
|
56
|
-
ints = tuple(to_int(n) for n in RE_NUMERIC.findall(str(obj)))
|
|
57
|
-
|
|
58
|
-
if not ints:
|
|
59
|
-
return (math.inf,)
|
|
60
|
-
return ints
|