diff --git a/evennia/typeclasses/models.py b/evennia/typeclasses/models.py index ce372f9ba1..86ad2a00b0 100644 --- a/evennia/typeclasses/models.py +++ b/evennia/typeclasses/models.py @@ -126,6 +126,31 @@ class TypeclassBase(SharedMemoryModelBase): return new_class +class DbHolder(object): + "Holder for allowing property access of attributes" + def __init__(self, obj, name): + _SA(self, name, obj.attributes) + _SA(self, 'name', name) + + def __getattribute__(self, attrname): + if attrname == 'all': + # we allow to overload our default .all + attr = _GA(self, _GA(self, 'name')).get("all") + if attr: + return attr + return self.all + return _GA(self, _GA(self, 'name')).get(attrname) + + def __setattr__(self, attrname, value): + _GA(self, _GA(self, 'name')).add(attrname, value) + + def __delattr__(self, attrname): + _GA(self, _GA(self, 'name')).remove(attrname) + + def get_all(self): + return _GA(self, _GA(self, 'name')).all() + all = property(get_all) + # # Main TypedObject abstraction # @@ -542,30 +567,7 @@ class TypedObject(SharedMemoryModel): try: return self._db_holder except AttributeError: - class DbHolder(object): - "Holder for allowing property access of attributes" - def __init__(self, obj): - _SA(self, "attrhandler", obj.attributes) - - def __getattribute__(self, attrname): - if attrname == 'all': - # we allow to overload our default .all - attr = _GA(self, "attrhandler").get("all") - if attr: - return attr - return self.all - return _GA(self, "attrhandler").get(attrname) - - def __setattr__(self, attrname, value): - _GA(self, "attrhandler").add(attrname, value) - - def __delattr__(self, attrname): - _GA(self, "attrhandler").remove(attrname) - - def get_all(self): - return _GA(self, "attrhandler").all() - all = property(get_all) - self._db_holder = DbHolder(self) + self._db_holder = DbHolder(self, 'attributes') return self._db_holder #@db.setter