A safe and extensible expression engine for Python with template rendering capabilities
Project description
QData Expression
安全、可扩展的 Python 表达式引擎
由 广东轻亿云软件科技有限公司 开发
「轻易云数据集成平台」核心组件
🌟 关于轻易云数据集成平台
数据集成,简单看得见
轻易云是一款企业级数据集成平台,专注于帮助企业快速、高效地打通各类业务系统之间的数据通道。
✨ 平台亮点
- 🔌 即插即用:无需复杂开发,配置即连接,支持 500+ 主流应用系统对接
- 👁️ 全程可视:数据流动、转换过程、执行状态一目了然,如同"物流跟踪"般清晰透明
- ⚡ 高性能引擎:基于优化的执行引擎,轻松处理复杂表达式求值
- 🛡️ 企业级可靠:完善的安全沙箱机制,防止代码注入和恶意操作
- 🧩 灵活扩展:插件化架构设计,支持自定义函数和过滤器扩展
🎯 适用场景
| 场景 | 描述 |
|---|---|
| 动态计算 | 业务规则引擎中的动态表达式求值 |
| 模板渲染 | 配置化的消息模板、报告生成 |
| 数据转换 | ETL 流程中的字段计算与转换 |
| 公式计算 | 用户自定义公式的安全执行 |
QData Expression 是轻易云数据集成平台的核心表达式引擎,现已开源,助力开发者构建安全、灵活的动态计算能力。
📖 目录
特性
- 🛡️ 安全沙箱:内置安全机制,防止代码注入和恶意操作
- 📝 表达式求值:支持复杂的数学和逻辑表达式
- 🎨 模板引擎:基于 Jinja2 的强大模板渲染
- 📦 内置函数:丰富的内置函数库(数学、字符串、日期、逻辑等)
- 🔧 可扩展:易于注册自定义函数和过滤器
- ⚡ 高性能:表达式缓存和优化的执行引擎
- 🎯 类型安全:完整的类型提示支持
🚀 快速开始
安装
pip install qdata-expression
第一个表达式
from qdata_expr import ExpressionEngine, evaluate, render_template
# 创建表达式引擎
engine = ExpressionEngine()
# 求值表达式
result = engine.evaluate("2 + 3 * 4")
print(result) # 14
# 使用上下文变量
context = {"price": 100, "quantity": 5}
result = engine.evaluate("price * quantity", context)
print(result) # 500
# 使用内置函数
result = engine.evaluate("abs(-5) + round(3.14, 1)")
print(result) # 8.1
# 模板渲染
result = render_template("Hello, {{ name }}!", {"name": "World"})
print(result) # Hello, World!
核心概念
| 概念 | 描述 |
|---|---|
| 表达式引擎 (ExpressionEngine) | 安全求值数学和逻辑表达式 |
| 模板引擎 (TemplateEngine) | 基于 Jinja2 的模板渲染 |
| 安全沙箱 (Sandbox) | 防止不安全操作的保护层 |
| 上下文解析器 (ContextResolver) | 嵌套路径的变量解析 |
| 函数注册表 (FunctionRegistry) | 管理内置和自定义函数 |
📦 安装
# PyPI 安装
pip install qdata-expression
# 源码安装
git clone https://github.com/qeasy/qdata-expression.git
cd qdata-expression
pip install -e .
# 开发依赖
pip install -e ".[dev]"
示例与文档
- 完整用法示例请见
./examples/ - 详细文档请见
./docs/
🧪 测试
# 运行所有测试
pytest
# 运行带覆盖率测试
pytest --cov=qdata_expr --cov-report=html
📄 许可与商业政策
🔓 开源协议
本项目采用 GNU Affero General Public License v3.0 (AGPL-3.0) 开源协议。
- ✅ 个人学习/研究:完全免费,无需授权
- ✅ 开源项目:可自由使用,需遵守 AGPL-3.0 条款
- ✅ 修改与分发:允许修改和重新分发,但必须保持开源
重要:如果你修改本软件并提供网络服务(包括内部使用),根据 AGPL-3.0 条款,你必须公开你的修改源代码。
💼 商业用途
任何商业用途必须单独购买商业许可,包括但不限于:
- ❌ 企业/公司在生产环境中使用
- ❌ 提供基于本软件的商业服务或 SaaS
- ❌ 集成到商业产品中销售
- ❌ 超过 5 个用户的组织使用
- ❌ 任何以盈利为目的的部署和使用
商业许可咨询:📧 vincent@qeasy.cloud
📋 许可文件
- 开源许可:LICENSE - AGPL-3.0 完整条款
- 商业许可:COMMERCIAL-LICENSE.txt - 商业授权详情
⚠️ 重要提示
未经授权的商业使用将构成版权侵权,我们保留追究法律责任的权利。
详细说明请查看:COMMERCIAL-LICENSE.txt
🏢 关于轻易云数据集成平台
广东轻亿云软件科技有限公司
专注数据集成与处理,提供企业级 ETL/ELT 解决方案
🌐 官网:https://www.qeasy.cloud
📧 开源项目:opensource@qeasy.cloud
📧 商业咨询:vincent@qeasy.cloud
Powered by 广东轻亿云软件科技有限公司
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file qdata_expression-0.1.0.tar.gz.
File metadata
- Download URL: qdata_expression-0.1.0.tar.gz
- Upload date:
- Size: 112.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b1522f0b1915a84eb88cb760b3e9e6849f0c18670942ac5b584234fa74fcf8e6
|
|
| MD5 |
e8aadedf143a40e36e0bc8debf98082f
|
|
| BLAKE2b-256 |
1b36cb07598ad96ddc97121d6e5c15f39619ddc8a9700266cedc2ccf7fa8de08
|
Provenance
The following attestation bundles were made for qdata_expression-0.1.0.tar.gz:
Publisher:
publish.yml on vincent067/qdata-expression
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qdata_expression-0.1.0.tar.gz -
Subject digest:
b1522f0b1915a84eb88cb760b3e9e6849f0c18670942ac5b584234fa74fcf8e6 - Sigstore transparency entry: 1231224224
- Sigstore integration time:
-
Permalink:
vincent067/qdata-expression@f787a3d4a910c182d4a56c7a8641d9f2e8afe3af -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/vincent067
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f787a3d4a910c182d4a56c7a8641d9f2e8afe3af -
Trigger Event:
release
-
Statement type:
File details
Details for the file qdata_expression-0.1.0-py3-none-any.whl.
File metadata
- Download URL: qdata_expression-0.1.0-py3-none-any.whl
- Upload date:
- Size: 56.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8266ae3cdf89fe4aa8cb8a7007ad4f8665351d013ac1d83ce3ef38cb193a9084
|
|
| MD5 |
225ca8a1d003bb5165f881a3b2c6ac0f
|
|
| BLAKE2b-256 |
89e517d9d82b864decf5b683abc18e6f6d98d3d562d05f49f53226584cf0e042
|
Provenance
The following attestation bundles were made for qdata_expression-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on vincent067/qdata-expression
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qdata_expression-0.1.0-py3-none-any.whl -
Subject digest:
8266ae3cdf89fe4aa8cb8a7007ad4f8665351d013ac1d83ce3ef38cb193a9084 - Sigstore transparency entry: 1231224239
- Sigstore integration time:
-
Permalink:
vincent067/qdata-expression@f787a3d4a910c182d4a56c7a8641d9f2e8afe3af -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/vincent067
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f787a3d4a910c182d4a56c7a8641d9f2e8afe3af -
Trigger Event:
release
-
Statement type: