Skip to main content

A Python engine for the Liquid template language.

Project description

Python Liquid

A Python engine for Liquid, the safe customer-facing template language for flexible web apps.
We follow Shopify/Liquid closely and test against the Golden Liquid test suite.

License
PyPi - Version conda-forge
Python versions PyPy versions
Tests Coverage
PyPI - Downloads


Table of Contents

Install

Install Python Liquid using Pipenv:

$ pipenv install -u python-liquid

Or pip:

$ pip install python-liquid

Or from conda-forge:

$ conda install -c conda-forge python-liquid

Links

Example

from liquid import Template

template = Template("Hello, {{ you }}!")
print(template.render(you="World"))  # "Hello, World!"
print(template.render(you="Liquid"))  # "Hello, Liquid!"

Related Projects

  • liquid-babel Internationalization and localization for Liquid templates.
  • LiquidScript: A JavaScript and TypeScript engine for Liquid with a similar high-level API to Python Liquid.
  • django-liquid: A Django template backend for Liquid. Render Liquid templates in your Django apps.
  • Flask-Liquid: A Flask extension for Liquid. Render Liquid templates in your Flask applications.
  • golden-liquid: A test suite for Liquid. See how various Liquid template engines compare to the reference implementation.

Compatibility

We strive to be 100% compatible with the reference implementation of Liquid, written in Ruby. That is, given an equivalent render context, a template rendered with Python Liquid should produce the same output as when rendered with Ruby Liquid.

See the known issues page for details of known incompatibilities between Python Liquid and Ruby Liquid, and please help by raising an issue if you notice an incompatibility.

Benchmark

You can run the benchmark using hatch run benchmark (or python -O scripts/performance.py if you don't have make) from the root of the source tree. On my ropey desktop computer with a Ryzen 5 1500X and Python 3.11.0, we get the following results.

Best of 5 rounds with 100 iterations per round and 60 ops per iteration (6000 ops per round).

lex template (not expressions): 1.2s (5020.85 ops/s, 83.68 i/s)
                    lex and parse: 5.0s (1197.32 ops/s, 19.96 i/s)
                        render: 1.4s (4152.92 ops/s, 69.22 i/s)
            lex, parse and render: 6.5s (922.08 ops/s, 15.37 i/s)

And PyPy3.7 gives us a decent increase in performance.

Best of 5 rounds with 100 iterations per round and 60 ops per iteration (6000 ops per round).

lex template (not expressions): 0.58s (10308.67 ops/s, 171.81 i/s)
                    lex and parse: 3.6s (1661.20 ops/s, 27.69 i/s)
                        render: 0.95s (6341.14 ops/s, 105.69 i/s)
            lex, parse and render: 4.6s (1298.18 ops/s, 21.64 i/s)

On the same machine, running rake benchmark:run from the root of the reference implementation source tree gives us these results.

/usr/bin/ruby ./performance/benchmark.rb lax

Running benchmark for 10 seconds (with 5 seconds warmup).

Warming up --------------------------------------
                parse:     3.000  i/100ms
            render:     8.000  i/100ms
    parse & render:     2.000  i/100ms
Calculating -------------------------------------
                parse:     39.072  (± 0.0%) i/s -    393.000  in  10.058789s
            render:     86.995  (± 1.1%) i/s -    872.000  in  10.024951s
    parse & render:     26.139  (± 0.0%) i/s -    262.000  in  10.023365s

I've tried to match the benchmark workload to that of the reference implementation, so that we might compare results directly. The workload is meant to be representative of Shopify's use case, although I wouldn't be surprised if their usage has changed subtly since the benchmark fixture was designed.

Contributing

Please see Contributing to Python Liquid.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_liquid-1.11.0.tar.gz (123.1 kB view details)

Uploaded Source

Built Distribution

python_liquid-1.11.0-py3-none-any.whl (203.6 kB view details)

Uploaded Python 3

File details

Details for the file python_liquid-1.11.0.tar.gz.

File metadata

  • Download URL: python_liquid-1.11.0.tar.gz
  • Upload date:
  • Size: 123.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.2

File hashes

Hashes for python_liquid-1.11.0.tar.gz
Algorithm Hash digest
SHA256 8523a8afa20da993520e744d5250514bcaf43fa7cdfb99a7f73ddfbc16f0de07
MD5 e24bf9f4314bbc04a0ff7ab8cf4d5c79
BLAKE2b-256 a9a7d3ea7c2dbd608107c0f36dd361df1a1bfaff82e201b34ec7f690b327109f

See more details on using hashes here.

File details

Details for the file python_liquid-1.11.0-py3-none-any.whl.

File metadata

File hashes

Hashes for python_liquid-1.11.0-py3-none-any.whl
Algorithm Hash digest
SHA256 168a45d9d78cfd3f6cbe256824cd4ccd751be2b9e953f47a092985f9e2cebba0
MD5 92d7f1162aa995d923ce210efedc0fa6
BLAKE2b-256 245aecd1c0f5071b37f8a64a1e8fa2c628c12c63d11f3442785aac02f59a907d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page