diff --git a/aprendizations/models.py b/aprendizations/models.py index 2a98717..6a7af62 100644 --- a/aprendizations/models.py +++ b/aprendizations/models.py @@ -1,28 +1,31 @@ +# FIXME Mapped[...] probably wrong for the relationships. +# See sqlalchemy documentation: +# https://docs.sqlalchemy.org/en/20/changelog/whatsnew_20.html + +from typing import List + # third party libraries -from sqlalchemy import Column, ForeignKey, Integer, Float, String -from sqlalchemy.orm import declarative_base, relationship +from sqlalchemy import ForeignKey, Integer, Float, String +# from sqlalchemy.orm import declarative_base, relationship +from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship # =========================================================================== -# Declare ORM -# FIXME Any is a workaround for mypy static type checking (see https://github.com/python/mypy/issues/6372) -# from typing import Any -# Base: Any = declarative_base() -Base = declarative_base() - +class Base(DeclarativeBase): + pass # --------------------------------------------------------------------------- class StudentTopic(Base): __tablename__ = 'studenttopic' - student_id = Column(String, ForeignKey('students.id'), primary_key=True) - topic_id = Column(String, ForeignKey('topics.id'), primary_key=True) - level = Column(Float) - date = Column(String) + student_id: Mapped[str] = mapped_column(ForeignKey('students.id'), primary_key=True) + topic_id: Mapped[str] = mapped_column(ForeignKey('topics.id'), primary_key=True) + level: Mapped[float] + date: Mapped[str] - # --- - student = relationship('Student', back_populates='topics') - topic = relationship('Topic', back_populates='students') + # --- FIXME + student: Mapped["Student"] = relationship('Student', back_populates='topics') + topic: Mapped["Topic"] = relationship('Topic', back_populates='students') def __repr__(self): return ('StudentTopic(' @@ -37,13 +40,13 @@ class StudentTopic(Base): # --------------------------------------------------------------------------- class Student(Base): __tablename__ = 'students' - id = Column(String, primary_key=True) - name = Column(String) - password = Column(String) + id: Mapped[str] = mapped_column(String, primary_key=True) + name: Mapped[str] + password: Mapped[str] - # --- - answers = relationship('Answer', back_populates='student') - topics = relationship('StudentTopic', back_populates='student') + # --- FIXME + answers: Mapped[List["Answer"]] = relationship('Answer', back_populates='student') + topics: Mapped[List["StudentTopic"]] = relationship('StudentTopic', back_populates='student') def __repr__(self): return ('Student(' @@ -57,17 +60,17 @@ class Student(Base): # --------------------------------------------------------------------------- class Answer(Base): __tablename__ = 'answers' - id = Column(Integer, primary_key=True) # auto_increment - ref = Column(String) - grade = Column(Float) - starttime = Column(String) - finishtime = Column(String) - student_id = Column(String, ForeignKey('students.id')) - topic_id = Column(String, ForeignKey('topics.id')) - - # --- - student = relationship('Student', back_populates='answers') - topic = relationship('Topic', back_populates='answers') + id: Mapped[int] = mapped_column(primary_key=True) # auto_increment + ref: Mapped[str] + grade: Mapped[float] + starttime: Mapped[str] + finishtime: Mapped[str] + student_id: Mapped[str] = mapped_column(String, ForeignKey('students.id')) + topic_id: Mapped[str] = mapped_column(String, ForeignKey('topics.id')) + + # --- FIXME + student: Mapped["Student"] = relationship('Student', back_populates='answers') + topic: Mapped["Topic"] = relationship('Topic', back_populates='answers') def __repr__(self): return ('Question(' @@ -85,11 +88,11 @@ class Answer(Base): # --------------------------------------------------------------------------- class Topic(Base): __tablename__ = 'topics' - id = Column(String, primary_key=True) + id: Mapped[str] = mapped_column(primary_key=True) - # --- - students = relationship('StudentTopic', back_populates='topic') - answers = relationship('Answer', back_populates='topic') + # --- FIXME + students: Mapped["StudentTopic"] = relationship('StudentTopic', back_populates='topic') + answers: Mapped["Answer"] = relationship('Answer', back_populates='topic') def __repr__(self): return f'Topic(id={self.id!r})' -- libgit2 0.21.2