Guest User

Untitled

a guest
Apr 26th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.03 KB | None | 0 0
  1. """
  2. Event Store
  3. TiddlyWeb store implementation notifying a given handler of store events
  4.  
  5. This is a pseudo-store, merely wrapping around an actual store.
  6.  
  7. Requires an event handler to be defined via an entry "event_handler" in the
  8. configuration. This is a function which is passed an event-data dictionary.
  9. """
  10.  
  11. from tiddlyweb.store import Store as Storage
  12. from tiddlyweb.stores import StorageInterface
  13.  
  14.  
  15. __version__ = "0.1.0"
  16.  
  17.  
  18. def init(config):
  19. # register store
  20. store_config = config["server_store"][1]
  21. store_config["store_module"] = config["server_store"][0]
  22. config["server_store"] = [__name__, store_config]
  23.  
  24.  
  25. class Store(StorageInterface):
  26.  
  27. def __init__(self, environ=None):
  28. super(Store, self).__init__(environ)
  29. config = self.environ["tiddlyweb.config"]
  30. _store = config["server_store"][1]["store_module"]
  31. self._store = Storage(_store, self.environ)
  32. self.event_handler = config["event_handler"]
  33.  
  34. def recipe_get(self, recipe):
  35. entity = self._store.get(recipe)
  36. self._trigger_event(recipe, "get")
  37. return entity
  38.  
  39. def recipe_put(self, recipe):
  40. self._store.put(recipe)
  41. self._trigger_event(recipe, "put")
  42.  
  43. def recipe_delete(self, recipe):
  44. self._store.delete(recipe)
  45. self._trigger_event(recipe, "delete")
  46.  
  47. def bag_get(self, bag):
  48. entity = self._store.get(bag)
  49. self._trigger_event(bag, "get")
  50. return entity
  51.  
  52. def bag_put(self, bag):
  53. self._store.put(bag)
  54. self._trigger_event(bag, "put")
  55.  
  56. def bag_delete(self, bag):
  57. self._store.delete(bag)
  58. self._trigger_event(bag, "delete")
  59.  
  60. def tiddler_get(self, tiddler):
  61. entity = self._store.get(tiddler)
  62. self._trigger_event(tiddler, "get") # XXX: triggered even if unauthorized
  63. return entity
  64.  
  65. def tiddler_put(self, tiddler):
  66. self._store.put(tiddler)
  67. self._trigger_event(tiddler, "put")
  68.  
  69. def tiddler_delete(self, tiddler):
  70. self._store.delete(tiddler)
  71. self._trigger_event(tiddler, "delete")
  72.  
  73. def user_get(self, user):
  74. return self._store.get(user)
  75.  
  76. def user_put(self, user):
  77. self._store.put(user)
  78.  
  79. def user_delete(self, user):
  80. self._store.delete(user)
  81.  
  82. def list_recipes(self):
  83. return self._store.list_recipes()
  84.  
  85. def list_bags(self):
  86. return self._store.list_bags()
  87.  
  88. def list_users(self):
  89. return self._store.list_users()
  90.  
  91. def list_tiddler_revisions(self, tiddler):
  92. return self._store.list_tiddler_revisions(tiddler)
  93.  
  94. def search(self, search_query):
  95. return self._store.search(search_query)
  96.  
  97. def _trigger_event(self, entity, action): # TODO: could be decorator
  98. # XXX: don't use tiddlyweb.config -- TODO: move into __init__?
  99. server_host = self.environ["tiddlyweb.config"]["server_host"]
  100. server_prefix = self.environ["tiddlyweb.config"]["server_prefix"]
  101. host = "%s://%s:%s/%s" % (server_host["scheme"], server_host["host"],
  102. server_host["port"], server_prefix) # XXX: potentially buggy?
  103.  
  104. entity_type = entity.__class__.__name__.lower()
  105.  
  106. data = {
  107. "host": host,
  108. "action": action,
  109. "type": entity_type
  110. }
  111.  
  112. if entity_type == "tiddler":
  113. data["title"] = entity.title
  114. data["bag"] = entity.bag
  115. else:
  116. data[entity_type] = entity.name
  117.  
  118. self.event_handler(data)
Add Comment
Please, Sign In to add comment