mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
change(fastapi): refactor database ORM model definitions
We don't want to depend on the database to load up data about the models we define. We now leverage the existing `aurweb.schema` module for table definitions and set __table_args__["autoload"] to False. Signed-off-by: Kevin Morris <kevr@0cost.org>
This commit is contained in:
parent
e4a5b7fae9
commit
446a082352
31 changed files with 212 additions and 356 deletions
|
@ -1,28 +1,24 @@
|
|||
from sqlalchemy import Column, ForeignKey, Integer
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.orm import backref, relationship
|
||||
|
||||
from aurweb import schema
|
||||
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):
|
||||
__tablename__ = "AcceptedTerms"
|
||||
__table__ = schema.AcceptedTerms
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {"primary_key": [__table__.c.TermsID]}
|
||||
|
||||
UsersID = Column(Integer, ForeignKey("Users.ID", ondelete="CASCADE"),
|
||||
nullable=False)
|
||||
User = relationship(
|
||||
_User, backref=backref("accepted_terms", lazy="dynamic"),
|
||||
foreign_keys=[UsersID])
|
||||
foreign_keys=[__table__.c.UsersID])
|
||||
|
||||
TermsID = Column(Integer, ForeignKey("Terms.ID", ondelete="CASCADE"),
|
||||
nullable=False)
|
||||
Term = relationship(
|
||||
_Term, backref=backref("accepted_terms", lazy="dynamic"),
|
||||
foreign_keys=[TermsID])
|
||||
|
||||
__mapper_args__ = {"primary_key": [TermsID]}
|
||||
foreign_keys=[__table__.c.TermsID])
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
from sqlalchemy import Column, Integer
|
||||
|
||||
from aurweb import db
|
||||
from aurweb import schema
|
||||
from aurweb.models.declarative import Base
|
||||
|
||||
USER = "User"
|
||||
|
@ -8,37 +6,10 @@ TRUSTED_USER = "Trusted User"
|
|||
DEVELOPER = "Developer"
|
||||
TRUSTED_USER_AND_DEV = "Trusted User & Developer"
|
||||
|
||||
|
||||
class AccountType(Base):
|
||||
""" An ORM model of a single AccountTypes record. """
|
||||
__tablename__ = "AccountTypes"
|
||||
|
||||
ID = Column(Integer, primary_key=True)
|
||||
|
||||
__mapper_args__ = {"primary_key": [ID]}
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
self.AccountType = kwargs.pop("AccountType")
|
||||
|
||||
def __str__(self):
|
||||
return str(self.AccountType)
|
||||
|
||||
def __repr__(self):
|
||||
return "<AccountType(ID='%s', AccountType='%s')>" % (
|
||||
self.ID, str(self))
|
||||
|
||||
|
||||
# Fetch account type IDs from the database for constants.
|
||||
_account_types = db.query(AccountType)
|
||||
USER_ID = _account_types.filter(
|
||||
AccountType.AccountType == USER).first().ID
|
||||
TRUSTED_USER_ID = _account_types.filter(
|
||||
AccountType.AccountType == TRUSTED_USER).first().ID
|
||||
DEVELOPER_ID = _account_types.filter(
|
||||
AccountType.AccountType == DEVELOPER).first().ID
|
||||
TRUSTED_USER_AND_DEV_ID = _account_types.filter(
|
||||
AccountType.AccountType == TRUSTED_USER_AND_DEV).first().ID
|
||||
_account_types = None # Get rid of the query handle.
|
||||
USER_ID = 1
|
||||
TRUSTED_USER_ID = 2
|
||||
DEVELOPER_ID = 3
|
||||
TRUSTED_USER_AND_DEV_ID = 4
|
||||
|
||||
# Map string constants to integer constants.
|
||||
ACCOUNT_TYPE_ID = {
|
||||
|
@ -50,3 +21,20 @@ ACCOUNT_TYPE_ID = {
|
|||
|
||||
# Reversed ACCOUNT_TYPE_ID mapping.
|
||||
ACCOUNT_TYPE_NAME = {v: k for k, v in ACCOUNT_TYPE_ID.items()}
|
||||
|
||||
|
||||
class AccountType(Base):
|
||||
""" An ORM model of a single AccountTypes record. """
|
||||
__table__ = schema.AccountTypes
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {"primary_key": [__table__.c.ID]}
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
self.AccountType = kwargs.pop("AccountType")
|
||||
|
||||
def __str__(self):
|
||||
return str(self.AccountType)
|
||||
|
||||
def __repr__(self):
|
||||
return "<AccountType(ID='%s', AccountType='%s')>" % (
|
||||
self.ID, str(self))
|
||||
|
|
|
@ -1,15 +1,13 @@
|
|||
from sqlalchemy import Column, String
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
|
||||
from aurweb import schema
|
||||
from aurweb.models.declarative import Base
|
||||
|
||||
|
||||
class ApiRateLimit(Base):
|
||||
__tablename__ = "ApiRateLimit"
|
||||
|
||||
IP = Column(String(45), primary_key=True, unique=True, default=str())
|
||||
|
||||
__mapper_args__ = {"primary_key": [IP]}
|
||||
__table__ = schema.ApiRateLimit
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {"primary_key": [__table__.c.IP]}
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
|
|
@ -1,15 +1,13 @@
|
|||
from fastapi import Request
|
||||
from sqlalchemy import Column, String
|
||||
|
||||
from aurweb import schema
|
||||
from aurweb.models.declarative import Base
|
||||
|
||||
|
||||
class Ban(Base):
|
||||
__tablename__ = "Bans"
|
||||
|
||||
IPAddress = Column(String(45), primary_key=True)
|
||||
|
||||
__mapper_args__ = {"primary_key": [IPAddress]}
|
||||
__table__ = schema.Bans
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {"primary_key": [__table__.c.IPAddress]}
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
self.IPAddress = kwargs.get("IPAddress")
|
||||
|
|
|
@ -2,8 +2,6 @@ import json
|
|||
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
|
||||
import aurweb.db
|
||||
|
||||
from aurweb import util
|
||||
|
||||
|
||||
|
@ -25,12 +23,10 @@ Base = declarative_base()
|
|||
|
||||
# Setup __table_args__ applicable to every table.
|
||||
Base.__table_args__ = {
|
||||
"autoload": True,
|
||||
"autoload_with": aurweb.db.get_engine(),
|
||||
"autoload": False,
|
||||
"extend_existing": True
|
||||
}
|
||||
|
||||
|
||||
# Setup Base.as_dict and Base.json.
|
||||
#
|
||||
# With this, declarative models can use .as_dict() or .json()
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
from sqlalchemy import Column, Integer
|
||||
|
||||
from aurweb import db
|
||||
from aurweb import schema
|
||||
from aurweb.models.declarative import Base
|
||||
|
||||
DEPENDS = "depends"
|
||||
|
@ -8,23 +6,16 @@ MAKEDEPENDS = "makedepends"
|
|||
CHECKDEPENDS = "checkdepends"
|
||||
OPTDEPENDS = "optdepends"
|
||||
|
||||
DEPENDS_ID = 1
|
||||
MAKEDEPENDS_ID = 2
|
||||
CHECKDEPENDS_ID = 3
|
||||
OPTDEPENDS_ID = 4
|
||||
|
||||
|
||||
class DependencyType(Base):
|
||||
__tablename__ = "DependencyTypes"
|
||||
|
||||
ID = Column(Integer, primary_key=True)
|
||||
|
||||
__mapper_args__ = {"primary_key": [ID]}
|
||||
__table__ = schema.DependencyTypes
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {"primary_key": [__table__.c.ID]}
|
||||
|
||||
def __init__(self, Name: str = None):
|
||||
self.Name = Name
|
||||
|
||||
|
||||
DEPENDS_ID = db.query(DependencyType).filter(
|
||||
DependencyType.Name == DEPENDS).first().ID
|
||||
MAKEDEPENDS_ID = db.query(DependencyType).filter(
|
||||
DependencyType.Name == MAKEDEPENDS).first().ID
|
||||
CHECKDEPENDS_ID = db.query(DependencyType).filter(
|
||||
DependencyType.Name == CHECKDEPENDS).first().ID
|
||||
OPTDEPENDS_ID = db.query(DependencyType).filter(
|
||||
DependencyType.Name == OPTDEPENDS).first().ID
|
||||
|
|
|
@ -1,15 +1,13 @@
|
|||
from sqlalchemy import Column, Integer
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
|
||||
from aurweb import schema
|
||||
from aurweb.models.declarative import Base
|
||||
|
||||
|
||||
class Group(Base):
|
||||
__tablename__ = "Groups"
|
||||
|
||||
ID = Column(Integer, primary_key=True)
|
||||
|
||||
__mapper_args__ = {"primary_key": [ID]}
|
||||
__table__ = schema.Groups
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {"primary_key": [__table__.c.ID]}
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
|
|
@ -1,15 +1,13 @@
|
|||
from sqlalchemy import Column, Integer
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
|
||||
from aurweb import schema
|
||||
from aurweb.models.declarative import Base
|
||||
|
||||
|
||||
class License(Base):
|
||||
__tablename__ = "Licenses"
|
||||
|
||||
ID = Column(Integer, primary_key=True)
|
||||
|
||||
__mapper_args__ = {"primary_key": [ID]}
|
||||
__table__ = schema.Licenses
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {"primary_key": [__table__.c.ID]}
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
from sqlalchemy import Column, Integer
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
|
||||
from aurweb import schema
|
||||
from aurweb.models.declarative import Base
|
||||
|
||||
# TODO: Fix this! Official packages aren't from aur.archlinux.org...
|
||||
|
@ -8,11 +8,9 @@ OFFICIAL_BASE = "https://aur.archlinux.org"
|
|||
|
||||
|
||||
class OfficialProvider(Base):
|
||||
__tablename__ = "OfficialProviders"
|
||||
|
||||
ID = Column(Integer, primary_key=True)
|
||||
|
||||
__mapper_args__ = {"primary_key": [ID]}
|
||||
__table__ = schema.OfficialProviders
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {"primary_key": [__table__.c.ID]}
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
|
|
@ -1,24 +1,19 @@
|
|||
from sqlalchemy import Column, ForeignKey, Integer
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.orm import backref, relationship
|
||||
|
||||
from aurweb import schema
|
||||
from aurweb.models.declarative import Base
|
||||
from aurweb.models.package_base import PackageBase as _PackageBase
|
||||
|
||||
|
||||
class Package(Base):
|
||||
__tablename__ = "Packages"
|
||||
__table__ = schema.Packages
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {"primary_key": [__table__.c.ID]}
|
||||
|
||||
ID = Column(Integer, primary_key=True)
|
||||
|
||||
PackageBaseID = Column(
|
||||
Integer, ForeignKey("PackageBases.ID", ondelete="CASCADE"),
|
||||
nullable=False)
|
||||
PackageBase = relationship(
|
||||
_PackageBase, backref=backref("packages", lazy="dynamic"),
|
||||
foreign_keys=[PackageBaseID])
|
||||
|
||||
__mapper_args__ = {"primary_key": [ID]}
|
||||
foreign_keys=[__table__.c.PackageBaseID])
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
|
|
@ -1,38 +1,33 @@
|
|||
from datetime import datetime
|
||||
|
||||
from sqlalchemy import Column, ForeignKey, Integer
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.orm import backref, relationship
|
||||
|
||||
from aurweb import schema
|
||||
from aurweb.models.declarative import Base
|
||||
from aurweb.models.user import User as _User
|
||||
|
||||
|
||||
class PackageBase(Base):
|
||||
__tablename__ = "PackageBases"
|
||||
__table__ = schema.PackageBases
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {"primary_key": [__table__.c.ID]}
|
||||
|
||||
FlaggerUID = Column(Integer,
|
||||
ForeignKey("Users.ID", ondelete="SET NULL"))
|
||||
Flagger = relationship(
|
||||
_User, backref=backref("flagged_bases", lazy="dynamic"),
|
||||
foreign_keys=[FlaggerUID])
|
||||
foreign_keys=[__table__.c.FlaggerUID])
|
||||
|
||||
SubmitterUID = Column(Integer,
|
||||
ForeignKey("Users.ID", ondelete="SET NULL"))
|
||||
Submitter = relationship(
|
||||
_User, backref=backref("submitted_bases", lazy="dynamic"),
|
||||
foreign_keys=[SubmitterUID])
|
||||
foreign_keys=[__table__.c.SubmitterUID])
|
||||
|
||||
MaintainerUID = Column(Integer,
|
||||
ForeignKey("Users.ID", ondelete="SET NULL"))
|
||||
Maintainer = relationship(
|
||||
_User, backref=backref("maintained_bases", lazy="dynamic"),
|
||||
foreign_keys=[MaintainerUID])
|
||||
foreign_keys=[__table__.c.MaintainerUID])
|
||||
|
||||
PackagerUID = Column(Integer, ForeignKey("Users.ID", ondelete="SET NULL"))
|
||||
Packager = relationship(
|
||||
_User, backref=backref("package_bases", lazy="dynamic"),
|
||||
foreign_keys=[PackagerUID])
|
||||
foreign_keys=[__table__.c.PackagerUID])
|
||||
|
||||
# A set used to check for floatable values.
|
||||
TO_FLOAT = {"Popularity"}
|
||||
|
|
|
@ -1,15 +1,13 @@
|
|||
from sqlalchemy import Column, Integer
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
|
||||
from aurweb import schema
|
||||
from aurweb.models.declarative import Base
|
||||
|
||||
|
||||
class PackageBlacklist(Base):
|
||||
__tablename__ = "PackageBlacklist"
|
||||
|
||||
ID = Column(Integer, primary_key=True)
|
||||
|
||||
__mapper_args__ = {"primary_key": [ID]}
|
||||
__table__ = schema.PackageBlacklist
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {"primary_key": [__table__.c.ID]}
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
|
|
@ -1,30 +1,26 @@
|
|||
from sqlalchemy import Column, ForeignKey, Integer
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.orm import backref, relationship
|
||||
|
||||
from aurweb import schema
|
||||
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):
|
||||
__tablename__ = "PackageComaintainers"
|
||||
__table__ = schema.PackageComaintainers
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {
|
||||
"primary_key": [__table__.c.UsersID, __table__.c.PackageBaseID]
|
||||
}
|
||||
|
||||
UsersID = Column(
|
||||
Integer, ForeignKey("Users.ID", ondelete="CASCADE"),
|
||||
nullable=False)
|
||||
User = relationship(
|
||||
_User, backref=backref("comaintained", lazy="dynamic"),
|
||||
foreign_keys=[UsersID])
|
||||
foreign_keys=[__table__.c.UsersID])
|
||||
|
||||
PackageBaseID = Column(
|
||||
Integer, ForeignKey("PackageBases.ID", ondelete="CASCADE"),
|
||||
nullable=False)
|
||||
PackageBase = relationship(
|
||||
_PackageBase, backref=backref("comaintainers", lazy="dynamic"),
|
||||
foreign_keys=[PackageBaseID])
|
||||
|
||||
__mapper_args__ = {"primary_key": [UsersID, PackageBaseID]}
|
||||
foreign_keys=[__table__.c.PackageBaseID])
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
|
|
@ -1,43 +1,33 @@
|
|||
from sqlalchemy import Column, ForeignKey, Integer
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.orm import backref, relationship
|
||||
|
||||
from aurweb import schema
|
||||
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):
|
||||
__tablename__ = "PackageComments"
|
||||
__table__ = schema.PackageComments
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {"primary_key": [__table__.c.ID]}
|
||||
|
||||
ID = Column(Integer, primary_key=True)
|
||||
|
||||
PackageBaseID = Column(
|
||||
Integer, ForeignKey("PackageBases.ID", ondelete="CASCADE"),
|
||||
nullable=False)
|
||||
PackageBase = relationship(
|
||||
_PackageBase, backref=backref("comments", lazy="dynamic",
|
||||
cascade="all, delete"),
|
||||
foreign_keys=[PackageBaseID])
|
||||
foreign_keys=[__table__.c.PackageBaseID])
|
||||
|
||||
UsersID = Column(Integer, ForeignKey("Users.ID", ondelete="SET NULL"))
|
||||
User = relationship(
|
||||
_User, backref=backref("package_comments", lazy="dynamic"),
|
||||
foreign_keys=[UsersID])
|
||||
foreign_keys=[__table__.c.UsersID])
|
||||
|
||||
EditedUsersID = Column(
|
||||
Integer, ForeignKey("Users.ID", ondelete="SET NULL"))
|
||||
Editor = relationship(
|
||||
_User, backref=backref("edited_comments", lazy="dynamic"),
|
||||
foreign_keys=[EditedUsersID])
|
||||
foreign_keys=[__table__.c.EditedUsersID])
|
||||
|
||||
DelUsersID = Column(
|
||||
Integer, ForeignKey("Users.ID", ondelete="SET NULL"))
|
||||
Deleter = relationship(
|
||||
_User, backref=backref("deleted_comments", lazy="dynamic"),
|
||||
foreign_keys=[DelUsersID])
|
||||
|
||||
__mapper_args__ = {"primary_key": [ID]}
|
||||
foreign_keys=[__table__.c.DelUsersID])
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
|
|
@ -1,34 +1,28 @@
|
|||
from sqlalchemy import Column, ForeignKey, Integer, String
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.orm import backref, relationship
|
||||
|
||||
from aurweb import schema
|
||||
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):
|
||||
__tablename__ = "PackageDepends"
|
||||
__table__ = schema.PackageDepends
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {
|
||||
"primary_key": [__table__.c.PackageID, __table__.c.DepName]
|
||||
}
|
||||
|
||||
PackageID = Column(
|
||||
Integer, ForeignKey("Packages.ID", ondelete="CASCADE"),
|
||||
nullable=False)
|
||||
Package = relationship(
|
||||
_Package, backref=backref("package_dependencies", lazy="dynamic",
|
||||
cascade="all, delete"),
|
||||
foreign_keys=[PackageID])
|
||||
foreign_keys=[__table__.c.PackageID])
|
||||
|
||||
DepTypeID = Column(
|
||||
Integer, ForeignKey("DependencyTypes.ID", ondelete="NO ACTION"),
|
||||
nullable=False)
|
||||
DependencyType = relationship(
|
||||
_DependencyType,
|
||||
backref=backref("package_dependencies", lazy="dynamic"),
|
||||
foreign_keys=[DepTypeID])
|
||||
|
||||
DepName = Column(String(255), nullable=False)
|
||||
|
||||
__mapper_args__ = {"primary_key": [PackageID, DepName]}
|
||||
foreign_keys=[__table__.c.DepTypeID])
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
|
|
@ -1,28 +1,26 @@
|
|||
from sqlalchemy import Column, ForeignKey, Integer
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.orm import backref, relationship
|
||||
|
||||
from aurweb import schema
|
||||
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):
|
||||
__tablename__ = "PackageGroups"
|
||||
__table__ = schema.PackageGroups
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {
|
||||
"primary_key": [__table__.c.PackageID, __table__.c.GroupID]
|
||||
}
|
||||
|
||||
PackageID = Column(Integer, ForeignKey("Packages.ID", ondelete="CASCADE"),
|
||||
primary_key=True, nullable=True)
|
||||
Package = relationship(
|
||||
_Package, backref=backref("package_groups", lazy="dynamic"),
|
||||
foreign_keys=[PackageID])
|
||||
foreign_keys=[__table__.c.PackageID])
|
||||
|
||||
GroupID = Column(Integer, ForeignKey("Groups.ID", ondelete="CASCADE"),
|
||||
primary_key=True, nullable=True)
|
||||
Group = relationship(
|
||||
_Group, backref=backref("package_groups", lazy="dynamic"),
|
||||
foreign_keys=[GroupID])
|
||||
|
||||
__mapper_args__ = {"primary_key": [PackageID, GroupID]}
|
||||
foreign_keys=[__table__.c.GroupID])
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
|
|
@ -1,27 +1,22 @@
|
|||
from sqlalchemy import Column, ForeignKey, Integer, String, text
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.orm import backref, relationship
|
||||
|
||||
from aurweb import schema
|
||||
from aurweb.models.declarative import Base
|
||||
from aurweb.models.package_base import PackageBase as _PackageBase
|
||||
|
||||
|
||||
class PackageKeyword(Base):
|
||||
__tablename__ = "PackageKeywords"
|
||||
__table__ = schema.PackageKeywords
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {
|
||||
"primary_key": [__table__.c.PackageBaseID, __table__.c.Keyword]
|
||||
}
|
||||
|
||||
PackageBaseID = Column(
|
||||
Integer, ForeignKey("PackageBases.ID", ondelete="CASCADE"),
|
||||
primary_key=True, nullable=True)
|
||||
PackageBase = relationship(
|
||||
_PackageBase, backref=backref("keywords", lazy="dynamic",
|
||||
cascade="all, delete"),
|
||||
foreign_keys=[PackageBaseID])
|
||||
|
||||
Keyword = Column(
|
||||
String(255), primary_key=True, nullable=False,
|
||||
server_default=text("''"))
|
||||
|
||||
__mapper_args__ = {"primary_key": [PackageBaseID, Keyword]}
|
||||
foreign_keys=[__table__.c.PackageBaseID])
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
|
|
@ -1,32 +1,28 @@
|
|||
from sqlalchemy import Column, ForeignKey, Integer
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.orm import backref, relationship
|
||||
|
||||
from aurweb import schema
|
||||
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):
|
||||
__tablename__ = "PackageLicenses"
|
||||
__table__ = schema.PackageLicenses
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {
|
||||
"primary_key": [__table__.c.PackageID, __table__.c.LicenseID]
|
||||
}
|
||||
|
||||
PackageID = Column(
|
||||
Integer, ForeignKey("Packages.ID", ondelete="CASCADE"),
|
||||
primary_key=True, nullable=True)
|
||||
Package = relationship(
|
||||
_Package, backref=backref("package_licenses", lazy="dynamic",
|
||||
cascade="all, delete"),
|
||||
foreign_keys=[PackageID])
|
||||
foreign_keys=[__table__.c.PackageID])
|
||||
|
||||
LicenseID = Column(
|
||||
Integer, ForeignKey("Licenses.ID", ondelete="CASCADE"),
|
||||
primary_key=True, nullable=True)
|
||||
License = relationship(
|
||||
_License, backref=backref("package_licenses", lazy="dynamic",
|
||||
cascade="all, delete"),
|
||||
foreign_keys=[LicenseID])
|
||||
|
||||
__mapper_args__ = {"primary_key": [PackageID, LicenseID]}
|
||||
foreign_keys=[__table__.c.LicenseID])
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
|
|
@ -1,31 +1,27 @@
|
|||
from sqlalchemy import Column, ForeignKey, Integer
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.orm import backref, relationship
|
||||
|
||||
from aurweb import schema
|
||||
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):
|
||||
__tablename__ = "PackageNotifications"
|
||||
__table__ = schema.PackageNotifications
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {
|
||||
"primary_key": [__table__.c.UserID, __table__.c.PackageBaseID]
|
||||
}
|
||||
|
||||
UserID = Column(
|
||||
Integer, ForeignKey("Users.ID", ondelete="CASCADE"),
|
||||
nullable=False)
|
||||
User = relationship(
|
||||
_User, backref=backref("notifications", lazy="dynamic"),
|
||||
foreign_keys=[UserID])
|
||||
foreign_keys=[__table__.c.UserID])
|
||||
|
||||
PackageBaseID = Column(
|
||||
Integer, ForeignKey("PackageBases.ID", ondelete="CASCADE"),
|
||||
nullable=False)
|
||||
PackageBase = relationship(
|
||||
_PackageBase,
|
||||
backref=backref("notifications", lazy="dynamic"),
|
||||
foreign_keys=[PackageBaseID])
|
||||
|
||||
__mapper_args__ = {"primary_key": [UserID, PackageBaseID]}
|
||||
foreign_keys=[__table__.c.PackageBaseID])
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
|
|
@ -1,33 +1,27 @@
|
|||
from sqlalchemy import Column, ForeignKey, Integer, String
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.orm import backref, relationship
|
||||
|
||||
from aurweb import schema
|
||||
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):
|
||||
__tablename__ = "PackageRelations"
|
||||
__table__ = schema.PackageRelations
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {
|
||||
"primary_key": [__table__.c.PackageID, __table__.c.RelName]
|
||||
}
|
||||
|
||||
PackageID = Column(
|
||||
Integer, ForeignKey("Packages.ID", ondelete="CASCADE"),
|
||||
nullable=False)
|
||||
Package = relationship(
|
||||
_Package, backref=backref("package_relations", lazy="dynamic",
|
||||
cascade="all, delete"),
|
||||
foreign_keys=[PackageID])
|
||||
foreign_keys=[__table__.c.PackageID])
|
||||
|
||||
RelTypeID = Column(
|
||||
Integer, ForeignKey("RelationTypes.ID", ondelete="CASCADE"),
|
||||
nullable=False)
|
||||
RelationType = relationship(
|
||||
_RelationType, backref=backref("package_relations", lazy="dynamic"),
|
||||
foreign_keys=[RelTypeID])
|
||||
|
||||
RelName = Column(String(255), unique=True)
|
||||
|
||||
__mapper_args__ = {"primary_key": [PackageID, RelName]}
|
||||
foreign_keys=[__table__.c.RelTypeID])
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
from sqlalchemy import Column, ForeignKey, Integer
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.orm import backref, relationship
|
||||
|
||||
from aurweb import schema
|
||||
from aurweb.models.declarative import Base
|
||||
from aurweb.models.package_base import PackageBase as _PackageBase
|
||||
from aurweb.models.request_type import RequestType as _RequestType
|
||||
|
@ -20,34 +20,25 @@ REJECTED_ID = 3
|
|||
|
||||
|
||||
class PackageRequest(Base):
|
||||
__tablename__ = "PackageRequests"
|
||||
__table__ = schema.PackageRequests
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {"primary_key": [__table__.c.ID]}
|
||||
|
||||
ID = Column(Integer, primary_key=True)
|
||||
|
||||
ReqTypeID = Column(
|
||||
Integer, ForeignKey("RequestTypes.ID", ondelete="NO ACTION"),
|
||||
nullable=False)
|
||||
RequestType = relationship(
|
||||
_RequestType, backref=backref("package_requests", lazy="dynamic"),
|
||||
foreign_keys=[ReqTypeID])
|
||||
foreign_keys=[__table__.c.ReqTypeID])
|
||||
|
||||
UsersID = Column(Integer, ForeignKey("Users.ID", ondelete="SET NULL"))
|
||||
User = relationship(
|
||||
_User, backref=backref("package_requests", lazy="dynamic"),
|
||||
foreign_keys=[UsersID])
|
||||
foreign_keys=[__table__.c.UsersID])
|
||||
|
||||
PackageBaseID = Column(
|
||||
Integer, ForeignKey("PackageBases.ID", ondelete="SET NULL"))
|
||||
PackageBase = relationship(
|
||||
_PackageBase, backref=backref("requests", lazy="dynamic"),
|
||||
foreign_keys=[PackageBaseID])
|
||||
foreign_keys=[__table__.c.PackageBaseID])
|
||||
|
||||
ClosedUID = Column(Integer, ForeignKey("Users.ID", ondelete="SET NULL"))
|
||||
Closer = relationship(
|
||||
_User, backref=backref("closed_requests", lazy="dynamic"),
|
||||
foreign_keys=[ClosedUID])
|
||||
|
||||
__mapper_args__ = {"primary_key": [ID]}
|
||||
foreign_keys=[__table__.c.ClosedUID])
|
||||
|
||||
STATUS_DISPLAY = {
|
||||
PENDING_ID: PENDING,
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
from sqlalchemy import Column, ForeignKey, Integer
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.orm import backref, relationship
|
||||
|
||||
from aurweb import schema
|
||||
from aurweb.models.declarative import Base
|
||||
from aurweb.models.package import Package as _Package
|
||||
|
||||
|
||||
class PackageSource(Base):
|
||||
__tablename__ = "PackageSources"
|
||||
__table__ = schema.PackageSources
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {
|
||||
"primary_key": [__table__.c.PackageID]
|
||||
}
|
||||
|
||||
PackageID = Column(Integer, ForeignKey("Packages.ID", ondelete="CASCADE"),
|
||||
nullable=False)
|
||||
Package = relationship(
|
||||
_Package, backref=backref("package_sources", lazy="dynamic",
|
||||
cascade="all, delete"),
|
||||
foreign_keys=[PackageID])
|
||||
|
||||
__mapper_args__ = {"primary_key": [PackageID]}
|
||||
foreign_keys=[__table__.c.PackageID])
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
|
|
@ -1,30 +1,26 @@
|
|||
from sqlalchemy import Column, ForeignKey, Integer
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.orm import backref, relationship
|
||||
|
||||
from aurweb import schema
|
||||
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):
|
||||
__tablename__ = "PackageVotes"
|
||||
__table__ = schema.PackageVotes
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {
|
||||
"primary_key": [__table__.c.UsersID, __table__.c.PackageBaseID]
|
||||
}
|
||||
|
||||
UsersID = Column(
|
||||
Integer, ForeignKey("Users.ID", ondelete="CASCADE"),
|
||||
nullable=False)
|
||||
User = relationship(
|
||||
_User, backref=backref("package_votes", lazy="dynamic"),
|
||||
foreign_keys=[UsersID])
|
||||
foreign_keys=[__table__.c.UsersID])
|
||||
|
||||
PackageBaseID = Column(
|
||||
Integer, ForeignKey("PackageBases.ID", ondelete="CASCADE"),
|
||||
nullable=False)
|
||||
PackageBase = relationship(
|
||||
_PackageBase, backref=backref("package_votes", lazy="dynamic"),
|
||||
foreign_keys=[PackageBaseID])
|
||||
|
||||
__mapper_args__ = {"primary_key": [UsersID, PackageBaseID]}
|
||||
foreign_keys=[__table__.c.PackageBaseID])
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
|
|
@ -1,27 +1,19 @@
|
|||
from sqlalchemy import Column, Integer
|
||||
|
||||
from aurweb import db
|
||||
from aurweb import schema
|
||||
from aurweb.models.declarative import Base
|
||||
|
||||
CONFLICTS = "conflicts"
|
||||
PROVIDES = "provides"
|
||||
REPLACES = "replaces"
|
||||
|
||||
CONFLICTS_ID = 1
|
||||
PROVIDES_ID = 2
|
||||
REPLACES_ID = 3
|
||||
|
||||
|
||||
class RelationType(Base):
|
||||
__tablename__ = "RelationTypes"
|
||||
|
||||
ID = Column(Integer, primary_key=True)
|
||||
|
||||
__mapper_args__ = {"primary_key": [ID]}
|
||||
__table__ = schema.RelationTypes
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {"primary_key": [__table__.c.ID]}
|
||||
|
||||
def __init__(self, Name: str = None):
|
||||
self.Name = Name
|
||||
|
||||
|
||||
CONFLICTS_ID = db.query(RelationType).filter(
|
||||
RelationType.Name == CONFLICTS).first().ID
|
||||
PROVIDES_ID = db.query(RelationType).filter(
|
||||
RelationType.Name == PROVIDES).first().ID
|
||||
REPLACES_ID = db.query(RelationType).filter(
|
||||
RelationType.Name == REPLACES).first().ID
|
||||
|
|
|
@ -1,25 +1,20 @@
|
|||
from sqlalchemy import Column, Integer
|
||||
|
||||
from aurweb import db
|
||||
from aurweb import schema
|
||||
from aurweb.models.declarative import Base
|
||||
|
||||
DELETION = "deletion"
|
||||
ORPHAN = "orphan"
|
||||
MERGE = "merge"
|
||||
|
||||
DELETION_ID = 1
|
||||
ORPHAN_ID = 2
|
||||
MERGE_ID = 3
|
||||
|
||||
|
||||
class RequestType(Base):
|
||||
__tablename__ = "RequestTypes"
|
||||
|
||||
ID = Column(Integer, primary_key=True)
|
||||
|
||||
__mapper_args__ = {"primary_key": [ID]}
|
||||
__table__ = schema.RequestTypes
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {"primary_key": [__table__.c.ID]}
|
||||
|
||||
def name_display(self) -> str:
|
||||
""" Return the Name column with its first char capitalized. """
|
||||
return self.Name.title()
|
||||
|
||||
|
||||
DELETION_ID = db.query(RequestType, RequestType.Name == DELETION).first().ID
|
||||
ORPHAN_ID = db.query(RequestType, RequestType.Name == ORPHAN).first().ID
|
||||
MERGE_ID = db.query(RequestType, RequestType.Name == MERGE).first().ID
|
||||
|
|
|
@ -1,23 +1,20 @@
|
|||
from sqlalchemy import Column, ForeignKey, Integer
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.orm import backref, relationship
|
||||
|
||||
from aurweb import schema
|
||||
from aurweb.db import make_random_value, query
|
||||
from aurweb.models.declarative import Base
|
||||
from aurweb.models.user import User as _User
|
||||
|
||||
|
||||
class Session(Base):
|
||||
__tablename__ = "Sessions"
|
||||
__table__ = schema.Sessions
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {"primary_key": [__table__.c.UsersID]}
|
||||
|
||||
UsersID = Column(
|
||||
Integer, ForeignKey("Users.ID", ondelete="CASCADE"),
|
||||
nullable=False)
|
||||
User = relationship(
|
||||
_User, backref=backref("session", uselist=False),
|
||||
foreign_keys=[UsersID])
|
||||
|
||||
__mapper_args__ = {"primary_key": [UsersID]}
|
||||
foreign_keys=[__table__.c.UsersID])
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
|
|
@ -3,30 +3,23 @@ import tempfile
|
|||
|
||||
from subprocess import PIPE, Popen
|
||||
|
||||
from sqlalchemy import Column, ForeignKey, Integer, String
|
||||
from sqlalchemy.orm import backref, relationship
|
||||
|
||||
from aurweb import schema
|
||||
from aurweb.models.declarative import Base
|
||||
|
||||
|
||||
class SSHPubKey(Base):
|
||||
__tablename__ = "SSHPubKeys"
|
||||
__table__ = schema.SSHPubKeys
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {"primary_key": [__table__.c.Fingerprint]}
|
||||
|
||||
UserID = Column(
|
||||
Integer, ForeignKey("Users.ID", ondelete="CASCADE"),
|
||||
nullable=False)
|
||||
User = relationship(
|
||||
"User", backref=backref("ssh_pub_key", uselist=False),
|
||||
foreign_keys=[UserID])
|
||||
|
||||
Fingerprint = Column(String(44), primary_key=True)
|
||||
|
||||
__mapper_args__ = {"primary_key": Fingerprint}
|
||||
foreign_keys=[__table__.c.UserID])
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
self.UserID = kwargs.get("UserID")
|
||||
self.Fingerprint = kwargs.get("Fingerprint")
|
||||
self.PubKey = kwargs.get("PubKey")
|
||||
super().__init__(**kwargs)
|
||||
|
||||
|
||||
def get_fingerprint(pubkey):
|
||||
|
|
|
@ -1,15 +1,13 @@
|
|||
from sqlalchemy import Column, Integer
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
|
||||
from aurweb import schema
|
||||
from aurweb.models.declarative import Base
|
||||
|
||||
|
||||
class Term(Base):
|
||||
__tablename__ = "Terms"
|
||||
|
||||
ID = Column(Integer, primary_key=True)
|
||||
|
||||
__mapper_args__ = {"primary_key": [ID]}
|
||||
__table__ = schema.Terms
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {"primary_key": [__table__.c.ID]}
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
|
|
@ -1,28 +1,26 @@
|
|||
from sqlalchemy import Column, ForeignKey, Integer
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.orm import backref, relationship
|
||||
|
||||
from aurweb import schema
|
||||
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):
|
||||
__tablename__ = "TU_Votes"
|
||||
__table__ = schema.TU_Votes
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {
|
||||
"primary_key": [__table__.c.VoteID, __table__.c.UserID]
|
||||
}
|
||||
|
||||
VoteID = Column(Integer, ForeignKey("TU_VoteInfo.ID", ondelete="CASCADE"),
|
||||
nullable=False)
|
||||
VoteInfo = relationship(
|
||||
_TUVoteInfo, backref=backref("tu_votes", lazy="dynamic"),
|
||||
foreign_keys=[VoteID])
|
||||
foreign_keys=[__table__.c.VoteID])
|
||||
|
||||
UserID = Column(Integer, ForeignKey("Users.ID", ondelete="CASCADE"),
|
||||
nullable=False)
|
||||
User = relationship(
|
||||
_User, backref=backref("tu_votes", lazy="dynamic"),
|
||||
foreign_keys=[UserID])
|
||||
|
||||
__mapper_args__ = {"primary_key": [VoteID, UserID]}
|
||||
foreign_keys=[__table__.c.UserID])
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
|
|
@ -2,27 +2,22 @@ import typing
|
|||
|
||||
from datetime import datetime
|
||||
|
||||
from sqlalchemy import Column, ForeignKey, Integer
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.orm import backref, relationship
|
||||
|
||||
from aurweb import schema
|
||||
from aurweb.models.declarative import Base
|
||||
from aurweb.models.user import User as _User
|
||||
|
||||
|
||||
class TUVoteInfo(Base):
|
||||
__tablename__ = "TU_VoteInfo"
|
||||
__table__ = schema.TU_VoteInfo
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {"primary_key": [__table__.c.ID]}
|
||||
|
||||
ID = Column(Integer, primary_key=True)
|
||||
|
||||
SubmitterID = Column(
|
||||
Integer, ForeignKey("Users.ID", ondelete="CASCADE"),
|
||||
nullable=False)
|
||||
Submitter = relationship(
|
||||
_User, backref=backref("tu_voteinfo_set", lazy="dynamic"),
|
||||
foreign_keys=[SubmitterID])
|
||||
|
||||
__mapper_args__ = {"primary_key": [ID]}
|
||||
foreign_keys=[__table__.c.SubmitterID])
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
|
|
@ -5,14 +5,14 @@ from datetime import datetime
|
|||
import bcrypt
|
||||
|
||||
from fastapi import Request
|
||||
from sqlalchemy import Column, ForeignKey, Integer, String, or_, text
|
||||
from sqlalchemy import or_
|
||||
from sqlalchemy.orm import backref, relationship
|
||||
|
||||
import aurweb.config
|
||||
import aurweb.models.account_type
|
||||
import aurweb.schema
|
||||
|
||||
from aurweb import db
|
||||
from aurweb import db, schema
|
||||
from aurweb.models.account_type import AccountType as _AccountType
|
||||
from aurweb.models.ban import is_banned
|
||||
from aurweb.models.declarative import Base
|
||||
|
@ -22,23 +22,16 @@ SALT_ROUNDS_DEFAULT = 12
|
|||
|
||||
class User(Base):
|
||||
""" An ORM model of a single Users record. """
|
||||
__tablename__ = "Users"
|
||||
__table__ = schema.Users
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {"primary_key": [__table__.c.ID]}
|
||||
|
||||
ID = Column(Integer, primary_key=True)
|
||||
|
||||
AccountTypeID = Column(
|
||||
Integer, ForeignKey("AccountTypes.ID", ondelete="NO ACTION"),
|
||||
nullable=False, server_default=text("1"))
|
||||
AccountType = relationship(
|
||||
_AccountType,
|
||||
backref=backref("users", lazy="dynamic"),
|
||||
foreign_keys=[AccountTypeID],
|
||||
foreign_keys=[__table__.c.AccountTypeID],
|
||||
uselist=False)
|
||||
|
||||
Passwd = Column(String(255), default=str())
|
||||
|
||||
__mapper_args__ = {"primary_key": [ID]}
|
||||
|
||||
# High-level variables used to track authentication (not in DB).
|
||||
authenticated = False
|
||||
nonce = None
|
||||
|
@ -49,7 +42,7 @@ class User(Base):
|
|||
SALT_ROUNDS_DEFAULT)
|
||||
|
||||
def __init__(self, Passwd: str = str(), **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
super().__init__(**kwargs, Passwd=str())
|
||||
|
||||
# Run this again in the constructor in case we rehashed config.
|
||||
self.salt_rounds = aurweb.config.getint("options", "salt_rounds",
|
||||
|
|
Loading…
Add table
Reference in a new issue