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>
This commit is contained in:
Kevin Morris 2021-06-06 22:45:40 -07:00
parent 7f7a975614
commit 888cf5118a
29 changed files with 398 additions and 292 deletions

View file

@ -1,17 +1,40 @@
from sqlalchemy import Column, ForeignKey, Integer
from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import mapper
from sqlalchemy.orm import backref, relationship
from aurweb.db import make_relationship
from aurweb.models.dependency_type import DependencyType
from aurweb.models.package import Package
from aurweb.schema import PackageDepends
import aurweb.models.package
from aurweb.models import dependency_type
from aurweb.models.declarative import Base
class PackageDependency:
def __init__(self, Package: Package = None,
DependencyType: DependencyType = None,
DepName: str = None, DepDesc: str = None,
DepCondition: str = None, DepArch: str = None):
class PackageDependency(Base):
__tablename__ = "PackageDepends"
PackageID = Column(
Integer, ForeignKey("Packages.ID", ondelete="CASCADE"),
nullable=False)
Package = relationship(
"Package", backref=backref("package_dependencies", lazy="dynamic"),
foreign_keys=[PackageID], lazy="select")
DepTypeID = Column(
Integer, ForeignKey("DependencyTypes.ID", ondelete="NO ACTION"),
nullable=False)
DependencyType = relationship(
"DependencyType",
backref=backref("package_dependencies", lazy="dynamic"),
foreign_keys=[DepTypeID], lazy="select")
__mapper_args__ = {"primary_key": [PackageID, DepTypeID]}
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:
raise IntegrityError(
@ -36,15 +59,3 @@ class PackageDependency:
self.DepDesc = DepDesc
self.DepCondition = DepCondition
self.DepArch = DepArch
properties = {
"Package": make_relationship(Package, PackageDepends.c.PackageID,
"package_dependencies"),
"DependencyType": make_relationship(DependencyType,
PackageDepends.c.DepTypeID,
"package_dependencies")
}
mapper(PackageDependency, PackageDepends, properties=properties,
primary_key=[PackageDepends.c.PackageID, PackageDepends.c.DepTypeID])