def apply_op(self, op, is_remote): oldSnapshot = self.snapshot self.snapshot = optransform.apply(self.snapshot, op) self.emit('change', op, oldSnapshot) if is_remote: self.emit('remoteop', op, oldSnapshot)
def _otApply(docOp, isRemote): oldSnapshot = self.snapshot self.snapshot = optransform.apply(self.snapshot, docOp) self.emit('change', docOp, oldSnapshot) if isRemote: self.emit('remoteop', docOp, oldSnapshot)
def submit_op(self, op, callback): op = optransform.normalize(op) self.snapshot = optransform.apply(self.snapshot, op) if self.pending_op is not None: self.pending_op = optransform.compose(self.pending_op, op) else: self.pending_op = op if callback: self.pending_callbacks.append(callback) self.emit('change', op) self.flush()
def handle_op(self, doc, op, callback): if 'v' not in op or op['v'] < 0: return callback('Version missing', None) if op['v'] > doc['v']: return callback('Op at future version', None) if op['v'] < doc['v'] - self.options['maximumAge']: return callback('Op too old', None) if op['v'] < 0: return callback('Invalid version', None) ops = doc['ops'][(len(doc['ops']) + op['v'] - doc['v']):] if doc['v'] - op['v'] != len(ops): logging.error( "Could not get old ops in model for document {1}. Expected ops {1} to {2} and got {3} ops" .format(doc['name'], op['v'], doc['v'], len(ops))) return callback('Internal error', None) for oldOp in ops: op['op'] = optransform.transform(op['op'], oldOp['op'], 'left') op['v'] += 1 newSnapshot = optransform.apply(doc['snapshot'], op['op']) if op['v'] != doc['v']: logging.error( "Version mismatch detected in model. File a ticket - this is a bug. Expecting {0} == {1}" .format(op['v'], doc['v'])) return callback('Internal error', None) oldSnapshot = doc['snapshot'] doc['v'] = op['v'] + 1 doc['snapshot'] = newSnapshot for listener in doc['listeners']: listener(op, newSnapshot, oldSnapshot) def save_op_callback(error=None): if error: logging.error("Error saving op: {0}".format(error)) return callback(error, None) else: return callback(None, op['v']) self.save_op(doc['name'], op, save_op_callback)
def handle_op(self, doc, op, callback): if 'v' not in op or op['v'] < 0: return callback('Version missing', None) if op['v'] > doc['v']: return callback('Op at future version', None) if op['v'] < doc['v'] - self.options['maximumAge']: return callback('Op too old', None) if op['v'] < 0: return callback('Invalid version', None) ops = doc['ops'][(len(doc['ops'])+op['v']-doc['v']):] if doc['v'] - op['v'] != len(ops): logging.error("Could not get old ops in model for document {1}. Expected ops {1} to {2} and got {3} ops".format(doc['name'], op['v'], doc['v'], len(ops))) return callback('Internal error', None) for oldOp in ops: op['op'] = optransform.transform(op['op'], oldOp['op'], 'left') op['v']+=1 newSnapshot = optransform.apply(doc['snapshot'], op['op']) if op['v'] != doc['v']: logging.error("Version mismatch detected in model. File a ticket - this is a bug. Expecting {0} == {1}".format(op['v'], doc['v'])) return callback('Internal error', None) oldSnapshot = doc['snapshot'] doc['v'] = op['v'] + 1 doc['snapshot'] = newSnapshot for listener in doc['listeners']: listener(op, newSnapshot, oldSnapshot) def save_op_callback(error=None): if error: logging.error("Error saving op: {0}".format(error)) return callback(error, None) else: return callback(None, op['v']) self.save_op(doc['name'], op, save_op_callback)