From d4a1df3ec94262ad54bbb2fee5fd828c8ec52575 Mon Sep 17 00:00:00 2001 From: lash Date: Sun, 30 Apr 2023 07:38:42 +0100 Subject: [PATCH] WIP rdf graph processing library --- .../__pycache__/__init__.cpython-310.pyc | Bin 209 -> 209 bytes .../__pycache__/cert.cpython-310.pyc | Bin 744 -> 1642 bytes python/cic_schema/cert.py | 33 ++++++++++++++++-- python/tests/test_json.py | 21 +++++------ python/tests/test_nft.py | 11 +++--- python/tests/testdata/test_tx.rdf | 11 +++--- 6 files changed, 51 insertions(+), 25 deletions(-) diff --git a/python/cic_schema/__pycache__/__init__.cpython-310.pyc b/python/cic_schema/__pycache__/__init__.cpython-310.pyc index 6e0fc395b38aaf536db178276fbd731ba495ca0a..069c1ad844fae4e40f99f6c90debd58f5b61fb07 100644 GIT binary patch delta 18 Ycmcb}c#)ASpO=@50SLTiPUJcc04f#)hX4Qo delta 18 Ycmcb}c#)ASpO=@50SF?dPvkld04h`jlK=n! diff --git a/python/cic_schema/__pycache__/cert.cpython-310.pyc b/python/cic_schema/__pycache__/cert.cpython-310.pyc index ba65e9369990b9d5d08f6600fe9427e7302cb2e4..14303e29cfb12a625debd50676a37805487d505c 100644 GIT binary patch literal 1642 zcmb7E&5q+l5bo->9mn%a_z@ruD}<1Ov}5+dVYNalWni_JAPsP_7A%juGjZ0Az1^MN zNhUeXTzQ9?iX)d?s{h@VmN;OGm^gx#(txZ z+rz_;$2iS16p~3OS+ZUs0sQ7AuS6m$FY$ovqV%gE30mDNJ5`v3z@9Ma%iw~^K*6MY zE|Lf>9T}n}Jm<-lgzs6u`v;!DhJEh*Cpv4!P8=P6+Xol?c=Ys0jZljQby=$17WFiz zy|)L)kH*@nCFiV;;t_RHLjk#b|y|>yuc^ z(S2pd@s|e=;+OR-A1ghmr&edV{U5*lptGqNDLw25E=<#DR;e^~QJPk@oRy?+r|FAX zR<1pos+{cIIq$}>iT0XlBC8dDeHV}GO2uVn#<9_PoKu#?aeSgPV{~0xqtH}WMQ-A} z$nP73Qe|;7x8r(Bmh{?^D{T*&xehS&7EVJ-$U@kL*7jDZu}#*c{tA^%sU=8$!4jc7 zDWrG7+H$v~CxPlr!V$EDL(-L9Bq4I%0ME?}=MB@Ob`4EL==WNMRC`fWiQb>k> z!?5pZ+UnpW5%$zLVdo8Yh-Xwe`nO1$@DKsTw6JN~qrfdX2q1#R4yACg@#Yk8GYBJ* z(&q9hDoe~|#g}}-Ca?rT`wIuQ%#I!8ceC$~bX}$7q>`8rMZotV1P>OwEr6R1Z&cIA zjUAjVf6BZ`?IoBU_nZ=89NnWw^uEaS2 zd*Qd0=fhbSW1X#jy*yjpJ6rYr7N4eiIe%1WV-c$^uovG&6T0_sN%r!Y)@o`~GdrH( z4R&B0G!E)JXp@~cYI6_&HTx($SR;;r!+YTUz35$2cdL+Z@kcqe=;=uy`R3-YHR^1= zje?>WQt--h9z+m!dQt1?Z|l#|?mRV}RW87ntt^h)YqO?nYi&8ON>}X*t>3n<=^C3|N(h^DUu@$$(i1)ZAJn~hb^rhX literal 744 zcmZvaF>ll`6vzGSB)x0zid2wTSYSZPK=TCq2WEt)1UM#o8=JFb5wm@#qIuhFnvL)VI^o*at)f_vQn62 zkdNw#Y$S5!^)%2l=LRMD?}ZI@Az_ewUrmonbGiwq-p0-I?>JpEJq zhc(_;j0aX?B+7vhJ`w9zzUANGFRQrjT1@E;VmzQFjGe(owavza^a>kqs4$KNxC-!b z0NqWKC}!rmx9A^HKJ<4C$FMmX`rB1z`9Z{3s?JCm4yEj@UbQiwNcmx<+Fb>w(M`Cu z3z_rUt~@>_W$(Cn!x+!R$Ty;J*^rF*NjhkGf=@{a8R~i4TnwLVDE!YQj9%|Lc|-s5 Ky%kKviTDlXTckSx diff --git a/python/cic_schema/cert.py b/python/cic_schema/cert.py index e197212..102df74 100644 --- a/python/cic_schema/cert.py +++ b/python/cic_schema/cert.py @@ -1,17 +1,44 @@ # standard imports import sys +import enum # external imports -from rdflib import Graph +from rdflib import Graph, RDF +from rdflib.term import URIRef +from rdflib.collection import Collection + + +class CIC(enum.Enum): + voucherContract = URIRef('https://defalsify.org/rdf-eth/0.1/voucherContract') + voucherTransfer = URIRef('https://defalsify.org/rdf-eth/0.1/voucherTransfer') class Cert: - def __init__(self, path): + def __init__(self): self.g = Graph() - self.g.parse(path, format='turtle') + self.txs = {} + self.typ = None + @classmethod + def from_path(cls, path): + c = cls() + c.g.parse(path, format='turtle') + c.__apply_graph() + return c + + + def __apply_graph(self): + current_subject = None + for (s, p, o) in self.g: + if s != current_subject: + current_subject = s + if p == RDF.first: + pass + print('{} {} {}'.format(s, p, o)) + + def export(self, w=sys.stdout): v = self.g.serialize(format='xml') w.write(v) diff --git a/python/tests/test_json.py b/python/tests/test_json.py index 332c931..e4bac8f 100644 --- a/python/tests/test_json.py +++ b/python/tests/test_json.py @@ -4,29 +4,24 @@ import json import os # external imports -from jsonschema import validate as json_validate +#from jsonschema import validate as json_validate +# local imports +from cic_schema.nft import NFT test_dir = os.path.realpath(os.path.dirname(__file__)) testdata_dir = os.path.join(test_dir, 'testdata') -data_dir = os.path.join(test_dir, '..', 'cic_schema', 'data') +#data_dir = os.path.join(test_dir, '..', 'cic_schema', 'data') class TestJsonData(unittest.TestCase): def setUp(self): - fp = os.path.join(data_dir, 'cic.json') - f = open(fp, 'r') - self.schema = json.load(f) - f.close() + self.path = os.path.join(testdata_dir, 'test_valid.json') + self.nft = NFT.from_path(self.path) - def test_schema_load(self): - fp = os.path.join(testdata_dir, 'test_valid.json') - f = open(fp, 'r') - o = json.load(f) - f.close() - validator = json_validate(o, self.schema) - + def test_valid(self): + pass if __name__ == '__main__': diff --git a/python/tests/test_nft.py b/python/tests/test_nft.py index 790aa15..e3c7a38 100644 --- a/python/tests/test_nft.py +++ b/python/tests/test_nft.py @@ -19,14 +19,15 @@ data_dir = os.path.join(test_dir, '..', 'cic_schema', 'data') class TestNft(unittest.TestCase): def setUp(self): - fp = os.path.join(testdata_dir, 'test_voucher.rdf') - self.graph_voucher = Cert(fp) - fp = os.path.join(testdata_dir, 'test_tx.rdf') - self.graph_tx = Cert(fp) + #fp = os.path.join(testdata_dir, 'test_voucher.rdf') + #self.graph_voucher = Cert.from_path(fp) + fp = os.path.join(testdata_dir, 'test_tx2.rdf') + self.graph_tx = Cert.from_path(fp) def test_simplest(self): - print(self.graph_tx.export()) + pass + if __name__ == '__main__': diff --git a/python/tests/testdata/test_tx.rdf b/python/tests/testdata/test_tx.rdf index 0f32ea7..f63f2bd 100644 --- a/python/tests/testdata/test_tx.rdf +++ b/python/tests/testdata/test_tx.rdf @@ -1,12 +1,15 @@ -@prefix evm: . +@prefix evm: . @prefix cic: . @prefix ge: . @prefix redcross: . -@prefix un: . +@prefix un: . @prefix xsd: . -evm:voucherTransfer - evm:id "6f4ed36c11345a9a48353cd2f93f1f92958c96df15f3112a192bc994250e8d03"^^xsd:hexBinary ; +( + "6f4ed36c11345a9a48353cd2f93f1f92958c96df15f3112a192bc994250e8d03"^^evm:id + "7f4ed36c11345a9a48353cd2f93f1f92958c96df15f3112a192bc994250e8d03"^^evm:id + "8f4ed36c11345a9a48353cd2f93f1f92958c96df15f3112a192bc994250e8d03"^^evm:id +) ge:approvedActor ; redcross:interest ge:foodforest ; un:esg "deforestation" ;