From 7dc191dcab373f8fc16494ae271f5dd0d8c8314a Mon Sep 17 00:00:00 2001 From: eclipse Date: Wed, 21 May 2025 17:36:31 +0200 Subject: [PATCH] added __repr__() and _asdict() methods to "Model" baseclass; changed indentation from 4 to 2 --- the_works/models.py | 122 ++++++++++++++++++++++++-------------------- 1 file changed, 66 insertions(+), 56 deletions(-) diff --git a/the_works/models.py b/the_works/models.py index 7479a5e..ce163ee 100644 --- a/the_works/models.py +++ b/the_works/models.py @@ -2,90 +2,100 @@ from the_works.database import db from sqlalchemy.orm import relationship from sqlalchemy.ext.associationproxy import association_proxy -class Text(db.Model): - __table__ = db.Model.metadata.tables['Text'] +# override/add __repr__() and _asdict() methods from sqlalchemy.orm.decl_api.Model for easier handling of table rows +def __repr__(self): + return str({col.key: self.__getattribute__(col.key) for col in self.__table__.c}) - reihe = relationship("Reihe", back_populates="text") - textform = relationship("Textform", back_populates="text") - sprache = relationship("Sprache", back_populates="text") - veroeffentlichung = relationship("Veroeffentlichung", back_populates="text") - text_genre = relationship("Text_Genre", back_populates="text", cascade="save-update, merge, delete, delete-orphan") - genres = association_proxy("text_genre", "Genre") +def _asdict(self): + return {col.key: self.__getattribute__(col.key) for col in self.__table__.c} + +db.Model.__repr__ = __repr__ +db.Model._asdict = _asdict + + +class Text(db.Model): + __table__ = db.Model.metadata.tables['Text'] + reihe = relationship("Reihe", back_populates="text") + textform = relationship("Textform", back_populates="text") + sprache = relationship("Sprache", back_populates="text") + veroeffentlichung = relationship("Veroeffentlichung", back_populates="text") + text_genre = relationship("Text_Genre", back_populates="text", cascade="save-update, merge, delete, delete-orphan") + genres = association_proxy("text_genre", "Genre") class Werk(db.Model): - __table__ = db.Model.metadata.tables['Werk'] - reihe = relationship("Reihe", back_populates="werk") - verlag = relationship("Verlag", back_populates="werk") - werksform = relationship("Werksform", back_populates="werk") - veroeffentlichung = relationship("Veroeffentlichung", back_populates="werk") - werk_genre = relationship("Werk_Genre", back_populates="werk", cascade="save-update, merge, delete, delete-orphan") - genres = association_proxy("werk_genre", "Genre") - werk_herausgeber = relationship("Werk_Herausgeber", back_populates="werk", cascade="save-update, merge, delete, delete-orphan") - herausgeber = association_proxy("werk_herausgeber", "Herausgeber") + __table__ = db.Model.metadata.tables['Werk'] + reihe = relationship("Reihe", back_populates="werk") + verlag = relationship("Verlag", back_populates="werk") + werksform = relationship("Werksform", back_populates="werk") + veroeffentlichung = relationship("Veroeffentlichung", back_populates="werk") + werk_genre = relationship("Werk_Genre", back_populates="werk", cascade="save-update, merge, delete, delete-orphan") + genres = association_proxy("werk_genre", "Genre") + werk_herausgeber = relationship("Werk_Herausgeber", back_populates="werk", cascade="save-update, merge, delete, delete-orphan") + herausgeber = association_proxy("werk_herausgeber", "Herausgeber") class Veroeffentlichung(db.Model): - __table__ = db.Model.metadata.tables['Veroeffentlichung'] - text = relationship("Text", back_populates="veroeffentlichung") - werk = relationship("Werk", back_populates="veroeffentlichung") - pseudonym = relationship("Pseudonym", back_populates="veroeffentlichung") + __table__ = db.Model.metadata.tables['Veroeffentlichung'] + text = relationship("Text", back_populates="veroeffentlichung") + werk = relationship("Werk", back_populates="veroeffentlichung") + pseudonym = relationship("Pseudonym", back_populates="veroeffentlichung") class Reihe(db.Model): - __table__ = db.Model.metadata.tables['Reihe'] - text = relationship("Text", back_populates="reihe") - werk = relationship("Werk", back_populates="reihe") - verlag = relationship("Verlag", back_populates="reihe") + __table__ = db.Model.metadata.tables['Reihe'] + text = relationship("Text", back_populates="reihe") + werk = relationship("Werk", back_populates="reihe") + verlag = relationship("Verlag", back_populates="reihe") class Verlag(db.Model): - __table__ = db.Model.metadata.tables['Verlag'] - werk = relationship("Werk", back_populates="verlag") - reihe = relationship("Reihe", back_populates="verlag") + __table__ = db.Model.metadata.tables['Verlag'] + werk = relationship("Werk", back_populates="verlag") + reihe = relationship("Reihe", back_populates="verlag") class Sprache(db.Model): - __table__ = db.Model.metadata.tables['Sprache'] - text = relationship("Text", back_populates="sprache") + __table__ = db.Model.metadata.tables['Sprache'] + text = relationship("Text", back_populates="sprache") class Textform(db.Model): - __table__ = db.Model.metadata.tables['Textform'] - text = relationship("Text", back_populates="textform") + __table__ = db.Model.metadata.tables['Textform'] + text = relationship("Text", back_populates="textform") class Werksform(db.Model): - __table__ = db.Model.metadata.tables['Werksform'] - werk = relationship("Werk", back_populates="werksform") + __table__ = db.Model.metadata.tables['Werksform'] + werk = relationship("Werk", back_populates="werksform") class Genre(db.Model): - __table__ = db.Model.metadata.tables['Genre'] - text_genre = relationship("Text_Genre", back_populates="genre") - werk_genre = relationship("Werk_Genre", back_populates="genre") + __table__ = db.Model.metadata.tables['Genre'] + text_genre = relationship("Text_Genre", back_populates="genre") + werk_genre = relationship("Werk_Genre", back_populates="genre") class Pseudonym(db.Model): - __table__ = db.Model.metadata.tables['Pseudonym'] - veroeffentlichung = relationship("Veroeffentlichung", back_populates="pseudonym") + __table__ = db.Model.metadata.tables['Pseudonym'] + veroeffentlichung = relationship("Veroeffentlichung", back_populates="pseudonym") class Herausgeber(db.Model): - __table__ = db.Model.metadata.tables['Herausgeber'] - werk_herausgeber = relationship("Werk_Herausgeber", back_populates="herausgeber") + __table__ = db.Model.metadata.tables['Herausgeber'] + werk_herausgeber = relationship("Werk_Herausgeber", back_populates="herausgeber") class Text_Genre(db.Model): - __table__ = db.Model.metadata.tables['Text_Genre'] - text = relationship("Text", back_populates="text_genre") - genre = relationship("Genre", back_populates="text_genre") + __table__ = db.Model.metadata.tables['Text_Genre'] + text = relationship("Text", back_populates="text_genre") + genre = relationship("Genre", back_populates="text_genre") - def __init__(self, genre: int): - self.Genre = genre + def __init__(self, genre: int): + self.Genre = genre class Werk_Genre(db.Model): - __table__ = db.Model.metadata.tables['Werk_Genre'] - werk = relationship("Werk", back_populates="werk_genre") - genre = relationship("Genre", back_populates="werk_genre") + __table__ = db.Model.metadata.tables['Werk_Genre'] + werk = relationship("Werk", back_populates="werk_genre") + genre = relationship("Genre", back_populates="werk_genre") - def __init__(self, genre: int): - self.Genre = genre + def __init__(self, genre: int): + self.Genre = genre class Werk_Herausgeber(db.Model): - __table__ = db.Model.metadata.tables['Werk_Herausgeber'] - werk = relationship("Werk", back_populates="werk_herausgeber") - herausgeber = relationship("Herausgeber", back_populates="werk_herausgeber") + __table__ = db.Model.metadata.tables['Werk_Herausgeber'] + werk = relationship("Werk", back_populates="werk_herausgeber") + herausgeber = relationship("Herausgeber", back_populates="werk_herausgeber") - def __init__(self, hrsg: int): - self.Herausgeber = hrsg + def __init__(self, hrsg: int): + self.Herausgeber = hrsg