aurweb/aurweb/models/accepted_term.py
Kevin Morris 888cf5118a use declarative_base for all ORM models
This rewrites the entire model base as declarative models.
This allows us to more easily customize overlay fields
in tables and is more common.

This effort also brought some DB violations to light which
this commit addresses.

Signed-off-by: Kevin Morris <kevr@0cost.org>
2021-06-10 13:54:27 -07:00

46 lines
1.5 KiB
Python

from sqlalchemy import Column, ForeignKey, Integer
from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import backref, relationship
import aurweb.models.term
import aurweb.models.user
from aurweb.models.declarative import Base
class AcceptedTerm(Base):
__tablename__ = "AcceptedTerms"
UsersID = Column(Integer, ForeignKey("Users.ID", ondelete="CASCADE"),
nullable=False)
User = relationship(
"User", backref=backref("accepted_terms", lazy="dynamic"),
foreign_keys=[UsersID])
TermsID = Column(Integer, ForeignKey("Terms.ID", ondelete="CASCADE"),
nullable=False)
Term = relationship(
"Term", backref=backref("accepted_terms", lazy="dynamic"),
foreign_keys=[TermsID])
__mapper_args__ = {"primary_key": [TermsID]}
def __init__(self,
User: aurweb.models.user.User = None,
Term: aurweb.models.term.Term = None,
Revision: int = None):
self.User = User
if not self.User:
raise IntegrityError(
statement="Foreign key UserID cannot be null.",
orig="AcceptedTerms.UserID",
params=("NULL"))
self.Term = Term
if not self.Term:
raise IntegrityError(
statement="Foreign key TermID cannot be null.",
orig="AcceptedTerms.TermID",
params=("NULL"))
self.Revision = Revision