From 88c849b5b3b3d03591f3aa12c3e6daa1ea744dbf Mon Sep 17 00:00:00 2001 From: Jesse Morgan Date: Mon, 2 Feb 2015 07:36:48 -0800 Subject: Basic interface for generic data persistence. --- data.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 data.py (limited to 'data.py') diff --git a/data.py b/data.py new file mode 100644 index 0000000..c598451 --- /dev/null +++ b/data.py @@ -0,0 +1,43 @@ + +class Data: + """Data is a generic storage interface for addons which need to persist data. + + Addons can access Data through the Connection.data attribute. Each addon + should add its own attribute to Data to serve as a namespace. For example, + the Foo addon might store a dict as such: + + Connection.data.foo = dict() + + Data doesn't persist anything on its own but instead relies on a persistence + addon to handle the onDataSave and onDataLoad events. + + Data fires an onDataLoaded event to inform addons that new data may be available. + """ + + def __init__(self, context, **kwargs): + """Create a Data for the given Connection context. + + Optionally pass in a dict of values to load. + """ + self.__dict__ = kwargs + self.context = context + + def set_data(self, values): + """Replace all values in this Data with the given dict.""" + contex = self.context + self.__dict__ = values + self.context = context + self.context.fireEvent([('onDataLoaded', dict(data=self), False)]) + + def merge(self, values): + """Merge a dictionary into this Data.""" + for k, v, in values.iteritems(): + setattr(self, k, v) + self.context.fireEvent([('onDataLoaded', dict(data=self), False)]) + + def save(self): + """Trigger the onDataSave event.""" + data = self.__dict__ + del data['context'] + self.context.fireEvent([('onDataSave', dict(data=self, values=data), False)]) + -- cgit v1.2.3