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,10 +2,9 @@ from sqlalchemy import Column, ForeignKey, Integer, String
|
|||
from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.orm import backref, relationship
|
||||
|
||||
import aurweb.models.package
|
||||
|
||||
from aurweb.models import dependency_type
|
||||
from aurweb.models.declarative import Base
|
||||
from aurweb.models.dependency_type import DependencyType as _DependencyType
|
||||
from aurweb.models.package import Package as _Package
|
||||
|
||||
|
||||
class PackageDependency(Base):
|
||||
|
@ -15,15 +14,15 @@ class PackageDependency(Base):
|
|||
Integer, ForeignKey("Packages.ID", ondelete="CASCADE"),
|
||||
nullable=False)
|
||||
Package = relationship(
|
||||
"Package", backref=backref("package_dependencies", lazy="dynamic",
|
||||
cascade="all,delete"),
|
||||
_Package, backref=backref("package_dependencies", lazy="dynamic",
|
||||
cascade="all,delete"),
|
||||
foreign_keys=[PackageID])
|
||||
|
||||
DepTypeID = Column(
|
||||
Integer, ForeignKey("DependencyTypes.ID", ondelete="NO ACTION"),
|
||||
nullable=False)
|
||||
DependencyType = relationship(
|
||||
"DependencyType",
|
||||
_DependencyType,
|
||||
backref=backref("package_dependencies", lazy="dynamic"),
|
||||
foreign_keys=[DepTypeID])
|
||||
|
||||
|
@ -31,39 +30,29 @@ class PackageDependency(Base):
|
|||
|
||||
__mapper_args__ = {"primary_key": [PackageID, DepName]}
|
||||
|
||||
def __init__(self,
|
||||
Package: aurweb.models.package.Package = None,
|
||||
DependencyType: dependency_type.DependencyType = None,
|
||||
DepName: str = None,
|
||||
DepDesc: str = None,
|
||||
DepCondition: str = None,
|
||||
DepArch: str = None):
|
||||
self.Package = Package
|
||||
if not self.Package:
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
||||
if not self.Package and not self.PackageID:
|
||||
raise IntegrityError(
|
||||
statement="Foreign key PackageID cannot be null.",
|
||||
orig="PackageDependencies.PackageID",
|
||||
params=("NULL"))
|
||||
|
||||
self.DependencyType = DependencyType
|
||||
if not self.DependencyType:
|
||||
if not self.DependencyType and not self.DepTypeID:
|
||||
raise IntegrityError(
|
||||
statement="Foreign key DepTypeID cannot be null.",
|
||||
orig="PackageDependencies.DepTypeID",
|
||||
params=("NULL"))
|
||||
|
||||
self.DepName = DepName
|
||||
if not self.DepName:
|
||||
if self.DepName is None:
|
||||
raise IntegrityError(
|
||||
statement="Column DepName cannot be null.",
|
||||
orig="PackageDependencies.DepName",
|
||||
params=("NULL"))
|
||||
|
||||
self.DepDesc = DepDesc
|
||||
self.DepCondition = DepCondition
|
||||
self.DepArch = DepArch
|
||||
|
||||
def is_package(self) -> bool:
|
||||
# TODO: Improve the speed of this query if possible.
|
||||
from aurweb import db
|
||||
from aurweb.models.official_provider import OfficialProvider
|
||||
from aurweb.models.package import Package
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue