comparison idavoll/backend.py @ 228:77029ecf9817

added auto-create support
author Goffi <goffi@goffi.org>
date Thu, 10 May 2012 22:41:34 +0200
parents 0eafdced5f24
children
comparison
equal deleted inserted replaced
227:8540825f85e0 228:77029ecf9817
286 286
287 287
288 def getSubscriptions(self, entity): 288 def getSubscriptions(self, entity):
289 return self.storage.getSubscriptions(entity) 289 return self.storage.getSubscriptions(entity)
290 290
291 def supportsAutoCreate(self):
292 return True
291 293
292 def supportsInstantNodes(self): 294 def supportsInstantNodes(self):
293 return True 295 return True
294 296
295 297
534 self.hideNodes = False 536 self.hideNodes = False
535 537
536 self.backend.registerNotifier(self._notify) 538 self.backend.registerNotifier(self._notify)
537 self.backend.registerPreDelete(self._preDelete) 539 self.backend.registerPreDelete(self._preDelete)
538 540
541 if self.backend.supportsAutoCreate():
542 self.features.append("auto-create")
543
539 if self.backend.supportsInstantNodes(): 544 if self.backend.supportsInstantNodes():
540 self.features.append("instant-nodes") 545 self.features.append("instant-nodes")
541 546
542 if self.backend.supportsOutcastAffiliation(): 547 if self.backend.supportsOutcastAffiliation():
543 self.features.append("outcast-affiliation") 548 self.features.append("outcast-affiliation")
623 628
624 629
625 def getConfigurationOptions(self): 630 def getConfigurationOptions(self):
626 return self.backend.nodeOptions 631 return self.backend.nodeOptions
627 632
633 def _publish_errb(self, failure, request):
634 if failure.type == error.NodeNotFound and self.backend.supportsAutoCreate():
635 d = self.backend.createNode(request.nodeIdentifier,
636 request.sender)
637 d.addCallback(lambda ignore,
638 request: self.backend.publish(request.nodeIdentifier,
639 request.items,
640 request.sender),
641 request)
642 return d
643
644 raise failure
645
628 646
629 def publish(self, request): 647 def publish(self, request):
630 d = self.backend.publish(request.nodeIdentifier, 648 d = self.backend.publish(request.nodeIdentifier,
631 request.items, 649 request.items,
632 request.sender) 650 request.sender)
651 d.addErrback(self._publish_errb, request)
633 return d.addErrback(self._mapErrors) 652 return d.addErrback(self._mapErrors)
634 653
635 654
636 def subscribe(self, request): 655 def subscribe(self, request):
637 d = self.backend.subscribe(request.nodeIdentifier, 656 d = self.backend.subscribe(request.nodeIdentifier,