# HG changeset patch # User Drew Perttula # Date 1558944503 0 # Node ID 3b36b2c8ae65a43c6e5a904452a70e1ea4f87fe4 # Parent dc61012eeaced0ba059dd367a6b85a3ac3048a02 fix bug that echoed a patch back to KC. https://bigasterisk.com/light9/work/2019/kc-patch-echo-bug.png Ignore-this: 91a52a9fe4b7372a439ab0713dfe2bdc diff -r dc61012eeace -r 3b36b2c8ae65 rdfdb/patch.py --- a/rdfdb/patch.py Mon May 27 07:45:24 2019 +0000 +++ b/rdfdb/patch.py Mon May 27 08:08:23 2019 +0000 @@ -51,7 +51,7 @@ self._delGraph = graphFromNQuad(body['patch']['deletes']) self._addGraph = graphFromNQuad(body['patch']['adds']) if 'senderUpdateUri' in body: - self.senderUpdateUri = body['senderUpdateUri'] + self.senderUpdateUri = URIRef(body['senderUpdateUri']) def __str__(self): diff -r dc61012eeace -r 3b36b2c8ae65 rdfdb/service.py --- a/rdfdb/service.py Mon May 27 07:45:24 2019 +0000 +++ b/rdfdb/service.py Mon May 27 08:08:23 2019 +0000 @@ -1,24 +1,22 @@ -from twisted.internet import reactor, defer -import twisted.internet.error -from twisted.python.filepath import FilePath -from twisted.python.failure import Failure -from twisted.internet.inotify import IN_CREATE import sys, optparse, logging, json, os -import cyclone.web, cyclone.httpclient, cyclone.websocket from typing import Dict, List, Set, Optional, Union +from twisted.internet import reactor, defer +from twisted.internet.inotify import IN_CREATE, INotify +from twisted.python.failure import Failure +from twisted.python.filepath import FilePath +import cyclone.web, cyclone.httpclient, cyclone.websocket from rdflib import ConjunctiveGraph, URIRef, Graph +import twisted.internet.error + +from rdfdb.file_vs_uri import correctToTopdirPrefix, fileForUri, uriFromFile, DirUriMap from rdfdb.graphfile import GraphFile, PatchCb, GetSubgraph from rdfdb.patch import Patch, ALLSTMTS -from rdfdb.rdflibpatch import patchQuads -from rdfdb.file_vs_uri import correctToTopdirPrefix, fileForUri, uriFromFile, DirUriMap +from rdfdb.patchreceiver import makePatchEndpointPutMethod from rdfdb.patchsender import sendPatch -from rdfdb.patchreceiver import makePatchEndpointPutMethod - -from twisted.internet.inotify import INotify +from rdfdb.rdflibpatch import patchQuads log = logging.getLogger('rdfdb') -log.setLevel(logging.DEBUG) class WebsocketDisconnect(ValueError): @@ -234,17 +232,19 @@ self.watchedFiles.dirtyFiles([ctx]) sendToLiveClients(asJson=patch.jsonRepr) - def _sendPatch(self, p): - senderUpdateUri = getattr(p, 'senderUpdateUri', None) + def _sendPatch(self, p: Patch): + senderUpdateUri: Optional[URIRef] = getattr(p, 'senderUpdateUri', None) for c in self.clients: if c.updateUri == senderUpdateUri: # this client has self-applied the patch already + log.debug("_sendPatch: don't resend to %r", c) continue + log.debug('_sendPatch: send to %r', c) d = c.sendPatch(p) d.addErrback(self.clientErrored, c) - def clientErrored(self, err, c): + def clientErrored(self, err, c) -> None: err.trap(twisted.internet.error.ConnectError, WebsocketDisconnect) log.info("%r %r - dropping client", c, err.getErrorMessage()) if c in self.clients: diff -r dc61012eeace -r 3b36b2c8ae65 stubs/twisted/internet/defer.pyi --- a/stubs/twisted/internet/defer.pyi Mon May 27 07:45:24 2019 +0000 +++ b/stubs/twisted/internet/defer.pyi Mon May 27 08:08:23 2019 +0000 @@ -122,3 +122,5 @@ class DeferredFilesystemLock(lockfile.FilesystemLock): def __init__(self, name: Any, scheduler: Optional[Any] = ...) -> None: ... def deferUntilLocked(self, timeout: Optional[Any] = ...): ... + +def setDebugging(yes: bool) -> None: ...