Skip to main content

XPR expression language - Python runtime

Project description

xpr-python — XPR Expression Language for Python

CI XPR spec conformance License: MIT

XPR is a sandboxed cross-language expression language for data pipeline transforms. This is the Python runtime.

Install

pip install xpr-lang

Requires Python 3.10+.

Quick Start

from xpr import Xpr

engine = Xpr()

engine.evaluate('items.filter(x => x.price > 50).map(x => x.name)', {
    'items': [
        {'name': 'Widget', 'price': 25},
        {'name': 'Gadget', 'price': 75},
        {'name': 'Doohickey', 'price': 100},
    ]
})
# → ["Gadget", "Doohickey"]

API

evaluate(expression, context=None)

Evaluates an XPR expression against an optional context object.

from xpr import Xpr

engine = Xpr()

engine.evaluate('1 + 2')                          # → 3
engine.evaluate('user.name', {'user': {'name': 'Alice'}})  # → "Alice"
engine.evaluate('items.length', {'items': [1, 2, 3]})      # → 3

Returns the result as object. Raises XprError on parse or evaluation errors.

add_function(name, fn)

Register a custom function callable from expressions:

from xpr import Xpr

engine = Xpr()

engine.add_function('double', lambda x: x * 2)
engine.add_function('greet', lambda name: f'Hello, {name}!')

engine.evaluate('double(21)')           # → 42
engine.evaluate('greet("World")')       # → "Hello, World!"
engine.evaluate('items.map(x => double(x))', {'items': [1, 2, 3]})  # → [2, 4, 6]

Built-in Functions

Math: round, floor, ceil, abs, min, max

Type: type, int, float, string, bool

String methods: .len(), .upper(), .lower(), .trim(), .startsWith(), .endsWith(), .contains(), .split(), .replace(), .slice(), .indexOf(), .repeat(), .trimStart(), .trimEnd(), .charAt(), .padStart(), .padEnd()

Array methods: .map(), .filter(), .reduce(), .find(), .some(), .every(), .flatMap(), .sort(), .reverse(), .length, .includes(), .indexOf(), .slice(), .join(), .concat(), .flat(), .unique(), .zip(), .chunk(), .groupBy()

Object methods: .keys(), .values(), .entries(), .has()

Utility: range()

v0.2 Features

Let Bindings: Immutable scoped bindings allow you to define and reuse values within expressions:

engine.evaluate('let x = 1; let y = x + 1; y')  # → 2
engine.evaluate('let items = [1, 2, 3]; items.map(x => x * 2)', {})  # → [2, 4, 6]

Spread Operator: Spread syntax for arrays and objects enables composition and merging:

engine.evaluate('[1, 2, ...[3, 4]]')  # → [1, 2, 3, 4]
engine.evaluate('{...{a: 1}, b: 2}')  # → {'a': 1, 'b': 2}

Conformance

This runtime supports Level 1–3 (all conformance levels):

  • Level 1: Literals, arithmetic, comparison, logic, ternary, property access, function calls
  • Level 2: Arrow functions, collection methods, string methods, template literals
  • Level 3: Pipe operator (|>), optional chaining (?.), nullish coalescing (??)

v0.2 additions: Let bindings, spread operator, 20 new built-in methods (10 array, 7 string, 2 object, 1 global)

Passes all conformance tests (Levels 1–3 plus v0.2 features).

Specification

See the XPR Language Specification for the full EBNF grammar, type system, operator precedence, and conformance test suite.

License

MIT

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

xpr_lang-0.3.0.tar.gz (41.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

xpr_lang-0.3.0-py3-none-any.whl (18.1 kB view details)

Uploaded Python 3

File details

Details for the file xpr_lang-0.3.0.tar.gz.

File metadata

  • Download URL: xpr_lang-0.3.0.tar.gz
  • Upload date:
  • Size: 41.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for xpr_lang-0.3.0.tar.gz
Algorithm Hash digest
SHA256 0463210b83778fb24bb6c40923a545104490f8f7f57f2b510b86986d4d7df39d
MD5 1404f0b859eca63c3280b5ff2ce4f572
BLAKE2b-256 68f0eddb4034a9df1f77f8a5f93fbf4a28efd0dd98a2adda8556f242d6b6a42c

See more details on using hashes here.

Provenance

The following attestation bundles were made for xpr_lang-0.3.0.tar.gz:

Publisher: publish.yml on xpr-lang/xpr-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xpr_lang-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: xpr_lang-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 18.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for xpr_lang-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ace6d3f0073a6528e7028f99fda9a6a91d939f7e20d4e60247c9f1a7ccc4674d
MD5 9505c23904971e16d7be9b53763d4d12
BLAKE2b-256 91e4d7b6255ed5d5a0d874855f036777bf96e29c630494a4daabbed7e6d8e6e0

See more details on using hashes here.

Provenance

The following attestation bundles were made for xpr_lang-0.3.0-py3-none-any.whl:

Publisher: publish.yml on xpr-lang/xpr-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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