tina4-python 3.11.17__tar.gz → 3.11.20__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.
- {tina4_python-3.11.17 → tina4_python-3.11.20}/PKG-INFO +1 -1
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/__init__.py +1 -1
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/frond/engine.py +76 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/public/js/tina4-dev-admin.js +96 -111
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/public/js/tina4-dev-admin.min.js +96 -111
- {tina4_python-3.11.17 → tina4_python-3.11.20}/.gitignore +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/README.md +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/pyproject.toml +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/CLAUDE.md +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/HtmlElement.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/Testing.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/ai/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/api/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/auth/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/cache/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/cli/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/container/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/core/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/core/cache.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/core/constants.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/core/events.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/core/middleware.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/core/rate_limiter.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/core/request.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/core/response.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/core/router.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/core/server.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/crud/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/database/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/database/adapter.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/database/connection.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/database/firebird.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/database/mongodb.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/database/mssql.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/database/mysql.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/database/odbc.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/database/postgres.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/database/sqlite.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/debug/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/debug/error_overlay.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/dev_admin/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/dev_admin/metrics.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/dev_admin/plan.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/dev_admin/project_index.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/dotenv/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/frond/FROND.md +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/frond/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/gallery/auth/meta.json +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/gallery/auth/src/routes/api/gallery_auth.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/gallery/database/meta.json +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/gallery/database/src/routes/api/gallery_db.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/gallery/error-overlay/meta.json +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/gallery/error-overlay/src/routes/api/gallery_crash.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/gallery/orm/meta.json +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/gallery/orm/src/orm/Product.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/gallery/orm/src/routes/api/gallery_products.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/gallery/queue/meta.json +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/gallery/queue/src/routes/api/gallery_queue.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/gallery/rest-api/meta.json +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/gallery/rest-api/src/routes/api/gallery_hello.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/gallery/templates/meta.json +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/gallery/templates/src/routes/gallery_page.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/gallery/templates/src/templates/gallery_page.twig +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/graphql/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/i18n/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/mcp/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/mcp/protocol.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/mcp/tools.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/messenger/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/migration/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/migration/runner.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/orm/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/orm/fields.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/orm/model.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/public/css/tina4.css +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/public/css/tina4.min.css +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/public/favicon.ico +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/public/images/logo.svg +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/public/images/tina4-logo-icon.webp +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/public/js/frond.min.js +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/public/js/tina4.min.js +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/public/js/tina4js.min.js +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/public/swagger/index.html +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/public/swagger/oauth2-redirect.html +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/query_builder/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/queue/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/queue/job.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/queue/kafka_backend.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/queue/lite_backend.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/queue/mongo_backend.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/queue/rabbitmq_backend.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/queue_backends/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/queue_backends/kafka_backend.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/queue_backends/mongo_backend.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/queue_backends/rabbitmq_backend.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/scss/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/scss/tina4css/_alerts.scss +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/scss/tina4css/_badges.scss +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/scss/tina4css/_buttons.scss +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/scss/tina4css/_cards.scss +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/scss/tina4css/_forms.scss +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/scss/tina4css/_grid.scss +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/scss/tina4css/_modals.scss +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/scss/tina4css/_nav.scss +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/scss/tina4css/_reset.scss +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/scss/tina4css/_tables.scss +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/scss/tina4css/_typography.scss +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/scss/tina4css/_utilities.scss +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/scss/tina4css/_variables.scss +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/scss/tina4css/base.scss +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/scss/tina4css/colors.scss +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/scss/tina4css/tina4.scss +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/seeder/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/service/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/session/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/session_handlers/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/session_handlers/mongodb_handler.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/session_handlers/redis_handler.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/session_handlers/valkey_handler.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/swagger/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/templates/components/crud.twig +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/templates/docker/distroless/Dockerfile +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/templates/docker/poetry/Dockerfile +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/templates/docker/python/Dockerfile +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/templates/docker/uv/Dockerfile +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/templates/errors/302.twig +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/templates/errors/401.twig +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/templates/errors/403.twig +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/templates/errors/404.twig +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/templates/errors/500.twig +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/templates/errors/502.twig +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/templates/errors/503.twig +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/templates/errors/base.twig +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/templates/frontend/README.md +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/templates/readme.md +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/test_client/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/translations/af/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/translations/af/LC_MESSAGES/messages.po +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/translations/en/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/translations/en/LC_MESSAGES/messages.po +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/translations/es/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/translations/es/LC_MESSAGES/messages.po +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/translations/fr/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/translations/fr/LC_MESSAGES/messages.po +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/translations/ja/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/translations/ja/LC_MESSAGES/messages.po +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/translations/zh/LC_MESSAGES/messages.mo +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/translations/zh/LC_MESSAGES/messages.po +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/validator/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/websocket/__init__.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/websocket/backplane.py +0 -0
- {tina4_python-3.11.17 → tina4_python-3.11.20}/tina4_python/wsdl/__init__.py +0 -0
|
@@ -900,6 +900,41 @@ def _split_on_pipe(expr: str) -> list[str]:
|
|
|
900
900
|
return parts
|
|
901
901
|
|
|
902
902
|
|
|
903
|
+
def _split_filter_name_and_path(fname: str) -> tuple[str, str]:
|
|
904
|
+
"""Split `first.groupSummary` into (`first`, `groupSummary`).
|
|
905
|
+
|
|
906
|
+
Returns (fname, "") when no structural `.` is present. The split
|
|
907
|
+
point must be outside parens, brackets, braces, and quotes so
|
|
908
|
+
filter args like ``number_format(1.5)`` or ``date("Y.m.d")`` don't
|
|
909
|
+
trip false splits.
|
|
910
|
+
|
|
911
|
+
Used by the filter-application loops to support `{{ x | first.foo }}`
|
|
912
|
+
syntax — apply the filter, then traverse the property path on the
|
|
913
|
+
filter's result. Parity with tina4-php's findDotOutsideParens().
|
|
914
|
+
"""
|
|
915
|
+
depth = 0
|
|
916
|
+
in_q = None
|
|
917
|
+
i = 0
|
|
918
|
+
n = len(fname)
|
|
919
|
+
while i < n:
|
|
920
|
+
ch = fname[i]
|
|
921
|
+
if in_q is not None:
|
|
922
|
+
if ch == in_q and (i == 0 or fname[i - 1] != "\\"):
|
|
923
|
+
in_q = None
|
|
924
|
+
i += 1
|
|
925
|
+
continue
|
|
926
|
+
if ch in ('"', "'"):
|
|
927
|
+
in_q = ch
|
|
928
|
+
elif ch in ("(", "[", "{"):
|
|
929
|
+
depth += 1
|
|
930
|
+
elif ch in (")", "]", "}"):
|
|
931
|
+
depth -= 1
|
|
932
|
+
elif ch == "." and depth == 0:
|
|
933
|
+
return fname[:i], fname[i + 1:]
|
|
934
|
+
i += 1
|
|
935
|
+
return fname, ""
|
|
936
|
+
|
|
937
|
+
|
|
903
938
|
def _parse_filter_chain(expr: str) -> tuple[str, list[tuple[str, list[str]]]]:
|
|
904
939
|
"""Parse 'variable | filter1 | filter2(arg)' into (variable, [(name, args)])."""
|
|
905
940
|
parts = _split_on_pipe(expr)
|
|
@@ -1685,6 +1720,20 @@ class Frond:
|
|
|
1685
1720
|
for fname, args in filters:
|
|
1686
1721
|
if fname in ("raw", "safe"):
|
|
1687
1722
|
continue
|
|
1723
|
+
|
|
1724
|
+
# Support `{{ x | first.foo.bar }}` — filter followed by
|
|
1725
|
+
# property access. Split on the first structural `.`; apply
|
|
1726
|
+
# the filter, then traverse the path on the result via a
|
|
1727
|
+
# synthetic context so we reuse _eval_expr's dotted/bracket
|
|
1728
|
+
# resolution.
|
|
1729
|
+
real_fname, tail_path = _split_filter_name_and_path(fname)
|
|
1730
|
+
fn = self._filters.get(real_fname) if tail_path else None
|
|
1731
|
+
if tail_path and fn is not None:
|
|
1732
|
+
value = fn(value, *args)
|
|
1733
|
+
value = _eval_expr("__frond_filter_tmp." + tail_path,
|
|
1734
|
+
{"__frond_filter_tmp": value})
|
|
1735
|
+
continue
|
|
1736
|
+
|
|
1688
1737
|
fn = self._filters.get(fname)
|
|
1689
1738
|
if fn:
|
|
1690
1739
|
value = fn(value, *args)
|
|
@@ -1738,6 +1787,24 @@ class Frond:
|
|
|
1738
1787
|
if fname not in self._allowed_filters:
|
|
1739
1788
|
continue # Silently skip blocked filter
|
|
1740
1789
|
|
|
1790
|
+
# Support `{{ x | first.foo.bar }}` — filter followed by
|
|
1791
|
+
# property access. Split on the first structural `.`; apply
|
|
1792
|
+
# the filter, then traverse the path on the result via a
|
|
1793
|
+
# synthetic context so we reuse _eval_expr's dotted/bracket
|
|
1794
|
+
# resolution. Done BEFORE the fast-path switch so chained
|
|
1795
|
+
# cases like `items|first.name` are always handled.
|
|
1796
|
+
real_fname, tail_path = _split_filter_name_and_path(fname)
|
|
1797
|
+
if tail_path:
|
|
1798
|
+
fn = self._filters.get(real_fname)
|
|
1799
|
+
if fn is not None:
|
|
1800
|
+
value = fn(value, *args)
|
|
1801
|
+
value = _eval_expr("__frond_filter_tmp." + tail_path,
|
|
1802
|
+
{"__frond_filter_tmp": value})
|
|
1803
|
+
continue
|
|
1804
|
+
# Fall through if the leading segment isn't a known
|
|
1805
|
+
# filter — lets legacy filter names with dots (unusual)
|
|
1806
|
+
# still hit the registered-filter lookup below.
|
|
1807
|
+
|
|
1741
1808
|
# Fast path for common no-arg filters
|
|
1742
1809
|
if not args:
|
|
1743
1810
|
if fname == "upper":
|
|
@@ -2302,6 +2369,15 @@ class Frond:
|
|
|
2302
2369
|
if self._sandbox and self._allowed_filters is not None:
|
|
2303
2370
|
if fname not in self._allowed_filters:
|
|
2304
2371
|
continue
|
|
2372
|
+
# Filter + property access: e.g. `items|first.name`.
|
|
2373
|
+
real_fname, tail_path = _split_filter_name_and_path(fname)
|
|
2374
|
+
if tail_path:
|
|
2375
|
+
fn = self._filters.get(real_fname)
|
|
2376
|
+
if fn is not None:
|
|
2377
|
+
value = fn(value, *args)
|
|
2378
|
+
value = _eval_expr("__frond_filter_tmp." + tail_path,
|
|
2379
|
+
{"__frond_filter_tmp": value})
|
|
2380
|
+
continue
|
|
2305
2381
|
fn = self._filters.get(fname)
|
|
2306
2382
|
if fn:
|
|
2307
2383
|
value = fn(value, *args)
|