Mercurial > libervia-pubsub
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, |