Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- Event Store
- TiddlyWeb store implementation notifying a given handler of store events
- This is a pseudo-store, merely wrapping around an actual store.
- Requires an event handler to be defined via an entry "event_handler" in the
- configuration. This is a function which is passed an event-data dictionary.
- """
- from tiddlyweb.store import Store as Storage
- from tiddlyweb.stores import StorageInterface
- __version__ = "0.1.0"
- def init(config):
- # register store
- store_config = config["server_store"][1]
- store_config["store_module"] = config["server_store"][0]
- config["server_store"] = [__name__, store_config]
- class Store(StorageInterface):
- def __init__(self, environ=None):
- super(Store, self).__init__(environ)
- config = self.environ["tiddlyweb.config"]
- _store = config["server_store"][1]["store_module"]
- self._store = Storage(_store, self.environ)
- self.event_handler = config["event_handler"]
- def recipe_get(self, recipe):
- entity = self._store.get(recipe)
- self._trigger_event(recipe, "get")
- return entity
- def recipe_put(self, recipe):
- self._store.put(recipe)
- self._trigger_event(recipe, "put")
- def recipe_delete(self, recipe):
- self._store.delete(recipe)
- self._trigger_event(recipe, "delete")
- def bag_get(self, bag):
- entity = self._store.get(bag)
- self._trigger_event(bag, "get")
- return entity
- def bag_put(self, bag):
- self._store.put(bag)
- self._trigger_event(bag, "put")
- def bag_delete(self, bag):
- self._store.delete(bag)
- self._trigger_event(bag, "delete")
- def tiddler_get(self, tiddler):
- entity = self._store.get(tiddler)
- self._trigger_event(tiddler, "get") # XXX: triggered even if unauthorized
- return entity
- def tiddler_put(self, tiddler):
- self._store.put(tiddler)
- self._trigger_event(tiddler, "put")
- def tiddler_delete(self, tiddler):
- self._store.delete(tiddler)
- self._trigger_event(tiddler, "delete")
- def user_get(self, user):
- return self._store.get(user)
- def user_put(self, user):
- self._store.put(user)
- def user_delete(self, user):
- self._store.delete(user)
- def list_recipes(self):
- return self._store.list_recipes()
- def list_bags(self):
- return self._store.list_bags()
- def list_users(self):
- return self._store.list_users()
- def list_tiddler_revisions(self, tiddler):
- return self._store.list_tiddler_revisions(tiddler)
- def search(self, search_query):
- return self._store.search(search_query)
- def _trigger_event(self, entity, action): # TODO: could be decorator
- # XXX: don't use tiddlyweb.config -- TODO: move into __init__?
- server_host = self.environ["tiddlyweb.config"]["server_host"]
- server_prefix = self.environ["tiddlyweb.config"]["server_prefix"]
- host = "%s://%s:%s/%s" % (server_host["scheme"], server_host["host"],
- server_host["port"], server_prefix) # XXX: potentially buggy?
- entity_type = entity.__class__.__name__.lower()
- data = {
- "host": host,
- "action": action,
- "type": entity_type
- }
- if entity_type == "tiddler":
- data["title"] = entity.title
- data["bag"] = entity.bag
- else:
- data[entity_type] = entity.name
- self.event_handler(data)
Add Comment
Please, Sign In to add comment