OPA Rego 语言和运行时的 Python 接口
项目描述
regopy
Rego 是 Open Policy Agent 项目的原生查询语言。如果您想了解更多关于 Rego 作为语言及其各种用例的信息,我们建议您查阅 OPA 提供的上述语言文档。
此模块是 Microsoft 开发并维护的 Rego 语言编译器和运行时开源跨平台 C++ 实现 rego-cpp
的包装器。您可以在这里了解更多关于该项目的信息。在这个包装器中,我们尽可能地提供 ReGo 查询引擎的惯用 Python 接口。我们希望这个项目对希望在 Python 环境中利用 Rego 力量的用户有所帮助。
警告:虽然这个项目已经发展到支持完整的 ReGo 语言(见下方的语言支持),但我们不支持所有内置函数。尽管如此,我们已经验证了它与 OPA ReGo 测试套件的兼容性。即使如此,它仍应被视为实验性软件,并应谨慎使用。
示例用法
from regopy import Interpreter
rego = Interpreter()
print(rego.query("x=5;y=x + (2 - 4 * 0.25) * -3 + 7.4"))
# {"bindings":{"x":5, "y":9.5}}
input0 = {
"a": 10,
"b": "20",
"c": 30.0,
"d": True
}
data0 = {
"one": {
"bar": "Foo",
"baz": 5,
"be": True,
"bop": 23.4
},
"two": {
"bar": "Bar",
"baz": 12.3,
"be": False,
"bop": 42
}
}
data1 = {
"three": {
"bar": "Baz",
"baz": 15,
"be": True,
"bop": 4.23
}
}
module = '''
package objects
rect := {`width`: 2, "height": 4}
cube := {"width": 3, `height`: 4, "depth": 5}
a := 42
b := false
c := null
d := {"a": a, "x": [b, c]}
index := 1
shapes := [rect, cube]
names := ["prod", `smoke1`, "dev"]
sites := [{"name": "prod"}, {"name": names[index]}, {"name": "dev"}]
e := {
a: "foo",
"three": c,
names[2]: b,
"four": d,
}
f := e["dev"]
'''
rego.set_input(input0)
rego.add_data(data0)
rego.add_data(data1)
rego.add_module("objects", module)
print(rego.query("x=[data.one, input.b, data.objects.sites[1]]"))
# {"bindings":{"x":[{"bar":"Foo", "baz":5, "be":true, "bop":23.4}, "20", {"name":"smoke1"}]}}
语言支持
我们支持 OPA 定义的 ReGo v0.68.0 版本,以下语法
module = package { import } policy
package = "package" ref
import = "import" ref [ "as" var ]
policy = { rule }
rule = [ "default" ] rule-head { rule-body }
rule-head = ( ref | var ) ( rule-head-set | rule-head-obj | rule-head-func | rule-head-comp )
rule-head-comp = [ assign-operator term ] [ "if" ]
rule-head-obj = "[" term "]" [ assign-operator term ] [ "if" ]
rule-head-func = "(" rule-args ")" [ assign-operator term ] [ "if" ]
rule-head-set = "contains" term [ "if" ] | "[" term "]"
rule-args = term { "," term }
rule-body = [ "else" [ assign-operator term ] [ "if" ] ] ( "{" query "}" ) | literal
query = literal { ( ";" | ( [CR] LF ) ) literal }
literal = ( some-decl | expr | "not" expr ) { with-modifier }
with-modifier = "with" term "as" term
some-decl = "some" term { "," term } { "in" expr }
expr = term | expr-call | expr-infix | expr-every | expr-parens | unary-expr
expr-call = var [ "." var ] "(" [ expr { "," expr } ] ")"
expr-infix = expr infix-operator expr
expr-every = "every" var { "," var } "in" ( term | expr-call | expr-infix ) "{" query "}"
expr-parens = "(" expr ")"
unary-expr = "-" expr
membership = term [ "," term ] "in" term
term = ref | var | scalar | array | object | set | membership | array-compr | object-compr | set-compr
array-compr = "[" term "|" query "]"
set-compr = "{" term "|" query "}"
object-compr = "{" object-item "|" query "}"
infix-operator = assign-operator | bool-operator | arith-operator | bin-operator
bool-operator = "==" | "!=" | "<" | ">" | ">=" | "<="
arith-operator = "+" | "-" | "*" | "/" | "%"
bin-operator = "&" | "|"
assign-operator = ":=" | "="
ref = ( var | array | object | set | array-compr | object-compr | set-compr | expr-call ) { ref-arg }
ref-arg = ref-arg-dot | ref-arg-brack
ref-arg-brack = "[" ( scalar | var | array | object | set | "_" ) "]"
ref-arg-dot = "." var
var = ( ALPHA | "_" ) { ALPHA | DIGIT | "_" }
scalar = string | NUMBER | TRUE | FALSE | NULL
string = STRING | raw-string
raw-string = "`" { CHAR-"`" } "`"
array = "[" term { "," term } "]"
object = "{" object-item { "," object-item } "}"
object-item = ( scalar | ref | var ) ":" term
set = empty-set | non-empty-set
non-empty-set = "{" term { "," term } "}"
empty-set = "set(" ")"
[!NOTE] 此语法对应于启用了
rego.v1
的 ReGo(有关更多信息,请参阅 OPA v1.0)。
定义
[] optional (zero or one instances)
{} repetition (zero or more instances)
| alternation (one of the instances)
() grouping (order of expansion)
STRING JSON string
NUMBER JSON number
TRUE JSON true
FALSE JSON false
NULL JSON null
CHAR Unicode character
ALPHA ASCII characters A-Z and a-z
DIGIT ASCII characters 0-9
CR Carriage Return
LF Line Feed
内置函数
目前支持以下内置功能
聚合
数组
位
类型转换
编码
图
数字
对象
正则表达式
语义版本
集合
字符串
时间
类型
单位
UUID
- 杂项
opa.runtime
打印
与OPA Rego Go实现的兼容性
我们的目标是实现并保持与参考Go实现的完全兼容性。我们开发了一个测试驱动程序,它运行相同的测试并验证我们产生相同的输出。在这个阶段,我们通过了所有非内置特定的测试套件,这些测试套件是从OPA存储库克隆的。要使用可用于测试的OPA测试构建,请使用以下预设之一
release-clang-opa
release-opa
目前,我们没有完全通过以下测试套件
crypto*
glob*
graphql
invalidkeyerror
json*
(除jsonbuiltins
外)jwt*
net*
planner-ir
providers-aws
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
regopy-0.4.5.tar.gz (6.2 MB 查看哈希值)
构建分发
regopy-0.4.5-cp312-cp312-win32.whl (1.9 MB 查看哈希值)
regopy-0.4.5-cp311-cp311-win32.whl (1.9 MB 查看哈希值)
regopy-0.4.5-cp310-cp310-win32.whl (1.9 MB 查看哈希值)
regopy-0.4.5-cp39-cp39-win32.whl (1.9 MB 查看哈希值)
regopy-0.4.5-cp38-cp38-win32.whl (1.9 MB 查看哈希值)
regopy-0.4.5-cp37-cp37m-win32.whl (1.9 MB 查看哈希值)
关闭
regopy-0.4.5.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6478ad412136a44f43fcb2a303f44691eef54aeba7a1692f0e4568bb9f2c40f0 |
|
MD5 | d6b0bc153c676a2ea8a8a6042d6da99c |
|
BLAKE2b-256 | 520b4589087dd5b4905bab6b1c78f59342195c8a56cd176d4c1ee0c34a2b5863 |
关闭
regopy-0.4.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 61a84d3a61398e19879e528e1d6bf4c947666ccaba8f2fc310c53edf2aeae5eb |
|
MD5 | cbed3506096b37545df625d6231f5336 |
|
BLAKE2b-256 | a7844ec0ba539318b1653dc286c38f13feeeed52e8c6e7c080f11112df093b69 |
关闭
regopy-0.4.5-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4e1a2ff058f21baf3298d381cab46f1722979d00fb79ee9b87abfd3382c330fb |
|
MD5 | 47e4e1c7f2171968b3a817f7e0f4432c |
|
BLAKE2b-256 | 103874bd920cac26d82a1c43b8081e67212409ae17ec98aedd9e58affab6a348 |
关闭
regopy-0.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 919d3fd1cc6daffb5157e66a19ee437afb6725924e78096673df319013f1c34a |
|
MD5 | 96e5dc224ee81be1064c4caa6f173828 |
|
BLAKE2b-256 | f6b32750dcee3d6231907042d4cb7c2724957206e5ea76efdf47661d50e4eec1 |
关闭
regopy-0.4.5-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 113f728f1de03759579830898c61c6dca17028888f955085593ca6a5f7171208 |
|
MD5 | 1180367e8d284c95443abc2c5d80add2 |
|
BLAKE2b-256 | 580ce127ea3328b17b6d440f63da96709c3c82af929a525a2c8ed0d989172331 |
关闭
regopy-0.4.5-cp312-cp312-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 356b5335f3791e14a104591fac9d4e7cc500027449791b594cdbb0db4db3fd47 |
|
MD5 | c0d87a5b1e5bb703a5607871380518f8 |
|
BLAKE2b-256 | 28344de76ea830f19c4c6b1a6ae778ad545d9e44c43af492ab356bce69ea1962 |
关闭
哈希值 用于 regopy-0.4.5-cp312-cp312-musllinux_1_2_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f218d53fe280d8355fdb34f3443c8a5cb203046541ccb7fcadae5711102a5725 |
|
MD5 | e12bd191bd4dc39d3ef4121756706b12 |
|
BLAKE2b-256 | 295b40e0dd635bc2e59f34afa875602c8f339375f46ab9cde5f4fa1dcf65e9e9 |
关闭
哈希值 用于 regopy-0.4.5-cp312-cp312-musllinux_1_2_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2a7b77649ec23b8e80cdbca2f4c9b4c864b7b85bc46bef2395c7b3cfd0155b6c |
|
MD5 | 8acee521b53c4c516b98c916803edd6f |
|
BLAKE2b-256 | 411c07887aefac0a48756bb204ecd4ead17bd54d74a48f8e22f784e5dd7fb232 |
关闭
哈希值 用于 regopy-0.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5ac8d02c9afe0b5d1338d2595dd01cb3298f7fb7364abd4142f7cc67518d75b3 |
|
MD5 | b59ce7cf37832e19436e6deaec3c52c8 |
|
BLAKE2b-256 | abbf8cb057a20c9d130549e518341d23f4cc806875fa69ddb7c80e806411d6f3 |
关闭
哈希值 用于 regopy-0.4.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d5e90814006529dba585022215f93cdad6a54cb184330a634f385a2e6a87b89d |
|
MD5 | 3bf97eb1ec9c109b7183410bc4c4fc88 |
|
BLAKE2b-256 | 3310a0b30f7a82c35f7b4d2a37a7a868bca9e1d6100445c4f5b3df204145419b |
关闭
哈希值 用于 regopy-0.4.5-cp312-cp312-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e56e62d564af0ab1216c196e481ecca154e902befa9e6d46cb76d8e9dca00748 |
|
MD5 | 68b96ee2387ff9c9d830d67ea3abf678 |
|
BLAKE2b-256 | f6473701885f6bbdd271b9718f1f43858217329b7e53cdee645b0ef4c0789b7c |
关闭
哈希值 用于 regopy-0.4.5-cp311-cp311-musllinux_1_2_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 64be4ba326949b790b8dc568ce854a6a66eb825cf654efd5889ff95500295cd8 |
|
MD5 | 13fdfaf3c64a49c46ab3a0b8cd8a6b27 |
|
BLAKE2b-256 | 27d245832863772188d89b80105d6a97388ce77a02e425aff235867096e02a47 |
关闭
哈希值 用于 regopy-0.4.5-cp311-cp311-musllinux_1_2_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cd9c1aabe22d9ae15209919bd8ffab5c129ee923c8b1688f73ed7cd5f23f8890 |
|
MD5 | 14d04339a1dd8868f5e811726ed46110 |
|
BLAKE2b-256 | 347745b2d570354408246d8322c79fb671c2d104822edb32d601efee0f7b2c36 |
关闭
哈希值 用于 regopy-0.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | aa04e7143e2cb393aa42da6386cafeaa0998d8f4c5c2920fa956287b8500b3df |
|
MD5 | 6481a1abeab5a280491e8349725d2285 |
|
BLAKE2b-256 | ffd27ec0e3ef4b2e12fe8ae2c5bdba227b6d7091be10a255adff4fd1d2c54b1e |
关闭
哈希值 用于 regopy-0.4.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 26598b4fbbe6d8bbf1735324b6d3024dc578d13bdc0efcd7e394588781396da6 |
|
MD5 | 9cdba1a0764a1a26a2a3635590154f6a |
|
BLAKE2b-256 | a2f2c6f3f978f51fe0a224a33f028a5ec80399d87f1810fa31a6da233cf3e488 |
关闭
哈希值 用于 regopy-0.4.5-cp311-cp311-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 131592dd5f31df760d45d358f4c76f373f6cd30675decf1186c45c9328dcee52 |
|
MD5 | 6681158909d53127afb94c29789f3a34 |
|
BLAKE2b-256 | ba4c54a8daa0275fae8a01b438755c68ad4a14ba83a27836de7f005903402cfb |
关闭
哈希值 用于 regopy-0.4.5-cp310-cp310-musllinux_1_2_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bf4b79775ddf396fa8c59294f0a788fe8ff4dc70c319f4280eecdc4e67fe52a8 |
|
MD5 | acf01998006a8ab06ba82fb24c61efa6 |
|
BLAKE2b-256 | 584efb848f2da19b496c45710a5cccec981fcae4c8bd6bd47ed08883c6f45353 |
关闭
哈希值 用于 regopy-0.4.5-cp310-cp310-musllinux_1_2_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 86526a6f3b208fd0c6f4dbbe90cd710144b7150b14b8b30a7a448b9498a35eb7 |
|
MD5 | 2056734411fb8c69604f06ca17203b22 |
|
BLAKE2b-256 | 4167e2d2f13ab08a81fd724008ea75627fe75db8a2beebf8dae84c872b5e366d |
关闭
哈希值 用于 regopy-0.4.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 86582d3b16063e93000a63d33b42923b3d751499c54e24a8ee47f2270e41f4cb |
|
MD5 | e85e4c9c93a3703268876bd9a04c3b40 |
|
BLAKE2b-256 | 2e9f2e9bae62723ca1053d538c7df68b1c76a99d07c3202fa23ecedd95ca4608 |
关闭
哈希值 用于 regopy-0.4.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 962e7ebdde118323cf9f89df7ada59a560243f8e2071953d409db233a628d06a |
|
MD5 | bbcaad8607e7147b6c580f7c174f5ff8 |
|
BLAKE2b-256 | 95e55e2c96d1b1afa03e2422f0147ccdf6689b2f77a52d62ee92e361b4652e7f |
关闭
哈希值 用于 regopy-0.4.5-cp310-cp310-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 14993dd4c8776be0c36be7237fece0d6d3ff2ba6abf890c10246e8c79babe1d9 |
|
MD5 | d36d51b63d890e216906c6c91dca4c8b |
|
BLAKE2b-256 | 889d85596d52f65cf7ac53a153ba63fdedb8810191e71872d5231ef2e79b76e3 |
关闭
哈希值 用于 regopy-0.4.5-cp39-cp39-musllinux_1_2_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 37d19fcf3a5dc5184d69aa07e90a7fb53dd9f208e933b631259830b3d4f6a9b3 |
|
MD5 | 3d52402591a9f2bd6e54312f96f73a32 |
|
BLAKE2b-256 | 7b552fe5e4837c89113b22119c0c40a452666697121eb446ebe5f372a5c7f901 |
关闭
哈希值 用于 regopy-0.4.5-cp39-cp39-musllinux_1_2_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 95ac1c695087617a08694c188c69a7b00b7dd3e1a1e228394b3db1db0cac0f47 |
|
MD5 | ac5c79c4747a54c4478cbd166616ea96 |
|
BLAKE2b-256 | e580ef9ce2b936671e9a410d4b1a409e7b8644d2480f4ed5a16880aa1957600f |
关闭
哈希值 用于 regopy-0.4.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 500cee2c598566e6255ea4727fe2ab1280eb12c0f8258abf97d5fef0ef2b0a3d |
|
MD5 | 3acc11170e5c12afb142c4b7f61ff1fb |
|
BLAKE2b-256 | 12c403206ef6db06a5cff7411cf42bc8f5978dc9e32a0d557ab377d920bde917 |
关闭
哈希值 用于 regopy-0.4.5-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c85304126ba15c90c75847bd0464d106816b56e7fff917c3a19cfb49105b0680 |
|
MD5 | 022f5b08395796e7eb1a1b50dbd5029d |
|
BLAKE2b-256 | 52637c81274853ae77180899a57ca7025c957876d97df8eb291ecb61d6c82c33 |
关闭
哈希值 用于 regopy-0.4.5-cp38-cp38-musllinux_1_2_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1d0693dfe92df9308d8ba2cb756c8593e55c468eb6cda914235867bfd19d2f3a |
|
MD5 | 5753bb19949983e47d0535ac90e49adb |
|
BLAKE2b-256 | 683934b43c694d3e7d46e02f5e44f8c91988a02b7c187ae31a021b5854f51daa |
关闭
哈希值 用于 regopy-0.4.5-cp38-cp38-musllinux_1_2_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a6c37a630398e1ffaed7dcf36c9177db5fcbf2186c45eb36075164c9db20c9c7 |
|
MD5 | a1f35afd3374e66d4eae96baa8c2d7b2 |
|
BLAKE2b-256 | 91bd2e305b8247811abd510090400b70df6a8bb3d4eed7f78c1f6f94cb670890 |
关闭
哈希值 用于 regopy-0.4.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 89ce417681c1545ac91e93b4e515a5f1db88f099748dcf8a61526ed6263af90b |
|
MD5 | 5bafa64c704910671c66fac81efce64c |
|
BLAKE2b-256 | 9ae41610c48dd7b74cb32caf8cc562a3b250b49ff4f2e2477cca8f9428b61843 |
关闭
哈希值 用于 regopy-0.4.5-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4380391c1bcab91c24292976e132a4e76cf333239b71754fa0c2607a3c0454b9 |
|
MD5 | ec2fffbbbd76ec5c688d8b329f460dcc |
|
BLAKE2b-256 | dcf53634836664ee6da07f78da5d9ffee6616ea03b22cf143337a16b260448da |
关闭
哈希值 用于 regopy-0.4.5-cp37-cp37m-musllinux_1_2_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e19eee71b983d0e862d09502ae61b0f280dc982c78cf0b4fcdd002c585c26d8c |
|
MD5 | b7667cf3c47e236f14ca4ba9f764ed98 |
|
BLAKE2b-256 | ec18d0e1122079c958d340e98548af66f3304a55cf015c06498fdf5b31477551 |
关闭
哈希值 用于 regopy-0.4.5-cp37-cp37m-musllinux_1_2_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 160d3a9e97c2d47737ef28f3945c256af7c04bbe53334a1d56cbfb50757a2643 |
|
MD5 | ce22727b7d0d9a6e04049da5c0503cf5 |
|
BLAKE2b-256 | 933d36659301f58f4588fcd7a6ffa541d2bb2ad157e3f725865abbb1691d25cc |
关闭
哈希值 用于 regopy-0.4.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7cb1c0e528429ce598ac68e2c412635688819d2fb9af59c781e8cd647b4828e6 |
|
MD5 | 43696351457e1d4e21afbd25eded4198 |
|
BLAKE2b-256 | a63699ad2bdd5c8b797cc7ee4660b6d1ad1c1783d66ea4925be14c8386c4fdc7 |
关闭
哈希值 用于 regopy-0.4.5-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 59c0c9db18882ad9d884d4d800b6f9c96398d27869b01f2db8dfb35e8dbf8048 |
|
MD5 | 537fd3e33e0cb4ad7036a3858b109c04 |
|
BLAKE2b-256 | a0d1165ddfdb2fe657ffe8ce3b900ad96c9591cb64041c5f718f885f03577d56 |