Example #1
0
    def __setitem__(self, key, val):
        if key == "__event": key = "_event"
        if key in assignOnce and key in self:
            raise DataModelError("The field '%s' is read only." % key)
        if type(val).__name__ == "Event":
            val = val.__dict__

        if type(val) == dict:
            data = dictToXML(val, root="data", root_attrib={"id": key})
        elif isinstance(val, list):
            data = etree.fromstring("<data id='%s' xmlns='' />" % key,
                                    parser=self.parser)
            data.append(deepcopy(val))
        else:
            val = val if val is not None else ""
            key = key.lstrip("$")
            data = etree.fromstring("<data id='%s' xmlns=''>%s</data>" %
                                    (key, val),
                                    parser=self.parser)
        try:
            current = self.root.find("data[@id='%s']" % key)
            if current is not None:
                self.root.remove(current)
            self.root.append(data)
        except KeyError:
            raise DataModelError("You can't assign to the name '%s'." % key)
        except:
            self.logger.exception(
                "__setitem__ failed for key: %s and value: %s." % (key, val))