gpt4 book ai didi

python - 如何在 Python 中获取 JSON 格式的持久规则?

转载 作者:行者123 更新时间:2023-12-05 06:55:59 25 4
gpt4 key购买 nike

我们的 Python 应用程序当前从 YAML 文件(很快将成为数据库或 Redis 缓存)加载 Durable 规则,然后将该 YAML 转换为 JSON,然后将 JSON 对象发送到 Durable Rules 引擎进行处理。

我正在重构这个规则引擎服务,并且还想在我的单元测试中使用规则的 Python 版本,基本上将 Durable README 示例合并到我们的引擎中。在 Python 中创建规则集后,如何将该规则集序列化为 JSON 对象?

下面是一个有效的 pytest 单元测试,除了最后一行,我想在其中序列化规则。

最终目标是能够以 Python 格式(可读性强)编写规则,然后将其保存为 JSON(可读性较差)。


import pytest

from durable.lang import *
from durable.engine import Ruleset

# Tests derived from examples on Durable website.
printed_value = '?'
def mock_print(s):
global printed_value
printed_value = s
return s

def test_hello(builder):
global ruleset
with ruleset('test_hello'):
@when_all(m.subject == 'World')
def say_hello(c):
mock_print('Hello {0}'.format(c.m.subject))

post('test_hello', { 'subject': 'World' })
assert printed_value == 'Hello World'

rule_as_json = ???

我什至找不到描述 Durbale 规则集 JSON 格式及其所有功能的位置。该文档本身就很有用。

更新 1:

我找到了durable支持的JSON结构的文档。仍然不知道如何将 python 转换为 JSON。

https://github.com/jruizgit/rules/blob/master/docs/json/reference.md

更新 2:

终于找到durable.lang库在源码中的位置了:

libpy\durable\lang.py

这段代码看起来很有希望遵循以接近答案。

def post(ruleset_name, message, complete = None):
return get_host().post(ruleset_name, message, complete)

最佳答案

这里有一个解决方案:

from durable.lang import *

def test():
# global ruleset
with ruleset("test_hello"):

@when_all(m.subject == "World")
def say_hello(c):
mock_print("Hello {0}".format(c.m.subject))

post("test_hello", {"subject": "World"})
assert printed_value == "Hello World"

rule_as_json = get_host().get_ruleset("test_hello").get_definition()
return rule_as_json

并在 iPython 中执行:

import durablejson as dj

dj.test()
{'r_0': {'all': [{'m': {'subject': 'World'}}]}}

关于python - 如何在 Python 中获取 JSON 格式的持久规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65207420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com