diff options
Diffstat (limited to 'manas/model/model.py')
-rw-r--r-- | manas/model/model.py | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/manas/model/model.py b/manas/model/model.py new file mode 100644 index 0000000..9a0fabb --- /dev/null +++ b/manas/model/model.py @@ -0,0 +1,77 @@ +from pylons import config +from sqlalchemy import * +from sqlalchemy.types import * +from sqlalchemy.orm import mapper, relation +from manas.model import metadata + +idea_table = Table("idea", metadata, + Column("id", Integer, primary_key=True), + Column("title", UnicodeText, unique=True), + Column("timestamp", DateTime, nullable=False, default=func.now()), + Column("author", UnicodeText, nullable=False), + Column("description", UnicodeText, nullable=False), + Column("karma", Integer, default=0)) + +comment_table = Table("comment", metadata, + Column("id", Integer, primary_key=True), + Column("author", UnicodeText, nullable=False), + Column("timestamp", DateTime, nullable=False, default=func.now()), + Column("text", UnicodeText, nullable=False), + Column("idea_id", Integer, ForeignKey('idea.id')), + Column("question_id", Integer, ForeignKey('question.id'))) + +tag_table = Table("tag", metadata, + Column("id", Integer, primary_key=True), + Column("name", UnicodeText, nullable=False, unique=True)) + +idea_tags = Table('idea_tags', metadata, + Column('idea_id', Integer, ForeignKey('idea.id')), + Column('tag_id', Integer, ForeignKey('tag.id'))) + +question_table = Table("question", metadata, + Column("id", Integer, primary_key=True), + Column("title", UnicodeText, unique=True), + Column("timestamp", DateTime, nullable=False, default=func.now()), + Column("author", UnicodeText, nullable=False), + Column("description", UnicodeText, nullable=False), + Column("karma", Integer, default=0)) + +question_tags = Table('question_tags', metadata, + Column('question_id', Integer, ForeignKey('question.id')), + Column('tag_id', Integer, ForeignKey('tag.id'))) + + +class Idea(object): + def __init__(self, **kw): + """automatically mapping attributes""" + for key, value in kw.iteritems(): + setattr(self, key, value) + +class Comment(object): + def __init__(self, **kw): + """automatically mapping attributes""" + for key, value in kw.iteritems(): + setattr(self, key, value) + +class Tag(object): + def __init__(self, **kw): + """automatically mapping attributes""" + for key, value in kw.iteritems(): + setattr(self, key, value) + +class Question(object): + def __init__(self, **kw): + """automatically mapping attributes""" + for key, value in kw.iteritems(): + setattr(self, key, value) + +mapper(Idea, idea_table, properties={ + 'comments': relation(Comment, backref='idea'), + 'tags': relation(Tag, secondary=idea_tags), +}) +mapper(Question, question_table, properties={ + 'comments': relation(Comment, backref='question'), + 'tags': relation(Tag, secondary=question_tags), +}) +mapper(Comment, comment_table) +mapper(Tag, tag_table) |