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.
Files changed (212) hide show
  1. liquid/__about__.py +1 -0
  2. liquid/__init__.py +161 -187
  3. liquid/_base_tag.py +66 -0
  4. liquid/{utils/chain_map.py → _chain_map.py} +18 -19
  5. liquid/_context.py +465 -0
  6. liquid/_drop.py +108 -0
  7. liquid/_filter.py +174 -0
  8. liquid/_io.py +18 -0
  9. liquid/_lax_parser_mixin.py +100 -0
  10. liquid/_lexer.py +93 -0
  11. liquid/_lexer_extended.py +623 -0
  12. liquid/_lexer_legacy.py +536 -0
  13. liquid/_loader.py +84 -0
  14. liquid/{utils/lru_cache.py → _lru_cache.py} +28 -36
  15. liquid/_markup.py +253 -0
  16. liquid/_messages.py +292 -0
  17. liquid/_missing.py +3 -0
  18. liquid/_nothing.py +28 -0
  19. liquid/_parser.py +460 -0
  20. liquid/_parser_extended.py +293 -0
  21. liquid/_parser_legacy.py +819 -0
  22. liquid/_resource_limits.py +50 -0
  23. liquid/_slice.py +41 -0
  24. liquid/_static_analysis.py +503 -0
  25. liquid/_strftime.py +186 -0
  26. liquid/_template.py +536 -0
  27. liquid/drops/__init__.py +20 -0
  28. liquid/drops/forloop.py +78 -0
  29. liquid/drops/iterable.py +25 -0
  30. liquid/drops/range.py +76 -0
  31. liquid/drops/self_.py +45 -0
  32. liquid/drops/tablerowloop.py +142 -0
  33. liquid/drops/undefined.py +228 -0
  34. liquid/environment.py +717 -551
  35. liquid/exceptions.py +67 -214
  36. liquid/expressions.py +1184 -0
  37. liquid/filters/__init__.py +134 -0
  38. liquid/filters/abs.py +7 -0
  39. liquid/filters/append.py +5 -0
  40. liquid/filters/at_least.py +9 -0
  41. liquid/filters/at_most.py +9 -0
  42. liquid/filters/babel.py +560 -0
  43. liquid/filters/base64.py +26 -0
  44. liquid/filters/capitalize.py +5 -0
  45. liquid/filters/ceil.py +8 -0
  46. liquid/filters/compact.py +25 -0
  47. liquid/filters/concat.py +11 -0
  48. liquid/filters/date.py +27 -0
  49. liquid/filters/default.py +25 -0
  50. liquid/filters/divided_by.py +21 -0
  51. liquid/filters/downcase.py +5 -0
  52. liquid/filters/escape.py +56 -0
  53. liquid/filters/find.py +56 -0
  54. liquid/filters/first.py +19 -0
  55. liquid/filters/floor.py +8 -0
  56. liquid/filters/html.py +23 -0
  57. liquid/filters/index.py +12 -0
  58. liquid/filters/join.py +13 -0
  59. liquid/filters/json_.py +30 -0
  60. liquid/filters/last.py +17 -0
  61. liquid/filters/map.py +5 -0
  62. liquid/filters/minus.py +13 -0
  63. liquid/filters/modulo.py +18 -0
  64. liquid/filters/newline_to_br.py +16 -0
  65. liquid/filters/plus.py +13 -0
  66. liquid/filters/prepend.py +5 -0
  67. liquid/filters/reject.py +19 -0
  68. liquid/filters/remove.py +36 -0
  69. liquid/filters/replace.py +32 -0
  70. liquid/filters/reverse.py +5 -0
  71. liquid/filters/round.py +35 -0
  72. liquid/filters/size.py +25 -0
  73. liquid/filters/slice.py +39 -0
  74. liquid/filters/sort.py +148 -0
  75. liquid/filters/split.py +34 -0
  76. liquid/filters/squish.py +9 -0
  77. liquid/filters/strip.py +13 -0
  78. liquid/filters/strip_html.py +19 -0
  79. liquid/filters/strip_newlines.py +17 -0
  80. liquid/filters/sum.py +21 -0
  81. liquid/filters/times.py +13 -0
  82. liquid/filters/translate.py +380 -0
  83. liquid/filters/truncate.py +39 -0
  84. liquid/filters/uniq.py +11 -0
  85. liquid/filters/upcase.py +5 -0
  86. liquid/filters/url.py +18 -0
  87. liquid/filters/where.py +18 -0
  88. liquid/loaders/__init__.py +17 -0
  89. liquid/loaders/caching_file_system_loader.py +64 -0
  90. liquid/loaders/choice_loader.py +93 -0
  91. liquid/loaders/dict_loader.py +56 -0
  92. liquid/{builtin/loaders → loaders}/file_system_loader.py +51 -55
  93. liquid/{builtin/loaders → loaders}/mixins.py +39 -51
  94. liquid/loaders/package_loader.py +110 -0
  95. liquid/tags/__init__.py +61 -0
  96. liquid/tags/assign.py +68 -0
  97. liquid/tags/capture.py +83 -0
  98. liquid/tags/case.py +199 -0
  99. liquid/tags/comment.py +56 -0
  100. liquid/tags/cycle.py +131 -0
  101. liquid/tags/decrement.py +55 -0
  102. liquid/tags/doc.py +56 -0
  103. liquid/tags/echo.py +65 -0
  104. liquid/tags/else_.py +53 -0
  105. liquid/tags/error.py +51 -0
  106. liquid/tags/extends.py +448 -0
  107. liquid/tags/for_.py +421 -0
  108. liquid/tags/if_.py +156 -0
  109. liquid/tags/ifchanged.py +69 -0
  110. liquid/tags/include.py +223 -0
  111. liquid/tags/increment.py +55 -0
  112. liquid/tags/inline_comment.py +70 -0
  113. liquid/tags/liquid.py +56 -0
  114. liquid/tags/macro.py +281 -0
  115. liquid/tags/output.py +58 -0
  116. liquid/tags/raw.py +60 -0
  117. liquid/tags/render.py +245 -0
  118. liquid/tags/tablerow.py +254 -0
  119. liquid/tags/template_comment.py +56 -0
  120. liquid/tags/translate.py +316 -0
  121. liquid/tags/unless.py +121 -0
  122. liquid/tags/with_.py +83 -0
  123. liquid/tokens.py +370 -0
  124. {python_liquid-2.3.6.dist-info → python_liquid-3.0.0.dist-info}/METADATA +32 -39
  125. python_liquid-3.0.0.dist-info/RECORD +128 -0
  126. {python_liquid-2.3.6.dist-info → python_liquid-3.0.0.dist-info}/WHEEL +1 -1
  127. {python_liquid-2.3.6.dist-info → python_liquid-3.0.0.dist-info}/licenses/LICENSE +1 -1
  128. liquid/analyze_tags.py +0 -214
  129. liquid/ast.py +0 -252
  130. liquid/builtin/__init__.py +0 -203
  131. liquid/builtin/content.py +0 -41
  132. liquid/builtin/drops/__init__.py +0 -3
  133. liquid/builtin/drops/drops.py +0 -13
  134. liquid/builtin/expressions/__init__.py +0 -47
  135. liquid/builtin/expressions/_tokenize.py +0 -186
  136. liquid/builtin/expressions/arguments.py +0 -207
  137. liquid/builtin/expressions/filtered.py +0 -387
  138. liquid/builtin/expressions/logical.py +0 -672
  139. liquid/builtin/expressions/loop.py +0 -275
  140. liquid/builtin/expressions/path.py +0 -163
  141. liquid/builtin/expressions/primitive.py +0 -417
  142. liquid/builtin/filters/__init__.py +0 -0
  143. liquid/builtin/filters/array.py +0 -329
  144. liquid/builtin/filters/extra.py +0 -83
  145. liquid/builtin/filters/math.py +0 -129
  146. liquid/builtin/filters/misc.py +0 -137
  147. liquid/builtin/filters/string.py +0 -416
  148. liquid/builtin/illegal.py +0 -28
  149. liquid/builtin/loaders/__init__.py +0 -0
  150. liquid/builtin/loaders/caching_file_system_loader.py +0 -61
  151. liquid/builtin/loaders/choice_loader.py +0 -94
  152. liquid/builtin/loaders/dict_loader.py +0 -64
  153. liquid/builtin/loaders/package_loader.py +0 -132
  154. liquid/builtin/output.py +0 -74
  155. liquid/builtin/tags/__init__.py +0 -0
  156. liquid/builtin/tags/assign_tag.py +0 -75
  157. liquid/builtin/tags/capture_tag.py +0 -98
  158. liquid/builtin/tags/case_tag.py +0 -287
  159. liquid/builtin/tags/comment_tag.py +0 -77
  160. liquid/builtin/tags/cycle_tag.py +0 -132
  161. liquid/builtin/tags/decrement_tag.py +0 -59
  162. liquid/builtin/tags/doc_tag.py +0 -68
  163. liquid/builtin/tags/echo_tag.py +0 -45
  164. liquid/builtin/tags/for_tag.py +0 -337
  165. liquid/builtin/tags/if_tag.py +0 -209
  166. liquid/builtin/tags/ifchanged_tag.py +0 -94
  167. liquid/builtin/tags/include_tag.py +0 -251
  168. liquid/builtin/tags/increment_tag.py +0 -60
  169. liquid/builtin/tags/inline_comment_tag.py +0 -47
  170. liquid/builtin/tags/liquid_tag.py +0 -183
  171. liquid/builtin/tags/render_tag.py +0 -371
  172. liquid/builtin/tags/tablerow_tag.py +0 -320
  173. liquid/builtin/tags/unless_tag.py +0 -218
  174. liquid/context.py +0 -615
  175. liquid/expression.py +0 -41
  176. liquid/extra/__init__.py +0 -98
  177. liquid/extra/filters/__init__.py +0 -33
  178. liquid/extra/filters/_json.py +0 -33
  179. liquid/extra/filters/array.py +0 -60
  180. liquid/extra/filters/babel.py +0 -552
  181. liquid/extra/filters/html.py +0 -32
  182. liquid/extra/filters/translate.py +0 -448
  183. liquid/extra/tags/__init__.py +0 -17
  184. liquid/extra/tags/_with.py +0 -80
  185. liquid/extra/tags/extends_tag.py +0 -576
  186. liquid/extra/tags/macro_tag.py +0 -270
  187. liquid/extra/tags/snippet_tag.py +0 -107
  188. liquid/extra/tags/translate_tag.py +0 -388
  189. liquid/filter.py +0 -230
  190. liquid/future/__init__.py +0 -3
  191. liquid/future/environment.py +0 -30
  192. liquid/future/filters/__init__.py +0 -1
  193. liquid/future/tags/__init__.py +0 -1
  194. liquid/lex.py +0 -260
  195. liquid/limits.py +0 -66
  196. liquid/loader.py +0 -141
  197. liquid/messages.py +0 -357
  198. liquid/mode.py +0 -12
  199. liquid/output.py +0 -35
  200. liquid/parser.py +0 -119
  201. liquid/span.py +0 -35
  202. liquid/static_analysis.py +0 -443
  203. liquid/stream.py +0 -148
  204. liquid/stringify.py +0 -31
  205. liquid/tag.py +0 -47
  206. liquid/template.py +0 -658
  207. liquid/token.py +0 -145
  208. liquid/undefined.py +0 -218
  209. liquid/utils/__init__.py +0 -15
  210. liquid/utils/html.py +0 -57
  211. liquid/utils/text.py +0 -28
  212. python_liquid-2.3.6.dist-info/RECORD +0 -96
liquid/tokens.py ADDED
@@ -0,0 +1,370 @@
1
+ # DO NOT EDIT -- generated by generate_tokens.py
2
+
3
+ from typing import Literal
4
+
5
+ __all__ = (
6
+ "TOKEN_ADD",
7
+ "TOKEN_AND",
8
+ "TOKEN_ARROW",
9
+ "TOKEN_AS",
10
+ "TOKEN_ASSIGN",
11
+ "TOKEN_BLANK",
12
+ "TOKEN_COLON",
13
+ "TOKEN_COMMA",
14
+ "TOKEN_COMMENT_END",
15
+ "TOKEN_COMMENT_START",
16
+ "TOKEN_COMMENT",
17
+ "TOKEN_CONTAINS",
18
+ "TOKEN_DIV",
19
+ "TOKEN_DOT",
20
+ "TOKEN_DOUBLE_DOT",
21
+ "TOKEN_DOUBLE_ESCAPED",
22
+ "TOKEN_DOUBLE_QUOTE",
23
+ "TOKEN_DOUBLE_QUOTED",
24
+ "TOKEN_ELSE",
25
+ "TOKEN_EMPTY",
26
+ "TOKEN_EOI",
27
+ "TOKEN_EQ",
28
+ "TOKEN_FALSE",
29
+ "TOKEN_FLOAT",
30
+ "TOKEN_FOR",
31
+ "TOKEN_GE",
32
+ "TOKEN_GT",
33
+ "TOKEN_HASH",
34
+ "TOKEN_IDENT",
35
+ "TOKEN_IF",
36
+ "TOKEN_IN",
37
+ "TOKEN_INT",
38
+ "TOKEN_INTERPOLATION_END",
39
+ "TOKEN_INTERPOLATION_START",
40
+ "TOKEN_LBRACE",
41
+ "TOKEN_LBRACKET",
42
+ "TOKEN_LE",
43
+ "TOKEN_LPAREN",
44
+ "TOKEN_LT",
45
+ "TOKEN_MOD",
46
+ "TOKEN_MUL",
47
+ "TOKEN_NE",
48
+ "TOKEN_NIL",
49
+ "TOKEN_NOT",
50
+ "TOKEN_NULL",
51
+ "TOKEN_OR_ELSE",
52
+ "TOKEN_OR",
53
+ "TOKEN_OUT_END",
54
+ "TOKEN_OUT_START",
55
+ "TOKEN_PIPE",
56
+ "TOKEN_QUESTION",
57
+ "TOKEN_RBRACE",
58
+ "TOKEN_RBRACKET",
59
+ "TOKEN_RPAREN",
60
+ "TOKEN_SINGLE_ESCAPED",
61
+ "TOKEN_SINGLE_QUOTE",
62
+ "TOKEN_SINGLE_QUOTED",
63
+ "TOKEN_SPAN",
64
+ "TOKEN_SUB",
65
+ "TOKEN_TAG_END",
66
+ "TOKEN_TAG_NAME",
67
+ "TOKEN_TAG_START",
68
+ "TOKEN_TEXT",
69
+ "TOKEN_TRIPLE_DOT",
70
+ "TOKEN_TRUE",
71
+ "TOKEN_UNKNOWN",
72
+ "TOKEN_WC",
73
+ "TOKEN_WITH",
74
+ )
75
+
76
+ type TokenKind = Literal[
77
+ 1,
78
+ 2,
79
+ 3,
80
+ 4,
81
+ 5,
82
+ 6,
83
+ 7,
84
+ 8,
85
+ 9,
86
+ 10,
87
+ 11,
88
+ 12,
89
+ 13,
90
+ 14,
91
+ 15,
92
+ 16,
93
+ 17,
94
+ 18,
95
+ 19,
96
+ 20,
97
+ 21,
98
+ 22,
99
+ 23,
100
+ 24,
101
+ 25,
102
+ 26,
103
+ 27,
104
+ 28,
105
+ 29,
106
+ 30,
107
+ 31,
108
+ 32,
109
+ 33,
110
+ 34,
111
+ 35,
112
+ 36,
113
+ 37,
114
+ 38,
115
+ 39,
116
+ 40,
117
+ 41,
118
+ 42,
119
+ 43,
120
+ 44,
121
+ 45,
122
+ 46,
123
+ 47,
124
+ 48,
125
+ 49,
126
+ 50,
127
+ 51,
128
+ 52,
129
+ 53,
130
+ 54,
131
+ 55,
132
+ 56,
133
+ 57,
134
+ 58,
135
+ 59,
136
+ 60,
137
+ 61,
138
+ 62,
139
+ 63,
140
+ 64,
141
+ 65,
142
+ 66,
143
+ 67,
144
+ 68,
145
+ ]
146
+
147
+ type Token = tuple[TokenKind, int, int]
148
+ """Token type, start index and end index."""
149
+
150
+ TOKEN_ADD: Literal[1] = 1
151
+ TOKEN_AND: Literal[2] = 2
152
+ TOKEN_ARROW: Literal[3] = 3
153
+ TOKEN_AS: Literal[4] = 4
154
+ TOKEN_ASSIGN: Literal[5] = 5
155
+ TOKEN_BLANK: Literal[6] = 6
156
+ TOKEN_COLON: Literal[7] = 7
157
+ TOKEN_COMMA: Literal[8] = 8
158
+ TOKEN_COMMENT_END: Literal[9] = 9
159
+ TOKEN_COMMENT_START: Literal[10] = 10
160
+ TOKEN_COMMENT: Literal[11] = 11
161
+ TOKEN_CONTAINS: Literal[12] = 12
162
+ TOKEN_DIV: Literal[13] = 13
163
+ TOKEN_DOT: Literal[14] = 14
164
+ TOKEN_DOUBLE_DOT: Literal[15] = 15
165
+ TOKEN_DOUBLE_ESCAPED: Literal[16] = 16
166
+ TOKEN_DOUBLE_QUOTE: Literal[17] = 17
167
+ TOKEN_DOUBLE_QUOTED: Literal[18] = 18
168
+ TOKEN_ELSE: Literal[19] = 19
169
+ TOKEN_EMPTY: Literal[20] = 20
170
+ TOKEN_EOI: Literal[21] = 21
171
+ TOKEN_EQ: Literal[22] = 22
172
+ TOKEN_FALSE: Literal[23] = 23
173
+ TOKEN_FLOAT: Literal[24] = 24
174
+ TOKEN_FOR: Literal[25] = 25
175
+ TOKEN_GE: Literal[26] = 26
176
+ TOKEN_GT: Literal[27] = 27
177
+ TOKEN_HASH: Literal[28] = 28
178
+ TOKEN_IDENT: Literal[29] = 29
179
+ TOKEN_IF: Literal[30] = 30
180
+ TOKEN_IN: Literal[31] = 31
181
+ TOKEN_INT: Literal[32] = 32
182
+ TOKEN_INTERPOLATION_END: Literal[33] = 33
183
+ TOKEN_INTERPOLATION_START: Literal[34] = 34
184
+ TOKEN_LBRACE: Literal[35] = 35
185
+ TOKEN_LBRACKET: Literal[36] = 36
186
+ TOKEN_LE: Literal[37] = 37
187
+ TOKEN_LPAREN: Literal[38] = 38
188
+ TOKEN_LT: Literal[39] = 39
189
+ TOKEN_MOD: Literal[40] = 40
190
+ TOKEN_MUL: Literal[41] = 41
191
+ TOKEN_NE: Literal[42] = 42
192
+ TOKEN_NIL: Literal[43] = 43
193
+ TOKEN_NOT: Literal[44] = 44
194
+ TOKEN_NULL: Literal[45] = 45
195
+ TOKEN_OR_ELSE: Literal[46] = 46
196
+ TOKEN_OR: Literal[47] = 47
197
+ TOKEN_OUT_END: Literal[48] = 48
198
+ TOKEN_OUT_START: Literal[49] = 49
199
+ TOKEN_PIPE: Literal[50] = 50
200
+ TOKEN_QUESTION: Literal[51] = 51
201
+ TOKEN_RBRACE: Literal[52] = 52
202
+ TOKEN_RBRACKET: Literal[53] = 53
203
+ TOKEN_RPAREN: Literal[54] = 54
204
+ TOKEN_SINGLE_ESCAPED: Literal[55] = 55
205
+ TOKEN_SINGLE_QUOTE: Literal[56] = 56
206
+ TOKEN_SINGLE_QUOTED: Literal[57] = 57
207
+ TOKEN_SPAN: Literal[58] = 58
208
+ TOKEN_SUB: Literal[59] = 59
209
+ TOKEN_TAG_END: Literal[60] = 60
210
+ TOKEN_TAG_NAME: Literal[61] = 61
211
+ TOKEN_TAG_START: Literal[62] = 62
212
+ TOKEN_TEXT: Literal[63] = 63
213
+ TOKEN_TRIPLE_DOT: Literal[64] = 64
214
+ TOKEN_TRUE: Literal[65] = 65
215
+ TOKEN_UNKNOWN: Literal[66] = 66
216
+ TOKEN_WC: Literal[67] = 67
217
+ TOKEN_WITH: Literal[68] = 68
218
+
219
+ TOKEN_NAMES = (
220
+ None,
221
+ "'+'",
222
+ "'and'",
223
+ "'->'",
224
+ "'as'",
225
+ "'='",
226
+ "BLANK",
227
+ "':'",
228
+ "','",
229
+ "COMMENT_END",
230
+ "COMMENT_START",
231
+ "COMMENT",
232
+ "'contains'",
233
+ "'/'",
234
+ "'.'",
235
+ "'..'",
236
+ "DOUBLE_ESCAPED",
237
+ "'\"'",
238
+ "DOUBLE_QUOTED",
239
+ "'else'",
240
+ "EMPTY",
241
+ "EOI",
242
+ "'=='",
243
+ "'false'",
244
+ "FLOAT",
245
+ "'for'",
246
+ "'>='",
247
+ "'>'",
248
+ "'#'",
249
+ "IDENT",
250
+ "'if'",
251
+ "'in'",
252
+ "INT",
253
+ "INTERPOLATION_END",
254
+ "INTERPOLATION_START",
255
+ "'{'",
256
+ "'['",
257
+ "'<='",
258
+ "'('",
259
+ "'<'",
260
+ "'%'",
261
+ "'*'",
262
+ "'!='",
263
+ "'nil'",
264
+ "'not'",
265
+ "'null'",
266
+ "OR_ELSE",
267
+ "'or'",
268
+ "OUT_END",
269
+ "OUT_START",
270
+ "'|'",
271
+ "'?'",
272
+ "'}'",
273
+ "']'",
274
+ "')'",
275
+ "SINGLE_ESCAPED",
276
+ '"\'"',
277
+ "SINGLE_QUOTED",
278
+ "SPAN",
279
+ "'-'",
280
+ "TAG_END",
281
+ "TAG_NAME",
282
+ "TAG_START",
283
+ "TEXT",
284
+ "'...'",
285
+ "'true'",
286
+ "unknown",
287
+ "WHITESPACE_CONTROL",
288
+ "'with'",
289
+ )
290
+
291
+ TOKEN_MAP = {
292
+ TOKEN_ADD: "TOKEN_ADD",
293
+ TOKEN_AND: "TOKEN_AND",
294
+ TOKEN_ARROW: "TOKEN_ARROW",
295
+ TOKEN_AS: "TOKEN_AS",
296
+ TOKEN_ASSIGN: "TOKEN_ASSIGN",
297
+ TOKEN_BLANK: "TOKEN_BLANK",
298
+ TOKEN_COLON: "TOKEN_COLON",
299
+ TOKEN_COMMA: "TOKEN_COMMA",
300
+ TOKEN_COMMENT_END: "TOKEN_COMMENT_END",
301
+ TOKEN_COMMENT_START: "TOKEN_COMMENT_START",
302
+ TOKEN_COMMENT: "TOKEN_COMMENT",
303
+ TOKEN_CONTAINS: "TOKEN_CONTAINS",
304
+ TOKEN_DIV: "TOKEN_DIV",
305
+ TOKEN_DOT: "TOKEN_DOT",
306
+ TOKEN_DOUBLE_DOT: "TOKEN_DOUBLE_DOT",
307
+ TOKEN_DOUBLE_ESCAPED: "TOKEN_DOUBLE_ESCAPED",
308
+ TOKEN_DOUBLE_QUOTE: "TOKEN_DOUBLE_QUOTE",
309
+ TOKEN_DOUBLE_QUOTED: "TOKEN_DOUBLE_QUOTED",
310
+ TOKEN_ELSE: "TOKEN_ELSE",
311
+ TOKEN_EMPTY: "TOKEN_EMPTY",
312
+ TOKEN_EOI: "TOKEN_EOI",
313
+ TOKEN_EQ: "TOKEN_EQ",
314
+ TOKEN_FALSE: "TOKEN_FALSE",
315
+ TOKEN_FLOAT: "TOKEN_FLOAT",
316
+ TOKEN_FOR: "TOKEN_FOR",
317
+ TOKEN_GE: "TOKEN_GE",
318
+ TOKEN_GT: "TOKEN_GT",
319
+ TOKEN_HASH: "TOKEN_HASH",
320
+ TOKEN_IDENT: "TOKEN_IDENT",
321
+ TOKEN_IF: "TOKEN_IF",
322
+ TOKEN_IN: "TOKEN_IN",
323
+ TOKEN_INT: "TOKEN_INT",
324
+ TOKEN_INTERPOLATION_END: "TOKEN_INTERPOLATION_END",
325
+ TOKEN_INTERPOLATION_START: "TOKEN_INTERPOLATION_START",
326
+ TOKEN_LBRACE: "TOKEN_LBRACE",
327
+ TOKEN_LBRACKET: "TOKEN_LBRACKET",
328
+ TOKEN_LE: "TOKEN_LE",
329
+ TOKEN_LPAREN: "TOKEN_LPAREN",
330
+ TOKEN_LT: "TOKEN_LT",
331
+ TOKEN_MOD: "TOKEN_MOD",
332
+ TOKEN_MUL: "TOKEN_MUL",
333
+ TOKEN_NE: "TOKEN_NE",
334
+ TOKEN_NIL: "TOKEN_NIL",
335
+ TOKEN_NOT: "TOKEN_NOT",
336
+ TOKEN_NULL: "TOKEN_NULL",
337
+ TOKEN_OR_ELSE: "TOKEN_OR_ELSE",
338
+ TOKEN_OR: "TOKEN_OR",
339
+ TOKEN_OUT_END: "TOKEN_OUT_END",
340
+ TOKEN_OUT_START: "TOKEN_OUT_START",
341
+ TOKEN_PIPE: "TOKEN_PIPE",
342
+ TOKEN_QUESTION: "TOKEN_QUESTION",
343
+ TOKEN_RBRACE: "TOKEN_RBRACE",
344
+ TOKEN_RBRACKET: "TOKEN_RBRACKET",
345
+ TOKEN_RPAREN: "TOKEN_RPAREN",
346
+ TOKEN_SINGLE_ESCAPED: "TOKEN_SINGLE_ESCAPED",
347
+ TOKEN_SINGLE_QUOTE: "TOKEN_SINGLE_QUOTE",
348
+ TOKEN_SINGLE_QUOTED: "TOKEN_SINGLE_QUOTED",
349
+ TOKEN_SPAN: "TOKEN_SPAN",
350
+ TOKEN_SUB: "TOKEN_SUB",
351
+ TOKEN_TAG_END: "TOKEN_TAG_END",
352
+ TOKEN_TAG_NAME: "TOKEN_TAG_NAME",
353
+ TOKEN_TAG_START: "TOKEN_TAG_START",
354
+ TOKEN_TEXT: "TOKEN_TEXT",
355
+ TOKEN_TRIPLE_DOT: "TOKEN_TRIPLE_DOT",
356
+ TOKEN_TRUE: "TOKEN_TRUE",
357
+ TOKEN_UNKNOWN: "TOKEN_UNKNOWN",
358
+ TOKEN_WC: "TOKEN_WC",
359
+ TOKEN_WITH: "TOKEN_WITH",
360
+ }
361
+
362
+
363
+ def token_value(token: Token, source: str) -> str:
364
+ """Return the substring in source spanned by token."""
365
+ return source[token[1] : token[2]]
366
+
367
+
368
+ def span(start: Token, stop: Token) -> Token:
369
+ """Return a new token spanning start and stop."""
370
+ return (TOKEN_SPAN, start[1], stop[2])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: python-liquid
3
- Version: 2.3.6
3
+ Version: 3.0.0
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/
@@ -13,22 +13,18 @@ License-File: LICENSE
13
13
  Classifier: Development Status :: 5 - Production/Stable
14
14
  Classifier: Intended Audience :: Developers
15
15
  Classifier: License :: OSI Approved :: MIT License
16
- Classifier: Programming Language :: Python :: 3
17
- Classifier: Programming Language :: Python :: 3.9
18
- Classifier: Programming Language :: Python :: 3.10
19
- Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python
20
17
  Classifier: Programming Language :: Python :: 3.12
21
18
  Classifier: Programming Language :: Python :: 3.13
22
19
  Classifier: Programming Language :: Python :: 3.14
23
20
  Classifier: Programming Language :: Python :: 3.15
24
21
  Classifier: Programming Language :: Python :: Implementation :: CPython
25
22
  Classifier: Programming Language :: Python :: Implementation :: PyPy
26
- Requires-Python: >=3.9
23
+ Requires-Python: >=3.12
27
24
  Requires-Dist: babel>=2
28
- Requires-Dist: importlib-resources>=5.12
29
25
  Requires-Dist: markupsafe>=3
30
- Requires-Dist: python-dateutil>=2.8.1
31
- Requires-Dist: pytz
26
+ Requires-Dist: python-dateutil
27
+ Requires-Dist: tzdata
32
28
  Description-Content-Type: text/markdown
33
29
 
34
30
  <h1 align="center">Python Liquid</h1>
@@ -77,28 +73,37 @@ We follow <a href="https://github.com/Shopify/liquid">Shopify/Liquid</a> closely
77
73
 
78
74
  ## Install
79
75
 
80
- Install Python Liquid using [Pipenv](https://pipenv.pypa.io/en/latest/):
76
+ Install `python-liquid` from [PyPi](https://pypi.org/project/python-liquid) using your favorite package manager.
77
+
78
+ **pip**
79
+
80
+ ```shell
81
+ pip install python-liquid
82
+ ```
83
+
84
+ **uv**
81
85
 
82
86
  ```shell
83
- $ pipenv install -u python-liquid
87
+ uv add python-liquid
84
88
  ```
85
89
 
86
- Or [pip](https://pip.pypa.io/en/stable/getting-started/):
90
+ **pipenv**
87
91
 
88
92
  ```shell
89
- $ pip install python-liquid
93
+ pipenv install -u python-liquid
90
94
  ```
91
95
 
92
- Or from [conda-forge](https://anaconda.org/conda-forge/python-liquid):
96
+ **conda**
93
97
 
94
98
  ```shell
95
- $ conda install -c conda-forge python-liquid
99
+ conda install -c conda-forge python-liquid
96
100
  ```
97
101
 
98
102
  ## Links
99
103
 
100
104
  - Documentation: https://jg-rp.github.io/liquid/
101
105
  - Documentation for Python Liquid version 1.x: https://jg-rp.github.io/python-liquid-docs-archive/
106
+ - Documentation for Python Liquid version 2.x: https://github.com/jg-rp/liquid/blob/v2.3.6/docs/index.md
102
107
  - Change Log: https://github.com/jg-rp/liquid/blob/main/CHANGES.md
103
108
  - PyPi: https://pypi.org/project/python-liquid/
104
109
  - Source Code: https://github.com/jg-rp/liquid
@@ -115,18 +120,17 @@ $ conda install -c conda-forge python-liquid
115
120
 
116
121
  ### `render()`
117
122
 
118
- This example renders a template from a string of text with the package-level `render()` function. The template has just one placeholder variable `you`, which we've given the value `"World"`.
123
+ Use the package-level `liquid.render()` function to render a template with Liquid's default configuration. The first argument is template source code and the second is a dictionary of template variables.
119
124
 
120
125
  ```python
121
- from liquid import render
126
+ import liquid
122
127
 
123
- print(render("Hello, {{ you }}!", you="World"))
124
- # Hello, World!
128
+ print(liquid.render("Hello, {{ you }}!", {"you": "World"})) # Hello, World!
125
129
  ```
126
130
 
127
131
  ### `parse()`
128
132
 
129
- Often you'll want to render the same template several times with different variables. We can parse source text without immediately rendering it using the `parse()` function. `parse()` returns a `BoundTemplate` instance with a `render()` method.
133
+ Use `liquid.parse()` to get an instance of `liquid.Template`, which can be rendered multiple times with different data.
130
134
 
131
135
  ```python
132
136
  from liquid import parse
@@ -138,33 +142,22 @@ print(template.render(you="Liquid")) # Hello, Liquid!
138
142
 
139
143
  ### Configure
140
144
 
141
- Both `parse()` and `render()` are convenience functions that use the default Liquid environment. For all but the simplest cases, you'll want to configure an instance of `Environment`, then load and render templates from that.
145
+ You'll need to create an instance of `liquid.Environment` to configure Liquid, then load and render templates from that.
142
146
 
143
147
  ```python
144
- from liquid import CachingFileSystemLoader
145
- from liquid import Environment
148
+ from liquid import Environment, CachingFileSystemLoader
146
149
 
147
150
  env = Environment(
148
- autoescape=True,
149
- loader=CachingFileSystemLoader("./templates"),
151
+ autoescape=True,
152
+ loader=CachingFileSystemLoader("./templates")
150
153
  )
151
- ```
152
-
153
- Then, using `env.parse()` or `env.get_template()`, we can create a `BoundTemplate` from a string or read from the file system, respectively.
154
-
155
- ```python
156
- # ... continued from above
157
- template = env.parse("Hello, {{ you }}!")
158
- print(template.render(you="World")) # Hello, World!
159
154
 
160
- # Try to load "./templates/index.html"
161
- another_template = env.get_template("index.html")
162
- data = {"some": {"thing": [1, 2, 3]}}
163
- result = another_template.render(**data)
155
+ template = env.get_template("index.liquid")
156
+ another_template = env.parse("{% render 'greeting' %}, World!")
164
157
  ```
165
158
 
166
- Unless you happen to have a relative folder called `templates` with a file called `index.html` within it, we would expect a `TemplateNotFoundError` to be raised when running the example above.
159
+ See [docs](https://jg-rp.github.io/liquid/).
167
160
 
168
161
  ## Contributing
169
162
 
170
- Please see [Contributing to Python Liquid](https://github.com/jg-rp/liquid/blob/main/contributing.md).
163
+ Please see [Contributing to Python Liquid](https://github.com/jg-rp/liquid/blob/main/CONTRIBUTING.md).
@@ -0,0 +1,128 @@
1
+ liquid/__about__.py,sha256=EPmgXOdWKks5S__ZMH7Nu6xpAeVrZpfxaFy4pykuyeI,22
2
+ liquid/__init__.py,sha256=fsFS4CJZIpVzcL5yqj61etiGmV_4_gTWh6jQBtZAQ48,5649
3
+ liquid/_base_tag.py,sha256=MSSgZKP6PPe2CYlwBrt5TL4RuF_qMY6-bbYjhZ13vO0,2378
4
+ liquid/_chain_map.py,sha256=rHOZFHHkCDX84VdYyBXxE-U2F_A1TsVfV8thrAepSMo,1392
5
+ liquid/_context.py,sha256=8kkaktR9HUDYQ7QLIVyu1Lr9-BiTrCpjF5D9STaWb_4,13524
6
+ liquid/_drop.py,sha256=OUOZ0DmKaWqBJFrI529rJGmUJW7_LbKnJ1M0hJn0nuA,3571
7
+ liquid/_filter.py,sha256=wfrHCC9riQWJri6V2X9CuVZTP60Bw_mfnOCm3_pmeW4,5736
8
+ liquid/_io.py,sha256=CaOwcaQyvlHotcUimJNNzp7lMp5fU7I-yBO35Tn5sPw,496
9
+ liquid/_lax_parser_mixin.py,sha256=Dr217o6ahc6HU5tVpLlJHLCYB6TLIfQBrkArhz05hkY,3083
10
+ liquid/_lexer.py,sha256=46Qkfn0nvZXd_yzupq7hepv2I0kmVwucCOf3Cv6b_r8,2617
11
+ liquid/_lexer_extended.py,sha256=N1Qzn1CtiVyLuV-XRq9r-KBNuWld2pMI7ovJ7-H4sA0,19080
12
+ liquid/_lexer_legacy.py,sha256=yK3QsV65MFjTW7yg1cfaxfhCpL8VhZ6eiFKMrTaPo30,16288
13
+ liquid/_loader.py,sha256=hKBCzOkpKU_ZZz46PE8DGkgVdwdFgjPsa0sDGn7o3w0,2327
14
+ liquid/_lru_cache.py,sha256=W56QnWKhkgLRrNfGUOyd6gVcGKiJdc_14CVAk2L6-xs,3802
15
+ liquid/_markup.py,sha256=sD3HU2rUj1f8tfW_L-T1VaMMqJ1etIxOmDZJ2b8mftw,7928
16
+ liquid/_messages.py,sha256=n1clbGezTAV_2IqJKqv7_JDA937gCAJSM69TzYv1oQw,9268
17
+ liquid/_missing.py,sha256=iWADJliugjGfYdx7NLBDplcxReGOgf4xQ4h5wr1FVXA,49
18
+ liquid/_nothing.py,sha256=VFw4RgVoEymgZ2iUImo4AEm_a4xnMZ8pK2KQepDNDp0,654
19
+ liquid/_parser.py,sha256=sDxxEsj5klbpBzW289_ef1so8nIcj1jniIvrB-wioLg,14089
20
+ liquid/_parser_extended.py,sha256=h5m67qnOilIQ6lVQbo8U3oCZY-osBzA6VsoMdKRCX4M,8748
21
+ liquid/_parser_legacy.py,sha256=W6lANIwYN4mzyX5ZCTkEqTLKMFJ8FXBB6pnYgfuZd8A,25744
22
+ liquid/_resource_limits.py,sha256=eoCXjm7b2DnLc4ToZWVuhtFirQWcPK92mvk_IHMFFYU,2354
23
+ liquid/_slice.py,sha256=ZA6Bp041vLFf79YBTKg_axiy8PwiKQZQ_-r1ye0ZAq0,1176
24
+ liquid/_static_analysis.py,sha256=q3NiZ94qunRs29o8cbTKzCB74nhoQWgafjQugW5F1WE,16038
25
+ liquid/_strftime.py,sha256=Tbjwfp13p82RvCa9FS9_YE0JJpnv9Tb-szUB0irmpJ0,5894
26
+ liquid/_template.py,sha256=nro11jB0bsUj1dmFntgaMLzNvg4oorgSPJ8X9uAr-0w,19339
27
+ liquid/environment.py,sha256=BfEvC4SAOMd6dV_WmwJh9csxucJ_RM8Wl96Ffluqzw4,25959
28
+ liquid/exceptions.py,sha256=4CLM9NejcP6_5-vjXzZTTMlFsS7ru-zZK2Py0NRzqMA,3346
29
+ liquid/expressions.py,sha256=n_WpLiIKHJ-ZsH-wBITmlugaSuKnWtE3M9w7r4WFDz4,34256
30
+ liquid/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
+ liquid/tokens.py,sha256=lZ2BG9buanCRRHYDuO3MeQsEzz6Zy9dqKDGU-klMCXo,7804
32
+ liquid/drops/__init__.py,sha256=xSJnZOMJJQJbVaG0_NF7byv216_8eK3_ZBhiFZgAuOU,471
33
+ liquid/drops/forloop.py,sha256=QGbXcvbQ6WCOw1TzTggPdsHAZzKLmDFQ47z3whxHygc,1918
34
+ liquid/drops/iterable.py,sha256=ELt-eN0f18cxb6uXWpr-2lrUJyWcJYZj5VrcRl-S1O4,653
35
+ liquid/drops/range.py,sha256=015VweaMPDAtd-VUR7lCVv8zxgIb4tY4ny6o_QVPVtc,2322
36
+ liquid/drops/self_.py,sha256=gnWpe4qCRcQx_hOZczXojOZiQpvje3SttFZZEm_vRcc,1338
37
+ liquid/drops/tablerowloop.py,sha256=Jps7wEOYHW56xt8SGZKsNgc66Xo441jLVpzrlMht9d8,3120
38
+ liquid/drops/undefined.py,sha256=cJNNRo89JKbLx0NtIYdjdNjrc9W_3aaEVgnJgZCeB8Y,5797
39
+ liquid/filters/__init__.py,sha256=YSaUQcOB_aXhnleYx-pXu48_JggKEMGReZJ7qXwfaSM,2924
40
+ liquid/filters/abs.py,sha256=uGBAUN6vPk9oR5MzOhH7qVebJFKGTbOYMhegQpsgVh4,200
41
+ liquid/filters/append.py,sha256=3JPEAx14SkUuJAj2aYpNmASFiNTJ37yBSFz3YqECTL0,174
42
+ liquid/filters/at_least.py,sha256=Sgg5ICJMfUZ-xSRULLdfdp5kSgjGkp-xpu4ix679Pbo,239
43
+ liquid/filters/at_most.py,sha256=l3RExX0NdBrlYzaOXe-SAwLh-fxDrknF61cdCTnKQV4,238
44
+ liquid/filters/babel.py,sha256=8NPfZUFCmA3qI8P1SZ40dK2Ap7pENisKB3HE_QZUEQI,18793
45
+ liquid/filters/base64.py,sha256=u62s9_XEKLQkv1LN6x9Z6hQ54Ce5bxM4UOCimNpsrcg,829
46
+ liquid/filters/capitalize.py,sha256=PtBgFsI0-nW6IhTn-UAjBeDVp099HQ6W7zGZ5EuaDh0,148
47
+ liquid/filters/ceil.py,sha256=msL2gq7OrvUkHcLCs1YA_sSr4XZPsqYX2BnY5wplAV4,202
48
+ liquid/filters/compact.py,sha256=ktTG5_Ah8xkUI3lUAaTMFNUUc3wyDAl6DAqSmFF5ctA,678
49
+ liquid/filters/concat.py,sha256=qtuWW1UcQKXRISazG4G27u4vZgyZaN8Dhpzs7bUJtTg,358
50
+ liquid/filters/date.py,sha256=4suNxBPZTEXLv2jBcdzLND_Af8K3pVdtueimCk-dgVw,630
51
+ liquid/filters/default.py,sha256=8Mvix83gP2zZwHkV2n6Z5CZVh96xHKWPuJNNRtJiw-I,560
52
+ liquid/filters/divided_by.py,sha256=dhDFcbR8Y-_yeO-FGRyxOWHFU2Sx5QpCe-0xHRiSiXc,553
53
+ liquid/filters/downcase.py,sha256=Xi1SiN6ODa7p0piluNRAJ8fJb0dRPgi0qvPcBLBmuts,141
54
+ liquid/filters/escape.py,sha256=1epjnWfcd3gfyGAaVNny0wr9Sxb-f_N9OMWuRLZze3E,1413
55
+ liquid/filters/find.py,sha256=r4oHLCELCNkmiGnmPJQuduBPD476NfXQyK3ZkEuHw7U,1410
56
+ liquid/filters/first.py,sha256=o12RY8o8zE-6c_QN4GpxmKU5bsgtci4dKWesnacYzUQ,624
57
+ liquid/filters/floor.py,sha256=Z8X6VG6Ub4ZhEQD1ap8EAPBb3j0OtKxXshw3J-9F7Wk,204
58
+ liquid/filters/html.py,sha256=vygr63YKcuPSfBRiGiCF6r8Yhc9tpnKz_Y4bCA2absI,723
59
+ liquid/filters/index.py,sha256=cOQJUc4L8Oj89g8A_tMGfRpR8lQUBfEr9A_xKIWgA4E,326
60
+ liquid/filters/join.py,sha256=QlPNtbDSt4o4clSE0ZrT5FhhSO2pX-UA9BjroOu0epE,356
61
+ liquid/filters/json_.py,sha256=lDhUgcYWO6b9wGG0NreyvQmvcteednLfi_GqEM2wmcs,790
62
+ liquid/filters/last.py,sha256=QftKs692vUjgascd6s1pQXF7tjij7jQIbK4Lx4WUV0I,426
63
+ liquid/filters/map.py,sha256=1cV8_oHrYUXOV-rSqQVCmfGaCNZlDbUJGK8uCL8ua9w,194
64
+ liquid/filters/minus.py,sha256=aNGK-ybvj0HrJ4KD4V2Z5EdSHy2PLd-sgR0YoiBuZlY,372
65
+ liquid/filters/modulo.py,sha256=qZCZJmOuLkuLMdOseZIxw5bpLWUletqQ6PftW4U6ZKc,455
66
+ liquid/filters/newline_to_br.py,sha256=qT3KRUbOcNRpsqrQlPhwFFvoK8sWgHClG7UrxxHS2h8,394
67
+ liquid/filters/plus.py,sha256=kd0j3kTEnmQVejdWxFYRM6il_5fgDEUE7GMAVNgX5vc,371
68
+ liquid/filters/prepend.py,sha256=1H24Tyez_IfHJn4N68XszrS2zt6Ao_ivRf5idgdYBHo,175
69
+ liquid/filters/reject.py,sha256=7QJRrD0Q6PfGW17ow_o4VX-nnnVz_l9w0X8pqK6-wKY,499
70
+ liquid/filters/remove.py,sha256=JWgH8uIfaG6lXAtIyWILhvVjDuxxqLoC8EqveOY0o-I,812
71
+ liquid/filters/replace.py,sha256=1ipeixzTbHoe0hJbys3GTaBTeJ9l0-96WnptWIdoO5s,824
72
+ liquid/filters/reverse.py,sha256=OYQu7VW5rbwl6-NzL8eIKc6b4M8yj9DkHaKgmoJ4-O4,158
73
+ liquid/filters/round.py,sha256=S6i1aJfndp6ZGkZPO4gIxhuFFPBqHls2b_xeoDdW_cc,808
74
+ liquid/filters/size.py,sha256=aoIM7PhCgrvY18BGIXEn2bONfMRH9mb9WaG9uxLzNwE,626
75
+ liquid/filters/slice.py,sha256=dsvvSuYLoJPzeXVsgY_haqVVTKhloeAFmPoXf0lRpUg,1130
76
+ liquid/filters/sort.py,sha256=4B8U0QZTlYywO3CB52rr9s-BMYhfKo0nGdxHoPb_nAw,3556
77
+ liquid/filters/split.py,sha256=f1-M-K317elK2K_6vtlgBj_qe9_8JNPiF4l1zIWpZ2E,587
78
+ liquid/filters/squish.py,sha256=RVXD-NfkSUDZOol2QRKOCnFjqU4jvNhIQuS1O7U4CIo,210
79
+ liquid/filters/strip.py,sha256=9tjFSjP9DeZjdMzQ1c61sQa4l-Oq247Ren4RUgYLLRs,346
80
+ liquid/filters/strip_html.py,sha256=C5m928x-1TDv2GUKgmxhPDV3Sqf6ytZWJs2RY-mi2X4,505
81
+ liquid/filters/strip_newlines.py,sha256=uIdoj_u8iWjHTtd-M8aYgtoT2ozcAr_-S26mDydC5DA,373
82
+ liquid/filters/sum.py,sha256=t3lZXqHF4sJ9CUkMY-HfEnhabBBvBMctDBGv-72vW3M,521
83
+ liquid/filters/times.py,sha256=PXY9cZVljnLiW33wtaQ8amfB-H2kxSQARhflAWxq6gQ,372
84
+ liquid/filters/translate.py,sha256=jH97-hP4lNLgS4QHWTiFaFiIaSTV6GY1uCtbIuxdD98,11098
85
+ liquid/filters/truncate.py,sha256=OgwbUt2glRoChYRJvmVyf-wG_qvk_zWTd6WjHaMJtOA,917
86
+ liquid/filters/uniq.py,sha256=9PbcB6FiOzmloocCUM0Snz8Pr92vM9PeOIF7L58XGU8,398
87
+ liquid/filters/upcase.py,sha256=b3Hkww0jMQboeGPZ1B1lLfiwFic6LVDTFY5ro0jgMBE,139
88
+ liquid/filters/url.py,sha256=RpTWrKT_sq-wzdirarLDmy_ZY3U4aXMKyuH-bxHt6eE,459
89
+ liquid/filters/where.py,sha256=3r_cwVgzukyAWLmKZTA-yLMuK8RWeHyrDzOUXe84u5w,476
90
+ liquid/loaders/__init__.py,sha256=KhQCWU9FZ-vTc8U9B48TOAUFmaJt81Hzrp5GvuuVX6U,517
91
+ liquid/loaders/caching_file_system_loader.py,sha256=WQXE5lHfhFMjwXp5shGzgJJ8NmqqcUvH6_Jq0Ymy45s,2041
92
+ liquid/loaders/choice_loader.py,sha256=pj48QpWbPV4q13LCRYrGcHsygPkyGAorpHD2UTXEyXE,2612
93
+ liquid/loaders/dict_loader.py,sha256=68bJnN8cfxjnlX8Jt75TwonIYMcutbLSwt8YfUvocZw,1463
94
+ liquid/loaders/file_system_loader.py,sha256=RDzuZUmxaBmAVYlDt4wIHlIXgI48orb1_Fon9LNVm3o,4554
95
+ liquid/loaders/mixins.py,sha256=uE49q5H_b2kEw_s2hSuvFLB6brQSzJZV58iRu5j0iK4,4779
96
+ liquid/loaders/package_loader.py,sha256=cUwUhLc2NANImJjdOq3aa14j3g-450QWoiHFOZqQarQ,3309
97
+ liquid/tags/__init__.py,sha256=b6O2CtuNdWwIXwn10FcrMDHDFYzrIgh0RZxVbJ78DxI,1440
98
+ liquid/tags/assign.py,sha256=p14pV0PWfIDD3RHrfVesJc-uRQUcYx6smH3fT4zVBKs,2074
99
+ liquid/tags/capture.py,sha256=ZS8-RSP8JQR9kfDiUgVMo6run5ySppx3KKwI2_UIUgY,2540
100
+ liquid/tags/case.py,sha256=pZ-I7F8d52Y5Y19sKxqFJT3Aa7F_TmeHsuI0sDSJSqg,5937
101
+ liquid/tags/comment.py,sha256=7gCCKAuFkvpxgI32VefcDHvVKQ6kQOEnQaY31A5HW_M,1524
102
+ liquid/tags/cycle.py,sha256=R2fQDZYdYKa_ZAQhmmeiU2PFiBBzAzVDkYv3ZjWs5Zg,3595
103
+ liquid/tags/decrement.py,sha256=FweOvyR1qCx7-uq6Lr4lEW1esUBmTOQBbk7NCgVGhEw,1520
104
+ liquid/tags/doc.py,sha256=WiIyTGg2oa-NmfncJdCuRKfLmAHASsTD7aZxyfCSxV8,1509
105
+ liquid/tags/echo.py,sha256=eyqFf5G3soDGTWLFKlypAbLvPIBnjUeEe39Ti0n4u3k,1795
106
+ liquid/tags/else_.py,sha256=TqyLONjRvdO8arerWXShM1fHaLgGYiMZQxDp3Ppwcy8,1628
107
+ liquid/tags/error.py,sha256=VHQ8sau5OaQvH6SIeDs8JoVjkd8ghOUsbGlPg1OSPD0,1337
108
+ liquid/tags/extends.py,sha256=uaoPz1pWJRzBULEYHdxl1ExLfMnaFx-lz9F04UoRcu8,14444
109
+ liquid/tags/for_.py,sha256=nqXmvmR4sFNxTeEUQn3xceWucJ3frsqslpBtkb6tfog,12504
110
+ liquid/tags/if_.py,sha256=wxbG_VcBe-kpwpBPXQ3KI_3g4EC4F-blt66SvRD9YUk,4802
111
+ liquid/tags/ifchanged.py,sha256=b_1hLa8Jx1NHKbx1SkIm2e2NTHuWseb1ehNkUhodYBc,2139
112
+ liquid/tags/include.py,sha256=fJAgeWr7boRYzlfjtFE2V4v8H--fgJ8taNbuyJKyYZM,7421
113
+ liquid/tags/increment.py,sha256=6_w-CGV8Lc_RZ2RI0s515dpVlF2oHuYjlfLeAHhVATs,1520
114
+ liquid/tags/inline_comment.py,sha256=dQ487im9otLdjf8uB6ufAyiLAk1u_7z--FwKTWaZCKo,1958
115
+ liquid/tags/liquid.py,sha256=GIiI2GPzSdljmh1ccBr7i8JNytMyJJ_HDy2zznV9MkI,1670
116
+ liquid/tags/macro.py,sha256=RrrHtq5Cyor36ffloH8cn_9j2waXdo__aCSCC1ld3FY,8730
117
+ liquid/tags/output.py,sha256=MuQvNpKo7kNVbIGV25uUiVkGyy22U1Fs9wHXofvkUyA,1565
118
+ liquid/tags/raw.py,sha256=DNLHO4MCu3ajsfmwltZ_CyehssYhQXjAnafHEIAG0-g,1608
119
+ liquid/tags/render.py,sha256=1AiQw5nzia-apa2YVLHx2lpLSnEt3373m1uW3yS6WFc,7673
120
+ liquid/tags/tablerow.py,sha256=suXZpD_RlW1eHK5TaVcxp04YeP2P75pIrbmjbF9Jj6Y,7280
121
+ liquid/tags/template_comment.py,sha256=VgnBiAdlbn93V7U76nhls9bY753Stw_MNB7_9gNuwSY,1534
122
+ liquid/tags/translate.py,sha256=jHxje5rwoYijfw7hVOos0tD7Vzv81KspqIlalF5N3UA,9950
123
+ liquid/tags/unless.py,sha256=l-JbaFjCfYcId86hKemm0njJMf2yiKbHS5JEFVIgf1E,3897
124
+ liquid/tags/with_.py,sha256=buqkDhC_tlMqnQdZpADaAYv7b3qCqG9gpIIjx55Iw0g,2624
125
+ python_liquid-3.0.0.dist-info/METADATA,sha256=wX07SEpDiLJFX8GrnETZylZNUe5aCaj2WoszR3mKyBo,5992
126
+ python_liquid-3.0.0.dist-info/WHEEL,sha256=2iZrJkDIkeDh0k9SikKMqFuRP-ua6mb4Ir1AsER4BEw,87
127
+ python_liquid-3.0.0.dist-info/licenses/LICENSE,sha256=V9z1KUw8VgdX4unoAXw2asRUaS3uLWERL9LtZxyfCMQ,1075
128
+ python_liquid-3.0.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.32.4
2
+ Generator: hatchling 1.33.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2020 - 2023 James Prior
3
+ Copyright (c) 2020 - 2026 James Prior
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal