(self, ops, contributor)
return newBlips
Apply the operations on the wavelet.
		Returns a dict for tempId->blipId mapping.
		
		Note: This may modify or even delete some operations.
Apply the operations on the wavelet.
		Returns a dict for tempId->blipId mapping.
		
		Note: This may modify or even delete some operations.
Apply the operations on the wavelet . Returns a dict for tempId - > blipId mapping . Note : This may modify or even delete some operations .
def applyOperations(self, ops, contributor):
		"""
		Apply the operations on the wavelet.
		Returns a dict for tempId->blipId mapping.
		
		Note: This may modify or even delete some operations.
		
		"""
		
		newBlips = {}
		
		i = 0
		while i < len(ops):
			op = ops[i]
			if op.blipId != "":
				blip = self.blipById(op.blipId)
				if blip == None:
					#TODO: error handling
					del ops[i]
					continue
				if op.type == DOCUMENT_DELETE:
					blip.deleteText(op.index, op.property, contributor)
				elif op.type == DOCUMENT_INSERT:
					blip.insertText(op.index, op.property, contributor)
				elif op.type == DOCUMENT_ELEMENT_DELETE:
					blip.deleteElement(op.index, contributor)
				elif op.type == DOCUMENT_ELEMENT_INSERT:
					blip.insertElement(op.index, op.property["type"], op.property["properties"], contributor)
				elif op.type == DOCUMENT_ELEMENT_DELTA:
					try:
						blip.applyElementDelta(op.index, op.property, contributor)
					except:
						del ops[i]
						continue #TODO: error handling
				elif op.type == DOCUMENT_ELEMENT_SETPREF:
					try:
						blip.setElementUserpref(op.index, op.property["key"], op.property["value"], contributor)
					except:
						del ops[i]
						continue #TODO: error handling
				elif op.type == BLIP_DELETE:
					blip.delete()
					i += 1
					continue
				elif op.type == BLIP_CREATE_CHILD:
					childBlip = Blip(wavelet=self, creator=contributor, parent=blip)
					childBlip.save()
					newBlips[op.property["blipId"]] = childBlip.id
					op.property["blipId"] = childBlip.id
				else:
					del ops[i]
					continue #TODO: error handling
				blip.save()
			else:
				if op.type == WAVELET_ADD_PARTICIPANT:
					# Find participant
					try:
						p = Participant.objects.get(id=op.property)
					except ObjectDoesNotExist:
						del ops[i]
						continue #TODO: error handling
					# Check if already participating
					if self.participants.filter(id=op.property).count() > 0:
						del ops[i]
						continue #TODO: error handling
					self.participants.add(p)
				elif op.type == WAVELET_REMOVE_PARTICIPANT:
					if self.participants.filter(id=op.property).count() > 0:
						self.participants.remove(self.participants.get(id=op.property))
					else:
						del ops[i]
				elif op.type == WAVELET_APPEND_BLIP:
					newBlip = Blip(wavelet=self, creator=contributor)
					newBlip.save()
					newBlips[op.property["blipId"]] = newBlip.id
					op.property["blipId"] = newBlip.id
				else:
					del ops[i]
					continue #TODO: error handling
			i += 1
		
		return newBlips
def applyOperations ( self , ops , contributor ) : newBlips = { } i = 0 while i < len ( ops ) : op = ops [ i ] if op . blipId != "" : blip = self . blipById ( op . blipId ) if blip == None : #TODO: error handling del ops [ i ] continue if op . type == DOCUMENT_DELETE : blip . deleteText ( op . index , op . property , contributor ) elif op . type == DOCUMENT_INSERT : blip . insertText ( op . index , op . property , contributor ) elif op . type == DOCUMENT_ELEMENT_DELETE : blip . deleteElement ( op . index , contributor ) elif op . type == DOCUMENT_ELEMENT_INSERT : blip . insertElement ( op . index , op . property [ "type" ] , op . property [ "properties" ] , contributor ) elif op . type == DOCUMENT_ELEMENT_DELTA : try : blip . applyElementDelta ( op . index , op . property , contributor ) except : del ops [ i ] continue #TODO: error handling elif op . type == DOCUMENT_ELEMENT_SETPREF : try : blip . setElementUserpref ( op . index , op . property [ "key" ] , op . property [ "value" ] , contributor ) except : del ops [ i ] continue #TODO: error handling elif op . type == BLIP_DELETE : blip . delete ( ) i += 1 continue elif op . type == BLIP_CREATE_CHILD : childBlip = Blip ( wavelet = self , creator = contributor , parent = blip ) childBlip . save ( ) newBlips [ op . property [ "blipId" ] ] = childBlip . id op . property [ "blipId" ] = childBlip . id else : del ops [ i ] continue #TODO: error handling blip . save ( ) else : if op . type == WAVELET_ADD_PARTICIPANT : # Find participant try : p = Participant . objects . get ( id = op . property ) except ObjectDoesNotExist : del ops [ i ] continue #TODO: error handling # Check if already participating if self . participants . filter ( id = op . property ) . count ( ) > 0 : del ops [ i ] continue #TODO: error handling self . participants . add ( p ) elif op . type == WAVELET_REMOVE_PARTICIPANT : if self . participants . filter ( id = op . property ) . count ( ) > 0 : self . participants . remove ( self . participants . get ( id = op . property ) ) else : del ops [ i ] elif op . type == WAVELET_APPEND_BLIP : newBlip = Blip ( wavelet = self , creator = contributor ) newBlip . save ( ) newBlips [ op . property [ "blipId" ] ] = newBlip . id op . property [ "blipId" ] = newBlip . id else : del ops [ i ] continue #TODO: error handling i += 1 return newBlips