rendered paste bodyclass Character(object): prop_dict = {} def __init__(self, name, user): self.name = name self.user = user Session.save(self) Session.flush() def __str__(self): index = self.user.characters.index(self) + 1 return h.link_to(self.name, url=h.url('char_page', id=index, username=self.user.username)) def make_prop_dict(self, refresh = False): if refresh or not self.prop_dict: for property in self.charprops: self.prop_dict[property.key] = property def __getitem__(self, key): self.make_prop_dict() return self.prop_dict[key].value def __setitem__(self, key, value): self.make_prop_dict() if self.prop_dict.has_key(key): self.prop_dict[key].value = value else: new_prop = CharProperty(key, value, self) self.make_prop_dict(refresh=True) @classmethod def find(cls, id): return Session.query(cls).filter_by(id = id).one()charprop_table = Table('charprop', metadata, Column('id', types.Integer, primary_key=True), Column('key', types.Unicode(64), nullable=False), Column('value', types.Unicode(64), nullable=False), Column('character_id', types.Integer, ForeignKey('character.id'), nullable=False),)class CharProperty(object): def __init__(self, key, value, character): self.key = key self.value = value self.character = character Session.save(self) Session.flush()user_mapper = mapper(User, user_table, properties = { 'characters': relation(Character, backref='user')})character_mapper = mapper(Character, character_table, properties = { 'charprops': relation(CharProperty, backref='character')})charprop_mapper = mapper(CharProperty, charprop_table)