def __init__(self, key=None, name=None, parent=None, dict=None): """ Конструктор. @param parent: предок текущего домена @type parent: L{IDomain} @param dict: начальное значение домена @type dict: C{dict} """ assert key is not None or (name is not None and parent is not None) self._parent = parent if key is not None: self._key = key else: self._key = hashlib.md5(self._parent.key() + name).hexdigest() self._name = name self._children = {} self._dict = {} if dict is not None: self._dict = dict.copy() for property, value in self._dict.iteritems(): if IDomainBindable.providedBy(value): value.bind(self, property)
def set(self, property, value): """ Установить значение свойства в домене. Данный метод может также создать свойство, если оно ранее не существовало и переопределить свойство домена-предка. @param property: имя свойства @type property: C{str} @param value: значение свойства @return: Deferred о результате операции @rtype: C{twisted.internet.defer.Deferred} """ try: if IDomainBindable.providedBy(value): value.bind(self, property) self._dict[property] = value except: return defer.fail() return defer.succeed(None)