def __replace_fragment(fid): """ Recreate fragment <fid> cached data and all its data-contexts from the corresponding stream (Redis) :param fid: :return: """ tps = cache.get_context(fid).subjects(RDF.type, AGORA.TriplePattern) cache.remove_context(cache.get_context("/" + fid)) for tp in tps: cache.remove_context(cache.get_context(str((fid, __triple_pattern(cache, tp))))) fragment_triples = load_stream_triples(fid, calendar.timegm(dt.now().timetuple())) for c, s, p, o in fragment_triples: cache.get_context(str((fid, c))).add((s, p, o)) cache.get_context("/" + fid).add((s, p, o)) with r.pipeline() as pipe: pipe.delete("fragments:{}:stream".format(fid)) pipe.execute()
def __cache_plan_context(fid, graph): """ Use <graph> to extract the triple patterns of the current fragment <fid> and replace them as the expected context (triple patterns context) in the cache graph :param fid: :param graph: :return: """ try: fid_context = cache.get_context(fid) cache.remove_context(fid_context) tps = graph.subjects(RDF.type, AGORA.TriplePattern) for tp in tps: for (s, p, o) in graph.triples((tp, None, None)): fid_context.add((s, p, o)) for t in graph.triples((o, None, None)): fid_context.add(t) except Exception, e: log.error(e.message)