def _updateMasterWithNewPollStatements(self, dev, new): prev = self._statementsFromInputs.get(dev, set()) # it's important that quads from different devices # don't clash, since that can lead to inconsistent # patches (e.g. # dev1 changes value from 1 to 2; # dev2 changes value from 2 to 3; # dev1 changes from 2 to 4 but this patch will # fail since the '2' statement is gone) self.masterGraph.patch(Patch.fromDiff(inContext(prev, dev), inContext(new, dev))) self._statementsFromInputs[dev] = new
def reread(self) -> None: """update the graph with any diffs from this file n3 parser fails on "1.e+0" even though rdflib was emitting that itself """ old = self.getSubgraph(self.uri) new = Graph() try: contents = open(self.path).read() if contents.startswith("#new"): log.debug("%s ignoring empty contents of my new file", self.path) # this is a new file we're starting, and we should not # patch our graph as if it had just been cleared. We # shouldn't even be here reading this, but # lastWriteTimestamp didn't work. return new.parse(location=self.path, format='n3') self.readPrefixes = dict(new.namespaces()) except SyntaxError as e: print(e) traceback.print_exc() log.error("%s syntax error", self.path) # todo: likely bug- if a file has this error upon first # read, I think we don't retry it right. return except IOError as e: log.error("%s rereading %s: %r", self.path, self.uri, e) return old = inContext(old, self.uri) new = inContext(new, self.uri) p = Patch.fromDiff(old, new) if p: log.debug("%s applying patch for changes in file", self.path) self.patch(p, dueToFileChange=True) else: log.debug("old == new after reread of %s", self.path)