change(fastapi): unify all model relationship behavior

Now, we allow the direct relationships and their foreign keys to
be set in all of our models. Previously, we constrained this to
direct relationships, and this forced users to perform a query
in most situations to satisfy that requirement. Now, IDs can be
passed directly.

Additionally, this change removes the need for extraneous imports
when users which to use relationships. We now import and use models
directly instead of passing string-references to them.

Signed-off-by: Kevin Morris <kevr@0cost.org>
This commit is contained in:
Kevin Morris 2021-10-16 16:16:44 -07:00
parent 0c37216626
commit 51320ab22a
No known key found for this signature in database
GPG key ID: F7E46DED420788F3
24 changed files with 181 additions and 297 deletions

View file

@ -2,11 +2,10 @@ from sqlalchemy import Column, ForeignKey, Integer
from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import backref, relationship
import aurweb.models.package_base
import aurweb.models.request_type
import aurweb.models.user
from aurweb.models.declarative import Base
from aurweb.models.package_base import PackageBase as _PackageBase
from aurweb.models.request_type import RequestType as _RequestType
from aurweb.models.user import User as _User
PENDING = "Pending"
CLOSED = "Closed"
@ -29,24 +28,24 @@ class PackageRequest(Base):
Integer, ForeignKey("RequestTypes.ID", ondelete="NO ACTION"),
nullable=False)
RequestType = relationship(
"RequestType", backref=backref("package_requests", lazy="dynamic"),
_RequestType, backref=backref("package_requests", lazy="dynamic"),
foreign_keys=[ReqTypeID])
UsersID = Column(Integer, ForeignKey("Users.ID", ondelete="SET NULL"))
User = relationship(
"User", backref=backref("package_requests", lazy="dynamic"),
_User, backref=backref("package_requests", lazy="dynamic"),
foreign_keys=[UsersID])
PackageBaseID = Column(
Integer, ForeignKey("PackageBases.ID", ondelete="SET NULL"),
nullable=False)
PackageBase = relationship(
"PackageBase", backref=backref("requests", lazy="dynamic"),
_PackageBase, backref=backref("requests", lazy="dynamic"),
foreign_keys=[PackageBaseID])
ClosedUID = Column(Integer, ForeignKey("Users.ID", ondelete="SET NULL"))
Closer = relationship(
"User", backref=backref("closed_requests", lazy="dynamic"),
_User, backref=backref("closed_requests", lazy="dynamic"),
foreign_keys=[ClosedUID])
__mapper_args__ = {"primary_key": [ID]}
@ -58,52 +57,39 @@ class PackageRequest(Base):
REJECTED_ID: REJECTED
}
def __init__(self,
RequestType: aurweb.models.request_type.RequestType = None,
PackageBase: aurweb.models.package_base.PackageBase = None,
PackageBaseName: str = None,
User: aurweb.models.user.User = None,
Comments: str = None,
ClosureComment: str = None,
**kwargs):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.RequestType = RequestType
if not self.RequestType:
if not self.RequestType and not self.ReqTypeID:
raise IntegrityError(
statement="Foreign key ReqTypeID cannot be null.",
orig="PackageRequests.ReqTypeID",
params=("NULL"))
self.PackageBase = PackageBase
if not self.PackageBase:
if not self.PackageBase and not self.PackageBaseID:
raise IntegrityError(
statement="Foreign key PackageBaseID cannot be null.",
orig="PackageRequests.PackageBaseID",
params=("NULL"))
self.PackageBaseName = PackageBaseName
if not self.PackageBaseName:
raise IntegrityError(
statement="Column PackageBaseName cannot be null.",
orig="PackageRequests.PackageBaseName",
params=("NULL"))
self.User = User
if not self.User:
if not self.User and not self.UsersID:
raise IntegrityError(
statement="Foreign key UsersID cannot be null.",
orig="PackageRequests.UsersID",
params=("NULL"))
self.Comments = Comments
if self.Comments is None:
raise IntegrityError(
statement="Column Comments cannot be null.",
orig="PackageRequests.Comments",
params=("NULL"))
self.ClosureComment = ClosureComment
if self.ClosureComment is None:
raise IntegrityError(
statement="Column ClosureComment cannot be null.",