Python implementation of the Abstract Workflow Language (AWL / AWL-LD)
pip install awl
fromawlimportAstSerializationast_serialization=AstSerialization()
# python source code examplesource="""if a == 1:b = 1else:b = 'test'"""# generate ast documentast_dict=ast_serialization.parse(source)
print(ast_serialization.dumps())
# regenerate source codesrc_code=ast_serialization.unparse(ast_dict)
assertsrc_code==source# manipulate ast_dict: set b = 2ast_dict["body"][0]["body"][0]["value"]["value"] =2src_code=ast_serialization.unparse(ast_dict)
assertsrc_code=="""if a == 1:b = 2else:b = 'test'"""# export as json-ldjsonld_doc=ast_serialization.to_jsonld()
# import into a graphfromrdflibimportGraphg=Graph()
g.parse(data=jsonld_doc, format="json-ld")
# dump graph as turtleprint(g.serialize(format="turtle"))
# query for all possible values of bqres=g.query(
""" PREFIX awl: <https://w3id.org/awl/schema/> PREFIX ex: <https://example.org/> SELECT ?v WHERE { ?a a awl:Assign . ?a awl:HasTarget ex:b . ?a awl:HasValue ?v . } """
)
possible_values= [row[0].toPython() forrowinqres]
assertpossible_values== [1, "test"]git clone https://github.com/OO-LD/awl-python
cd awl-python
pip install -e .[dev,testing]