diff options
Diffstat (limited to 'data.py')
-rw-r--r-- | data.py | 43 |
1 files changed, 43 insertions, 0 deletions
@@ -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)]) + |