def comments(cls): #: make the meta data of the subject class arguments = dict(cls.__commentable__) arguments['subject_class'] = cls #: create a comment class class_name = "%sComment" % cls.__name__ class_bases = (BaseComment,) class_members = {'__commentable__': arguments} comment_class = type(class_name, class_bases, class_members) comment_class.__doc__ = "The comment of the %s." % class_name #: assign the comment class to the subject class setattr(cls, class_name, comment_class) setattr(cls, "comment_class", comment_class) #: create and return the relationship to the comment return db.relationship(comment_class, lazy="dynamic", backref=db.backref("subject", lazy="joined", uselist=False))
def owner(cls): owner_class = cls.__commentable__['owner_class'] return db.relationship(owner_class, lazy="joined", uselist=False)