Python V1 · Deprecated
Complete examples
Complete examples in the Python V1 binding.The Python V1 complete examples reference continues the Python V1 overview.
Complete example
from maelys_datalog import Engine, Predicate, PRED_EDB, PRED_IDB, PRED_QUERY
with Engine() as engine:
engine.register_domain('document_access', [
Predicate('owns', 2, PRED_EDB),
Predicate('allow', 2, PRED_IDB | PRED_QUERY),
])
ruleset = engine.load_inline_ruleset(
'document_access', 'doc.main',
'allow(User, Document) :- owns(User, Document).\n')
edb = ruleset.edb()
edb.add_fact('owns', ['alice', 'roadmap.pdf'])
result = ruleset.solve(edb)
print(result.enumerate_predicate_facts('allow', 2))
# [('alice', 'roadmap.pdf')]
# Next evaluation — same ruleset, fresh EDB
edb2 = ruleset.edb()
edb2.add_fact('owns', ['bob', 'roadmap.pdf'])
result2 = ruleset.solve(edb2)
print(result2.enumerate_predicate_facts('allow', 2))
# [('bob', 'roadmap.pdf')]with Engine() closes the engine — and every ruleset, EDB, and solve result
still open underneath it — on exit.