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

CODE
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.