comparison service/reasoning/graphop.py @ 48:571e773c77c3

refactor graph ops Ignore-this: 60494d1602278528c51f138d6e56c32c
author drewp@bigasterisk.com
date Mon, 31 Dec 2012 12:47:58 -0800
parents
children 0aeb8d6ea124
comparison
equal deleted inserted replaced
47:0448fbd96a31 48:571e773c77c3
1
2 def graphWithoutMetadata(g, ignorePredicates=[]):
3 """
4 graph filter that removes any statements whose subjects are
5 contexts in the graph and also any statements with the given
6 predicates
7 """
8 ctxs = map(URIRef, set(g.contexts())) # weird they turned to strings
9
10 out = ConjunctiveGraph()
11 for stmt in g.quads((None, None, None)):
12 if stmt[0] not in ctxs and stmt[1] not in ignorePredicates:
13 out.addN([stmt])
14 return out
15
16 def graphEqual(a, b, ignorePredicates=[]):
17 """
18 compare graphs, omitting any metadata statements about contexts
19 (especially modification times) and also any statements using the
20 given predicates
21 """
22 stmtsA = set(graphWithoutMetadata(a, ignorePredicates))
23 stmtsB = set(graphWithoutMetadata(b, ignorePredicates))
24 if stmtsA == stmtsB:
25 return True
26
27 if log.getEffectiveLevel() <= logging.INFO:
28 lost = stmtsA - stmtsB
29 if lost:
30 log.info("lost statements:")
31 for s in lost:
32 log.info(" %s", s)
33 new = stmtsB - stmtsA
34 if new:
35 log.info("new statements:")
36 for s in new:
37 log.info(" %s", s)
38 return False