mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
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:
parent
0c37216626
commit
51320ab22a
24 changed files with 181 additions and 297 deletions
|
@ -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.",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue