Help Create Good Data Model

mwt michaeltaft at gmail.com
Sun Mar 12 00:26:53 CET 2006


Well, thank the gods for unit testing. Here's the fah_data module with
fewer errors:

import copy, threading, observable

class FAHData(observable.Observable):
    """The data model for the F at H monitor."""

    def __init__(self):
        observable.Observable.__init__(self)
        self.data = {}#this dict will hold all data
        self.mutex = threading.RLock()

    def get_all_data(self):
        """Returns a COPY of entire data dict."""
        #not sure deepcopy() is really necessary here
        #but using it for now
        #might cause some weird synchronization problems...
        try:
            self.mutex.acquire()
            return copy.deepcopy(self.data)
        finally:
            self.mutex.release()

    def get_data(self, key):
        """Returns a COPY of <key> data element."""
        try:
            self.mutex.acquire()
            return copy.deepcopy(self.data[key])
        finally:
            self.mutex.release()

    #these three methods don't need a mutex because they are atomic (I
think):
    #-------------------------------------------->
    def set_value(self, key, value):
        """Sets value of <key> data element."""
        self.data[key] = value
        observable.Observable.notifyObservers(self, arg =
'ELEMENT_CHANGED')

    def set_data(self, data):
        """Sets entire data dictionary."""
        self.data = data
        observable.Observable.notifyObservers(self, arg =
'DATA_CHANGED')

    def clear_data(self):
        """Clears entire data dictionary."""
        self.data = {}
        observable.Observable.notifyObservers(self, arg =
'DATA_CHANGED')
    #<---------------------------------------------




More information about the Python-list mailing list