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,10 +2,9 @@ from sqlalchemy import Column, ForeignKey, Integer
from sqlalchemy.exc import IntegrityError from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import backref, relationship from sqlalchemy.orm import backref, relationship
import aurweb.models.term
import aurweb.models.user
from aurweb.models.declarative import Base from aurweb.models.declarative import Base
from aurweb.models.term import Term as _Term
from aurweb.models.user import User as _User
class AcceptedTerm(Base): class AcceptedTerm(Base):
@ -14,33 +13,28 @@ class AcceptedTerm(Base):
UsersID = Column(Integer, ForeignKey("Users.ID", ondelete="CASCADE"), UsersID = Column(Integer, ForeignKey("Users.ID", ondelete="CASCADE"),
nullable=False) nullable=False)
User = relationship( User = relationship(
"User", backref=backref("accepted_terms", lazy="dynamic"), _User, backref=backref("accepted_terms", lazy="dynamic"),
foreign_keys=[UsersID]) foreign_keys=[UsersID])
TermsID = Column(Integer, ForeignKey("Terms.ID", ondelete="CASCADE"), TermsID = Column(Integer, ForeignKey("Terms.ID", ondelete="CASCADE"),
nullable=False) nullable=False)
Term = relationship( Term = relationship(
"Term", backref=backref("accepted_terms", lazy="dynamic"), _Term, backref=backref("accepted_terms", lazy="dynamic"),
foreign_keys=[TermsID]) foreign_keys=[TermsID])
__mapper_args__ = {"primary_key": [TermsID]} __mapper_args__ = {"primary_key": [TermsID]}
def __init__(self, def __init__(self, **kwargs):
User: aurweb.models.user.User = None, super().__init__(**kwargs)
Term: aurweb.models.term.Term = None,
Revision: int = None): if not self.User and not self.UsersID:
self.User = User
if not self.User:
raise IntegrityError( raise IntegrityError(
statement="Foreign key UserID cannot be null.", statement="Foreign key UsersID cannot be null.",
orig="AcceptedTerms.UserID", orig="AcceptedTerms.UserID",
params=("NULL")) params=("NULL"))
self.Term = Term if not self.Term and not self.TermsID:
if not self.Term:
raise IntegrityError( raise IntegrityError(
statement="Foreign key TermID cannot be null.", statement="Foreign key TermID cannot be null.",
orig="AcceptedTerms.TermID", orig="AcceptedTerms.TermID",
params=("NULL")) params=("NULL"))
self.Revision = Revision

View file

@ -11,20 +11,15 @@ class ApiRateLimit(Base):
__mapper_args__ = {"primary_key": [IP]} __mapper_args__ = {"primary_key": [IP]}
def __init__(self, def __init__(self, **kwargs):
IP: str = None, super().__init__(**kwargs)
Requests: int = None,
WindowStart: int = None):
self.IP = IP
self.Requests = Requests
if self.Requests is None: if self.Requests is None:
raise IntegrityError( raise IntegrityError(
statement="Column Requests cannot be null.", statement="Column Requests cannot be null.",
orig="ApiRateLimit.Requests", orig="ApiRateLimit.Requests",
params=("NULL")) params=("NULL"))
self.WindowStart = WindowStart
if self.WindowStart is None: if self.WindowStart is None:
raise IntegrityError( raise IntegrityError(
statement="Column WindowStart cannot be null.", statement="Column WindowStart cannot be null.",

View file

@ -11,9 +11,9 @@ class Group(Base):
__mapper_args__ = {"primary_key": [ID]} __mapper_args__ = {"primary_key": [ID]}
def __init__(self, Name: str = None): def __init__(self, **kwargs):
self.Name = Name super().__init__(**kwargs)
if not self.Name: if self.Name is None:
raise IntegrityError( raise IntegrityError(
statement="Column Name cannot be null.", statement="Column Name cannot be null.",
orig="Groups.Name", orig="Groups.Name",

View file

@ -11,8 +11,9 @@ class License(Base):
__mapper_args__ = {"primary_key": [ID]} __mapper_args__ = {"primary_key": [ID]}
def __init__(self, Name: str = None): def __init__(self, **kwargs):
self.Name = Name super().__init__(**kwargs)
if not self.Name: if not self.Name:
raise IntegrityError( raise IntegrityError(
statement="Column Name cannot be null.", statement="Column Name cannot be null.",

View file

@ -3,6 +3,7 @@ from sqlalchemy.exc import IntegrityError
from aurweb.models.declarative import Base from aurweb.models.declarative import Base
# TODO: Fix this! Official packages aren't from aur.archlinux.org...
OFFICIAL_BASE = "https://aur.archlinux.org" OFFICIAL_BASE = "https://aur.archlinux.org"
@ -13,25 +14,21 @@ class OfficialProvider(Base):
__mapper_args__ = {"primary_key": [ID]} __mapper_args__ = {"primary_key": [ID]}
def __init__(self, def __init__(self, **kwargs):
Name: str = None, super().__init__(**kwargs)
Repo: str = None,
Provides: str = None):
self.Name = Name
if not self.Name: if not self.Name:
raise IntegrityError( raise IntegrityError(
statement="Column Name cannot be null.", statement="Column Name cannot be null.",
orig="OfficialProviders.Name", orig="OfficialProviders.Name",
params=("NULL")) params=("NULL"))
self.Repo = Repo
if not self.Repo: if not self.Repo:
raise IntegrityError( raise IntegrityError(
statement="Column Repo cannot be null.", statement="Column Repo cannot be null.",
orig="OfficialProviders.Repo", orig="OfficialProviders.Repo",
params=("NULL")) params=("NULL"))
self.Provides = Provides
if not self.Provides: if not self.Provides:
raise IntegrityError( raise IntegrityError(
statement="Column Provides cannot be null.", statement="Column Provides cannot be null.",

View file

@ -2,10 +2,8 @@ from sqlalchemy import Column, ForeignKey, Integer
from sqlalchemy.exc import IntegrityError from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import backref, relationship from sqlalchemy.orm import backref, relationship
import aurweb.db
import aurweb.models.package_base
from aurweb.models.declarative import Base from aurweb.models.declarative import Base
from aurweb.models.package_base import PackageBase as _PackageBase
class Package(Base): class Package(Base):
@ -17,31 +15,22 @@ class Package(Base):
Integer, ForeignKey("PackageBases.ID", ondelete="CASCADE"), Integer, ForeignKey("PackageBases.ID", ondelete="CASCADE"),
nullable=False) nullable=False)
PackageBase = relationship( PackageBase = relationship(
"PackageBase", backref=backref("packages", lazy="dynamic"), _PackageBase, backref=backref("packages", lazy="dynamic"),
foreign_keys=[PackageBaseID]) foreign_keys=[PackageBaseID])
__mapper_args__ = {"primary_key": [ID]} __mapper_args__ = {"primary_key": [ID]}
def __init__(self, def __init__(self, **kwargs):
PackageBase: aurweb.models.package_base.PackageBase = None, super().__init__(**kwargs)
Name: str = None,
Version: str = None, if not self.PackageBase and not self.PackageBaseID:
Description: str = None,
URL: str = None):
self.PackageBase = PackageBase
if not self.PackageBase:
raise IntegrityError( raise IntegrityError(
statement="Foreign key PackageBaseID cannot be null.", statement="Foreign key PackageBaseID cannot be null.",
orig="Packages.PackageBaseID", orig="Packages.PackageBaseID",
params=("NULL")) params=("NULL"))
self.Name = Name if self.Name is None:
if not self.Name:
raise IntegrityError( raise IntegrityError(
statement="Column Name cannot be null.", statement="Column Name cannot be null.",
orig="Packages.Name", orig="Packages.Name",
params=("NULL")) params=("NULL"))
self.Version = Version
self.Description = Description
self.URL = URL

View file

@ -4,9 +4,8 @@ from sqlalchemy import Column, ForeignKey, Integer
from sqlalchemy.exc import IntegrityError from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import backref, relationship from sqlalchemy.orm import backref, relationship
import aurweb.models.user
from aurweb.models.declarative import Base from aurweb.models.declarative import Base
from aurweb.models.user import User as _User
class PackageBase(Base): class PackageBase(Base):
@ -15,56 +14,48 @@ class PackageBase(Base):
FlaggerUID = Column(Integer, FlaggerUID = Column(Integer,
ForeignKey("Users.ID", ondelete="SET NULL")) ForeignKey("Users.ID", ondelete="SET NULL"))
Flagger = relationship( Flagger = relationship(
"User", backref=backref("flagged_bases", lazy="dynamic"), _User, backref=backref("flagged_bases", lazy="dynamic"),
foreign_keys=[FlaggerUID]) foreign_keys=[FlaggerUID])
SubmitterUID = Column(Integer, SubmitterUID = Column(Integer,
ForeignKey("Users.ID", ondelete="SET NULL")) ForeignKey("Users.ID", ondelete="SET NULL"))
Submitter = relationship( Submitter = relationship(
"User", backref=backref("submitted_bases", lazy="dynamic"), _User, backref=backref("submitted_bases", lazy="dynamic"),
foreign_keys=[SubmitterUID]) foreign_keys=[SubmitterUID])
MaintainerUID = Column(Integer, MaintainerUID = Column(Integer,
ForeignKey("Users.ID", ondelete="SET NULL")) ForeignKey("Users.ID", ondelete="SET NULL"))
Maintainer = relationship( Maintainer = relationship(
"User", backref=backref("maintained_bases", lazy="dynamic"), _User, backref=backref("maintained_bases", lazy="dynamic"),
foreign_keys=[MaintainerUID]) foreign_keys=[MaintainerUID])
PackagerUID = Column(Integer, ForeignKey("Users.ID", ondelete="SET NULL")) PackagerUID = Column(Integer, ForeignKey("Users.ID", ondelete="SET NULL"))
Packager = relationship( Packager = relationship(
"User", backref=backref("package_bases", lazy="dynamic"), _User, backref=backref("package_bases", lazy="dynamic"),
foreign_keys=[PackagerUID]) foreign_keys=[PackagerUID])
# A set used to check for floatable values. # A set used to check for floatable values.
TO_FLOAT = {"Popularity"} TO_FLOAT = {"Popularity"}
def __init__(self, Name: str = None, def __init__(self, **kwargs):
Flagger: aurweb.models.user.User = None,
Maintainer: aurweb.models.user.User = None,
Submitter: aurweb.models.user.User = None,
Packager: aurweb.models.user.User = None,
**kwargs):
super().__init__(**kwargs) super().__init__(**kwargs)
self.Name = Name
if not self.Name: if self.Name is None:
raise IntegrityError( raise IntegrityError(
statement="Column Name cannot be null.", statement="Column Name cannot be null.",
orig="PackageBases.Name", orig="PackageBases.Name",
params=("NULL")) params=("NULL"))
self.Flagger = Flagger # If no SubmittedTS/ModifiedTS is provided on creation, set them
self.Maintainer = Maintainer # here to the current utc timestamp.
self.Submitter = Submitter now = datetime.utcnow().timestamp()
self.Packager = Packager if not self.SubmittedTS:
self.SubmittedTS = now
if not self.ModifiedTS:
self.ModifiedTS = now
self.NumVotes = kwargs.get("NumVotes") if not self.FlaggerComment:
self.Popularity = kwargs.get("Popularity") self.FlaggerComment = str()
self.OutOfDateTS = kwargs.get("OutOfDateTS")
self.FlaggerComment = kwargs.get("FlaggerComment", str())
self.SubmittedTS = kwargs.get("SubmittedTS",
datetime.utcnow().timestamp())
self.ModifiedTS = kwargs.get("ModifiedTS",
datetime.utcnow().timestamp())
def __getattribute__(self, key: str): def __getattribute__(self, key: str):
attr = super().__getattribute__(key) attr = super().__getattribute__(key)

View file

@ -11,8 +11,9 @@ class PackageBlacklist(Base):
__mapper_args__ = {"primary_key": [ID]} __mapper_args__ = {"primary_key": [ID]}
def __init__(self, Name: str = None): def __init__(self, **kwargs):
self.Name = Name super().__init__(**kwargs)
if not self.Name: if not self.Name:
raise IntegrityError( raise IntegrityError(
statement="Column Name cannot be null.", statement="Column Name cannot be null.",

View file

@ -2,10 +2,9 @@ from sqlalchemy import Column, ForeignKey, Integer
from sqlalchemy.exc import IntegrityError from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import backref, relationship from sqlalchemy.orm import backref, relationship
import aurweb.models.package_base
import aurweb.models.user
from aurweb.models.declarative import Base from aurweb.models.declarative import Base
from aurweb.models.package_base import PackageBase as _PackageBase
from aurweb.models.user import User as _User
class PackageComaintainer(Base): class PackageComaintainer(Base):
@ -15,37 +14,33 @@ class PackageComaintainer(Base):
Integer, ForeignKey("Users.ID", ondelete="CASCADE"), Integer, ForeignKey("Users.ID", ondelete="CASCADE"),
nullable=False) nullable=False)
User = relationship( User = relationship(
"User", backref=backref("comaintained", lazy="dynamic"), _User, backref=backref("comaintained", lazy="dynamic"),
foreign_keys=[UsersID]) foreign_keys=[UsersID])
PackageBaseID = Column( PackageBaseID = Column(
Integer, ForeignKey("PackageBases.ID", ondelete="CASCADE"), Integer, ForeignKey("PackageBases.ID", ondelete="CASCADE"),
nullable=False) nullable=False)
PackageBase = relationship( PackageBase = relationship(
"PackageBase", backref=backref("comaintainers", lazy="dynamic"), _PackageBase, backref=backref("comaintainers", lazy="dynamic"),
foreign_keys=[PackageBaseID]) foreign_keys=[PackageBaseID])
__mapper_args__ = {"primary_key": [UsersID, PackageBaseID]} __mapper_args__ = {"primary_key": [UsersID, PackageBaseID]}
def __init__(self, def __init__(self, **kwargs):
User: aurweb.models.user.User = None, super().__init__(**kwargs)
PackageBase: aurweb.models.package_base.PackageBase = None,
Priority: int = None): if not self.User and not self.UsersID:
self.User = User
if not self.User:
raise IntegrityError( raise IntegrityError(
statement="Foreign key UsersID cannot be null.", statement="Foreign key UsersID cannot be null.",
orig="PackageComaintainers.UsersID", orig="PackageComaintainers.UsersID",
params=("NULL")) params=("NULL"))
self.PackageBase = PackageBase if not self.PackageBase and not self.PackageBaseID:
if not self.PackageBase:
raise IntegrityError( raise IntegrityError(
statement="Foreign key PackageBaseID cannot be null.", statement="Foreign key PackageBaseID cannot be null.",
orig="PackageComaintainers.PackageBaseID", orig="PackageComaintainers.PackageBaseID",
params=("NULL")) params=("NULL"))
self.Priority = Priority
if not self.Priority: if not self.Priority:
raise IntegrityError( raise IntegrityError(
statement="Column Priority cannot be null.", statement="Column Priority cannot be null.",

View file

@ -2,10 +2,9 @@ from sqlalchemy import Column, ForeignKey, Integer
from sqlalchemy.exc import IntegrityError from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import backref, relationship from sqlalchemy.orm import backref, relationship
import aurweb.models.package_base
import aurweb.models.user
from aurweb.models.declarative import Base from aurweb.models.declarative import Base
from aurweb.models.package_base import PackageBase as _PackageBase
from aurweb.models.user import User as _User
class PackageComment(Base): class PackageComment(Base):
@ -17,44 +16,39 @@ class PackageComment(Base):
Integer, ForeignKey("PackageBases.ID", ondelete="CASCADE"), Integer, ForeignKey("PackageBases.ID", ondelete="CASCADE"),
nullable=False) nullable=False)
PackageBase = relationship( PackageBase = relationship(
"PackageBase", backref=backref("comments", lazy="dynamic", _PackageBase, backref=backref("comments", lazy="dynamic",
cascade="all,delete"), cascade="all,delete"),
foreign_keys=[PackageBaseID]) foreign_keys=[PackageBaseID])
UsersID = Column(Integer, ForeignKey("Users.ID", ondelete="SET NULL")) UsersID = Column(Integer, ForeignKey("Users.ID", ondelete="SET NULL"))
User = relationship( User = relationship(
"User", backref=backref("package_comments", lazy="dynamic"), _User, backref=backref("package_comments", lazy="dynamic"),
foreign_keys=[UsersID]) foreign_keys=[UsersID])
EditedUsersID = Column( EditedUsersID = Column(
Integer, ForeignKey("Users.ID", ondelete="SET NULL")) Integer, ForeignKey("Users.ID", ondelete="SET NULL"))
Editor = relationship( Editor = relationship(
"User", backref=backref("edited_comments", lazy="dynamic"), _User, backref=backref("edited_comments", lazy="dynamic"),
foreign_keys=[EditedUsersID]) foreign_keys=[EditedUsersID])
DelUsersID = Column( DelUsersID = Column(
Integer, ForeignKey("Users.ID", ondelete="SET NULL")) Integer, ForeignKey("Users.ID", ondelete="SET NULL"))
Deleter = relationship( Deleter = relationship(
"User", backref=backref("deleted_comments", lazy="dynamic"), _User, backref=backref("deleted_comments", lazy="dynamic"),
foreign_keys=[DelUsersID]) foreign_keys=[DelUsersID])
__mapper_args__ = {"primary_key": [ID]} __mapper_args__ = {"primary_key": [ID]}
def __init__(self, def __init__(self, **kwargs):
PackageBase: aurweb.models.package_base.PackageBase = None,
User: aurweb.models.user.User = None,
**kwargs):
super().__init__(**kwargs) super().__init__(**kwargs)
self.PackageBase = PackageBase if not self.PackageBase and not self.PackageBaseID:
if not self.PackageBase:
raise IntegrityError( raise IntegrityError(
statement="Foreign key PackageBaseID cannot be null.", statement="Foreign key PackageBaseID cannot be null.",
orig="PackageComments.PackageBaseID", orig="PackageComments.PackageBaseID",
params=("NULL")) params=("NULL"))
self.User = User if not self.User and not self.UsersID:
if not self.User:
raise IntegrityError( raise IntegrityError(
statement="Foreign key UsersID cannot be null.", statement="Foreign key UsersID cannot be null.",
orig="PackageComments.UsersID", orig="PackageComments.UsersID",

View file

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

View file

@ -2,10 +2,9 @@ from sqlalchemy import Column, ForeignKey, Integer
from sqlalchemy.exc import IntegrityError from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import backref, relationship from sqlalchemy.orm import backref, relationship
import aurweb.models.group
import aurweb.models.package
from aurweb.models.declarative import Base from aurweb.models.declarative import Base
from aurweb.models.group import Group as _Group
from aurweb.models.package import Package as _Package
class PackageGroup(Base): class PackageGroup(Base):
@ -14,29 +13,27 @@ class PackageGroup(Base):
PackageID = Column(Integer, ForeignKey("Packages.ID", ondelete="CASCADE"), PackageID = Column(Integer, ForeignKey("Packages.ID", ondelete="CASCADE"),
primary_key=True, nullable=True) primary_key=True, nullable=True)
Package = relationship( Package = relationship(
"Package", backref=backref("package_groups", lazy="dynamic"), _Package, backref=backref("package_groups", lazy="dynamic"),
foreign_keys=[PackageID]) foreign_keys=[PackageID])
GroupID = Column(Integer, ForeignKey("Groups.ID", ondelete="CASCADE"), GroupID = Column(Integer, ForeignKey("Groups.ID", ondelete="CASCADE"),
primary_key=True, nullable=True) primary_key=True, nullable=True)
Group = relationship( Group = relationship(
"Group", backref=backref("package_groups", lazy="dynamic"), _Group, backref=backref("package_groups", lazy="dynamic"),
foreign_keys=[GroupID]) foreign_keys=[GroupID])
__mapper_args__ = {"primary_key": [PackageID, GroupID]} __mapper_args__ = {"primary_key": [PackageID, GroupID]}
def __init__(self, def __init__(self, **kwargs):
Package: aurweb.models.package.Package = None, super().__init__(**kwargs)
Group: aurweb.models.group.Group = None):
self.Package = Package if not self.Package and not self.PackageID:
if not self.Package:
raise IntegrityError( raise IntegrityError(
statement="Primary key PackageID cannot be null.", statement="Primary key PackageID cannot be null.",
orig="PackageGroups.PackageID", orig="PackageGroups.PackageID",
params=("NULL")) params=("NULL"))
self.Group = Group if not self.Group and not self.GroupID:
if not self.Group:
raise IntegrityError( raise IntegrityError(
statement="Primary key GroupID cannot be null.", statement="Primary key GroupID cannot be null.",
orig="PackageGroups.GroupID", orig="PackageGroups.GroupID",

View file

@ -2,10 +2,8 @@ from sqlalchemy import Column, ForeignKey, Integer, String, text
from sqlalchemy.exc import IntegrityError from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import backref, relationship from sqlalchemy.orm import backref, relationship
import aurweb.db
import aurweb.models.package_base
from aurweb.models.declarative import Base from aurweb.models.declarative import Base
from aurweb.models.package_base import PackageBase as _PackageBase
class PackageKeyword(Base): class PackageKeyword(Base):
@ -15,7 +13,7 @@ class PackageKeyword(Base):
Integer, ForeignKey("PackageBases.ID", ondelete="CASCADE"), Integer, ForeignKey("PackageBases.ID", ondelete="CASCADE"),
primary_key=True, nullable=True) primary_key=True, nullable=True)
PackageBase = relationship( PackageBase = relationship(
"PackageBase", backref=backref("keywords", lazy="dynamic"), _PackageBase, backref=backref("keywords", lazy="dynamic"),
foreign_keys=[PackageBaseID]) foreign_keys=[PackageBaseID])
Keyword = Column( Keyword = Column(
@ -24,14 +22,11 @@ class PackageKeyword(Base):
__mapper_args__ = {"primary_key": [PackageBaseID, Keyword]} __mapper_args__ = {"primary_key": [PackageBaseID, Keyword]}
def __init__(self, def __init__(self, **kwargs):
PackageBase: aurweb.models.package_base.PackageBase = None, super().__init__(**kwargs)
Keyword: str = None):
self.PackageBase = PackageBase if not self.PackageBase and not self.PackageBaseID:
if not self.PackageBase:
raise IntegrityError( raise IntegrityError(
statement="Primary key PackageBaseID cannot be null.", statement="Primary key PackageBaseID cannot be null.",
orig="PackageKeywords.PackageBaseID", orig="PackageKeywords.PackageBaseID",
params=("NULL")) params=("NULL"))
self.Keyword = Keyword

View file

@ -2,10 +2,9 @@ from sqlalchemy import Column, ForeignKey, Integer
from sqlalchemy.exc import IntegrityError from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import backref, relationship from sqlalchemy.orm import backref, relationship
import aurweb.models.license
import aurweb.models.package
from aurweb.models.declarative import Base from aurweb.models.declarative import Base
from aurweb.models.license import License as _License
from aurweb.models.package import Package as _Package
class PackageLicense(Base): class PackageLicense(Base):
@ -15,30 +14,28 @@ class PackageLicense(Base):
Integer, ForeignKey("Packages.ID", ondelete="CASCADE"), Integer, ForeignKey("Packages.ID", ondelete="CASCADE"),
primary_key=True, nullable=True) primary_key=True, nullable=True)
Package = relationship( Package = relationship(
"Package", backref=backref("package_license", uselist=False), _Package, backref=backref("package_license", uselist=False),
foreign_keys=[PackageID]) foreign_keys=[PackageID])
LicenseID = Column( LicenseID = Column(
Integer, ForeignKey("Licenses.ID", ondelete="CASCADE"), Integer, ForeignKey("Licenses.ID", ondelete="CASCADE"),
primary_key=True, nullable=True) primary_key=True, nullable=True)
License = relationship( License = relationship(
"License", backref=backref("package_license", uselist=False), _License, backref=backref("package_license", uselist=False),
foreign_keys=[LicenseID]) foreign_keys=[LicenseID])
__mapper_args__ = {"primary_key": [PackageID, LicenseID]} __mapper_args__ = {"primary_key": [PackageID, LicenseID]}
def __init__(self, def __init__(self, **kwargs):
Package: aurweb.models.package.Package = None, super().__init__(**kwargs)
License: aurweb.models.license.License = None):
self.Package = Package if not self.Package and not self.PackageID:
if not self.Package:
raise IntegrityError( raise IntegrityError(
statement="Primary key PackageID cannot be null.", statement="Primary key PackageID cannot be null.",
orig="PackageLicenses.PackageID", orig="PackageLicenses.PackageID",
params=("NULL")) params=("NULL"))
self.License = License if not self.License and not self.LicenseID:
if not self.License:
raise IntegrityError( raise IntegrityError(
statement="Primary key LicenseID cannot be null.", statement="Primary key LicenseID cannot be null.",
orig="PackageLicenses.LicenseID", orig="PackageLicenses.LicenseID",

View file

@ -2,10 +2,9 @@ from sqlalchemy import Column, ForeignKey, Integer
from sqlalchemy.exc import IntegrityError from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import backref, relationship from sqlalchemy.orm import backref, relationship
import aurweb.models.package_base
import aurweb.models.user
from aurweb.models.declarative import Base from aurweb.models.declarative import Base
from aurweb.models.package_base import PackageBase as _PackageBase
from aurweb.models.user import User as _User
class PackageNotification(Base): class PackageNotification(Base):
@ -15,32 +14,29 @@ class PackageNotification(Base):
Integer, ForeignKey("Users.ID", ondelete="CASCADE"), Integer, ForeignKey("Users.ID", ondelete="CASCADE"),
nullable=False) nullable=False)
User = relationship( User = relationship(
"User", backref=backref("notifications", lazy="dynamic"), _User, backref=backref("notifications", lazy="dynamic"),
foreign_keys=[UserID]) foreign_keys=[UserID])
PackageBaseID = Column( PackageBaseID = Column(
Integer, ForeignKey("PackageBases.ID", ondelete="CASCADE"), Integer, ForeignKey("PackageBases.ID", ondelete="CASCADE"),
nullable=False) nullable=False)
PackageBase = relationship( PackageBase = relationship(
"PackageBase", _PackageBase,
backref=backref("notifications", lazy="dynamic"), backref=backref("notifications", lazy="dynamic"),
foreign_keys=[PackageBaseID]) foreign_keys=[PackageBaseID])
__mapper_args__ = {"primary_key": [UserID, PackageBaseID]} __mapper_args__ = {"primary_key": [UserID, PackageBaseID]}
def __init__(self, def __init__(self, **kwargs):
User: aurweb.models.user.User = None, super().__init__(**kwargs)
PackageBase: aurweb.models.package_base.PackageBase = None,
NotificationTS: int = None): if not self.User and not self.UserID:
self.User = User
if not self.User:
raise IntegrityError( raise IntegrityError(
statement="Foreign key UserID cannot be null.", statement="Foreign key UserID cannot be null.",
orig="PackageNotifications.UserID", orig="PackageNotifications.UserID",
params=("NULL")) params=("NULL"))
self.PackageBase = PackageBase if not self.PackageBase and not self.PackageBaseID:
if not self.PackageBase:
raise IntegrityError( raise IntegrityError(
statement="Foreign key PackageBaseID cannot be null.", statement="Foreign key PackageBaseID cannot be null.",
orig="PackageNotifications.PackageBaseID", orig="PackageNotifications.PackageBaseID",

View file

@ -2,11 +2,9 @@ from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.exc import IntegrityError from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import backref, relationship from sqlalchemy.orm import backref, relationship
import aurweb.db
import aurweb.models.package
import aurweb.models.relation_type
from aurweb.models.declarative import Base from aurweb.models.declarative import Base
from aurweb.models.package import Package as _Package
from aurweb.models.relation_type import RelationType as _RelationType
class PackageRelation(Base): class PackageRelation(Base):
@ -16,7 +14,7 @@ class PackageRelation(Base):
Integer, ForeignKey("Packages.ID", ondelete="CASCADE"), Integer, ForeignKey("Packages.ID", ondelete="CASCADE"),
nullable=False) nullable=False)
Package = relationship( Package = relationship(
"Package", backref=backref("package_relations", lazy="dynamic", _Package, backref=backref("package_relations", lazy="dynamic",
cascade="all,delete"), cascade="all,delete"),
foreign_keys=[PackageID]) foreign_keys=[PackageID])
@ -24,38 +22,30 @@ class PackageRelation(Base):
Integer, ForeignKey("RelationTypes.ID", ondelete="CASCADE"), Integer, ForeignKey("RelationTypes.ID", ondelete="CASCADE"),
nullable=False) nullable=False)
RelationType = relationship( RelationType = relationship(
"RelationType", backref=backref("package_relations", lazy="dynamic"), _RelationType, backref=backref("package_relations", lazy="dynamic"),
foreign_keys=[RelTypeID]) foreign_keys=[RelTypeID])
RelName = Column(String(255), unique=True) RelName = Column(String(255), unique=True)
__mapper_args__ = {"primary_key": [PackageID, RelName]} __mapper_args__ = {"primary_key": [PackageID, RelName]}
def __init__(self, def __init__(self, **kwargs):
Package: aurweb.models.package.Package = None, super().__init__(**kwargs)
RelationType: aurweb.models.relation_type.RelationType = None,
RelName: str = None, RelCondition: str = None, if not self.Package and not self.PackageID:
RelArch: str = None):
self.Package = Package
if not self.Package:
raise IntegrityError( raise IntegrityError(
statement="Foreign key PackageID cannot be null.", statement="Foreign key PackageID cannot be null.",
orig="PackageRelations.PackageID", orig="PackageRelations.PackageID",
params=("NULL")) params=("NULL"))
self.RelationType = RelationType if not self.RelationType and not self.RelTypeID:
if not self.RelationType:
raise IntegrityError( raise IntegrityError(
statement="Foreign key RelTypeID cannot be null.", statement="Foreign key RelTypeID cannot be null.",
orig="PackageRelations.RelTypeID", orig="PackageRelations.RelTypeID",
params=("NULL")) params=("NULL"))
self.RelName = RelName # nullable=False
if not self.RelName: if not self.RelName:
raise IntegrityError( raise IntegrityError(
statement="Column RelName cannot be null.", statement="Column RelName cannot be null.",
orig="PackageRelations.RelName", orig="PackageRelations.RelName",
params=("NULL")) params=("NULL"))
self.RelCondition = RelCondition
self.RelArch = RelArch

View file

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

View file

@ -2,9 +2,8 @@ from sqlalchemy import Column, ForeignKey, Integer
from sqlalchemy.exc import IntegrityError from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import backref, relationship from sqlalchemy.orm import backref, relationship
import aurweb.models.package
from aurweb.models.declarative import Base from aurweb.models.declarative import Base
from aurweb.models.package import Package as _Package
class PackageSource(Base): class PackageSource(Base):
@ -13,19 +12,16 @@ class PackageSource(Base):
PackageID = Column(Integer, ForeignKey("Packages.ID", ondelete="CASCADE"), PackageID = Column(Integer, ForeignKey("Packages.ID", ondelete="CASCADE"),
nullable=False) nullable=False)
Package = relationship( Package = relationship(
"Package", backref=backref("package_sources", lazy="dynamic", _Package, backref=backref("package_sources", lazy="dynamic",
cascade="all,delete"), cascade="all,delete"),
foreign_keys=[PackageID]) foreign_keys=[PackageID])
__mapper_args__ = {"primary_key": [PackageID]} __mapper_args__ = {"primary_key": [PackageID]}
def __init__(self, def __init__(self, **kwargs):
Package: aurweb.models.package.Package = None,
**kwargs):
super().__init__(**kwargs) super().__init__(**kwargs)
self.Package = Package if not self.Package and not self.PackageID:
if not self.Package:
raise IntegrityError( raise IntegrityError(
statement="Foreign key PackageID cannot be null.", statement="Foreign key PackageID cannot be null.",
orig="PackageSources.PackageID", orig="PackageSources.PackageID",

View file

@ -2,10 +2,9 @@ from sqlalchemy import Column, ForeignKey, Integer
from sqlalchemy.exc import IntegrityError from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import backref, relationship from sqlalchemy.orm import backref, relationship
import aurweb.models.package_base
import aurweb.models.user
from aurweb.models.declarative import Base from aurweb.models.declarative import Base
from aurweb.models.package_base import PackageBase as _PackageBase
from aurweb.models.user import User as _User
class PackageVote(Base): class PackageVote(Base):
@ -15,37 +14,33 @@ class PackageVote(Base):
Integer, ForeignKey("Users.ID", ondelete="CASCADE"), Integer, ForeignKey("Users.ID", ondelete="CASCADE"),
nullable=False) nullable=False)
User = relationship( User = relationship(
"User", backref=backref("package_votes", lazy="dynamic"), _User, backref=backref("package_votes", lazy="dynamic"),
foreign_keys=[UsersID]) foreign_keys=[UsersID])
PackageBaseID = Column( PackageBaseID = Column(
Integer, ForeignKey("PackageBases.ID", ondelete="CASCADE"), Integer, ForeignKey("PackageBases.ID", ondelete="CASCADE"),
nullable=False) nullable=False)
PackageBase = relationship( PackageBase = relationship(
"PackageBase", backref=backref("package_votes", lazy="dynamic"), _PackageBase, backref=backref("package_votes", lazy="dynamic"),
foreign_keys=[PackageBaseID]) foreign_keys=[PackageBaseID])
__mapper_args__ = {"primary_key": [UsersID, PackageBaseID]} __mapper_args__ = {"primary_key": [UsersID, PackageBaseID]}
def __init__(self, def __init__(self, **kwargs):
User: aurweb.models.user.User = None, super().__init__(**kwargs)
PackageBase: aurweb.models.package_base.PackageBase = None,
VoteTS: int = None): if not self.User and not self.UsersID:
self.User = User
if not self.User:
raise IntegrityError( raise IntegrityError(
statement="Foreign key UsersID cannot be null.", statement="Foreign key UsersID cannot be null.",
orig="PackageVotes.UsersID", orig="PackageVotes.UsersID",
params=("NULL")) params=("NULL"))
self.PackageBase = PackageBase if not self.PackageBase and not self.PackageBaseID:
if not self.PackageBase:
raise IntegrityError( raise IntegrityError(
statement="Foreign key PackageBaseID cannot be null.", statement="Foreign key PackageBaseID cannot be null.",
orig="PackageVotes.PackageBaseID", orig="PackageVotes.PackageBaseID",
params=("NULL")) params=("NULL"))
self.VoteTS = VoteTS
if not self.VoteTS: if not self.VoteTS:
raise IntegrityError( raise IntegrityError(
statement="Column VoteTS cannot be null.", statement="Column VoteTS cannot be null.",

View file

@ -4,7 +4,7 @@ from sqlalchemy.orm import backref, relationship
from aurweb.db import make_random_value, query from aurweb.db import make_random_value, query
from aurweb.models.declarative import Base from aurweb.models.declarative import Base
from aurweb.models.user import User from aurweb.models.user import User as _User
class Session(Base): class Session(Base):
@ -14,22 +14,24 @@ class Session(Base):
Integer, ForeignKey("Users.ID", ondelete="CASCADE"), Integer, ForeignKey("Users.ID", ondelete="CASCADE"),
nullable=False) nullable=False)
User = relationship( User = relationship(
"User", backref=backref("session", uselist=False), _User, backref=backref("session", uselist=False),
foreign_keys=[UsersID]) foreign_keys=[UsersID])
__mapper_args__ = {"primary_key": [UsersID]} __mapper_args__ = {"primary_key": [UsersID]}
def __init__(self, **kwargs): def __init__(self, **kwargs):
self.UsersID = kwargs.get("UsersID") super().__init__(**kwargs)
if not query(User, User.ID == self.UsersID).first():
user_exists = query(
query(_User).filter(_User.ID == self.UsersID).exists()
).scalar()
if not user_exists:
raise IntegrityError( raise IntegrityError(
statement="Foreign key UsersID cannot be null.", statement=("Foreign key UsersID cannot be null and "
"must be a valid user's ID."),
orig="Sessions.UsersID", orig="Sessions.UsersID",
params=("NULL")) params=("NULL"))
self.SessionID = kwargs.get("SessionID")
self.LastUpdateTS = kwargs.get("LastUpdateTS")
def generate_unique_sid(): def generate_unique_sid():
return make_random_value(Session, Session.SessionID) return make_random_value(Session, Session.SessionID)

View file

@ -11,21 +11,17 @@ class Term(Base):
__mapper_args__ = {"primary_key": [ID]} __mapper_args__ = {"primary_key": [ID]}
def __init__(self, def __init__(self, **kwargs):
Description: str = None, URL: str = None, super().__init__(**kwargs)
Revision: int = None):
self.Description = Description
if not self.Description: if not self.Description:
raise IntegrityError( raise IntegrityError(
statement="Column Description cannot be null.", statement="Column Description cannot be null.",
orig="Terms.Description", orig="Terms.Description",
params=("NULL")) params=("NULL"))
self.URL = URL
if not self.URL: if not self.URL:
raise IntegrityError( raise IntegrityError(
statement="Column URL cannot be null.", statement="Column URL cannot be null.",
orig="Terms.URL", orig="Terms.URL",
params=("NULL")) params=("NULL"))
self.Revision = Revision

View file

@ -2,10 +2,9 @@ from sqlalchemy import Column, ForeignKey, Integer
from sqlalchemy.exc import IntegrityError from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import backref, relationship from sqlalchemy.orm import backref, relationship
import aurweb.models.tu_voteinfo
import aurweb.models.user
from aurweb.models.declarative import Base from aurweb.models.declarative import Base
from aurweb.models.tu_voteinfo import TUVoteInfo as _TUVoteInfo
from aurweb.models.user import User as _User
class TUVote(Base): class TUVote(Base):
@ -14,29 +13,27 @@ class TUVote(Base):
VoteID = Column(Integer, ForeignKey("TU_VoteInfo.ID", ondelete="CASCADE"), VoteID = Column(Integer, ForeignKey("TU_VoteInfo.ID", ondelete="CASCADE"),
nullable=False) nullable=False)
VoteInfo = relationship( VoteInfo = relationship(
"TUVoteInfo", backref=backref("tu_votes", lazy="dynamic"), _TUVoteInfo, backref=backref("tu_votes", lazy="dynamic"),
foreign_keys=[VoteID]) foreign_keys=[VoteID])
UserID = Column(Integer, ForeignKey("Users.ID", ondelete="CASCADE"), UserID = Column(Integer, ForeignKey("Users.ID", ondelete="CASCADE"),
nullable=False) nullable=False)
User = relationship( User = relationship(
"User", backref=backref("tu_votes", lazy="dynamic"), _User, backref=backref("tu_votes", lazy="dynamic"),
foreign_keys=[UserID]) foreign_keys=[UserID])
__mapper_args__ = {"primary_key": [VoteID, UserID]} __mapper_args__ = {"primary_key": [VoteID, UserID]}
def __init__(self, def __init__(self, **kwargs):
VoteInfo: aurweb.models.tu_voteinfo.TUVoteInfo = None, super().__init__(**kwargs)
User: aurweb.models.user.User = None):
self.VoteInfo = VoteInfo if not self.VoteInfo and not self.VoteID:
if self.VoteInfo is None:
raise IntegrityError( raise IntegrityError(
statement="Foreign key VoteID cannot be null.", statement="Foreign key VoteID cannot be null.",
orig="TU_Votes.VoteID", orig="TU_Votes.VoteID",
params=("NULL")) params=("NULL"))
self.User = User if not self.User and not self.UserID:
if self.User is None:
raise IntegrityError( raise IntegrityError(
statement="Foreign key UserID cannot be null.", statement="Foreign key UserID cannot be null.",
orig="TU_Votes.UserID", orig="TU_Votes.UserID",

View file

@ -6,9 +6,8 @@ from sqlalchemy import Column, ForeignKey, Integer
from sqlalchemy.exc import IntegrityError from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import backref, relationship from sqlalchemy.orm import backref, relationship
import aurweb.models.user
from aurweb.models.declarative import Base from aurweb.models.declarative import Base
from aurweb.models.user import User as _User
class TUVoteInfo(Base): class TUVoteInfo(Base):
@ -20,57 +19,44 @@ class TUVoteInfo(Base):
Integer, ForeignKey("Users.ID", ondelete="CASCADE"), Integer, ForeignKey("Users.ID", ondelete="CASCADE"),
nullable=False) nullable=False)
Submitter = relationship( Submitter = relationship(
"User", backref=backref("tu_voteinfo_set", lazy="dynamic"), _User, backref=backref("tu_voteinfo_set", lazy="dynamic"),
foreign_keys=[SubmitterID]) foreign_keys=[SubmitterID])
__mapper_args__ = {"primary_key": [ID]} __mapper_args__ = {"primary_key": [ID]}
def __init__(self, def __init__(self, **kwargs):
Agenda: str = None,
User: str = None,
Submitted: int = None,
End: int = None,
Quorum: float = None,
Submitter: aurweb.models.user.User = None,
**kwargs):
super().__init__(**kwargs) super().__init__(**kwargs)
self.Agenda = Agenda
if self.Agenda is None: if self.Agenda is None:
raise IntegrityError( raise IntegrityError(
statement="Column Agenda cannot be null.", statement="Column Agenda cannot be null.",
orig="TU_VoteInfo.Agenda", orig="TU_VoteInfo.Agenda",
params=("NULL")) params=("NULL"))
self.User = User
if self.User is None: if self.User is None:
raise IntegrityError( raise IntegrityError(
statement="Column User cannot be null.", statement="Column User cannot be null.",
orig="TU_VoteInfo.User", orig="TU_VoteInfo.User",
params=("NULL")) params=("NULL"))
self.Submitted = Submitted
if self.Submitted is None: if self.Submitted is None:
raise IntegrityError( raise IntegrityError(
statement="Column Submitted cannot be null.", statement="Column Submitted cannot be null.",
orig="TU_VoteInfo.Submitted", orig="TU_VoteInfo.Submitted",
params=("NULL")) params=("NULL"))
self.End = End
if self.End is None: if self.End is None:
raise IntegrityError( raise IntegrityError(
statement="Column End cannot be null.", statement="Column End cannot be null.",
orig="TU_VoteInfo.End", orig="TU_VoteInfo.End",
params=("NULL")) params=("NULL"))
if Quorum is None: if self.Quorum is None:
raise IntegrityError( raise IntegrityError(
statement="Column Quorum cannot be null.", statement="Column Quorum cannot be null.",
orig="TU_VoteInfo.Quorum", orig="TU_VoteInfo.Quorum",
params=("NULL")) params=("NULL"))
self.Quorum = Quorum
self.Submitter = Submitter
if not self.Submitter: if not self.Submitter:
raise IntegrityError( raise IntegrityError(
statement="Foreign key SubmitterID cannot be null.", statement="Foreign key SubmitterID cannot be null.",
@ -86,7 +72,11 @@ class TUVoteInfo(Base):
def __getattribute__(self, key: str): def __getattribute__(self, key: str):
""" Customize getattr to floatify any fetched Quorum values. """ """ Customize getattr to floatify any fetched Quorum values. """
attr = super().__getattribute__(key) attr = super().__getattribute__(key)
return float(attr) if key == "Quorum" else attr if attr is None:
return attr
elif key == "Quorum":
return float(attr)
return attr
def is_running(self): def is_running(self):
return self.End > int(datetime.utcnow().timestamp()) return self.End > int(datetime.utcnow().timestamp())

View file

@ -13,6 +13,7 @@ import aurweb.models.account_type
import aurweb.schema import aurweb.schema
from aurweb import db from aurweb import db
from aurweb.models.account_type import AccountType as _AccountType
from aurweb.models.ban import is_banned from aurweb.models.ban import is_banned
from aurweb.models.declarative import Base from aurweb.models.declarative import Base
@ -29,7 +30,7 @@ class User(Base):
Integer, ForeignKey("AccountTypes.ID", ondelete="NO ACTION"), Integer, ForeignKey("AccountTypes.ID", ondelete="NO ACTION"),
nullable=False, server_default=text("1")) nullable=False, server_default=text("1"))
AccountType = relationship( AccountType = relationship(
"AccountType", _AccountType,
backref=backref("users", lazy="dynamic"), backref=backref("users", lazy="dynamic"),
foreign_keys=[AccountTypeID], foreign_keys=[AccountTypeID],
uselist=False) uselist=False)