diff --git a/the_app/models/shakespeare.py b/the_app/models/shakespeare.py new file mode 100644 index 0000000..0ebe42a --- /dev/null +++ b/the_app/models/shakespeare.py @@ -0,0 +1,116 @@ +from sqlalchemy import Column, ForeignKeyConstraint, Integer, PrimaryKeyConstraint, String, Table, Text, UniqueConstraint +from sqlalchemy.orm import declarative_base, relationship + +Base = declarative_base() +metadata = Base.metadata + + +class Character(Base): + __tablename__ = 'character' + __table_args__ = ( + PrimaryKeyConstraint('id', name='character_pkey'), + {'schema': 'shakespeare'} + ) + + id = Column(String(32)) + name = Column(String(64), nullable=False) + speech_count = Column(Integer, nullable=False) + abbrev = Column(String(32)) + description = Column(String(2056)) + + work = relationship('Work', secondary='shakespeare.character_work', back_populates='character') + paragraph = relationship('Paragraph', back_populates='character') + + +class Wordform(Base): + __tablename__ = 'wordform' + __table_args__ = ( + PrimaryKeyConstraint('id', name='wordform_pkey'), + {'schema': 'shakespeare'} + ) + + id = Column(Integer) + plain_text = Column(String(64), nullable=False) + phonetic_text = Column(String(64), nullable=False) + stem_text = Column(String(64), nullable=False) + occurences = Column(Integer, nullable=False) + + +class Work(Base): + __tablename__ = 'work' + __table_args__ = ( + PrimaryKeyConstraint('id', name='work_pkey'), + {'schema': 'shakespeare'} + ) + + id = Column(String(32)) + title = Column(String(32), nullable=False) + long_title = Column(String(64), nullable=False) + year = Column(Integer, nullable=False) + genre_type = Column(String(1), nullable=False) + source = Column(String(16), nullable=False) + total_words = Column(Integer, nullable=False) + total_paragraphs = Column(Integer, nullable=False) + notes = Column(Text) + + character = relationship('Character', secondary='shakespeare.character_work', back_populates='work') + chapter = relationship('Chapter', back_populates='work') + paragraph = relationship('Paragraph', back_populates='work') + + +class Chapter(Base): + __tablename__ = 'chapter' + __table_args__ = ( + ForeignKeyConstraint(['work_id'], ['shakespeare.work.id'], name='chapter_work_id_fkey'), + PrimaryKeyConstraint('id', name='chapter_pkey'), + UniqueConstraint('work_id', 'section_number', 'chapter_number', name='chapter_work_id_section_number_chapter_number_key'), + {'schema': 'shakespeare'} + ) + + id = Column(Integer) + work_id = Column(ForeignKey('shakespeare.work.id'), nullable=False) + section_number = Column(Integer, nullable=False) + chapter_number = Column(Integer, nullable=False) + description = Column(String(256), nullable=False) + + work = relationship('Work', back_populates='chapter') + paragraph = relationship('Paragraph', back_populates='chapter') + + +t_character_work = Table( + 'character_work', metadata, + Column('character_id', ForeignKey('shakespeare.character.id'), nullable=False), + Column('work_id', ForeignKey('shakespeare.work.id'), nullable=False), + ForeignKeyConstraint(['character_id'], ['shakespeare.character.id'], name='character_work_character_id_fkey'), + ForeignKeyConstraint(['work_id'], ['shakespeare.work.id'], name='character_work_work_id_fkey'), + PrimaryKeyConstraint('character_id', 'work_id', name='character_work_pkey'), + schema='shakespeare' +) + + +class Paragraph(Base): + __tablename__ = 'paragraph' + __table_args__ = ( + ForeignKeyConstraint(['character_id'], ['shakespeare.character.id'], name='paragraph_character_id_fkey'), + ForeignKeyConstraint(['work_id', 'section_number', 'chapter_number'], ['shakespeare.chapter.work_id', 'shakespeare.chapter.section_number', 'shakespeare.chapter.chapter_number'], name='paragraph_chapter_fkey'), + ForeignKeyConstraint(['work_id'], ['shakespeare.work.id'], name='paragraph_work_id_fkey'), + PrimaryKeyConstraint('id', name='paragraph_pkey'), + {'schema': 'shakespeare'} + ) + + id = Column(Integer) + work_id = Column(ForeignKey('shakespeare.work.id'), nullable=False) + paragraph_num = Column(Integer, nullable=False) + character_id = Column(ForeignKey('shakespeare.character.id'), nullable=False) + plain_text = Column(Text, nullable=False) + phonetic_text = Column(Text, nullable=False) + stem_text = Column(Text, nullable=False) + paragraph_type = Column(String(1), nullable=False) + section_number = Column(Integer, nullable=False) + chapter_number = Column(Integer, nullable=False) + char_count = Column(Integer, nullable=False) + word_count = Column(Integer, nullable=False) + + character = relationship('Character', back_populates='paragraph') + chapter = relationship('Chapter', back_populates='paragraph') + work = relationship('Work', back_populates='paragraph')